1 package org
.argeo
.library
.ui
;
3 import java
.util
.SortedMap
;
4 import java
.util
.TreeMap
;
7 import javax
.jcr
.NodeIterator
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.Session
;
10 import javax
.jcr
.nodetype
.NodeType
;
11 import javax
.jcr
.query
.Query
;
13 import org
.argeo
.cms
.ui
.CmsTheme
;
14 import org
.argeo
.cms
.ui
.CmsUiProvider
;
15 import org
.argeo
.cms
.ui
.CmsView
;
16 import org
.argeo
.cms
.ui
.util
.CmsUiUtils
;
17 import org
.argeo
.entity
.EntityType
;
18 import org
.argeo
.jcr
.Jcr
;
19 import org
.argeo
.jcr
.JcrException
;
20 import org
.argeo
.suite
.ui
.SuiteEvent
;
21 import org
.argeo
.suite
.ui
.SuiteIcon
;
22 import org
.argeo
.suite
.ui
.widgets
.TreeOrSearchArea
;
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
.ITreeContentProvider
;
28 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
29 import org
.eclipse
.jface
.viewers
.TreeViewerColumn
;
30 import org
.eclipse
.jface
.viewers
.Viewer
;
31 import org
.eclipse
.swt
.SWT
;
32 import org
.eclipse
.swt
.graphics
.Image
;
33 import org
.eclipse
.swt
.layout
.GridLayout
;
34 import org
.eclipse
.swt
.widgets
.Composite
;
35 import org
.eclipse
.swt
.widgets
.Control
;
37 public class ContentEntryArea
implements CmsUiProvider
{
40 public Control
createUi(Composite parent
, Node context
) throws RepositoryException
{
41 CmsTheme theme
= CmsTheme
.getCmsTheme(parent
);
43 parent
.setLayout(new GridLayout());
44 Ui ui
= new Ui(parent
, SWT
.NONE
);
45 ui
.setLayoutData(CmsUiUtils
.fillAll());
47 TreeViewerColumn nameCol
= new TreeViewerColumn(ui
.getTreeViewer(), SWT
.NONE
);
48 nameCol
.getColumn().setWidth(400);
49 nameCol
.setLabelProvider(new ColumnLabelProvider() {
52 public String
getText(Object element
) {
53 Node node
= (Node
) element
;
54 return Jcr
.getTitle(node
);
58 public Image
getImage(Object element
) {
59 Node node
= (Node
) element
;
61 if (Jcr
.isNodeType(node
, NodeType
.NT_FOLDER
)) {
62 icon
= SuiteIcon
.folder
.getSmallIcon(theme
);
63 } else if (Jcr
.isNodeType(node
, NodeType
.NT_FILE
)) {
64 // TODO check recognized document types
65 icon
= SuiteIcon
.document
.getSmallIcon(theme
);
66 } else if (Jcr
.isNodeType(node
, EntityType
.document
.get())) {
67 icon
= SuiteIcon
.document
.getSmallIcon(theme
);
70 icon
= SuiteIcon
.folder
.getSmallIcon(theme
);
79 ui
.getTreeViewer().addDoubleClickListener(new IDoubleClickListener() {
82 public void doubleClick(DoubleClickEvent event
) {
83 Node user
= (Node
) ui
.getTreeViewer().getStructuredSelection().getFirstElement();
85 CmsView
.getCmsView(parent
).sendEvent(SuiteEvent
.openNewPart
.topic(),
86 SuiteEvent
.eventProperties(user
));
91 ui
.getTreeViewer().addSelectionChangedListener(new ISelectionChangedListener() {
92 public void selectionChanged(SelectionChangedEvent event
) {
93 Node user
= (Node
) ui
.getTreeViewer().getStructuredSelection().getFirstElement();
95 CmsView
.getCmsView(parent
).sendEvent(SuiteEvent
.refreshPart
.topic(),
96 SuiteEvent
.eventProperties(user
));
101 ui
.getTreeViewer().setContentProvider(new SpacesContentProvider());
102 ui
.getTreeViewer().setInput(context
.getSession());
106 protected boolean isLeaf(Node node
) {
107 return Jcr
.isNodeType(node
, EntityType
.entity
.get()) || Jcr
.isNodeType(node
, EntityType
.document
.get())
108 || Jcr
.isNodeType(node
, NodeType
.NT_FILE
);
111 class Ui
extends TreeOrSearchArea
{
113 public Ui(Composite parent
, int style
) {
114 super(parent
, style
);
119 class SpacesContentProvider
implements ITreeContentProvider
{
122 public Object
[] getElements(Object inputElement
) {
123 Session session
= (Session
) inputElement
;
125 Query query
= session
.getWorkspace().getQueryManager()
126 .createQuery("SELECT * FROM [" + EntityType
.space
.get() + "]", Query
.JCR_SQL2
);
127 NodeIterator spacesIt
= query
.execute().getNodes();
128 SortedMap
<String
, Node
> map
= new TreeMap
<>();
129 while (spacesIt
.hasNext()) {
130 Node space
= spacesIt
.nextNode();
131 String path
= space
.getPath();
132 map
.put(path
, space
);
134 return map
.values().toArray();
135 } catch (RepositoryException e
) {
136 throw new JcrException(e
);
141 public Object
[] getChildren(Object parentElement
) {
142 Node parent
= (Node
) parentElement
;
145 return Jcr
.getNodes(parent
).toArray();
149 public Object
getParent(Object element
) {
150 Node node
= (Node
) element
;
151 return Jcr
.getParent(node
);
155 public boolean hasChildren(Object element
) {
156 Node node
= (Node
) element
;
157 return !isLeaf(node
);
161 public void dispose() {
165 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {