3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.taxeditor
.view
.datasource
;
13 import org
.eclipse
.jface
.viewers
.Viewer
;
14 import org
.eclipse
.jface
.viewers
.ViewerComparator
;
16 import eu
.etaxonomy
.cdm
.config
.ICdmSource
;
17 import eu
.etaxonomy
.cdm
.database
.ICdmDataSource
;
18 import eu
.etaxonomy
.cdm
.model
.metadata
.CdmMetaData
.MetaDataPropertyName
;
19 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalCode
;
23 * @created Dec 8, 2010
26 public class CdmDataSourceViewerComparator
extends ViewerComparator
{
28 private int propertyIndex
;
29 private static final int DESCENDING
= 1;
30 private int direction
= DESCENDING
;
32 public CdmDataSourceViewerComparator() {
33 this.propertyIndex
= 1;
34 direction
= DESCENDING
;
37 public void setColumn(int column
) {
38 if (column
== this.propertyIndex
) {
39 // Same column as last sort; toggle the direction
40 direction
= 1 - direction
;
42 // New column; do an ascending sort
43 this.propertyIndex
= column
;
44 direction
= DESCENDING
;
49 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
52 public int compare(Viewer viewer
, Object e1
, Object e2
) {
53 CdmMetaDataAwareDataSourceContainer d1
= (CdmMetaDataAwareDataSourceContainer
) e1
;
54 CdmMetaDataAwareDataSourceContainer d2
= (CdmMetaDataAwareDataSourceContainer
) e2
;
56 ICdmSource cs1
= d1
.getCdmSource();
57 ICdmSource cs2
= d2
.getCdmSource();
61 switch (propertyIndex
) {
63 result
= d1
.getMetaData(MetaDataPropertyName
.DB_CREATE_NOTE
).compareTo(d2
.getMetaData(MetaDataPropertyName
.DB_CREATE_NOTE
));
69 result
= d1
.getMetaData(MetaDataPropertyName
.DB_SCHEMA_VERSION
).compareTo(d2
.getMetaData(MetaDataPropertyName
.DB_SCHEMA_VERSION
));
72 result
= d1
.getMetaData(MetaDataPropertyName
.DB_CREATE_DATE
).compareTo(d2
.getMetaData(MetaDataPropertyName
.DB_CREATE_DATE
));
78 NomenclaturalCode code1
= d1
.getCdmSource().getNomenclaturalCode();
79 NomenclaturalCode code2
= d2
.getCdmSource().getNomenclaturalCode();
80 if (code1
!= null && code2
!= null) {
81 result
= code1
.compareTo(code2
);
85 if(cs1
instanceof ICdmDataSource
&& cs2
instanceof ICdmDataSource
) {
86 result
= ((ICdmDataSource
)cs1
).getDatabase().compareTo(((ICdmDataSource
)cs2
).getDatabase());
91 if(cs1
instanceof ICdmDataSource
&& cs2
instanceof ICdmDataSource
) {
92 result
= ((ICdmDataSource
)cs1
).getDatabaseType().getName().compareTo(((ICdmDataSource
)cs2
).getDatabaseType().getName());
96 String server1
= d1
.getCdmSource().getServer();
97 String server2
= d2
.getCdmSource().getServer();
98 if(server1
!= null && server2
!= null){
99 result
= server1
.compareTo(server2
);
101 // h2 databases do not have server entries
104 result
= d1
.getCdmSource().getName().compareTo(d2
.getCdmSource().getName());
107 // If descending order, flip the direction
108 if (direction
== DESCENDING
) {