/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.solutions.library.storage;
import com.google.inject.AbstractModule;
import com.google.inject.Provider;
import com.google.inject.Provides;
import com.google.inject.Singleton;
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.ConventionBundleMaster;
import com.opengamma.financial.convention.ConventionBundleSource;
import com.opengamma.financial.convention.DefaultConventionBundleSource;
import com.opengamma.financial.convention.InMemoryConventionBundleMaster;
import com.opengamma.master.config.ConfigMaster;
import com.opengamma.master.config.impl.MasterConfigSource;
import com.opengamma.master.convention.ConventionMaster;
import com.opengamma.master.convention.impl.MasterConventionSource;
import com.opengamma.master.exchange.ExchangeMaster;
import com.opengamma.master.exchange.impl.MasterExchangeSource;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesMaster;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesResolver;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesSelector;
import com.opengamma.master.historicaltimeseries.impl.DefaultHistoricalTimeSeriesResolver;
import com.opengamma.master.historicaltimeseries.impl.DefaultHistoricalTimeSeriesSelector;
import com.opengamma.master.historicaltimeseries.impl.MasterHistoricalTimeSeriesSource;
import com.opengamma.master.holiday.HolidayMaster;
import com.opengamma.master.holiday.impl.MasterHolidaySource;
import com.opengamma.master.legalentity.LegalEntityMaster;
import com.opengamma.master.legalentity.impl.MasterLegalEntitySource;
import com.opengamma.master.marketdatasnapshot.MarketDataSnapshotMaster;
import com.opengamma.master.marketdatasnapshot.impl.MasterSnapshotSource;
import com.opengamma.master.portfolio.PortfolioMaster;
import com.opengamma.master.position.PositionMaster;
import com.opengamma.master.position.impl.MasterPositionSource;
import com.opengamma.master.region.RegionMaster;
import com.opengamma.master.region.impl.MasterRegionSource;
import com.opengamma.master.security.SecurityMaster;
import com.opengamma.master.security.impl.MasterSecuritySource;
/**
* Configures the Source wrappers. Source instances tend to be
* minimal wrappers around corresponding masters and are
* agnostic to the underlying master implementation. Therefore
* it makes sense to configure these one level above the
* actual storage module.
*/
public class SourcesModule extends AbstractModule {
private final Provider<HistoricalTimeSeriesSource> _externalTimeSeriesSource;
public SourcesModule(Provider<HistoricalTimeSeriesSource> externalTimeSeriesSource) {
_externalTimeSeriesSource = externalTimeSeriesSource;
}
public SourcesModule() {
_externalTimeSeriesSource = null;
}
@Override
protected void configure() {
}
@Provides
@Singleton
public SecuritySource createSecuritySource(SecurityMaster securityMaster) {
return new MasterSecuritySource(securityMaster);
}
@Provides
@Singleton
public ConfigSource createConfigSource(ConfigMaster configMaster) {
return new MasterConfigSource(configMaster);
}
@Provides
@Singleton
//not strictly a source, but is required to create the HtsSource below.
//exposed as an injectable instance since it is frequently
//needed in its own right, independently of the source and master.
public HistoricalTimeSeriesResolver createHtsResolver(ConfigSource configSource, HistoricalTimeSeriesMaster htsMaster) {
HistoricalTimeSeriesSelector selector = new DefaultHistoricalTimeSeriesSelector(configSource);
return new DefaultHistoricalTimeSeriesResolver(selector, htsMaster);
}
@Provides
@Singleton
public HistoricalTimeSeriesSource createHtsSource(HistoricalTimeSeriesMaster timeSeriesMaster,
HistoricalTimeSeriesResolver resolver) {
if (_externalTimeSeriesSource == null) {
return new MasterHistoricalTimeSeriesSource(timeSeriesMaster, resolver);
} else {
return _externalTimeSeriesSource.get();
}
}
@Provides
@Singleton
public ConventionSource createConventionSource(ConventionMaster conventionMaster) {
return new MasterConventionSource(conventionMaster);
}
@Provides
@Singleton
public ConventionBundleSource createConventionBundleSource(ConventionBundleMaster conventionBundleMaster) {
return new DefaultConventionBundleSource(conventionBundleMaster);
}
@Provides
@Singleton
public RegionSource createRegionSource(RegionMaster regionMaster) {
return new MasterRegionSource(regionMaster);
}
@Provides
@Singleton
public HolidaySource createHolidaySource(HolidayMaster holidayMaster) {
return new MasterHolidaySource(holidayMaster);
}
@Provides
@Singleton
public MarketDataSnapshotSource createSnapshotSource(MarketDataSnapshotMaster snapshotMaster) {
return new MasterSnapshotSource(snapshotMaster);
}
@Provides
@Singleton
public LegalEntitySource createLegalEntitySource(LegalEntityMaster legalEntityMaster) {
return new MasterLegalEntitySource(legalEntityMaster);
}
@Provides
@Singleton
public ExchangeSource createExchangeSource(ExchangeMaster exchangeMaster) {
return new MasterExchangeSource(exchangeMaster);
}
@Provides
@Singleton
public PositionSource createPositionSource(PortfolioMaster portfolioMaster, PositionMaster positionMaster) {
return new MasterPositionSource(portfolioMaster, positionMaster);
}
}