package com.activequant.domainmodel.streaming;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.activequant.domainmodel.ETransportType;
import com.activequant.interfaces.streaming.IStreamEventSink;
import com.activequant.interfaces.streaming.IStreamEventSource;
public abstract class AbstractEventChainLink implements IStreamEventSink, IStreamEventSource {
private Map<ETransportType, List<IStreamEventSink>> subscriberMap =
new HashMap<ETransportType, List<IStreamEventSink>>();
public List<IStreamEventSink> getSubscriberList(ETransportType type){
if(!subscriberMap.containsKey(type)){
subscriberMap.put(type, new ArrayList<IStreamEventSink>());
}
return subscriberMap.get(type);
}
@Override
public void subscribe(IStreamEventSink sink,ETransportType eventType) {
getSubscriberList(eventType).add(sink);
}
public void unsubscribe(IStreamEventSink sink, ETransportType eventType) {
getSubscriberList(eventType).remove(sink);
}
@Override
public void process(StreamEvent se) {
for(IStreamEventSink sink : getSubscriberList(se.getEventType())){
sink.process(se);
}
}
public abstract void start();
}