Schedule1Part1A.java
package com.tradecloud.domain.duties;
import com.tradecloud.domain.costing.clean.CostLineNames;
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.Fetch;
import org.hibernate.annotations.FetchMode;
import javax.persistence.*;
import javax.xml.bind.annotation.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* Entity representing Schedule 1 Part 1 A - Ordinary duties.
*/
@Entity
@Table(name = "schedule1part1a")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Schedule1Part1A")
public class Schedule1Part1A extends TypedDutySchedule implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@Transient
public final int PART1_MAX_LENGTH = 4;
/**
* The method that will be used to calculate the "Other Duty" values.
*/
@Enumerated(value = EnumType.STRING)
@XmlAttribute
private DutyCalculationMethod calculationMethod = DutyCalculationMethod.SINGLE;
/**
* The applicable trade agreement.
*/
@Enumerated(value = EnumType.STRING)
@XmlAttribute
private TradeAgreement tradeAgreement = TradeAgreement.GENERAL;
private String dutyDescription;
private boolean tradeAgreementOverridden;
@Embedded
@AttributeOverrides({@AttributeOverride(name = "value", column = @Column(name = "supplementaryQtyValue1")),
@AttributeOverride(name = "unit", column = @Column(name = "supplementaryQtyUnit1"))})
@XmlElement(name = "supplementaryQty1")
private SupplementaryQuantity supplementaryQty1;
@Embedded
@AttributeOverrides({@AttributeOverride(name = "value", column = @Column(name = "supplementaryQtyValue2")),
@AttributeOverride(name = "unit", column = @Column(name = "supplementaryQtyUnit2"))})
@XmlElement(name = "supplementaryQty2")
private SupplementaryQuantity supplementaryQty2;
@Embedded
@AttributeOverrides({@AttributeOverride(name = "value", column = @Column(name = "supplementaryQtyValue3")),
@AttributeOverride(name = "unit", column = @Column(name = "supplementaryQtyUnit3"))})
@XmlElement(name = "supplementaryQty3")
private SupplementaryQuantity supplementaryQty3;
@ElementCollection(targetClass = RulesOfOrigin.class, fetch = FetchType.EAGER)
@JoinTable(name = "schedule1part1a_rulesoforigin", joinColumns = @JoinColumn(name = "schedule1part1a_id"))
@Enumerated(EnumType.STRING)
@Column(name = "rulesoforigin")
@Fetch(value = FetchMode.SELECT)
private List<RulesOfOrigin> rulesOfOrigin;
private String rulesOfOriginAuthNumber;
@XmlAttribute
private boolean vatExemption;
public Schedule1Part1A() {
super();
if (getDutyRate() == null) {
dutyRate = new TypedDutyRate();
}
dutyRate.setType(DutyType.ORDINARY);
dutyRate.setPercentage(BigDecimal.ZERO);
}
public Schedule1Part1A(Schedule1Part1A schedule1Part1A) {
super(schedule1Part1A);
calculationMethod = schedule1Part1A.getCalculationMethod();
tradeAgreement = schedule1Part1A.getTradeAgreement();
dutyDescription = schedule1Part1A.getDutyDescription();
supplementaryQty1 = schedule1Part1A.getSupplementaryQty1();
supplementaryQty2 = schedule1Part1A.getSupplementaryQty2();
supplementaryQty3 = schedule1Part1A.getSupplementaryQty3();
rulesOfOrigin = schedule1Part1A.getRulesOfOrigin();
}
public DutyCalculationMethod getCalculationMethod() {
return calculationMethod;
}
public void setCalculationMethod(DutyCalculationMethod calculationMethod) {
this.calculationMethod = calculationMethod;
}
public SupplementaryQuantity getSupplementaryQty1() {
if (supplementaryQty1 == null) {
supplementaryQty1 = new SupplementaryQuantity();
}
return supplementaryQty1;
}
public void setSupplementaryQty1(SupplementaryQuantity supplementaryQty1) {
this.supplementaryQty1 = supplementaryQty1;
}
public SupplementaryQuantity getSupplementaryQty2() {
if (supplementaryQty2 == null) {
supplementaryQty2 = new SupplementaryQuantity();
}
return supplementaryQty2;
}
public void setSupplementaryQty2(SupplementaryQuantity supplementaryQty2) {
this.supplementaryQty2 = supplementaryQty2;
}
public SupplementaryQuantity getSupplementaryQty3() {
if (supplementaryQty3 == null) {
supplementaryQty3 = new SupplementaryQuantity();
}
return supplementaryQty3;
}
public void setSupplementaryQty3(SupplementaryQuantity supplementaryQty3) {
this.supplementaryQty3 = supplementaryQty3;
}
public TradeAgreement getTradeAgreement() {
return tradeAgreement;
}
public void setTradeAgreement(TradeAgreement tradeAgreement) {
this.tradeAgreement = tradeAgreement;
}
@Override
public Schedule1Part1A clone() {
Schedule1Part1A clone = (Schedule1Part1A) super.clone();
clone.setCalculationMethod(calculationMethod);
clone.setTradeAgreement(tradeAgreement);
clone.setTradeAgreementOverridden(tradeAgreementOverridden);
clone.setDutyDescription(dutyDescription);
clone.setTariffHeading(getTariffHeading() != null ? getTariffHeading().clone() : null);
clone.setValid(isValid());
clone.setDutyRate(dutyRate != null ? dutyRate.clone() : null);
clone.setSupplementaryQty1(supplementaryQty1);
clone.setSupplementaryQty2(supplementaryQty2);
clone.setSupplementaryQty3(supplementaryQty3);
if (rulesOfOrigin != null && !rulesOfOrigin.isEmpty()) {
clone.setRulesOfOrigin(new ArrayList<>(rulesOfOrigin));
} else {
clone.setRulesOfOrigin(new ArrayList<>());
}
return clone;
}
@Override
public String toString() {
return new ToStringBuilder(this).append("calculationMethod", calculationMethod).append("tradeAgreement", tradeAgreement).toString();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Schedule1Part1A)) {
return false;
}
Schedule1Part1A other = (Schedule1Part1A) obj;
return new EqualsBuilder().appendSuper(super.equals(obj)).append(calculationMethod, other.calculationMethod)
.append(tradeAgreement, other.tradeAgreement).isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder().appendSuper(super.hashCode()).append(calculationMethod).append(tradeAgreement).toHashCode();
}
@Override
public String getCostlineCode() {
return CostLineNames.CUSTOMS_CUSTOMS_DUTY;
}
@Override
protected int getPart1MaxLength() {
return PART1_MAX_LENGTH;
}
@Override
protected boolean getDoCheckProof() {
return false;
}
@Override
protected boolean getDoCheckPercentage() {
return true;
}
@Override
protected boolean getDoCheckValue() {
return true;
}
public String getDutyDescription() {
return dutyDescription;
}
public void setDutyDescription(String dutyDescription) {
this.dutyDescription = dutyDescription;
}
public boolean isTradeAgreementOverridden() {
return tradeAgreementOverridden;
}
public void setTradeAgreementOverridden(boolean tradeAgreementOverridden) {
this.tradeAgreementOverridden = tradeAgreementOverridden;
}
public List<RulesOfOrigin> getRulesOfOrigin() {
return rulesOfOrigin;
}
public void setRulesOfOrigin(List<RulesOfOrigin> rulesOfOrigin) {
this.rulesOfOrigin = rulesOfOrigin;
}
public boolean isVatExemption() {
return vatExemption;
}
public void setVatExemption(boolean vatExemption) {
this.vatExemption = vatExemption;
}
public String getRulesOfOriginAuthNumber() {
return rulesOfOriginAuthNumber;
}
public void setRulesOfOriginAuthNumber(String rulesOfOriginAuthNumber) {
this.rulesOfOriginAuthNumber = rulesOfOriginAuthNumber;
}
@Override
public String getType() {
return "S1P1";
}
}