1 package org.apache.turbine.util;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.text.NumberFormat;
23 import java.util.Calendar;
24 import java.util.Date;
25
26 import org.apache.ecs.ConcreteElement;
27 import org.apache.ecs.ElementContainer;
28 import org.apache.ecs.html.Comment;
29 import org.apache.ecs.html.Input;
30 import org.apache.ecs.html.Option;
31 import org.apache.ecs.html.Select;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 public class TimeSelector
74 {
75
76 public static final String DEFAULT_PREFIX = "TimeSelector";
77
78
79 public static final String HOUR_SUFFIX = "_hour";
80
81
82 public static final String MINUTE_SUFFIX = "_minute";
83
84
85 public static final String SECOND_SUFFIX = "_second";
86
87
88 public static final String AMPM_SUFFIX = "_ampm";
89
90
91 public static final int TWELVE_HOUR = 0;
92
93
94 public static final int TWENTY_FOUR_HOUR = 1;
95
96
97 private static final NumberFormat nbrFmt;
98
99 private static final int DEFAULT_MINUTE_INTERVAL = 5;
100 private static final int DEFAULT_SECOND_INTERVAL = 5;
101 private static final int DEFAULT_TIME_FORMAT = TWELVE_HOUR;
102
103 private int timeFormat = DEFAULT_TIME_FORMAT;
104 private int minuteInterval = DEFAULT_MINUTE_INTERVAL;
105 private int secondInterval = DEFAULT_SECOND_INTERVAL;
106
107 private Calendar useDate = null;
108 private String selName = null;
109 private String onChange = null;
110 private boolean onChangeSet = false;
111 private boolean showSeconds = false;
112 private int setSeconds = 0;
113
114 static
115 {
116 nbrFmt = NumberFormat.getInstance();
117 nbrFmt.setMinimumIntegerDigits(2);
118 nbrFmt.setMaximumIntegerDigits(2);
119 }
120
121
122
123
124
125 public TimeSelector()
126 {
127 this.selName = DEFAULT_PREFIX;
128 this.useDate = Calendar.getInstance();
129 this.useDate.setTime(new Date());
130 }
131
132
133
134
135
136
137
138
139 public TimeSelector(String selName, Calendar useDate)
140 {
141 this.useDate = useDate;
142 this.selName = selName;
143 }
144
145
146
147
148
149
150 public TimeSelector(String selName)
151 {
152 this.selName = selName;
153 this.useDate = Calendar.getInstance();
154 this.useDate.setTime(new Date());
155 }
156
157
158
159
160
161
162
163
164
165
166
167
168 public TimeSelector setOnChange(String onChange)
169 {
170 if (onChange != null)
171 {
172 this.onChange = onChange;
173 this.onChangeSet = true;
174 }
175 else
176 {
177 this.onChange = null;
178 this.onChangeSet = false;
179 }
180 return this;
181 }
182
183
184
185
186
187
188
189
190
191 public TimeSelector setSeconds(int seconds)
192 {
193 this.setSeconds = seconds;
194 this.showSeconds = false;
195 return this;
196 }
197
198
199
200
201
202
203
204
205
206 public TimeSelector setMinuteInterval(int minutes)
207 {
208 this.minuteInterval = minutes;
209 return this;
210 }
211
212
213
214
215
216
217
218
219
220 public TimeSelector setSecondInterval(int seconds)
221 {
222 this.secondInterval = seconds;
223 return this;
224 }
225
226
227
228
229
230
231
232
233
234 public TimeSelector setTimeFormat(int format)
235 {
236 this.timeFormat = format;
237 return this;
238 }
239
240
241
242
243
244
245
246
247
248
249 public TimeSelector setShowSeconds(boolean show)
250 {
251 this.showSeconds = show;
252 return this;
253 }
254
255
256
257
258
259
260
261 public void setSelName(String selName)
262 {
263 this.selName = selName;
264 }
265
266
267
268
269
270
271 public String getSelName()
272 {
273 return selName;
274 }
275
276
277
278
279
280
281
282 public static Select getSecondSelector(String name)
283 {
284 return (getSecondSelector(name, Calendar.getInstance()));
285 }
286
287
288
289
290
291
292
293
294 public static Select getSecondSelector(String name, Calendar now)
295 {
296 return (getSecondSelector(name, Calendar.getInstance(),
297 DEFAULT_SECOND_INTERVAL));
298 }
299
300
301
302
303
304
305
306
307
308 public static Select getSecondSelector(String name, Calendar now,
309 int interval)
310 {
311 Select secondSelect = new Select().setName(name);
312
313 for (int currentSecond = 0; currentSecond <= 59; currentSecond += interval)
314 {
315 Option o = new Option();
316 o.addElement(nbrFmt.format(currentSecond));
317 o.setValue(currentSecond);
318 int nearestSecond =
319 ((now.get(Calendar.SECOND) / interval) * interval);
320
321 if (nearestSecond == currentSecond)
322 {
323 o.setSelected(true);
324 }
325 secondSelect.addElement(o);
326 }
327 return (secondSelect);
328 }
329
330
331
332
333
334
335
336 public static Select getMinuteSelector(String name)
337 {
338 return (getMinuteSelector(name, Calendar.getInstance()));
339 }
340
341
342
343
344
345
346
347
348 public static Select getMinuteSelector(String name, Calendar now)
349 {
350 return (getMinuteSelector(name, now, DEFAULT_MINUTE_INTERVAL));
351 }
352
353
354
355
356
357
358
359
360
361 public static Select getMinuteSelector(String name, Calendar now,
362 int interval)
363 {
364 Select minuteSelect = new Select().setName(name);
365
366 for (int curMinute = 0; curMinute <= 59; curMinute += interval)
367 {
368 Option o = new Option();
369 o.addElement(nbrFmt.format(curMinute));
370 o.setValue(curMinute);
371 int nearestMinute =
372 ((now.get(Calendar.MINUTE)) / interval) * interval;
373
374 if (nearestMinute == curMinute)
375 {
376 o.setSelected(true);
377 }
378 minuteSelect.addElement(o);
379 }
380 return (minuteSelect);
381 }
382
383
384
385
386
387
388
389 public static Select getHourSelector(String name)
390 {
391 return (getHourSelector(name, Calendar.getInstance()));
392 }
393
394
395
396
397
398
399
400
401 public static Select getHourSelector(String name, Calendar now)
402 {
403 return (getHourSelector(name, Calendar.getInstance(), TWELVE_HOUR));
404 }
405
406
407
408
409
410
411
412
413
414
415 public static Select getHourSelector(String name, Calendar now, int format)
416 {
417 Select hourSelect = new Select().setName(name);
418
419 if (format == TWENTY_FOUR_HOUR)
420 {
421 for (int currentHour = 0; currentHour <= 23; currentHour++)
422 {
423 Option o = new Option();
424 o.addElement(nbrFmt.format(currentHour));
425 o.setValue(currentHour);
426 if (now.get(Calendar.HOUR_OF_DAY) == currentHour)
427 {
428 o.setSelected(true);
429 }
430 hourSelect.addElement(o);
431 }
432 }
433 else
434 {
435 for (int curHour = 1; curHour <= 12; curHour++)
436 {
437 Option o = new Option();
438
439 o.addElement(nbrFmt.format(curHour));
440 o.setValue(curHour);
441 if (now.get(Calendar.AM_PM) == Calendar.AM)
442 {
443 if (((now.get(Calendar.HOUR_OF_DAY)) == 0) &&
444 (curHour == 12))
445 {
446 o.setSelected(true);
447 }
448 else
449 {
450 if (now.get(Calendar.HOUR_OF_DAY) == curHour)
451 {
452 o.setSelected(true);
453 }
454 }
455 }
456 else
457 {
458 if (((now.get(Calendar.HOUR_OF_DAY)) == 12) &&
459 (curHour == 12))
460 {
461 o.setSelected(true);
462 }
463 else
464 {
465 if (now.get(Calendar.HOUR_OF_DAY) == curHour + 12)
466 {
467 o.setSelected(true);
468 }
469 }
470 }
471 hourSelect.addElement(o);
472 }
473 }
474 return (hourSelect);
475 }
476
477
478
479
480
481
482
483 public static Select getAMPMSelector(String name)
484 {
485 Calendar c = Calendar.getInstance();
486 c.setTime(new Date());
487 return (getAMPMSelector(name, c));
488 }
489
490
491
492
493
494
495
496
497 public static Select getAMPMSelector(String name,
498 Calendar now)
499 {
500 Select ampmSelect = new Select().setName(name);
501
502 Option o = new Option();
503 o.addElement("am");
504 o.setValue(Calendar.AM);
505 if (now.get(Calendar.AM_PM) == Calendar.AM)
506 {
507 o.setSelected(true);
508 }
509 ampmSelect.addElement(o);
510
511 o = new Option();
512 o.addElement("pm");
513 o.setValue(Calendar.PM);
514 if (now.get(Calendar.AM_PM) == Calendar.PM)
515 {
516 o.setSelected(true);
517 }
518 ampmSelect.addElement(o);
519
520 return (ampmSelect);
521 }
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547 public String output()
548 {
549 return (ecsOutput().toString());
550 }
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576 @Override
577 public String toString()
578 {
579 return (ecsOutput().toString());
580 }
581
582
583
584
585
586
587 public ElementContainer ecsOutput()
588 {
589 if (this.useDate == null)
590 {
591 this.useDate = Calendar.getInstance();
592 this.useDate.setTime(new Date());
593 }
594
595 ConcreteElement secondSelect = null;
596
597 Select ampmSelect = getAMPMSelector(selName + AMPM_SUFFIX, useDate);
598
599 Select hourSelect = getHourSelector(selName + HOUR_SUFFIX,
600 useDate, this.timeFormat);
601
602 Select minuteSelect = getMinuteSelector(selName + MINUTE_SUFFIX,
603 useDate, this.minuteInterval);
604
605 if (this.showSeconds)
606 {
607 Select tmp = getSecondSelector(selName + SECOND_SUFFIX, useDate,
608 this.secondInterval);
609 if (onChangeSet)
610 {
611 tmp.setOnChange(onChange);
612 }
613 secondSelect = tmp;
614 }
615 else
616 {
617 secondSelect = new Input(Input.hidden,
618 selName + SECOND_SUFFIX,
619 setSeconds);
620 }
621
622 if (onChangeSet)
623 {
624 hourSelect.setOnChange(onChange);
625 minuteSelect.setOnChange(onChange);
626 ampmSelect.setOnChange(onChange);
627 }
628
629 ElementContainer ec = new ElementContainer();
630 ec.addElement(new Comment(
631 "== BEGIN org.apache.turbine.util.TimeSelector.ecsOutput() =="));
632 ec.addElement(hourSelect);
633 ec.addElement(":");
634 ec.addElement(minuteSelect);
635 if (this.showSeconds == true)
636 {
637 ec.addElement(":");
638 }
639 ec.addElement(secondSelect);
640 if (this.timeFormat == TimeSelector.TWELVE_HOUR)
641 {
642 ec.addElement(ampmSelect);
643 }
644 ec.addElement(new Comment(
645 "== END org.apache.turbine.util.TimeSelector.ecsOutput() =="));
646 return (ec);
647 }
648 }