/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.solutions.library.engine;
import javax.inject.Inject;
import org.threeten.bp.Instant;
import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.MutableClassToInstanceMap;
import com.google.inject.Provider;
import com.opengamma.core.config.ConfigSource;
import com.opengamma.core.convention.ConventionSource;
import com.opengamma.core.exchange.ExchangeSource;
import com.opengamma.core.historicaltimeseries.HistoricalTimeSeriesSource;
import com.opengamma.core.holiday.HolidaySource;
import com.opengamma.core.legalentity.LegalEntitySource;
import com.opengamma.core.marketdatasnapshot.MarketDataSnapshotSource;
import com.opengamma.core.position.PositionSource;
import com.opengamma.core.region.RegionSource;
import com.opengamma.core.security.SecuritySource;
import com.opengamma.financial.convention.ConventionBundleSource;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesResolver;
import com.opengamma.service.ServiceContext;
import com.opengamma.service.ThreadLocalServiceContext;
import com.opengamma.service.VersionCorrectionProvider;
import com.opengamma.sesame.engine.ComponentMap;
import com.opengamma.sesame.engine.FixedInstantVersionCorrectionProvider;
import com.opengamma.util.ArgumentChecker;
/**
* Provider responsible for creating the {@link ComponentMap}.
*/
public class ComponentMapProvider implements Provider<ComponentMap> {
private final HolidaySource _holidaySource;
private final ConfigSource _configSource;
private final HistoricalTimeSeriesSource _htsSource;
private final ConventionBundleSource _conventionBundleSource;
private final HistoricalTimeSeriesResolver _htsResolver;
private final SecuritySource _securitySource;
private final ConventionSource _conventionSource;
private final RegionSource _regionSource;
private final MarketDataSnapshotSource _snapshotSource;
private final LegalEntitySource _legalEntitySource;
private final ExchangeSource _exchangeSource;
private final PositionSource _positionSource;
/**
* @param holidaySource the holiday source
* @param configSource the config source
* @param htsSource the hts source
* @param conventionBundleSource the convention bundle source
* @param htsResolver the hts resolver to use
* @param securitySource the security source
* @param conventionSource the convention source
* @param regionSource the region source
* @param positionSource the position source
* @param snapshotSource the snapshot source
* @param legalEntitySource the legal entity source
* @param exchangeSource the exchange source
*/
@Inject
public ComponentMapProvider(HolidaySource holidaySource,
ConfigSource configSource,
HistoricalTimeSeriesSource htsSource,
ConventionBundleSource conventionBundleSource,
HistoricalTimeSeriesResolver htsResolver,
SecuritySource securitySource,
ConventionSource conventionSource,
RegionSource regionSource,
PositionSource positionSource,
MarketDataSnapshotSource snapshotSource,
LegalEntitySource legalEntitySource,
ExchangeSource exchangeSource) {
_holidaySource = ArgumentChecker.notNull(holidaySource, "holidaySource");
_configSource = ArgumentChecker.notNull(configSource, "configSource");
_htsSource = ArgumentChecker.notNull(htsSource, "htsSource");
_conventionBundleSource = ArgumentChecker.notNull(conventionBundleSource, "conventionBundleSource");
_htsResolver = ArgumentChecker.notNull(htsResolver, "htsResolver");
_securitySource = ArgumentChecker.notNull(securitySource, "securitySource");
_conventionSource = ArgumentChecker.notNull(conventionSource, "conventionSource");
_regionSource = ArgumentChecker.notNull(regionSource, "regionSource");
_positionSource = ArgumentChecker.notNull(positionSource, "positionSource");
_exchangeSource = ArgumentChecker.notNull(exchangeSource, "exchangeSource");
_legalEntitySource = ArgumentChecker.notNull(legalEntitySource, "legalEntitySource");
_snapshotSource = ArgumentChecker.notNull(snapshotSource, "snapshotSource");
}
@Override
public ComponentMap get() {
ClassToInstanceMap<Object> components = MutableClassToInstanceMap.create();
components.putInstance(HolidaySource.class, _holidaySource);
components.putInstance(ConfigSource.class, _configSource);
components.putInstance(HistoricalTimeSeriesSource.class, _htsSource);
components.putInstance(ConventionBundleSource.class, _conventionBundleSource);
components.putInstance(HistoricalTimeSeriesResolver.class, _htsResolver);
components.putInstance(SecuritySource.class, _securitySource);
components.putInstance(ConventionSource.class, _conventionSource);
components.putInstance(RegionSource.class, _regionSource);
components.putInstance(PositionSource.class, _positionSource);
components.putInstance(MarketDataSnapshotSource.class, _snapshotSource);
components.putInstance(LegalEntitySource.class, _legalEntitySource);
components.putInstance(ExchangeSource.class, _exchangeSource);
ComponentMap componentMap = ComponentMap.of(components);
ServiceContext serviceContext = ServiceContext.of(componentMap.getComponents())
.with(VersionCorrectionProvider.class,
new FixedInstantVersionCorrectionProvider(Instant.now()));
ThreadLocalServiceContext.init(serviceContext);
return componentMap;
}
}