PrimeInterestRate.java

package com.tradecloud.domain;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.base.utils.MathUtils;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.model.organisationalunit.tradefinance.TradeFinanceRate;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlTransient;
import java.math.BigDecimal;
import java.util.Date;

/**
 * Created by ds on 2017/06/07.
 */
@Entity
@Table(name = "primeinterestrate", uniqueConstraints = {
        @UniqueConstraint(columnNames = {"effectiveDate", "organisationalUnit_id"})})
public class PrimeInterestRate extends PersistenceBase implements TradeFinanceRate {

    @XmlTransient
    @ManyToOne(fetch = FetchType.LAZY)
    @org.hibernate.annotations.ForeignKey(name = "fk_organisationalUnit")
    @NotNull(message = "Parent organisational unit should not be null")
    private OrganisationalUnit organisationalUnit;

    private BigDecimal interestRate;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(unique = true, name = "effectiveDate")
    private Date effectiveDate;

    public PrimeInterestRate() {
    }

    public PrimeInterestRate(BigDecimal interestRate, Date effectiveDate) {
        this.interestRate = interestRate;
        this.effectiveDate = effectiveDate;
    }

    public BigDecimal getInterestRate() {
        return interestRate != null ? interestRate : BigDecimal.ZERO.setScale(MathUtils.SCALE_DISPLAY,
                MathUtils.ROUNDING_MODE);
    }

    public void setInterestRate(BigDecimal interestRate) {
        this.interestRate = interestRate;
    }

    public Date getEffectiveDate() {
        return effectiveDate;
    }

    @Override
    public BigDecimal getRate() {
        return interestRate;
    }

    public void setEffectiveDate(Date effectiveDate) {
        this.effectiveDate = effectiveDate;
    }

    public OrganisationalUnit getOrganisationalUnit() {
        return organisationalUnit;
    }

    public void setOrganisationalUnit(OrganisationalUnit organisationalUnit) {
        this.organisationalUnit = organisationalUnit;
    }

    @Override
    public void setRate(BigDecimal rate) {
        this.interestRate = rate;
    }

    @Override
    public String toString() {
        return "PrimeInterestRate{" +
                "organisationalUnit=" + organisationalUnit +
                ", interestRate=" + interestRate +
                ", effectiveDate=" + effectiveDate +
                '}';
    }
}