/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.master.exchange.impl;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import com.opengamma.core.AbstractSourceWithExternalBundle;
import com.opengamma.core.exchange.Exchange;
import com.opengamma.core.exchange.ExchangeSource;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.VersionCorrection;
import com.opengamma.master.AbstractMasterSource;
import com.opengamma.master.exchange.ExchangeDocument;
import com.opengamma.master.exchange.ExchangeMaster;
import com.opengamma.master.exchange.ExchangeSearchRequest;
import com.opengamma.master.exchange.ManageableExchange;
import com.opengamma.util.PublicSPI;
import com.opengamma.util.paging.PagingRequest;
/**
* An {@code ExchangeSource} implemented using an underlying {@code ExchangeMaster}.
* <p>
* The {@link ExchangeSource} interface provides exchanges to the application via a narrow API. This class provides the source on top of a standard {@link ExchangeMaster}.
*/
@PublicSPI
public class MasterExchangeSource extends AbstractMasterSource<Exchange, ExchangeDocument, ExchangeMaster> implements ExchangeSource {
/**
* Creates an instance with an underlying master.
*
* @param master the master, not null
*/
public MasterExchangeSource(final ExchangeMaster master) {
super(master);
}
//-------------------------------------------------------------------------
@SuppressWarnings({"unchecked", "rawtypes" })
@Override
public Collection<Exchange> get(ExternalIdBundle bundle, VersionCorrection versionCorrection) {
ExchangeSearchRequest searchRequest = new ExchangeSearchRequest(bundle);
searchRequest.setVersionCorrection(versionCorrection);
return (List) getMaster().search(searchRequest).getExchanges();
}
@Override
public ManageableExchange getSingle(ExternalId identifier) {
return getSingle(identifier.toBundle());
}
@Override
public ManageableExchange getSingle(ExternalIdBundle identifiers) {
return getSingle(identifiers, VersionCorrection.LATEST);
}
@Override
public Map<ExternalIdBundle, Collection<Exchange>> getAll(Collection<ExternalIdBundle> bundles, VersionCorrection versionCorrection) {
return AbstractSourceWithExternalBundle.getAll(this, bundles, versionCorrection);
}
@Override
public Collection<Exchange> get(ExternalIdBundle bundle) {
return get(bundle, VersionCorrection.LATEST);
}
@Override
public ManageableExchange getSingle(ExternalIdBundle bundle, VersionCorrection versionCorrection) {
ExchangeSearchRequest searchRequest = new ExchangeSearchRequest(bundle);
searchRequest.setPagingRequest(PagingRequest.ONE);
searchRequest.setVersionCorrection(versionCorrection);
return getMaster().search(searchRequest).getFirstExchange();
}
@Override
public Map<ExternalIdBundle, Exchange> getSingle(Collection<ExternalIdBundle> bundles, VersionCorrection versionCorrection) {
return AbstractSourceWithExternalBundle.getSingle(this, bundles, versionCorrection);
}
}