/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.regression; import java.io.IOException; import java.util.Collection; import java.util.Set; import com.google.common.base.Function; import com.google.common.collect.ImmutableMap; import com.opengamma.bbg.referencedata.ReferenceData; import com.opengamma.bbg.referencedata.impl.InMemoryCachingReferenceDataProvider; import com.opengamma.id.UniqueId; import com.opengamma.id.UniqueIdentifiable; import com.opengamma.integration.tool.IntegrationToolContext; import com.opengamma.master.AbstractDocument; import com.opengamma.master.AbstractMaster; import com.opengamma.master.config.ConfigDocument; import com.opengamma.master.config.ConfigMaster; import com.opengamma.master.config.impl.DataTrackingConfigMaster; import com.opengamma.master.convention.ConventionDocument; import com.opengamma.master.convention.ConventionMaster; import com.opengamma.master.convention.impl.DataTrackingConventionMaster; import com.opengamma.master.exchange.ExchangeDocument; import com.opengamma.master.exchange.ExchangeMaster; import com.opengamma.master.exchange.impl.DataTrackingExchangeMaster; import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesInfoDocument; import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesMaster; import com.opengamma.master.historicaltimeseries.impl.DataTrackingHistoricalTimeSeriesMaster; import com.opengamma.master.holiday.HolidayDocument; import com.opengamma.master.holiday.HolidayMaster; import com.opengamma.master.holiday.impl.DataTrackingHolidayMaster; import com.opengamma.master.legalentity.LegalEntityDocument; import com.opengamma.master.legalentity.LegalEntityMaster; import com.opengamma.master.legalentity.impl.DataTrackingLegalEntityMaster; import com.opengamma.master.marketdatasnapshot.MarketDataSnapshotDocument; import com.opengamma.master.marketdatasnapshot.MarketDataSnapshotMaster; import com.opengamma.master.marketdatasnapshot.impl.DataTrackingMarketDataSnapshotMaster; import com.opengamma.master.portfolio.PortfolioDocument; import com.opengamma.master.portfolio.PortfolioMaster; import com.opengamma.master.portfolio.impl.DataTrackingPortfolioMaster; import com.opengamma.master.position.PositionDocument; import com.opengamma.master.position.PositionMaster; import com.opengamma.master.position.impl.DataTrackingPositionMaster; import com.opengamma.master.security.SecurityDocument; import com.opengamma.master.security.SecurityMaster; import com.opengamma.master.security.impl.DataTrackingSecurityMaster; /** * Executes a DB dump, only including the records which have been accessed. */ class GoldenCopyDumpCreator { public static final String DB_DUMP_ZIP = "dbdump.zip"; private final RegressionIO _regressionIO; private final DataTrackingSecurityMaster _securityMaster; private final DataTrackingPositionMaster _positionMaster; private final DataTrackingPortfolioMaster _portfolioMaster; private final DataTrackingConfigMaster _configMaster; private final DataTrackingHistoricalTimeSeriesMaster _timeSeriesMaster; private final DataTrackingHolidayMaster _holidayMaster; private final DataTrackingExchangeMaster _exchangeMaster; private final DataTrackingMarketDataSnapshotMaster _snapshotMaster; private final DataTrackingLegalEntityMaster _legalEntityMaster; private final DataTrackingConventionMaster _conventionMaster; private InMemoryCachingReferenceDataProvider _referenceDataProvider; public GoldenCopyDumpCreator(RegressionIO regressionIO, IntegrationToolContext tc) { _regressionIO = regressionIO; _securityMaster = (DataTrackingSecurityMaster) tc.getSecurityMaster(); _positionMaster = (DataTrackingPositionMaster) tc.getPositionMaster(); _portfolioMaster = (DataTrackingPortfolioMaster) tc.getPortfolioMaster(); _configMaster = (DataTrackingConfigMaster) tc.getConfigMaster(); _timeSeriesMaster = (DataTrackingHistoricalTimeSeriesMaster) tc.getHistoricalTimeSeriesMaster(); _holidayMaster = (DataTrackingHolidayMaster) tc.getHolidayMaster(); _exchangeMaster = (DataTrackingExchangeMaster) tc.getExchangeMaster(); _snapshotMaster = (DataTrackingMarketDataSnapshotMaster) tc.getMarketDataSnapshotMaster(); _legalEntityMaster = (DataTrackingLegalEntityMaster) tc.getLegalEntityMaster(); _conventionMaster = (DataTrackingConventionMaster) tc.getConventionMaster(); _referenceDataProvider = (InMemoryCachingReferenceDataProvider) tc.getBloombergReferenceDataProvider(); } /** * Run the db dump, building appropriate filters from the passed DataTracking masters. * @throws IOException */ public void execute() throws IOException { MasterQueryManager filterManager = buildFilterManager(); _regressionIO.beginWrite(); try { //dump ref data accesses first ImmutableMap<String, ReferenceData> dataAccessed; if (_referenceDataProvider != null) { dataAccessed = _referenceDataProvider.getDataAccessed(); } else { dataAccessed = ImmutableMap.of(); } _regressionIO.write(null, RegressionReferenceData.create(dataAccessed), RegressionUtils.REF_DATA_ACCESSES_IDENTIFIER); DatabaseDump databaseDump = new DatabaseDump(_regressionIO, _securityMaster, _positionMaster, _portfolioMaster, _configMaster, _timeSeriesMaster, _holidayMaster, _exchangeMaster, _snapshotMaster, _legalEntityMaster, _conventionMaster, filterManager); databaseDump.dumpDatabase(); } finally { _regressionIO.endWrite(); } } private MasterQueryManager buildFilterManager() { return new MasterQueryManager( new UniqueIdentifiableQuery<SecurityDocument, SecurityMaster>(_securityMaster.getIdsAccessed()), new UniqueIdentifiableQuery<PositionDocument, PositionMaster>(_positionMaster.getIdsAccessed()), new UniqueIdentifiableQuery<PortfolioDocument, PortfolioMaster>(_portfolioMaster.getIdsAccessed()), new UniqueIdentifiableQuery<ConfigDocument, ConfigMaster>(_configMaster.getIdsAccessed()), new UniqueIdentifiableQuery<HistoricalTimeSeriesInfoDocument, HistoricalTimeSeriesMaster>(_timeSeriesMaster.getIdsAccessed()), new UniqueIdentifiableQuery<HolidayDocument, HolidayMaster>(_holidayMaster.getIdsAccessed()), new UniqueIdentifiableQuery<ExchangeDocument, ExchangeMaster>(_exchangeMaster.getIdsAccessed()), new UniqueIdentifiableQuery<MarketDataSnapshotDocument, MarketDataSnapshotMaster>(_snapshotMaster.getIdsAccessed()), new UniqueIdentifiableQuery<LegalEntityDocument, LegalEntityMaster>(_legalEntityMaster.getIdsAccessed()), new UniqueIdentifiableQuery<ConventionDocument, ConventionMaster>(_conventionMaster.getIdsAccessed())); } /** * Filter which checks a {@link UniqueIdentifiable} object is identified by one of * a set of ids. */ private static class UniqueIdentifiableQuery<D extends AbstractDocument, M extends AbstractMaster<D>> implements Function<M, Collection<D>> { private Set<UniqueId> _idsToInclude; public UniqueIdentifiableQuery(Set<UniqueId> uniqueId) { _idsToInclude = uniqueId; } @Override public Collection<D> apply(M input) { return input.get(_idsToInclude).values(); } } }