1 package org
.argeo
.app
.ui
.library
;
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
.api
.acr
.Content
;
14 import org
.argeo
.api
.cms
.CmsConstants
;
15 import org
.argeo
.app
.api
.EntityType
;
16 import org
.argeo
.app
.ui
.SuiteUiUtils
;
17 import org
.argeo
.app
.ui
.widgets
.TreeOrSearchArea
;
18 import org
.argeo
.app
.ux
.SuiteIcon
;
19 import org
.argeo
.app
.ux
.SuiteUxEvent
;
20 import org
.argeo
.cms
.jcr
.acr
.JcrContentProvider
;
21 import org
.argeo
.cms
.swt
.CmsSwtTheme
;
22 import org
.argeo
.cms
.swt
.CmsSwtUtils
;
23 import org
.argeo
.cms
.ui
.CmsUiProvider
;
24 import org
.argeo
.jcr
.Jcr
;
25 import org
.argeo
.jcr
.JcrException
;
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
.ITreeContentProvider
;
31 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
32 import org
.eclipse
.jface
.viewers
.TreeViewerColumn
;
33 import org
.eclipse
.jface
.viewers
.Viewer
;
34 import org
.eclipse
.swt
.SWT
;
35 import org
.eclipse
.swt
.graphics
.Image
;
36 import org
.eclipse
.swt
.layout
.GridLayout
;
37 import org
.eclipse
.swt
.widgets
.Composite
;
38 import org
.eclipse
.swt
.widgets
.Control
;
40 public class JcrContentEntryArea
implements CmsUiProvider
{
41 private JcrContentProvider jcrContentProvider
;
44 public Control
createUiPart(Composite parent
, Content context
) {
45 CmsSwtTheme theme
= CmsSwtUtils
.getCmsTheme(parent
);
47 parent
.setLayout(new GridLayout());
48 Ui ui
= new Ui(parent
, SWT
.NONE
);
49 ui
.setLayoutData(CmsSwtUtils
.fillAll());
51 TreeViewerColumn nameCol
= new TreeViewerColumn(ui
.getTreeViewer(), SWT
.NONE
);
52 nameCol
.getColumn().setWidth(400);
53 nameCol
.setLabelProvider(new ColumnLabelProvider() {
56 public String
getText(Object element
) {
57 Node node
= (Node
) element
;
58 return Jcr
.getTitle(node
);
62 public Image
getImage(Object element
) {
63 Node node
= (Node
) element
;
65 if (Jcr
.isNodeType(node
, NodeType
.NT_FOLDER
)) {
66 icon
= theme
.getSmallIcon(SuiteIcon
.folder
);
67 } else if (Jcr
.isNodeType(node
, NodeType
.NT_FILE
)) {
68 // TODO check recognized document types
69 icon
= theme
.getSmallIcon(SuiteIcon
.document
);
70 } else if (Jcr
.isNodeType(node
, EntityType
.document
.get())) {
71 icon
= theme
.getSmallIcon(SuiteIcon
.document
);
74 icon
= theme
.getSmallIcon(SuiteIcon
.folder
);
83 ui
.getTreeViewer().addDoubleClickListener(new IDoubleClickListener() {
86 public void doubleClick(DoubleClickEvent event
) {
87 Node user
= (Node
) ui
.getTreeViewer().getStructuredSelection().getFirstElement();
89 CmsSwtUtils
.getCmsView(parent
).sendEvent(SuiteUxEvent
.openNewPart
.topic(),
90 SuiteUiUtils
.eventProperties(user
));
95 ui
.getTreeViewer().addSelectionChangedListener(new ISelectionChangedListener() {
96 public void selectionChanged(SelectionChangedEvent event
) {
97 Node user
= (Node
) ui
.getTreeViewer().getStructuredSelection().getFirstElement();
99 CmsSwtUtils
.getCmsView(parent
).sendEvent(SuiteUxEvent
.refreshPart
.topic(),
100 SuiteUiUtils
.eventProperties(user
));
105 ui
.getTreeViewer().setContentProvider(new SpacesContentProvider());
106 Session session
= jcrContentProvider
.getJcrSession(context
, CmsConstants
.SYS_WORKSPACE
);
107 ui
.getTreeViewer().setInput(session
);
111 protected boolean isLeaf(Node node
) {
112 return Jcr
.isNodeType(node
, EntityType
.entity
.get()) || Jcr
.isNodeType(node
, EntityType
.document
.get())
113 || Jcr
.isNodeType(node
, NodeType
.NT_FILE
);
116 public void setJcrContentProvider(JcrContentProvider jcrContentProvider
) {
117 this.jcrContentProvider
= jcrContentProvider
;
120 class Ui
extends TreeOrSearchArea
{
122 public Ui(Composite parent
, int style
) {
123 super(parent
, style
);
128 class SpacesContentProvider
implements ITreeContentProvider
{
131 public Object
[] getElements(Object inputElement
) {
132 Session session
= (Session
) inputElement
;
134 Query query
= session
.getWorkspace().getQueryManager()
135 .createQuery("SELECT * FROM [" + EntityType
.space
.get() + "]", Query
.JCR_SQL2
);
136 NodeIterator spacesIt
= query
.execute().getNodes();
137 SortedMap
<String
, Node
> map
= new TreeMap
<>();
138 while (spacesIt
.hasNext()) {
139 Node space
= spacesIt
.nextNode();
140 String path
= space
.getPath();
141 map
.put(path
, space
);
143 return map
.values().toArray();
144 } catch (RepositoryException e
) {
145 throw new JcrException(e
);
150 public Object
[] getChildren(Object parentElement
) {
151 Node parent
= (Node
) parentElement
;
154 return Jcr
.getNodes(parent
).toArray();
158 public Object
getParent(Object element
) {
159 Node node
= (Node
) element
;
160 return Jcr
.getParent(node
);
164 public boolean hasChildren(Object element
) {
165 Node node
= (Node
) element
;
166 return !isLeaf(node
);
170 public void dispose() {
174 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {