package com.ejie.m62fb.model.tipos;

import java.io.Serializable;

import org.springframework.context.i18n.LocaleContextHolder;

import com.ejie.m62fb.utils.constants.AppConstantes;

/**
 * <p>
 * <code>AbstractTipoGenerico</code>
 * </p>
 * <p>
 * Guarda las descripciones de los posibles valores de cada c&oacute;digo
 * empleado en las dem&aacute;s tablas de la aplicaci&oacute;n
 * </p>
 * 
XXXX
 * 
 */

public abstract class AbstractTipoGenericoR09 implements Serializable {

	private static final long serialVersionUID = -4861029843156656602L;

	/**
	 * Pk de la tabla e identificador unico del registro
	 */
	protected String idElereg;

	/**
	 * Tipo combo, que identifica una Tabla de Tipos concreta.
	 */
	protected String codTipoEntidad;

	/**
	 * Descripci&oacute;n del Valor concreto del C&oacute;digo (COD_TABLA) en
	 * Castellano
	 */
	protected String descripcionEs;
	/**
	 * Descripci&oacute;n del Valor concreto del C&oacute;digo (COD_TABLA) en
	 * Euskera
	 */
	protected String descripcionEu;

	/**
	 * Valor del codigo dentro de cada tipo
	 */
	protected String codElemClasif;

	/**
	 * Constructor por defecto
	 */
	public AbstractTipoGenericoR09() {
		super();
	}

	/**
	 * Constructor con el valor
	 * 
	 * @param codTipoEntidad
	 *            N&uacute;mero de Registro que identifica el Tipo de la clase.
	 */
	public AbstractTipoGenericoR09(final String codTipoEntidad) {
		super();
		this.codTipoEntidad = codTipoEntidad;
	}

	/**
	 * Constructor
	 * 
	 * @param idElereg
	 *            String
	 * @param descripcionEs
	 *            String
	 * @param descripcionEu
	 *            String
	 */
	public AbstractTipoGenericoR09(String idElereg, String descripcionEs,
			String descripcionEu) {
		super();
		this.idElereg = idElereg;
		this.descripcionEs = descripcionEs;
		this.descripcionEu = descripcionEu;
	}

	/**
	 * Constructor para crear un filtro solo por Id.
	 * 
	 * @param codTipoEntidad
	 *            N&uacute;mero de Registro que identifica el Tipo de la clase.
	 * @param idElereg
	 *            C&oacute;digo de la Tabla
	 */
	public AbstractTipoGenericoR09(final String codTipoEntidad,
			final String idElereg) {
		super();
		this.idElereg = idElereg;
		this.codTipoEntidad = codTipoEntidad;
	}

	/**
	 * Constructor con los atributos del tipo
	 * 
	 * @param codTipoEntidad
	 *            N&uacute;mero de Registro
	 * @param idElereg
	 *            Valor del combo
	 * @param descripcionEs
	 *            Descripci&oacute;n en Castellano
	 * @param descripcionEu
	 *            Descripci&oacute;n en Euskera
	 * @param numOrden
	 *            N&uacute;mero de orden
	 */
	public AbstractTipoGenericoR09(final String codTipoEntidad,
			final String idElereg, final String descripcionEs,
			final String descripcionEu) {
		super();
		this.idElereg = idElereg;
		this.codTipoEntidad = codTipoEntidad;
		this.descripcionEs = descripcionEs;
		this.descripcionEu = descripcionEu;
	}

	/**
	 * Method 'getIdElereg'
	 * 
	 * @return idElereg
	 */
	public String getIdElereg() {
		return this.idElereg;
	}

	/**
	 * Method 'setIdElereg'
	 * 
	 * @param idElereg
	 *            String
	 */
	public void setIdElereg(String idElereg) {
		this.idElereg = idElereg;
	}

	/**
	 * Method 'getCodTipoEntidad'
	 * 
	 * @return codTipoEntidad
	 */
	public String getCodTipoEntidad() {
		return this.codTipoEntidad;
	}

	/**
	 * Method 'setCodTipoEntidad'
	 * 
	 * @param codTipoEntidad
	 *            String
	 */
	public void setCodTipoEntidad(String codTipoEntidad) {
		this.codTipoEntidad = codTipoEntidad;
	}

	/**
	 * Method 'getDescripcionEs'
	 * 
	 * @return descripcionEs
	 */
	public String getDescripcionEs() {
		return this.descripcionEs;
	}

	/**
	 * Method 'setDescripcionEs'
	 * 
	 * @param descripcionEs
	 *            String
	 */
	public void setDescripcionEs(String descripcionEs) {
		this.descripcionEs = descripcionEs;
	}

	/**
	 * Method 'getDescripcionEu'
	 * 
	 * @return descripcionEu
	 */
	public String getDescripcionEu() {
		return this.descripcionEu;
	}

	/**
	 * Method 'setDescripcionEu'
	 * 
	 * @param descripcionEu
	 *            String
	 */
	public void setDescripcionEu(String descripcionEu) {
		this.descripcionEu = descripcionEu;
	}

	/**
	 * Method 'getDescripcion'. Devuelve la descripcion en el idioma actual.
	 * 
	 * @return String
	 */
	public String getDescripcion() {
		if (AppConstantes.EU.equals(LocaleContextHolder.getLocale()
				.getLanguage())) {
			return this.descripcionEu;
		} else {
			return this.descripcionEs;
		}
	}

	/**
	 * Method 'getCodElemClasif'
	 * 
	 * @return codElemClasif
	 */
	public String getCodElemClasif() {
		return this.codElemClasif;
	}

	/**
	 * Method 'setCodElemClasif'
	 * 
	 * @param codElemClasif
	 *            String
	 */
	public void setCodElemClasif(String codElemClasif) {
		this.codElemClasif = codElemClasif;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((idElereg == null) ? 0 : idElereg.hashCode());
		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		AbstractTipoGenericoR09 other = (AbstractTipoGenericoR09) obj;
		if (idElereg == null) {
			if (other.idElereg != null)
				return false;
		} else if (!idElereg.equals(other.idElereg))
			return false;
		return true;
	}
}