/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.temptarget;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import com.opengamma.core.change.ChangeManager;
import com.opengamma.core.change.DummyChangeManager;
import com.opengamma.id.UniqueId;
import com.opengamma.id.UniqueIdSupplier;
/**
* In-memory implementation of {@link TempTargetRepository}. This is for testing/debugging purposes only. It is not suitable for production use or large views as data will never be flushed from
* memory.
*/
public class InMemoryTempTargetRepository implements TempTargetRepository {
private final UniqueIdSupplier _uids = new UniqueIdSupplier("TmpMem");
private final ConcurrentMap<UniqueId, TempTarget> _uid2object = new ConcurrentHashMap<UniqueId, TempTarget>();
private final ConcurrentMap<TempTarget, UniqueId> _object2uid = new ConcurrentHashMap<TempTarget, UniqueId>();
// TempTargetRepository
@Override
public TempTarget get(final UniqueId identifier) {
return _uid2object.get(identifier);
}
@Override
public UniqueId locateOrStore(final TempTarget target) {
UniqueId uid = _object2uid.get(target);
if (uid != null) {
return uid;
}
uid = _uids.get();
_uid2object.put(uid, target.withUniqueId(uid));
final UniqueId existing = _object2uid.putIfAbsent(target, uid);
if (existing != null) {
_uid2object.remove(uid);
return existing;
}
return uid;
}
// ChangeProvider
@Override
public ChangeManager changeManager() {
return DummyChangeManager.INSTANCE;
}
}