package org.juxtapose.streamline.util.net; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import org.juxtapose.streamline.producer.ISTMEntryKey; import org.juxtapose.streamline.producer.ISTMEntryProducer; import org.juxtapose.streamline.producer.STMEntryProducer; import org.juxtapose.streamline.producer.executor.IExecutor; import org.juxtapose.streamline.stm.ISTM; import org.juxtapose.streamline.stm.ReferenceLink; import org.juxtapose.streamline.stm.STMTransaction; import org.juxtapose.streamline.stm.TemporaryController; import org.juxtapose.streamline.util.ISTMEntry; import org.juxtapose.streamline.util.data.DataType; import org.juxtapose.streamline.util.data.DataTypeNull; import org.juxtapose.streamline.util.data.DataTypeRef; import com.trifork.clj_ds.IPersistentMap; public class RemoteProxyEntryProducer extends STMEntryProducer { private final ClientConnectorHandler clientConnector; public RemoteProxyEntryProducer( ISTM inSTM, ISTMEntryKey inKey, ClientConnectorHandler inConnector ) { super( inKey, inSTM ); clientConnector = inConnector; } /** * @param inKey * @param inData * @param inFirstUpdate */ public void updateData( ISTMEntryKey inKey, final IPersistentMap<String, DataType<?>> inData, boolean inFullUpdate ) { stm.commit( new STMTransaction( inKey, this, inFullUpdate ) { @Override public void execute() { Iterator<Map.Entry<String, DataType<?>>> iterator = inData.iterator(); while( iterator.hasNext() ) { Map.Entry<String, DataType<?>> entry = iterator.next(); if( entry.getValue() instanceof DataTypeNull ) { try { removeValue( entry.getKey() ); } catch( Exception e ) { stm.logError( e.getMessage(), e ); } } else { DataType<?> data = entry.getValue(); if( data instanceof DataTypeRef ) { addReference( entry.getKey(), (DataTypeRef)data ); } else { putValue( entry.getKey(), data ); } } } } } ); } @Override public HashSet<TemporaryController> getDependencyControllers() { return null; } @Override public void updateData( ISTMEntryKey inKey, ISTMEntry inData, boolean inFirstUpdate ) { // TODO Auto-generated method stub } @Override protected void start() { clientConnector.subscribe( this, entryKey ); } protected void stop() { // clientConnector.unSubscribe( this, dataKey ); } }