Rate.java

package com.tradecloud.domain.rate;

import com.tradecloud.common.base.HibernateUtils;
import com.tradecloud.domain.ValueLookupBase;
import com.tradecloud.domain.common.Currency;
import com.tradecloud.domain.costing.CostingType;
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 java.math.BigDecimal;

@Entity
public abstract class Rate extends ValueLookupBase {

    private static final long serialVersionUID = 1L;

    @NotNull
    @Basic(optional = false)
    private String costLine;

    @NotNull
    @Basic(optional = false)
    private BigDecimal rate;

    @Enumerated(EnumType.ORDINAL)
    @NotNull
    @Basic(optional = false)
    protected RateUnit rateUnit;

    @Enumerated(value = EnumType.STRING)
    @NotNull
    @Basic(optional = false)
    private CostingType costingType;

    @ManyToOne
    private Currency currency;

    @ManyToOne
    private OrganisationalUnit organisationalUnit;

    private boolean costCompareOnly;

    public String getCostLine() {
        return costLine;
    }

    public void setCostLine(String costLine) {
        this.costLine = costLine;
    }

    public BigDecimal getRate() {
        return rate;
    }

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

    public RateUnit getRateUnit() {
        return rateUnit;
    }

    public void setRateUnit(RateUnit rateUnit) {
        this.rateUnit = rateUnit;
    }

    public Currency getCurrency() {
        return currency;
    }

    public void setCurrency(Currency currency) {
        this.currency = currency;
    }

    public CostingType getCostingType() {
        return costingType;
    }

    public void setCostingType(CostingType costingType) {
        this.costingType = costingType;
    }

    public OrganisationalUnit getOrganisationalUnit() {
        return organisationalUnit;
    }

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

    public boolean isCostCompareOnly() {
        return costCompareOnly;
    }

    public void setCostCompareOnly(boolean costCompareOnly) {
        this.costCompareOnly = costCompareOnly;
    }

    @Override
    public String toString() {
        return "Rate{" +
                "costLine='" + costLine + '\'' +
                ", rate=" + rate +
                ", rateUnit=" + rateUnit +
                ", costingType=" + costingType +
                ", currency=" + currency +
                ", costCompareOnly=" + costCompareOnly +
                '}';
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder()
                .appendSuper(super.hashCode())
                .append(costLine)
                .append(rateUnit)
                .append(rateUnit == RateUnit.CURRENCY ? currency : null)
                .append(costingType)
                .append(costCompareOnly)
                .toHashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (!HibernateUtils.proxyClassEquals(this, obj)) {
            return false;
        }
        Rate other = (Rate) obj;
        return new EqualsBuilder()
                .appendSuper(super.equals(other))
                .append(costLine, other.getCostLine())
                .append(rateUnit, other.getRateUnit())
                .append(costCompareOnly, other.isCostCompareOnly())
                .append(rateUnit == RateUnit.CURRENCY ? currency : null, other.getRateUnit() == RateUnit.CURRENCY ? other.getRateUnit() : null)
                .append(costingType, other.getCostingType())
                .isEquals();
        /*
        if (other.getCostLine().equals(costLine)
            && other.getRateUnit() == rateUnit
            && other.getEffectiveDate().equals(getEffectiveDate())
            && (other.getRateUnit() != RateUnit.CURRENCY ? true : other.getCurrency().equals(currency))
            && (other.getCostingType() == costingType))
            return true;

        return false;
            */

    }

    // Use EqualsBuilder
    @Deprecated
    protected boolean objectsEqual(Object a, Object b) {
        if (a == null && b == null)
            return true;
        if (a == null && b != null)
            return false;
        if (!a.equals(b))
            return false;

        return true;
    }
}