1 package org.argeo.connect.e4.resources.parts;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.annotation.PreDestroy;
7 import javax.inject.Inject;
8 import javax.jcr.Node;
9 import javax.jcr.NodeIterator;
10 import javax.jcr.Repository;
11 import javax.jcr.RepositoryException;
12 import javax.jcr.Session;
13
14 import org.argeo.connect.ConnectException;
15 import org.argeo.connect.resources.ResourcesNames;
16 import org.argeo.connect.resources.ResourcesService;
17 import org.argeo.connect.resources.ResourcesTypes;
18 import org.argeo.connect.ui.ConnectUiUtils;
19 import org.argeo.connect.ui.Refreshable;
20 import org.argeo.connect.ui.SystemWorkbenchService;
21 import org.argeo.connect.ui.util.BasicNodeListContentProvider;
22 import org.argeo.connect.ui.util.JcrViewerDClickListener;
23 import org.argeo.connect.util.ConnectJcrUtils;
24 import org.argeo.eclipse.ui.EclipseUiUtils;
25 import org.argeo.eclipse.ui.jcr.lists.SimpleJcrNodeLabelProvider;
26 import org.argeo.eclipse.ui.utils.ViewerUtils;
27 import org.argeo.jcr.JcrUtils;
28 import org.eclipse.e4.ui.di.Focus;
29 import org.eclipse.jface.layout.TableColumnLayout;
30 import org.eclipse.jface.viewers.ColumnWeightData;
31 import org.eclipse.jface.viewers.TableViewer;
32 import org.eclipse.jface.viewers.TableViewerColumn;
33 import org.eclipse.swt.SWT;
34 import org.eclipse.swt.events.SelectionAdapter;
35 import org.eclipse.swt.events.SelectionEvent;
36 import org.eclipse.swt.layout.GridData;
37 import org.eclipse.swt.layout.GridLayout;
38 import org.eclipse.swt.widgets.Button;
39 import org.eclipse.swt.widgets.Composite;
40
41
42
43
44
45 public class TemplateList implements Refreshable {
46
47
48
49
50 @Inject
51 private Repository repository;
52 @Inject
53 private ResourcesService resourceService;
54 @Inject
55 private SystemWorkbenchService systemWorkbenchService;
56
57
58 private Session session;
59
60
61 private TableViewer tableViewer;
62
63 public void init() {
64
65
66
67
68 session = ConnectJcrUtils.login(repository);
69 }
70
71
72 public void createPartControl(Composite parent) {
73 init();
74 parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
75
76 Composite buttonCmp = new Composite(parent, SWT.NO_FOCUS);
77 populateButtonCmp(buttonCmp);
78 buttonCmp.setLayoutData(EclipseUiUtils.fillWidth());
79
80
81 Composite tableCmp = new Composite(parent, SWT.NO_FOCUS);
82 createListPart(tableCmp);
83 tableCmp.setLayoutData(EclipseUiUtils.fillAll());
84 refreshList();
85 }
86
87
88 protected void populateButtonCmp(Composite parent) {
89 parent.setLayout(new GridLayout());
90 Button uploadBtn = new Button(parent, SWT.PUSH);
91 uploadBtn.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));
92 uploadBtn.setText("Upload a Csv File");
93 uploadBtn.addSelectionListener(new SelectionAdapter() {
94 private static final long serialVersionUID = 1L;
95
96 @Override
97 public void widgetSelected(SelectionEvent e) {
98 }
99 });
100 }
101
102 protected void createListPart(Composite parent) {
103 tableViewer = new TableViewer(parent, SWT.V_SCROLL);
104
105 ConnectUiUtils.setTableDefaultStyle(tableViewer, 25);
106 TableColumnLayout tableColumnLayout = new TableColumnLayout();
107 TableViewerColumn col;
108 int[] bounds = { 120, 110, 100, 50 };
109
110
111 col = ViewerUtils.createTableViewerColumn(tableViewer, "", SWT.LEFT, bounds[0]);
112 col.setLabelProvider(new NodeTypeLabelProvider(ResourcesNames.RESOURCES_TEMPLATE_ID));
113 tableColumnLayout.setColumnData(col.getColumn(), new ColumnWeightData(100, 150, true));
114
115
116 tableViewer.setContentProvider(new BasicNodeListContentProvider());
117
118 tableViewer.addDoubleClickListener(new JcrViewerDClickListener());
119
120 parent.setLayout(tableColumnLayout);
121 }
122
123
124 protected void refreshList() {
125 try {
126 String path = "/" + ResourcesNames.RESOURCES_BASE_NAME + "/" + ResourcesNames.RESOURCES_TEMPLATES;
127 Node parent = session.getNode(path);
128 List<Node> templates = new ArrayList<Node>();
129
130 NodeIterator nit = parent.getNodes();
131 while (nit.hasNext()) {
132 Node currNode = nit.nextNode();
133 if (currNode.isNodeType(ResourcesTypes.RESOURCES_NODE_TEMPLATE))
134 templates.add(currNode);
135 }
136
137 tableViewer.setInput(templates);
138 tableViewer.refresh();
139 } catch (RepositoryException e) {
140 throw new ConnectException("Unable to list node templates ", e);
141 }
142 }
143
144 @Override
145 public void forceRefresh(Object object) {
146 refreshList();
147 }
148
149 @Focus
150 public void setFocus() {
151
152 }
153
154 @PreDestroy
155 public void dispose() {
156 JcrUtils.logoutQuietly(session);
157 }
158
159
160
161
162
163 private class NodeTypeLabelProvider extends SimpleJcrNodeLabelProvider {
164 private static final long serialVersionUID = 1L;
165
166 public NodeTypeLabelProvider(String propName) {
167 super(propName);
168 }
169
170 @Override
171 public String getText(Object element) {
172 return resourceService.getItemDefaultEnLabel(super.getText(element));
173 }
174 }
175
176
177 public void setRepository(Repository repository) {
178 this.repository = repository;
179 }
180
181 public void setResourceService(ResourcesService resourceService) {
182 this.resourceService = resourceService;
183 }
184
185 public void setSystemWorkbenchService(SystemWorkbenchService systemWorkbenchService) {
186 this.systemWorkbenchService = systemWorkbenchService;
187 }
188 }