From 775c05e7d8b488c14df85f43da996b6f39a01259 Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Fri, 1 Apr 2011 16:54:32 +0000 Subject: [PATCH] + Introduce an Abstract JCR View to enable specific view with the same commands git-svn-id: https://svn.argeo.org/commons/trunk@4421 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../ui/jcr/commands/AddFileFolder.java | 4 +- .../eclipse/ui/jcr/commands/DeleteNode.java | 4 +- .../ui/jcr/commands/ImportFileSystem.java | 4 +- .../eclipse/ui/jcr/commands/Refresh.java | 4 +- .../ui/jcr/views/AbstractJcrBrowser.java | 58 +++++ .../ui/jcr/views/GenericJcrBrowser.java | 236 ++++++++++-------- 6 files changed, 196 insertions(+), 114 deletions(-) create mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java index 4dc0dbec1..03062e6af 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java @@ -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() diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java index fc8ad6a0c..f7a99415f 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java @@ -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)); diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/ImportFileSystem.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/ImportFileSystem.java index b1e999f7e..1dbcfb523 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/ImportFileSystem.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/ImportFileSystem.java @@ -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() diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java index 699a96db2..af3fd53c9 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java @@ -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 index 000000000..604151c6d --- /dev/null +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java @@ -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()); + } +} diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java index e369c6c8a..136b99fcf 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java @@ -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 -- 2.30.2