DemurrageTransaction.java

package com.tradecloud.domain.demurrage;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.container.ShipmentContainer;
import com.tradecloud.domain.shipment.SeaShipment;
import com.tradecloud.domain.state.BaseStateful;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;


/**
 *
 */
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class DemurrageTransaction extends PersistenceBase implements
        BaseStateful<DemurrageTransactionState> {

    @NotNull
    @OneToOne
    private ShipmentContainer shipmentContainer;

    @OneToOne(fetch = FetchType.LAZY)
    private SeaShipment seaShipment;

    private String transactionNumber;

    private String rejectReason;

    @Temporal(TemporalType.DATE)
    private Date signedOffDate;

    @NotNull
    @Enumerated(EnumType.STRING)
    private DemurrageTransactionState state;

    private boolean active;

    public ShipmentContainer getShipmentContainer() {
        return shipmentContainer;
    }

    public void setShipmentContainer(ShipmentContainer shipmentContainer) {
        this.shipmentContainer = shipmentContainer;
    }

    @Override
    public DemurrageTransactionState getState() {
        return state;
    }

    @Override
    public void setState(DemurrageTransactionState state) {
        this.state = state;
    }

    public String getTransactionNumber() {
        return transactionNumber;
    }

    public void setTransactionNumber(String transactionNumber) {
        this.transactionNumber = transactionNumber;
    }

    public Date getSignedOffDate() {
        return signedOffDate;
    }

    public void setSignedOffDate(Date signedOffDate) {
        this.signedOffDate = signedOffDate;
    }

    public boolean isActive() {
        return active;
    }

    public void setActive(boolean active) {
        this.active = active;
    }

    public String getRejectReason() {
        return rejectReason;
    }

    public void setRejectReason(String rejectReason) {
        this.rejectReason = rejectReason;
    }

    public SeaShipment getSeaShipment() {
        return seaShipment;
    }

    public void setSeaShipment(SeaShipment seaShipment) {
        this.seaShipment = seaShipment;
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder()
                .append(shipmentContainer)
                .append(getState())
                .toHashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final DemurrageTransaction other = (DemurrageTransaction) obj;
        return new EqualsBuilder()
                .append(shipmentContainer, other.getShipmentContainer())
                .append(getState(), other.getState())
                .isEquals();
    }

    public abstract String getCommentsAsString();
}