]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/editors/ProcessEditor.java
Adapt to changes in Argeo Commons.
[gpl/argeo-slc.git] / org.argeo.slc.client.ui / src / org / argeo / slc / client / ui / editors / ProcessEditor.java
index f70114fd08ab49def2f9d829887f28f0d8a8ec8e..4546ee9d8bfff05c00f30ef821c7e75c5d9e25cc 100644 (file)
@@ -26,17 +26,19 @@ import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.argeo.api.NodeConstants;
 import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.slc.SlcException;
+import org.argeo.slc.SlcNames;
+import org.argeo.slc.SlcTypes;
 import org.argeo.slc.client.ui.ClientUiPlugin;
 import org.argeo.slc.client.ui.controllers.ProcessController;
 import org.argeo.slc.execution.ExecutionModulesManager;
 import org.argeo.slc.execution.ExecutionProcess;
 import org.argeo.slc.jcr.SlcJcrUtils;
-import org.argeo.slc.jcr.SlcNames;
-import org.argeo.slc.jcr.SlcTypes;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.rap.rwt.service.ServerPushSession;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.IWorkbenchPage;
@@ -46,28 +48,40 @@ import org.eclipse.ui.forms.editor.FormEditor;
 
 /** Editor for an execution process. */
 public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
+       private static final long serialVersionUID = 509589737739132467L;
+
        public final static String ID = ClientUiPlugin.ID + ".processEditor";
 
-       private Session session;
+       private Repository repository;
+       private Session homeSession;
+       private Session agentSession;
        private Node processNode;
        private ProcessController processController;
+       private ServerPushSession pushSession;
 
        private ProcessBuilderPage builderPage;
 
        private ExecutionModulesManager modulesManager;
 
        @Override
-       public void init(IEditorSite site, IEditorInput input)
-                       throws PartInitException {
+       public void init(IEditorSite site, IEditorInput input) throws PartInitException {
                super.init(site, input);
+               pushSession = new ServerPushSession();
+               pushSession.start();
+               try {
+                       homeSession = repository.login(NodeConstants.HOME);
+                       agentSession = repository.login();
+               } catch (RepositoryException e1) {
+                       throw new SlcException("Cannot log in to repository");
+               }
+
                ProcessEditorInput pei = (ProcessEditorInput) input;
                String processPath = pei.getProcessPath();
                try {
                        if (processPath != null) {
-                               if (!session.itemExists(processPath))
-                                       throw new SlcException("Process " + processPath
-                                                       + " does not exist");
-                               processNode = session.getNode(processPath);
+                               if (!homeSession.itemExists(processPath))
+                                       throw new SlcException("Process " + processPath + " does not exist");
+                               processNode = homeSession.getNode(processPath);
                        } else {// new
                                processNode = newProcessNode(pei);
                        }
@@ -78,12 +92,10 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
 
        }
 
-       protected Node newProcessNode(ProcessEditorInput pei)
-                       throws RepositoryException {
+       protected Node newProcessNode(ProcessEditorInput pei) throws RepositoryException {
                String uuid = UUID.randomUUID().toString();
-               String processPath = SlcJcrUtils.createExecutionProcessPath(session,
-                               uuid);
-               Node processNode = JcrUtils.mkdirs(session, processPath, SLC_PROCESS);
+               String processPath = SlcJcrUtils.createExecutionProcessPath(homeSession, uuid);
+               Node processNode = JcrUtils.mkdirs(homeSession, processPath, SLC_PROCESS);
                processNode.setProperty(SLC_UUID, uuid);
                processNode.setProperty(SLC_STATUS, ExecutionProcess.NEW);
                Node processFlow = processNode.addNode(SLC_FLOW);
@@ -102,14 +114,16 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
                try {
                        return processNode.getProperty(SLC_STATUS).getString();
                } catch (RepositoryException e) {
-                       throw new SlcException("Cannot retrieve status for " + processNode,
-                                       e);
+                       throw new SlcException("Cannot retrieve status for " + processNode, e);
                }
        }
 
        @Override
        public void dispose() {
-               JcrUtils.logoutQuietly(session);
+               JcrUtils.logoutQuietly(homeSession);
+               JcrUtils.logoutQuietly(agentSession);
+               if (pushSession != null)
+                       pushSession.stop();
                super.dispose();
        }
 
@@ -127,30 +141,22 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
 
                try {
                        // make sure modules are started for all nodes
-                       for (NodeIterator nit = processNode.getNode(SLC_FLOW).getNodes(); nit
-                                       .hasNext();) {
+                       for (NodeIterator nit = processNode.getNode(SLC_FLOW).getNodes(); nit.hasNext();) {
                                Node flowNode = nit.nextNode();
                                try {
-                                       String flowDefPath = flowNode.getNode(SLC_ADDRESS)
-                                                       .getProperty(Property.JCR_PATH).getString();
-                                       Node executionModuleNode = flowNode.getSession().getNode(
-                                                       SlcJcrUtils.modulePath(flowDefPath));
-                                       if (!executionModuleNode.getProperty(SLC_STARTED)
-                                                       .getBoolean())
-                                               ClientUiPlugin.startStopExecutionModule(modulesManager,
-                                                               executionModuleNode);
+                                       String flowDefPath = flowNode.getNode(SLC_ADDRESS).getProperty(Property.JCR_PATH).getString();
+                                       Node executionModuleNode = agentSession.getNode(SlcJcrUtils.modulePath(flowDefPath));
+                                       if (!executionModuleNode.getProperty(SLC_STARTED).getBoolean())
+                                               ClientUiPlugin.startStopExecutionModule(modulesManager, executionModuleNode);
                                } catch (Exception e) {
-                                       ErrorFeedback.show(
-                                                       "Cannot start execution module related to "
-                                                                       + flowNode, e);
+                                       ErrorFeedback.show("Cannot start execution module related to " + flowNode, e);
                                }
                        }
 
                        // Actually process
                        ExecutionProcess process = processController.process(processNode);
                        Map<String, String> properties = new HashMap<String, String>();
-                       properties.put(ExecutionModulesManager.SLC_PROCESS_ID,
-                                       process.getUuid());
+                       properties.put(ExecutionModulesManager.SLC_PROCESS_ID, process.getUuid());
                        // modulesManager.registerProcessNotifier(this, properties);
                } catch (Exception e) {
                        ErrorFeedback.show("Execution of " + processNode + " failed", e);
@@ -165,11 +171,8 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
        void relaunch() {
                try {
                        Node duplicatedNode = duplicateProcess();
-                       IWorkbenchPage activePage = PlatformUI.getWorkbench()
-                                       .getActiveWorkbenchWindow().getActivePage();
-                       activePage.openEditor(
-                                       new ProcessEditorInput(duplicatedNode.getPath()),
-                                       ProcessEditor.ID);
+                       IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+                       activePage.openEditor(new ProcessEditorInput(duplicatedNode.getPath()), ProcessEditor.ID);
                        close(false);
                } catch (Exception e1) {
                        throw new SlcException("Cannot relaunch " + processNode, e1);
@@ -181,10 +184,8 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
                try {
                        Session session = processNode.getSession();
                        String uuid = UUID.randomUUID().toString();
-                       String destPath = SlcJcrUtils.createExecutionProcessPath(session,
-                                       uuid);
-                       Node newNode = JcrUtils.mkdirs(session, destPath,
-                                       SlcTypes.SLC_PROCESS);
+                       String destPath = SlcJcrUtils.createExecutionProcessPath(session, uuid);
+                       Node newNode = JcrUtils.mkdirs(session, destPath, SlcTypes.SLC_PROCESS);
 
                        Node rootRealizedFlowNode = newNode.addNode(SLC_FLOW);
                        // copy node
@@ -197,8 +198,7 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
                        // we just manage one level for the time being
                        NodeIterator nit = rootRealizedFlowNode.getNodes(SLC_FLOW);
                        while (nit.hasNext()) {
-                               nit.nextNode().setProperty(SLC_STATUS,
-                                               ExecutionProcess.INITIALIZED);
+                               nit.nextNode().setProperty(SLC_STATUS, ExecutionProcess.INITIALIZED);
                        }
 
                        session.save();
@@ -225,9 +225,8 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
                try {
                        String status = processNode.getProperty(SLC_STATUS).getString();
                        if (status.equals(ExecutionProcess.NEW))
-                               processNode.setProperty(SLC_STATUS,
-                                               ExecutionProcess.INITIALIZED);
-                       session.save();
+                               processNode.setProperty(SLC_STATUS, ExecutionProcess.INITIALIZED);
+                       homeSession.save();
                        builderPage.commit(true);
                        editorDirtyStateChanged();
                } catch (RepositoryException e) {
@@ -250,27 +249,8 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
                return false;
        }
 
-       // public void updateStatus(ExecutionProcess process, String oldStatus,
-       // String newStatus) {
-       // }
-       //
-       // public void addSteps(ExecutionProcess process, List<ExecutionStep> steps)
-       // {
-       // }
-
-       /** Expects one session per editor. */
-       @Deprecated
-       public void setSession(Session session) {
-               this.session = session;
-       }
-
        public void setRepository(Repository repository) {
-               try {
-                       session = repository.login();
-               } catch (RepositoryException re) {
-                       throw new SlcException("Unable to log in Repository " + repository,
-                                       re);
-               }
+               this.repository = repository;
        }
 
        public void setProcessController(ProcessController processController) {