]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java
JCR UI can run processes
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / execution / JcrProcessThread.java
1 package org.argeo.slc.jcr.execution;
2
3 import javax.jcr.Node;
4 import javax.jcr.NodeIterator;
5 import javax.jcr.Property;
6 import javax.jcr.RepositoryException;
7
8 import org.argeo.ArgeoException;
9 import org.argeo.slc.core.execution.ProcessThread;
10 import org.argeo.slc.execution.ExecutionFlowDescriptor;
11 import org.argeo.slc.execution.ExecutionModulesManager;
12 import org.argeo.slc.jcr.SlcJcrUtils;
13 import org.argeo.slc.jcr.SlcNames;
14 import org.argeo.slc.process.RealizedFlow;
15
16 public class JcrProcessThread extends ProcessThread implements SlcNames {
17
18 public JcrProcessThread(ExecutionModulesManager executionModulesManager,
19 JcrExecutionProcess process) {
20 super(executionModulesManager, process);
21 }
22
23 @Override
24 protected void process() {
25 try {
26 Node realizedFlowNode = getNode().getNode(SLC_FLOW);
27 // we just manage one level for the time being
28 NodeIterator nit = realizedFlowNode.getNodes(SLC_FLOW);
29 while (nit.hasNext()) {
30 process(nit.nextNode());
31 }
32 } catch (RepositoryException e) {
33 throw new ArgeoException("Cannot process " + getNode(), e);
34 }
35 }
36
37 protected void process(Node realizedFlowNode) throws RepositoryException {
38 if (realizedFlowNode.hasNode(SLC_ADDRESS)) {
39 String flowPath = realizedFlowNode.getNode(SLC_ADDRESS)
40 .getProperty(Property.JCR_PATH).getString();
41 // TODO: convert to local path if remote
42
43 Node flowNode = realizedFlowNode.getSession().getNode(flowPath);
44 String flowName = flowNode.getProperty(SLC_NAME).getString();
45
46 String executionModuleName = SlcJcrUtils
47 .flowExecutionModuleName(flowPath);
48 String executionModuleVersion = SlcJcrUtils
49 .flowExecutionModuleVersion(flowPath);
50
51 RealizedFlow realizedFlow = new RealizedFlow();
52 realizedFlow.setModuleName(executionModuleName);
53 realizedFlow.setModuleVersion(executionModuleVersion);
54
55 ExecutionFlowDescriptor efd = new ExecutionFlowDescriptor(flowName,
56 null, null);
57 realizedFlow.setFlowDescriptor(efd);
58
59 execute(realizedFlow, true);
60 }
61 }
62
63 protected Node getNode() {
64 return ((JcrExecutionProcess) getProcess()).getNode();
65 }
66 }