LeadTime.java

package com.tradecloud.domain.common;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.model.shipment.ShippingMode;
import com.tradecloud.domain.place.City;
import com.tradecloud.domain.place.PlaceOfDischarge;
import com.tradecloud.domain.place.PlaceOfLoading;
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;

/**
 * TODO - This entity really needs some unique constraints. The data has the potential to snow ball and become unmanageable.
 */
@Entity
@Table(name = "leadtime")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
public class LeadTime extends PersistenceBase {

    @Enumerated(value = EnumType.STRING)
    private ShippingMode shippingMode;

    @ManyToOne
    private PlaceOfLoading placeOfLoading;

    @ManyToOne
    private PlaceOfDischarge placeOfDischarge;

    @ManyToOne
    private City city;

    private int cityToPort;

    private int days;

    private int stackTime;

    private int landSideLeadTime;

    private int shippingWindow;

    private static final long serialVersionUID = 1L;

    public ShippingMode getShippingMode() {
        return shippingMode;
    }

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

    public PlaceOfLoading getPlaceOfLoading() {
        return placeOfLoading;
    }

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

    public PlaceOfDischarge getPlaceOfDischarge() {
        return placeOfDischarge;
    }

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

    public int getDays() {
        return days;
    }

    public void setDays(int days) {
        this.days = days;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (obj == this) {
            return true;
        }
        if (obj.getClass() != getClass()) {
            return false;
        }
        LeadTime rhs = (LeadTime) obj;
        return new EqualsBuilder().append(placeOfLoading, rhs.getPlaceOfLoading()).append(placeOfDischarge, rhs.getPlaceOfDischarge())
                .append(shippingMode, rhs.getShippingMode()).append(city, rhs.getCity()).isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder().append(placeOfLoading).append(placeOfDischarge).append(shippingMode).toHashCode();
    }

    public int getStackTime() {
        return stackTime;
    }

    public void setStackTime(int stackTime) {
        this.stackTime = stackTime;
    }

    public int getLandSideLeadTime() {
        return landSideLeadTime;
    }

    public void setLandSideLeadTime(int landSideLeadTime) {
        this.landSideLeadTime = landSideLeadTime;
    }

    public int getShippingWindow() {
        return shippingWindow;
    }

    public void setShippingWindow(int shippingWindow) {
        this.shippingWindow = shippingWindow;
    }

    public City getCity() {
        return city;
    }

    public void setCity(City city) {
        this.city = city;
    }

    public int getCityToPort() {
        return cityToPort;
    }

    public void setCityToPort(int cityToPort) {
        this.cityToPort = cityToPort;
    }
}