package org.juxtapose.fxtradingclient;
import java.util.ArrayList;
import org.juxtapose.streamline.producer.ISTMEntryKey;
import org.juxtapose.streamline.util.IInputListener;
import org.juxtapose.streamline.util.ISTMEntry;
import org.juxtapose.streamline.util.ISTMEntryListener;
import org.juxtapose.streamline.util.data.DataType;
import org.juxtapose.streamline.util.data.DataTypeLazyRef;
public class ReferenceInput implements InputContainer, ISTMEntryListener
{
ContainerSubscriber subscriber;
ArrayList<String> values = new ArrayList<String>();
ArrayList<IInputListener> inputListeners = new ArrayList<IInputListener>();
ReferenceInput( ContainerSubscriber inSubscriber )
{
subscriber = inSubscriber;
subscriber.addListener( this );
}
@Override
public String[] getInputObjects()
{
return values.toArray( new String[]{} );
}
@Override
public void STMEntryUpdated( ISTMEntryKey inKey, ISTMEntry inEntry, boolean inFullUpdate )
{
for( String updatedValue : inEntry.getDeltaSet() )
{
DataType<?> value = inEntry.getValue( updatedValue );
if( value instanceof DataTypeLazyRef )
{
ISTMEntryKey key = ((DataTypeLazyRef)value).get();
String keyVal = key.getSingleValue();
if( !values.contains( keyVal ) )
{
values.add( keyVal );
System.out.println("Got me a reference value "+keyVal );
updateListeners();
}
}
}
}
public void addInputListener( IInputListener inInputListener )
{
assert !inputListeners.contains( inInputListener ) : "Listener is already added to input";
inputListeners.add( inInputListener );
}
public void removeContainerListener( IInputListener inputListener )
{
assert inputListeners.contains( inputListener ) : "Listener is not attached to input";
inputListeners.remove( inputListener );
}
public void updateListeners()
{
for( IInputListener listener : inputListeners )
{
listener.inputChanged();
}
}
}