/docroot/WEB-INF/service/com/liferay/docs/guestbook/service/ClpSerializer.java
Java | 341 lines | 230 code | 95 blank | 16 comment | 38 complexity | 89f41424a18a58b4df5e067ed8d16c30 MD5 | raw file
- /**
- * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
- package com.liferay.docs.guestbook.service;
- import com.liferay.docs.guestbook.model.EntryClp;
- import com.liferay.docs.guestbook.model.GuestbookClp;
- import com.liferay.portal.kernel.exception.PortalException;
- import com.liferay.portal.kernel.exception.SystemException;
- import com.liferay.portal.kernel.io.unsync.UnsyncByteArrayInputStream;
- import com.liferay.portal.kernel.io.unsync.UnsyncByteArrayOutputStream;
- import com.liferay.portal.kernel.log.Log;
- import com.liferay.portal.kernel.log.LogFactoryUtil;
- import com.liferay.portal.kernel.util.ClassLoaderObjectInputStream;
- import com.liferay.portal.kernel.util.PropsUtil;
- import com.liferay.portal.kernel.util.Validator;
- import com.liferay.portal.model.BaseModel;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.lang.reflect.Method;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * @author Rich Sezov
- */
- public class ClpSerializer {
- public static String getServletContextName() {
- if (Validator.isNotNull(_servletContextName)) {
- return _servletContextName;
- }
-
- synchronized (ClpSerializer.class) {
- if (Validator.isNotNull(_servletContextName)) {
- return _servletContextName;
- }
-
- try {
- ClassLoader classLoader = ClpSerializer.class.getClassLoader();
-
- Class<?> portletPropsClass = classLoader.loadClass("com.liferay.util.portlet.PortletProps");
-
- Method getMethod = portletPropsClass.getMethod("get", new Class<?>[] { String.class });
-
- String portletPropsServletContextName = (String) getMethod.invoke(null, "guestbook-portlet-deployment-context");
-
- if (Validator.isNotNull(portletPropsServletContextName)) {
- _servletContextName = portletPropsServletContextName;
- }
- } catch (Throwable t) {
- if (_log.isInfoEnabled()) {
- _log.info("Unable to locate deployment context from portlet properties");
- }
- }
-
- if (Validator.isNull(_servletContextName)) {
- try {
- String propsUtilServletContextName = PropsUtil.get("guestbook-portlet-deployment-context");
-
- if (Validator.isNotNull(propsUtilServletContextName)) {
- _servletContextName = propsUtilServletContextName;
- }
- } catch (Throwable t) {
- if (_log.isInfoEnabled()) {
- _log.info("Unable to locate deployment context from portal properties");
- }
- }
- }
-
- if (Validator.isNull(_servletContextName)) {
- _servletContextName = "guestbook-portlet";
- }
-
- return _servletContextName;
- }
- }
-
- public static Object translateInput(BaseModel<?> oldModel) {
- Class<?> oldModelClass = oldModel.getClass();
-
- String oldModelClassName = oldModelClass.getName();
-
- if (oldModelClassName.equals(EntryClp.class.getName())) {
- return translateInputEntry(oldModel);
- }
-
- if (oldModelClassName.equals(GuestbookClp.class.getName())) {
- return translateInputGuestbook(oldModel);
- }
-
- return oldModel;
- }
-
- public static Object translateInput(List<Object> oldList) {
- List<Object> newList = new ArrayList<Object>(oldList.size());
-
- for (int i = 0; i < oldList.size(); i++) {
- Object curObj = oldList.get(i);
-
- newList.add(translateInput(curObj));
- }
-
- return newList;
- }
-
- public static Object translateInputEntry(BaseModel<?> oldModel) {
- EntryClp oldClpModel = (EntryClp) oldModel;
-
- BaseModel<?> newModel = oldClpModel.getEntryRemoteModel();
-
- newModel.setModelAttributes(oldClpModel.getModelAttributes());
-
- return newModel;
- }
-
- public static Object translateInputGuestbook(BaseModel<?> oldModel) {
- GuestbookClp oldClpModel = (GuestbookClp) oldModel;
-
- BaseModel<?> newModel = oldClpModel.getGuestbookRemoteModel();
-
- newModel.setModelAttributes(oldClpModel.getModelAttributes());
-
- return newModel;
- }
-
- public static Object translateInput(Object obj) {
- if (obj instanceof BaseModel<?>) {
- return translateInput((BaseModel<?>) obj);
- } else if (obj instanceof List<?>) {
- return translateInput((List<Object>) obj);
- } else {
- return obj;
- }
- }
-
- public static Object translateOutput(BaseModel<?> oldModel) {
- Class<?> oldModelClass = oldModel.getClass();
-
- String oldModelClassName = oldModelClass.getName();
-
- if (oldModelClassName.equals("com.liferay.docs.guestbook.model.impl.EntryImpl")) {
- return translateOutputEntry(oldModel);
- } else if (oldModelClassName.endsWith("Clp")) {
- try {
- ClassLoader classLoader = ClpSerializer.class.getClassLoader();
-
- Method getClpSerializerClassMethod = oldModelClass.getMethod("getClpSerializerClass");
-
- Class<?> oldClpSerializerClass = (Class<?>) getClpSerializerClassMethod.invoke(oldModel);
-
- Class<?> newClpSerializerClass = classLoader.loadClass(oldClpSerializerClass.getName());
-
- Method translateOutputMethod = newClpSerializerClass.getMethod("translateOutput", BaseModel.class);
-
- Class<?> oldModelModelClass = oldModel.getModelClass();
-
- Method getRemoteModelMethod = oldModelClass.getMethod("get" + oldModelModelClass.getSimpleName() + "RemoteModel");
-
- Object oldRemoteModel = getRemoteModelMethod.invoke(oldModel);
-
- BaseModel<?> newModel = (BaseModel<?>) translateOutputMethod.invoke(null, oldRemoteModel);
-
- return newModel;
- } catch (Throwable t) {
- if (_log.isInfoEnabled()) {
- _log.info("Unable to translate " + oldModelClassName, t);
- }
- }
- }
-
- if (oldModelClassName.equals("com.liferay.docs.guestbook.model.impl.GuestbookImpl")) {
- return translateOutputGuestbook(oldModel);
- } else if (oldModelClassName.endsWith("Clp")) {
- try {
- ClassLoader classLoader = ClpSerializer.class.getClassLoader();
-
- Method getClpSerializerClassMethod = oldModelClass.getMethod("getClpSerializerClass");
-
- Class<?> oldClpSerializerClass = (Class<?>) getClpSerializerClassMethod.invoke(oldModel);
-
- Class<?> newClpSerializerClass = classLoader.loadClass(oldClpSerializerClass.getName());
-
- Method translateOutputMethod = newClpSerializerClass.getMethod("translateOutput", BaseModel.class);
-
- Class<?> oldModelModelClass = oldModel.getModelClass();
-
- Method getRemoteModelMethod = oldModelClass.getMethod("get" + oldModelModelClass.getSimpleName() + "RemoteModel");
-
- Object oldRemoteModel = getRemoteModelMethod.invoke(oldModel);
-
- BaseModel<?> newModel = (BaseModel<?>) translateOutputMethod.invoke(null, oldRemoteModel);
-
- return newModel;
- } catch (Throwable t) {
- if (_log.isInfoEnabled()) {
- _log.info("Unable to translate " + oldModelClassName, t);
- }
- }
- }
-
- return oldModel;
- }
-
- public static Object translateOutput(List<Object> oldList) {
- List<Object> newList = new ArrayList<Object>(oldList.size());
-
- for (int i = 0; i < oldList.size(); i++) {
- Object curObj = oldList.get(i);
-
- newList.add(translateOutput(curObj));
- }
-
- return newList;
- }
-
- public static Object translateOutput(Object obj) {
- if (obj instanceof BaseModel<?>) {
- return translateOutput((BaseModel<?>) obj);
- } else if (obj instanceof List<?>) {
- return translateOutput((List<Object>) obj);
- } else {
- return obj;
- }
- }
-
- public static Throwable translateThrowable(Throwable throwable) {
- if (_useReflectionToTranslateThrowable) {
- try {
- UnsyncByteArrayOutputStream unsyncByteArrayOutputStream = new UnsyncByteArrayOutputStream();
- ObjectOutputStream objectOutputStream = new ObjectOutputStream(unsyncByteArrayOutputStream);
-
- objectOutputStream.writeObject(throwable);
-
- objectOutputStream.flush();
- objectOutputStream.close();
-
- UnsyncByteArrayInputStream unsyncByteArrayInputStream = new UnsyncByteArrayInputStream(
- unsyncByteArrayOutputStream.unsafeGetByteArray(), 0, unsyncByteArrayOutputStream.size());
-
- Thread currentThread = Thread.currentThread();
-
- ClassLoader contextClassLoader = currentThread.getContextClassLoader();
-
- ObjectInputStream objectInputStream = new ClassLoaderObjectInputStream(unsyncByteArrayInputStream, contextClassLoader);
-
- throwable = (Throwable) objectInputStream.readObject();
-
- objectInputStream.close();
-
- return throwable;
- } catch (SecurityException se) {
- if (_log.isInfoEnabled()) {
- _log.info("Do not use reflection to translate throwable");
- }
-
- _useReflectionToTranslateThrowable = false;
- } catch (Throwable throwable2) {
- _log.error(throwable2, throwable2);
-
- return throwable2;
- }
- }
-
- Class<?> clazz = throwable.getClass();
-
- String className = clazz.getName();
-
- if (className.equals(PortalException.class.getName())) {
- return new PortalException();
- }
-
- if (className.equals(SystemException.class.getName())) {
- return new SystemException();
- }
-
- if (className.equals("com.liferay.docs.guestbook.EntryEmailException")) {
- return new com.liferay.docs.guestbook.EntryEmailException();
- }
-
- if (className.equals("com.liferay.docs.guestbook.EntryMessageException")) {
- return new com.liferay.docs.guestbook.EntryMessageException();
- }
-
- if (className.equals("com.liferay.docs.guestbook.EntryNameException")) {
- return new com.liferay.docs.guestbook.EntryNameException();
- }
-
- if (className.equals("com.liferay.docs.guestbook.GuestbookNameException")) {
- return new com.liferay.docs.guestbook.GuestbookNameException();
- }
-
- if (className.equals("com.liferay.docs.guestbook.NoSuchEntryException")) {
- return new com.liferay.docs.guestbook.NoSuchEntryException();
- }
-
- if (className.equals("com.liferay.docs.guestbook.NoSuchGuestbookException")) {
- return new com.liferay.docs.guestbook.NoSuchGuestbookException();
- }
-
- return throwable;
- }
-
- public static Object translateOutputEntry(BaseModel<?> oldModel) {
- EntryClp newModel = new EntryClp();
-
- newModel.setModelAttributes(oldModel.getModelAttributes());
-
- newModel.setEntryRemoteModel(oldModel);
-
- return newModel;
- }
-
- public static Object translateOutputGuestbook(BaseModel<?> oldModel) {
- GuestbookClp newModel = new GuestbookClp();
-
- newModel.setModelAttributes(oldModel.getModelAttributes());
-
- newModel.setGuestbookRemoteModel(oldModel);
-
- return newModel;
- }
-
- private static Log _log = LogFactoryUtil.getLog(ClpSerializer.class);
- private static String _servletContextName;
- private static boolean _useReflectionToTranslateThrowable = true;
- }