/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.master.security.impl;
import java.util.Map;
import com.google.common.collect.Iterables;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueId;
import com.opengamma.master.security.SecurityLoader;
import com.opengamma.master.security.SecurityLoaderRequest;
import com.opengamma.master.security.SecurityLoaderResult;
import com.opengamma.util.ArgumentChecker;
/**
* Abstract implementation of a loader of security information.
* <p>
* This provides default implementations of the interface methods that delegate to a
* protected method that subclasses must implement.
*/
public abstract class AbstractSecurityLoader implements SecurityLoader {
/**
* Creates an instance.
*/
protected AbstractSecurityLoader() {
}
//-------------------------------------------------------------------------
@Override
public UniqueId loadSecurity(ExternalIdBundle externalIdBundle) {
SecurityLoaderRequest request = SecurityLoaderRequest.create(externalIdBundle);
SecurityLoaderResult result = loadSecurities(request);
if (result.getResultMap().size() == 0) {
throw new OpenGammaRuntimeException("Unable to load security: " + externalIdBundle);
}
return Iterables.getOnlyElement(result.getResultMap().values());
}
@Override
public Map<ExternalIdBundle, UniqueId> loadSecurities(Iterable<ExternalIdBundle> externalIdBundles) {
SecurityLoaderRequest request = SecurityLoaderRequest.create(externalIdBundles);
SecurityLoaderResult result = loadSecurities(request);
return result.getResultMap();
}
@Override
public SecurityLoaderResult loadSecurities(SecurityLoaderRequest request) {
ArgumentChecker.notNull(request, "request");
// short-cut empty case
if (request.getExternalIdBundles().isEmpty()) {
return new SecurityLoaderResult();
}
// get securities
return doBulkLoad(request);
}
//-------------------------------------------------------------------------
/**
* Loads the securities.
*
* @param request the request, with a non-empty list of bundles, not null
* @return the result, not null
*/
protected abstract SecurityLoaderResult doBulkLoad(SecurityLoaderRequest request);
}