SurrenderFEC.java

package com.tradecloud.domain.model.fec;

import com.tradecloud.domain.model.ForexGroup;
import com.tradecloud.domain.model.Money;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import org.hibernate.annotations.DiscriminatorOptions;
import org.joda.time.LocalDate;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
// @Table(name="FEC")
// Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy:
// com.tradecloud.domain.model.fec.SurrenderFEC
@DiscriminatorValue("SURRENDER")
@DiscriminatorOptions(force = true)
public class SurrenderFEC extends FEC {

    private SurrenderFEC(LocalDate dealDate, BankReference bankReference, InternalReference internalReference, Money surrenderAmount,
                         LocalDate maturityDate, BankDetails bankDetails, Money spotRate, Money forwardRate, OrganisationalUnit organisationalUnit,
                         ForexGroup forexGroup, FECTransactionType fecTransactionType) {
        super(dealDate, bankReference, internalReference, surrenderAmount, maturityDate, bankDetails, spotRate, forwardRate, organisationalUnit,
                forexGroup, fecTransactionType);
        amount = surrenderAmount.negate();
        type = FECType.SURRENDER;
        this.unlinkedAmount = new Money(amount.getValue(), amount.getCurrency());
    }

    public static IFEC createSurrenderFEC(LocalDate dealDate, BankReference bankReference, InternalReference internalReference,
                                          Money surrenderAmount, LocalDate maturityDate, BankDetails bankDetails, Money spotRate, Money forwardRate,
                                          OrganisationalUnit organisationalUnit, ForexGroup forexGroup, FECTransactionType fecTransactionType) {
        final SurrenderFEC surrenderFEC = new SurrenderFEC(dealDate, bankReference, internalReference, surrenderAmount, maturityDate, bankDetails,
                spotRate, forwardRate, organisationalUnit, forexGroup, fecTransactionType);
        return surrenderFEC;
    }

    @Override
    public boolean isSurrender() {
        return true;
    }

    @Override
    public void update(BankReference bankReference, InternalReference internalReference, Money amount, LocalDate dealDate, LocalDate maturityDate,
                       BankDetails bankDetails, Money spotRate, Money forwardRate, FECTransactionType fecTransactionType) {
        this.bankReference = bankReference;
        this.internalReference = internalReference;
        this.unlinkedAmount = this.unlinkedAmount.add(amount.subtract(this.amount));
        this.amount = amount;
        this.maturityDate = maturityDate;
        this.dealDate = dealDate;
        this.bankDetails = bankDetails;
        this.spotRate = spotRate;
        this.forwardRate = forwardRate;
        this.fecTransactionType = fecTransactionType;
    }


    /**
     * for JPA only.
     */
    public SurrenderFEC() {
    }
}