/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.value; import java.util.Set; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.builder.ToStringStyle; import com.opengamma.engine.calcnode.InvocationResult; import com.opengamma.engine.view.AggregatedExecutionLog; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.PublicAPI; /** * A value computed by the engine for inclusion in a result model. * <p> * This class is immutable and thread-safe if the value is immutable. */ @PublicAPI public class ComputedValueResult extends ComputedValue { private static final long serialVersionUID = 1L; private final AggregatedExecutionLog _aggregatedExecutionLog; private final String _computeNodeId; private final Set<ValueSpecification> _missingInputs; private final InvocationResult _invocationResult; /** * Creates a computed value result. * <p> * This combines the value, its specification, and execution information. * * @param specification the specification of the value, not null * @param value the actual value * @param aggregatedExecutionLog the aggregated execution log, not null */ public ComputedValueResult(ValueSpecification specification, Object value, AggregatedExecutionLog aggregatedExecutionLog) { this(specification, value, aggregatedExecutionLog, null, null, null); } /** * Creates a computed value result from a {@link ComputedValue}. * * @param computedValue the computed value, not null * @param aggregatedExecutionLog the aggregated execution log, not null */ public ComputedValueResult(ComputedValue computedValue, AggregatedExecutionLog aggregatedExecutionLog) { this(computedValue.getSpecification(), computedValue.getValue(), aggregatedExecutionLog); } /** * Creates a computed value result. * * @param specification the specification of the value, not null * @param value the actual value * @param aggregatedExecutionLog the aggregated execution log, not null * @param computeNodeId the identifier of the compute node on which the engine function executed * @param missingInputs any missing inputs * @param invocationResult the invocation result */ public ComputedValueResult(ValueSpecification specification, Object value, AggregatedExecutionLog aggregatedExecutionLog, String computeNodeId, Set<ValueSpecification> missingInputs, InvocationResult invocationResult) { super(specification, value); ArgumentChecker.notNull(aggregatedExecutionLog, "aggregatedExecutionLog"); _aggregatedExecutionLog = aggregatedExecutionLog; _computeNodeId = computeNodeId; _missingInputs = missingInputs; _invocationResult = invocationResult; } //------------------------------------------------------------------------- /** * Gets an aggregate of the execution logs generated by the engine functions which contributed to this result. * * @return the execution log, not null */ public AggregatedExecutionLog getAggregatedExecutionLog() { return _aggregatedExecutionLog; } /** * Gets the identifier of the compute node which executed the engine function that produced this result. * * @return the compute node identifier, null if not available */ public String getComputeNodeId() { return _computeNodeId; } /** * Gets any missing inputs to the engine function that produced this result. * * @return the missing inputs, null if not available */ public Set<ValueSpecification> getMissingInputs() { return _missingInputs; } /** * Gets the invocation result of the engine function that produced this result. * * @return the invocation result, null if not available */ public InvocationResult getInvocationResult() { return _invocationResult; } //------------------------------------------------------------------------- @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + _aggregatedExecutionLog.hashCode(); result = prime * result + ((_computeNodeId == null) ? 0 : _computeNodeId.hashCode()); result = prime * result + ((_invocationResult == null) ? 0 : _invocationResult.hashCode()); result = prime * result + ((_missingInputs == null) ? 0 : _missingInputs.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (!(obj instanceof ComputedValueResult)) { return false; } ComputedValueResult other = (ComputedValueResult) obj; return ObjectUtils.equals(_computeNodeId, other._computeNodeId) && ObjectUtils.equals(_invocationResult, other._invocationResult) && ObjectUtils.equals(_missingInputs, other._missingInputs) && ObjectUtils.equals(_aggregatedExecutionLog, other._aggregatedExecutionLog); } @Override protected void appendFieldsToString(StringBuffer sb, ToStringStyle style) { super.appendFieldsToString(sb, style); style.append(sb, "log", getAggregatedExecutionLog(), null); } }