package org.marketcetera.marketdata.core.module;
import java.util.Map;
import org.marketcetera.core.Pair;
import org.marketcetera.core.publisher.ISubscriber;
import org.marketcetera.core.publisher.PublisherEngine;
import org.marketcetera.module.*;
import org.marketcetera.util.log.SLF4JLoggerProxy;
import org.marketcetera.util.misc.ClassVersion;
import com.google.common.collect.Maps;
/* $License$ */
/**
* Receives data flow data and publishes to the non-module world.
*
* <p>Module Features
* <table>
* <tr><th>Capabilities</th><td>Data Receiver</td></tr>
* <tr><th>DataFlow Request Parameters</th><td>n/a</td></tr>
* <tr><th>Stops data flows</th><td>no</td></tr>
* <tr><th>Start Operation</th><td>none</td></tr>
* <tr><th>Stop Operation</th><td>none</td></tr>
* <tr><th>Management Interface</th><td>none</td></tr>
* <tr><th>Factory</th><td>{@link ReceiverModuleFactory}</td></tr>
* </table>
*
* @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a>
* @version $Id: ReceiverModule.java 16901 2014-05-11 16:14:11Z colin $
* @since 2.4.0
*/
@ClassVersion("$Id: ReceiverModule.java 16901 2014-05-11 16:14:11Z colin $")
public class ReceiverModule
extends Module
implements DataReceiver
{
/**
* Gets the <code>ReceiverModule</code> instance for the given instance name.
*
* @param inInstanceName a <code>String</code> value
* @return a <code>ReceiverModule</code> value or <code>null</code>
*/
public static ReceiverModule getModuleForInstanceName(String inInstanceName)
{
return runningInstances.get(inInstanceName);
}
/* (non-Javadoc)
* @see org.marketcetera.module.DataReceiver#receiveData(org.marketcetera.module.DataFlowID, java.lang.Object)
*/
@Override
public void receiveData(DataFlowID inFlowID,
Object inData)
throws ReceiveDataException
{
SLF4JLoggerProxy.trace(this,
"Receiver module received {} for {}", //$NON-NLS-1$
inData,
inFlowID);
publisher.publish(Pair.create(inFlowID,inData));
}
/**
* Subscribes to received data objects.
*
* @param inSubscriber an <code>ISubscriber</code> value
*/
public void subscribe(ISubscriber inSubscriber)
{
publisher.subscribe(inSubscriber);
}
/**
* Unsubscribes from received data objects.
*
* @param inSubscriber an <code>ISubscriber</code> value
*/
public void unsubscribe(ISubscriber inSubscriber)
{
publisher.unsubscribe(inSubscriber);
}
/**
* Create a new ReceiverModule instance.
*/
ReceiverModule(String inInstanceName)
{
super(new ModuleURN(ReceiverModuleFactory.PROVIDER_URN,
inInstanceName),
true);
}
/* (non-Javadoc)
* @see org.marketcetera.module.Module#preStart()
*/
@Override
protected void preStart()
throws ModuleException
{
runningInstances.put(getURN().instanceName(),
this);
}
/* (non-Javadoc)
* @see org.marketcetera.module.Module#preStop()
*/
@Override
protected void preStop()
throws ModuleException
{
runningInstances.remove(getURN().instanceName());
}
/**
* publishes data to interested parties
*/
private final PublisherEngine publisher = new PublisherEngine(true);
/**
* tracks active receiver module instances
*/
private static final Map<String,ReceiverModule> runningInstances = Maps.newHashMap();
}