Forecast.java

package com.tradecloud.domain.model;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.treasury.TreasuryBank;
import com.tradecloud.domain.wrapper.TYMDDateXmlAdapter;
import org.joda.time.LocalDate;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.io.Serializable;
import java.util.Currency;
import java.util.Date;

@Entity
@Table(name = "forecast")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Forecast")
public class Forecast extends PersistenceBase implements Serializable, ActualExposure {

    @Temporal(TemporalType.TIMESTAMP)
    @XmlJavaTypeAdapter(TYMDDateXmlAdapter.class)
    private Date forecastDate;

    // TODO @Basic(optional=false)
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
    @JoinColumn(name = "organisationalunit_id")
    private OrganisationalUnit organisationalUnit;

    // TODO
    // private Supplier supplier;

    // TODO @Basic(optional=false)
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
    @JoinColumn(name = "forexgroup_id")
    private ForexGroup forexGroup;

    @Embedded
    private Money amount;

    public OrganisationalUnit getDivision() {
        return organisationalUnit;
    }

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

    public OrganisationalUnit getOrganisationalUnit() {
        return organisationalUnit;
    }

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

    public Money getAmount() {
        return amount;
    }

    public void setAmount(Money amount) {
        this.amount = amount;
    }

    public Date getForecastDate() {
        return forecastDate;
    }

    public void setForecastDate(Date forecastDate) {
        this.forecastDate = forecastDate;
    }

    public ForexGroup getForexGroup() {
        return forexGroup;
    }

    @Override
    public Currency getCurrency() {
        return amount.getCurrency();
    }

    @Override
    public LocalDate getMaturityDate() {
        return LocalDate.fromDateFields(forecastDate);
    }

    @Override
    public TreasuryBank getBank() {
        return null;
    }

    public void setForexGroup(ForexGroup forexGroup) {
        this.forexGroup = forexGroup;
    }

    @Override
    public String toString() {
        return "Org unit '" + organisationalUnit + "'. Date '" + forecastDate + "'. Forex group '" + forexGroup + "'. Amount '" + amount + "'.";
    }

}