LandShipment.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.place.City;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.springframework.stereotype.Component;

import javax.persistence.*;
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;

/**
 *
 */
@Entity
@DiscriminatorValue("LAND_SHIPMENT")
@Table(name = "landshipment")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "LandShipment")
@Component
public class LandShipment extends Shipment implements Comparable<LandShipment> {

    private static final long serialVersionUID = 1L;
    @XmlAttribute
    private String roadConsignmentNote;

    @XmlAttribute
    private Date roadConsignmentNoteIssueDate;

    @XmlAttribute
    private String transporter;

    @XmlAttribute
    private String transporterReference;

    @Transient
    private String registration;

    private BigDecimal chargeableWeight;

    @ManyToOne(fetch = FetchType.EAGER)
    private WeightUnitOfMeasure chargeableWeightUOM;


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

    public LandShipment() {
        super();
    }

    public LandShipment(String number, String reference) {
        super(number, reference);
    }

    public LandShipment(String number, String reference, String roadConsignmentNote, Date roadConsignmentNoteIssueDate, String transporter,
                        String transporterReference, ShippingMode shippingMode) {
        super(number, reference);
        this.roadConsignmentNote = roadConsignmentNote;
        this.roadConsignmentNoteIssueDate = roadConsignmentNoteIssueDate;
        this.transporter = transporter;
        this.transporterReference = transporterReference;
        this.shippingMode = shippingMode;
    }

    public String getRoadConsignmentNote() {
        return this.roadConsignmentNote;
    }

    public void setRoadConsignmentNote(String roadConsignmentNote) {
        this.roadConsignmentNote = roadConsignmentNote;
    }

    public Date getRoadConsignmentNoteIssueDate() {
        return this.roadConsignmentNoteIssueDate;
    }

    public void setRoadConsignmentNoteIssueDate(Date roadConsignmentNoteIssueDate) {
        this.roadConsignmentNoteIssueDate = roadConsignmentNoteIssueDate;
    }

    public String getTransporter() {
        return this.transporter;
    }

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

    public String getTransporterReference() {
        return this.transporterReference;
    }

    public void setTransporterReference(String transporterReference) {
        this.transporterReference = transporterReference;
    }

    @Override
    public ShippingMode getShippingMode() {
        return 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;
        }
        LandShipment other = (LandShipment) obj;
        return new EqualsBuilder()
                .appendSuper(super.equals(other))
                .append(shippingMode, other.getShippingMode())
                .isEquals();
    }

    @Override
    public int compareTo(LandShipment other) {
        return getNumber().compareTo(other.getNumber());
    }

    @Override
    public Date getBillOfLadingDate() {
        return null;
    }

    @Override
    public City getBillPlaceOfIssue() {
        return null;
    }

    @Override
    public void setBillPlaceOfIssue(City billPlaceOfIssue) {

    }

    @Override
    public BigDecimal getBillOfLadingSpotRate() {
        return null;
    }

    @Override
    public void setBillOfLadingSpotRate(BigDecimal billOfLadingSpotRate) {

    }

    public String getRegistration() {
        return registration;
    }

    public void setRegistration(String registration) {
        this.registration = registration;
    }

    @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;
    }
}