package org.juxtapose.fxtradingsystem.priceengine;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import org.juxtapose.streamline.producer.STMEntryProducer;
import org.juxtapose.streamline.stm.ISTM;
import org.juxtapose.streamline.stm.ReferenceLink;
import org.juxtapose.streamline.stm.STMTransaction;
import org.juxtapose.streamline.tools.DataConstants;
import org.juxtapose.streamline.util.ISTMEntry;
import org.juxtapose.streamline.util.Status;
import org.juxtapose.streamline.util.data.DataType;
import org.juxtapose.streamline.util.data.DataTypeRef;
/**
* @author Pontus J�rgne
* 17 okt 2011
* Copyright (c) Pontus J�rgne. All rights reserved
*/
public class CcyModelProducer extends STMEntryProducer
{
/**
* @param inSTM
*/
public CcyModelProducer( ISTM inSTM )
{
super( PriceEngineKeyConstants.CCY_MODEL_KEY, inSTM);
}
@Override
public void start()
{
stm.commit( new STMTransaction( PriceEngineKeyConstants.CCY_MODEL_KEY, CcyModelProducer.this, 2, 0, true )
{
@Override
public void execute()
{
setStatus( Status.ON_REQUEST );
addReference(PriceEngineDataConstants.FIELD_EUR, new DataTypeRef( PriceEngineKeyConstants.CCY_EUR_KEY ) );
addReference(PriceEngineDataConstants.FIELD_SEK, new DataTypeRef( PriceEngineKeyConstants.CCY_SEK_KEY ) );
addReference(PriceEngineDataConstants.FIELD_NOK, new DataTypeRef( PriceEngineKeyConstants.CCY_NOK_KEY ) );
addReference(PriceEngineDataConstants.FIELD_DKK, new DataTypeRef( PriceEngineKeyConstants.CCY_DKK_KEY ) );
addReference(PriceEngineDataConstants.FIELD_CHF, new DataTypeRef( PriceEngineKeyConstants.CCY_CHF_KEY ) );
addReference(PriceEngineDataConstants.FIELD_GBP, new DataTypeRef( PriceEngineKeyConstants.CCY_GBP_KEY ) );
addReference(PriceEngineDataConstants.FIELD_AUD, new DataTypeRef( PriceEngineKeyConstants.CCY_AUD_KEY ) );
addReference(PriceEngineDataConstants.FIELD_NZD, new DataTypeRef( PriceEngineKeyConstants.CCY_NZD_KEY ) );
addReference(PriceEngineDataConstants.FIELD_SGD, new DataTypeRef( PriceEngineKeyConstants.CCY_SGD_KEY ) );
addReference(PriceEngineDataConstants.FIELD_JPY, new DataTypeRef( PriceEngineKeyConstants.CCY_JPY_KEY ) );
addReference(PriceEngineDataConstants.FIELD_CAD, new DataTypeRef( PriceEngineKeyConstants.CCY_CAD_KEY ) );
addReference(PriceEngineDataConstants.FIELD_RUB, new DataTypeRef( PriceEngineKeyConstants.CCY_TRY_KEY ) );
// addValue(FXDataConstants.CCY2, new DataTypeString(ccy2) );
// addValue(FXDataConstants.FIELD_SEQUENCE, new DataTypeLong(seq) );
//
// addPriceUpdate( rand, this );
}
});
}
// public DataTypeData getCcyData( int inCcy1 )
// {
// IPublishedData data = stm.createEmptyData(Status.OK, this, null);
// data.putDataValue(inKey, inValue);
// }
@Override
public void stop()
{
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.juxtapose.streamline.producer.IDataProducer#referencedDataUpdated(java.lang.Integer, org.juxtapose.streamline.util.IPublishedData)
*/
public void postReferenceDataCall( String inFieldKey, ReferenceLink inLink, ISTMEntry inData )
{
checkStatus();
}
public void checkStatus()
{
ISTMEntry data = stm.getData( entryKey.getKey() );
if( data != null )
{
if( data.getStatus() == Status.ON_REQUEST )
{
Iterator<Entry<String, DataType<?>>> iterator = data.getDataMap().iterator();
while( iterator.hasNext() )
{
Entry<String, DataType<?>> entry = iterator.next();
if( entry.getKey().equals( DataConstants.FIELD_STATUS ))
continue;
ISTMEntry ref = ((DataTypeRef)entry.getValue()).getReferenceData();
if( ref != null )
{
if( ref.getStatus() != Status.OK )
return;
}
else
{
return;
}
}
stm.commit( new STMTransaction( PriceEngineKeyConstants.CCY_MODEL_KEY, CcyModelProducer.this, 0, 0, false )
{
@Override
public void execute()
{
setStatus( Status.OK );
}
});
}
}
}
}