1 package org
.argeo
.eclipse
.ui
.jcr
.views
;
3 import java
.util
.Arrays
;
6 import javax
.jcr
.Property
;
7 import javax
.jcr
.PropertyType
;
8 import javax
.jcr
.RepositoryException
;
10 import org
.apache
.commons
.logging
.Log
;
11 import org
.apache
.commons
.logging
.LogFactory
;
12 import org
.argeo
.ArgeoException
;
13 import org
.argeo
.eclipse
.ui
.jcr
.browser
.NodeContentProvider
;
14 import org
.argeo
.eclipse
.ui
.jcr
.browser
.NodeLabelProvider
;
15 import org
.argeo
.eclipse
.ui
.jcr
.browser
.PropertiesContentProvider
;
16 import org
.argeo
.eclipse
.ui
.jcr
.browser
.RepositoryNode
;
17 import org
.argeo
.eclipse
.ui
.jcr
.browser
.WorkspaceNode
;
18 import org
.argeo
.eclipse
.ui
.jcr
.utils
.JcrFileProvider
;
19 import org
.argeo
.eclipse
.ui
.jcr
.utils
.NodeViewerComparer
;
20 import org
.argeo
.eclipse
.ui
.specific
.FileHandler
;
21 import org
.argeo
.jcr
.RepositoryRegister
;
22 import org
.eclipse
.jface
.action
.MenuManager
;
23 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
24 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
25 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
26 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
27 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
28 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
29 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
30 import org
.eclipse
.jface
.viewers
.TableViewer
;
31 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
32 import org
.eclipse
.jface
.viewers
.TreeViewer
;
33 import org
.eclipse
.swt
.SWT
;
34 import org
.eclipse
.swt
.custom
.SashForm
;
35 import org
.eclipse
.swt
.layout
.FillLayout
;
36 import org
.eclipse
.swt
.layout
.GridData
;
37 import org
.eclipse
.swt
.layout
.GridLayout
;
38 import org
.eclipse
.swt
.widgets
.Composite
;
39 import org
.eclipse
.swt
.widgets
.Menu
;
40 import org
.eclipse
.ui
.part
.ViewPart
;
42 public class GenericJcrBrowser
extends ViewPart
{
43 private final static Log log
= LogFactory
.getLog(GenericJcrBrowser
.class);
45 private TreeViewer nodesViewer
;
46 private TableViewer propertiesViewer
;
48 private RepositoryRegister repositoryRegister
;
51 public void createPartControl(Composite parent
) {
53 // Instantiate the generic object that fits for
54 // both RCP & RAP, must be final to be accessed in the double click
56 // Not that in RAP, it registers a service handler that provide the
57 // access to the files.
59 final JcrFileProvider jfp
= new JcrFileProvider();
60 final FileHandler fh
= new FileHandler(jfp
);
62 parent
.setLayout(new FillLayout());
64 SashForm sashForm
= new SashForm(parent
, SWT
.VERTICAL
);
65 sashForm
.setSashWidth(4);
66 sashForm
.setLayout(new FillLayout());
68 Composite top
= new Composite(sashForm
, SWT
.NONE
);
69 GridLayout gl
= new GridLayout(1, false);
73 nodesViewer
= new TreeViewer(top
, SWT
.MULTI
| SWT
.H_SCROLL
75 nodesViewer
.getTree().setLayoutData(
76 new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
77 nodesViewer
.setContentProvider(new NodeContentProvider());
78 nodesViewer
.setLabelProvider(new NodeLabelProvider());
80 .addSelectionChangedListener(new ISelectionChangedListener() {
81 public void selectionChanged(SelectionChangedEvent event
) {
82 if (!event
.getSelection().isEmpty()) {
83 IStructuredSelection sel
= (IStructuredSelection
) event
85 propertiesViewer
.setInput(sel
.getFirstElement());
87 propertiesViewer
.setInput(getViewSite());
92 nodesViewer
.addDoubleClickListener(new IDoubleClickListener() {
93 public void doubleClick(DoubleClickEvent event
) {
94 if (event
.getSelection() == null
95 || event
.getSelection().isEmpty())
97 Object obj
= ((IStructuredSelection
) event
.getSelection())
99 if (obj
instanceof RepositoryNode
) {
100 RepositoryNode rpNode
= (RepositoryNode
) obj
;
102 // For the file provider to be able to browse the various
104 // TODO : enhanced that.
105 jfp
.setRepositoryNode(rpNode
);
106 nodesViewer
.refresh(obj
);
108 } else if (obj
instanceof WorkspaceNode
) {
109 ((WorkspaceNode
) obj
).login();
110 nodesViewer
.refresh(obj
);
111 } else if (obj
instanceof Node
) {
112 Node node
= (Node
) obj
;
114 // double clic on a file node triggers its opening
116 if (node
.isNodeType("nt:file")) {
117 String name
= node
.getName();
118 String id
= node
.getIdentifier();
119 fh
.openFile(name
, id
);
121 } catch (RepositoryException re
) {
122 throw new ArgeoException(
123 "Repository error while getting Node file info",
131 MenuManager menuManager
= new MenuManager();
132 Menu menu
= menuManager
.createContextMenu(nodesViewer
.getTree());
133 nodesViewer
.getTree().setMenu(menu
);
134 getSite().registerContextMenu(menuManager
, nodesViewer
);
135 getSite().setSelectionProvider(nodesViewer
);
137 nodesViewer
.setInput(repositoryRegister
);
139 Composite bottom
= new Composite(sashForm
, SWT
.NONE
);
140 bottom
.setLayout(new GridLayout(1, false));
143 propertiesViewer
= new TableViewer(bottom
);
144 propertiesViewer
.getTable().setLayoutData(
145 new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
146 propertiesViewer
.getTable().setHeaderVisible(true);
147 propertiesViewer
.setContentProvider(new PropertiesContentProvider());
148 TableViewerColumn col
= new TableViewerColumn(propertiesViewer
,
150 col
.getColumn().setText("Name");
151 col
.getColumn().setWidth(200);
152 col
.setLabelProvider(new ColumnLabelProvider() {
153 public String
getText(Object element
) {
155 return ((Property
) element
).getName();
156 } catch (RepositoryException e
) {
157 throw new ArgeoException(
158 "Unexpected exception in label provider", e
);
162 col
= new TableViewerColumn(propertiesViewer
, SWT
.NONE
);
163 col
.getColumn().setText("Value");
164 col
.getColumn().setWidth(400);
165 col
.setLabelProvider(new ColumnLabelProvider() {
166 public String
getText(Object element
) {
168 Property property
= (Property
) element
;
169 if (property
.getType() == PropertyType
.BINARY
)
171 else if (property
.isMultiple())
172 return Arrays
.asList(property
.getValues()).toString();
174 return property
.getValue().getString();
175 } catch (RepositoryException e
) {
176 throw new ArgeoException(
177 "Unexpected exception in label provider", e
);
181 col
= new TableViewerColumn(propertiesViewer
, SWT
.NONE
);
182 col
.getColumn().setText("Type");
183 col
.getColumn().setWidth(200);
184 col
.setLabelProvider(new ColumnLabelProvider() {
185 public String
getText(Object element
) {
187 return PropertyType
.nameFromValue(((Property
) element
)
189 } catch (RepositoryException e
) {
190 throw new ArgeoException(
191 "Unexpected exception in label provider", e
);
195 propertiesViewer
.setInput(getViewSite());
197 sashForm
.setWeights(getWeights());
199 nodesViewer
.setComparer(new NodeViewerComparer());
204 public void setFocus() {
205 nodesViewer
.getTree().setFocus();
209 * To be overidden to adapt size of form and result frames.
213 protected int[] getWeights() {
214 return new int[] { 70, 30 };
220 public void refresh(Object obj
) {
221 nodesViewer
.refresh(obj
);
224 public void nodeAdded(Node parentNode
, Node newNode
) {
225 nodesViewer
.refresh(parentNode
);
226 nodesViewer
.expandToLevel(newNode
, 0);
229 public void nodeRemoved(Node parentNode
) {
231 IStructuredSelection newSel
= new StructuredSelection(parentNode
);
232 nodesViewer
.setSelection(newSel
, true);
234 IStructuredSelection tmpSel
= (IStructuredSelection
) nodesViewer
236 nodesViewer
.refresh(tmpSel
.getFirstElement());
240 public void setRepositoryRegister(RepositoryRegister repositoryRegister
) {
241 this.repositoryRegister
= repositoryRegister
;