return null;
}
}
final Map<Iterator<ValueSpecification>, ValueRequirement> inputs = new HashMap<Iterator<ValueSpecification>, ValueRequirement>();
for (final ValueRequirement requirement : requirements) {
final ComputationTargetReference targetRef = requirement.getTargetReference();
if (targetRef instanceof ComputationTargetSpecification) {
final ComputationTargetSpecification targetSpec = targetRef.getSpecification();
final UniqueIdentifiable requirementTarget = _targetCache.get(targetSpec.getUniqueId());
if (isAvailable(targetSpec, requirementTarget, requirement)) {
s_logger.debug("Requirement {} can be satisfied by market data", requirement);
inputs.put(new SingleItem<ValueSpecification>(new ValueSpecification(requirement.getValueName(), targetSpec, ValueProperties.with(ValuePropertyNames.FUNCTION, "marketdata").get())),
requirement);
} else {
if (requirementTarget != null) {
s_logger.debug("Resolving {} for function {}", requirement, function);
final Set<ValueSpecification> satisfied = satisfyRequirement(visitedRequirements, visitedFunctions, ComputationTargetResolverUtils.createResolvedTarget(targetSpec, requirementTarget),
requirement);
if (satisfied == null) {
s_logger.debug("Can't satisfy {} for function {}", requirement, function);
if (!function.canHandleMissingRequirements()) {
return null;
}
} else {
s_logger.debug("Resolved {} to {}", requirement, satisfied);
inputs.put(satisfied.iterator(), requirement);
}
} else {
s_logger.debug("No target cached for {}, assuming ok", targetSpec);
inputs.put(new SingleItem<ValueSpecification>(new ValueSpecification(requirement.getValueName(), targetSpec,
ValueProperties.with(ValuePropertyNames.FUNCTION, "").get())), requirement);
}
}
} else {
s_logger.debug("Externally referenced entity {}, assuming ok", targetRef);
final ExternalId eid = targetRef.getRequirement().getIdentifiers().iterator().next();
final UniqueId uid = UniqueId.of(eid.getScheme().getName(), eid.getValue());
inputs.put(
new SingleItem<ValueSpecification>(new ValueSpecification(requirement.getValueName(), new ComputationTargetSpecification(targetRef.getType(), uid), ValueProperties.with(
ValuePropertyNames.FUNCTION, "").get())), requirement);
}
}
final Set<ValueSpecification> outputs = new HashSet<ValueSpecification>();
final Map<ValueSpecification, ValueRequirement> inputSet = new HashMap<ValueSpecification, ValueRequirement>();