1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.tobago.model;
21
22 import java.text.DecimalFormat;
23 import java.text.SimpleDateFormat;
24 import java.util.Calendar;
25
26 public class CalendarModel {
27
28 private DateModel[][] calendarArray;
29 private int firstDayOffset;
30
31 public CalendarModel(Calendar calendar) {
32
33 int weekCount = 6;
34 calendarArray = new DateModel[weekCount][7];
35 Calendar c = (Calendar) calendar.clone();
36 c.clear(Calendar.DAY_OF_MONTH);
37 c.set(Calendar.DAY_OF_MONTH, 1);
38
39 firstDayOffset = firstDayOffset(c);
40 c.add(Calendar.DAY_OF_WEEK, -firstDayOffset);
41 for (int week = 0; week < weekCount; ++week) {
42 for (int day = 0; day < 7; ++day) {
43 calendarArray[week][day] = new DateModel(c);
44 c.add(Calendar.DAY_OF_MONTH, 1);
45 }
46 }
47 }
48
49 public int getWeekCount() {
50 return calendarArray.length;
51 }
52
53 public int getMonth() {
54 return calendarArray[0][firstDayOffset].getMonth();
55 }
56
57 public int getYear() {
58 return calendarArray[0][firstDayOffset].getYear();
59 }
60
61 public DateModel getDate(int week, int day) {
62 return calendarArray[week][day];
63 }
64
65 private int firstDayOffset(Calendar calendar) {
66 Calendar c = (Calendar) calendar.clone();
67 c.clear(Calendar.DAY_OF_MONTH);
68 c.set(Calendar.DAY_OF_MONTH, 1);
69 int day = c.get(Calendar.DAY_OF_WEEK);
70 int firstDayOfWeek = c.getFirstDayOfWeek();
71
72 return (day + 7 - firstDayOfWeek) % 7;
73 }
74
75 public String toString() {
76 StringBuilder buffer = new StringBuilder();
77 buffer.append("Month: ").append(getMonth()).append("\n");
78 int weekCount = getWeekCount();
79 DecimalFormat format = new DecimalFormat("00");
80 SimpleDateFormat dateFormat = new SimpleDateFormat("E");
81 for (int day = 0; day < 7; ++day) {
82 DateModel date = getDate(0, day);
83 String dayName = dateFormat.format(date.getCalendar().getTime());
84 buffer.append(dayName.substring(0, 2)).append(" ");
85 }
86 buffer.append("\n");
87 for (int week = 0; week < weekCount; ++week) {
88 for (int day = 0; day < 7; ++day) {
89 DateModel date = getDate(week, day);
90 buffer.append(format.format(date.getDay())).append(" ");
91 }
92 buffer.append("\n");
93 }
94 return buffer.toString();
95 }
96
97 }