]> git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/UserCentricJcrBrowser.java
Improve RCP security
[lgpl/argeo-commons.git] / eclipse / runtime / org.argeo.eclipse.ui.jcr / src / main / java / org / argeo / eclipse / ui / jcr / views / UserCentricJcrBrowser.java
1 package org.argeo.eclipse.ui.jcr.views;
2
3 import javax.jcr.Node;
4 import javax.jcr.RepositoryException;
5 import javax.jcr.Session;
6
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;
29
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);
33
34 private TreeViewer nodesViewer;
35
36 private Session session;
37
38 @Override
39 public void createPartControl(Composite parent) {
40
41 // Instantiate the generic object that fits for
42 // both RCP & RAP, must be final to be accessed in the double click
43 // listener.
44 // Not that in RAP, it registers a service handler that provide the
45 // access to the files.
46
47 final JcrFileProvider jfp = new JcrFileProvider();
48 final FileHandler fh = new FileHandler(jfp);
49
50 parent.setLayout(new FillLayout());
51
52 Composite top = new Composite(parent, SWT.NONE);
53 GridLayout gl = new GridLayout(1, false);
54 top.setLayout(gl);
55
56 // nodes viewer
57 nodesViewer = new TreeViewer(top, SWT.MULTI | SWT.H_SCROLL
58 | SWT.V_SCROLL);
59 nodesViewer.getTree().setLayoutData(
60 new GridData(SWT.FILL, SWT.FILL, true, true));
61
62 SimpleNodeContentProvider contentProvider = new HomeContentProvider(
63 session);
64 nodesViewer.setContentProvider(contentProvider);
65 nodesViewer.setLabelProvider(new NodeLabelProvider());
66
67 nodesViewer.addDoubleClickListener(new IDoubleClickListener() {
68 public void doubleClick(DoubleClickEvent event) {
69 if (event.getSelection() == null
70 || event.getSelection().isEmpty())
71 return;
72 Object obj = ((IStructuredSelection) event.getSelection())
73 .getFirstElement();
74 if (obj instanceof RepositoryNode) {
75 RepositoryNode rpNode = (RepositoryNode) obj;
76 rpNode.login();
77 // For the file provider to be able to browse the various
78 // repository.
79 // TODO : enhanced that.
80 jfp.setRepositoryNode(rpNode);
81 nodesViewer.refresh(obj);
82
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;
88
89 // double clic on a file node triggers its opening
90 try {
91 if (node.isNodeType("nt:file")) {
92 String name = node.getName();
93 String id = node.getIdentifier();
94 fh.openFile(name, id);
95 }
96 } catch (RepositoryException re) {
97 throw new ArgeoException(
98 "Repository error while getting Node file info",
99 re);
100 }
101 }
102 }
103 });
104
105 // context menu
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);
111
112 nodesViewer.setInput(session);
113
114 nodesViewer.setComparer(new NodeViewerComparer());
115
116 }
117
118 @Override
119 public void setFocus() {
120 nodesViewer.getTree().setFocus();
121 }
122
123 /**
124 * To be overidden to adapt size of form and result frames.
125 *
126 * @return
127 */
128 protected int[] getWeights() {
129 return new int[] { 70, 30 };
130 }
131
132 /*
133 * NOTIFICATION
134 */
135 public void refresh(Object obj) {
136 nodesViewer.refresh(obj);
137 }
138
139 public void nodeAdded(Node parentNode, Node newNode) {
140 nodesViewer.refresh(parentNode);
141 nodesViewer.expandToLevel(newNode, 0);
142 }
143
144 public void nodeRemoved(Node parentNode) {
145
146 IStructuredSelection newSel = new StructuredSelection(parentNode);
147 nodesViewer.setSelection(newSel, true);
148 // Force refresh
149 IStructuredSelection tmpSel = (IStructuredSelection) nodesViewer
150 .getSelection();
151 nodesViewer.refresh(tmpSel.getFirstElement());
152 }
153
154 public void setSession(Session session) {
155 this.session = session;
156 }
157
158 }