import java.util.LinkedList; import java.util.List; import org.orbeon.oxf.pipeline.api.PipelineContext; import org.orbeon.oxf.processor.SimpleProcessor; import org.orbeon.oxf.processor.ProcessorInputOutputInfo; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; import org.dom4j.Document; import org.dom4j.Node; public class ComputeOutput extends SimpleProcessor { class set { public String name; public int number1; public int number2; public double result; } public ComputeOutput() { addInputInfo(new ProcessorInputOutputInfo("number")); addOutputInfo(new ProcessorInputOutputInfo(OUTPUT_DATA)); } public void generateResult(PipelineContext context, ContentHandler contentHandler) throws SAXException { Document dataDoc = readInputAsDOM4J(context, " input"); List nodes = dataDoc.selectNodes("//data/set"); List data = new LinkedList(); for (Node n: nodes) { set currentSet = new set(); currentSet.name = new String(n.valueOf("@name")); Node n1 = dataDoc.selectSingleNode("//data/set[@name=" + currentSet.name + "]/number1"); Node n2 = dataDoc.selectSingleNode("//data/set[@name=" + currentSet.name + "]/number2"); currentSet.number1 = new Integer(n1.getText()).intValue(); currentSet.number2 = new Integer(n2.getText()).intValue(); if (currentSet.name.equals("Add")) { currentSet.result = currentSet.number1 + currentSet.number2; } if (currentSet.name.equals("Substract")) { currentSet.result = currentSet.number1 - currentSet.number2; } if (currentSet.name.equals("Multiply")) { currentSet.result = currentSet.number1 * currentSet.number2; } if (currentSet.name.equals("Divide")) { currentSet.result = currentSet.number1 / currentSet.number2; } data.add(currentSet); } contentHandler.startDocument(); contentHandler.startElement("", "number", "number", new AttributesImpl()); for (set s: data) { String content = String.valueOf(s.result); contentHandler.characters(content.toCharArray(), 0, content.length()); } contentHandler.endElement("", "number", "number"); contentHandler.endDocument(); } }