/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine;
import java.util.Map;
import com.google.common.collect.Maps;
import com.opengamma.core.change.ChangeManager;
import com.opengamma.core.change.DummyChangeManager;
import com.opengamma.engine.target.resolver.DeepResolver;
import com.opengamma.engine.target.resolver.ObjectResolver;
import com.opengamma.id.UniqueId;
import com.opengamma.id.UniqueIdentifiable;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.ArgumentChecker;
/**
* A computation target resolver backed solely by a {@code Map}.
* <p>
* This class is intended for use by a single thread.
*/
public class MapComputationTargetResolver extends DefaultComputationTargetResolver {
// [PLAT-444]: move to com.opengamma.engine.target
/**
* The backing map.
*/
private final Map<ComputationTargetSpecification, ComputationTarget> _backingMap = Maps.newHashMap();
@Override
public ComputationTarget resolve(final ComputationTargetSpecification specification, final VersionCorrection versionCorrection) {
ComputationTarget resolved = _backingMap.get(specification);
if (resolved == null) {
resolved = super.resolve(specification, versionCorrection);
}
return resolved;
}
@Override
public ObjectResolver<?> getResolver(final ComputationTargetSpecification specification) {
final ComputationTarget resolved = _backingMap.get(specification);
if (resolved != null) {
return new ObjectResolver<UniqueIdentifiable>() {
@Override
public ChangeManager changeManager() {
return DummyChangeManager.INSTANCE;
}
@Override
public UniqueIdentifiable resolveObject(UniqueId uniqueId, VersionCorrection versionCorrection) {
return resolved.getUniqueId();
}
@Override
public DeepResolver deepResolver() {
return null;
}
};
} else {
return super.getResolver(specification);
}
}
/**
* Adds a target to the resolver.
*
* @param target the target to add, not null
*/
public void addTarget(final ComputationTarget target) {
ArgumentChecker.notNull(target, "target");
_backingMap.put(target.toSpecification(), target);
}
/**
* Returns a string suitable for debugging.
*
* @return the string, not null
*/
@Override
public String toString() {
return getClass().getSimpleName() + "[map=" + _backingMap + "]";
}
}