001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 020 package org.apache.myfaces.tobago.model; 021 022 /* 023 * Created: Nov 20, 2002 10:05:10 PM 024 * $Id: CalendarModel.java 1368577 2012-08-02 16:20:31Z lofwyr $ 025 */ 026 027 028 import java.text.DecimalFormat; 029 import java.text.SimpleDateFormat; 030 import java.util.Calendar; 031 032 public class CalendarModel { 033 034 private DateModel[][] calendarArray; 035 private int firstDayOffset; 036 //private int firstDayOfWeek; 037 038 public CalendarModel(Calendar calendar) { 039 // int weekCount = CalendarUtils.weekCount(calendar); 040 int weekCount = 6; // switching off dynamic weekCount! 041 calendarArray = new DateModel[weekCount][7]; 042 Calendar c = (Calendar) calendar.clone(); 043 c.clear(Calendar.DAY_OF_MONTH); 044 c.set(Calendar.DAY_OF_MONTH, 1); 045 // assert c.isLenient() : "'add -x days' may not work in a non-lenient calendar"; 046 firstDayOffset = firstDayOffset(c); 047 //firstDayOfWeek = c.getFirstDayOfWeek(); 048 c.add(Calendar.DAY_OF_WEEK, -firstDayOffset); 049 for (int week = 0; week < weekCount; ++week) { 050 for (int day = 0; day < 7; ++day) { 051 calendarArray[week][day] = new DateModel(c); 052 c.add(Calendar.DAY_OF_MONTH, 1); 053 } 054 } 055 } 056 057 public int getWeekCount() { 058 return calendarArray.length; 059 } 060 061 public int getMonth() { 062 return calendarArray[0][firstDayOffset].getMonth(); 063 } 064 065 public int getYear() { 066 return calendarArray[0][firstDayOffset].getYear(); 067 } 068 069 public DateModel getDate(int week, int day) { 070 return calendarArray[week][day]; 071 } 072 073 private int firstDayOffset(Calendar calendar) { 074 Calendar c = (Calendar) calendar.clone(); 075 c.clear(Calendar.DAY_OF_MONTH); 076 c.set(Calendar.DAY_OF_MONTH, 1); 077 int day = c.get(Calendar.DAY_OF_WEEK); 078 int firstDayOfWeek = c.getFirstDayOfWeek(); 079 // Fails: assertEquals((1+7-3)%7, (1-3)%7); 080 return (day + 7 - firstDayOfWeek) % 7; 081 } 082 083 public String toString() { 084 StringBuilder buffer = new StringBuilder(); 085 buffer.append("Month: ").append(getMonth()).append("\n"); 086 int weekCount = getWeekCount(); 087 DecimalFormat format = new DecimalFormat("00"); 088 SimpleDateFormat dateFormat = new SimpleDateFormat("E"); 089 for (int day = 0; day < 7; ++day) { 090 DateModel date = getDate(0, day); 091 String dayName = dateFormat.format(date.getCalendar().getTime()); 092 buffer.append(dayName.substring(0, 2)).append(" "); 093 } 094 buffer.append("\n"); 095 for (int week = 0; week < weekCount; ++week) { 096 for (int day = 0; day < 7; ++day) { 097 DateModel date = getDate(week, day); 098 buffer.append(format.format(date.getDay())).append(" "); 099 } 100 buffer.append("\n"); 101 } 102 return buffer.toString(); 103 } 104 105 }