/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.calcnode; import java.util.Set; import com.google.common.collect.ImmutableSet; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.util.ArgumentChecker; /** * A builder for {@link CalculationJobResultItem}. */ public final class CalculationJobResultItemBuilder { private Set<ValueSpecification> _missingInputs; private Set<ValueSpecification> _missingOutputs; private final MutableExecutionLog _executionLog; private CalculationJobResultItemBuilder(MutableExecutionLog executionLog) { ArgumentChecker.notNull(executionLog, "executionLog"); _executionLog = executionLog; } //------------------------------------------------------------------------- public static CalculationJobResultItemBuilder of(MutableExecutionLog executionLog) { return new CalculationJobResultItemBuilder(executionLog); } //------------------------------------------------------------------------- public CalculationJobResultItemBuilder withMissingInputs(Set<ValueSpecification> missingInputs) { ArgumentChecker.notNull(missingInputs, "missingInputs"); _missingInputs = missingInputs; withException(CalculationJobResultItem.MISSING_INPUTS_FAILURE_CLASS, "Unable to execute because of " + missingInputs.size() + " missing input(s)"); return this; } public CalculationJobResultItemBuilder withPartialInputs(Set<ValueSpecification> missingInputs) { ArgumentChecker.notNull(missingInputs, "missingInputs"); _missingInputs = missingInputs; return this; } public CalculationJobResultItemBuilder withMissingOutputs(Set<ValueSpecification> missingOutputs) { ArgumentChecker.notNull(missingOutputs, "missingOutputs"); _missingOutputs = missingOutputs; return this; } public CalculationJobResultItemBuilder withSuppression() { withException(CalculationJobResultItem.EXECUTION_SUPPRESSED_CLASS, CalculationJobResultItem.EXECUTION_SUPPRESSED_MESSAGE); return this; } public CalculationJobResultItemBuilder withException(Throwable t) { _executionLog.setException(t); return this; } public CalculationJobResultItemBuilder withException(String exceptionClass, String exceptionMessage) { _executionLog.setException(exceptionClass, exceptionMessage); return this; } //------------------------------------------------------------------------- public CalculationJobResultItem toResultItem() { Set<ValueSpecification> missingInputs = _missingInputs != null ? _missingInputs : ImmutableSet.<ValueSpecification>of(); Set<ValueSpecification> missingOutputs = _missingOutputs != null ? _missingOutputs : ImmutableSet.<ValueSpecification>of(); return new CalculationJobResultItem(missingInputs, missingOutputs, _executionLog); } }