package org.marketcetera.module; import org.marketcetera.util.misc.ClassVersion; /* $License$ */ /** * Represents a stage within a data flow request. Instances of this class * should be used when creating a new data flow. * <p> * A data flow comprises * of 2 or more modules connected together, where the data is emitted * by the first module and is processed by the intervening modules before * being delivered to the last module in the data flow. * <p> * A <code>DataRequest</code> instance identifies each stage or module * in this data flow. * <p> * A data request is composed of a module URN and a request payload. * The request payload can be empty depending on the module identified * in the data request. * <p> * The URN must uniquely identify a module instance. Partial URNs may be used * if they do uniquely identify a module instance within the module * container. * <p> * If the data flow is being created by a module, the keyword * <code>this</code> can be used to dynamically substitute the keyword with * the appropriate value from the requesting module's URN. See * {@link org.marketcetera.module.DataFlowSupport} documentation for more * details on interpretation of <code>this</code> keyword. * <p> * The data payload supplies request * parameters that may be used by the module to figure out what data to * emit or the kind of processing to apply to the data it receives. Some * modules may be capable of emitting data without any request parameters. * Others may require that a request parameter be specified and may choose * to throw errors if one is not specified. * <p> * Consult the module provider documentation to figure out specific * parameter types and values supported by the module. * * * @author anshul@marketcetera.com * @version $Id: DataRequest.java 16852 2014-03-05 17:07:47Z colin $ * @since 1.0.0 */ @ClassVersion("$Id: DataRequest.java 16852 2014-03-05 17:07:47Z colin $") //$NON-NLS-1$ public final class DataRequest extends DataRequestBase { /** * Creates an instance. * * @param inRequestURN the instance URN * @param inCoupling the coupling to use * @param inData the request parameter */ public DataRequest(ModuleURN inRequestURN, DataCoupling inCoupling, Object inData) { super(inCoupling == null ? DataCoupling.SYNC : inCoupling, inRequestURN); mData = inData; } /** * Creates an instance. Coupling is defaulted to {@link DataCoupling#SYNC} * * @param inRequestURN the instance URN * @param inData the request parameter */ public DataRequest(ModuleURN inRequestURN, Object inData) { this(inRequestURN,null,inData); } /** * Creates an instance. Coupling is defaulted to {@link DataCoupling#SYNC} * and the request parameter is set to null. * * @param inRequestURN the instance URN. */ public DataRequest(ModuleURN inRequestURN) { this(inRequestURN, null); } /** * The request data. The request data type and semantics are defined * by the specific module receiving the request. * * @return the request data */ public Object getData() { return mData; } /** * Converts this request to a string data request instance. * The returned instance is similar to this instance except * that the request data is converted to string using its * <code>toString()</code> method. * * @return the equivalent string data request. */ StringDataRequest toStringRequest() { return new StringDataRequest(getRequestURN(), getCoupling(), getData() == null ? null : getData().toString()); } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return toStringRequest().getData(); } private final Object mData; private static final long serialVersionUID = 7808821329666070735L; }