1 package org
.argeo
.eclipse
.ui
.jcr
.views
;
3 import java
.io
.InputStream
;
4 import java
.util
.ArrayList
;
5 import java
.util
.Arrays
;
9 import javax
.jcr
.Property
;
10 import javax
.jcr
.PropertyType
;
11 import javax
.jcr
.RepositoryException
;
13 import org
.apache
.commons
.io
.IOUtils
;
14 import org
.apache
.commons
.logging
.Log
;
15 import org
.apache
.commons
.logging
.LogFactory
;
16 import org
.argeo
.ArgeoException
;
17 import org
.argeo
.eclipse
.ui
.dialogs
.Error
;
18 import org
.argeo
.eclipse
.ui
.jcr
.browser
.NodeContentProvider
;
19 import org
.argeo
.eclipse
.ui
.jcr
.browser
.NodeLabelProvider
;
20 import org
.argeo
.eclipse
.ui
.jcr
.browser
.PropertiesContentProvider
;
21 import org
.argeo
.eclipse
.ui
.jcr
.browser
.RepositoryNode
;
22 import org
.argeo
.eclipse
.ui
.jcr
.browser
.WorkspaceNode
;
23 import org
.argeo
.eclipse
.ui
.specific
.FileHandler
;
24 import org
.argeo
.jcr
.RepositoryRegister
;
25 import org
.eclipse
.jface
.action
.MenuManager
;
26 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
27 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
28 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
29 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
30 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
31 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
32 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
33 import org
.eclipse
.jface
.viewers
.TableViewer
;
34 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
35 import org
.eclipse
.jface
.viewers
.TreeViewer
;
36 import org
.eclipse
.swt
.SWT
;
37 import org
.eclipse
.swt
.custom
.SashForm
;
38 import org
.eclipse
.swt
.layout
.FillLayout
;
39 import org
.eclipse
.swt
.layout
.GridData
;
40 import org
.eclipse
.swt
.layout
.GridLayout
;
41 import org
.eclipse
.swt
.widgets
.Composite
;
42 import org
.eclipse
.swt
.widgets
.Menu
;
43 import org
.eclipse
.ui
.part
.ViewPart
;
45 public class GenericJcrBrowser
extends ViewPart
{
46 private static Log log
= LogFactory
.getLog(GenericJcrBrowser
.class);
48 private TreeViewer nodesViewer
;
49 private TableViewer propertiesViewer
;
51 private RepositoryRegister repositoryRegister
;
54 public void createPartControl(Composite parent
) {
55 parent
.setLayout(new FillLayout());
57 SashForm sashForm
= new SashForm(parent
, SWT
.VERTICAL
);
58 sashForm
.setSashWidth(4);
59 sashForm
.setLayout(new FillLayout());
61 Composite top
= new Composite(sashForm
, SWT
.NONE
);
62 GridLayout gl
= new GridLayout(1, false);
66 nodesViewer
= new TreeViewer(top
, SWT
.MULTI
| SWT
.H_SCROLL
68 nodesViewer
.getTree().setLayoutData(
69 new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
70 nodesViewer
.setContentProvider(new NodeContentProvider());
71 nodesViewer
.setLabelProvider(new NodeLabelProvider());
73 .addSelectionChangedListener(new ISelectionChangedListener() {
74 public void selectionChanged(SelectionChangedEvent event
) {
75 if (!event
.getSelection().isEmpty()) {
76 IStructuredSelection sel
= (IStructuredSelection
) event
78 propertiesViewer
.setInput(sel
.getFirstElement());
80 propertiesViewer
.setInput(getViewSite());
84 nodesViewer
.addDoubleClickListener(new IDoubleClickListener() {
85 public void doubleClick(DoubleClickEvent event
) {
86 if (event
.getSelection() == null
87 || event
.getSelection().isEmpty())
89 Object obj
= ((IStructuredSelection
) event
.getSelection())
91 if (obj
instanceof RepositoryNode
) {
92 ((RepositoryNode
) obj
).login();
93 nodesViewer
.refresh(obj
);
94 } else if (obj
instanceof WorkspaceNode
) {
95 ((WorkspaceNode
) obj
).login();
96 nodesViewer
.refresh(obj
);
97 } // call the openFile commands on node
98 else if (obj
instanceof Node
) {
99 Node node
= (Node
) obj
;
101 if (node
.isNodeType("nt:file")) {
103 Node child
= node
.getNodes().nextNode();
104 if (!child
.isNodeType("nt:resource")) {
105 Error
.show("Cannot open file children Node that are not of 'nt:resource' type.");
108 InputStream fis
= null;
111 fis
= (InputStream
) child
112 .getProperty("jcr:data").getBinary()
115 String name
= node
.getName();
117 // Instantiate the generic object that fits for
120 FileHandler fh
= new FileHandler();
121 fh
.openFile(name
, fis
);
122 // fh.openFile(file);
123 } catch (Exception e
) {
124 throw new ArgeoException(
125 "Stream error while opening file", e
);
127 IOUtils
.closeQuietly(fis
);
130 } catch (RepositoryException re
) {
131 re
.printStackTrace();
140 MenuManager menuManager
= new MenuManager();
141 Menu menu
= menuManager
.createContextMenu(nodesViewer
.getTree());
142 nodesViewer
.getTree().setMenu(menu
);
143 getSite().registerContextMenu(menuManager
, nodesViewer
);
144 getSite().setSelectionProvider(nodesViewer
);
146 nodesViewer
.setInput(repositoryRegister
);
148 Composite bottom
= new Composite(sashForm
, SWT
.NONE
);
149 bottom
.setLayout(new GridLayout(1, false));
152 propertiesViewer
= new TableViewer(bottom
);
153 propertiesViewer
.getTable().setLayoutData(
154 new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
155 propertiesViewer
.getTable().setHeaderVisible(true);
156 propertiesViewer
.setContentProvider(new PropertiesContentProvider());
157 TableViewerColumn col
= new TableViewerColumn(propertiesViewer
,
159 col
.getColumn().setText("Name");
160 col
.getColumn().setWidth(200);
161 col
.setLabelProvider(new ColumnLabelProvider() {
162 public String
getText(Object element
) {
164 return ((Property
) element
).getName();
165 } catch (RepositoryException e
) {
166 throw new ArgeoException(
167 "Unexpected exception in label provider", e
);
171 col
= new TableViewerColumn(propertiesViewer
, SWT
.NONE
);
172 col
.getColumn().setText("Value");
173 col
.getColumn().setWidth(400);
174 col
.setLabelProvider(new ColumnLabelProvider() {
175 public String
getText(Object element
) {
177 Property property
= (Property
) element
;
178 if (property
.getType() == PropertyType
.BINARY
)
180 else if (property
.isMultiple())
181 return Arrays
.asList(property
.getValues()).toString();
183 return property
.getValue().getString();
184 } catch (RepositoryException e
) {
185 throw new ArgeoException(
186 "Unexpected exception in label provider", e
);
190 col
= new TableViewerColumn(propertiesViewer
, SWT
.NONE
);
191 col
.getColumn().setText("Type");
192 col
.getColumn().setWidth(200);
193 col
.setLabelProvider(new ColumnLabelProvider() {
194 public String
getText(Object element
) {
196 return PropertyType
.nameFromValue(((Property
) element
)
198 } catch (RepositoryException e
) {
199 throw new ArgeoException(
200 "Unexpected exception in label provider", e
);
204 propertiesViewer
.setInput(getViewSite());
206 sashForm
.setWeights(getWeights());
211 public void setFocus() {
212 nodesViewer
.getTree().setFocus();
216 * To be overidden to adapt size of form and result frames.
220 protected int[] getWeights() {
221 return new int[] { 70, 30 };
227 public void refresh(Object obj
) {
228 nodesViewer
.refresh(obj
);
231 public void nodeAdded(Node parentNode
, Node newNode
) {
232 nodesViewer
.refresh(parentNode
);
233 nodesViewer
.expandToLevel(newNode
, 0);
236 public void nodeRemoved(Node parentNode
) {
238 List
<Node
> al
= new ArrayList
<Node
>();
241 IStructuredSelection newSel
= new StructuredSelection(al
);
242 // IStructuredSelection newSel = new StructuredSelection(parentNode);
244 if (log
.isDebugEnabled())
245 log
.debug("new selection size = " + newSel
.size());
247 nodesViewer
.setSelection(newSel
, true);
248 IStructuredSelection tmpSel
= (IStructuredSelection
) nodesViewer
251 if (log
.isDebugEnabled())
252 log
.debug("set selection size = " + tmpSel
.size());
254 nodesViewer
.refresh();
257 // log.debug(" Class selected (Parent 1ST element) : "
258 // + tmpSel.getFirstElement().getClass());
261 // nodesViewer.refresh(parentNode);
263 // // Call the refresh node command
265 // IWorkbench iw = JcrUiPlugin.getDefault().getWorkbench();
266 // IHandlerService handlerService = (IHandlerService) iw
267 // .getService(IHandlerService.class);
269 // // get the command from plugin.xml
270 // IWorkbenchWindow window = iw.getActiveWorkbenchWindow();
271 // ICommandService cmdService = (ICommandService) window
272 // .getService(ICommandService.class);
273 // Command cmd = cmdService
274 // .getCommand(OpenEbiDetailsEditor.COMMAND_NAME);
276 // // log.debug("cmd : " + cmd);
277 // ArrayList<Parameterization> parameters = new
278 // ArrayList<Parameterization>();
280 // // get the parameter
281 // IParameter iparam = cmd
282 // .getParameter(OpenEbiDetailsEditor.PARAM_UUID);
284 // Parameterization params = new Parameterization(iparam,
285 // ((String[]) obj)[0]);
286 // parameters.add(params);
288 // // build the parameterized command
289 // ParameterizedCommand pc = new ParameterizedCommand(cmd,
290 // parameters.toArray(new Parameterization[parameters.size()]));
292 // // execute the command
293 // handlerService = (IHandlerService) window
294 // .getService(IHandlerService.class);
295 // handlerService.executeCommand(pc, null);
297 // } catch (Exception e) {
298 // throw new ArgeoException("Error opening EBI", e);
302 public void setRepositoryRegister(RepositoryRegister repositoryRegister
) {
303 this.repositoryRegister
= repositoryRegister
;