CreditorBillingRule.java
package com.tradecloud.domain.creditorbilling.rule;
import com.tradecloud.domain.ValueLookupBase;
import com.tradecloud.domain.common.Incoterm;
import com.tradecloud.domain.container.ContainerType;
import com.tradecloud.domain.costing.CostLine;
import com.tradecloud.domain.creditorbilling.transaction.CreditorBillingTransactionType;
import com.tradecloud.domain.model.shipment.ShippingMode;
import com.tradecloud.domain.party.ServiceProvider;
import com.tradecloud.domain.party.ServiceProviderType;
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.ForeignKey;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
/**
* @author jon
*/
@Entity
@Table(uniqueConstraints = {
@UniqueConstraint(columnNames = {"creditorBillingRuleType", "carrier_id", "shippingMode", "incoterm_code",
"freightForwarder_id", "containerType_code", "effectiveDate"})})
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Access(AccessType.FIELD)
public class CreditorBillingRule extends ValueLookupBase {
@NotNull
@Enumerated(EnumType.STRING)
private CreditorBillingTransactionType creditorBillingRuleType;
@ManyToOne
@ForeignKey(name = "fk_carrier")
private ServiceProvider carrier;
@NotNull(message = "Freight forwarder is required")
@ManyToOne
@ForeignKey(name = "fk_freightforwarder")
private ServiceProvider freightForwarder;
@NotNull(message = "Incoterm is required")
@ManyToOne
@ForeignKey(name = "fk_incoterm")
private Incoterm incoterm;
@ManyToOne
@ForeignKey(name = "fk_containertype")
private ContainerType containerType;
@NotNull(message = "Shipping mode is required")
@Enumerated(EnumType.STRING)
private ShippingMode shippingMode;
@ManyToMany
@ForeignKey(name = "fk_creditorbillingrule_id", inverseName = "costlines_id")
private List<CostLine> costLines = new ArrayList<CostLine>();
@NotNull
@Enumerated(EnumType.STRING)
@Column(name = "counterpartyrole")
protected ServiceProviderType counterPartyRole;
public ServiceProvider getCarrier() {
return carrier;
}
public void setCarrier(ServiceProvider carrier) {
this.carrier = carrier;
}
public ServiceProvider getFreightForwarder() {
return freightForwarder;
}
public void setFreightForwarder(ServiceProvider freightForwarder) {
this.freightForwarder = freightForwarder;
}
public Incoterm getIncoterm() {
return incoterm;
}
public void setIncoterm(Incoterm incoterm) {
this.incoterm = incoterm;
}
public ContainerType getContainerType() {
return containerType;
}
public void setContainerType(ContainerType containerType) {
this.containerType = containerType;
}
public ShippingMode getShippingMode() {
return shippingMode;
}
public void setShippingMode(ShippingMode shippingMode) {
this.shippingMode = shippingMode;
}
public List<CostLine> getCostLines() {
return costLines;
}
public void setCostLines(List<CostLine> costLines) {
this.costLines = costLines;
}
public CreditorBillingTransactionType getCreditorBillingRuleType() {
return creditorBillingRuleType;
}
public void setCreditorBillingRuleType(CreditorBillingTransactionType creditorBillingRuleType) {
this.creditorBillingRuleType = creditorBillingRuleType;
}
public ServiceProviderType getCounterPartyRole() {
return counterPartyRole;
}
public void setCounterPartyRole(ServiceProviderType counterPartyRole) {
this.counterPartyRole = counterPartyRole;
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(creditorBillingRuleType).append(carrier).append(freightForwarder).
append(shippingMode).append(incoterm).append(containerType).toHashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!(obj instanceof CreditorBillingRule)) {
return false;
}
CreditorBillingRule other = (CreditorBillingRule) obj;
return new EqualsBuilder().append(creditorBillingRuleType, other.creditorBillingRuleType).append(carrier, other.carrier).
append(shippingMode, other.shippingMode).append(incoterm, other.incoterm).append(containerType, other.containerType)
.append(freightForwarder, other.freightForwarder).isEquals();
}
@Override
public String toString() {
return new ToStringBuilder(this).append(creditorBillingRuleType).append(containerType).append(carrier).append(freightForwarder)
.append(shippingMode).append(incoterm).toString();
}
}