Project

General

Profile

Download (3.38 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy 
4
* http://www.e-taxonomy.eu
5
* 
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.taxeditor.view.datasource;
11

    
12
import org.eclipse.jface.viewers.Viewer;
13
import org.eclipse.jface.viewers.ViewerComparator;
14

    
15
import eu.etaxonomy.cdm.config.ICdmSource;
16
import eu.etaxonomy.cdm.database.ICdmDataSource;
17
import eu.etaxonomy.cdm.model.metadata.CdmMetaDataPropertyName;
18

    
19
/**
20
 * @author n.hoffmann
21
 * @created Dec 8, 2010
22
 */
23
public class CdmDataSourceViewerComparator extends ViewerComparator {
24

    
25
	private int propertyIndex;
26
	private static final int DESCENDING = 1;
27
	private int direction = DESCENDING;
28

    
29
	public CdmDataSourceViewerComparator() {
30
		this.propertyIndex = 1;
31
		direction = DESCENDING;
32
	}
33

    
34
	public void setColumn(int column) {
35
		if (column == this.propertyIndex) {
36
			// Same column as last sort; toggle the direction
37
			direction = 1 - direction;
38
		} else {
39
			// New column; do an ascending sort
40
			this.propertyIndex = column;
41
			direction = DESCENDING;
42
		}
43
	}
44
	
45
	@Override
46
	public int compare(Viewer viewer, Object e1, Object e2) {
47
		CdmMetaDataAwareDataSourceContainer d1 = (CdmMetaDataAwareDataSourceContainer) e1;
48
		CdmMetaDataAwareDataSourceContainer d2 = (CdmMetaDataAwareDataSourceContainer) e2;
49
		
50
		ICdmSource cs1 = d1.getCdmSource();
51
		ICdmSource cs2 = d2.getCdmSource();
52
		
53
		int result = 0;
54
		
55
		switch (propertyIndex) {
56
			case 9:
57
				result = d1.getMetaData(CdmMetaDataPropertyName.DB_CREATE_NOTE).compareTo(d2.getMetaData(CdmMetaDataPropertyName.DB_CREATE_NOTE));
58
				break;
59
			case 8:
60
				// is compatible
61
				boolean c1 = d1.isDataSourceCompatible();
62
				boolean c2 = d2.isDataSourceCompatible();
63
				if (c1 == c2){
64
					result = 0;
65
				}else if (c1 == true){
66
					result = -1;
67
				}else{
68
					result = 1;
69
				}
70
				break;
71
			case 7:
72
				result = d1.getMetaData(CdmMetaDataPropertyName.DB_SCHEMA_VERSION).compareTo(d2.getMetaData(CdmMetaDataPropertyName.DB_SCHEMA_VERSION));
73
				break;
74
			case 6:
75
				result = d1.getMetaData(CdmMetaDataPropertyName.DB_CREATE_DATE).compareTo(d2.getMetaData(CdmMetaDataPropertyName.DB_CREATE_DATE));
76
				break;
77
			case 5:
78
				if(cs1 instanceof ICdmDataSource && cs2 instanceof ICdmDataSource) {
79
					result = ((ICdmDataSource)cs1).getDatabase().compareTo(((ICdmDataSource)cs2).getDatabase());
80
				}
81
				
82
				break;
83
			case 4:
84
				if(cs1 instanceof ICdmDataSource && cs2 instanceof ICdmDataSource) {
85
					result = ((ICdmDataSource)cs1).getDatabaseType().getName().compareTo(((ICdmDataSource)cs2).getDatabaseType().getName());
86
				}
87
				break;
88
			case 3:
89
				// is running
90
				boolean r1 = d1.isRunning();
91
				boolean r2 = d2.isRunning();
92
				if (r1 == r2){
93
					result = 0;
94
				}else if (r1 == true){
95
					result = -1;
96
				}else{
97
					result = 1;
98
				}
99
				break;
100
			case 2:
101
				String server1 = d1.getCdmSource().getServer();
102
				String server2 = d2.getCdmSource().getServer();
103
				// h2 databases do not have server entries
104
				server1 = server1 == null? "local" : server1;
105
				server2 = server2 == null? "local" : server2;
106
				result = server1.compareTo(server2);
107
				break;
108
			default:
109
				result = d1.getCdmSource().getName().compareTo(d2.getCdmSource().getName());
110
		}
111
			
112
		// If descending order, flip the direction
113
		if (direction == DESCENDING) {
114
			result = -result;
115
		}
116
		return result;
117
	}
118
}
(4-4/5)