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
.argeo
.ArgeoException
;
11 import org
.argeo
.eclipse
.ui
.jcr
.browser
.NodeContentProvider
;
12 import org
.argeo
.eclipse
.ui
.jcr
.browser
.NodeLabelProvider
;
13 import org
.argeo
.eclipse
.ui
.jcr
.browser
.PropertiesContentProvider
;
14 import org
.argeo
.eclipse
.ui
.jcr
.browser
.RepositoryNode
;
15 import org
.argeo
.eclipse
.ui
.jcr
.browser
.WorkspaceNode
;
16 import org
.argeo
.jcr
.RepositoryRegister
;
17 import org
.eclipse
.jface
.action
.MenuManager
;
18 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
19 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
20 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
21 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
22 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
23 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
24 import org
.eclipse
.jface
.viewers
.TableViewer
;
25 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
26 import org
.eclipse
.jface
.viewers
.TreeViewer
;
27 import org
.eclipse
.swt
.SWT
;
28 import org
.eclipse
.swt
.custom
.SashForm
;
29 import org
.eclipse
.swt
.layout
.FillLayout
;
30 import org
.eclipse
.swt
.layout
.GridData
;
31 import org
.eclipse
.swt
.layout
.GridLayout
;
32 import org
.eclipse
.swt
.widgets
.Composite
;
33 import org
.eclipse
.swt
.widgets
.Menu
;
34 import org
.eclipse
.ui
.part
.ViewPart
;
36 public class GenericJcrBrowser
extends ViewPart
{
37 private TreeViewer nodesViewer
;
38 private TableViewer propertiesViewer
;
40 private RepositoryRegister repositoryRegister
;
43 public void createPartControl(Composite parent
) {
44 parent
.setLayout(new FillLayout());
46 SashForm sashForm
= new SashForm(parent
, SWT
.VERTICAL
);
47 sashForm
.setSashWidth(4);
48 sashForm
.setLayout(new FillLayout());
50 Composite top
= new Composite(sashForm
, SWT
.NONE
);
51 GridLayout gl
= new GridLayout(1, false);
55 nodesViewer
= new TreeViewer(top
, SWT
.MULTI
| SWT
.H_SCROLL
57 nodesViewer
.getTree().setLayoutData(
58 new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
59 nodesViewer
.setContentProvider(new NodeContentProvider());
60 nodesViewer
.setLabelProvider(new NodeLabelProvider());
62 .addSelectionChangedListener(new ISelectionChangedListener() {
63 public void selectionChanged(SelectionChangedEvent event
) {
64 if (!event
.getSelection().isEmpty()) {
65 IStructuredSelection sel
= (IStructuredSelection
) event
67 propertiesViewer
.setInput(sel
.getFirstElement());
69 propertiesViewer
.setInput(getViewSite());
73 nodesViewer
.addDoubleClickListener(new IDoubleClickListener() {
74 public void doubleClick(DoubleClickEvent event
) {
75 if (event
.getSelection() == null
76 || event
.getSelection().isEmpty())
78 Object obj
= ((IStructuredSelection
) event
.getSelection())
80 if (obj
instanceof RepositoryNode
) {
81 ((RepositoryNode
) obj
).login();
82 nodesViewer
.refresh(obj
);
83 } else if (obj
instanceof WorkspaceNode
) {
84 ((WorkspaceNode
) obj
).login();
85 nodesViewer
.refresh(obj
);
92 MenuManager menuManager
= new MenuManager();
93 Menu menu
= menuManager
.createContextMenu(nodesViewer
.getTree());
94 nodesViewer
.getTree().setMenu(menu
);
95 getSite().registerContextMenu(menuManager
, nodesViewer
);
96 getSite().setSelectionProvider(nodesViewer
);
98 nodesViewer
.setInput(repositoryRegister
);
100 Composite bottom
= new Composite(sashForm
, SWT
.NONE
);
101 bottom
.setLayout(new GridLayout(1, false));
104 propertiesViewer
= new TableViewer(bottom
);
105 propertiesViewer
.getTable().setLayoutData(
106 new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
107 propertiesViewer
.getTable().setHeaderVisible(true);
108 propertiesViewer
.setContentProvider(new PropertiesContentProvider());
109 TableViewerColumn col
= new TableViewerColumn(propertiesViewer
,
111 col
.getColumn().setText("Name");
112 col
.getColumn().setWidth(200);
113 col
.setLabelProvider(new ColumnLabelProvider() {
114 public String
getText(Object element
) {
116 return ((Property
) element
).getName();
117 } catch (RepositoryException e
) {
118 throw new ArgeoException(
119 "Unexpected exception in label provider", e
);
123 col
= new TableViewerColumn(propertiesViewer
, SWT
.NONE
);
124 col
.getColumn().setText("Value");
125 col
.getColumn().setWidth(400);
126 col
.setLabelProvider(new ColumnLabelProvider() {
127 public String
getText(Object element
) {
129 Property property
= (Property
) element
;
130 if (property
.getType() == PropertyType
.BINARY
)
132 else if (property
.isMultiple())
133 return Arrays
.asList(property
.getValues()).toString();
135 return property
.getValue().getString();
136 } catch (RepositoryException e
) {
137 throw new ArgeoException(
138 "Unexpected exception in label provider", e
);
142 col
= new TableViewerColumn(propertiesViewer
, SWT
.NONE
);
143 col
.getColumn().setText("Type");
144 col
.getColumn().setWidth(200);
145 col
.setLabelProvider(new ColumnLabelProvider() {
146 public String
getText(Object element
) {
148 return PropertyType
.nameFromValue(((Property
) element
)
150 } catch (RepositoryException e
) {
151 throw new ArgeoException(
152 "Unexpected exception in label provider", e
);
156 propertiesViewer
.setInput(getViewSite());
158 sashForm
.setWeights(getWeights());
163 public void setFocus() {
164 nodesViewer
.getTree().setFocus();
168 * To be overidden to adapt size of form and result frames.
172 protected int[] getWeights() {
173 return new int[] { 70, 30 };
179 public void refresh(Object obj
) {
180 nodesViewer
.refresh(obj
);
183 public void nodeAdded(Node parentNode
, Node newNode
) {
184 nodesViewer
.refresh(parentNode
);
185 nodesViewer
.expandToLevel(newNode
, 0);
188 public void nodeRemoved(Node parentNode
) {
189 nodesViewer
.refresh(parentNode
);
192 public void setRepositoryRegister(RepositoryRegister repositoryRegister
) {
193 this.repositoryRegister
= repositoryRegister
;