1 package org
.argeo
.eclipse
.ui
.jcr
.views
;
3 import java
.io
.InputStream
;
4 import java
.util
.Arrays
;
7 import javax
.jcr
.Property
;
8 import javax
.jcr
.PropertyType
;
9 import javax
.jcr
.RepositoryException
;
11 import org
.apache
.commons
.io
.IOUtils
;
12 import org
.apache
.commons
.logging
.Log
;
13 import org
.apache
.commons
.logging
.LogFactory
;
14 import org
.argeo
.ArgeoException
;
15 import org
.argeo
.eclipse
.ui
.dialogs
.Error
;
16 import org
.argeo
.eclipse
.ui
.jcr
.browser
.NodeContentProvider
;
17 import org
.argeo
.eclipse
.ui
.jcr
.browser
.NodeLabelProvider
;
18 import org
.argeo
.eclipse
.ui
.jcr
.browser
.PropertiesContentProvider
;
19 import org
.argeo
.eclipse
.ui
.jcr
.browser
.RepositoryNode
;
20 import org
.argeo
.eclipse
.ui
.jcr
.browser
.WorkspaceNode
;
21 import org
.argeo
.eclipse
.ui
.jcr
.utils
.JcrFileProvider
;
22 import org
.argeo
.eclipse
.ui
.jcr
.utils
.NodeViewerComparer
;
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 final 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
) {
59 // Instantiate the generic object that fits for
60 // both RCP & RAP, must be final to be accessed in the double click
62 // Not that in RAP, it registers a service handler that provide the
63 // access to the files.
65 final JcrFileProvider jfp
= new JcrFileProvider();
66 final FileHandler fh
= new FileHandler(jfp
);
72 parent
.setLayout(new FillLayout());
74 SashForm sashForm
= new SashForm(parent
, SWT
.VERTICAL
);
75 sashForm
.setSashWidth(4);
76 sashForm
.setLayout(new FillLayout());
78 Composite top
= new Composite(sashForm
, SWT
.NONE
);
79 GridLayout gl
= new GridLayout(1, false);
83 nodesViewer
= new TreeViewer(top
, SWT
.MULTI
| SWT
.H_SCROLL
85 nodesViewer
.getTree().setLayoutData(
86 new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
87 nodesViewer
.setContentProvider(new NodeContentProvider());
88 nodesViewer
.setLabelProvider(new NodeLabelProvider());
90 .addSelectionChangedListener(new ISelectionChangedListener() {
91 public void selectionChanged(SelectionChangedEvent event
) {
92 if (!event
.getSelection().isEmpty()) {
93 IStructuredSelection sel
= (IStructuredSelection
) event
95 propertiesViewer
.setInput(sel
.getFirstElement());
97 propertiesViewer
.setInput(getViewSite());
102 nodesViewer
.addDoubleClickListener(new IDoubleClickListener() {
103 public void doubleClick(DoubleClickEvent event
) {
104 if (event
.getSelection() == null
105 || event
.getSelection().isEmpty())
107 Object obj
= ((IStructuredSelection
) event
.getSelection())
109 if (obj
instanceof RepositoryNode
) {
110 RepositoryNode rpNode
= (RepositoryNode
) obj
;
112 // For the file provider to be able to browse the repo.
113 // TODO : enhanced that.
114 jfp
.setRepositoryNode(rpNode
);
116 nodesViewer
.refresh(obj
);
117 } else if (obj
instanceof WorkspaceNode
) {
118 ((WorkspaceNode
) obj
).login();
119 nodesViewer
.refresh(obj
);
120 } // call the openFile commands on node
121 else if (obj
instanceof Node
) {
123 // aup.getWorkbench().getActiveWorkbenchWindow()
126 // event.getViewer().getControl().getShell();
128 // Browser browser = new Browser(shell, SWT.NONE);
129 // browser.setText(encodedURL);
130 // boolean check = browser.setUrl(encodedURL);
131 // System.out.println("soo ?? : " + check);
132 // System.out.println("script : " + browser.executeScript);
135 // RWT.getResponse().sendRedirect(encodedURL);
136 // } catch (IOException e1) {
137 // // TODO Auto-generated catch block
138 // e1.printStackTrace();
141 // final Browser browser = new Browser(parent, SWT.NONE);
142 // browser.setText(createDownloadHtml("test.pdf",
143 // "Download file"));
145 Node node
= (Node
) obj
;
147 if (node
.isNodeType("nt:file")) {
148 String name
= node
.getName();
149 String id
= node
.getIdentifier();
151 Node child
= node
.getNodes().nextNode();
152 if (!child
.isNodeType("nt:resource")) {
153 Error
.show("Cannot open file children Node that are not of 'nt:resource' type.");
157 InputStream fis
= null;
160 fis
= (InputStream
) child
161 .getProperty("jcr:data").getBinary()
163 // Instantiate the generic object that fits for
165 fh
.openFile(name
, id
, fis
);
166 } catch (Exception e
) {
167 throw new ArgeoException(
168 "Stream error while opening file", e
);
170 IOUtils
.closeQuietly(fis
);
173 } catch (RepositoryException re
) {
174 re
.printStackTrace();
184 MenuManager menuManager
= new MenuManager();
185 Menu menu
= menuManager
.createContextMenu(nodesViewer
.getTree());
186 nodesViewer
.getTree().setMenu(menu
);
187 getSite().registerContextMenu(menuManager
, nodesViewer
);
188 getSite().setSelectionProvider(nodesViewer
);
190 nodesViewer
.setInput(repositoryRegister
);
192 Composite bottom
= new Composite(sashForm
, SWT
.NONE
);
193 bottom
.setLayout(new GridLayout(1, false));
196 propertiesViewer
= new TableViewer(bottom
);
197 propertiesViewer
.getTable().setLayoutData(
198 new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
199 propertiesViewer
.getTable().setHeaderVisible(true);
200 propertiesViewer
.setContentProvider(new PropertiesContentProvider());
201 TableViewerColumn col
= new TableViewerColumn(propertiesViewer
,
203 col
.getColumn().setText("Name");
204 col
.getColumn().setWidth(200);
205 col
.setLabelProvider(new ColumnLabelProvider() {
206 public String
getText(Object element
) {
208 return ((Property
) element
).getName();
209 } catch (RepositoryException e
) {
210 throw new ArgeoException(
211 "Unexpected exception in label provider", e
);
215 col
= new TableViewerColumn(propertiesViewer
, SWT
.NONE
);
216 col
.getColumn().setText("Value");
217 col
.getColumn().setWidth(400);
218 col
.setLabelProvider(new ColumnLabelProvider() {
219 public String
getText(Object element
) {
221 Property property
= (Property
) element
;
222 if (property
.getType() == PropertyType
.BINARY
)
224 else if (property
.isMultiple())
225 return Arrays
.asList(property
.getValues()).toString();
227 return property
.getValue().getString();
228 } catch (RepositoryException e
) {
229 throw new ArgeoException(
230 "Unexpected exception in label provider", e
);
234 col
= new TableViewerColumn(propertiesViewer
, SWT
.NONE
);
235 col
.getColumn().setText("Type");
236 col
.getColumn().setWidth(200);
237 col
.setLabelProvider(new ColumnLabelProvider() {
238 public String
getText(Object element
) {
240 return PropertyType
.nameFromValue(((Property
) element
)
242 } catch (RepositoryException e
) {
243 throw new ArgeoException(
244 "Unexpected exception in label provider", e
);
248 propertiesViewer
.setInput(getViewSite());
250 sashForm
.setWeights(getWeights());
252 nodesViewer
.setComparer(new NodeViewerComparer());
257 public void setFocus() {
258 nodesViewer
.getTree().setFocus();
262 * To be overidden to adapt size of form and result frames.
266 protected int[] getWeights() {
267 return new int[] { 70, 30 };
273 public void refresh(Object obj
) {
274 nodesViewer
.refresh(obj
);
277 public void nodeAdded(Node parentNode
, Node newNode
) {
278 nodesViewer
.refresh(parentNode
);
279 nodesViewer
.expandToLevel(newNode
, 0);
282 public void nodeRemoved(Node parentNode
) {
284 IStructuredSelection newSel
= new StructuredSelection(parentNode
);
285 nodesViewer
.setSelection(newSel
, true);
287 IStructuredSelection tmpSel
= (IStructuredSelection
) nodesViewer
289 nodesViewer
.refresh(tmpSel
.getFirstElement());
293 public void setRepositoryRegister(RepositoryRegister repositoryRegister
) {
294 this.repositoryRegister
= repositoryRegister
;