/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.function.blacklist; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.apache.commons.lang.ObjectUtils; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.function.FunctionParameters; import com.opengamma.engine.function.ParameterizedFunction; import com.opengamma.engine.value.ValueSpecification; /** * Basic rule for blacklisting a function. */ public final class FunctionBlacklistRule { private String _functionIdentifier; private FunctionParameters _functionParameters; private ComputationTargetSpecification _target; private Set<ValueSpecification> _inputs; private boolean _inputsExactMatch = true; private Set<ValueSpecification> _outputs; private boolean _outputsExactMatch = true; public FunctionBlacklistRule() { } public FunctionBlacklistRule(final ParameterizedFunction function) { setFunction(function); } public FunctionBlacklistRule(final ComputationTargetSpecification target) { setTarget(target); } public FunctionBlacklistRule(final ParameterizedFunction function, final ComputationTargetSpecification target) { setFunction(function); setTarget(target); } public FunctionBlacklistRule(final ParameterizedFunction function, final ComputationTargetSpecification target, final Set<ValueSpecification> inputs, final Set<ValueSpecification> outputs) { setFunction(function); setTarget(target); setInputs(inputs); setOutputs(outputs); } public String getFunctionIdentifier() { return _functionIdentifier; } public void setFunctionIdentifier(final String functionIdentifier) { _functionIdentifier = functionIdentifier; } public FunctionParameters getFunctionParameters() { return _functionParameters; } public void setFunctionParameters(final FunctionParameters functionParameters) { _functionParameters = functionParameters; } public void setFunction(final ParameterizedFunction function) { if (function != null) { setFunctionIdentifier(function.getFunction().getFunctionDefinition().getUniqueId()); setFunctionParameters(function.getParameters()); } else { setFunctionIdentifier(null); setFunctionParameters(null); } } public ComputationTargetSpecification getTarget() { return _target; } public void setTarget(final ComputationTargetSpecification target) { _target = target; } public void setInputs(final Collection<ValueSpecification> inputs) { if (inputs != null) { _inputs = Collections.unmodifiableSet(new HashSet<ValueSpecification>(inputs)); } else { _inputs = null; } } public Set<ValueSpecification> getInputs() { return _inputs; } public void setInputsExactMatch(final boolean exactMatch) { _inputsExactMatch = exactMatch; } public boolean isInputsExactMatch() { return _inputsExactMatch; } public void setOutputs(final Collection<ValueSpecification> outputs) { if (outputs != null) { _outputs = Collections.unmodifiableSet(new HashSet<ValueSpecification>(outputs)); } else { _outputs = null; } } public Set<ValueSpecification> getOutputs() { return _outputs; } public void setOutputsExactMatch(final boolean exactMatch) { _outputsExactMatch = exactMatch; } public boolean isOutputsExactMatch() { return _outputsExactMatch; } @Override public int hashCode() { int hc = 1; hc += hc * 16 + ObjectUtils.hashCode(_functionIdentifier); hc += hc * 16 + ObjectUtils.hashCode(_functionParameters); hc += hc * 16 + ObjectUtils.hashCode(_target); hc += hc * 16 + ObjectUtils.hashCode(_inputs); hc += hc * 16 + (_inputsExactMatch ? 1 : 0); hc += hc * 16 + ObjectUtils.hashCode(_outputs); hc += hc * 16 + (_outputsExactMatch ? 1 : 0); return hc; } @Override public boolean equals(final Object o) { if (o == this) { return true; } if (!(o instanceof FunctionBlacklistRule)) { return false; } final FunctionBlacklistRule other = (FunctionBlacklistRule) o; return ObjectUtils.equals(_functionIdentifier, other._functionIdentifier) && ObjectUtils.equals(_functionParameters, other._functionParameters) && ObjectUtils.equals(_target, other._target) && ObjectUtils.equals(_inputs, other._inputs) && (_inputsExactMatch == other._inputsExactMatch) && ObjectUtils.equals(_outputs, other._outputs) && (_outputsExactMatch == other._outputsExactMatch); } @Override public String toString() { final StringBuilder sb = new StringBuilder("FunctionBlacklistRule["); boolean comma = false; if (getFunctionIdentifier() != null) { sb.append("functionIdentifier=").append(getFunctionIdentifier()); comma = true; } if (getFunctionParameters() != null) { if (comma) { sb.append(','); } sb.append("functionParameters=").append(getFunctionParameters()); comma = true; } if (getTarget() != null) { if (comma) { sb.append(','); } sb.append("target=").append(getTarget()); comma = true; } if (getInputs() != null) { if (comma) { sb.append(','); } sb.append("inputs=").append(getInputs()); if (!isInputsExactMatch()) { sb.append(" (partial match)"); } comma = true; } if (getOutputs() != null) { if (comma) { sb.append(','); } sb.append("outputs=").append(getOutputs()); if (!isOutputsExactMatch()) { sb.append(" (partial match)"); } } return sb.append(']').toString(); } }