com.idetronic.subur.service.ClpSerializer.java Source code

Java tutorial

Introduction

Here is the source code for com.idetronic.subur.service.ClpSerializer.java

Source

/**
 * Copyright (c) 2000-present 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.idetronic.subur.service;

import com.idetronic.subur.model.AuthorClp;
import com.idetronic.subur.model.AuthorExpertiseClp;
import com.idetronic.subur.model.AuthorResearchInterestClp;
import com.idetronic.subur.model.AuthorSiteClp;
import com.idetronic.subur.model.CopyRequestClp;
import com.idetronic.subur.model.DownloadSummaryClp;
import com.idetronic.subur.model.ExpertiseClp;
import com.idetronic.subur.model.ItemAuthorClp;
import com.idetronic.subur.model.ItemItemTypeClp;
import com.idetronic.subur.model.ItemTypeClp;
import com.idetronic.subur.model.ResearchInterestClp;
import com.idetronic.subur.model.StatDownloadCategoryClp;
import com.idetronic.subur.model.StatDownloadItemTypeClp;
import com.idetronic.subur.model.StatDownloadPeriodClp;
import com.idetronic.subur.model.StatDownloadTagClp;
import com.idetronic.subur.model.StatViewCategoryClp;
import com.idetronic.subur.model.StatViewItemTypeClp;
import com.idetronic.subur.model.StatViewTagClp;
import com.idetronic.subur.model.SuburConfigClp;
import com.idetronic.subur.model.SuburItemClp;
import com.idetronic.subur.model.ViewSummaryClp;

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 Mazlan Mat
 */
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,
                        "Subur-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("Subur-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 = "Subur-portlet";
            }

            return _servletContextName;
        }
    }

    public static Object translateInput(BaseModel<?> oldModel) {
        Class<?> oldModelClass = oldModel.getClass();

        String oldModelClassName = oldModelClass.getName();

        if (oldModelClassName.equals(AuthorClp.class.getName())) {
            return translateInputAuthor(oldModel);
        }

        if (oldModelClassName.equals(AuthorExpertiseClp.class.getName())) {
            return translateInputAuthorExpertise(oldModel);
        }

        if (oldModelClassName.equals(AuthorResearchInterestClp.class.getName())) {
            return translateInputAuthorResearchInterest(oldModel);
        }

        if (oldModelClassName.equals(AuthorSiteClp.class.getName())) {
            return translateInputAuthorSite(oldModel);
        }

        if (oldModelClassName.equals(CopyRequestClp.class.getName())) {
            return translateInputCopyRequest(oldModel);
        }

        if (oldModelClassName.equals(DownloadSummaryClp.class.getName())) {
            return translateInputDownloadSummary(oldModel);
        }

        if (oldModelClassName.equals(ExpertiseClp.class.getName())) {
            return translateInputExpertise(oldModel);
        }

        if (oldModelClassName.equals(ItemAuthorClp.class.getName())) {
            return translateInputItemAuthor(oldModel);
        }

        if (oldModelClassName.equals(ItemItemTypeClp.class.getName())) {
            return translateInputItemItemType(oldModel);
        }

        if (oldModelClassName.equals(ItemTypeClp.class.getName())) {
            return translateInputItemType(oldModel);
        }

        if (oldModelClassName.equals(ResearchInterestClp.class.getName())) {
            return translateInputResearchInterest(oldModel);
        }

        if (oldModelClassName.equals(StatDownloadCategoryClp.class.getName())) {
            return translateInputStatDownloadCategory(oldModel);
        }

        if (oldModelClassName.equals(StatDownloadItemTypeClp.class.getName())) {
            return translateInputStatDownloadItemType(oldModel);
        }

        if (oldModelClassName.equals(StatDownloadPeriodClp.class.getName())) {
            return translateInputStatDownloadPeriod(oldModel);
        }

        if (oldModelClassName.equals(StatDownloadTagClp.class.getName())) {
            return translateInputStatDownloadTag(oldModel);
        }

        if (oldModelClassName.equals(StatViewCategoryClp.class.getName())) {
            return translateInputStatViewCategory(oldModel);
        }

        if (oldModelClassName.equals(StatViewItemTypeClp.class.getName())) {
            return translateInputStatViewItemType(oldModel);
        }

        if (oldModelClassName.equals(StatViewTagClp.class.getName())) {
            return translateInputStatViewTag(oldModel);
        }

        if (oldModelClassName.equals(SuburConfigClp.class.getName())) {
            return translateInputSuburConfig(oldModel);
        }

        if (oldModelClassName.equals(SuburItemClp.class.getName())) {
            return translateInputSuburItem(oldModel);
        }

        if (oldModelClassName.equals(ViewSummaryClp.class.getName())) {
            return translateInputViewSummary(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 translateInputAuthor(BaseModel<?> oldModel) {
        AuthorClp oldClpModel = (AuthorClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getAuthorRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputAuthorExpertise(BaseModel<?> oldModel) {
        AuthorExpertiseClp oldClpModel = (AuthorExpertiseClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getAuthorExpertiseRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputAuthorResearchInterest(BaseModel<?> oldModel) {
        AuthorResearchInterestClp oldClpModel = (AuthorResearchInterestClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getAuthorResearchInterestRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputAuthorSite(BaseModel<?> oldModel) {
        AuthorSiteClp oldClpModel = (AuthorSiteClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getAuthorSiteRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputCopyRequest(BaseModel<?> oldModel) {
        CopyRequestClp oldClpModel = (CopyRequestClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getCopyRequestRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputDownloadSummary(BaseModel<?> oldModel) {
        DownloadSummaryClp oldClpModel = (DownloadSummaryClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getDownloadSummaryRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputExpertise(BaseModel<?> oldModel) {
        ExpertiseClp oldClpModel = (ExpertiseClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getExpertiseRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputItemAuthor(BaseModel<?> oldModel) {
        ItemAuthorClp oldClpModel = (ItemAuthorClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getItemAuthorRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputItemItemType(BaseModel<?> oldModel) {
        ItemItemTypeClp oldClpModel = (ItemItemTypeClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getItemItemTypeRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputItemType(BaseModel<?> oldModel) {
        ItemTypeClp oldClpModel = (ItemTypeClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getItemTypeRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputResearchInterest(BaseModel<?> oldModel) {
        ResearchInterestClp oldClpModel = (ResearchInterestClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getResearchInterestRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputStatDownloadCategory(BaseModel<?> oldModel) {
        StatDownloadCategoryClp oldClpModel = (StatDownloadCategoryClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getStatDownloadCategoryRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputStatDownloadItemType(BaseModel<?> oldModel) {
        StatDownloadItemTypeClp oldClpModel = (StatDownloadItemTypeClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getStatDownloadItemTypeRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputStatDownloadPeriod(BaseModel<?> oldModel) {
        StatDownloadPeriodClp oldClpModel = (StatDownloadPeriodClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getStatDownloadPeriodRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputStatDownloadTag(BaseModel<?> oldModel) {
        StatDownloadTagClp oldClpModel = (StatDownloadTagClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getStatDownloadTagRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputStatViewCategory(BaseModel<?> oldModel) {
        StatViewCategoryClp oldClpModel = (StatViewCategoryClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getStatViewCategoryRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputStatViewItemType(BaseModel<?> oldModel) {
        StatViewItemTypeClp oldClpModel = (StatViewItemTypeClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getStatViewItemTypeRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputStatViewTag(BaseModel<?> oldModel) {
        StatViewTagClp oldClpModel = (StatViewTagClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getStatViewTagRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputSuburConfig(BaseModel<?> oldModel) {
        SuburConfigClp oldClpModel = (SuburConfigClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getSuburConfigRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputSuburItem(BaseModel<?> oldModel) {
        SuburItemClp oldClpModel = (SuburItemClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getSuburItemRemoteModel();

        newModel.setModelAttributes(oldClpModel.getModelAttributes());

        return newModel;
    }

    public static Object translateInputViewSummary(BaseModel<?> oldModel) {
        ViewSummaryClp oldClpModel = (ViewSummaryClp) oldModel;

        BaseModel<?> newModel = oldClpModel.getViewSummaryRemoteModel();

        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.idetronic.subur.model.impl.AuthorImpl")) {
            return translateOutputAuthor(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.idetronic.subur.model.impl.AuthorExpertiseImpl")) {
            return translateOutputAuthorExpertise(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.idetronic.subur.model.impl.AuthorResearchInterestImpl")) {
            return translateOutputAuthorResearchInterest(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.idetronic.subur.model.impl.AuthorSiteImpl")) {
            return translateOutputAuthorSite(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.idetronic.subur.model.impl.CopyRequestImpl")) {
            return translateOutputCopyRequest(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.idetronic.subur.model.impl.DownloadSummaryImpl")) {
            return translateOutputDownloadSummary(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.idetronic.subur.model.impl.ExpertiseImpl")) {
            return translateOutputExpertise(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.idetronic.subur.model.impl.ItemAuthorImpl")) {
            return translateOutputItemAuthor(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.idetronic.subur.model.impl.ItemItemTypeImpl")) {
            return translateOutputItemItemType(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.idetronic.subur.model.impl.ItemTypeImpl")) {
            return translateOutputItemType(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.idetronic.subur.model.impl.ResearchInterestImpl")) {
            return translateOutputResearchInterest(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.idetronic.subur.model.impl.StatDownloadCategoryImpl")) {
            return translateOutputStatDownloadCategory(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.idetronic.subur.model.impl.StatDownloadItemTypeImpl")) {
            return translateOutputStatDownloadItemType(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.idetronic.subur.model.impl.StatDownloadPeriodImpl")) {
            return translateOutputStatDownloadPeriod(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.idetronic.subur.model.impl.StatDownloadTagImpl")) {
            return translateOutputStatDownloadTag(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.idetronic.subur.model.impl.StatViewCategoryImpl")) {
            return translateOutputStatViewCategory(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.idetronic.subur.model.impl.StatViewItemTypeImpl")) {
            return translateOutputStatViewItemType(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.idetronic.subur.model.impl.StatViewTagImpl")) {
            return translateOutputStatViewTag(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.idetronic.subur.model.impl.SuburConfigImpl")) {
            return translateOutputSuburConfig(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.idetronic.subur.model.impl.SuburItemImpl")) {
            return translateOutputSuburItem(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.idetronic.subur.model.impl.ViewSummaryImpl")) {
            return translateOutputViewSummary(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.idetronic.subur.NoSuchAuthorException")) {
            return new com.idetronic.subur.NoSuchAuthorException();
        }

        if (className.equals("com.idetronic.subur.NoSuchAuthorExpertiseException")) {
            return new com.idetronic.subur.NoSuchAuthorExpertiseException();
        }

        if (className.equals("com.idetronic.subur.NoSuchAuthorResearchInterestException")) {
            return new com.idetronic.subur.NoSuchAuthorResearchInterestException();
        }

        if (className.equals("com.idetronic.subur.NoSuchAuthorSiteException")) {
            return new com.idetronic.subur.NoSuchAuthorSiteException();
        }

        if (className.equals("com.idetronic.subur.NoSuchCopyRequestException")) {
            return new com.idetronic.subur.NoSuchCopyRequestException();
        }

        if (className.equals("com.idetronic.subur.NoSuchDownloadSummaryException")) {
            return new com.idetronic.subur.NoSuchDownloadSummaryException();
        }

        if (className.equals("com.idetronic.subur.NoSuchExpertiseException")) {
            return new com.idetronic.subur.NoSuchExpertiseException();
        }

        if (className.equals("com.idetronic.subur.NoSuchItemAuthorException")) {
            return new com.idetronic.subur.NoSuchItemAuthorException();
        }

        if (className.equals("com.idetronic.subur.NoSuchItemItemTypeException")) {
            return new com.idetronic.subur.NoSuchItemItemTypeException();
        }

        if (className.equals("com.idetronic.subur.NoSuchItemTypeException")) {
            return new com.idetronic.subur.NoSuchItemTypeException();
        }

        if (className.equals("com.idetronic.subur.NoSuchResearchInterestException")) {
            return new com.idetronic.subur.NoSuchResearchInterestException();
        }

        if (className.equals("com.idetronic.subur.NoSuchStatDownloadCategoryException")) {
            return new com.idetronic.subur.NoSuchStatDownloadCategoryException();
        }

        if (className.equals("com.idetronic.subur.NoSuchStatDownloadItemTypeException")) {
            return new com.idetronic.subur.NoSuchStatDownloadItemTypeException();
        }

        if (className.equals("com.idetronic.subur.NoSuchStatDownloadPeriodException")) {
            return new com.idetronic.subur.NoSuchStatDownloadPeriodException();
        }

        if (className.equals("com.idetronic.subur.NoSuchStatDownloadTagException")) {
            return new com.idetronic.subur.NoSuchStatDownloadTagException();
        }

        if (className.equals("com.idetronic.subur.NoSuchStatViewCategoryException")) {
            return new com.idetronic.subur.NoSuchStatViewCategoryException();
        }

        if (className.equals("com.idetronic.subur.NoSuchStatViewItemTypeException")) {
            return new com.idetronic.subur.NoSuchStatViewItemTypeException();
        }

        if (className.equals("com.idetronic.subur.NoSuchStatViewTagException")) {
            return new com.idetronic.subur.NoSuchStatViewTagException();
        }

        if (className.equals("com.idetronic.subur.NoSuchConfigException")) {
            return new com.idetronic.subur.NoSuchConfigException();
        }

        if (className.equals("com.idetronic.subur.NoSuchItemException")) {
            return new com.idetronic.subur.NoSuchItemException();
        }

        if (className.equals("com.idetronic.subur.NoSuchViewSummaryException")) {
            return new com.idetronic.subur.NoSuchViewSummaryException();
        }

        return throwable;
    }

    public static Object translateOutputAuthor(BaseModel<?> oldModel) {
        AuthorClp newModel = new AuthorClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setAuthorRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputAuthorExpertise(BaseModel<?> oldModel) {
        AuthorExpertiseClp newModel = new AuthorExpertiseClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setAuthorExpertiseRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputAuthorResearchInterest(BaseModel<?> oldModel) {
        AuthorResearchInterestClp newModel = new AuthorResearchInterestClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setAuthorResearchInterestRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputAuthorSite(BaseModel<?> oldModel) {
        AuthorSiteClp newModel = new AuthorSiteClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setAuthorSiteRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputCopyRequest(BaseModel<?> oldModel) {
        CopyRequestClp newModel = new CopyRequestClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setCopyRequestRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputDownloadSummary(BaseModel<?> oldModel) {
        DownloadSummaryClp newModel = new DownloadSummaryClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setDownloadSummaryRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputExpertise(BaseModel<?> oldModel) {
        ExpertiseClp newModel = new ExpertiseClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setExpertiseRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputItemAuthor(BaseModel<?> oldModel) {
        ItemAuthorClp newModel = new ItemAuthorClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setItemAuthorRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputItemItemType(BaseModel<?> oldModel) {
        ItemItemTypeClp newModel = new ItemItemTypeClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setItemItemTypeRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputItemType(BaseModel<?> oldModel) {
        ItemTypeClp newModel = new ItemTypeClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setItemTypeRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputResearchInterest(BaseModel<?> oldModel) {
        ResearchInterestClp newModel = new ResearchInterestClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setResearchInterestRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputStatDownloadCategory(BaseModel<?> oldModel) {
        StatDownloadCategoryClp newModel = new StatDownloadCategoryClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setStatDownloadCategoryRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputStatDownloadItemType(BaseModel<?> oldModel) {
        StatDownloadItemTypeClp newModel = new StatDownloadItemTypeClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setStatDownloadItemTypeRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputStatDownloadPeriod(BaseModel<?> oldModel) {
        StatDownloadPeriodClp newModel = new StatDownloadPeriodClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setStatDownloadPeriodRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputStatDownloadTag(BaseModel<?> oldModel) {
        StatDownloadTagClp newModel = new StatDownloadTagClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setStatDownloadTagRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputStatViewCategory(BaseModel<?> oldModel) {
        StatViewCategoryClp newModel = new StatViewCategoryClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setStatViewCategoryRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputStatViewItemType(BaseModel<?> oldModel) {
        StatViewItemTypeClp newModel = new StatViewItemTypeClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setStatViewItemTypeRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputStatViewTag(BaseModel<?> oldModel) {
        StatViewTagClp newModel = new StatViewTagClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setStatViewTagRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputSuburConfig(BaseModel<?> oldModel) {
        SuburConfigClp newModel = new SuburConfigClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setSuburConfigRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputSuburItem(BaseModel<?> oldModel) {
        SuburItemClp newModel = new SuburItemClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setSuburItemRemoteModel(oldModel);

        return newModel;
    }

    public static Object translateOutputViewSummary(BaseModel<?> oldModel) {
        ViewSummaryClp newModel = new ViewSummaryClp();

        newModel.setModelAttributes(oldModel.getModelAttributes());

        newModel.setViewSummaryRemoteModel(oldModel);

        return newModel;
    }

    private static Log _log = LogFactoryUtil.getLog(ClpSerializer.class);
    private static String _servletContextName;
    private static boolean _useReflectionToTranslateThrowable = true;
}