ref #9189: move datasource to webapp
[taxeditor.git] / eu.etaxonomy.taxeditor.webapp / src / main / java / eu / etaxonomy / taxeditor / webapp / view / datasource / CdmDataSourceViewerComparator.java
diff --git a/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/view/datasource/CdmDataSourceViewerComparator.java b/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/view/datasource/CdmDataSourceViewerComparator.java
new file mode 100644 (file)
index 0000000..075f992
--- /dev/null
@@ -0,0 +1,118 @@
+/**
+* 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.webapp.view.datasource;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+
+import eu.etaxonomy.cdm.config.ICdmSource;
+import eu.etaxonomy.cdm.database.ICdmDataSource;
+import eu.etaxonomy.cdm.model.metadata.CdmMetaDataPropertyName;
+
+/**
+ * @author n.hoffmann
+ * @created Dec 8, 2010
+ */
+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;
+               }
+       }
+
+       @Override
+       public int compare(Viewer viewer, Object e1, Object e2) {
+               CdmMetaDataAwareDataSourceContainer d1 = (CdmMetaDataAwareDataSourceContainer) e1;
+               CdmMetaDataAwareDataSourceContainer d2 = (CdmMetaDataAwareDataSourceContainer) e2;
+
+               ICdmSource cs1 = d1.getCdmSource();
+               ICdmSource cs2 = d2.getCdmSource();
+
+               int result = 0;
+
+               switch (propertyIndex) {
+                       case 9:
+                               result = d1.getMetaData(CdmMetaDataPropertyName.DB_CREATE_NOTE).compareTo(d2.getMetaData(CdmMetaDataPropertyName.DB_CREATE_NOTE));
+                               break;
+                       case 8:
+                               // is compatible
+                               boolean c1 = d1.isDataSourceCompatible();
+                               boolean c2 = d2.isDataSourceCompatible();
+                               if (c1 == c2){
+                                       result = 0;
+                               }else if (c1 == true){
+                                       result = -1;
+                               }else{
+                                       result = 1;
+                               }
+                               break;
+                       case 7:
+                               result = d1.getMetaData(CdmMetaDataPropertyName.DB_SCHEMA_VERSION).compareTo(d2.getMetaData(CdmMetaDataPropertyName.DB_SCHEMA_VERSION));
+                               break;
+                       case 6:
+                               result = d1.getMetaData(CdmMetaDataPropertyName.DB_CREATE_DATE).compareTo(d2.getMetaData(CdmMetaDataPropertyName.DB_CREATE_DATE));
+                               break;
+                       case 5:
+                               if(cs1 instanceof ICdmDataSource && cs2 instanceof ICdmDataSource) {
+                                       result = ((ICdmDataSource)cs1).getDatabase().compareTo(((ICdmDataSource)cs2).getDatabase());
+                               }
+
+                               break;
+                       case 4:
+                               if(cs1 instanceof ICdmDataSource && cs2 instanceof ICdmDataSource) {
+                                       result = ((ICdmDataSource)cs1).getDatabaseType().getName().compareTo(((ICdmDataSource)cs2).getDatabaseType().getName());
+                               }
+                               break;
+                       case 3:
+                               // is running
+                               boolean r1 = d1.isRunning();
+                               boolean r2 = d2.isRunning();
+                               if (r1 == r2){
+                                       result = 0;
+                               }else if (r1 == true){
+                                       result = -1;
+                               }else{
+                                       result = 1;
+                               }
+                               break;
+                       case 2:
+                               String server1 = d1.getCdmSource().getServer();
+                               String server2 = d2.getCdmSource().getServer();
+                               // h2 databases do not have server entries
+                               server1 = server1 == null? "local" : server1;
+                               server2 = server2 == null? "local" : server2;
+                               result = server1.compareTo(server2);
+                               break;
+                       default:
+                               result = d1.getCdmSource().getName().compareTo(d2.getCdmSource().getName());
+               }
+
+               // If descending order, flip the direction
+               if (direction == DESCENDING) {
+                       result = -result;
+               }
+               return result;
+       }
+}