X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.client.ui%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Feditors%2FProcessEditor.java;h=38db84a3cd544375712c17dba347fa504785ad44;hb=e07ded4632e53f8b8869763bc1f1f4091361e76e;hp=b2cb8200a525f0e31d51e7a7b6c53fa8699b993f;hpb=8d1f46ed8783aa1985fac1acf6ef6ef6cdad1314;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/editors/ProcessEditor.java b/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/editors/ProcessEditor.java index b2cb8200a..38db84a3c 100644 --- a/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/editors/ProcessEditor.java +++ b/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/editors/ProcessEditor.java @@ -1,18 +1,3 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ package org.argeo.slc.client.ui.editors; import java.util.HashMap; @@ -26,17 +11,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; @@ -51,20 +38,24 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames { public final static String ID = ClientUiPlugin.ID + ".processEditor"; private Repository repository; - private Session session; + 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 { - session = repository.login(); + homeSession = repository.login(NodeConstants.HOME_WORKSPACE); + agentSession = repository.login(); } catch (RepositoryException e1) { throw new SlcException("Cannot log in to repository"); } @@ -73,10 +64,9 @@ public class ProcessEditor extends FormEditor implements SlcTypes, SlcNames { 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); } @@ -87,12 +77,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); @@ -111,14 +99,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(); } @@ -136,30 +126,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 properties = new HashMap(); - 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); @@ -174,11 +156,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); @@ -190,10 +169,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 @@ -206,8 +183,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(); @@ -234,9 +210,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) {