]> git.argeo.org Git - gpl/argeo-suite.git/blob - argeo/library/ui/ContentEntryArea.java
Prepare next development cycle
[gpl/argeo-suite.git] / argeo / library / ui / ContentEntryArea.java
1 package org.argeo.library.ui;
2
3 import java.util.SortedMap;
4 import java.util.TreeMap;
5
6 import javax.jcr.Node;
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;
12
13 import org.argeo.api.cms.CmsTheme;
14 import org.argeo.cms.swt.CmsSwtUtils;
15 import org.argeo.cms.ui.CmsUiProvider;
16 import org.argeo.entity.EntityType;
17 import org.argeo.jcr.Jcr;
18 import org.argeo.jcr.JcrException;
19 import org.argeo.suite.ui.SuiteEvent;
20 import org.argeo.suite.ui.SuiteIcon;
21 import org.argeo.suite.ui.widgets.TreeOrSearchArea;
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;
35
36 public class ContentEntryArea implements CmsUiProvider {
37
38 @Override
39 public Control createUi(Composite parent, Node context) throws RepositoryException {
40 CmsTheme theme = CmsSwtUtils.getCmsTheme(parent);
41
42 parent.setLayout(new GridLayout());
43 Ui ui = new Ui(parent, SWT.NONE);
44 ui.setLayoutData(CmsSwtUtils.fillAll());
45
46 TreeViewerColumn nameCol = new TreeViewerColumn(ui.getTreeViewer(), SWT.NONE);
47 nameCol.getColumn().setWidth(400);
48 nameCol.setLabelProvider(new ColumnLabelProvider() {
49
50 @Override
51 public String getText(Object element) {
52 Node node = (Node) element;
53 return Jcr.getTitle(node);
54 }
55
56 @Override
57 public Image getImage(Object element) {
58 Node node = (Node) element;
59 Image icon;
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);
67 } else {
68 if (!isLeaf(node))
69 icon = SuiteIcon.folder.getSmallIcon(theme);
70 else
71 icon = null;
72 }
73 return icon;
74 }
75
76 });
77
78 ui.getTreeViewer().addDoubleClickListener(new IDoubleClickListener() {
79
80 @Override
81 public void doubleClick(DoubleClickEvent event) {
82 Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
83 if (user != null) {
84 CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.openNewPart.topic(),
85 SuiteEvent.eventProperties(user));
86 }
87
88 }
89 });
90 ui.getTreeViewer().addSelectionChangedListener(new ISelectionChangedListener() {
91 public void selectionChanged(SelectionChangedEvent event) {
92 Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
93 if (user != null) {
94 CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.refreshPart.topic(),
95 SuiteEvent.eventProperties(user));
96 }
97 }
98 });
99
100 ui.getTreeViewer().setContentProvider(new SpacesContentProvider());
101 ui.getTreeViewer().setInput(context.getSession());
102 return ui;
103 }
104
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);
108 }
109
110 class Ui extends TreeOrSearchArea {
111
112 public Ui(Composite parent, int style) {
113 super(parent, style);
114 }
115
116 }
117
118 class SpacesContentProvider implements ITreeContentProvider {
119
120 @Override
121 public Object[] getElements(Object inputElement) {
122 Session session = (Session) inputElement;
123 try {
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);
132 }
133 return map.values().toArray();
134 } catch (RepositoryException e) {
135 throw new JcrException(e);
136 }
137 }
138
139 @Override
140 public Object[] getChildren(Object parentElement) {
141 Node parent = (Node) parentElement;
142 if (isLeaf(parent))
143 return null;
144 return Jcr.getNodes(parent).toArray();
145 }
146
147 @Override
148 public Object getParent(Object element) {
149 Node node = (Node) element;
150 return Jcr.getParent(node);
151 }
152
153 @Override
154 public boolean hasChildren(Object element) {
155 Node node = (Node) element;
156 return !isLeaf(node);
157 }
158
159 @Override
160 public void dispose() {
161 }
162
163 @Override
164 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
165 }
166
167 }
168
169 }