package com.activequant.transport.memory; import java.util.HashMap; import java.util.Map; import com.activequant.domainmodel.ETransportType; import com.activequant.domainmodel.Instrument; import com.activequant.domainmodel.MarketDataInstrument; import com.activequant.domainmodel.PersistentEntity; import com.activequant.domainmodel.TradeableInstrument; import com.activequant.domainmodel.exceptions.TransportException; import com.activequant.interfaces.transport.IPublisher; import com.activequant.interfaces.transport.IReceiver; import com.activequant.interfaces.transport.ITransportFactory; import com.activequant.utils.events.Event; public class InMemoryTransportFactory implements ITransportFactory { private Map<String, Event<Map<String, Object>>> rawEventMap = new HashMap<String, Event<Map<String, Object>>>(); private Map<String, Event<PersistentEntity>> eventMap = new HashMap<String, Event<PersistentEntity>>(); private Map<String, Event<byte[]>> byteeventMap = new HashMap<String, Event<byte[]>>(); private Map<String, IPublisher> publisherMap = new HashMap<String, IPublisher>(); private Map<String, IReceiver> recvMap = new HashMap<String, IReceiver>(); // private StringBuffer sb = new StringBuffer(); private Event<Map<String, Object>> getRawEventInstance(String channelName){ if(!rawEventMap.containsKey(channelName))rawEventMap.put(channelName, new Event<Map<String, Object>>()); return rawEventMap.get(channelName); } private Event<byte[]> getByteEventInstance(String channelName){ if(!byteeventMap.containsKey(channelName))byteeventMap.put(channelName, new Event<byte[]>()); return byteeventMap.get(channelName); } private Event<PersistentEntity> getEventInstance(String channelName){ if(!eventMap.containsKey(channelName))eventMap.put(channelName, new Event<PersistentEntity>()); return eventMap.get(channelName); } private IPublisher getIPub(String channelName){ if(!publisherMap.containsKey(channelName)){ IPublisher p = new InMemoryPublisher(getRawEventInstance(channelName), getByteEventInstance(channelName), getEventInstance(channelName)); publisherMap.put(channelName, p); } return publisherMap.get(channelName); } private IReceiver getIRecv(String channelName){ if(!recvMap.containsKey(channelName)){ IReceiver p = new InMemoryReceiver(getRawEventInstance(channelName), getByteEventInstance(channelName), getEventInstance(channelName)); recvMap.put(channelName, p); } return recvMap.get(channelName); } @Override public IPublisher getPublisher(ETransportType transType, String id) throws TransportException { String channelName = transType.toString()+":"+id; return getIPub(channelName); } @Override public IReceiver getReceiver(ETransportType transType, String id) throws TransportException { String channelName = transType.toString()+":"+id; return getIRecv(channelName); } @Override public IPublisher getPublisher(ETransportType transType, Instrument instrument) throws TransportException { String channelName = transType.toString()+":"+instrument.getId(); return getIPub(channelName); } @Override public IReceiver getReceiver(ETransportType transType, Instrument instrument) throws TransportException { String channelName = transType.toString()+":"+instrument.getId(); return getIRecv(channelName); } @Override public IPublisher getPublisher(ETransportType transType, MarketDataInstrument instrument) throws TransportException { String channelName = transType.toString()+":"+instrument.getId(); return getIPub(channelName); } @Override public IReceiver getReceiver(ETransportType transType, MarketDataInstrument instrument) throws TransportException { String channelName = transType.toString()+":"+instrument.getId(); return getIRecv(channelName); } @Override public IPublisher getPublisher(ETransportType transType, TradeableInstrument instrument) throws TransportException { String channelName = transType.toString()+":"+instrument.getId(); return getIPub(channelName); } @Override public IReceiver getReceiver(ETransportType transType, TradeableInstrument instrument) throws TransportException { String channelName = transType.toString()+":"+instrument.getId(); return getIRecv(channelName); } @Override public IPublisher getPublisher(String channel) throws TransportException { return getIPub(channel); } @Override public IReceiver getReceiver(String channel) throws TransportException { return getIRecv(channel); } }