/**
* Copyright (C) 2004 Orbeon, Inc.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU Lesser General Public License as published by the Free Software Foundation; either version
* 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The full text of the license is available at http://www.gnu.org/copyleft/lesser.html
*/
package org.orbeon.oxf.processor;
import org.orbeon.oxf.xml.dom4j.LocationData;
/**
* Base interface for processor input and outputs.
*
* NOTE 2010-07-05: the comment below is older than 2004-08-21 and is likely quite out of date. Most if not all
* ProcessorOutput implementations either store a reference to their pipeline, or are inner classes of a pipeline. Could
* this still apply to inputs but not outputs?
*
* "Why ProcessorInput and ProcessorOutput should not have a reference to their
* corresponding processor?
*
* Some processors (A) create those objects and store them in cache. They can
* be then be re-used by other processors (B) with the same configuration.
* Obviously we don't want the ProcessorInput/ProcessorOutput to reference A
* when it is being used by B. We could set the processor to B before running B.
* However this doesn't work because the same configuration can be used by two
* processors running at the same time. (This happens when an XPL makes a
* recursive call.)
*
* Another option is to prevent processors from storing
* ProcessorInput/ProcessorOutput in their configuration. This is incompatible
* with the execution model of processors that execute (or "contain") other
* processors. These processors store the contained processors in cache. In this
* scenario, the processors stored in cache are connected to internal
* ProcessorInput/ProcessorOutput, of course, also stored in cache. When
* executed, the ProcessorOutput, also called "internal top output", find the
* containing processor by using the processors stack stored in the
* PipelineContext. Then the ProcessorOutput can read from the appropriate
* input of the containing processor."
*/
public interface ProcessorInputOutput {
String getName();
Class getProcessorClass();
void setLocationData(LocationData locationData);
LocationData getLocationData();
void setSchema(String schema);
String getSchema();
void setDebug(String debugMessage);
String getDebugMessage();
}