/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.depgraph; import com.opengamma.engine.value.ValueRequirement; /** * Source of a single resolved value. */ /* package */final class SingleResolvedValueProducer implements ResolvedValueProducer { private final ValueRequirement _valueRequirement; private final ResolvedValue _resolvedValue; private int _refCount = 1; public SingleResolvedValueProducer(final ValueRequirement valueRequirement, final ResolvedValue resolvedValue) { _valueRequirement = valueRequirement; _resolvedValue = resolvedValue; } @Override public ValueRequirement getValueRequirement() { return _valueRequirement; } private ResolvedValue getResolvedValue() { return _resolvedValue; } @Override public Cancelable addCallback(final GraphBuildingContext context, final ResolvedValueCallback callback) { context.resolved(callback, getValueRequirement(), getResolvedValue(), null); // Single result was posted; can't be cancelled return null; } @Override public synchronized boolean addRef() { if (_refCount > 0) { _refCount++; return true; } else { return false; } } @Override public synchronized int release(GraphBuildingContext context) { assert _refCount > 0; return --_refCount; } @Override public synchronized int getRefCount() { return _refCount; } }