01: package org.libresource.kernel.comparator;
02:
03: import java.net.URI;
04: import java.util.Comparator;
05: import java.util.Hashtable;
06: import java.util.SortedSet;
07:
08: public class FactoryComparator {
09: // Params
10: private static Hashtable<String, Comparator> comparatorCache;
11: private static final String INVERSION = "-";
12: // View type
13: private static final String VIEW_FLAT = "flat";
14: private static final String VIEW_COUNT = "count";
15: // Sort type
16: private static final String COMPARTOR_TYPE_CREATION = "creation";
17: private static final String COMPARTOR_TYPE_UPDATE = "update";
18: private static final String COMPARTOR_TYPE_URI = "uri";
19: private static final String COMPARTOR_TYPE_TYPE = "type";
20: private static final String COMPARTOR_TYPE_OWNER = "owner";
21: private static final String COMPARTOR_TYPE_NAME = "name";
22:
23: public static Comparator getComparator(String groupBy, String sort) {
24: //System.out.println("Comparator input: " + view + " "+ groupBy+ " "+ sort);
25: Comparator result = getComparatorCache().get(
26: getKey(groupBy, sort));
27: if (result == null) {
28: // Create it and save it...
29:
30: // Manage the sort param
31: if (sort == null) {
32: // Default sort
33: result = new NameComparator();
34: } else {
35: boolean inverse = sort.contains(INVERSION);
36: if (sort.contains(COMPARTOR_TYPE_CREATION)) {
37: result = new CreationDateComparator();
38: } else if (sort.contains(COMPARTOR_TYPE_NAME)) {
39: result = new NameComparator();
40: } else if (sort.contains(COMPARTOR_TYPE_OWNER)) {
41: result = new OwnerComparator();
42: } else if (sort.contains(COMPARTOR_TYPE_TYPE)) {
43: result = new TypeComparator();
44: } else if (sort.contains(COMPARTOR_TYPE_UPDATE)) {
45: result = new UpdateDateComparator();
46: } else if (sort.contains(COMPARTOR_TYPE_URI)) {
47: result = new UriComparator();
48: }
49: if (inverse) {
50: result = new InverseComparator(result);
51: }
52: }
53:
54: // Manage group by
55: if (groupBy != null) {
56: if (groupBy.contains(COMPARTOR_TYPE_CREATION)) {
57: result = new CreationDateComparator(result);
58: } else if (groupBy.contains(COMPARTOR_TYPE_NAME)) {
59: result = new NameComparator(result);
60: } else if (groupBy.contains(COMPARTOR_TYPE_OWNER)) {
61: result = new OwnerComparator(result);
62: } else if (groupBy.contains(COMPARTOR_TYPE_TYPE)) {
63: result = new TypeComparator(result);
64: } else if (groupBy.contains(COMPARTOR_TYPE_UPDATE)) {
65: result = new UpdateDateComparator(result);
66: } else if (groupBy.contains(COMPARTOR_TYPE_URI)) {
67: result = new ParentUriComparator(result);
68: }
69: }
70: // Save it in the cache
71: getComparatorCache().put(getKey(groupBy, sort), result);
72: }
73:
74: return result;
75: }
76:
77: public static Hashtable<String, Comparator> getComparatorCache() {
78: if (comparatorCache == null)
79: comparatorCache = new Hashtable<String, Comparator>();
80: return comparatorCache;
81: }
82:
83: public static String getKey(String groupBy, String sort) {
84: return groupBy + ":" + sort;
85: }
86: }
|