--- /dev/null
+/**
+* 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;
+ }
+}