View Javadoc
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   * Display a list off all projects and corresponding editions of the current
43   * manager instance.
44   */
45  public class TemplateList implements Refreshable {
46  
47  	// public final static String ID = ConnectUiPlugin.PLUGIN_ID + ".templateList";
48  
49  	/* DEPENDENCY INJECTION */
50  	@Inject
51  	private Repository repository;
52  	@Inject
53  	private ResourcesService resourceService;
54  	@Inject
55  	private SystemWorkbenchService systemWorkbenchService;
56  
57  	// Context
58  	private Session session;
59  
60  	// UI Objects
61  	private TableViewer tableViewer;
62  
63  	public void init() {
64  		// setSite(site);
65  		// setInput(input);
66  
67  		// setPartName("Catalogues");
68  		session = ConnectJcrUtils.login(repository);
69  	}
70  
71  	// MAIN LAYOUT
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  		// The table itself
81  		Composite tableCmp = new Composite(parent, SWT.NO_FOCUS);
82  		createListPart(tableCmp);
83  		tableCmp.setLayoutData(EclipseUiUtils.fillAll());
84  		refreshList();
85  	}
86  
87  	// Header
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 		// Name
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 		// Providers and listeners
116 		tableViewer.setContentProvider(new BasicNodeListContentProvider());
117 
118 		tableViewer.addDoubleClickListener(new JcrViewerDClickListener());
119 		// tableViewer.getTable().addSelectionListener(new HtmlRwtAdapter());
120 		parent.setLayout(tableColumnLayout);
121 	}
122 
123 	/** Refresh the list of registered templates */
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 		// filterTxt.setFocus();
152 	}
153 
154 	@PreDestroy
155 	public void dispose() {
156 		JcrUtils.logoutQuietly(session);
157 	}
158 
159 	/**
160 	 * Returns the assigned to display name given a row that contains a Task
161 	 * selector
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 	/* DEPENDENCY INJECTION */
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 }