Project

General

Profile

Download (2.43 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.bulkeditor.input.sortprovider;
11

    
12
import java.util.Comparator;
13

    
14
import eu.etaxonomy.cdm.model.common.TimePeriod;
15
import eu.etaxonomy.cdm.model.reference.Reference;
16

    
17
/**
18
 * @author n.hoffmann
19
 * @created Dec 14, 2010
20
 * @version 1.0
21
 */
22
public class ReferenceSortProvider extends AbstractSortProvider<Reference> {
23

    
24
	/**
25
	 *
26
	 */
27
	public ReferenceSortProvider() {
28
		comparators.put("Type", new ReferenceTypeComparator());
29
		comparators.put("Year", new ReferenceYearComparator());
30
	}
31

    
32
	private class ReferenceYearComparator implements Comparator<Reference> {
33

    
34
		/**
35
		 * @param o1
36
		 * @return
37
		 */
38
		private String getYearString(Reference o) {
39
			TimePeriod datePublished = o == null ? null : o.getDatePublished();
40
			return datePublished == null? null : datePublished.toString();
41
		}
42

    
43
		/* (non-Javadoc)
44
		 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
45
		 */
46
		@Override
47
        public int compare(Reference o1, Reference o2) {
48
			String yearString1 = getYearString(o1);
49
			String yearString2 = getYearString(o2);
50
			if (yearString1 == null) {
51
				if (yearString2 == null) {
52
					return 0;
53
				} else {
54
					return -1;
55
				}
56
			}
57
			if (yearString2 == null) {
58
				return 1;
59
			}
60
			int returnVal = yearString1.compareToIgnoreCase(yearString2);
61
			if (returnVal == 0) {
62
				returnVal = new TitleCacheComparator<Reference>().compare(o1, o2);
63

    
64
			}
65
			return returnVal;
66

    
67
		}
68
	}
69

    
70
	private class ReferenceTypeComparator implements Comparator<Reference> {
71

    
72
		/* (non-Javadoc)
73
		 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
74
		 */
75
		@Override
76
        public int compare(Reference o1, Reference o2) {
77
			String typeString1 = o1.getClass().toString();
78
			String typeString2 = o2.getClass().toString();
79
			if (typeString1 == null) {
80
				if (typeString2 == null) {
81
					return 0;
82
				} else {
83
					return -1;
84
				}
85
			}
86
			if (typeString2 == null) {
87
				return 1;
88
			}
89
			int returnVal = typeString1.compareToIgnoreCase(typeString2);
90
			if (returnVal == 0) {
91
			    //the TitleCacheComparator already fulfills the comparator contract
92
				return new TitleCacheComparator<Reference>().compare(o1, o2);
93
			} else {
94
				return returnVal;
95
			}
96
		}
97
	}
98

    
99

    
100
}
(5-5/6)