/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.cashflow;
import com.opengamma.financial.security.FinancialSecurityVisitorAdapter;
import com.opengamma.financial.security.bond.FloatingRateNoteSecurity;
import com.opengamma.financial.security.fra.FRASecurity;
import com.opengamma.financial.security.swap.FixedInterestRateLeg;
import com.opengamma.financial.security.swap.FloatingInterestRateLeg;
import com.opengamma.financial.security.swap.FloatingSpreadIRLeg;
import com.opengamma.financial.security.swap.SwapSecurity;
/**
*
*/
public class CashFlowFunctionHelper {
/** A static instance */
private static final ReferenceIndexVisitor REFERENCE_INDEX = new ReferenceIndexVisitor();
/**
* Gets a static instance of a visitor that returns a reference index string.
* @return The visitor.
*/
public static ReferenceIndexVisitor getReferenceIndexVisitor() {
return REFERENCE_INDEX;
}
/**
* Constructs reference index strings for {@link SwapSecurity}, {@link FRASecurity}
* and {@link FloatingRateNoteSecurity}
*/
private static final class ReferenceIndexVisitor extends FinancialSecurityVisitorAdapter<String> {
/** Sign for spreads */
private static final String SPREAD = " + ";
/** Sign for leverage */
private static final String LEVERAGE = " * ";
/**
* Default constructor
*/
public ReferenceIndexVisitor() {
}
@Override
public String visitSwapSecurity(final SwapSecurity security) {
if (security.getPayLeg() instanceof FixedInterestRateLeg) {
return null;
}
final FloatingInterestRateLeg floatingLeg = (FloatingInterestRateLeg) security.getPayLeg();
final StringBuilder sb = new StringBuilder(floatingLeg.getFloatingReferenceRateId().getValue());
if (floatingLeg instanceof FloatingSpreadIRLeg) {
sb.append(SPREAD);
sb.append(((FloatingSpreadIRLeg) floatingLeg).getSpread());
}
return sb.toString();
}
@Override
public String visitFRASecurity(final FRASecurity security) {
return security.getUnderlyingId().getValue();
}
@Override
public String visitFloatingRateNoteSecurity(final FloatingRateNoteSecurity security) {
final StringBuilder sb = new StringBuilder(security.getBenchmarkRateId().getValue());
if (Double.compare(security.getLeverageFactor(), 1) != 0) {
sb.append(LEVERAGE);
sb.append(security.getLeverageFactor());
}
sb.append(SPREAD);
sb.append(security.getSpread());
return sb.toString();
}
}
}