/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.livedata.server;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import net.sf.ehcache.CacheManager;
import org.fudgemsg.FudgeMsg;
import com.opengamma.id.ExternalScheme;
import com.opengamma.livedata.normalization.StandardRules;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.fudgemsg.OpenGammaFudgeContext;
/**
*
*/
public class MockLiveDataServer extends StandardLiveDataServer {
private final ExternalScheme _domain;
private final List<String> _subscriptions = new ArrayList<String>();
private final List<String> _unsubscriptions = new ArrayList<String>();
private volatile int _numConnections; // = 0;
private volatile int _numDisconnections; // = 0;
private final Map<String, FudgeMsg> _uniqueId2MarketData;
public MockLiveDataServer(ExternalScheme domain, CacheManager cacheManager) {
this(domain, new ConcurrentHashMap<String, FudgeMsg>(), cacheManager);
}
public MockLiveDataServer(ExternalScheme domain, Map<String, FudgeMsg> uniqueId2Snapshot, CacheManager cacheManager) {
super(cacheManager);
ArgumentChecker.notNull(domain, "Identification domain");
ArgumentChecker.notNull(uniqueId2Snapshot, "Snapshot map");
_domain = domain;
_uniqueId2MarketData = uniqueId2Snapshot;
}
//-------------------------------------------------------------------------
public void addMarketDataMapping(String key, FudgeMsg value) {
_uniqueId2MarketData.put(key, value);
}
@Override
public ExternalScheme getUniqueIdDomain() {
return _domain;
}
@Override
protected Map<String, Object> doSubscribe(Collection<String> uniqueIds) {
Map<String, Object> returnValue = new HashMap<String, Object>();
for (String uniqueId : uniqueIds) {
_subscriptions.add(uniqueId);
returnValue.put(uniqueId, uniqueId);
}
return returnValue;
}
@Override
protected void doUnsubscribe(Collection<Object> subscriptionHandles) {
for (Object subscriptionHandle : subscriptionHandles) {
_unsubscriptions.add((String) subscriptionHandle);
}
}
@Override
protected Map<String, FudgeMsg> doSnapshot(Collection<String> uniqueIds) {
Map<String, FudgeMsg> returnValue = new HashMap<String, FudgeMsg>();
for (String uniqueId : uniqueIds) {
FudgeMsg snapshot = _uniqueId2MarketData.get(uniqueId);
if (snapshot == null) {
snapshot = OpenGammaFudgeContext.getInstance().newMessage();
}
returnValue.put(uniqueId, snapshot);
}
return returnValue;
}
public void sendLiveDataToClient() {
for (Subscription subscription : getSubscriptions()) {
FudgeMsg marketData = doSnapshot(subscription.getSecurityUniqueId());
liveDataReceived(subscription.getSecurityUniqueId(), marketData);
}
}
public List<String> getActualSubscriptions() {
return _subscriptions;
}
public List<String> getActualUnsubscriptions() {
return _unsubscriptions;
}
@Override
protected void doConnect() {
_numConnections++;
}
@Override
protected void doDisconnect() {
_numDisconnections++;
}
@Override
protected boolean snapshotOnSubscriptionStartRequired(
Subscription subscription) {
return false;
}
public int getNumConnections() {
return _numConnections;
}
public int getNumDisconnections() {
return _numDisconnections;
}
@Override
public String getDefaultNormalizationRuleSetId() {
return StandardRules.getNoNormalization().getId();
}
}