/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.marketdata.manipulator;
import com.opengamma.core.security.Security;
import com.opengamma.engine.ComputationTarget;
import com.opengamma.engine.ComputationTargetResolver;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.target.ComputationTargetRequirement;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.id.ExternalId;
import com.opengamma.util.ArgumentChecker;
/**
* Used by {@link MarketDataSelector} implementations for resolving {@link ExternalId}s into the objects
* they identify.
*/
public interface SelectorResolver {
/**
* Resolves an ID to a security.
* @param id An ID
* @return The security identified by the ID or null if the ID is unknown or doesn't identify a security
*/
Security resolveSecurity(ExternalId id);
}
/**
* Resolver that uses a {@link ComputationTargetResolver.AtVersionCorrection} to resolve IDs to objects.
*/
/* package */ class DefaultSelectorResolver implements SelectorResolver {
/** Performs the resolution. */
private final ComputationTargetResolver.AtVersionCorrection _resolver;
/* package */ DefaultSelectorResolver(ComputationTargetResolver.AtVersionCorrection resolver) {
ArgumentChecker.notNull(resolver, "resolver");
_resolver = resolver;
}
@Override
public Security resolveSecurity(ExternalId id) {
ComputationTargetRequirement securityReq = new ComputationTargetRequirement(ComputationTargetType.SECURITY, id);
ComputationTargetSpecification securitySpec =
_resolver.getSpecificationResolver().getTargetSpecification(securityReq);
ComputationTarget target = _resolver.resolve(securitySpec);
if (target == null) {
return null;
}
return target.getSecurity();
}
}