/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate;
import java.util.Collections;
import java.util.Set;
import com.google.common.collect.Sets;
import com.opengamma.analytics.financial.instrument.InstrumentDefinitionVisitor;
import com.opengamma.analytics.financial.instrument.InstrumentDefinitionVisitorAdapter;
import com.opengamma.analytics.financial.instrument.fra.ForwardRateAgreementDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponFixedAccruedCompoundingDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponFixedCompoundingDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponFixedDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborAverageFixingDatesCompoundingDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborAverageFixingDatesCompoundingFlatSpreadDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborAverageFixingDatesDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborAverageIndexDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborCompoundingDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborCompoundingFlatSpreadDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborCompoundingSimpleSpreadDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborCompoundingSpreadDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborGearingDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborRatchetDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborSpreadDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponONArithmeticAverageDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponONArithmeticAverageSpreadDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponONArithmeticAverageSpreadSimplifiedDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponONCompoundedDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponONDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponONSimplifiedDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponONSpreadDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponONSpreadSimplifiedDefinition;
import com.opengamma.util.time.Tenor;
/**
* Gets the index tenor of each floating coupon.
*/
public final class CouponTenorVisitor extends InstrumentDefinitionVisitorAdapter<Void, Set<Tenor>> {
/** The singleton instance */
private static final InstrumentDefinitionVisitor<Void, Set<Tenor>> INSTANCE = new CouponTenorVisitor();
/**
* Gets the singleton instance.
* @return The instance
*/
public static InstrumentDefinitionVisitor<Void, Set<Tenor>> getInstance() {
return INSTANCE;
}
@Override
public Set<Tenor> visitCouponIborDefinition(CouponIborDefinition definition) {
return Sets.newHashSet(Tenor.of(definition.getIndex().getTenor()));
}
@Override
public Set<Tenor> visitCouponIborSpreadDefinition(CouponIborSpreadDefinition definition) {
return Sets.newHashSet(Tenor.of(definition.getIndex().getTenor()));
}
@Override
public Set<Tenor> visitCouponIborGearingDefinition(CouponIborGearingDefinition definition) {
return Sets.newHashSet(Tenor.of(definition.getIndex().getTenor()));
}
@Override
public Set<Tenor> visitCouponIborCompoundingDefinition(CouponIborCompoundingDefinition definition) {
return Sets.newHashSet(Tenor.of(definition.getIndex().getTenor()));
}
@Override
public Set<Tenor> visitCouponIborCompoundingFlatSpreadDefinition(
CouponIborCompoundingFlatSpreadDefinition definition) {
return Sets.newHashSet(Tenor.of(definition.getIndex().getTenor()));
}
@Override
public Set<Tenor> visitCouponIborCompoundingSimpleSpreadDefinition(
CouponIborCompoundingSimpleSpreadDefinition payment) {
return Sets.newHashSet(Tenor.of(payment.getIndex().getTenor()));
}
@Override
public Set<Tenor> visitCouponIborRatchetDefinition(CouponIborRatchetDefinition payment) {
return Sets.newHashSet(Tenor.of(payment.getIndex().getTenor()));
}
@Override
public Set<Tenor> visitCouponIborAverageDefinition(CouponIborAverageIndexDefinition payment) {
return Sets.newHashSet(Tenor.of(payment.getIndex1().getTenor()), Tenor.of(payment.getIndex2().getTenor()));
}
@Override
public Set<Tenor> visitCouponIborAverageCompoundingDefinition(
CouponIborAverageFixingDatesCompoundingDefinition payment) {
return Sets.newHashSet(Tenor.of(payment.getIndex().getTenor()));
}
@Override
public Set<Tenor> visitCouponIborAverageFixingDatesDefinition(CouponIborAverageFixingDatesDefinition payment) {
return Sets.newHashSet(Tenor.of(payment.getIndex().getTenor()));
}
@Override
public Set<Tenor> visitCouponIborAverageFlatCompoundingSpreadDefinition(
CouponIborAverageFixingDatesCompoundingFlatSpreadDefinition payment) {
return Sets.newHashSet(Tenor.of(payment.getIndex().getTenor()));
}
@Override
public Set<Tenor> visitCouponOISDefinition(CouponONDefinition definition) {
return Sets.newHashSet(Tenor.ON);
}
@Override
public Set<Tenor> visitCouponOISSimplifiedDefinition(CouponONSimplifiedDefinition payment) {
return Sets.newHashSet(Tenor.ON);
}
@Override
public Set<Tenor> visitCouponArithmeticAverageONDefinition(CouponONArithmeticAverageDefinition payment) {
return Sets.newHashSet(Tenor.ON);
}
@Override
public Set<Tenor> visitCouponArithmeticAverageONSpreadDefinition(
CouponONArithmeticAverageSpreadDefinition definition) {
return Sets.newHashSet(Tenor.ON);
}
@Override
public Set<Tenor> visitCouponArithmeticAverageONSpreadSimplifiedDefinition(
CouponONArithmeticAverageSpreadSimplifiedDefinition payment) {
return Sets.newHashSet(Tenor.ON);
}
@Override
public Set<Tenor> visitCouponONSpreadDefinition(final CouponONSpreadDefinition definition) {
return Sets.newHashSet(Tenor.ON);
}
@Override
public Set<Tenor> visitCouponONSpreadSimplifiedDefinition(CouponONSpreadSimplifiedDefinition payment) {
return Sets.newHashSet(Tenor.ON);
}
@Override
public Set<Tenor> visitCouponONCompoundedDefinition(CouponONCompoundedDefinition payment) {
return Sets.newHashSet(Tenor.ON);
}
@Override
public Set<Tenor> visitCouponFixedDefinition(final CouponFixedDefinition definition) {
return Collections.emptySet();
}
@Override
public Set<Tenor> visitCouponIborCompoundingSpreadDefinition(CouponIborCompoundingSpreadDefinition payment) {
return Sets.newHashSet(Tenor.of(payment.getIndex().getTenor()));
}
@Override
public Set<Tenor> visitCouponFixedAccruedCompoundingDefinition(CouponFixedAccruedCompoundingDefinition payment) {
return Collections.emptySet();
}
@Override
public Set<Tenor> visitCouponFixedCompoundingDefinition(CouponFixedCompoundingDefinition payment) {
return Collections.emptySet();
}
@Override
public Set<Tenor> visitForwardRateAgreementDefinition(ForwardRateAgreementDefinition fra) {
return Sets.newHashSet(Tenor.of(fra.getIndex().getTenor()));
}
}