ContainerDates.java

package com.tradecloud.domain.container;

import javax.persistence.Embeddable;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.Past;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.util.Date;

@Embeddable
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ContainerDates")
public class ContainerDates implements Serializable {

    private static final long serialVersionUID = 1L;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    private Date customsEntryDate;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    private Date customsExitDate;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    private Date dischargeDate;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    private Date carrierReleaseDate;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    private Date transporterAvailabilityDate;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    @Past
    private Date pickUpDate;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    private Date etaAtDepot;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    private Date ataAtDepot;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    private Date etaAtFinalDestination;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    private Date scheduledDateAtFinalDestination;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    private Date ataAtFinalDestination;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    @Past
    private Date unpackedDate;

    @XmlAttribute
    @Temporal(TemporalType.TIMESTAMP)
    private Date turnInDate;

    public Date getCustomsEntryDate() {
        return customsEntryDate;
    }

    public void setCustomsEntryDate(Date customsEntryDate) {
        this.customsEntryDate = customsEntryDate;
    }

    public Date getCustomsExitDate() {
        return customsExitDate;
    }

    public void setCustomsExitDate(Date customsExitDate) {
        this.customsExitDate = customsExitDate;
    }

    public Date getDischargeDate() {
        return dischargeDate;
    }

    public void setDischargeDate(Date dischargeDate) {
        this.dischargeDate = dischargeDate;
    }

    public Date getCarrierReleaseDate() {
        return carrierReleaseDate;
    }

    public void setCarrierReleaseDate(Date carrierReleaseDate) {
        this.carrierReleaseDate = carrierReleaseDate;
    }

    public Date getTransporterAvailabilityDate() {

        if (customsExitDate != null && dischargeDate == null) {
            return customsExitDate;
        } else if (customsExitDate != null && carrierReleaseDate != null) {
            return carrierReleaseDate;
        } else if (customsExitDate != null && carrierReleaseDate != null && dischargeDate != null) {
            return transporterAvailabilityDate;
        }

        return null;
    }

    public void setTransporterAvailabilityDate(Date transporterAvailabilityDate) {
        this.transporterAvailabilityDate = transporterAvailabilityDate;
    }

    public Date getPickUpDate() {
        return pickUpDate;
    }

    public void setPickUpDate(Date pickUpDate) {
        this.pickUpDate = pickUpDate;
    }

    public Date getEtaAtDepot() {
        return etaAtDepot;
    }

    public void setEtaAtDepot(Date etaAtDepot) {
        this.etaAtDepot = etaAtDepot;
    }

    public Date getAtaAtDepot() {
        return ataAtDepot;
    }

    public void setAtaAtDepot(Date ataAtDepot) {
        this.ataAtDepot = ataAtDepot;
    }

    public Date getEtaAtFinalDestination() {
        return etaAtFinalDestination;
    }

    public void setEtaAtFinalDestination(Date etaAtFinalDestination) {
        this.etaAtFinalDestination = etaAtFinalDestination;
    }

    public Date getScheduledDateAtFinalDestination() {
        return scheduledDateAtFinalDestination;
    }

    public void setScheduledDateAtFinalDestination(Date scheduledDateAtFinalDestination) {
        this.scheduledDateAtFinalDestination = scheduledDateAtFinalDestination;
    }

    public Date getAtaAtFinalDestination() {
        return ataAtFinalDestination;
    }

    public void setAtaAtFinalDestination(Date ataAtFinalDestination) {
        this.ataAtFinalDestination = ataAtFinalDestination;
    }

    public Date getUnpackedDate() {
        return unpackedDate;
    }

    public void setUnpackedDate(Date unpackedDate) {
        this.unpackedDate = unpackedDate;
    }

    public Date getTurnInDate() {
        return turnInDate;
    }

    public void setTurnInDate(Date turnInDate) {
        this.turnInDate = turnInDate;
    }
}