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;
/** 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);
}
}
- 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);
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();
}
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);
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);
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
// 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();
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) {
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) {