Project

General

Profile

Download (2.34 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
		public int compare(Reference o1, Reference o2) {
47
			String yearString1 = getYearString(o1);
48
			String yearString2 = getYearString(o2);
49
			if (yearString1 == null) {
50
				if (yearString2 == null) {
51
					return 0;
52
				} else {
53
					return -1;
54
				}
55
			}
56
			if (yearString2 == null) {
57
				return 1;
58
			}
59
			int returnVal = yearString1.compareToIgnoreCase(yearString2);
60
			if (returnVal == 0) {
61
				return new TitleCacheComparator<Reference>().compare(o1, o2);
62
			} else {
63
				return returnVal;
64
			}
65
		}		
66
	}
67
	
68
	private class ReferenceTypeComparator implements Comparator<Reference> {
69
		
70
		/* (non-Javadoc)
71
		 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
72
		 */
73
		public int compare(Reference o1, Reference o2) {
74
			String typeString1 = o1.getClass().toString();
75
			String typeString2 = o2.getClass().toString();
76
			if (typeString1 == null) {
77
				if (typeString2 == null) {
78
					return 0;
79
				} else {
80
					return -1;
81
				}
82
			}
83
			if (typeString2 == null) {
84
				return 1;
85
			}
86
			int returnVal = typeString1.compareToIgnoreCase(typeString2);
87
			if (returnVal == 0) {
88
				return new TitleCacheComparator<Reference>().compare(o1, o2);
89
			} else {
90
				return returnVal;
91
			}
92
		}		
93
	}
94

    
95
	
96
}
(5-5/6)