package org.jquantlib.cashflow;
import java.util.List;
import org.jquantlib.QL;
import org.jquantlib.lang.annotation.QualityAssurance;
import org.jquantlib.lang.annotation.QualityAssurance.Quality;
import org.jquantlib.lang.annotation.QualityAssurance.Version;
import org.jquantlib.lang.exceptions.LibraryException;
import org.jquantlib.util.PolymorphicVisitor;
import org.jquantlib.util.Visitor;
/**
* Coupon selector to PricerSetter
*
* @author Richard Gomes
*/
@QualityAssurance(quality=Quality.Q0_UNFINISHED, version=Version.V097, reviewers="Richard Gomes")
public class PricerSetter implements PolymorphicVisitor {
private static final String INCOMPATIBLE_PRICER = "incompatible pricer";
private static final String UNKNOWN_VISITABLE = "unknown visitable";
//
// private fields
//
private final FloatingRateCouponPricer pricer;
// private constructors
//
public PricerSetter(final FloatingRateCouponPricer pricer) {
this.pricer = pricer;
}
//
// static public methods
//
static public void setCouponPricer(final Leg leg, final FloatingRateCouponPricer pricer) {
final PricerSetter setter = new PricerSetter(pricer);
for (int i=0; i pricers) {
QL.require(leg.size()>0 , "no cashflows");
QL.require(leg.size() == pricers.size() , "mismatch between leg size and number of pricers");
final int nCashFlows = leg.size();
final int nPricers = pricers.size();
for (int i=0; i Visitor visitor(Class extends CashFlow> klass) {
if (klass==org.jquantlib.cashflow.CashFlow.class ) {
return (Visitor) new CashFlowVisitor();
}
if ( klass == SimpleCashFlow.class) {
return (Visitor) new SimpleCashFlowVisitor();
}
if (klass==Coupon.class) {
return (Visitor) new CouponVisitor();
}
if (klass==IborCoupon.class) {
return (Visitor) new IborCouponVisitor();
}
if (klass == CmsCoupon.class) {
return (Visitor) new CmsCouponVisitor();
}
// if (klass == CappedFlooredIborCoupon.class) {
// return (Visitor) new CappedFlooredIborCouponVisitor();
// }
// if (klass == CappedFlooredCmsCoupon.class) {
// return (Visitor) new CappedFlooredCmsCouponVisitor();
// }
// if (klass == DigitalIborCoupon.class) {
// return (Visitor) new DigitalIborCouponVisitor();
// }
// if (klass == DigitalCmsCoupon.class) {
// return (Visitor) new DigitalCmsCouponVisitor();
// }
// if (klass == RangeAccrualFloatersCoupon.class) {
// return (Visitor) new RangeAccrualFloatersCouponVisitor();
// }
// if (klass == SubPeriodsCoupon.class) {
// return (Visitor) new SubPeriodsCouponVisitor();
// }
throw new LibraryException(UNKNOWN_VISITABLE); // QA:[RG]::verified
}
//
// private inner classes
//
private class CashFlowVisitor implements Visitor {
@Override
public void visit(final CashFlow o) {
// nothing
}
}
private class SimpleCashFlowVisitor implements Visitor {
@Override
public void visit(final CashFlow o) {
// nothing
}
}
private class CouponVisitor implements Visitor {
@Override
public void visit(final CashFlow o) {
// nothing
}
}
private class IborCouponVisitor implements Visitor {
@Override
public void visit(final CashFlow o) {
if (IborCouponPricer.class.isAssignableFrom(pricer.getClass())) {
final IborCoupon c = (IborCoupon) o;
c.setPricer(pricer);
} else {
throw new LibraryException(INCOMPATIBLE_PRICER); // QA:[RG]::verified
}
}
}
private class CmsCouponVisitor implements Visitor {
@Override
public void visit(final CashFlow o) {
if (CmsCouponPricer.class.isAssignableFrom(pricer.getClass())) {
final CmsCoupon c = (CmsCoupon) o;
c.setPricer((CmsCouponPricer)pricer);
} else {
throw new LibraryException(INCOMPATIBLE_PRICER); // QA:[RG]::verified
}
}
}
//
// TODO: Uncomment the following code as soon the corresponding classes become translated
//
// private class CappedFlooredIborCouponVisitor implements Visitor {
// @Override
// public void visit(final CashFlow o) {
// if (CappedFlooredIborCouponPricer.class.isAssignableFrom(pricer
// .getClass())) {
// final CappedFlooredIborCoupon c = (CappedFlooredIborCoupon) o;
// c.setPricer((CappedFlooredIborCouponPricer) pricer);
// } else {
// throw new LibraryException(INCOMPATIBLE_PRICER); // QA:[RG]::verified
// }
// }
// }
//
// private class CappedFlooredCmsCouponVisitor implements Visitor
Ads help maintain this website.