package org.marketcetera.module; import org.marketcetera.util.misc.ClassVersion; /* $License$ */ /** * Instances of this class are supplied to modules that need * the capability to create and cancel data flows. The methods * of this class delegate to the respective {@link ModuleManager} methods * adding the URN of the module requesting data flow creation / cancelation. * * @author anshul@marketcetera.com * @version $Id: DataFlowSupportImpl.java 16154 2012-07-14 16:34:05Z colin $ * @since 1.0.0 */ @ClassVersion("$Id: DataFlowSupportImpl.java 16154 2012-07-14 16:34:05Z colin $") //$NON-NLS-1$ class DataFlowSupportImpl implements DataFlowSupport { /** * Creates a new instance. * * @param inRequester the module that will be requesting * @param inManager the module manager instance */ DataFlowSupportImpl(Module inRequester, ModuleManager inManager) { assert inRequester != null; assert inManager != null; mRequester = inRequester; mManager = inManager; } @Override public DataFlowID createDataFlow(DataRequest[] inRequests) throws ModuleException { verifyIncorrectInvocation(); return createDataFlow(inRequests, true); } @Override public DataFlowID createDataFlow(DataRequest[] inRequests, boolean inAppendSink) throws ModuleException { verifyIncorrectInvocation(); return mManager.createDataFlow(inRequests, inAppendSink, mRequester); } @Override public void cancel(DataFlowID inFlowID) throws ModuleException { verifyIncorrectInvocation(); mManager.cancel(inFlowID, mRequester); } /** * Fails if invoked from within * {@link DataEmitter#requestData(DataRequest, DataEmitterSupport)} or * {@link DataEmitter#cancel(DataFlowID, RequestID)}. * * @throws ModuleException if its an incorrect nested flow request. */ private static void verifyIncorrectInvocation() throws ModuleException { if(AbstractDataCoupler.isNestedFlowCall()) { throw new ModuleException(Messages.INCORRECT_NESTED_FLOW_REQUEST); } } private final Module mRequester; private final ModuleManager mManager; }