annotate src/main/java/org/mpi/openmind/repository/utils/ismi/ISMICalendar.java @ 89:8adfa8679991

new implementation of translit-to-romanization rules in RomanizationLoc with test(!).
author Robert Casties <casties@mpiwg-berlin.mpg.de>
date Mon, 26 Feb 2018 14:39:49 +0100
parents 5f37a9fb1f8b
children 8d79021099a4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
jurzua
parents:
diff changeset
1 package org.mpi.openmind.repository.utils.ismi;
jurzua
parents:
diff changeset
2
jurzua
parents:
diff changeset
3 import java.io.Serializable;
jurzua
parents:
diff changeset
4
jurzua
parents:
diff changeset
5 import org.apache.commons.lang.StringUtils;
jurzua
parents:
diff changeset
6 import org.joda.time.DateTime;
jurzua
parents:
diff changeset
7 import org.joda.time.chrono.GregorianChronology;
jurzua
parents:
diff changeset
8 import org.joda.time.chrono.IslamicChronology;
jurzua
parents:
diff changeset
9 import org.joda.time.chrono.JulianChronology;
jurzua
parents:
diff changeset
10 import org.json.JSONException;
jurzua
parents:
diff changeset
11 import org.json.JSONObject;
jurzua
parents:
diff changeset
12
jurzua
parents:
diff changeset
13
jurzua
parents:
diff changeset
14 public class ISMICalendar implements Serializable {
jurzua
parents:
diff changeset
15 private static final long serialVersionUID = 1L;
jurzua
parents:
diff changeset
16
jurzua
parents:
diff changeset
17 public static String FROM = "from";
jurzua
parents:
diff changeset
18 public static String UNTIL = "until";
jurzua
parents:
diff changeset
19 public static String YEAR = "year";
jurzua
parents:
diff changeset
20 public static String ADD_INF = "additional_info";
jurzua
parents:
diff changeset
21 public static String CALENDAR_TYPE = "calendar_type";
jurzua
parents:
diff changeset
22 public static String INPUT_FORM = "input_form";
jurzua
parents:
diff changeset
23 public static String STATE = "state";
jurzua
parents:
diff changeset
24 public static String DATE = "date";
jurzua
parents:
diff changeset
25 public static String DATE_IN_TEXT = "date_in_text";
jurzua
parents:
diff changeset
26
jurzua
parents:
diff changeset
27 public static String INPUT_FORM_YEAR = "Year";
jurzua
parents:
diff changeset
28 public static String INPUT_FORM_DATE = "Date";
jurzua
parents:
diff changeset
29 public static String INPUT_FORM_FULL_DATE = "Full date";
jurzua
parents:
diff changeset
30 public static String INPUT_FORM_RANGE = "Range";
jurzua
parents:
diff changeset
31 public static String INPUT_FORM_FULL_RANGE = "Full range";
jurzua
parents:
diff changeset
32
jurzua
parents:
diff changeset
33 public static String TYPE_GREGORIAN = "Gregorian";
jurzua
parents:
diff changeset
34 public static String TYPE_ISLAMIC = "Islamic";
jurzua
parents:
diff changeset
35 public static String TYPE_JULIAN = "Julian";
jurzua
parents:
diff changeset
36
jurzua
parents:
diff changeset
37 public static String STATE_UNKNOWN = "unknown";
jurzua
parents:
diff changeset
38 public static String STATE_KNOWN = "known";
jurzua
parents:
diff changeset
39 public static String STATE_NOT_CHECKED = "not checked";
jurzua
parents:
diff changeset
40
jurzua
parents:
diff changeset
41 private String inputForm;
jurzua
parents:
diff changeset
42 private String calendarType;
jurzua
parents:
diff changeset
43
jurzua
parents:
diff changeset
44 private ISMIDate fromGregorian = new ISMIDate();
jurzua
parents:
diff changeset
45 private ISMIDate untilGregorian = new ISMIDate();
jurzua
parents:
diff changeset
46 private String additionalInfo;
jurzua
parents:
diff changeset
47
jurzua
parents:
diff changeset
48 private Integer currentYear;
jurzua
parents:
diff changeset
49 private ISMIDate currentFrom = new ISMIDate();
jurzua
parents:
diff changeset
50 private ISMIDate currentUntil = new ISMIDate();
jurzua
parents:
diff changeset
51
jurzua
parents:
diff changeset
52 private String dateInText;
jurzua
parents:
diff changeset
53
jurzua
parents:
diff changeset
54 private String state;
jurzua
parents:
diff changeset
55
jurzua
parents:
diff changeset
56 public ISMICalendar(){
jurzua
parents:
diff changeset
57 this.calendarType = TYPE_GREGORIAN;
jurzua
parents:
diff changeset
58 this.inputForm = INPUT_FORM_YEAR;
jurzua
parents:
diff changeset
59 this.state = STATE_NOT_CHECKED;
jurzua
parents:
diff changeset
60 }
jurzua
parents:
diff changeset
61
jurzua
parents:
diff changeset
62 public ISMICalendar(String jsonString){
jurzua
parents:
diff changeset
63 if(StringUtils.isNotEmpty(jsonString)){
jurzua
parents:
diff changeset
64 try {
jurzua
parents:
diff changeset
65 JSONObject json = new JSONObject(jsonString);
jurzua
parents:
diff changeset
66 this.state = json.getString(STATE);
jurzua
parents:
diff changeset
67 if(StringUtils.isNotEmpty(state)){
jurzua
parents:
diff changeset
68 if(state.equals(STATE_KNOWN)){
jurzua
parents:
diff changeset
69
jurzua
parents:
diff changeset
70 this.additionalInfo = json.getString(ADD_INF);
jurzua
parents:
diff changeset
71 this.calendarType = json.getString(CALENDAR_TYPE);
jurzua
parents:
diff changeset
72 this.inputForm = json.getString(INPUT_FORM);
jurzua
parents:
diff changeset
73
jurzua
parents:
diff changeset
74 if(inputForm.equals(INPUT_FORM_YEAR)){
jurzua
parents:
diff changeset
75 this.fromGregorian = new ISMIDate(json.getJSONObject(FROM));
jurzua
parents:
diff changeset
76 this.untilGregorian = new ISMIDate(json.getJSONObject(UNTIL));
jurzua
parents:
diff changeset
77 this.currentYear = json.getInt(YEAR);
jurzua
parents:
diff changeset
78 }else if(inputForm.equals(INPUT_FORM_RANGE)){
jurzua
parents:
diff changeset
79 this.fromGregorian = new ISMIDate(json.getJSONObject(FROM));
jurzua
parents:
diff changeset
80 this.untilGregorian = new ISMIDate(json.getJSONObject(UNTIL));
jurzua
parents:
diff changeset
81 if(calendarType.equals(TYPE_GREGORIAN)){
jurzua
parents:
diff changeset
82 this.currentFrom = new ISMIDate(json.getJSONObject(FROM));
jurzua
parents:
diff changeset
83 this.currentUntil = new ISMIDate(json.getJSONObject(UNTIL));
jurzua
parents:
diff changeset
84 }else if(calendarType.equals(TYPE_ISLAMIC)){
jurzua
parents:
diff changeset
85 this.currentFrom = new ISMIDate(this.fromGregorian.getIslamicDateTime());
jurzua
parents:
diff changeset
86 this.currentUntil = new ISMIDate(this.untilGregorian.getIslamicDateTime());
jurzua
parents:
diff changeset
87 }else if(calendarType.equals(TYPE_JULIAN)){
jurzua
parents:
diff changeset
88 this.currentFrom = new ISMIDate(this.fromGregorian.getJulianDateTime());
jurzua
parents:
diff changeset
89 this.currentUntil = new ISMIDate(this.untilGregorian.getJulianDateTime());
jurzua
parents:
diff changeset
90 }
jurzua
parents:
diff changeset
91 }else if(inputForm.equals(INPUT_FORM_DATE)){
jurzua
parents:
diff changeset
92 this.fromGregorian = new ISMIDate(json.getJSONObject(DATE));
jurzua
parents:
diff changeset
93 if(calendarType.equals(TYPE_GREGORIAN)){
jurzua
parents:
diff changeset
94 this.currentFrom = new ISMIDate(json.getJSONObject(DATE));
jurzua
parents:
diff changeset
95 }else if(calendarType.equals(TYPE_ISLAMIC)){
jurzua
parents:
diff changeset
96 this.currentFrom = new ISMIDate(this.fromGregorian.getIslamicDateTime());
jurzua
parents:
diff changeset
97 }else if(calendarType.equals(TYPE_JULIAN)){
jurzua
parents:
diff changeset
98 this.currentFrom = new ISMIDate(this.fromGregorian.getJulianDateTime());
jurzua
parents:
diff changeset
99 }
jurzua
parents:
diff changeset
100 }
jurzua
parents:
diff changeset
101
jurzua
parents:
diff changeset
102 if(json.has("dayOfWeekFrom")){
jurzua
parents:
diff changeset
103 this.currentFrom.setDayOfWeek(json.getInt("dayOfWeekFrom"));
jurzua
parents:
diff changeset
104 }
jurzua
parents:
diff changeset
105 if(json.has("dayOfWeekUntil")){
jurzua
parents:
diff changeset
106 this.currentUntil.setDayOfWeek(json.getInt("dayOfWeekUntil"));
jurzua
parents:
diff changeset
107 }
jurzua
parents:
diff changeset
108 if(json.has("dayOfWeek")){
jurzua
parents:
diff changeset
109 this.currentFrom.setDayOfWeek(json.getInt("dayOfWeek"));
jurzua
parents:
diff changeset
110 }
jurzua
parents:
diff changeset
111
jurzua
parents:
diff changeset
112 }else if(state.equals(STATE_NOT_CHECKED) || state.equals(STATE_UNKNOWN)){
jurzua
parents:
diff changeset
113 if(json.has(DATE_IN_TEXT)){
jurzua
parents:
diff changeset
114 this.dateInText = json.getString(DATE_IN_TEXT);
jurzua
parents:
diff changeset
115 }
jurzua
parents:
diff changeset
116 this.calendarType = TYPE_GREGORIAN;
jurzua
parents:
diff changeset
117 this.inputForm = INPUT_FORM_YEAR;
jurzua
parents:
diff changeset
118 }
jurzua
parents:
diff changeset
119 }
jurzua
parents:
diff changeset
120
jurzua
parents:
diff changeset
121 } catch (Exception e) {
jurzua
parents:
diff changeset
122 e.printStackTrace();
jurzua
parents:
diff changeset
123 this.state = STATE_NOT_CHECKED;
jurzua
parents:
diff changeset
124 this.calendarType = TYPE_GREGORIAN;
jurzua
parents:
diff changeset
125 this.inputForm = INPUT_FORM_YEAR;
jurzua
parents:
diff changeset
126 }
jurzua
parents:
diff changeset
127 }else{
jurzua
parents:
diff changeset
128 this.calendarType = TYPE_GREGORIAN;
jurzua
parents:
diff changeset
129 this.inputForm = INPUT_FORM_YEAR;
jurzua
parents:
diff changeset
130 this.state = STATE_NOT_CHECKED;
jurzua
parents:
diff changeset
131 }
jurzua
parents:
diff changeset
132 }
jurzua
parents:
diff changeset
133
jurzua
parents:
diff changeset
134 public void update(){
jurzua
parents:
diff changeset
135
jurzua
parents:
diff changeset
136 if(inputForm.equals(INPUT_FORM_RANGE)){
jurzua
parents:
diff changeset
137 if(isUntilOlderThanFrom()){
jurzua
parents:
diff changeset
138 if(calendarType.equals(TYPE_GREGORIAN)){
jurzua
parents:
diff changeset
139 this.inputGregorianRange();
jurzua
parents:
diff changeset
140 }else if(calendarType.equals(TYPE_ISLAMIC)){
jurzua
parents:
diff changeset
141 this.inputIslamicRange();
jurzua
parents:
diff changeset
142 }else if(calendarType.equals(TYPE_JULIAN)){
jurzua
parents:
diff changeset
143 this.inputJulianRange();
jurzua
parents:
diff changeset
144 }
jurzua
parents:
diff changeset
145 }
jurzua
parents:
diff changeset
146
jurzua
parents:
diff changeset
147 }else if(inputForm.equals(INPUT_FORM_YEAR)){
jurzua
parents:
diff changeset
148 if(calendarType.equals(TYPE_GREGORIAN)){
jurzua
parents:
diff changeset
149 this.inputGregorianYear();
jurzua
parents:
diff changeset
150 }else if(calendarType.equals(TYPE_ISLAMIC)){
jurzua
parents:
diff changeset
151 this.inputIslamicYear();
jurzua
parents:
diff changeset
152 }else if(calendarType.equals(TYPE_JULIAN)){
jurzua
parents:
diff changeset
153 this.inputJulianYear();
jurzua
parents:
diff changeset
154 }
jurzua
parents:
diff changeset
155 }else if(inputForm.equals(INPUT_FORM_DATE)){
jurzua
parents:
diff changeset
156 if(calendarType.equals(TYPE_GREGORIAN)){
jurzua
parents:
diff changeset
157 this.inputGregorianFrom();
jurzua
parents:
diff changeset
158 }else if(calendarType.equals(TYPE_ISLAMIC)){
jurzua
parents:
diff changeset
159 this.inputIslamicFrom();
jurzua
parents:
diff changeset
160 }else if(calendarType.equals(TYPE_JULIAN)){
jurzua
parents:
diff changeset
161 this.inputJulianFrom();
jurzua
parents:
diff changeset
162 }
jurzua
parents:
diff changeset
163 }
jurzua
parents:
diff changeset
164 }
jurzua
parents:
diff changeset
165
jurzua
parents:
diff changeset
166 public boolean isDeployable(){
jurzua
parents:
diff changeset
167 return (!this.state.equals(STATE_NOT_CHECKED) && !this.state.equals(STATE_UNKNOWN));
jurzua
parents:
diff changeset
168 }
jurzua
parents:
diff changeset
169
jurzua
parents:
diff changeset
170 public String getFormattedRange(){
jurzua
parents:
diff changeset
171 if(inputForm != null){
jurzua
parents:
diff changeset
172 String from = this.fromGregorian.toString();
jurzua
parents:
diff changeset
173 if(this.inputForm.equals(INPUT_FORM_DATE)){
jurzua
parents:
diff changeset
174 return "[" + from + "]";
jurzua
parents:
diff changeset
175 }else{
jurzua
parents:
diff changeset
176
jurzua
parents:
diff changeset
177 String until = this.untilGregorian.toString();
jurzua
parents:
diff changeset
178 if(StringUtils.isNotEmpty(from) && StringUtils.isNotEmpty(until)){
jurzua
parents:
diff changeset
179 return "[FROM: " + from + " TO: " + until + "]";
jurzua
parents:
diff changeset
180 }
jurzua
parents:
diff changeset
181 }
jurzua
parents:
diff changeset
182 }
jurzua
parents:
diff changeset
183 return null;
jurzua
parents:
diff changeset
184 }
jurzua
parents:
diff changeset
185
jurzua
parents:
diff changeset
186 public String getFormattedIslamicRange(){
jurzua
parents:
diff changeset
187 if(inputForm != null){
jurzua
parents:
diff changeset
188 String from = this.fromGregorian.toIslamicString();
jurzua
parents:
diff changeset
189 if(this.inputForm.equals(INPUT_FORM_DATE)){
jurzua
parents:
diff changeset
190 return "[" + from + "]";
jurzua
parents:
diff changeset
191 }else{
jurzua
parents:
diff changeset
192 String until = this.untilGregorian.toIslamicString();
jurzua
parents:
diff changeset
193 if(StringUtils.isNotEmpty(from) && StringUtils.isNotEmpty(until)){
jurzua
parents:
diff changeset
194 return "[FROM: " + from + " TO: " + until + "]";
jurzua
parents:
diff changeset
195 }
jurzua
parents:
diff changeset
196 }
jurzua
parents:
diff changeset
197 }
jurzua
parents:
diff changeset
198 return null;
jurzua
parents:
diff changeset
199 }
jurzua
parents:
diff changeset
200
jurzua
parents:
diff changeset
201 public String getFormattedJulianRange(){
jurzua
parents:
diff changeset
202 if(inputForm != null){
jurzua
parents:
diff changeset
203 String from = this.fromGregorian.toJulianString();
jurzua
parents:
diff changeset
204 if(this.inputForm.equals(INPUT_FORM_DATE)){
jurzua
parents:
diff changeset
205 return "[" + from + "]";
jurzua
parents:
diff changeset
206 }else{
jurzua
parents:
diff changeset
207 String until = this.untilGregorian.toJulianString();
jurzua
parents:
diff changeset
208 if(StringUtils.isNotEmpty(from) && StringUtils.isNotEmpty(until)){
jurzua
parents:
diff changeset
209 return "[FROM: " + from + " TO: " + until + "]";
jurzua
parents:
diff changeset
210 }
jurzua
parents:
diff changeset
211 }
jurzua
parents:
diff changeset
212 }
jurzua
parents:
diff changeset
213 return null;
jurzua
parents:
diff changeset
214 }
jurzua
parents:
diff changeset
215
jurzua
parents:
diff changeset
216 public String getCalendarAsHtml(){
jurzua
parents:
diff changeset
217 StringBuilder sb = new StringBuilder();
jurzua
parents:
diff changeset
218
jurzua
parents:
diff changeset
219 if(isDeployable()){
jurzua
parents:
diff changeset
220 sb.append("<table align=\"left\">");
jurzua
parents:
diff changeset
221
jurzua
parents:
diff changeset
222 sb.append("<tr>");
jurzua
parents:
diff changeset
223 sb.append("<th align=\"left\">Gregorian:</th>");
jurzua
parents:
diff changeset
224 sb.append("<th align=\"left\">" + this.getFormattedRange() + "</th>");
jurzua
parents:
diff changeset
225 sb.append("</tr>");
jurzua
parents:
diff changeset
226
jurzua
parents:
diff changeset
227 sb.append("<tr>");
jurzua
parents:
diff changeset
228 sb.append("<th align=\"left\">Islamic:</th>");
jurzua
parents:
diff changeset
229 sb.append("<th align=\"left\">" + this.getFormattedIslamicRange() + "</th>");
jurzua
parents:
diff changeset
230 sb.append("</tr>");
jurzua
parents:
diff changeset
231
jurzua
parents:
diff changeset
232 sb.append("<tr>");
jurzua
parents:
diff changeset
233 sb.append("<th align=\"left\">Julian:</th>");
jurzua
parents:
diff changeset
234 sb.append("<th align=\"left\">" + this.getFormattedJulianRange() + "</th>");
jurzua
parents:
diff changeset
235 sb.append("</tr>");
jurzua
parents:
diff changeset
236
jurzua
parents:
diff changeset
237 sb.append("</table>");
jurzua
parents:
diff changeset
238 }else if(this.state.equals(STATE_UNKNOWN)){
18
5f37a9fb1f8b small fix by unknown.
casties
parents: 1
diff changeset
239 sb.append("Unknown");
1
jurzua
parents:
diff changeset
240 }else{
jurzua
parents:
diff changeset
241 sb.append("Not checked");
jurzua
parents:
diff changeset
242 if(StringUtils.isNotEmpty(this.dateInText)){
jurzua
parents:
diff changeset
243 sb.append("=" + this.dateInText);
jurzua
parents:
diff changeset
244 }
jurzua
parents:
diff changeset
245 }
jurzua
parents:
diff changeset
246
jurzua
parents:
diff changeset
247 return sb.toString();
jurzua
parents:
diff changeset
248 }
jurzua
parents:
diff changeset
249
jurzua
parents:
diff changeset
250
jurzua
parents:
diff changeset
251 private void inputGregorianRange(){
jurzua
parents:
diff changeset
252 this.inputGregorianFrom();
jurzua
parents:
diff changeset
253 try{
jurzua
parents:
diff changeset
254 DateTime gregrorian =
jurzua
parents:
diff changeset
255 new DateTime(currentUntil.getYear(), currentUntil.getMonth(), currentUntil.getDayOfMonth(), 0, 0, 0, 0, GregorianChronology.getInstance());
jurzua
parents:
diff changeset
256 this.untilGregorian = new ISMIDate(gregrorian.withChronology(GregorianChronology.getInstance()));
jurzua
parents:
diff changeset
257 if(isDayInWeek(currentUntil.getDayOfWeek())){
jurzua
parents:
diff changeset
258 this.untilGregorian.setDayOfWeek(currentUntil.getDayOfWeek());
jurzua
parents:
diff changeset
259 }
jurzua
parents:
diff changeset
260 }catch (Exception e) {
jurzua
parents:
diff changeset
261 //this.addGeneralMsg("In until date - " + e.getMessage());
jurzua
parents:
diff changeset
262 e.printStackTrace();
jurzua
parents:
diff changeset
263 }
jurzua
parents:
diff changeset
264 }
jurzua
parents:
diff changeset
265
jurzua
parents:
diff changeset
266 private void inputGregorianFrom(){
jurzua
parents:
diff changeset
267 try{
jurzua
parents:
diff changeset
268 DateTime gregorian =
jurzua
parents:
diff changeset
269 new DateTime(currentFrom.getYear(), currentFrom.getMonth(), currentFrom.getDayOfMonth(), 0, 0, 0, 0, GregorianChronology.getInstance());
jurzua
parents:
diff changeset
270 this.fromGregorian = new ISMIDate(gregorian);
jurzua
parents:
diff changeset
271 if(isDayInWeek(currentFrom.getDayOfWeek())){
jurzua
parents:
diff changeset
272 this.fromGregorian.setDayOfWeek(currentFrom.getDayOfWeek());
jurzua
parents:
diff changeset
273 }
jurzua
parents:
diff changeset
274 }catch (Exception e) {
jurzua
parents:
diff changeset
275 //this.addGeneralMsg("In from date - " + e.getMessage());
jurzua
parents:
diff changeset
276 e.printStackTrace();
jurzua
parents:
diff changeset
277 }
jurzua
parents:
diff changeset
278 }
jurzua
parents:
diff changeset
279
jurzua
parents:
diff changeset
280 private void inputIslamicRange(){
jurzua
parents:
diff changeset
281 this.inputIslamicFrom();
jurzua
parents:
diff changeset
282 try{
jurzua
parents:
diff changeset
283 DateTime islamic =
jurzua
parents:
diff changeset
284 new DateTime(currentUntil.getYear(), currentUntil.getMonth(), currentUntil.getDayOfMonth(), 0, 0, 0, 0, IslamicChronology.getInstance());
jurzua
parents:
diff changeset
285 DateTime gregorian = islamic.withChronology(GregorianChronology.getInstance());
jurzua
parents:
diff changeset
286 this.untilGregorian = new ISMIDate(gregorian);
jurzua
parents:
diff changeset
287 if(isDayInWeek(currentUntil.getDayOfWeek())){
jurzua
parents:
diff changeset
288 this.untilGregorian.setDayOfWeek(gregorian.getDayOfWeek());
jurzua
parents:
diff changeset
289 }else{
jurzua
parents:
diff changeset
290 this.untilGregorian.setAmbiguity(2);
jurzua
parents:
diff changeset
291 }
jurzua
parents:
diff changeset
292 }catch (Exception e) {
jurzua
parents:
diff changeset
293 //this.addGeneralMsg("In until date - " + e.getMessage());
jurzua
parents:
diff changeset
294 e.printStackTrace();
jurzua
parents:
diff changeset
295 }
jurzua
parents:
diff changeset
296 }
jurzua
parents:
diff changeset
297
jurzua
parents:
diff changeset
298 private void inputIslamicFrom(){
jurzua
parents:
diff changeset
299 try{
jurzua
parents:
diff changeset
300 DateTime islamic =
jurzua
parents:
diff changeset
301 new DateTime(currentFrom.getYear(), currentFrom.getMonth(), currentFrom.getDayOfMonth(), 0, 0, 0, 0, IslamicChronology.getInstance());
jurzua
parents:
diff changeset
302 DateTime gregorian = islamic.withChronology(GregorianChronology.getInstance());
jurzua
parents:
diff changeset
303 this.fromGregorian = new ISMIDate(gregorian);
jurzua
parents:
diff changeset
304 if(isDayInWeek(currentFrom.getDayOfWeek())){
jurzua
parents:
diff changeset
305 this.fromGregorian.setDayOfWeek(gregorian.getDayOfWeek());
jurzua
parents:
diff changeset
306 }else{
jurzua
parents:
diff changeset
307 this.fromGregorian.setAmbiguity(2);
jurzua
parents:
diff changeset
308 }
jurzua
parents:
diff changeset
309 }catch (Exception e) {
jurzua
parents:
diff changeset
310 //this.addGeneralMsg("In from date - " + e.getMessage());
jurzua
parents:
diff changeset
311 e.printStackTrace();
jurzua
parents:
diff changeset
312 }
jurzua
parents:
diff changeset
313 }
jurzua
parents:
diff changeset
314
jurzua
parents:
diff changeset
315
jurzua
parents:
diff changeset
316 private void inputJulianRange(){
jurzua
parents:
diff changeset
317 this.inputJulianFrom();
jurzua
parents:
diff changeset
318 DateTime julian = null;
jurzua
parents:
diff changeset
319 try{
jurzua
parents:
diff changeset
320 julian =
jurzua
parents:
diff changeset
321 new DateTime(currentUntil.getYear(), currentUntil.getMonth(), currentUntil.getDayOfMonth(), 0, 0, 0, 0, JulianChronology.getInstance());
jurzua
parents:
diff changeset
322 DateTime gregorian = julian.withChronology(GregorianChronology.getInstance());
jurzua
parents:
diff changeset
323 this.untilGregorian = new ISMIDate(gregorian);
jurzua
parents:
diff changeset
324 if(isDayInWeek(currentUntil.getDayOfWeek())){
jurzua
parents:
diff changeset
325 this.untilGregorian.setDayOfWeek(gregorian.getDayOfWeek());
jurzua
parents:
diff changeset
326 }
jurzua
parents:
diff changeset
327 }catch (Exception e) {
jurzua
parents:
diff changeset
328 //this.addGeneralMsg("In until date - " + e.getMessage());
jurzua
parents:
diff changeset
329 e.printStackTrace();
jurzua
parents:
diff changeset
330 }
jurzua
parents:
diff changeset
331 }
jurzua
parents:
diff changeset
332
jurzua
parents:
diff changeset
333 private void inputJulianFrom(){
jurzua
parents:
diff changeset
334 DateTime julian = null;
jurzua
parents:
diff changeset
335 try{
jurzua
parents:
diff changeset
336 julian =
jurzua
parents:
diff changeset
337 new DateTime(currentFrom.getYear(), currentFrom.getMonth(), currentFrom.getDayOfMonth(), 0, 0, 0, 0, JulianChronology.getInstance());
jurzua
parents:
diff changeset
338 DateTime gregorian = julian.withChronology(GregorianChronology.getInstance());
jurzua
parents:
diff changeset
339 this.fromGregorian = new ISMIDate(gregorian);
jurzua
parents:
diff changeset
340 if(isDayInWeek(currentFrom.getDayOfWeek())){
jurzua
parents:
diff changeset
341 this.fromGregorian.setDayOfWeek(gregorian.getDayOfWeek());
jurzua
parents:
diff changeset
342 }
jurzua
parents:
diff changeset
343 }catch (Exception e) {
jurzua
parents:
diff changeset
344 //addGeneralMsg("In from date - " + e.getMessage());
jurzua
parents:
diff changeset
345 e.printStackTrace();
jurzua
parents:
diff changeset
346 }
jurzua
parents:
diff changeset
347 }
jurzua
parents:
diff changeset
348
jurzua
parents:
diff changeset
349 public void inputGregorianYear(){
jurzua
parents:
diff changeset
350 if(inputForm.equals(INPUT_FORM_YEAR) && currentYear != null){
jurzua
parents:
diff changeset
351 this.fromGregorian = new ISMIDate(new DateTime(currentYear, 1, 1, 0, 0, 0, 0, GregorianChronology.getInstance()));
jurzua
parents:
diff changeset
352 this.untilGregorian = new ISMIDate(new DateTime(currentYear, 12, 31, 0, 0, 0, 0, GregorianChronology.getInstance()));
jurzua
parents:
diff changeset
353 }
jurzua
parents:
diff changeset
354 }
jurzua
parents:
diff changeset
355
jurzua
parents:
diff changeset
356 public void inputIslamicYear(){
jurzua
parents:
diff changeset
357 if(this.currentYear < 1 || this.currentYear > 292271022){
jurzua
parents:
diff changeset
358 //this.addGeneralMsg("year must be in the range [1,292271022]");
jurzua
parents:
diff changeset
359 }else {
jurzua
parents:
diff changeset
360 DateTime islamic =
jurzua
parents:
diff changeset
361 new DateTime(currentYear, 1, 1, 0, 0, 0, 0, IslamicChronology.getInstance());
jurzua
parents:
diff changeset
362 DateTime gregorian = islamic.withChronology(GregorianChronology.getInstance());
jurzua
parents:
diff changeset
363 this.fromGregorian = new ISMIDate(gregorian);
jurzua
parents:
diff changeset
364 this.fromGregorian.setAmbiguity(2);
jurzua
parents:
diff changeset
365 this.fromGregorian.setDayOfWeek(null);
jurzua
parents:
diff changeset
366
jurzua
parents:
diff changeset
367 islamic =
jurzua
parents:
diff changeset
368 new DateTime(currentYear, 12, 29, 0, 0, 0, 0, IslamicChronology.getInstance());
jurzua
parents:
diff changeset
369 gregorian = islamic.withChronology(GregorianChronology.getInstance());
jurzua
parents:
diff changeset
370 this.untilGregorian = new ISMIDate(gregorian);
jurzua
parents:
diff changeset
371 this.untilGregorian.setAmbiguity(2);
jurzua
parents:
diff changeset
372 this.untilGregorian.setDayOfWeek(null);
jurzua
parents:
diff changeset
373 }
jurzua
parents:
diff changeset
374 }
jurzua
parents:
diff changeset
375
jurzua
parents:
diff changeset
376 public void inputJulianYear(){
jurzua
parents:
diff changeset
377 if(this.currentYear < 1){
jurzua
parents:
diff changeset
378 //this.addGeneralMsg("Value 0 for year is not supported");
jurzua
parents:
diff changeset
379 }else{
jurzua
parents:
diff changeset
380 DateTime julian =
jurzua
parents:
diff changeset
381 new DateTime(currentYear, 1, 1, 0, 0, 0, 0, JulianChronology.getInstance());
jurzua
parents:
diff changeset
382 DateTime gregorian = julian.withChronology(GregorianChronology.getInstance());
jurzua
parents:
diff changeset
383 this.fromGregorian = new ISMIDate(gregorian);
jurzua
parents:
diff changeset
384 this.fromGregorian.setDayOfWeek(null);
jurzua
parents:
diff changeset
385
jurzua
parents:
diff changeset
386 julian =
jurzua
parents:
diff changeset
387 new DateTime(currentYear, 12, 31, 0, 0, 0, 0, JulianChronology.getInstance());
jurzua
parents:
diff changeset
388 gregorian = julian.withChronology(GregorianChronology.getInstance());
jurzua
parents:
diff changeset
389 this.untilGregorian = new ISMIDate(gregorian);
jurzua
parents:
diff changeset
390 this.untilGregorian.setDayOfWeek(null);
jurzua
parents:
diff changeset
391 }
jurzua
parents:
diff changeset
392 }
jurzua
parents:
diff changeset
393
jurzua
parents:
diff changeset
394
jurzua
parents:
diff changeset
395 public String toJSONString(){
jurzua
parents:
diff changeset
396 this.update();
jurzua
parents:
diff changeset
397 JSONObject json = this.toJSON();
jurzua
parents:
diff changeset
398 if(json != null){
jurzua
parents:
diff changeset
399 return json.toString();
jurzua
parents:
diff changeset
400 }
jurzua
parents:
diff changeset
401 return "";
jurzua
parents:
diff changeset
402 }
jurzua
parents:
diff changeset
403
jurzua
parents:
diff changeset
404 public JSONObject toJSON(){
jurzua
parents:
diff changeset
405 JSONObject json = new JSONObject();
jurzua
parents:
diff changeset
406 if(state.equals(STATE_KNOWN)){
jurzua
parents:
diff changeset
407 try {
jurzua
parents:
diff changeset
408
jurzua
parents:
diff changeset
409 if(inputForm.equals(INPUT_FORM_YEAR)){
jurzua
parents:
diff changeset
410 json.put(YEAR, this.currentYear);
jurzua
parents:
diff changeset
411 json.put(FROM, this.fromGregorian.toJSON());
jurzua
parents:
diff changeset
412 json.put(UNTIL, this.untilGregorian.toJSON());
jurzua
parents:
diff changeset
413 }else if(inputForm.equals(INPUT_FORM_RANGE)){
jurzua
parents:
diff changeset
414 json.put(FROM, this.fromGregorian.toJSON());
jurzua
parents:
diff changeset
415 json.put(UNTIL, this.untilGregorian.toJSON());
jurzua
parents:
diff changeset
416 if(isDayInWeek(currentFrom.getDayOfWeek())){
jurzua
parents:
diff changeset
417 json.put("dayOfWeekFrom", currentFrom.getDayOfWeek());
jurzua
parents:
diff changeset
418 }
jurzua
parents:
diff changeset
419 if(isDayInWeek(currentUntil.getDayOfWeek())){
jurzua
parents:
diff changeset
420 json.put("dayOfWeekUntil", currentUntil.getDayOfWeek());
jurzua
parents:
diff changeset
421 }
jurzua
parents:
diff changeset
422 }else if(inputForm.equals(INPUT_FORM_DATE)){
jurzua
parents:
diff changeset
423 json.put(DATE, this.fromGregorian.toJSON());
jurzua
parents:
diff changeset
424 if(isDayInWeek(currentFrom.getDayOfWeek())){
jurzua
parents:
diff changeset
425 json.put("dayOfWeek", currentFrom.getDayOfWeek());
jurzua
parents:
diff changeset
426 }
jurzua
parents:
diff changeset
427 }
jurzua
parents:
diff changeset
428
jurzua
parents:
diff changeset
429 json.put(STATE, this.state);
jurzua
parents:
diff changeset
430 json.put(ADD_INF, additionalInfo);
jurzua
parents:
diff changeset
431 json.put(CALENDAR_TYPE, this.calendarType);
jurzua
parents:
diff changeset
432 json.put(INPUT_FORM, this.inputForm);
jurzua
parents:
diff changeset
433
jurzua
parents:
diff changeset
434 } catch (JSONException e) {
jurzua
parents:
diff changeset
435 e.printStackTrace();
jurzua
parents:
diff changeset
436 }
jurzua
parents:
diff changeset
437 return json;
jurzua
parents:
diff changeset
438 }else if(state.equals(STATE_UNKNOWN)){
jurzua
parents:
diff changeset
439 try {
jurzua
parents:
diff changeset
440 json.put(STATE, this.state);
jurzua
parents:
diff changeset
441 } catch (JSONException e) {
jurzua
parents:
diff changeset
442 e.printStackTrace();
jurzua
parents:
diff changeset
443 }
jurzua
parents:
diff changeset
444 return json;
jurzua
parents:
diff changeset
445 }else if(state.equals(STATE_NOT_CHECKED) && StringUtils.isNotEmpty(dateInText)){
jurzua
parents:
diff changeset
446 try {
jurzua
parents:
diff changeset
447 json.put(STATE, this.state);
jurzua
parents:
diff changeset
448 json.put(DATE_IN_TEXT, this.dateInText);
jurzua
parents:
diff changeset
449 } catch (JSONException e) {
jurzua
parents:
diff changeset
450 e.printStackTrace();
jurzua
parents:
diff changeset
451 }
jurzua
parents:
diff changeset
452 return json;
jurzua
parents:
diff changeset
453 }
jurzua
parents:
diff changeset
454 return null;
jurzua
parents:
diff changeset
455 }
jurzua
parents:
diff changeset
456
jurzua
parents:
diff changeset
457 public boolean isUntilOlderThanFrom(){
jurzua
parents:
diff changeset
458 if(this.currentFrom.getYear() != null && this.currentUntil.getYear() != null){
jurzua
parents:
diff changeset
459 if(this.currentFrom.getYear() < this.currentUntil.getYear()){
jurzua
parents:
diff changeset
460 return true;
jurzua
parents:
diff changeset
461 }else if(this.currentFrom.getYear().equals(this.currentUntil.getYear())){
jurzua
parents:
diff changeset
462 if(this.currentFrom.getMonth() != null && this.currentUntil.getMonth() != null){
jurzua
parents:
diff changeset
463 if(this.currentFrom.getMonth() < this.currentUntil.getMonth()){
jurzua
parents:
diff changeset
464 return true;
jurzua
parents:
diff changeset
465 }else if(this.currentFrom.getMonth().equals(this.currentUntil.getMonth())){
jurzua
parents:
diff changeset
466 if(this.currentFrom.getDayOfMonth() != null && this.currentUntil.getDayOfMonth() != null){
jurzua
parents:
diff changeset
467 if(this.currentFrom.getDayOfMonth() < this.currentUntil.getDayOfMonth()){
jurzua
parents:
diff changeset
468 return true;
jurzua
parents:
diff changeset
469 }
jurzua
parents:
diff changeset
470 }
jurzua
parents:
diff changeset
471 }
jurzua
parents:
diff changeset
472 }
jurzua
parents:
diff changeset
473 }
jurzua
parents:
diff changeset
474 }
jurzua
parents:
diff changeset
475 return false;
jurzua
parents:
diff changeset
476 }
jurzua
parents:
diff changeset
477
jurzua
parents:
diff changeset
478 private boolean isDayInWeek(Integer day){
jurzua
parents:
diff changeset
479 if(day == null)
jurzua
parents:
diff changeset
480 return false;
jurzua
parents:
diff changeset
481 if(day >= 1 && day <= 7){
jurzua
parents:
diff changeset
482 return true;
jurzua
parents:
diff changeset
483 }
jurzua
parents:
diff changeset
484 return false;
jurzua
parents:
diff changeset
485 }
jurzua
parents:
diff changeset
486
jurzua
parents:
diff changeset
487 public ISMIDate getFromGregorian() {
jurzua
parents:
diff changeset
488 return fromGregorian;
jurzua
parents:
diff changeset
489 }
jurzua
parents:
diff changeset
490 public void setFromGregorian(ISMIDate fromGregorian) {
jurzua
parents:
diff changeset
491 this.fromGregorian = fromGregorian;
jurzua
parents:
diff changeset
492 }
jurzua
parents:
diff changeset
493 public ISMIDate getUntilGregorian() {
jurzua
parents:
diff changeset
494 return untilGregorian;
jurzua
parents:
diff changeset
495 }
jurzua
parents:
diff changeset
496 public void setUntilGregorian(ISMIDate untilGregorian) {
jurzua
parents:
diff changeset
497 this.untilGregorian = untilGregorian;
jurzua
parents:
diff changeset
498 }
jurzua
parents:
diff changeset
499
jurzua
parents:
diff changeset
500 public String getInputForm() {
jurzua
parents:
diff changeset
501 return inputForm;
jurzua
parents:
diff changeset
502 }
jurzua
parents:
diff changeset
503
jurzua
parents:
diff changeset
504 public void setInputForm(String inputForm) {
jurzua
parents:
diff changeset
505 this.inputForm = inputForm;
jurzua
parents:
diff changeset
506 }
jurzua
parents:
diff changeset
507
jurzua
parents:
diff changeset
508 public String getCalendarType() {
jurzua
parents:
diff changeset
509 return calendarType;
jurzua
parents:
diff changeset
510 }
jurzua
parents:
diff changeset
511
jurzua
parents:
diff changeset
512 public void setCalendarType(String calendarType) {
jurzua
parents:
diff changeset
513 this.calendarType = calendarType;
jurzua
parents:
diff changeset
514 }
jurzua
parents:
diff changeset
515
jurzua
parents:
diff changeset
516 public String getAdditionalInfo() {
jurzua
parents:
diff changeset
517 return additionalInfo;
jurzua
parents:
diff changeset
518 }
jurzua
parents:
diff changeset
519
jurzua
parents:
diff changeset
520 public void setAdditionalInfo(String additionalInfo) {
jurzua
parents:
diff changeset
521 this.additionalInfo = additionalInfo;
jurzua
parents:
diff changeset
522 }
jurzua
parents:
diff changeset
523
jurzua
parents:
diff changeset
524 public Integer getCurrentYear() {
jurzua
parents:
diff changeset
525 return currentYear;
jurzua
parents:
diff changeset
526 }
jurzua
parents:
diff changeset
527
jurzua
parents:
diff changeset
528 public void setCurrentYear(Integer currentYear) {
jurzua
parents:
diff changeset
529 this.currentYear = currentYear;
jurzua
parents:
diff changeset
530 }
jurzua
parents:
diff changeset
531
jurzua
parents:
diff changeset
532 public ISMIDate getCurrentFrom() {
jurzua
parents:
diff changeset
533 return currentFrom;
jurzua
parents:
diff changeset
534 }
jurzua
parents:
diff changeset
535
jurzua
parents:
diff changeset
536 public void setCurrentFrom(ISMIDate currentFrom) {
jurzua
parents:
diff changeset
537 this.currentFrom = currentFrom;
jurzua
parents:
diff changeset
538 }
jurzua
parents:
diff changeset
539
jurzua
parents:
diff changeset
540 public ISMIDate getCurrentUntil() {
jurzua
parents:
diff changeset
541 return currentUntil;
jurzua
parents:
diff changeset
542 }
jurzua
parents:
diff changeset
543
jurzua
parents:
diff changeset
544 public void setCurrentUntil(ISMIDate currentUntil) {
jurzua
parents:
diff changeset
545 this.currentUntil = currentUntil;
jurzua
parents:
diff changeset
546 }
jurzua
parents:
diff changeset
547
jurzua
parents:
diff changeset
548 public String getState() {
jurzua
parents:
diff changeset
549 return state;
jurzua
parents:
diff changeset
550 }
jurzua
parents:
diff changeset
551
jurzua
parents:
diff changeset
552 public void setState(String state) {
jurzua
parents:
diff changeset
553 this.state = state;
jurzua
parents:
diff changeset
554 }
jurzua
parents:
diff changeset
555
jurzua
parents:
diff changeset
556 public String getDateInText() {
jurzua
parents:
diff changeset
557 return dateInText;
jurzua
parents:
diff changeset
558 }
jurzua
parents:
diff changeset
559
jurzua
parents:
diff changeset
560 public void setDateInText(String dateInText) {
jurzua
parents:
diff changeset
561 this.dateInText = dateInText;
jurzua
parents:
diff changeset
562 }
jurzua
parents:
diff changeset
563 }
jurzua
parents:
diff changeset
564