taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceContentProvider.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceLabelProvider.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceViewPart.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceViewerComparator.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmMetaDataAwareDataSourceContainer.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/wizard/CdmDataSourceCredentialsWizardPage.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/wizard/CdmDataSourceH2WizardPage.java -text
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
-import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.commands.ICommandService;
private IWorkbenchSiteProgressService service;
private IContextListener contextListener;
+
+ private CdmDataSourceViewerComparator comparator;
/**
* <p>Constructor for CdmDataSourceViewPart.</p>
viewer.setContentProvider(new CdmDataSourceContentProvider());
viewer.setLabelProvider(new CdmDataSourceLabelProvider());
- viewer.setComparator(new ViewerComparator());
+ comparator = new CdmDataSourceViewerComparator();
+ viewer.setComparator(comparator);
// register context menu
column.getColumn().setWidth(bounds[i]);
column.getColumn().setResizable(true);
column.getColumn().setMoveable(true);
+ column.getColumn().addSelectionListener(getSelectionAdapter(column.getColumn(), i));
+ if(i == 1){
+ table.setSortColumn(column.getColumn());
+ }
}
table.setHeaderVisible(true);
table.setLinesVisible(true);
+ table.setSortDirection(SWT.UP);
+
}
/**
public IWorkbenchSiteProgressService getService() {
return service;
}
+
+ private SelectionAdapter getSelectionAdapter(final TableColumn column,
+ final int index) {
+ SelectionAdapter selectionAdapter = new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ comparator.setColumn(index);
+ int dir = viewer.getTable().getSortDirection();
+ if (viewer.getTable().getSortColumn() == column) {
+ dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
+ } else {
+ dir = SWT.DOWN;
+ }
+ viewer.getTable().setSortDirection(dir);
+ viewer.getTable().setSortColumn(column);
+ viewer.refresh();
+ }
+ };
+ return selectionAdapter;
+ }
}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.datasource.view;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+
+import eu.etaxonomy.cdm.model.common.CdmMetaData.MetaDataPropertyName;
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
+
+/**
+ * @author n.hoffmann
+ * @created Dec 8, 2010
+ * @version 1.0
+ */
+public class CdmDataSourceViewerComparator extends ViewerComparator {
+
+ private int propertyIndex;
+ private static final int DESCENDING = 1;
+ private int direction = DESCENDING;
+
+ public CdmDataSourceViewerComparator() {
+ this.propertyIndex = 1;
+ direction = DESCENDING;
+ }
+
+ public void setColumn(int column) {
+ if (column == this.propertyIndex) {
+ // Same column as last sort; toggle the direction
+ direction = 1 - direction;
+ } else {
+ // New column; do an ascending sort
+ this.propertyIndex = column;
+ direction = DESCENDING;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ CdmMetaDataAwareDataSourceContainer d1 = (CdmMetaDataAwareDataSourceContainer) e1;
+ CdmMetaDataAwareDataSourceContainer d2 = (CdmMetaDataAwareDataSourceContainer) e2;
+
+ int result = 0;
+
+ switch (propertyIndex) {
+ case 10:
+ result = d1.getMetaData(MetaDataPropertyName.DB_CREATE_NOTE).compareTo(d2.getMetaData(MetaDataPropertyName.DB_CREATE_NOTE));
+ break;
+ case 9:
+ // is compatible
+ break;
+ case 8:
+ result = d1.getMetaData(MetaDataPropertyName.DB_SCHEMA_VERSION).compareTo(d2.getMetaData(MetaDataPropertyName.DB_SCHEMA_VERSION));
+ break;
+ case 7:
+ result = d1.getMetaData(MetaDataPropertyName.DB_CREATE_DATE).compareTo(d2.getMetaData(MetaDataPropertyName.DB_CREATE_DATE));
+ break;
+ case 6:
+ // is running
+ break;
+ case 5:
+ NomenclaturalCode code1 = d1.getDataSource().getNomenclaturalCode();
+ NomenclaturalCode code2 = d2.getDataSource().getNomenclaturalCode();
+ if (code1 != null && code2 != null) {
+ result = code1.compareTo(code2);
+ }
+ break;
+ case 4:
+ result = d1.getDataSource().getDatabase().compareTo(d2.getDataSource().getDatabase());
+ break;
+ case 3:
+ result = d1.getDataSource().getDatabaseType().getName().compareTo(d2.getDataSource().getDatabaseType().getName());
+ break;
+ case 2:
+ String server1 = d1.getDataSource().getServer();
+ String server2 = d2.getDataSource().getServer();
+ if(server1 != null && server2 != null){
+ result = server1.compareTo(server2);
+ }
+ // h2 databases do not have server entries
+ break;
+ default:
+ result = d1.getDataSource().getName().compareTo(d2.getDataSource().getName());
+ }
+
+ // If descending order, flip the direction
+ if (direction == DESCENDING) {
+ result = -result;
+ }
+ return result;
+ }
+}