package br.mp.mprj.portal.portlet.gestaomensagens.service.model;

import br.mp.mprj.portal.portlet.gestaomensagens.service.service.AnexoMensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.ClpSerializer;

import com.liferay.portal.kernel.bean.AutoEscapeBeanHandler;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.util.ProxyUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.model.BaseModel;
import com.liferay.portal.model.impl.BaseModelImpl;
import com.liferay.portal.util.PortalUtil;

import java.io.Serializable;

import java.lang.reflect.Method;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;


public class AnexoMensagemClp extends BaseModelImpl<AnexoMensagem>
    implements AnexoMensagem {
    private String _uuid;
    private long _anexoMensagemId;
    private long _mensagemId;
    private long _companyId;
    private long _groupId;
    private long _userId;
    private String _userUuid;
    private Date _dataCriacao;
    private String _anexoUrl;
    private String _fileName;
    private String _versao;
    private String _contentType;
    private boolean _ativo;
    private long _anexoFileEntryId;
    private String _anexoPath;
    private BaseModel<?> _anexoMensagemRemoteModel;
    private Class<?> _clpSerializerClass = br.mp.mprj.portal.portlet.gestaomensagens.service.service.ClpSerializer.class;

    public AnexoMensagemClp() {
    }

    @Override
    public Class<?> getModelClass() {
        return AnexoMensagem.class;
    }

    @Override
    public String getModelClassName() {
        return AnexoMensagem.class.getName();
    }

    @Override
    public long getPrimaryKey() {
        return _anexoMensagemId;
    }

    @Override
    public void setPrimaryKey(long primaryKey) {
        setAnexoMensagemId(primaryKey);
    }

    @Override
    public Serializable getPrimaryKeyObj() {
        return _anexoMensagemId;
    }

    @Override
    public void setPrimaryKeyObj(Serializable primaryKeyObj) {
        setPrimaryKey(((Long) primaryKeyObj).longValue());
    }

    @Override
    public Map<String, Object> getModelAttributes() {
        Map<String, Object> attributes = new HashMap<String, Object>();

        attributes.put("uuid", getUuid());
        attributes.put("anexoMensagemId", getAnexoMensagemId());
        attributes.put("mensagemId", getMensagemId());
        attributes.put("companyId", getCompanyId());
        attributes.put("groupId", getGroupId());
        attributes.put("userId", getUserId());
        attributes.put("dataCriacao", getDataCriacao());
        attributes.put("anexoUrl", getAnexoUrl());
        attributes.put("fileName", getFileName());
        attributes.put("versao", getVersao());
        attributes.put("contentType", getContentType());
        attributes.put("ativo", getAtivo());
        attributes.put("anexoFileEntryId", getAnexoFileEntryId());
        attributes.put("anexoPath", getAnexoPath());

        return attributes;
    }

    @Override
    public void setModelAttributes(Map<String, Object> attributes) {
        String uuid = (String) attributes.get("uuid");

        if (uuid != null) {
            setUuid(uuid);
        }

        Long anexoMensagemId = (Long) attributes.get("anexoMensagemId");

        if (anexoMensagemId != null) {
            setAnexoMensagemId(anexoMensagemId);
        }

        Long mensagemId = (Long) attributes.get("mensagemId");

        if (mensagemId != null) {
            setMensagemId(mensagemId);
        }

        Long companyId = (Long) attributes.get("companyId");

        if (companyId != null) {
            setCompanyId(companyId);
        }

        Long groupId = (Long) attributes.get("groupId");

        if (groupId != null) {
            setGroupId(groupId);
        }

        Long userId = (Long) attributes.get("userId");

        if (userId != null) {
            setUserId(userId);
        }

        Date dataCriacao = (Date) attributes.get("dataCriacao");

        if (dataCriacao != null) {
            setDataCriacao(dataCriacao);
        }

        String anexoUrl = (String) attributes.get("anexoUrl");

        if (anexoUrl != null) {
            setAnexoUrl(anexoUrl);
        }

        String fileName = (String) attributes.get("fileName");

        if (fileName != null) {
            setFileName(fileName);
        }

        String versao = (String) attributes.get("versao");

        if (versao != null) {
            setVersao(versao);
        }

        String contentType = (String) attributes.get("contentType");

        if (contentType != null) {
            setContentType(contentType);
        }

        Boolean ativo = (Boolean) attributes.get("ativo");

        if (ativo != null) {
            setAtivo(ativo);
        }

        Long anexoFileEntryId = (Long) attributes.get("anexoFileEntryId");

        if (anexoFileEntryId != null) {
            setAnexoFileEntryId(anexoFileEntryId);
        }

        String anexoPath = (String) attributes.get("anexoPath");

        if (anexoPath != null) {
            setAnexoPath(anexoPath);
        }
    }

    @Override
    public String getUuid() {
        return _uuid;
    }

    @Override
    public void setUuid(String uuid) {
        _uuid = uuid;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setUuid", String.class);

                method.invoke(_anexoMensagemRemoteModel, uuid);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public long getAnexoMensagemId() {
        return _anexoMensagemId;
    }

    @Override
    public void setAnexoMensagemId(long anexoMensagemId) {
        _anexoMensagemId = anexoMensagemId;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setAnexoMensagemId", long.class);

                method.invoke(_anexoMensagemRemoteModel, anexoMensagemId);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public long getMensagemId() {
        return _mensagemId;
    }

    @Override
    public void setMensagemId(long mensagemId) {
        _mensagemId = mensagemId;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setMensagemId", long.class);

                method.invoke(_anexoMensagemRemoteModel, mensagemId);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public long getCompanyId() {
        return _companyId;
    }

    @Override
    public void setCompanyId(long companyId) {
        _companyId = companyId;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setCompanyId", long.class);

                method.invoke(_anexoMensagemRemoteModel, companyId);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public long getGroupId() {
        return _groupId;
    }

    @Override
    public void setGroupId(long groupId) {
        _groupId = groupId;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setGroupId", long.class);

                method.invoke(_anexoMensagemRemoteModel, groupId);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public long getUserId() {
        return _userId;
    }

    @Override
    public void setUserId(long userId) {
        _userId = userId;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setUserId", long.class);

                method.invoke(_anexoMensagemRemoteModel, userId);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public String getUserUuid() throws SystemException {
        return PortalUtil.getUserValue(getUserId(), "uuid", _userUuid);
    }

    @Override
    public void setUserUuid(String userUuid) {
        _userUuid = userUuid;
    }

    @Override
    public Date getDataCriacao() {
        return _dataCriacao;
    }

    @Override
    public void setDataCriacao(Date dataCriacao) {
        _dataCriacao = dataCriacao;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setDataCriacao", Date.class);

                method.invoke(_anexoMensagemRemoteModel, dataCriacao);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public String getAnexoUrl() {
        return _anexoUrl;
    }

    @Override
    public void setAnexoUrl(String anexoUrl) {
        _anexoUrl = anexoUrl;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setAnexoUrl", String.class);

                method.invoke(_anexoMensagemRemoteModel, anexoUrl);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public String getFileName() {
        return _fileName;
    }

    @Override
    public void setFileName(String fileName) {
        _fileName = fileName;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setFileName", String.class);

                method.invoke(_anexoMensagemRemoteModel, fileName);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public String getVersao() {
        return _versao;
    }

    @Override
    public void setVersao(String versao) {
        _versao = versao;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setVersao", String.class);

                method.invoke(_anexoMensagemRemoteModel, versao);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public String getContentType() {
        return _contentType;
    }

    @Override
    public void setContentType(String contentType) {
        _contentType = contentType;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setContentType", String.class);

                method.invoke(_anexoMensagemRemoteModel, contentType);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public boolean getAtivo() {
        return _ativo;
    }

    @Override
    public boolean isAtivo() {
        return _ativo;
    }

    @Override
    public void setAtivo(boolean ativo) {
        _ativo = ativo;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setAtivo", boolean.class);

                method.invoke(_anexoMensagemRemoteModel, ativo);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public long getAnexoFileEntryId() {
        return _anexoFileEntryId;
    }

    @Override
    public void setAnexoFileEntryId(long anexoFileEntryId) {
        _anexoFileEntryId = anexoFileEntryId;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setAnexoFileEntryId",
                        long.class);

                method.invoke(_anexoMensagemRemoteModel, anexoFileEntryId);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public String getAnexoPath() {
        return _anexoPath;
    }

    @Override
    public void setAnexoPath(String anexoPath) {
        _anexoPath = anexoPath;

        if (_anexoMensagemRemoteModel != null) {
            try {
                Class<?> clazz = _anexoMensagemRemoteModel.getClass();

                Method method = clazz.getMethod("setAnexoPath", String.class);

                method.invoke(_anexoMensagemRemoteModel, anexoPath);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    public BaseModel<?> getAnexoMensagemRemoteModel() {
        return _anexoMensagemRemoteModel;
    }

    public void setAnexoMensagemRemoteModel(
        BaseModel<?> anexoMensagemRemoteModel) {
        _anexoMensagemRemoteModel = anexoMensagemRemoteModel;
    }

    public Object invokeOnRemoteModel(String methodName,
        Class<?>[] parameterTypes, Object[] parameterValues)
        throws Exception {
        Object[] remoteParameterValues = new Object[parameterValues.length];

        for (int i = 0; i < parameterValues.length; i++) {
            if (parameterValues[i] != null) {
                remoteParameterValues[i] = ClpSerializer.translateInput(parameterValues[i]);
            }
        }

        Class<?> remoteModelClass = _anexoMensagemRemoteModel.getClass();

        ClassLoader remoteModelClassLoader = remoteModelClass.getClassLoader();

        Class<?>[] remoteParameterTypes = new Class[parameterTypes.length];

        for (int i = 0; i < parameterTypes.length; i++) {
            if (parameterTypes[i].isPrimitive()) {
                remoteParameterTypes[i] = parameterTypes[i];
            } else {
                String parameterTypeName = parameterTypes[i].getName();

                remoteParameterTypes[i] = remoteModelClassLoader.loadClass(parameterTypeName);
            }
        }

        Method method = remoteModelClass.getMethod(methodName,
                remoteParameterTypes);

        Object returnValue = method.invoke(_anexoMensagemRemoteModel,
                remoteParameterValues);

        if (returnValue != null) {
            returnValue = ClpSerializer.translateOutput(returnValue);
        }

        return returnValue;
    }

    @Override
    public void persist() throws SystemException {
        if (this.isNew()) {
            AnexoMensagemLocalServiceUtil.addAnexoMensagem(this);
        } else {
            AnexoMensagemLocalServiceUtil.updateAnexoMensagem(this);
        }
    }

    @Override
    public AnexoMensagem toEscapedModel() {
        return (AnexoMensagem) ProxyUtil.newProxyInstance(AnexoMensagem.class.getClassLoader(),
            new Class[] { AnexoMensagem.class }, new AutoEscapeBeanHandler(this));
    }

    @Override
    public Object clone() {
        AnexoMensagemClp clone = new AnexoMensagemClp();

        clone.setUuid(getUuid());
        clone.setAnexoMensagemId(getAnexoMensagemId());
        clone.setMensagemId(getMensagemId());
        clone.setCompanyId(getCompanyId());
        clone.setGroupId(getGroupId());
        clone.setUserId(getUserId());
        clone.setDataCriacao(getDataCriacao());
        clone.setAnexoUrl(getAnexoUrl());
        clone.setFileName(getFileName());
        clone.setVersao(getVersao());
        clone.setContentType(getContentType());
        clone.setAtivo(getAtivo());
        clone.setAnexoFileEntryId(getAnexoFileEntryId());
        clone.setAnexoPath(getAnexoPath());

        return clone;
    }

    @Override
    public int compareTo(AnexoMensagem anexoMensagem) {
        long primaryKey = anexoMensagem.getPrimaryKey();

        if (getPrimaryKey() < primaryKey) {
            return -1;
        } else if (getPrimaryKey() > primaryKey) {
            return 1;
        } else {
            return 0;
        }
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

        if (!(obj instanceof AnexoMensagemClp)) {
            return false;
        }

        AnexoMensagemClp anexoMensagem = (AnexoMensagemClp) obj;

        long primaryKey = anexoMensagem.getPrimaryKey();

        if (getPrimaryKey() == primaryKey) {
            return true;
        } else {
            return false;
        }
    }

    public Class<?> getClpSerializerClass() {
        return _clpSerializerClass;
    }

    @Override
    public int hashCode() {
        return (int) getPrimaryKey();
    }

    @Override
    public String toString() {
        StringBundler sb = new StringBundler(29);

        sb.append("{uuid=");
        sb.append(getUuid());
        sb.append(", anexoMensagemId=");
        sb.append(getAnexoMensagemId());
        sb.append(", mensagemId=");
        sb.append(getMensagemId());
        sb.append(", companyId=");
        sb.append(getCompanyId());
        sb.append(", groupId=");
        sb.append(getGroupId());
        sb.append(", userId=");
        sb.append(getUserId());
        sb.append(", dataCriacao=");
        sb.append(getDataCriacao());
        sb.append(", anexoUrl=");
        sb.append(getAnexoUrl());
        sb.append(", fileName=");
        sb.append(getFileName());
        sb.append(", versao=");
        sb.append(getVersao());
        sb.append(", contentType=");
        sb.append(getContentType());
        sb.append(", ativo=");
        sb.append(getAtivo());
        sb.append(", anexoFileEntryId=");
        sb.append(getAnexoFileEntryId());
        sb.append(", anexoPath=");
        sb.append(getAnexoPath());
        sb.append("}");

        return sb.toString();
    }

    @Override
    public String toXmlString() {
        StringBundler sb = new StringBundler(46);

        sb.append("<model><model-name>");
        sb.append(
            "br.mp.mprj.portal.portlet.gestaomensagens.service.model.AnexoMensagem");
        sb.append("</model-name>");

        sb.append(
            "<column><column-name>uuid</column-name><column-value><![CDATA[");
        sb.append(getUuid());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>anexoMensagemId</column-name><column-value><![CDATA[");
        sb.append(getAnexoMensagemId());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>mensagemId</column-name><column-value><![CDATA[");
        sb.append(getMensagemId());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>companyId</column-name><column-value><![CDATA[");
        sb.append(getCompanyId());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>groupId</column-name><column-value><![CDATA[");
        sb.append(getGroupId());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>userId</column-name><column-value><![CDATA[");
        sb.append(getUserId());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>dataCriacao</column-name><column-value><![CDATA[");
        sb.append(getDataCriacao());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>anexoUrl</column-name><column-value><![CDATA[");
        sb.append(getAnexoUrl());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>fileName</column-name><column-value><![CDATA[");
        sb.append(getFileName());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>versao</column-name><column-value><![CDATA[");
        sb.append(getVersao());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>contentType</column-name><column-value><![CDATA[");
        sb.append(getContentType());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>ativo</column-name><column-value><![CDATA[");
        sb.append(getAtivo());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>anexoFileEntryId</column-name><column-value><![CDATA[");
        sb.append(getAnexoFileEntryId());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>anexoPath</column-name><column-value><![CDATA[");
        sb.append(getAnexoPath());
        sb.append("]]></column-value></column>");

        sb.append("</model>");

        return sb.toString();
    }
}
