package name.abuchen.portfolio.model;
import java.time.LocalDate;
public class PortfolioTransferEntry implements CrossEntry, Annotated
{
private Portfolio portfolioFrom;
private PortfolioTransaction transactionFrom;
private Portfolio portfolioTo;
private PortfolioTransaction transactionTo;
public PortfolioTransferEntry()
{
this.transactionFrom = new PortfolioTransaction();
this.transactionFrom.setType(PortfolioTransaction.Type.TRANSFER_OUT);
this.transactionFrom.setCrossEntry(this);
this.transactionTo = new PortfolioTransaction();
this.transactionTo.setType(PortfolioTransaction.Type.TRANSFER_IN);
this.transactionTo.setCrossEntry(this);
}
public PortfolioTransferEntry(Portfolio portfolioFrom, Portfolio portfolioTo)
{
this();
this.portfolioFrom = portfolioFrom;
this.portfolioTo = portfolioTo;
}
public PortfolioTransaction getSourceTransaction()
{
return this.transactionFrom;
}
public PortfolioTransaction getTargetTransaction()
{
return this.transactionTo;
}
public void setSourcePortfolio(Portfolio portfolio)
{
this.portfolioFrom = portfolio;
}
public void setTargetPortfolio(Portfolio portfolio)
{
this.portfolioTo = portfolio;
}
public void setDate(LocalDate date)
{
this.transactionFrom.setDate(date);
this.transactionTo.setDate(date);
}
public void setSecurity(Security security)
{
this.transactionFrom.setSecurity(security);
this.transactionTo.setSecurity(security);
}
public void setShares(long shares)
{
this.transactionFrom.setShares(shares);
this.transactionTo.setShares(shares);
}
public void setAmount(long amount)
{
this.transactionFrom.setAmount(amount);
this.transactionTo.setAmount(amount);
}
public void setCurrencyCode(String currencyCode)
{
this.transactionFrom.setCurrencyCode(currencyCode);
this.transactionTo.setCurrencyCode(currencyCode);
}
@Override
public String getNote()
{
return this.transactionFrom.getNote();
}
@Override
public void setNote(String note)
{
this.transactionFrom.setNote(note);
this.transactionTo.setNote(note);
}
public void insert()
{
portfolioFrom.addTransaction(transactionFrom);
portfolioTo.addTransaction(transactionTo);
}
@Override
public void updateFrom(Transaction t)
{
if (t.equals(transactionFrom))
copyAttributesOver(transactionFrom, transactionTo);
else if (t.equals(transactionTo))
copyAttributesOver(transactionTo, transactionFrom);
else
throw new UnsupportedOperationException();
}
private void copyAttributesOver(PortfolioTransaction source, PortfolioTransaction target)
{
target.setDate(source.getDate());
target.setSecurity(source.getSecurity());
target.setShares(source.getShares());
target.setNote(source.getNote());
}
@Override
public TransactionOwner<? extends Transaction> getOwner(Transaction t)
{
if (t.equals(transactionFrom))
return portfolioFrom;
else if (t.equals(transactionTo))
return portfolioTo;
else
throw new UnsupportedOperationException();
}
@Override
public Transaction getCrossTransaction(Transaction t)
{
if (t.equals(transactionFrom))
return transactionTo;
else if (t.equals(transactionTo))
return transactionFrom;
else
throw new UnsupportedOperationException();
}
@Override
public TransactionOwner<? extends Transaction> getCrossOwner(Transaction t)
{
if (t.equals(transactionFrom))
return portfolioTo;
else if (t.equals(transactionTo))
return portfolioFrom;
else
throw new UnsupportedOperationException();
}
}