/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.model.forex;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.financial.security.FinancialSecurityVisitor;
import com.opengamma.financial.security.FinancialSecurityVisitorAdapter;
import com.opengamma.financial.security.fx.FXForwardSecurity;
import com.opengamma.financial.security.fx.NonDeliverableFXForwardSecurity;
import com.opengamma.financial.security.option.FXBarrierOptionSecurity;
import com.opengamma.financial.security.option.FXDigitalOptionSecurity;
import com.opengamma.financial.security.option.FXOptionSecurity;
import com.opengamma.financial.security.option.NonDeliverableFXDigitalOptionSecurity;
import com.opengamma.financial.security.option.NonDeliverableFXOptionSecurity;
import com.opengamma.financial.security.swap.InterestRateNotional;
import com.opengamma.financial.security.swap.SwapSecurity;
import com.opengamma.util.money.Currency;
/**
*
*/
public class ForexVisitors {
private static final FinancialSecurityVisitor<Currency> s_payCurrencyInstance = new PayCurrencyVisitor();
private static final FinancialSecurityVisitor<Currency> s_receiveCurrencyInstance = new ReceiveCurrencyVisitor();
private static final FinancialSecurityVisitor<Currency> s_callCurrencyInstance = new CallCurrencyVisitor();
private static final FinancialSecurityVisitor<Currency> s_putCurrencyInstance = new PutCurrencyVisitor();
private static final FinancialSecurityVisitor<ZonedDateTime> s_expiryInstance = new ExpiryVisitor();
public static FinancialSecurityVisitor<Currency> getPayCurrencyVisitor() {
return s_payCurrencyInstance;
}
public static FinancialSecurityVisitor<Currency> getReceiveCurrencyVisitor() {
return s_receiveCurrencyInstance;
}
public static FinancialSecurityVisitor<Currency> getCallCurrencyVisitor() {
return s_callCurrencyInstance;
}
public static FinancialSecurityVisitor<Currency> getPutCurrencyVisitor() {
return s_putCurrencyInstance;
}
public static FinancialSecurityVisitor<ZonedDateTime> getExpiryVisitor() {
return s_expiryInstance;
}
private static class PayCurrencyVisitor extends FinancialSecurityVisitorAdapter<Currency> {
public PayCurrencyVisitor() {
}
@Override
public Currency visitFXForwardSecurity(final FXForwardSecurity security) {
return security.getPayCurrency();
}
@Override
public Currency visitNonDeliverableFXForwardSecurity(final NonDeliverableFXForwardSecurity security) {
return security.getPayCurrency();
}
@Override
// Marc
public Currency visitSwapSecurity(final SwapSecurity security) {
return ((InterestRateNotional) security.getPayLeg().getNotional()).getCurrency();
}
}
private static class ReceiveCurrencyVisitor extends FinancialSecurityVisitorAdapter<Currency> {
public ReceiveCurrencyVisitor() {
}
@Override
public Currency visitFXForwardSecurity(final FXForwardSecurity security) {
return security.getReceiveCurrency();
}
@Override
public Currency visitNonDeliverableFXForwardSecurity(final NonDeliverableFXForwardSecurity security) {
return security.getReceiveCurrency();
}
@Override
// Marc
public Currency visitSwapSecurity(final SwapSecurity security) {
return ((InterestRateNotional) security.getReceiveLeg().getNotional()).getCurrency();
}
}
private static class CallCurrencyVisitor extends FinancialSecurityVisitorAdapter<Currency> {
public CallCurrencyVisitor() {
}
@Override
public Currency visitFXOptionSecurity(final FXOptionSecurity security) {
return security.getCallCurrency();
}
@Override
public Currency visitNonDeliverableFXOptionSecurity(final NonDeliverableFXOptionSecurity security) {
return security.getCallCurrency();
}
@Override
public Currency visitFXBarrierOptionSecurity(final FXBarrierOptionSecurity security) {
return security.getCallCurrency();
}
@Override
public Currency visitFXDigitalOptionSecurity(final FXDigitalOptionSecurity security) {
return security.getCallCurrency();
}
@Override
public Currency visitNonDeliverableFXDigitalOptionSecurity(final NonDeliverableFXDigitalOptionSecurity security) {
return security.getCallCurrency();
}
}
private static class PutCurrencyVisitor extends FinancialSecurityVisitorAdapter<Currency> {
public PutCurrencyVisitor() {
}
@Override
public Currency visitFXOptionSecurity(final FXOptionSecurity security) {
return security.getPutCurrency();
}
@Override
public Currency visitNonDeliverableFXOptionSecurity(final NonDeliverableFXOptionSecurity security) {
return security.getPutCurrency();
}
@Override
public Currency visitFXBarrierOptionSecurity(final FXBarrierOptionSecurity security) {
return security.getPutCurrency();
}
@Override
public Currency visitFXDigitalOptionSecurity(final FXDigitalOptionSecurity security) {
return security.getPutCurrency();
}
@Override
public Currency visitNonDeliverableFXDigitalOptionSecurity(final NonDeliverableFXDigitalOptionSecurity security) {
return security.getPutCurrency();
}
}
private static class ExpiryVisitor extends FinancialSecurityVisitorAdapter<ZonedDateTime> {
public ExpiryVisitor() {
}
@Override
public ZonedDateTime visitFXForwardSecurity(final FXForwardSecurity security) {
return security.getForwardDate();
}
@Override
public ZonedDateTime visitNonDeliverableFXForwardSecurity(final NonDeliverableFXForwardSecurity security) {
return security.getForwardDate();
}
@Override
public ZonedDateTime visitFXOptionSecurity(final FXOptionSecurity security) {
return security.getExpiry().getExpiry();
}
@Override
public ZonedDateTime visitNonDeliverableFXOptionSecurity(final NonDeliverableFXOptionSecurity security) {
return security.getExpiry().getExpiry();
}
@Override
public ZonedDateTime visitFXBarrierOptionSecurity(final FXBarrierOptionSecurity security) {
return security.getExpiry().getExpiry();
}
@Override
public ZonedDateTime visitFXDigitalOptionSecurity(final FXDigitalOptionSecurity security) {
return security.getExpiry().getExpiry();
}
@Override
public ZonedDateTime visitNonDeliverableFXDigitalOptionSecurity(final NonDeliverableFXDigitalOptionSecurity security) {
return security.getExpiry().getExpiry();
}
}
}