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
.cms
.CmsTheme
;
14 import org
.argeo
.app
.api
.EntityType
;
15 import org
.argeo
.app
.ui
.SuiteEvent
;
16 import org
.argeo
.app
.ui
.SuiteIcon
;
17 import org
.argeo
.app
.ui
.widgets
.TreeOrSearchArea
;
18 import org
.argeo
.cms
.swt
.CmsSwtUtils
;
19 import org
.argeo
.cms
.ui
.CmsUiProvider
;
20 import org
.argeo
.jcr
.Jcr
;
21 import org
.argeo
.jcr
.JcrException
;
22 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
23 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
24 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
25 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
26 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
27 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
28 import org
.eclipse
.jface
.viewers
.TreeViewerColumn
;
29 import org
.eclipse
.jface
.viewers
.Viewer
;
30 import org
.eclipse
.swt
.SWT
;
31 import org
.eclipse
.swt
.graphics
.Image
;
32 import org
.eclipse
.swt
.layout
.GridLayout
;
33 import org
.eclipse
.swt
.widgets
.Composite
;
34 import org
.eclipse
.swt
.widgets
.Control
;
36 public class ContentEntryArea
implements CmsUiProvider
{
39 public Control
createUi(Composite parent
, Node context
) throws RepositoryException
{
40 CmsTheme theme
= CmsSwtUtils
.getCmsTheme(parent
);
42 parent
.setLayout(new GridLayout());
43 Ui ui
= new Ui(parent
, SWT
.NONE
);
44 ui
.setLayoutData(CmsSwtUtils
.fillAll());
46 TreeViewerColumn nameCol
= new TreeViewerColumn(ui
.getTreeViewer(), SWT
.NONE
);
47 nameCol
.getColumn().setWidth(400);
48 nameCol
.setLabelProvider(new ColumnLabelProvider() {
51 public String
getText(Object element
) {
52 Node node
= (Node
) element
;
53 return Jcr
.getTitle(node
);
57 public Image
getImage(Object element
) {
58 Node node
= (Node
) element
;
60 if (Jcr
.isNodeType(node
, NodeType
.NT_FOLDER
)) {
61 icon
= SuiteIcon
.folder
.getSmallIcon(theme
);
62 } else if (Jcr
.isNodeType(node
, NodeType
.NT_FILE
)) {
63 // TODO check recognized document types
64 icon
= SuiteIcon
.document
.getSmallIcon(theme
);
65 } else if (Jcr
.isNodeType(node
, EntityType
.document
.get())) {
66 icon
= SuiteIcon
.document
.getSmallIcon(theme
);
69 icon
= SuiteIcon
.folder
.getSmallIcon(theme
);
78 ui
.getTreeViewer().addDoubleClickListener(new IDoubleClickListener() {
81 public void doubleClick(DoubleClickEvent event
) {
82 Node user
= (Node
) ui
.getTreeViewer().getStructuredSelection().getFirstElement();
84 CmsSwtUtils
.getCmsView(parent
).sendEvent(SuiteEvent
.openNewPart
.topic(),
85 SuiteEvent
.eventProperties(user
));
90 ui
.getTreeViewer().addSelectionChangedListener(new ISelectionChangedListener() {
91 public void selectionChanged(SelectionChangedEvent event
) {
92 Node user
= (Node
) ui
.getTreeViewer().getStructuredSelection().getFirstElement();
94 CmsSwtUtils
.getCmsView(parent
).sendEvent(SuiteEvent
.refreshPart
.topic(),
95 SuiteEvent
.eventProperties(user
));
100 ui
.getTreeViewer().setContentProvider(new SpacesContentProvider());
101 ui
.getTreeViewer().setInput(context
.getSession());
105 protected boolean isLeaf(Node node
) {
106 return Jcr
.isNodeType(node
, EntityType
.entity
.get()) || Jcr
.isNodeType(node
, EntityType
.document
.get())
107 || Jcr
.isNodeType(node
, NodeType
.NT_FILE
);
110 class Ui
extends TreeOrSearchArea
{
112 public Ui(Composite parent
, int style
) {
113 super(parent
, style
);
118 class SpacesContentProvider
implements ITreeContentProvider
{
121 public Object
[] getElements(Object inputElement
) {
122 Session session
= (Session
) inputElement
;
124 Query query
= session
.getWorkspace().getQueryManager()
125 .createQuery("SELECT * FROM [" + EntityType
.space
.get() + "]", Query
.JCR_SQL2
);
126 NodeIterator spacesIt
= query
.execute().getNodes();
127 SortedMap
<String
, Node
> map
= new TreeMap
<>();
128 while (spacesIt
.hasNext()) {
129 Node space
= spacesIt
.nextNode();
130 String path
= space
.getPath();
131 map
.put(path
, space
);
133 return map
.values().toArray();
134 } catch (RepositoryException e
) {
135 throw new JcrException(e
);
140 public Object
[] getChildren(Object parentElement
) {
141 Node parent
= (Node
) parentElement
;
144 return Jcr
.getNodes(parent
).toArray();
148 public Object
getParent(Object element
) {
149 Node node
= (Node
) element
;
150 return Jcr
.getParent(node
);
154 public boolean hasChildren(Object element
) {
155 Node node
= (Node
) element
;
156 return !isLeaf(node
);
160 public void dispose() {
164 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {