performed javacscript:fix and worked on documentation
[taxeditor.git] / taxeditor-store / src / main / java / eu / etaxonomy / taxeditor / datasource / view / CdmDataSourceViewPart.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.taxeditor.datasource.view;
12
13 import java.lang.reflect.InvocationTargetException;
14 import java.util.ArrayList;
15 import java.util.List;
16
17 import org.eclipse.core.commands.Command;
18 import org.eclipse.core.commands.ExecutionException;
19 import org.eclipse.core.commands.NotEnabledException;
20 import org.eclipse.core.commands.NotHandledException;
21 import org.eclipse.core.commands.common.NotDefinedException;
22 import org.eclipse.core.runtime.IProgressMonitor;
23 import org.eclipse.jface.action.GroupMarker;
24 import org.eclipse.jface.action.MenuManager;
25 import org.eclipse.jface.operation.IRunnableWithProgress;
26 import org.eclipse.jface.viewers.DoubleClickEvent;
27 import org.eclipse.jface.viewers.IDoubleClickListener;
28 import org.eclipse.jface.viewers.StructuredSelection;
29 import org.eclipse.jface.viewers.StructuredViewer;
30 import org.eclipse.jface.viewers.TableViewer;
31 import org.eclipse.jface.viewers.TableViewerColumn;
32 import org.eclipse.jface.viewers.ViewerComparator;
33 import org.eclipse.swt.SWT;
34 import org.eclipse.swt.layout.FillLayout;
35 import org.eclipse.swt.widgets.Composite;
36 import org.eclipse.swt.widgets.Control;
37 import org.eclipse.swt.widgets.Display;
38 import org.eclipse.swt.widgets.Menu;
39 import org.eclipse.swt.widgets.Table;
40 import org.eclipse.ui.IMemento;
41 import org.eclipse.ui.IWorkbenchActionConstants;
42 import org.eclipse.ui.commands.ICommandService;
43 import org.eclipse.ui.handlers.IHandlerService;
44 import org.eclipse.ui.part.ViewPart;
45 import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
46
47 import eu.etaxonomy.cdm.database.ICdmDataSource;
48 import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
49 import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
50 import eu.etaxonomy.taxeditor.model.IContextListener;
51 import eu.etaxonomy.taxeditor.store.CdmStore;
52 import eu.etaxonomy.taxeditor.store.StoreUtil;
53
54 /**
55 * <p>CdmDataSourceViewPart class.</p>
56 *
57 * @author n.hoffmann
58 * @created 14.04.2009
59 * @version 1.0
60 */
61 public class CdmDataSourceViewPart extends ViewPart{
62
63 private class ContextListener extends ContextListenerAdapter{
64 /* (non-Javadoc)
65 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
66 */
67 @Override
68 public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
69 viewer.refresh();
70 }
71
72 /* (non-Javadoc)
73 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
74 */
75 @Override
76 public void contextStop(IMemento memento, IProgressMonitor monitor) {
77 viewer.refresh();
78 }
79
80 /* (non-Javadoc)
81 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
82 */
83 @Override
84 public void contextStart(IMemento memento, IProgressMonitor monitor) {
85 viewer.refresh();
86 }
87 }
88
89 private class DataSourceRunnable implements IRunnableWithProgress{
90
91 private List<ICdmDataSource> dataSources;
92
93 /**
94 * @param name
95 */
96 public DataSourceRunnable(Display display, List<ICdmDataSource> dataSources) {
97 this.dataSources = dataSources;
98 }
99
100 /* (non-Javadoc)
101 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
102 */
103 @Override
104 public void run(final IProgressMonitor monitor) {
105 try{
106 monitor.beginTask("Retrieving datasources", dataSources.size());
107
108 List<ICdmDataSource> dataSources = CdmDataSourceRepository.getAll();
109
110 final List<CdmMetaDataAwareDataSourceContainer> containers = new ArrayList<CdmMetaDataAwareDataSourceContainer>();
111
112 for(final ICdmDataSource dataSource : dataSources){
113 containers.add(new CdmMetaDataAwareDataSourceContainer(dataSource, CdmDataSourceViewPart.this));
114 monitor.worked(1);
115 }
116
117 viewer.setInput(containers);
118
119 }finally{
120 monitor.done();
121 }
122 }
123 }
124
125 /** Constant <code>ID="eu.etaxonomy.taxeditor.store.datasource"{trunked}</code> */
126 public static String ID = "eu.etaxonomy.taxeditor.store.datasource.datasourceView";
127
128 private TableViewer viewer;
129
130 private String partNameCache;
131
132 private IWorkbenchSiteProgressService service;
133
134 private IContextListener contextListener;
135
136 /**
137 * <p>Constructor for CdmDataSourceViewPart.</p>
138 */
139 public CdmDataSourceViewPart(){
140 }
141
142 /** {@inheritDoc} */
143 @Override
144 public void createPartControl(Composite parent) {
145 service = (IWorkbenchSiteProgressService) getSite().getAdapter(IWorkbenchSiteProgressService.class);
146 contextListener = new ContextListener();
147 CdmStore.getContextManager().addContextListener(contextListener);
148
149 // Create top composite
150 FillLayout fillLayout = new FillLayout();
151 fillLayout.marginWidth = 0;
152 fillLayout.marginHeight = 0;
153 fillLayout.type = SWT.VERTICAL;
154 parent.setLayout(fillLayout);
155
156 viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
157 | SWT.V_SCROLL | SWT.FULL_SELECTION);
158 getSite().setSelectionProvider(viewer);
159
160 createColumns(viewer);
161
162 viewer.setContentProvider(new CdmDataSourceContentProvider());
163 viewer.setLabelProvider(new CdmDataSourceLabelProvider());
164 viewer.setComparator(new ViewerComparator());
165
166
167 // register context menu
168 MenuManager menuMgr = new MenuManager();
169 menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
170 getSite().registerContextMenu(menuMgr, viewer);
171
172 Control control = viewer.getControl();
173 Menu menu = menuMgr.createContextMenu(control);
174 control.setMenu(menu);
175
176 // connect on doubleclick
177 viewer.addDoubleClickListener(new IDoubleClickListener() {
178
179 public void doubleClick(DoubleClickEvent event) {
180 if (event.getSelection() instanceof StructuredSelection) {
181
182 Object element = ((StructuredSelection) event
183 .getSelection()).getFirstElement();
184 if (element instanceof CdmMetaDataAwareDataSourceContainer) {
185 String commandId = "eu.etaxonomy.taxeditor.store.datasource.change";
186
187 ICommandService commandService = (ICommandService)getSite().getService(ICommandService.class);
188
189 Command command = commandService.getCommand(commandId);
190 if(command.isEnabled()) {
191
192 IHandlerService handlerService = (IHandlerService) StoreUtil.getService(IHandlerService.class);
193
194 try {
195 handlerService.executeCommand(commandId, null);
196 } catch (ExecutionException e) {
197 StoreUtil.error(this.getClass(), e);
198 } catch (NotDefinedException e) {
199 StoreUtil.error(this.getClass(), e);
200 } catch (NotEnabledException e) {
201 StoreUtil.error(this.getClass(), e);
202 } catch (NotHandledException e) {
203 StoreUtil.error(this.getClass(), e);
204 }
205 }
206 }
207 }
208 }
209 });
210
211 refresh();
212 }
213
214
215 // This will create the columns for the table
216 private void createColumns(TableViewer viewer) {
217 Table table = viewer.getTable();
218 String[] titles = {"Connected", "Name", "Server", "Type", "Database", "Nomenclatural Code", "Up", "Created", "CDM Version", "Compatible", "Notes"};
219 int[] bounds = { 24, 200, 100, 100 , 200, 120, 50, 100, 100, 50, 300};
220
221 for (int i = 0; i < titles.length; i++) {
222 TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
223 column.getColumn().setText(titles[i]);
224 column.getColumn().setWidth(bounds[i]);
225 column.getColumn().setResizable(true);
226 column.getColumn().setMoveable(true);
227 }
228 table.setHeaderVisible(true);
229 table.setLinesVisible(true);
230 }
231
232 /**
233 * <p>refresh</p>
234 */
235 public void refresh(){
236 try {
237 StoreUtil.runInUI(new DataSourceRunnable(Display.getCurrent(), CdmDataSourceRepository.getAll()), null);
238 } catch (InvocationTargetException e) {
239 StoreUtil.error(this.getClass(), e);
240 } catch (InterruptedException e) {
241 StoreUtil.error(this.getClass(), e);
242 }
243 }
244
245 /** {@inheritDoc} */
246 @Override
247 public void dispose() {
248 CdmStore.getContextManager().removeContextListener(contextListener);
249 super.dispose();
250 }
251
252 /** {@inheritDoc} */
253 @Override
254 public void setFocus() {
255 viewer.getControl().setFocus();
256 }
257
258
259 /* (non-Javadoc)
260 * @see org.eclipse.ui.part.WorkbenchPart#showBusy(boolean)
261 */
262 /** {@inheritDoc} */
263 @Override
264 public void showBusy(boolean busy) {
265 super.showBusy(busy);
266 viewer.getTable().setEnabled(!busy);
267 if(busy){
268 partNameCache = getPartName();
269 setPartName("Loading datasources");
270 }else{
271 if(partNameCache != null){
272 setPartName(partNameCache);
273 }
274 }
275 }
276
277 /**
278 * <p>Getter for the field <code>viewer</code>.</p>
279 *
280 * @return a {@link org.eclipse.jface.viewers.StructuredViewer} object.
281 */
282 public StructuredViewer getViewer() {
283 return viewer;
284 }
285
286 /**
287 * <p>Getter for the field <code>service</code>.</p>
288 *
289 * @return the service
290 */
291 public IWorkbenchSiteProgressService getService() {
292 return service;
293 }
294
295 }