1
14
15 package com.liferay.portlet.calendar.util.comparator;
16
17 import com.liferay.portal.kernel.util.Time;
18 import com.liferay.portlet.calendar.model.CalEvent;
19 import com.liferay.portlet.calendar.util.CalUtil;
20
21 import java.util.Calendar;
22 import java.util.Comparator;
23 import java.util.Date;
24 import java.util.Locale;
25 import java.util.TimeZone;
26
27
32 public class EventTimeComparator implements Comparator<CalEvent> {
33
34 public EventTimeComparator(TimeZone timeZone, Locale locale) {
35 _timeZone = timeZone;
36 _locale = locale;
37 }
38
39 public int compare(CalEvent event1, CalEvent event2) {
40 boolean allDay1 = CalUtil.isAllDay(event1, _timeZone, _locale);
41 boolean allDay2 = CalUtil.isAllDay(event2, _timeZone, _locale);
42
43 if (allDay1 && allDay2) {
44 return compareTitle(event1, event2);
45 }
46 else if (allDay1) {
47 return -1;
48 }
49 else if (allDay2) {
50 return 1;
51 }
52
53 int value = compareTime(
54 getStartDate(event1, _timeZone), getStartDate(event2, _timeZone));
55
56 if (value != 0) {
57 return value;
58 }
59
60 value = compareTime(
61 getEndDate(event1, _timeZone), getEndDate(event2, _timeZone));
62
63 if (value != 0) {
64 return value;
65 }
66
67 return compareTitle(event1, event2);
68 }
69
70 protected int compareTitle(CalEvent event1, CalEvent event2) {
71 return event1.getTitle().toLowerCase().compareTo(
72 event2.getTitle().toLowerCase());
73 }
74
75 protected int compareTime(Date date1, Date date2) {
76 Calendar cal1 = Calendar.getInstance(_timeZone, _locale);
77
78 cal1.setTime(date1);
79
80 cal1.set(Calendar.YEAR, 1970);
81 cal1.set(Calendar.MONTH, 1);
82 cal1.set(Calendar.DAY_OF_YEAR, 1);
83
84 Calendar cal2 = Calendar.getInstance(_timeZone, _locale);
85
86 cal2.setTime(date2);
87
88 cal2.set(Calendar.YEAR, 1970);
89 cal2.set(Calendar.MONTH, 1);
90 cal2.set(Calendar.DAY_OF_YEAR, 1);
91
92 return cal1.compareTo(cal2);
93 }
94
95 protected Date getEndDate(CalEvent event, TimeZone timeZone) {
96 if (event.isTimeZoneSensitive()) {
97 return Time.getDate(CalUtil.getEndTime(event), timeZone);
98 }
99 else {
100 return CalUtil.getEndTime(event);
101 }
102 }
103
104 protected Date getStartDate(CalEvent event, TimeZone timeZone) {
105 if (event.isTimeZoneSensitive()) {
106 return Time.getDate(event.getStartDate(), timeZone);
107 }
108 else {
109 return event.getStartDate();
110 }
111 }
112
113 private TimeZone _timeZone;
114 private Locale _locale;
115
116 }