X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.client.rcp%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fspecific%2FOpenJcrFile.java;fp=org.argeo.slc.client.rcp%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fspecific%2FOpenJcrFile.java;h=0000000000000000000000000000000000000000;hb=ecc22e604e47533c79de9cecdcdeacbc752cbff1;hp=495fed52246e71f482213ba193a21cf51487b08f;hpb=e07ded4632e53f8b8869763bc1f1f4091361e76e;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.client.rcp/src/org/argeo/slc/client/ui/specific/OpenJcrFile.java b/org.argeo.slc.client.rcp/src/org/argeo/slc/client/ui/specific/OpenJcrFile.java deleted file mode 100644 index 495fed522..000000000 --- a/org.argeo.slc.client.rcp/src/org/argeo/slc/client/ui/specific/OpenJcrFile.java +++ /dev/null @@ -1,135 +0,0 @@ -package org.argeo.slc.client.ui.specific; - -import java.awt.Desktop; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.nodetype.NodeType; - -import org.apache.commons.io.IOUtils; -import org.argeo.jcr.JcrUtils; -import org.argeo.slc.SlcException; -import org.argeo.slc.repo.RepoService; -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; - -/** - * RCP specific command handler to open a file retrieved from a local or distant - * JCR Repository. - */ -public class OpenJcrFile extends AbstractHandler { - // private final static Log log = LogFactory.getLog(OpenJcrFile.class); - - // Here is the trick that enable single sourcing: the ID is determined at - // runtime so use (new OpenJcrFileCmdId()).getCmdId() instead of the usual - // public final String ID = SlcRcpPlugin.PLUGIN_ID + ".openJcrFile"; - - public final static String PARAM_REPO_NODE_PATH = "param.repoNodePath"; - public final static String PARAM_REPO_URI = "param.repoUri"; - public final static String PARAM_WORKSPACE_NAME = "param.workspaceName"; - public final static String PARAM_FILE_PATH = "param.filePath"; - - /* DEPENDENCY INJECTION */ - private RepoService repoService; - - public Object execute(ExecutionEvent event) throws ExecutionException { - - String repoNodePath = event.getParameter(PARAM_REPO_NODE_PATH); - String repoUri = event.getParameter(PARAM_REPO_URI); - String wkspName = event.getParameter(PARAM_WORKSPACE_NAME); - String filePath = event.getParameter(PARAM_FILE_PATH); - - // TODO sanity check - if (filePath == null || "".equals(filePath.trim())) - return null; - retrieveAndOpen(repoNodePath, repoUri, wkspName, filePath); - - return null; - } - - protected void retrieveAndOpen(String repoNodePath, String repoUri, - String wkspName, String filePath) { - Session businessSession = null; - try { - businessSession = repoService.getRemoteSession(repoNodePath, - repoUri, wkspName); - Node result = businessSession.getNode(filePath); - - boolean isValid = true; - Node child = null; - if (!result.isNodeType(NodeType.NT_FILE)) - isValid = false; - else { - child = result.getNode(Property.JCR_CONTENT); - if (!(child.isNodeType(NodeType.NT_RESOURCE) || child - .hasProperty(Property.JCR_DATA))) - isValid = false; - } - - if (!isValid) - return; - - InputStream fis = null; - String prefix = "", extension = ""; - String fileName = JcrUtils.lastPathElement(filePath); - int ind = fileName.lastIndexOf('.'); - if (ind > 0) { - prefix = fileName.substring(0, ind); - extension = fileName.substring(ind); - } - try { - - fis = (InputStream) child.getProperty(Property.JCR_DATA) - .getBinary().getStream(); - File file = createTmpFile(prefix, extension, fis); - Desktop desktop = null; - if (Desktop.isDesktopSupported()) { - desktop = Desktop.getDesktop(); - } - desktop.open(file); - } catch (Exception e) { - throw new SlcException( - "Stream error while opening file " + filePath - + " from repo " + repoUri == null ? repoNodePath - : repoUri, e); - } finally { - IOUtils.closeQuietly(fis); - } - } catch (RepositoryException e) { - throw new SlcException("Unexpected error while " - + "getting repoNode info for repoNode at path " - + repoNodePath, e); - } finally { - JcrUtils.logoutQuietly(businessSession); - } - } - - private File createTmpFile(String prefix, String suffix, InputStream is) { - File tmpFile = null; - OutputStream os = null; - try { - tmpFile = File.createTempFile(prefix, suffix); - os = new FileOutputStream(tmpFile); - IOUtils.copy(is, os); - } catch (IOException e) { - throw new SlcException("Cannot open file " + prefix + "." + suffix, - e); - } finally { - IOUtils.closeQuietly(os); - } - return tmpFile; - } - - /* DEPENDENCY INJECTION */ - public void setRepoService(RepoService repoService) { - this.repoService = repoService; - } -} \ No newline at end of file