package com.activequant.trading; import java.util.ArrayList; import java.util.List; import com.activequant.domainmodel.orderbook.MarketState; import com.activequant.domainmodel.orderbook.OrderBookChange; import com.activequant.domainmodel.orderbook.TransactionEvent; import com.activequant.domainmodel.trade.order.Order; import com.activequant.interfaces.trading.IOrderBook; import com.activequant.interfaces.trading.IOrderBookListener; /** * * @author ustaudinger * * @param <T> */ public abstract class AbstractOrderBook<T extends Order> implements IOrderBook<T> { private final String tradeableId; private MarketState marketState; private List<IOrderBookListener> orderBookListeners = new ArrayList<IOrderBookListener>(); public AbstractOrderBook(String tradeableId){ this.tradeableId = tradeableId; } @Override public String getTradeableInstrumentId() { return tradeableId; } @Override public MarketState getMarketState() { return marketState; } @Override public void attachOrderBookListener(IOrderBookListener listener) { orderBookListeners.add(listener); } @Override public void detachOrderBookListener(IOrderBookListener listener) { orderBookListeners.remove(listener); } protected void orderBookEvent(OrderBookChange obc) { for(IOrderBookListener l : orderBookListeners) l.orderBookChange(obc); } protected void marketStateChange(MarketState newState) { this.marketState = newState; for(IOrderBookListener l : orderBookListeners) l.marketStateChange(newState); } protected void transaction(TransactionEvent te) { for(IOrderBookListener l : orderBookListeners) l.transactionEvent(te); } }