]> git.argeo.org Git - gpl/argeo-suite.git/blob - swt/org.argeo.app.ui/src/org/argeo/app/ui/library/JcrContentEntryArea.java
Prepare refactoring suite UX
[gpl/argeo-suite.git] / swt / org.argeo.app.ui / src / org / argeo / app / ui / library / JcrContentEntryArea.java
1 package org.argeo.app.ui.library;
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.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;
39
40 public class JcrContentEntryArea implements CmsUiProvider {
41 private JcrContentProvider jcrContentProvider;
42
43 @Override
44 public Control createUiPart(Composite parent, Content context) {
45 CmsSwtTheme theme = CmsSwtUtils.getCmsTheme(parent);
46
47 parent.setLayout(new GridLayout());
48 Ui ui = new Ui(parent, SWT.NONE);
49 ui.setLayoutData(CmsSwtUtils.fillAll());
50
51 TreeViewerColumn nameCol = new TreeViewerColumn(ui.getTreeViewer(), SWT.NONE);
52 nameCol.getColumn().setWidth(400);
53 nameCol.setLabelProvider(new ColumnLabelProvider() {
54
55 @Override
56 public String getText(Object element) {
57 Node node = (Node) element;
58 return Jcr.getTitle(node);
59 }
60
61 @Override
62 public Image getImage(Object element) {
63 Node node = (Node) element;
64 Image icon;
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);
72 } else {
73 if (!isLeaf(node))
74 icon = theme.getSmallIcon(SuiteIcon.folder);
75 else
76 icon = null;
77 }
78 return icon;
79 }
80
81 });
82
83 ui.getTreeViewer().addDoubleClickListener(new IDoubleClickListener() {
84
85 @Override
86 public void doubleClick(DoubleClickEvent event) {
87 Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
88 if (user != null) {
89 CmsSwtUtils.getCmsView(parent).sendEvent(SuiteUxEvent.openNewPart.topic(),
90 SuiteUiUtils.eventProperties(user));
91 }
92
93 }
94 });
95 ui.getTreeViewer().addSelectionChangedListener(new ISelectionChangedListener() {
96 public void selectionChanged(SelectionChangedEvent event) {
97 Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
98 if (user != null) {
99 CmsSwtUtils.getCmsView(parent).sendEvent(SuiteUxEvent.refreshPart.topic(),
100 SuiteUiUtils.eventProperties(user));
101 }
102 }
103 });
104
105 ui.getTreeViewer().setContentProvider(new SpacesContentProvider());
106 Session session = jcrContentProvider.getJcrSession(context, CmsConstants.SYS_WORKSPACE);
107 ui.getTreeViewer().setInput(session);
108 return ui;
109 }
110
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);
114 }
115
116 public void setJcrContentProvider(JcrContentProvider jcrContentProvider) {
117 this.jcrContentProvider = jcrContentProvider;
118 }
119
120 class Ui extends TreeOrSearchArea {
121
122 public Ui(Composite parent, int style) {
123 super(parent, style);
124 }
125
126 }
127
128 class SpacesContentProvider implements ITreeContentProvider {
129
130 @Override
131 public Object[] getElements(Object inputElement) {
132 Session session = (Session) inputElement;
133 try {
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);
142 }
143 return map.values().toArray();
144 } catch (RepositoryException e) {
145 throw new JcrException(e);
146 }
147 }
148
149 @Override
150 public Object[] getChildren(Object parentElement) {
151 Node parent = (Node) parentElement;
152 if (isLeaf(parent))
153 return null;
154 return Jcr.getNodes(parent).toArray();
155 }
156
157 @Override
158 public Object getParent(Object element) {
159 Node node = (Node) element;
160 return Jcr.getParent(node);
161 }
162
163 @Override
164 public boolean hasChildren(Object element) {
165 Node node = (Node) element;
166 return !isLeaf(node);
167 }
168
169 @Override
170 public void dispose() {
171 }
172
173 @Override
174 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
175 }
176
177 }
178
179 }