/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.conversion;
import org.threeten.bp.Period;
import org.threeten.bp.ZoneOffset;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.analytics.financial.instrument.InstrumentDefinition;
import com.opengamma.analytics.financial.instrument.fra.ForwardRateAgreementDefinition;
import com.opengamma.analytics.financial.instrument.index.IborIndex;
import com.opengamma.core.holiday.HolidaySource;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.core.region.RegionSource;
import com.opengamma.financial.convention.ConventionBundle;
import com.opengamma.financial.convention.ConventionBundleSource;
import com.opengamma.financial.convention.HolidaySourceCalendarAdapter;
import com.opengamma.financial.convention.calendar.Calendar;
import com.opengamma.financial.convention.frequency.PeriodFrequency;
import com.opengamma.financial.security.FinancialSecurityVisitorAdapter;
import com.opengamma.financial.security.fra.FRASecurity;
import com.opengamma.financial.security.fra.ForwardRateAgreementSecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.Currency;
/**
* @deprecated Use {@link FRASecurityConverter}. {@link ConventionBundleSource} should not be used,
* as the conventions are not typed.
*/
@Deprecated
public class FRASecurityConverterDeprecated extends FinancialSecurityVisitorAdapter<InstrumentDefinition<?>> {
private final HolidaySource _holidaySource;
private final RegionSource _regionSource;
private final ConventionBundleSource _conventionSource;
public FRASecurityConverterDeprecated(final HolidaySource holidaySource, final RegionSource regionSource, final ConventionBundleSource conventionSource) {
ArgumentChecker.notNull(holidaySource, "holiday source");
ArgumentChecker.notNull(regionSource, "region source");
ArgumentChecker.notNull(conventionSource, "convention source");
_holidaySource = holidaySource;
_regionSource = regionSource;
_conventionSource = conventionSource;
}
@Override
public ForwardRateAgreementDefinition visitFRASecurity(final FRASecurity security) {
ArgumentChecker.notNull(security, "security");
final Currency currency = security.getCurrency();
final ConventionBundle fraConvention = _conventionSource.getConventionBundle(security.getUnderlyingId());
if (fraConvention == null) {
throw new OpenGammaRuntimeException("Could not get convention for " + security.getUnderlyingId());
}
final ZonedDateTime accrualStartDate = security.getStartDate();
final ZonedDateTime accrualEndDate = security.getEndDate();
final double notional = security.getAmount();
final Calendar calendar = CalendarUtils.getCalendar(_regionSource, _holidaySource, ExternalSchemes.currencyRegionId(currency)); //TODO exchange region?
final IborIndex iborIndex = new IborIndex(currency, fraConvention.getPeriod(), fraConvention.getSettlementDays(), fraConvention.getDayCount(), fraConvention.getBusinessDayConvention(),
fraConvention.isEOMConvention());
return ForwardRateAgreementDefinition.from(accrualStartDate, accrualEndDate, notional, iborIndex, security.getRate(), calendar);
}
@Override
public ForwardRateAgreementDefinition visitForwardRateAgreementSecurity(final ForwardRateAgreementSecurity security) {
ArgumentChecker.notNull(security, "security");
final Currency currency = security.getCurrency();
final Period period = PeriodFrequency.of(security.getIndexFrequency().getName()).getPeriod();
final ZonedDateTime accrualStartDate = security.getStartDate().atStartOfDay(ZoneOffset.UTC);
final ZonedDateTime accrualEndDate = security.getEndDate().atStartOfDay(ZoneOffset.UTC);
final double notional = security.getAmount();
final Calendar calendar = new HolidaySourceCalendarAdapter(_holidaySource, security.getCalendars().toArray(new ExternalId[security.getCalendars().size()]));
final IborIndex iborIndex = new IborIndex(currency, period, security.getFixingLag(), security.getDayCount(), security.getFixingBusinessDayConvention(), false);
return ForwardRateAgreementDefinition.from(accrualStartDate, accrualEndDate, notional, iborIndex, security.getRate(), calendar);
}
}