fixes #2115
authorn.hoffmann <n.hoffmann@localhost>
Wed, 8 Dec 2010 10:16:47 +0000 (10:16 +0000)
committern.hoffmann <n.hoffmann@localhost>
Wed, 8 Dec 2010 10:16:47 +0000 (10:16 +0000)
.gitattributes
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceViewPart.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceViewerComparator.java [new file with mode: 0644]

index 1a732e6181047c5fc59fcbc753867b81a3fa7310..072d241e2e7e6c7bb6e5d713f76a3efe81140d85 100644 (file)
@@ -976,6 +976,7 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/UpdateDa
 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
index 86aba1c57b79c2d4d1bcb1edfc15d2c1a3f302a5..2a86d6751635318f38322d0f13d35278bb389ae0 100644 (file)
@@ -29,14 +29,16 @@ import org.eclipse.jface.viewers.StructuredSelection;
 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;
@@ -132,6 +134,8 @@ public class CdmDataSourceViewPart extends ViewPart{
        private IWorkbenchSiteProgressService service;
        
        private IContextListener contextListener;
+
+       private CdmDataSourceViewerComparator comparator;
        
        /**
         * <p>Constructor for CdmDataSourceViewPart.</p>
@@ -161,7 +165,8 @@ public class CdmDataSourceViewPart extends ViewPart{
                
                viewer.setContentProvider(new CdmDataSourceContentProvider());
                viewer.setLabelProvider(new CdmDataSourceLabelProvider());
-               viewer.setComparator(new ViewerComparator());
+               comparator = new CdmDataSourceViewerComparator();
+               viewer.setComparator(comparator);
                
                
                // register context menu
@@ -224,9 +229,15 @@ public class CdmDataSourceViewPart extends ViewPart{
                        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);
+               
        }
        
        /**
@@ -291,5 +302,25 @@ public class CdmDataSourceViewPart extends ViewPart{
        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;
+       }
 
 }
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceViewerComparator.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceViewerComparator.java
new file mode 100644 (file)
index 0000000..b3b7be8
--- /dev/null
@@ -0,0 +1,103 @@
+// $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;
+       }
+}