]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/editors/ProcessEditor.java
Process builder display
[gpl/argeo-slc.git] / eclipse / plugins / org.argeo.slc.client.ui / src / main / java / org / argeo / slc / client / ui / editors / ProcessEditor.java
index 4da6f061a849061467a42c6281632a1579b46e3c..59a0b01fe5c2b5c05d8e9f510f404a12e05830bb 100644 (file)
@@ -1,7 +1,5 @@
 package org.argeo.slc.client.ui.editors;
 
-import java.util.Calendar;
-import java.util.GregorianCalendar;
 import java.util.UUID;
 
 import javax.jcr.Node;
@@ -10,12 +8,13 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 
+import org.argeo.eclipse.ui.Error;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.slc.SlcException;
 import org.argeo.slc.client.ui.ClientUiPlugin;
 import org.argeo.slc.client.ui.controllers.ProcessController;
 import org.argeo.slc.execution.ExecutionProcess;
-import org.argeo.slc.jcr.SlcJcrConstants;
+import org.argeo.slc.jcr.SlcJcrUtils;
 import org.argeo.slc.jcr.SlcNames;
 import org.argeo.slc.jcr.SlcTypes;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -33,7 +32,7 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
 
        private ProcessBuilderPage builderPage;
        private ProcessLogPage logPage;
-       
+
        @Override
        public void init(IEditorSite site, IEditorInput input)
                        throws PartInitException {
@@ -58,25 +57,30 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
 
        protected Node newProcessNode(ProcessEditorInput pei)
                        throws RepositoryException {
-               Calendar now = new GregorianCalendar();
                String uuid = UUID.randomUUID().toString();
-               String processPath = SlcJcrConstants.PROCESSES_BASE_PATH + '/'
-                               + JcrUtils.dateAsPath(now, true) + uuid;
+               String processPath = SlcJcrUtils.createExecutionProcessPath(uuid);
                Node processNode = JcrUtils.mkdirs(session, processPath, SLC_PROCESS);
                processNode.setProperty(SLC_UUID, uuid);
-               processNode.setProperty(SLC_STATUS, ExecutionProcess.UNINITIALIZED);
+               processNode.setProperty(SLC_STATUS, ExecutionProcess.NEW);
                Node processFlow = processNode.addNode(SLC_FLOW);
                processFlow.addMixin(SLC_REALIZED_FLOW);
+               return processNode;
+       }
+
+       @Override
+       public boolean isDirty() {
+               if (getProcessStatus().equals(ExecutionProcess.NEW))
+                       return true;
+               return super.isDirty();
+       }
 
-               // add initial flows
-               for (String path : pei.getInitialFlowPaths()) {
-                       Node realizedFlow = processFlow.addNode(SLC_FLOW);
-                       realizedFlow.addMixin(SLC_REALIZED_FLOW);
-                       Node address = realizedFlow.addNode(SLC_ADDRESS,
-                                       NodeType.NT_ADDRESS);
-                       address.setProperty(Property.JCR_PATH, path);
+       protected String getProcessStatus() {
+               try {
+                       return processNode.getProperty(SLC_STATUS).getString();
+               } catch (RepositoryException e) {
+                       throw new SlcException("Cannot retrieve status for " + processNode,
+                                       e);
                }
-               return processNode;
        }
 
        @Override
@@ -93,7 +97,11 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
                        throw new SlcException("Cannot update status of " + processNode, e);
                }
                doSave(null);
-               processController.process(processNode);
+               try {
+                       processController.process(processNode);
+               } catch (Exception e) {
+                       Error.show("Execution of " + processNode + " failed", e);
+               }
        }
 
        @Override
@@ -114,12 +122,12 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames {
        public void doSave(IProgressMonitor monitor) {
                try {
                        String status = processNode.getProperty(SLC_STATUS).getString();
-                       if (status.equals(ExecutionProcess.UNINITIALIZED))
+                       if (status.equals(ExecutionProcess.NEW))
                                processNode.setProperty(SLC_STATUS,
                                                ExecutionProcess.INITIALIZED);
                        session.save();
                        builderPage.commit(true);
-                       firePropertyChange(PROP_DIRTY);
+                       editorDirtyStateChanged();
                } catch (RepositoryException e) {
                        throw new SlcException("Cannot save " + processNode, e);
                } finally {