/** * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.depgraph; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.engine.value.ValueSpecification; /** * Wraps another visitor to gather the return values of it. * * @param <T> return type of the visit methods */ public class ResolutionFailureGatherer<T> extends ResolutionFailureVisitor<T> { private final ResolutionFailureVisitor<T> _underlying; private final List<T> _results = new LinkedList<T>(); public ResolutionFailureGatherer(final ResolutionFailureVisitor<T> underlying) { _underlying = underlying; } public ResolutionFailureVisitor<T> getUnderlying() { return _underlying; } public Collection<T> getResults() { return Collections.unmodifiableList(_results); } private synchronized T result(final T result) { _results.add(result); return result; } @Override protected T visitCouldNotResolve(final ValueRequirement valueRequirement) { return result(getUnderlying().visitCouldNotResolve(valueRequirement)); } @Override protected T visitNoFunctions(final ValueRequirement valueRequirement) { return result(getUnderlying().visitNoFunctions(valueRequirement)); } @Override protected T visitRecursiveRequirement(final ValueRequirement valueRequirement) { return result(getUnderlying().visitRecursiveRequirement(valueRequirement)); } @Override protected T visitUnsatisfied(final ValueRequirement valueRequirement) { return result(getUnderlying().visitUnsatisfied(valueRequirement)); } @Override protected T visitMarketDataMissing(final ValueRequirement valueRequirement) { return result(getUnderlying().visitMarketDataMissing(valueRequirement)); } @Override protected T visitSuccessfulFunction(final ValueRequirement valueRequirement, final String function, final ValueSpecification desiredOutput, final Map<ValueSpecification, ValueRequirement> satisfied) { return result(getUnderlying().visitSuccessfulFunction(valueRequirement, function, desiredOutput, satisfied)); } @Override protected T visitFailedFunction(final ValueRequirement valueRequirement, final String function, final ValueSpecification desiredOutput, final Map<ValueSpecification, ValueRequirement> satisfied, final Set<ResolutionFailure> unsatisfied) { return result(getUnderlying().visitFailedFunction(valueRequirement, function, desiredOutput, satisfied, unsatisfied)); } @Override protected T visitFailedFunction(final ValueRequirement valueRequirement, final String function, final ValueSpecification desiredOutput, final Map<ValueSpecification, ValueRequirement> satisfied, final Set<ResolutionFailure> unsatisfied, final Set<ResolutionFailure> unsatisfiedAdditional) { return result(getUnderlying().visitFailedFunction(valueRequirement, function, desiredOutput, satisfied, unsatisfied, unsatisfiedAdditional)); } @Override protected T visitFunction(final ValueRequirement valueRequirement, final String function, final ValueSpecification desiredOutput, final Map<ValueSpecification, ValueRequirement> satisfied, final Set<ResolutionFailure> unsatisfied, final Set<ResolutionFailure> unsatisfiedAdditional) { return result(getUnderlying().visitFunction(valueRequirement, function, desiredOutput, satisfied, unsatisfied, unsatisfiedAdditional)); } @Override protected T visitGetAdditionalRequirementsFailed(final ValueRequirement valueRequirement, final String function, final ValueSpecification desiredOutput, final Map<ValueSpecification, ValueRequirement> requirements) { return result(getUnderlying().visitGetAdditionalRequirementsFailed(valueRequirement, function, desiredOutput, requirements)); } @Override protected T visitGetResultsFailed(final ValueRequirement valueRequirement, final String function, final ValueSpecification desiredOutput, final Map<ValueSpecification, ValueRequirement> requirements) { return result(getUnderlying().visitGetResultsFailed(valueRequirement, function, desiredOutput, requirements)); } @Override protected T visitGetRequirementsFailed(final ValueRequirement valueRequirement, final String function, final ValueSpecification desiredOutput) { return result(getUnderlying().visitGetRequirementsFailed(valueRequirement, function, desiredOutput)); } @Override protected T visitLateResolutionFailure(final ValueRequirement valueRequirement, final String function, final ValueSpecification desiredOutput, final Map<ValueSpecification, ValueRequirement> requirements) { return result(getUnderlying().visitLateResolutionFailure(valueRequirement, function, desiredOutput, requirements)); } @Override protected T visitBlacklistSuppressed(final ValueRequirement valueRequirement, final String function, final ValueSpecification desiredOutput, final Map<ValueSpecification, ValueRequirement> requirements) { return result(getUnderlying().visitBlacklistSuppressed(valueRequirement, function, desiredOutput, requirements)); } }