]> git.argeo.org Git - gpl/argeo-jcr.git/blob - org.argeo.slc.jcr/src/org/argeo/slc/jcr/execution/JcrProcessThread.java
Releasing
[gpl/argeo-jcr.git] / org.argeo.slc.jcr / src / org / argeo / slc / jcr / execution / JcrProcessThread.java
1 package org.argeo.slc.jcr.execution;
2
3 import java.util.List;
4
5 import javax.jcr.Node;
6 import javax.jcr.RepositoryException;
7 import javax.jcr.Session;
8
9 import org.argeo.api.cms.CmsConstants;
10 import org.argeo.jcr.JcrUtils;
11 import org.argeo.slc.SlcException;
12 import org.argeo.slc.SlcNames;
13 import org.argeo.slc.execution.ExecutionModulesManager;
14 import org.argeo.slc.execution.ExecutionProcess;
15 import org.argeo.slc.execution.RealizedFlow;
16 import org.argeo.slc.runtime.ProcessThread;
17
18 /** Where the actual execution takes place */
19 public class JcrProcessThread extends ProcessThread implements SlcNames {
20
21 public JcrProcessThread(ThreadGroup processesThreadGroup, ExecutionModulesManager executionModulesManager,
22 JcrExecutionProcess process) {
23 super(processesThreadGroup, executionModulesManager, process);
24 }
25
26 /** Overridden in order to set progress status on realized flow nodes. */
27 @Override
28 protected void process() throws InterruptedException {
29 Session session = null;
30 if (getProcess() instanceof JcrExecutionProcess)
31 try {
32 session = ((JcrExecutionProcess) getProcess()).getRepository().login(CmsConstants.HOME_WORKSPACE);
33
34 List<RealizedFlow> realizedFlows = getProcess().getRealizedFlows();
35 for (RealizedFlow realizedFlow : realizedFlows) {
36 Node realizedFlowNode = session.getNode(((JcrRealizedFlow) realizedFlow).getPath());
37 setFlowStatus(realizedFlowNode, ExecutionProcess.RUNNING);
38
39 try {
40 //
41 // EXECUTE THE FLOW
42 //
43 execute(realizedFlow, true);
44
45 setFlowStatus(realizedFlowNode, ExecutionProcess.COMPLETED);
46 } catch (RepositoryException e) {
47 throw e;
48 } catch (InterruptedException e) {
49 setFlowStatus(realizedFlowNode, ExecutionProcess.KILLED);
50 throw e;
51 } catch (RuntimeException e) {
52 setFlowStatus(realizedFlowNode, ExecutionProcess.ERROR);
53 throw e;
54 }
55 }
56 } catch (RepositoryException e) {
57 throw new SlcException("Cannot process " + getJcrExecutionProcess().getNodePath(), e);
58 } finally {
59 JcrUtils.logoutQuietly(session);
60 }
61 else
62 super.process();
63 }
64
65 protected void setFlowStatus(Node realizedFlowNode, String status) throws RepositoryException {
66 realizedFlowNode.setProperty(SLC_STATUS, status);
67 realizedFlowNode.getSession().save();
68 }
69
70 protected JcrExecutionProcess getJcrExecutionProcess() {
71 return (JcrExecutionProcess) getProcess();
72 }
73 }