1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.templatingkit.util;
35
36
37
38 import java.util.Calendar;
39 import java.util.Collections;
40 import java.util.Comparator;
41 import java.util.List;
42
43 import javax.jcr.Node;
44 import javax.jcr.RepositoryException;
45
46 import org.apache.commons.collections.CollectionUtils;
47 import org.apache.commons.collections.Predicate;
48 import org.apache.commons.lang.StringUtils;
49
50
51
52
53
54
55
56
57 public class STKDateContentUtil {
58
59 public static final Object INSTANCE = new STKDateContentUtil();
60
61 public static final String ASCENDING = "ascending";
62 public static final String DESCENDING = "descending";
63 private static final String DEFAULT_DATE_PROPERTY_NAME = "date";
64
65 public static void filterDateContentList(List<Node> itemsList, final Calendar minDate, final Calendar maxDate) {
66 filterDateContentList(itemsList, minDate, maxDate, DEFAULT_DATE_PROPERTY_NAME);
67 }
68
69 public static void filterDateContentList(List<Node> itemsList, final Calendar minDate, final Calendar maxDate, final String datePropertyName) {
70 CollectionUtils.filter(itemsList, new Predicate(){
71 @Override
72 public boolean evaluate(Object object) {
73 Node node = (Node) object;
74 Calendar date = getDate(node, datePropertyName, Calendar.getInstance());
75
76 if (date.getTimeInMillis() == minDate.getTimeInMillis()) {
77 date.add(Calendar.SECOND, 1);
78 }
79 return date.after(minDate) && date.before(maxDate);
80 }
81 });
82 }
83
84 public static void sortDateContentList(final List<Node> itemsList, final String sortDirection) {
85 sortDateContentList(itemsList, sortDirection, DEFAULT_DATE_PROPERTY_NAME);
86 }
87
88 public static void sortDateContentList(final List<Node> itemsList, final String sortDirection, final String datePropertyName) {
89 Calendar veryOld = Calendar.getInstance();
90 veryOld.setTimeInMillis(0);
91 sortDateContentList(itemsList, sortDirection, datePropertyName, veryOld);
92 }
93
94 public static void sortDateContentList(final List<Node> itemsList, final String sortDirection, final String datePropertyName, final Calendar defaultDate) {
95 Collections.sort(itemsList, new Comparator<Node>(){
96 @Override
97 public int compare(Node c1, Node c2) {
98 Calendar date1 = getDate(c1, datePropertyName, defaultDate);
99 Calendar date2 = getDate(c2, datePropertyName, defaultDate);
100 if(StringUtils.equals(sortDirection, ASCENDING)){
101 return date2.compareTo(date1);
102 }
103 return date1.compareTo(date2);
104 }
105 });
106 }
107
108
109 private static Calendar getDate(Node node, String name, Calendar defaultValue) {
110 try {
111 if (node.hasProperty(name)) {
112 return node.getProperty(name).getDate();
113 }
114 } catch (RepositoryException e) {
115 }
116 return defaultValue;
117 }
118 }