+ Introduce an Abstract JCR View to enable specific view with the same commands
authorBruno Sinou <bsinou@argeo.org>
Fri, 1 Apr 2011 16:54:32 +0000 (16:54 +0000)
committerBruno Sinou <bsinou@argeo.org>
Fri, 1 Apr 2011 16:54:32 +0000 (16:54 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@4421 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/ImportFileSystem.java
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java [new file with mode: 0644]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java

index 4dc0dbec16e6956ec12ee24cfe32734fbedd7d48..03062e6af41c512ec76ee4ae513225c06203834b 100644 (file)
@@ -6,7 +6,7 @@ import javax.jcr.nodetype.NodeType;
 
 import org.argeo.eclipse.ui.dialogs.Error;
 import org.argeo.eclipse.ui.dialogs.SingleValue;
-import org.argeo.eclipse.ui.jcr.views.GenericJcrBrowser;
+import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
@@ -19,7 +19,7 @@ public class AddFileFolder extends AbstractHandler {
        public Object execute(ExecutionEvent event) throws ExecutionException {
                ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
                                .getActivePage().getSelection();
-               GenericJcrBrowser view = (GenericJcrBrowser) HandlerUtil
+               AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
                                .getActiveWorkbenchWindow(event).getActivePage()
                                .findView(HandlerUtil.getActivePartId(event));
                if (selection != null && !selection.isEmpty()
index fc8ad6a0c36fbdf2f136740039d22cd6d06829e5..f7a99415ff57f19f602316c838f2d70c7e06dbda 100644 (file)
@@ -9,7 +9,7 @@ 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.views.GenericJcrBrowser;
+import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
@@ -24,7 +24,7 @@ public class DeleteNode extends AbstractHandler {
        public Object execute(ExecutionEvent event) throws ExecutionException {
                ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
                                .getActivePage().getSelection();
-               GenericJcrBrowser view = (GenericJcrBrowser) HandlerUtil
+               AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
                                .getActiveWorkbenchWindow(event).getActivePage()
                                .findView(HandlerUtil.getActivePartId(event));
 
index b1e999f7ea2125ef27801112f2163edf54e771aa..1dbcfb5233a8256f8d89dd566b597c4dbec18a4b 100644 (file)
@@ -5,7 +5,7 @@ import javax.jcr.Node;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.eclipse.ui.dialogs.Error;
-import org.argeo.eclipse.ui.jcr.views.GenericJcrBrowser;
+import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
 import org.argeo.eclipse.ui.jcr.wizards.ImportFileSystemWizard;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
@@ -21,7 +21,7 @@ public class ImportFileSystem extends AbstractHandler {
        public Object execute(ExecutionEvent event) throws ExecutionException {
                ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
                                .getActivePage().getSelection();
-               GenericJcrBrowser view = (GenericJcrBrowser) HandlerUtil
+               AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
                                .getActiveWorkbenchWindow(event).getActivePage()
                                .findView(HandlerUtil.getActivePartId(event));
                if (selection != null && !selection.isEmpty()
index 699a96db2efe5daec8c6c504a382a57e0952cf9a..af3fd53c9de8700e95a4d388488a0e99d12f0d59 100644 (file)
@@ -2,7 +2,7 @@ package org.argeo.eclipse.ui.jcr.commands;
 
 import java.util.Iterator;
 
-import org.argeo.eclipse.ui.jcr.views.GenericJcrBrowser;
+import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
@@ -16,7 +16,7 @@ public class Refresh extends AbstractHandler {
        public Object execute(ExecutionEvent event) throws ExecutionException {
                ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
                                .getActivePage().getSelection();
-               GenericJcrBrowser view = (GenericJcrBrowser) HandlerUtil
+               AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
                                .getActiveWorkbenchWindow(event).getActivePage()
                                .findView(HandlerUtil.getActivePartId(event));
                if (selection != null && selection instanceof IStructuredSelection) {
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java
new file mode 100644 (file)
index 0000000..604151c
--- /dev/null
@@ -0,0 +1,58 @@
+package org.argeo.eclipse.ui.jcr.views;
+
+import javax.jcr.Node;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+public abstract class AbstractJcrBrowser extends ViewPart {
+
+       @Override
+       public abstract void createPartControl(Composite parent);
+
+       /**
+        * To be overidden to adapt size of form and result frames.
+        */
+       abstract protected int[] getWeights();
+
+       /**
+        * To be overidden to provide an adapted size nodeViewer
+        */
+       abstract protected TreeViewer createNodeViewer(Composite parent,
+                       ITreeContentProvider nodeContentProvider);
+
+       /**
+        * To be overidden to retrieve the current nodeViewer
+        */
+       abstract protected TreeViewer getNodeViewer();
+
+       /*
+        * Enables the refresh of the tree.
+        */
+       @Override
+       public void setFocus() {
+               getNodeViewer().getTree().setFocus();
+       }
+
+       public void refresh(Object obj) {
+               getNodeViewer().refresh(obj);
+       }
+
+       public void nodeAdded(Node parentNode, Node newNode) {
+               getNodeViewer().refresh(parentNode);
+               getNodeViewer().expandToLevel(newNode, 0);
+       }
+
+       public void nodeRemoved(Node parentNode) {
+               IStructuredSelection newSel = new StructuredSelection(parentNode);
+               getNodeViewer().setSelection(newSel, true);
+               // Force refresh
+               IStructuredSelection tmpSel = (IStructuredSelection) getNodeViewer()
+                               .getSelection();
+               getNodeViewer().refresh(tmpSel.getFirstElement());
+       }
+}
index e369c6c8a3e5dc0c76f98aff2a73840c56be176d..136b99fcfafb25be4de8fb9976f6f2c437185b94 100644 (file)
@@ -30,8 +30,8 @@ import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
 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;
@@ -42,9 +42,8 @@ import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
-import org.eclipse.ui.part.ViewPart;
 
-public class GenericJcrBrowser extends ViewPart {
+public class GenericJcrBrowser extends AbstractJcrBrowser {
        private final static Log log = LogFactory.getLog(GenericJcrBrowser.class);
 
        private Session session;
@@ -53,36 +52,14 @@ public class GenericJcrBrowser extends ViewPart {
        private NodeContentProvider nodeContentProvider;
        private TableViewer propertiesViewer;
 
+       private JcrFileProvider jcrFileProvider;
+       private FileHandler fileHandler;
+
        private RepositoryRegister repositoryRegister;
 
        @Override
        public void createPartControl(Composite parent) {
 
-               // Instantiate the generic object that fits for
-               // both RCP & RAP, must be final to be accessed in the double click
-               // listener.
-               // Not that in RAP, it registers a service handler that provide the
-               // access to the files.
-
-               final JcrFileProvider jfp = new JcrFileProvider();
-               final FileHandler fh = new FileHandler(jfp);
-
-               parent.setLayout(new FillLayout());
-
-               SashForm sashForm = new SashForm(parent, SWT.VERTICAL);
-               sashForm.setSashWidth(4);
-               sashForm.setLayout(new FillLayout());
-
-               Composite top = new Composite(sashForm, SWT.NONE);
-               GridLayout gl = new GridLayout(1, false);
-               top.setLayout(gl);
-
-               // nodes viewer
-               nodesViewer = new TreeViewer(top, SWT.MULTI | SWT.H_SCROLL
-                               | SWT.V_SCROLL);
-               nodesViewer.getTree().setLayoutData(
-                               new GridData(SWT.FILL, SWT.FILL, true, true));
-
                // look for session
                Session nodeSession = session;
                if (nodeSession == null) {
@@ -95,62 +72,29 @@ public class GenericJcrBrowser extends ViewPart {
                                        throw new ArgeoException("Cannot login to node repository");
                                }
                }
-               nodeContentProvider = new NodeContentProvider(nodeSession,
-                               repositoryRegister);
-               nodesViewer.setContentProvider(nodeContentProvider);
-               nodesViewer.setLabelProvider(new NodeLabelProvider());
-               nodesViewer
-                               .addSelectionChangedListener(new ISelectionChangedListener() {
-                                       public void selectionChanged(SelectionChangedEvent event) {
-                                               if (!event.getSelection().isEmpty()) {
-                                                       IStructuredSelection sel = (IStructuredSelection) event
-                                                                       .getSelection();
-                                                       propertiesViewer.setInput(sel.getFirstElement());
-                                               } else {
-                                                       propertiesViewer.setInput(getViewSite());
-                                               }
-                                       }
-                               });
 
-               nodesViewer.addDoubleClickListener(new IDoubleClickListener() {
-                       public void doubleClick(DoubleClickEvent event) {
-                               if (event.getSelection() == null
-                                               || event.getSelection().isEmpty())
-                                       return;
-                               Object obj = ((IStructuredSelection) event.getSelection())
-                                               .getFirstElement();
-                               if (obj instanceof RepositoryNode) {
-                                       RepositoryNode rpNode = (RepositoryNode) obj;
-                                       rpNode.login();
-                                       nodesViewer.refresh(obj);
-                               } else if (obj instanceof WorkspaceNode) {
-                                       ((WorkspaceNode) obj).login();
-                                       nodesViewer.refresh(obj);
-                               } else if (obj instanceof Node) {
-                                       Node node = (Node) obj;
+               // Instantiate the generic object that fits for
+               // both RCP & RAP
+               // Note that in RAP, it registers a service handler that provide the
+               // access to the files.
+               jcrFileProvider = new JcrFileProvider();
+               fileHandler = new FileHandler(jcrFileProvider);
 
-                                       // double clic on a file node triggers its opening
-                                       try {
-                                               if (node.isNodeType(NodeType.NT_FILE)) {
-                                                       String name = node.getName();
-                                                       String id = node.getIdentifier();
-                                                       // For the file provider to be able to browse the
-                                                       // various
-                                                       // repository.
-                                                       // TODO : enhanced that.
-                                                       jfp.setRootNodes((Object[]) nodeContentProvider
-                                                                       .getElements(null));
+               parent.setLayout(new FillLayout());
+               SashForm sashForm = new SashForm(parent, SWT.VERTICAL);
+               sashForm.setSashWidth(4);
+               sashForm.setLayout(new FillLayout());
 
-                                                       fh.openFile(name, id);
-                                               }
-                                       } catch (RepositoryException re) {
-                                               throw new ArgeoException(
-                                                               "Repository error while getting Node file info",
-                                                               re);
-                                       }
-                               }
-                       }
-               });
+               // Create the tree on top of the view
+               Composite top = new Composite(sashForm, SWT.NONE);
+               GridLayout gl = new GridLayout(1, false);
+               top.setLayout(gl);
+
+               nodeContentProvider = new NodeContentProvider(nodeSession,
+                               repositoryRegister);
+
+               // nodes viewer
+               nodesViewer = createNodeViewer(top, nodeContentProvider);
 
                // context menu
                MenuManager menuManager = new MenuManager();
@@ -158,13 +102,11 @@ public class GenericJcrBrowser extends ViewPart {
                nodesViewer.getTree().setMenu(menu);
                getSite().registerContextMenu(menuManager, nodesViewer);
                getSite().setSelectionProvider(nodesViewer);
-
                nodesViewer.setInput(getViewSite());
 
+               // Create the property viewer on the bottom
                Composite bottom = new Composite(sashForm, SWT.NONE);
                bottom.setLayout(new GridLayout(1, false));
-
-               // properties viewer
                propertiesViewer = new TableViewer(bottom);
                propertiesViewer.getTable().setLayoutData(
                                new GridData(SWT.FILL, SWT.FILL, true, true));
@@ -220,14 +162,7 @@ public class GenericJcrBrowser extends ViewPart {
                propertiesViewer.setInput(getViewSite());
 
                sashForm.setWeights(getWeights());
-
                nodesViewer.setComparer(new NodeViewerComparer());
-
-       }
-
-       @Override
-       public void setFocus() {
-               nodesViewer.getTree().setFocus();
        }
 
        /**
@@ -239,26 +174,115 @@ public class GenericJcrBrowser extends ViewPart {
                return new int[] { 70, 30 };
        }
 
-       /*
-        * NOTIFICATION
-        */
-       public void refresh(Object obj) {
-               nodesViewer.refresh(obj);
+       // @Override
+       // public void setFocus() {
+       // nodesViewer.getTree().setFocus();
+       // }
+       //
+       // /*
+       // * NOTIFICATION
+       // */
+       // public void refresh(Object obj) {
+       // nodesViewer.refresh(obj);
+       // }
+       //
+       // public void nodeAdded(Node parentNode, Node newNode) {
+       // nodesViewer.refresh(parentNode);
+       // nodesViewer.expandToLevel(newNode, 0);
+       // }
+       //
+       // public void nodeRemoved(Node parentNode) {
+       //
+       // IStructuredSelection newSel = new StructuredSelection(parentNode);
+       // nodesViewer.setSelection(newSel, true);
+       // // Force refresh
+       // IStructuredSelection tmpSel = (IStructuredSelection) nodesViewer
+       // .getSelection();
+       // nodesViewer.refresh(tmpSel.getFirstElement());
+       // }
+
+       private JcrFileProvider getJcrFileProvider() {
+               return jcrFileProvider;
        }
 
-       public void nodeAdded(Node parentNode, Node newNode) {
-               nodesViewer.refresh(parentNode);
-               nodesViewer.expandToLevel(newNode, 0);
+       private FileHandler getFileHandler() {
+               return fileHandler;
        }
 
-       public void nodeRemoved(Node parentNode) {
+       protected TreeViewer createNodeViewer(Composite parent,
+                       final ITreeContentProvider nodeContentProvider) {
+
+               final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.MULTI);
+
+               // |
+               // SWT.H_SCROLL
+               // |
+               // SWT.V_SCROLL);
+
+               tmpNodeViewer.getTree().setLayoutData(
+                               new GridData(SWT.FILL, SWT.FILL, true, true));
+
+               tmpNodeViewer.setContentProvider(nodeContentProvider);
+               tmpNodeViewer.setLabelProvider(new NodeLabelProvider());
+               tmpNodeViewer
+                               .addSelectionChangedListener(new ISelectionChangedListener() {
+                                       public void selectionChanged(SelectionChangedEvent event) {
+                                               if (!event.getSelection().isEmpty()) {
+                                                       IStructuredSelection sel = (IStructuredSelection) event
+                                                                       .getSelection();
+                                                       propertiesViewer.setInput(sel.getFirstElement());
+                                               } else {
+                                                       propertiesViewer.setInput(getViewSite());
+                                               }
+                                       }
+                               });
+
+               tmpNodeViewer.addDoubleClickListener(new IDoubleClickListener() {
+                       public void doubleClick(DoubleClickEvent event) {
+                               if (event.getSelection() == null
+                                               || event.getSelection().isEmpty())
+                                       return;
+                               Object obj = ((IStructuredSelection) event.getSelection())
+                                               .getFirstElement();
+                               if (obj instanceof RepositoryNode) {
+                                       RepositoryNode rpNode = (RepositoryNode) obj;
+                                       rpNode.login();
+                                       tmpNodeViewer.refresh(obj);
+                               } else if (obj instanceof WorkspaceNode) {
+                                       ((WorkspaceNode) obj).login();
+                                       tmpNodeViewer.refresh(obj);
+                               } else if (obj instanceof Node) {
+                                       Node node = (Node) obj;
+
+                                       // double clic on a file node triggers its opening
+                                       try {
+                                               if (node.isNodeType(NodeType.NT_FILE)) {
+                                                       String name = node.getName();
+                                                       String id = node.getIdentifier();
+                                                       // For the file provider to be able to browse the
+                                                       // various
+                                                       // repository.
+                                                       // TODO : enhanced that.
+                                                       getJcrFileProvider().setRootNodes(
+                                                                       (Object[]) nodeContentProvider
+                                                                                       .getElements(null));
+
+                                                       getFileHandler().openFile(name, id);
+                                               }
+                                       } catch (RepositoryException re) {
+                                               throw new ArgeoException(
+                                                               "Repository error while getting Node file info",
+                                                               re);
+                                       }
+                               }
+                       }
+               });
+               return tmpNodeViewer;
+       }
 
-               IStructuredSelection newSel = new StructuredSelection(parentNode);
-               nodesViewer.setSelection(newSel, true);
-               // Force refresh
-               IStructuredSelection tmpSel = (IStructuredSelection) nodesViewer
-                               .getSelection();
-               nodesViewer.refresh(tmpSel.getFirstElement());
+       @Override
+       protected TreeViewer getNodeViewer() {
+               return nodesViewer;
        }
 
        // IoC