AgentRate.java

package com.tradecloud.domain.rate;

import com.tradecloud.common.base.HibernateUtils;
import com.tradecloud.domain.agent.Agent;
import com.tradecloud.domain.supplier.Supplier;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name = "agentrate")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "AgentRate")
public class AgentRate extends Rate {

    @ManyToOne(fetch = FetchType.EAGER)
    private Agent agent;

    @ManyToOne
    private Supplier supplier;

    public Agent getAgent() {
        return agent;
    }

    public void setAgent(Agent agent) {
        this.agent = agent;
    }

    public Supplier getSupplier() {
        return supplier;
    }

    public void setSupplier(Supplier supplier) {
        this.supplier = supplier;
    }

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

    @Override
    public String toString() {
        String toReturn = super.toString();

        String agentStr = "Agent: '" + agent + "', ";
        String supplierStr = "Supplier: '" + (supplier != null ? supplier.getName() : "") + "', ";
        String orgUnitStr = "Organisational Unit: '" +
                (getOrganisationalUnit() != null ? getOrganisationalUnit().getName() : "") + "', ";

        toReturn += agentStr + supplierStr + orgUnitStr;

        return toReturn;
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder()
                .appendSuper(super.hashCode())
                .append(agent)
                .append(supplier)
                .append(getOrganisationalUnit())
                .toHashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (!HibernateUtils.proxyClassEquals(this, obj)) {
            return false;
        }
        AgentRate other = (AgentRate) obj;
        return new EqualsBuilder()
                .appendSuper(super.equals(other))
                .append(agent, other.getAgent())
                .append(supplier, other.getSupplier())
                .append(getOrganisationalUnit(), other.getOrganisationalUnit())
                .isEquals();
    }
}