/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.master.config.impl;
import java.util.List;
import com.opengamma.master.ChangeProvidingCombinedMaster;
import com.opengamma.master.config.ConfigDocument;
import com.opengamma.master.config.ConfigHistoryRequest;
import com.opengamma.master.config.ConfigHistoryResult;
import com.opengamma.master.config.ConfigMaster;
import com.opengamma.master.config.ConfigMetaDataRequest;
import com.opengamma.master.config.ConfigMetaDataResult;
import com.opengamma.master.config.ConfigSearchRequest;
import com.opengamma.master.config.ConfigSearchResult;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesMaster;
/**
* A {@link ConfigMaster} which delegates its calls to a list of underlying {@link ConfigMaster}s.
*
* This class extends {@link ChangeProvidingCombinedMaster} to implement methods specific to the {@link HistoricalTimeSeriesMaster}.
*/
public class CombinedConfigMaster extends ChangeProvidingCombinedMaster<ConfigDocument, ConfigMaster> implements ConfigMaster {
public CombinedConfigMaster(List<ConfigMaster> masterList) {
super(masterList);
}
//interfaces defined for purposes of brevity in search() and history() implementations
private interface ConfigMasterSearchStrategy<R> extends SearchStrategy<ConfigDocument, ConfigMaster, ConfigSearchRequest<R>> { }
private interface ConfigMasterHistoryStrategy<R> extends SearchStrategy<ConfigDocument, ConfigMaster, ConfigHistoryRequest<R>> { }
@Override
public <R> ConfigSearchResult<R> search(ConfigSearchRequest<R> request) {
final ConfigSearchResult<R> result = new ConfigSearchResult<R>();
ConfigMasterSearchStrategy<R> searchStrategy = new ConfigMasterSearchStrategy<R>() {
@Override
public ConfigSearchResult<R> search(ConfigMaster master, ConfigSearchRequest<R> searchRequest) {
ConfigSearchResult<R> searchResult = master.search(searchRequest);
result.setVersionCorrection(searchResult.getVersionCorrection());
return searchResult;
}
};
pagedSearch(searchStrategy, result, request);
return result;
}
@Override
public <R> ConfigHistoryResult<R> history(ConfigHistoryRequest<R> request) {
final ConfigHistoryResult<R> result = new ConfigHistoryResult<R>();
ConfigMasterHistoryStrategy<R> searchStrategy = new ConfigMasterHistoryStrategy<R>() {
@Override
public ConfigHistoryResult<R> search(ConfigMaster master, ConfigHistoryRequest<R> searchRequest) {
ConfigHistoryResult<R> searchResult = master.history(searchRequest);
return searchResult;
}
};
pagedSearch(searchStrategy, result, request);
return result;
}
@Override
public ConfigMetaDataResult metaData(ConfigMetaDataRequest request) {
ConfigMetaDataResult result = new ConfigMetaDataResult();
for (ConfigMaster master : getMasterList()) {
ConfigMetaDataResult masterResult = master.metaData(request);
result.getConfigTypes().addAll(masterResult.getConfigTypes());
}
return result;
}
}