1 package org
.argeo
.eclipse
.ui
.jcr
.views
;
4 import javax
.jcr
.RepositoryException
;
5 import javax
.jcr
.Session
;
7 import org
.argeo
.ArgeoException
;
8 import org
.argeo
.eclipse
.ui
.jcr
.SimpleNodeContentProvider
;
9 import org
.argeo
.eclipse
.ui
.jcr
.browser
.HomeContentProvider
;
10 import org
.argeo
.eclipse
.ui
.jcr
.browser
.NodeLabelProvider
;
11 import org
.argeo
.eclipse
.ui
.jcr
.browser
.RepositoryNode
;
12 import org
.argeo
.eclipse
.ui
.jcr
.browser
.WorkspaceNode
;
13 import org
.argeo
.eclipse
.ui
.jcr
.utils
.JcrFileProvider
;
14 import org
.argeo
.eclipse
.ui
.jcr
.utils
.NodeViewerComparer
;
15 import org
.argeo
.eclipse
.ui
.specific
.FileHandler
;
16 import org
.eclipse
.jface
.action
.MenuManager
;
17 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
18 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
19 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
20 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
21 import org
.eclipse
.jface
.viewers
.TreeViewer
;
22 import org
.eclipse
.swt
.SWT
;
23 import org
.eclipse
.swt
.layout
.FillLayout
;
24 import org
.eclipse
.swt
.layout
.GridData
;
25 import org
.eclipse
.swt
.layout
.GridLayout
;
26 import org
.eclipse
.swt
.widgets
.Composite
;
27 import org
.eclipse
.swt
.widgets
.Menu
;
28 import org
.eclipse
.ui
.part
.ViewPart
;
30 /** JCR browser organized around a user home node. */
31 public class UserCentricJcrBrowser
extends ViewPart
{
32 // private final static Log log = LogFactory.getLog(UserBrowser.class);
34 private TreeViewer nodesViewer
;
36 private Session session
;
39 public void createPartControl(Composite parent
) {
41 // Instantiate the generic object that fits for
42 // both RCP & RAP, must be final to be accessed in the double click
44 // Not that in RAP, it registers a service handler that provide the
45 // access to the files.
47 final JcrFileProvider jfp
= new JcrFileProvider();
48 final FileHandler fh
= new FileHandler(jfp
);
50 parent
.setLayout(new FillLayout());
52 Composite top
= new Composite(parent
, SWT
.NONE
);
53 GridLayout gl
= new GridLayout(1, false);
57 nodesViewer
= new TreeViewer(top
, SWT
.MULTI
| SWT
.H_SCROLL
59 nodesViewer
.getTree().setLayoutData(
60 new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
62 SimpleNodeContentProvider contentProvider
= new HomeContentProvider(
64 nodesViewer
.setContentProvider(contentProvider
);
65 nodesViewer
.setLabelProvider(new NodeLabelProvider());
67 nodesViewer
.addDoubleClickListener(new IDoubleClickListener() {
68 public void doubleClick(DoubleClickEvent event
) {
69 if (event
.getSelection() == null
70 || event
.getSelection().isEmpty())
72 Object obj
= ((IStructuredSelection
) event
.getSelection())
74 if (obj
instanceof RepositoryNode
) {
75 RepositoryNode rpNode
= (RepositoryNode
) obj
;
77 // For the file provider to be able to browse the various
79 // TODO : enhanced that.
80 jfp
.setRepositoryNode(rpNode
);
81 nodesViewer
.refresh(obj
);
83 } else if (obj
instanceof WorkspaceNode
) {
84 ((WorkspaceNode
) obj
).login();
85 nodesViewer
.refresh(obj
);
86 } else if (obj
instanceof Node
) {
87 Node node
= (Node
) obj
;
89 // double clic on a file node triggers its opening
91 if (node
.isNodeType("nt:file")) {
92 String name
= node
.getName();
93 String id
= node
.getIdentifier();
94 fh
.openFile(name
, id
);
96 } catch (RepositoryException re
) {
97 throw new ArgeoException(
98 "Repository error while getting Node file info",
106 MenuManager menuManager
= new MenuManager();
107 Menu menu
= menuManager
.createContextMenu(nodesViewer
.getTree());
108 nodesViewer
.getTree().setMenu(menu
);
109 getSite().registerContextMenu(menuManager
, nodesViewer
);
110 getSite().setSelectionProvider(nodesViewer
);
112 nodesViewer
.setInput(session
);
114 nodesViewer
.setComparer(new NodeViewerComparer());
119 public void setFocus() {
120 nodesViewer
.getTree().setFocus();
124 * To be overidden to adapt size of form and result frames.
128 protected int[] getWeights() {
129 return new int[] { 70, 30 };
135 public void refresh(Object obj
) {
136 nodesViewer
.refresh(obj
);
139 public void nodeAdded(Node parentNode
, Node newNode
) {
140 nodesViewer
.refresh(parentNode
);
141 nodesViewer
.expandToLevel(newNode
, 0);
144 public void nodeRemoved(Node parentNode
) {
146 IStructuredSelection newSel
= new StructuredSelection(parentNode
);
147 nodesViewer
.setSelection(newSel
, true);
149 IStructuredSelection tmpSel
= (IStructuredSelection
) nodesViewer
151 nodesViewer
.refresh(tmpSel
.getFirstElement());
154 public void setSession(Session session
) {
155 this.session
= session
;