]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java
Implementation of file handlers for both RCP & RAP
[lgpl/argeo-commons.git] / eclipse / runtime / org.argeo.eclipse.ui.jcr / src / main / java / org / argeo / eclipse / ui / jcr / views / GenericJcrBrowser.java
index eb23629673f4c367f7fef24847eabc2cdd555c13..414cb010ac71d4a6974429c16d9ad8104477b78e 100644 (file)
@@ -1,18 +1,26 @@
 package org.argeo.eclipse.ui.jcr.views;
 
+import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 import javax.jcr.Node;
 import javax.jcr.Property;
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.dialogs.Error;
 import org.argeo.eclipse.ui.jcr.browser.NodeContentProvider;
 import org.argeo.eclipse.ui.jcr.browser.NodeLabelProvider;
 import org.argeo.eclipse.ui.jcr.browser.PropertiesContentProvider;
 import org.argeo.eclipse.ui.jcr.browser.RepositoryNode;
 import org.argeo.eclipse.ui.jcr.browser.WorkspaceNode;
+import org.argeo.eclipse.ui.specific.FileHandler;
 import org.argeo.jcr.RepositoryRegister;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
@@ -21,6 +29,7 @@ import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TableViewerColumn;
 import org.eclipse.jface.viewers.TreeViewer;
@@ -34,6 +43,8 @@ import org.eclipse.swt.widgets.Menu;
 import org.eclipse.ui.part.ViewPart;
 
 public class GenericJcrBrowser extends ViewPart {
+       private static Log log = LogFactory.getLog(GenericJcrBrowser.class);
+
        private TreeViewer nodesViewer;
        private TableViewer propertiesViewer;
 
@@ -83,6 +94,43 @@ public class GenericJcrBrowser extends ViewPart {
                                } else if (obj instanceof WorkspaceNode) {
                                        ((WorkspaceNode) obj).login();
                                        nodesViewer.refresh(obj);
+                               } // call the openFile commands on node
+                               else if (obj instanceof Node) {
+                                       Node node = (Node) obj;
+                                       try {
+                                               if (node.isNodeType("nt:file")) {
+
+                                                       Node child = node.getNodes().nextNode();
+                                                       if (!child.isNodeType("nt:resource")) {
+                                                               Error.show("Cannot open file children Node that are not of 'nt:resource' type.");
+                                                               return;
+                                                       }
+                                                       InputStream fis = null;
+
+                                                       try {
+                                                               fis = (InputStream) child
+                                                                               .getProperty("jcr:data").getBinary()
+                                                                               .getStream();
+
+                                                               String name = node.getName();
+
+                                                               // Instantiate the generic object that fits for
+                                                               // both
+                                                               // RCP & RAP.
+                                                               FileHandler fh = new FileHandler();
+                                                               fh.openFile(name, fis);
+                                                               // fh.openFile(file);
+                                                       } catch (Exception e) {
+                                                               throw new ArgeoException(
+                                                                               "Stream error while opening file", e);
+                                                       } finally {
+                                                               IOUtils.closeQuietly(fis);
+                                                       }
+                                               }
+                                       } catch (RepositoryException re) {
+                                               re.printStackTrace();
+
+                                       }
                                }
 
                        }
@@ -186,7 +234,69 @@ public class GenericJcrBrowser extends ViewPart {
        }
 
        public void nodeRemoved(Node parentNode) {
-               nodesViewer.refresh(parentNode);
+
+               List<Node> al = new ArrayList<Node>();
+               al.add(parentNode);
+
+               IStructuredSelection newSel = new StructuredSelection(al);
+               // IStructuredSelection newSel = new StructuredSelection(parentNode);
+
+               if (log.isDebugEnabled())
+                       log.debug("new selection size = " + newSel.size());
+
+               nodesViewer.setSelection(newSel, true);
+               IStructuredSelection tmpSel = (IStructuredSelection) nodesViewer
+                               .getSelection();
+
+               if (log.isDebugEnabled())
+                       log.debug("set selection size = " + tmpSel.size());
+
+               nodesViewer.refresh();
+
+               //
+               // log.debug(" Class selected (Parent 1ST element) : "
+               // + tmpSel.getFirstElement().getClass());
+               // setFocus();
+               //
+               // nodesViewer.refresh(parentNode);
+
+               // // Call the refresh node command
+               // try {
+               // IWorkbench iw = JcrUiPlugin.getDefault().getWorkbench();
+               // IHandlerService handlerService = (IHandlerService) iw
+               // .getService(IHandlerService.class);
+               //
+               // // get the command from plugin.xml
+               // IWorkbenchWindow window = iw.getActiveWorkbenchWindow();
+               // ICommandService cmdService = (ICommandService) window
+               // .getService(ICommandService.class);
+               // Command cmd = cmdService
+               // .getCommand(OpenEbiDetailsEditor.COMMAND_NAME);
+               //
+               // // log.debug("cmd : " + cmd);
+               // ArrayList<Parameterization> parameters = new
+               // ArrayList<Parameterization>();
+               //
+               // // get the parameter
+               // IParameter iparam = cmd
+               // .getParameter(OpenEbiDetailsEditor.PARAM_UUID);
+               //
+               // Parameterization params = new Parameterization(iparam,
+               // ((String[]) obj)[0]);
+               // parameters.add(params);
+               //
+               // // build the parameterized command
+               // ParameterizedCommand pc = new ParameterizedCommand(cmd,
+               // parameters.toArray(new Parameterization[parameters.size()]));
+               //
+               // // execute the command
+               // handlerService = (IHandlerService) window
+               // .getService(IHandlerService.class);
+               // handlerService.executeCommand(pc, null);
+               //
+               // } catch (Exception e) {
+               // throw new ArgeoException("Error opening EBI", e);
+               // }
        }
 
        public void setRepositoryRegister(RepositoryRegister repositoryRegister) {