/**
* Copyright (C) 2009 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.pipeline.api;
import org.orbeon.dom.Element;
import org.orbeon.dom.QName;
import org.orbeon.oxf.xml.dom4j.Dom4jUtils;
import org.orbeon.saxon.om.NodeInfo;
import java.util.HashMap;
import java.util.Map;
/**
* ProcessorDefinition encapsulate a processor name and its associated inputs. A ProcessorDefinition
* object can then be used to instantiate and run the given processor.
*/
public class ProcessorDefinition {
private final QName name;
private Map<String, Object> entries = new HashMap<String, Object>();
/**
* Create a definition.
*
* @param name the qualified name of the processor, for example "oxf:xslt".
*/
public ProcessorDefinition(QName name) {
this.name = name;
}
/**
* Add an input with the given name and URL.
*
* @param name the name of the input, for example "config"
* @param url the URL that will be connected to the input, for example "oxf:/my-file.xml"
*/
public void addInput(String name, String url) {
entries.put(name, url);
}
/**
* Add an input with the given name and dom4j Element.
*
* @param name the name of the input, for example "config"
* @param element the dom4j Element containing the XML document connected to the input
*/
public void addInput(String name, Element element) {
entries.put(name, element);
}
/**
* Add an input with the given name and TinyTree node.
*
* @param name the name of the input, for example "config"
* @param nodeInfo the TinyTree node containing the XML document connected to the input
*/
public void addInput(String name, NodeInfo nodeInfo) {
entries.put(name, nodeInfo);
}
/**
* Return the configured mappings for the processor inputs. Keys are of type String and refer to
* input names. Values are of type String (which must be valid URLs) or dom4j Element
* (containing an XML document).
*
* @return Map of name -> String or Element processor inputs mappings
*/
public Map<String, Object> getEntries() {
return entries;
}
/**
* Return the qualified name of the processor.
*
* @return the qualified name of the processor
*/
public QName getName() {
return name;
}
public String toString() {
final StringBuilder sb = new StringBuilder("[");
sb.append(Dom4jUtils.qNameToExplodedQName(getName()));
for (final Map.Entry<String, Object> currentEntry: getEntries().entrySet()) {
final String key = currentEntry.getKey();
final Object value = currentEntry.getValue();
sb.append(", ");
sb.append(key);
sb.append(" -> ");
sb.append((value instanceof String) ? value.toString() : "[inline XML document]");
}
sb.append(']');
return sb.toString();
}
}