/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.depgraph.ambiguity; import java.io.PrintStream; import java.util.Collection; import com.opengamma.util.ArgumentChecker; /** * Formats a {@link FullRequirementResolution} object onto a {@link PrintStream}. */ public class FullRequirementResolutionPrinter { private final PrintStream _out; public FullRequirementResolutionPrinter(final PrintStream out) { ArgumentChecker.notNull(out, "out"); _out = out; } protected PrintStream out() { return _out; } public void print(final FullRequirementResolution resolution) { print("", resolution); } protected void print(String indent, final FullRequirementResolution resolution) { String state; if (resolution.isResolved()) { if (resolution.isAmbiguous()) { state = "\tAMBIGUOUS"; } else if (resolution.isDeeplyAmbiguous()) { state = "\tDEEP-AMBIGUOUS"; } else { state = ""; } } else { state = "\tUNRESOLVED"; } out().println(indent + resolution.getRequirement() + state); indent = indent + "\t"; for (Collection<RequirementResolution> resolutions : resolution.getResolutions()) { if (resolutions.size() != 1) { out().println(indent + resolutions.size() + " ambiguous resolutions"); state = "* "; } else { state = " "; } for (RequirementResolution nested : resolutions) { print(indent + state, nested); } } } protected void print(String indent, final RequirementResolution resolution) { out().println(indent + resolution.getFunction() + " producing " + resolution.getSpecification()); indent = indent + "\t"; for (FullRequirementResolution input : resolution.getInputs()) { print(indent, input); } } }