/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.analyticservice; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import org.fudgemsg.FudgeContext; import org.fudgemsg.FudgeMsg; import org.fudgemsg.FudgeMsgEnvelope; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opengamma.core.position.Trade; import com.opengamma.transport.FudgeMessageReceiver; import com.opengamma.util.ArgumentChecker; /** * */ public class AnalyticServiceTradeProducer implements TradeProducer, FudgeMessageReceiver { private static final Logger s_logger = LoggerFactory.getLogger(AnalyticServiceTradeProducer.class); private final Set<TradeListener> _tradeListeners = new CopyOnWriteArraySet<TradeListener>(); @Override public void messageReceived(FudgeContext fudgeContext, FudgeMsgEnvelope msgEnvelope) { FudgeMsg msg = msgEnvelope.getMessage(); s_logger.debug("Message received {}", msg); Trade trade = fudgeContext.fromFudgeMsg(Trade.class, msg); notifyListeners(trade); } @Override public void addTradeListener(TradeListener tradeListener) { ArgumentChecker.notNull(tradeListener, "trade listener"); _tradeListeners.add(tradeListener); } @Override public void removeTradeListener(TradeListener tradeListener) { ArgumentChecker.notNull(tradeListener, "trade listener"); _tradeListeners.remove(tradeListener); } private void notifyListeners(Trade trade) { for (TradeListener listener : _tradeListeners) { listener.tradeReceived(trade); } } }