<%@ page import="java.util.Calendar" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.Dictionary" %>
<%@ page import="java.util.Hashtable" %>
<%@ page import="java.util.Locale" %>
<%@ page import="java.text.DateFormatSymbols" %>
<%!
private static final Dictionary dates = new Hashtable();
static
{
// certainly not an exhaustive list,
// but at least one per month
dates.put("1/27", "Wolfgang Amadeus Mozart, 1756");
dates.put("2/3", "Felix Mendelssohn, 1809");
dates.put("2/23", "Georg Friedrich Handel, 1685");
dates.put("3/21", "Johann Sebastian Bach, 1685");
dates.put("3/25", "Bela Bartok, 1881");
dates.put("3/31", "Franz Joseph Haydn, 1732");
dates.put("4/27", "Sergei Prokofiev, 1891");
dates.put("5/5", "Johannes Brahms, 1833");
dates.put("6/2", "Sir Edward Elgar, 1857");
dates.put("6/15", "Edward Grieg, 1843");
dates.put("7/3", "Leos Janacek, 1854");
dates.put("7/7", "Gustav Mahler, 1860");
dates.put("8/22", "Claude Debussy, 1862");
dates.put("9/4", "Anton Bruckner, 1824");
dates.put("9/8", "Anton Dvorak, 1841");
dates.put("9/26", "George Gershwin, 1898");
dates.put("10/20", "Charles Ives, 1874");
dates.put("10/22", "Franz List, 1811");
dates.put("11/18", "Carl Weber, 1786");
dates.put("12/10", "Cesar Franck, 1822");
dates.put("12/15", "Ludwig van Beethoven, 1770");
dates.put("12/30", "Dmitri Kabalevsky, 1904");
}
%>
<%
Locale locale = Locale.getDefault();
String event;
Calendar calendar = Calendar.getInstance(locale);
int firstDayOfWeek = calendar.getFirstDayOfWeek();
DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
// weekday names is one-based; [0] is empty
String[] dayNames;
{
String[] originalDayNames = dateFormatSymbols.getShortWeekdays();
dayNames = new String[originalDayNames.length-1];
System.arraycopy(
originalDayNames, firstDayOfWeek,
dayNames, 0, dayNames.length-(firstDayOfWeek-1));
if ( firstDayOfWeek != 1 )
{
System.arraycopy(
originalDayNames, 1,
dayNames, dayNames.length-(firstDayOfWeek-1), firstDayOfWeek-1);
}
}
String[] monthNames = dateFormatSymbols.getMonths();
// get info about today
int thisDay = calendar.get(Calendar.DAY_OF_MONTH);
int thisMonth = calendar.get(Calendar.MONTH);
int thisYear = calendar.get(Calendar.YEAR);
// get requested month/year
int calendarMonth;
int calendarYear;
String sMonth = request.getParameter("month");
String sYear = request.getParameter("year");
if ( sMonth != null && sMonth.length() > 0 )
{
calendarMonth = Integer.parseInt(sMonth);
}
else
{
calendarMonth = thisMonth;
}
if ( sYear != null && sYear.length() > 0 )
{
calendarYear = Integer.parseInt(sYear);
}
else
{
calendarYear = thisYear;
}
String monthName = monthNames[calendarMonth];
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.MONTH, calendarMonth);
calendar.set(Calendar.YEAR, calendarYear);
// what weekday is the first day of the month?
int firstWeekdayOfMonth = calendar.get(Calendar.DAY_OF_WEEK);
// calendarDay contains the day of the month. It is initialized to
// a negative value and incremented for each cell in the calendar
// so that its value is 1 on the cell for the first day of the month.
int calendarDay = 1 + firstDayOfWeek - firstWeekdayOfMonth;
// what's the last day of the month?
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_MONTH, -1);
int lastDayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
int lastWeekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);
// set up the links
int maxMonth = calendar.getMaximum(Calendar.MONTH);
int prevMonth = calendarMonth - 1;
int prevYear = calendarYear;
if ( prevMonth < 0 )
{
prevMonth = maxMonth;
--prevYear;
}
int nextMonth = calendarMonth + 1;
int nextYear = calendarYear;
if ( nextMonth > maxMonth )
{
nextMonth = 0;
++nextYear;
}
%>
monthName + " " + calendarYear
monthName + " " + calendarYear
dayNames
dayName
int weekOfMonth = 0;
weekOfMonth < lastWeekOfMonth;
++weekOfMonth
int dayOfWeek = 0; dayOfWeek < dayNames.length; ++dayOfWeek, ++calendarDay
calendarDay == thisDay && calendarMonth == thisMonth && calendarYear == thisYear
today
1 <= calendarDay && calendarDay <= lastDayOfMonth
? "this-month"
: "other-month"
1 <= calendarDay && calendarDay <= lastDayOfMonth
? String.valueOf(calendarDay)
: " "
null != (event = (String) dates.get(String.valueOf(calendarMonth+1) + "/" + String.valueOf(calendarDay)))
event
response.encodeURL(request.getRequestURI()
+ "?month=" + prevMonth
+ "&year=" + prevYear)
response.encodeURL(request.getRequestURI()
+ "?month=" + nextMonth
+ "&year=" + nextYear)