ClearingRate.java

package com.tradecloud.domain.rate;

import com.tradecloud.domain.container.ContainerType;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.model.shipment.ShippingMode;
import com.tradecloud.domain.party.ServiceProvider;
import com.tradecloud.domain.place.Depot;
import com.tradecloud.domain.place.FinalDestination;
import com.tradecloud.domain.place.PlaceOfDischarge;
import lombok.Getter;
import lombok.Setter;

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;

@Entity
@Table(name = "clearingrate")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ClearingRate")
@Getter
@Setter
public class ClearingRate extends Rate implements MinMaxRate, CompanyRate {

    private static final long serialVersionUID = 1L;

    @NotNull
    @Basic(optional = false)
    @Enumerated(EnumType.STRING)
    private ShippingMode shippingMode;

    @Enumerated(EnumType.STRING)
    private ShippingMode multiModalShippingMode;

    @ManyToOne
    private ContainerType containerType;

    @ManyToOne
    private Depot clearingDepot;

    @ManyToOne
    private PlaceOfDischarge placeOfDischarge;

    @ManyToOne
    private ServiceProvider freightForwarder;

    @ManyToOne
    private ServiceProvider carrier;

    @ManyToOne
    private ServiceProvider clearingAgent;

    @ManyToOne
    private ServiceProvider transporter;

    @ManyToOne
    private FinalDestination finalDestination;

    @ManyToOne
    private OrganisationalUnit company;

    private BigDecimal weightFrom;
    private BigDecimal weightTo;
    private BigDecimal minValue;
    private BigDecimal maxValue;

    public ShippingMode getShippingMode() {
        return shippingMode;
    }

    public void setShippingMode(ShippingMode shippingMode) {
        this.shippingMode = shippingMode;
    }

    public ContainerType getContainerType() {
        return containerType;
    }

    public void setContainerType(ContainerType containerType) {
        this.containerType = containerType;
    }

    public Depot getClearingDepot() {
        return clearingDepot;
    }

    public void setClearingDepot(Depot clearingDepot) {
        this.clearingDepot = clearingDepot;
    }

    public PlaceOfDischarge getPlaceOfDischarge() {
        return placeOfDischarge;
    }

    public void setPlaceOfDischarge(PlaceOfDischarge placeOfDischarge) {
        this.placeOfDischarge = placeOfDischarge;
    }

    public ServiceProvider getClearingAgent() {
        return clearingAgent;
    }

    public void setClearingAgent(ServiceProvider clearingAgent) {
        this.clearingAgent = clearingAgent;
    }

    public ServiceProvider getTransporter() {
        return transporter;
    }

    public void setTransporter(ServiceProvider transporter) {
        this.transporter = transporter;
    }

    public FinalDestination getFinalDestination() {
        return finalDestination;
    }

    public void setFinalDestination(FinalDestination finalDestination) {
        this.finalDestination = finalDestination;
    }

    public BigDecimal getWeightFrom() {
        return weightFrom;
    }

    public void setWeightFrom(BigDecimal weightFrom) {
        this.weightFrom = weightFrom;
    }

    public BigDecimal getWeightTo() {
        return weightTo;
    }

    public void setWeightTo(BigDecimal weightTo) {
        this.weightTo = weightTo;
    }

    @Override
    public String toString() {
        return "ClearingRate{" +
                "clearingAgent=" + clearingAgent +
                ", shippingMode=" + shippingMode +
                ", containerType=" + containerType +
                ", clearingDepot=" + clearingDepot +
                ", placeOfDischarge=" + placeOfDischarge +
                ", transporter=" + transporter +
                ", organisationalUnit=" + getOrganisationalUnit() +
                ", finalDestination=" + finalDestination +
                ", freightForwarder=" + freightForwarder +
                ", carrier=" + carrier +
                ", weightFrom=" + weightFrom +
                ", weightTo=" + weightTo +
                '}';
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null)
            return false;
        if (!(obj instanceof ClearingRate)) {
            return false;
        }

        if (!super.equals(obj))
            return false;

        ClearingRate other = (ClearingRate) obj;

        if (other.getShippingMode() == shippingMode
                && objectsEqual(containerType, other.getContainerType())
                && objectsEqual(clearingDepot, other.getClearingDepot())
                && objectsEqual(placeOfDischarge, other.getPlaceOfDischarge())
                && objectsEqual(clearingAgent, other.getClearingAgent())
                && objectsEqual(transporter, other.getTransporter())
                && objectsEqual(getOrganisationalUnit(), other.getOrganisationalUnit())
                && objectsEqual(finalDestination, other.getFinalDestination())
                && objectsEqual(freightForwarder, other.getFreightForwarder())
                && objectsEqual(carrier, other.getCarrier())
                && objectsEqual(weightFrom, other.getWeightFrom())
                && objectsEqual(weightTo, other.getWeightTo())
                && objectsEqual(company, other.getCompany())
        ) {
            return true;
        }

        return false;
    }

    public ServiceProvider getFreightForwarder() {
        return freightForwarder;
    }

    public void setFreightForwarder(ServiceProvider freightForwarder) {
        this.freightForwarder = freightForwarder;
    }

    public ServiceProvider getCarrier() {
        return carrier;
    }

    public void setCarrier(ServiceProvider carrier) {
        this.carrier = carrier;
    }

    public BigDecimal getMinValue() {
        return minValue;
    }

    public void setMinValue(BigDecimal minValue) {
        this.minValue = minValue;
    }

    public BigDecimal getMaxValue() {
        return maxValue;
    }

    public void setMaxValue(BigDecimal maxValue) {
        this.maxValue = maxValue;
    }
}