package org.juxtapose.fxtradingsystem.aggregator; import java.util.Map; import org.juxtapose.fxtradingsystem.constants.FXDataConstants; import org.juxtapose.fxtradingsystem.constants.FXProducerServiceConstants; import org.juxtapose.fxtradingsystem.priceengine.PriceEngineDataConstants; import org.juxtapose.streamline.producer.ISTMEntryKey; import org.juxtapose.streamline.producer.ISTMEntryProducer; import static org.juxtapose.streamline.tools.STMUtil.*; import org.juxtapose.streamline.stm.osgi.DataProducerService; import org.juxtapose.streamline.util.ISTMEntry; import org.juxtapose.streamline.util.ISTMEntryRequestSubscriber; public class LiquidityService extends DataProducerService implements IAggregator{ @Override public void getDataKey(ISTMEntryRequestSubscriber inSubscriber, Object inTag, Map<String, String> inQuery) { String type = inQuery.get( PriceEngineDataConstants.FIELD_TYPE ); if( type == null ) { stm.logError( "No type defined for dataKey "+inQuery ); inSubscriber.queryNotAvailible( inTag ); } else if( type.equals( PriceEngineDataConstants.STATE_TYPE_LIQUIDITY )) { String instrumentType = inQuery.get( FXDataConstants.FIELD_INSTRUMENT ); String ccy1 = inQuery.get( FXDataConstants.FIELD_CCY1 ); String ccy2 = inQuery.get( FXDataConstants.FIELD_CCY2 ); String source = inQuery.get( FXDataConstants.FIELD_SOURCE ); inSubscriber.deliverKey( createEntryKey( getServiceId(), PriceEngineDataConstants.STATE_TYPE_LIQUIDITY, new String[]{FXDataConstants.FIELD_CCY1, FXDataConstants.FIELD_CCY2, FXDataConstants.FIELD_INSTRUMENT, FXDataConstants.FIELD_SOURCE}, new String[]{ccy1, ccy2, instrumentType, source} ), inTag); } else { inSubscriber.queryNotAvailible( inTag ); } } @Override public ISTMEntryProducer getDataProducer(ISTMEntryKey inDataKey) { String ccy1 = inDataKey.getValue( FXDataConstants.FIELD_CCY1 ); String ccy2 = inDataKey.getValue( FXDataConstants.FIELD_CCY2 ); String instrumentType = inDataKey.getValue( FXDataConstants.FIELD_INSTRUMENT ); String source = inDataKey.getValue( FXDataConstants.FIELD_SOURCE ); if( FXDataConstants.STATE_INSTRUMENT_SPOT.equals( instrumentType ) ) { return new LiquidityPoolProducer(inDataKey, stm, source, ccy1, ccy2, FXDataConstants.STATE_PERIOD_SP ); } return null; } @Override public void updateData(ISTMEntryKey inKey, ISTMEntry inData, boolean inFullUpdate) { } @Override public String getServiceId() { return FXProducerServiceConstants.AGGREGATOR; } }