StandardExchangeRate.java

package com.tradecloud.domain.exchangerate;

import com.tradecloud.common.base.HibernateUtils;
import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.common.Currency;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @author jon
 */
@Entity
@Table(name = "standardexchangerate")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "StandardExchangeRate")
public class StandardExchangeRate extends PersistenceBase {

    @NotNull(message = "Local currency is required")
    @ManyToOne
    private Currency localCurrency;

    @NotNull(message = "Foreign currency is required")
    @ManyToOne
    private Currency foreignCurrency;

    @ManyToOne
    private OrganisationalUnit organisationalUnit;

    @NotNull(message = "Effective date is required")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date effectiveDate;

    @NotNull(message = "Rate is required")
    @Basic(optional = false)
    private BigDecimal rate;

    @Temporal(javax.persistence.TemporalType.DATE)
    private Date deletedDate;

    public Currency getLocalCurrency() {
        return localCurrency;
    }

    public void setLocalCurrency(Currency localCurrency) {
        this.localCurrency = localCurrency;
    }

    public Currency getForeignCurrency() {
        return foreignCurrency;
    }

    public void setForeignCurrency(Currency foreignCurrency) {
        this.foreignCurrency = foreignCurrency;
    }

    public OrganisationalUnit getOrganisationalUnit() {
        return organisationalUnit;
    }

    public void setOrganisationalUnit(OrganisationalUnit organisationalUnit) {
        this.organisationalUnit = organisationalUnit;
    }

    public Date getEffectiveDate() {
        return effectiveDate;
    }

    public void setEffectiveDate(Date effectiveDate) {
        this.effectiveDate = effectiveDate;
    }

    public BigDecimal getRate() {
        return rate;
    }

    public void setRate(BigDecimal rate) {
        this.rate = rate;
    }

    public Date getDeletedDate() {
        return deletedDate;
    }

    public void setDeletedDate(Date deletedDate) {
        this.deletedDate = deletedDate;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        // Do not use class.equals. This can return false for proxy objects
        if (!HibernateUtils.proxyClassEquals(this, obj)) {
            return false;
        }
        StandardExchangeRate other = (StandardExchangeRate) obj;
        return new EqualsBuilder()
                .append(rate, other.getRate())
                .append(localCurrency, other.getLocalCurrency())
                .append(foreignCurrency, other.getForeignCurrency())
                .append(organisationalUnit, other.getOrganisationalUnit())
                .append(effectiveDate, other.getEffectiveDate())
                .append(getCreated(), other.getCreated())
                .isEquals();

    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder()
                .append(rate)
                .append(localCurrency)
                .append(foreignCurrency)
                .append(organisationalUnit)
                .append(effectiveDate)
                .append(getCreated())
                .toHashCode();
    }

    public int upoadHashCode() {
        return new HashCodeBuilder()
                .append(rate)
                .append(localCurrency)
                .append(foreignCurrency)
                .append(organisationalUnit)
                .append(effectiveDate)
                .toHashCode();
    }
}