package org.geotoolkit.pending.demo.processing;
import org.apache.sis.metadata.iso.identification.DefaultDataIdentification;
import org.geotoolkit.process.ProcessDescriptor;
import org.geotoolkit.process.ProcessException;
import org.geotoolkit.processing.chain.ChainProcessDescriptor;
import org.geotoolkit.processing.chain.model.Chain;
import org.geotoolkit.processing.chain.model.Constant;
import org.geotoolkit.processing.chain.model.Element;
import org.geotoolkit.processing.chain.model.ElementProcess;
import org.geotoolkit.processing.chain.model.Parameter;
import org.opengis.parameter.ParameterValueGroup;
/**
* Demo of a chain of processes.
*/
public class ChainProcessDemo {
public static void main(String[] args) throws ProcessException {
//produce a chain equivalent to : ($a + 10) / $b
final Chain chain = new Chain("myChain");
//input/out/constants parameters
final Parameter a = chain.addInputParameter("a", Double.class, "desc",1,1,null);
final Parameter b = chain.addInputParameter("b", Double.class, "desc",1,1,null);
final Parameter r = chain.addOutputParameter("r", Double.class, "desc",1,1,null);
final Constant c = chain.addConstant(1, Double.class, 10d);
//chain blocks
final ElementProcess add = chain.addProcessElement(2, "math", "add");
final ElementProcess divide = chain.addProcessElement(3, "math", "divide");
//execution flow links
chain.addFlowLink(Element.BEGIN.getId(), add.getId());
chain.addFlowLink(add.getId(), divide.getId());
chain.addFlowLink(divide.getId(), Element.END.getId());
//data flow links
chain.addDataLink(Element.BEGIN.getId(), a.getCode(), add.getId(), "first");
chain.addDataLink(c.getId(), "", add.getId(), "second");
chain.addDataLink(add.getId(), "result", divide.getId(), "first");
chain.addDataLink(Element.BEGIN.getId(), b.getCode(), divide.getId(), "second");
chain.addDataLink(divide.getId(), "result", Element.END.getId(), r.getCode());
//////////////////// execute the chain /////////////////////////////////
//create a process descriptor to use it like any process.
final ProcessDescriptor desc = new ChainProcessDescriptor(chain, new DefaultDataIdentification());
//input params
final ParameterValueGroup input = desc.getInputDescriptor().createValue();
input.parameter("a").setValue(15d);
input.parameter("b").setValue(2d);
final org.geotoolkit.process.Process process = desc.createProcess(input);
final ParameterValueGroup result = process.call();
System.out.println(result.parameter("r").getValue());
}
}