X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=cms%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fcommands%2FOpenWorkspaceEditor.java;fp=cms%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fcommands%2FOpenWorkspaceEditor.java;h=cf25b83daeeb43372659e37fa834cca7d940fc3f;hb=ecc22e604e47533c79de9cecdcdeacbc752cbff1;hp=0000000000000000000000000000000000000000;hpb=e07ded4632e53f8b8869763bc1f1f4091361e76e;p=gpl%2Fargeo-slc.git diff --git a/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/commands/OpenWorkspaceEditor.java b/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/commands/OpenWorkspaceEditor.java new file mode 100644 index 000000000..cf25b83da --- /dev/null +++ b/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/commands/OpenWorkspaceEditor.java @@ -0,0 +1,82 @@ +package org.argeo.slc.client.ui.dist.commands; + +import javax.jcr.Node; +import javax.jcr.Repository; +import javax.jcr.RepositoryException; +import javax.jcr.Session; + +import org.argeo.cms.ArgeoNames; +import org.argeo.jcr.JcrUtils; +import org.argeo.slc.SlcException; +import org.argeo.slc.client.ui.dist.DistPlugin; +import org.argeo.slc.client.ui.dist.editors.DistWkspEditorInput; +import org.argeo.slc.client.ui.dist.editors.DistWorkspaceEditor; +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.handlers.HandlerUtil; + +/** + * Open a distribution workspace editor for a given workspace in a repository + */ +public class OpenWorkspaceEditor extends AbstractHandler { + public final static String ID = DistPlugin.PLUGIN_ID + + ".openWorkspaceEditor"; + public final static String DEFAULT_LABEL = "Open editor"; + public final static ImageDescriptor DEFAULT_ICON = DistPlugin + .getImageDescriptor("icons/distribution_perspective.gif"); + + // Use local node repo and repository factory to retrieve and log to + // relevant repository + public final static String PARAM_REPO_NODE_PATH = "param.repoNodePath"; + // Use URI and repository factory to retrieve and ANONYMOUSLY log in + // relevant repository + public final static String PARAM_REPO_URI = "param.repoUri"; + public final static String PARAM_WORKSPACE_NAME = "param.workspaceName"; + + /* DEPENDENCY INJECTION */ + private Repository localRepository; + + public Object execute(ExecutionEvent event) throws ExecutionException { + String repoNodePath = event.getParameter(PARAM_REPO_NODE_PATH); + String repoUri = event.getParameter(PARAM_REPO_URI); + String workspaceName = event.getParameter(PARAM_WORKSPACE_NAME); + + Session defaultSession = null; + if (repoNodePath != null && repoUri == null) { + try { + defaultSession = localRepository.login(); + if (defaultSession.nodeExists(repoNodePath)) { + Node repoNode = defaultSession.getNode(repoNodePath); + repoUri = repoNode.getProperty(ArgeoNames.ARGEO_URI) + .getString(); + } + } catch (RepositoryException e) { + throw new SlcException("Unexpected error while " + + "getting repoNode at path " + repoNodePath, e); + } finally { + JcrUtils.logoutQuietly(defaultSession); + } + } + + DistWkspEditorInput wei = new DistWkspEditorInput(repoNodePath, + repoUri, workspaceName); + try { + HandlerUtil.getActiveWorkbenchWindow(event).getActivePage() + .openEditor(wei, DistWorkspaceEditor.ID); + } catch (PartInitException e) { + throw new SlcException("Unexpected error while " + + "opening editor for workspace " + workspaceName + + " with URI " + repoUri + " and repoNode at path " + + repoNodePath, e); + } + return null; + } + + /* DEPENDENCY INJECTION */ + public void setLocalRepository(Repository localRepository) { + this.localRepository = localRepository; + } +} \ No newline at end of file