SeaShipment.java
package com.tradecloud.domain.shipment;
import com.tradecloud.common.base.HibernateUtils;
import com.tradecloud.domain.item.WeightUnitOfMeasure;
import com.tradecloud.domain.model.shipment.ShippingMode;
import com.tradecloud.domain.party.ServiceProvider;
import com.tradecloud.domain.place.City;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.NamedQueries;
import org.hibernate.annotations.NamedQuery;
import org.springframework.stereotype.Component;
import javax.persistence.*;
import javax.validation.constraints.Size;
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.math.BigDecimal;
import java.util.Date;
import java.util.Set;
@Entity
@DiscriminatorValue("SEA_SHIPMENT")
@Table(name = "seashipment")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "SeaShipment")
@Component
@NamedQueries({
@NamedQuery(name = "findByMWBReferenceNotDeleted",
query = "SELECT shipment FROM Shipment shipment WHERE shipment.masterBillOfLadingReference = " +
":reference AND shipment.state NOT IN ('DELETED')"),
@NamedQuery(name = "findByWBReferenceNotDeleted",
query = "SELECT shipment FROM Shipment shipment WHERE shipment.billOfLadingReference = " +
":reference AND shipment.state NOT IN ('DELETED')")})
public class SeaShipment extends Shipment implements Comparable<SeaShipment>, SeaShipmentInterface {
private static final long serialVersionUID = 1L;
/**
* The name of the database sequence used for generating part of the sea
* shipment number.
*/
public static final String NUMBER_SEQUENCE = "seashipmentnumber_sequence";
@XmlAttribute
@Size(max = 255)
private String billOfLadingReference;
@XmlAttribute
@Temporal(TemporalType.TIMESTAMP)
private Date billOfLadingDate;
@XmlAttribute
private BigDecimal billOfLadingSpotRate;
@XmlAttribute
@Size(max = 255)
private String voyageNumber;
@XmlAttribute
@Size(max = 255)
private String vesselCode;
@XmlAttribute
@Size(max = 255)
private String vesselCallSign;
@XmlAttribute
@Temporal(TemporalType.TIMESTAMP)
private Date stackFromDate;
@XmlAttribute
@Temporal(TemporalType.TIMESTAMP)
private Date stackToDate;
@ManyToOne(fetch = FetchType.LAZY)
@ForeignKey(name = "fk_carrier")
private ServiceProvider carrier;
@ManyToOne(fetch = FetchType.LAZY)
private ServiceProvider cargoCarrier;
private BigDecimal chargeableWeight;
@ManyToOne(fetch = FetchType.EAGER)
private WeightUnitOfMeasure chargeableWeightUOM;
@ManyToOne(fetch = FetchType.LAZY)
@ForeignKey(name = "fk_transhipmentCarrier")
private ServiceProvider transhipmentCarrier;
@XmlAttribute
@Size(max = 255)
private String shippingVessel;
// TODO. Use one from shippingInfo
@XmlAttribute
@Enumerated(EnumType.STRING)
private ShippingMode shippingMode = ShippingMode.SEA;
private String masterBillOfLadingReference;
private Date masterBillOfLadingDate;
@ManyToOne
protected City billPlaceOfIssue;
private Date berthingDateTime;
@Size(max = 4)
private String vesselAgent;
public SeaShipment() {
super();
}
public SeaShipment(String number, String reference) {
super(number, reference);
}
public SeaShipment(String number, String reference, String billOfLadingReference, Date billOfLadingDate, BigDecimal billOfLadingSpotRate,
String voyageNumber, String vesselCode, Date stackFromDate, Date stackToDate, ServiceProvider shippingLine,
String shippingVessel,
ShippingMode shippingMode) {
super(number, reference);
this.billOfLadingReference = billOfLadingReference;
this.billOfLadingDate = billOfLadingDate;
this.billOfLadingSpotRate = billOfLadingSpotRate;
this.voyageNumber = voyageNumber;
this.vesselCode = vesselCode;
this.stackFromDate = stackFromDate;
this.stackToDate = stackToDate;
this.carrier = shippingLine;
this.shippingVessel = shippingVessel;
this.shippingMode = shippingMode;
}
public SeaShipment(String number, String reference, String billOfLadingReference, Date billOfLadingDate, BigDecimal billOfLadingSpotRate,
String voyageNumber, String vesselCode, Date stackFromDate, Date stackToDate, ServiceProvider shippingLine,
String shippingVessel,
ShippingMode shippingMode, Set<Transhipment> transhipments) {
super(number, reference, transhipments);
this.billOfLadingReference = billOfLadingReference;
this.billOfLadingDate = billOfLadingDate;
this.billOfLadingSpotRate = billOfLadingSpotRate;
this.voyageNumber = voyageNumber;
this.vesselCode = vesselCode;
this.stackFromDate = stackFromDate;
this.stackToDate = stackToDate;
this.carrier = shippingLine;
this.shippingVessel = shippingVessel;
this.shippingMode = shippingMode;
}
@Override
public String getBillOfLadingReference() {
return billOfLadingReference;
}
public void setBillOfLadingReference(String billOfLadingReference) {
this.billOfLadingReference = billOfLadingReference;
}
@Override
public Date getBillOfLadingDate() {
return billOfLadingDate;
}
public void setBillOfLadingDate(Date billOfLadingDate) {
this.billOfLadingDate = billOfLadingDate;
}
@Override
public BigDecimal getBillOfLadingSpotRate() {
return billOfLadingSpotRate;
}
public void setBillOfLadingSpotRate(BigDecimal billOfLadingSpotRate) {
this.billOfLadingSpotRate = billOfLadingSpotRate;
}
@Override
public String getVoyageNumber() {
return voyageNumber;
}
public void setVoyageNumber(String voyageNumber) {
this.voyageNumber = voyageNumber;
}
@Override
public ServiceProvider getCarrier() {
return carrier;
}
public void setCarrier(ServiceProvider carrier) {
this.carrier = carrier;
}
@Override
public String getShippingVessel() {
return shippingVessel;
}
public void setShippingVessel(String shippingVessel) {
this.shippingVessel = shippingVessel;
}
@Override
public Date getStackFromDate() {
return stackFromDate;
}
public void setStackFromDate(Date stackFromDate) {
this.stackFromDate = stackFromDate;
}
public Date getStackToDate() {
return stackToDate;
}
public void setStackToDate(Date stackToDate) {
this.stackToDate = stackToDate;
}
@Override
public String getVesselCode() {
return vesselCode;
}
public void setVesselCode(String vesselCode) {
this.vesselCode = vesselCode;
}
@Override
public ShippingMode getShippingMode() {
return shippingMode;
}
public void setShippingMode(ShippingMode shippingMode) {
this.shippingMode = shippingMode;
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.appendSuper(super.hashCode())
.append(shippingMode)
.toHashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
// Do not use class.equals. This can return false for proxy objects
if (!HibernateUtils.proxyClassEquals(this, obj)) {
return false;
}
SeaShipment other = (SeaShipment) HibernateUtils.initializeAndUnproxy(obj);
return new EqualsBuilder()
.appendSuper(super.equals(other))
.append(shippingMode, other.getShippingMode())
.isEquals();
}
@Override
public int compareTo(SeaShipment other) {
return getNumber().compareTo(other.getNumber());
}
@Override
public ServiceProvider getCargoCarrier() {
return cargoCarrier;
}
public void setCargoCarrier(ServiceProvider cargoCarrier) {
this.cargoCarrier = cargoCarrier;
}
@Override
public ServiceProvider getTranshipmentCarrier() {
return transhipmentCarrier;
}
public void setTranshipmentCarrier(ServiceProvider transhipmentCarrier) {
this.transhipmentCarrier = transhipmentCarrier;
}
@Override
public String getMasterBillOfLadingReference() {
return masterBillOfLadingReference;
}
public void setMasterBillOfLadingReference(String masterBillOfLadingReference) {
this.masterBillOfLadingReference = masterBillOfLadingReference;
}
@Override
public SeaShipment initialize() {
HibernateUtils.initializeAndUnproxy(getCarrier());
return (SeaShipment) super.initialize();
}
public Date getMasterBillOfLadingDate() {
return masterBillOfLadingDate;
}
public void setMasterBillOfLadingDate(Date masterBillOfLadingDate) {
this.masterBillOfLadingDate = masterBillOfLadingDate;
}
public City getBillPlaceOfIssue() {
return billPlaceOfIssue;
}
public void setBillPlaceOfIssue(City billPlaceOfIssue) {
this.billPlaceOfIssue = billPlaceOfIssue;
}
public String getVesselCallSign() {
return vesselCallSign;
}
public void setVesselCallSign(String vesselCallSign) {
this.vesselCallSign = vesselCallSign;
}
public Date getBerthingDateTime() {
return berthingDateTime;
}
public void setBerthingDateTime(Date berthingDateTime) {
this.berthingDateTime = berthingDateTime;
}
public String getVesselAgent() {
return vesselAgent;
}
public void setVesselAgent(String vesselAgent) {
this.vesselAgent = vesselAgent;
}
@Override
public ShippingMode getMultiModalShippingMode() {
return getShippingInfo().getMultiModalShippingMode();
}
public WeightUnitOfMeasure getChargeableWeightUOM() {
return chargeableWeightUOM;
}
public void setChargeableWeightUOM(WeightUnitOfMeasure chargeableWeightUOM) {
this.chargeableWeightUOM = chargeableWeightUOM;
}
public BigDecimal getChargeableWeight() {
return chargeableWeight;
}
public void setChargeableWeight(BigDecimal chargeableWeight) {
this.chargeableWeight = chargeableWeight;
}
}