/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.target.lazy; import java.io.ObjectStreamException; import java.io.Serializable; import com.opengamma.engine.ComputationTargetResolver; /** * Base class for lazily resolved object. */ /* package */abstract class LazyResolvedObject<T> implements Serializable { private final LazyResolveContext.AtVersionCorrection _context; private final T _underlying; protected LazyResolvedObject(final LazyResolveContext.AtVersionCorrection context, final T underlying) { _context = context; _underlying = underlying; } protected LazyResolveContext.AtVersionCorrection getLazyResolveContext() { return _context; } protected T getUnderlying() { return _underlying; } protected abstract TargetResolverObject targetResolverObject(final ComputationTargetResolver.AtVersionCorrection resolver); protected abstract Serializable simpleObject(); public Object writeReplace() throws ObjectStreamException { if (getLazyResolveContext().getTargetResolver() != null) { LazyResolveContext.beginWrite(); try { return targetResolverObject(getLazyResolveContext().getTargetResolver()); } finally { LazyResolveContext.endWrite(); } } else { return simpleObject(); } } }