/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.cache;
import java.util.Collection;
import com.opengamma.engine.value.ComputedValue;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.async.AsynchronousExecution;
import com.opengamma.util.tuple.Pair;
/**
* An implementation of {@link DeferredViewComputationCache} that always writes to the underlying immediately.
*/
public class DirectWriteViewComputationCache implements DeferredViewComputationCache {
private final ViewComputationCache _underlying;
public DirectWriteViewComputationCache(final ViewComputationCache underlying) {
ArgumentChecker.notNull(underlying, "underlying");
_underlying = underlying;
}
protected ViewComputationCache getUnderlying() {
return _underlying;
}
@Override
public Object getValue(final ValueSpecification specification) {
return getUnderlying().getValue(specification);
}
@Override
public Object getValue(final ValueSpecification specification, final CacheSelectHint filter) {
return getUnderlying().getValue(specification, filter);
}
@Override
public Collection<Pair<ValueSpecification, Object>> getValues(final Collection<ValueSpecification> specifications) {
return getUnderlying().getValues(specifications);
}
@Override
public Collection<Pair<ValueSpecification, Object>> getValues(final Collection<ValueSpecification> specifications, final CacheSelectHint filter) {
return getUnderlying().getValues(specifications, filter);
}
@Override
public void putSharedValue(final ComputedValue value) {
getUnderlying().putSharedValue(value);
}
@Override
public void putPrivateValue(final ComputedValue value) {
getUnderlying().putPrivateValue(value);
}
@Override
public void putValue(final ComputedValue value, final CacheSelectHint filter) {
getUnderlying().putValue(value, filter);
}
@Override
public void putSharedValues(final Collection<? extends ComputedValue> values) {
getUnderlying().putSharedValues(values);
}
@Override
public void putPrivateValues(final Collection<? extends ComputedValue> values) {
getUnderlying().putPrivateValues(values);
}
@Override
public void putValues(final Collection<? extends ComputedValue> values, final CacheSelectHint filter) {
getUnderlying().putValues(values, filter);
}
@Override
public Integer estimateValueSize(final ComputedValue value) {
return getUnderlying().estimateValueSize(value);
}
protected void invocationStatistics(final ComputedValue value, final DeferredStatistics statistics) {
statistics.reportEstimatedSize(value, estimateValueSize(value));
}
@Override
public void putSharedValue(final ComputedValue value, final DeferredStatistics statistics) {
putSharedValue(value);
invocationStatistics(value, statistics);
}
@Override
public void putPrivateValue(final ComputedValue value, final DeferredStatistics statistics) {
putPrivateValue(value);
invocationStatistics(value, statistics);
}
@Override
public void putValue(final ComputedValue value, final CacheSelectHint filter, final DeferredStatistics statistics) {
putValue(value, filter);
invocationStatistics(value, statistics);
}
protected void statistics(final Collection<? extends ComputedValue> values, final DeferredStatistics statistics) {
for (ComputedValue value : values) {
statistics.reportEstimatedSize(value, estimateValueSize(value));
}
}
@Override
public void putSharedValues(final Collection<? extends ComputedValue> values, final DeferredStatistics statistics) {
putSharedValues(values);
statistics(values, statistics);
}
@Override
public void putPrivateValues(final Collection<? extends ComputedValue> values, final DeferredStatistics statistics) {
putPrivateValues(values);
statistics(values, statistics);
}
@Override
public void putValues(final Collection<? extends ComputedValue> values, final CacheSelectHint filter, final DeferredStatistics statistics) {
putValues(values, filter);
statistics(values, statistics);
}
@Override
public void flush() throws AsynchronousExecution {
// No-op; already written to underlying
}
}