1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.springframework.extensions.webscripts;
20
21 import java.util.Date;
22 import java.util.List;
23
24 import freemarker.template.TemplateDateModel;
25 import freemarker.template.TemplateMethodModelEx;
26 import freemarker.template.TemplateModelException;
27 import freemarker.template.TemplateNumberModel;
28 import freemarker.template.TemplateScalarModel;
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public class DateCompareMethod implements TemplateMethodModelEx
44 {
45
46
47
48 public Object exec(List args) throws TemplateModelException
49 {
50 int result = 0;
51
52 if (args.size() >= 2)
53 {
54 Object arg0 = args.get(0);
55 Object arg1 = args.get(1);
56 long diff = 0;
57 if (args.size() == 3)
58 {
59 Object arg2 = args.get(2);
60 if (arg2 instanceof TemplateNumberModel)
61 {
62 Number number = ((TemplateNumberModel)arg2).getAsNumber();
63 diff = number.longValue();
64 }
65 }
66 String test = null;
67 if (args.size() == 4)
68 {
69 Object arg3 = args.get(3);
70 if (arg3 instanceof TemplateScalarModel)
71 {
72 test = ((TemplateScalarModel)arg3).getAsString();
73 }
74 }
75 if (arg0 instanceof TemplateDateModel && arg1 instanceof TemplateDateModel)
76 {
77 Date dateA = (Date)(((TemplateDateModel)arg0).getAsDate()).clone();
78 Date dateB = (Date)(((TemplateDateModel)arg1).getAsDate()).clone();
79 switch (((TemplateDateModel)arg0).getDateType())
80 {
81 case TemplateDateModel.DATE:
82
83 dateA.setHours(0);
84 dateA.setMinutes(0);
85 dateA.setSeconds(0);
86 dateA = new Date(dateA.getTime() / 1000L * 1000L);
87 break;
88 case TemplateDateModel.TIME:
89
90 dateA.setDate(1);
91 dateA.setMonth(0);
92 dateA.setYear(0);
93 break;
94 }
95 switch (((TemplateDateModel)arg1).getDateType())
96 {
97 case TemplateDateModel.DATE:
98
99 dateB.setHours(0);
100 dateB.setMinutes(0);
101 dateB.setSeconds(0);
102 dateB = new Date(dateB.getTime() / 1000L * 1000L);
103 break;
104 case TemplateDateModel.TIME:
105
106 dateB.setDate(1);
107 dateB.setMonth(0);
108 dateB.setYear(0);
109 break;
110 }
111 if (test == null || test.equals(">"))
112 {
113 if (dateA.getTime() > (dateB.getTime() - diff))
114 {
115 result = 1;
116 }
117 }
118 else if (test.equals("<"))
119 {
120 if (dateA.getTime() < (dateB.getTime() - diff))
121 {
122 result = 1;
123 }
124 }
125 else if (test.equals("=="))
126 {
127 if (dateA.getTime() == (dateB.getTime() - diff))
128 {
129 result = 1;
130 }
131 }
132 }
133 }
134
135 return result;
136 }
137 }