PlannedSettlementOrder.java
package com.tradecloud.domain.settlement;
import com.tradecloud.domain.document.PaymentState;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.annotations.OptimisticLockType;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
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;
/**
* An entity that shows a breakdown value for an order on a planned settlement. This entity doesn't have any lifecyle outside its parent
* PlannedSettlement.
*
* This entity has several fields in common with a PlannedSettlement. There might be a case to scrap it and simply use a composition of
* PlannedSettlements inside the parent PlannedSettlement. That would involve refactoring to extract the common stuff first though.
*/
@Entity
@org.hibernate.annotations.Entity(optimisticLock = OptimisticLockType.NONE)
@Table(name = "plannedsettlementorder")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "PlannedSettlementOrder")
public class PlannedSettlementOrder extends PlannedSettlementDetail {
private static final long serialVersionUID = 1L;
/**
* The bidirectional link back to the parent {@link PlannedSettlement}.
*/
@ManyToOne(optional = false)
private PlannedSettlement plannedSettlement;
@NotNull
@XmlAttribute(required = true)
private String reference;
@NotNull
private Date addedToConsignmentDate; //required for @OrderBy
@NotNull
@XmlAttribute(required = true)
private BigDecimal originalOrderAmount;
private String estimateNumber;
public PlannedSettlement getPlannedSettlement() {
return plannedSettlement;
}
public void setPlannedSettlement(PlannedSettlement plannedSettlement) {
this.plannedSettlement = plannedSettlement;
}
@Override
public String getReference() {
return reference;
}
public void setReference(String reference) {
this.reference = reference;
}
public BigDecimal getOriginalOrderAmount() {
return originalOrderAmount;
}
public void setOriginalOrderAmount(BigDecimal originalOrderAmount) {
this.originalOrderAmount = originalOrderAmount;
}
public Date getAddedToConsignmentDate() {
return addedToConsignmentDate;
}
public void setAddedToConsignmentDate(Date addedToConsignmentDate) {
this.addedToConsignmentDate = addedToConsignmentDate;
}
public String getEstimateNumber() {
return estimateNumber;
}
public void setEstimateNumber(String estimateNumber) {
this.estimateNumber = estimateNumber;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof PlannedSettlementOrder)) {
return false;
}
PlannedSettlementOrder other = (PlannedSettlementOrder) obj;
return new EqualsBuilder().appendSuper(super.equals(obj)).append(plannedSettlement, other.plannedSettlement)
.append(reference, other.reference).append(originalOrderAmount, other.originalOrderAmount).isEquals();
}
@Override
public PaymentState getPaymentState() {
return plannedSettlement.getPaymentState();
}
@Override
public int hashCode() {
return new HashCodeBuilder().appendSuper(super.hashCode()).append(plannedSettlement).append(reference).append(originalOrderAmount)
.toHashCode();
}
@Override
public String toString() {
return new ToStringBuilder(this).append(super.toString()).append(reference).append(originalOrderAmount).toString();
}
}