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

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

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 MensagemWorkflowClp extends BaseModelImpl<MensagemWorkflow>
    implements MensagemWorkflow {
    private String _uuid;
    private long _mensagemWorkflowId;
    private long _mensagemId;
    private long _userId;
    private String _userUuid;
    private int _status;
    private Date _data;
    private String _comentario;
    private BaseModel<?> _mensagemWorkflowRemoteModel;
    private Class<?> _clpSerializerClass = br.mp.mprj.portal.portlet.gestaomensagens.service.service.ClpSerializer.class;

    public MensagemWorkflowClp() {
    }

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

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

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

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

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

    @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("mensagemWorkflowId", getMensagemWorkflowId());
        attributes.put("mensagemId", getMensagemId());
        attributes.put("userId", getUserId());
        attributes.put("status", getStatus());
        attributes.put("data", getData());
        attributes.put("comentario", getComentario());

        return attributes;
    }

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

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

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

        if (mensagemWorkflowId != null) {
            setMensagemWorkflowId(mensagemWorkflowId);
        }

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

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

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

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

        Integer status = (Integer) attributes.get("status");

        if (status != null) {
            setStatus(status);
        }

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

        if (data != null) {
            setData(data);
        }

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

        if (comentario != null) {
            setComentario(comentario);
        }
    }

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

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

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

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

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

    @Override
    public long getMensagemWorkflowId() {
        return _mensagemWorkflowId;
    }

    @Override
    public void setMensagemWorkflowId(long mensagemWorkflowId) {
        _mensagemWorkflowId = mensagemWorkflowId;

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

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

                method.invoke(_mensagemWorkflowRemoteModel, mensagemWorkflowId);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

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

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

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

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

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

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

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

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

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

                method.invoke(_mensagemWorkflowRemoteModel, 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 int getStatus() {
        return _status;
    }

    @Override
    public void setStatus(int status) {
        _status = status;

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

                Method method = clazz.getMethod("setStatus", int.class);

                method.invoke(_mensagemWorkflowRemoteModel, status);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public Date getData() {
        return _data;
    }

    @Override
    public void setData(Date data) {
        _data = data;

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

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

                method.invoke(_mensagemWorkflowRemoteModel, data);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    @Override
    public String getComentario() {
        return _comentario;
    }

    @Override
    public void setComentario(String comentario) {
        _comentario = comentario;

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

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

                method.invoke(_mensagemWorkflowRemoteModel, comentario);
            } catch (Exception e) {
                throw new UnsupportedOperationException(e);
            }
        }
    }

    public BaseModel<?> getMensagemWorkflowRemoteModel() {
        return _mensagemWorkflowRemoteModel;
    }

    public void setMensagemWorkflowRemoteModel(
        BaseModel<?> mensagemWorkflowRemoteModel) {
        _mensagemWorkflowRemoteModel = mensagemWorkflowRemoteModel;
    }

    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 = _mensagemWorkflowRemoteModel.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(_mensagemWorkflowRemoteModel,
                remoteParameterValues);

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

        return returnValue;
    }

    @Override
    public void persist() throws SystemException {
        if (this.isNew()) {
            MensagemWorkflowLocalServiceUtil.addMensagemWorkflow(this);
        } else {
            MensagemWorkflowLocalServiceUtil.updateMensagemWorkflow(this);
        }
    }

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

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

        clone.setUuid(getUuid());
        clone.setMensagemWorkflowId(getMensagemWorkflowId());
        clone.setMensagemId(getMensagemId());
        clone.setUserId(getUserId());
        clone.setStatus(getStatus());
        clone.setData(getData());
        clone.setComentario(getComentario());

        return clone;
    }

    @Override
    public int compareTo(MensagemWorkflow mensagemWorkflow) {
        long primaryKey = mensagemWorkflow.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 MensagemWorkflowClp)) {
            return false;
        }

        MensagemWorkflowClp mensagemWorkflow = (MensagemWorkflowClp) obj;

        long primaryKey = mensagemWorkflow.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(15);

        sb.append("{uuid=");
        sb.append(getUuid());
        sb.append(", mensagemWorkflowId=");
        sb.append(getMensagemWorkflowId());
        sb.append(", mensagemId=");
        sb.append(getMensagemId());
        sb.append(", userId=");
        sb.append(getUserId());
        sb.append(", status=");
        sb.append(getStatus());
        sb.append(", data=");
        sb.append(getData());
        sb.append(", comentario=");
        sb.append(getComentario());
        sb.append("}");

        return sb.toString();
    }

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

        sb.append("<model><model-name>");
        sb.append(
            "br.mp.mprj.portal.portlet.gestaomensagens.service.model.MensagemWorkflow");
        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>mensagemWorkflowId</column-name><column-value><![CDATA[");
        sb.append(getMensagemWorkflowId());
        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>userId</column-name><column-value><![CDATA[");
        sb.append(getUserId());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>status</column-name><column-value><![CDATA[");
        sb.append(getStatus());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>data</column-name><column-value><![CDATA[");
        sb.append(getData());
        sb.append("]]></column-value></column>");
        sb.append(
            "<column><column-name>comentario</column-name><column-value><![CDATA[");
        sb.append(getComentario());
        sb.append("]]></column-value></column>");

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

        return sb.toString();
    }
}
