ForwardingRate.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.NamedPlace;
import com.tradecloud.domain.place.PlaceOfLoading;
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;

@Entity
@Table(name = "forwardingrate")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ForwardingRate")
@Getter
@Setter
public class ForwardingRate extends Rate implements 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 PlaceOfLoading placeOfLoading;

    @ManyToOne
    private ServiceProvider freightForwarder;

    @ManyToOne
    private ServiceProvider carrier;

    @ManyToOne
    private NamedPlace namedPlace;

    @ManyToOne
    private OrganisationalUnit company;

    public ContainerType getContainerType() {
        return containerType;
    }

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

    public ServiceProvider getFreightForwarder() {
        return freightForwarder;
    }

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

    public PlaceOfLoading getPlaceOfLoading() {
        return placeOfLoading;
    }

    public void setPlaceOfLoading(PlaceOfLoading placeOfLoading) {
        this.placeOfLoading = placeOfLoading;
    }

    public ShippingMode getShippingMode() {
        return shippingMode;
    }

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

    public NamedPlace getNamedPlace() {
        return namedPlace;
    }

    public void setNamedPlace(NamedPlace namedPlace) {
        this.namedPlace = namedPlace;
    }

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

        String shippingModeStr = "Shipping Mode: '" + shippingMode + "', ";
        String containerTypeStr = "Container Type: '" +
                (containerType != null ? containerType.getName() : "") + "', ";
        String placeOfLoadingStr = "Place of Loading: '" +
                (placeOfLoading != null ? placeOfLoading.getName() : "") + "', ";
        String freightForwarderStr = "Freight Forwarder: '" +
                (freightForwarder != null ? freightForwarder.getName() : "") + "', ";
        String carrierStr = "Carrier: '" +
                (carrier != null ? carrier.getName() : "") + "', ";
        String namedPlaceStr = " Named Place:" + (namedPlace != null ? namedPlace.getName() : "") + "', ";
        String organisationalUnitStr = "Organisational Unit: '" + (getOrganisationalUnit() != null ? getOrganisationalUnit().getName() : "") + "',";

        toReturn += shippingModeStr + containerTypeStr + placeOfLoadingStr + freightForwarderStr + carrierStr + namedPlaceStr + organisationalUnitStr;

        return toReturn;
    }

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

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

        ForwardingRate other = (ForwardingRate) obj;

        if (other.getShippingMode() == shippingMode
                && objectsEqual(containerType, other.getContainerType())
                && objectsEqual(placeOfLoading, other.getPlaceOfLoading())
                && objectsEqual(freightForwarder, other.getFreightForwarder())
                && objectsEqual(carrier, other.getCarrier())
                && objectsEqual(namedPlace, other.getNamedPlace())
                && objectsEqual(getOrganisationalUnit(), other.getOrganisationalUnit())
                && objectsEqual(company, other.getCompany()))
            return true;

        return false;
    }

    /**
     * @return the carrier
     */
    public ServiceProvider getCarrier() {
        return carrier;
    }

    /**
     * @param carrier the carrier to set
     */
    public void setCarrier(ServiceProvider carrier) {
        this.carrier = carrier;
    }
}