Mega Code Archive

 
Categories / Java / JSP
 

Print a month page

/*  * Copyright (c) Ian F. Darwin, http://www.darwinsys.com/, 1996-2002.  * All rights reserved. Software written by Ian F. Darwin and others.  * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  * 1. Redistributions of source code must retain the above copyright  *    notice, this list of conditions and the following disclaimer.  * 2. Redistributions in binary form must reproduce the above copyright  *    notice, this list of conditions and the following disclaimer in the  *    documentation and/or other materials provided with the distribution.  *  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE  * POSSIBILITY OF SUCH DAMAGE.  *   * Java, the Duke mascot, and all variants of Sun's Java "steaming coffee  * cup" logo are trademarks of Sun Microsystems. Sun's, and James Gosling's,  * pioneering role in inventing and promulgating (and standardizing) the Java   * language and environment is gratefully acknowledged.  *   * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for  * inventing predecessor languages C and C++ is also gratefully acknowledged.  */ <%@page import="java.util.*,java.text.*" %> <head>   <title>Print a month page.</title>   <meta name="version"     content="$Id: CalendarPage.jsp,v 1.6 2004/02/09 03:33:53 ian Exp $"> </head> <body bgcolor="white"> <h1>Print a month page, for the Western calendar.</h1> <P>Author Ian F. Darwin, http://www.darwinsys.com/ <%  // First get the month and year from the form.   boolean yyok = false;  // -1 is a valid year, use boolean   int yy = 0, mm = 0;   String yyString = request.getParameter("year");   if (yyString != null && yyString.length() > 0) {     try {       yy = Integer.parseInt(yyString);       yyok = true;     } catch (NumberFormatException e) {       out.println("Year " + yyString + " invalid");     }   }   Calendar c = Calendar.getInstance();   if (!yyok)     yy = c.get(Calendar.YEAR);   String mmString = request.getParameter("month");   if (mmString == null) {     mm = c.get(Calendar.MONTH);   } else {     for (int i=0; i<months.length; i++)       if (months[i].equals(mmString)) {         mm = i;         break;       }   }  %> <form method=post action="CalendarPage.jsp">   Month: <select name=month>   <% for (int i=0; i<months.length; i++) {     if (i==mm)       out.print("<option selected>");     else       out.print("<option>");     out.print(months[i]);     out.println("</option>");   }   %>   </select>   Year (4-digit):      <input type="text" size="5" name="year"       value="<%= yy %>"></input>   <input type=submit value="Display"> </form> <%!   /** The names of the months */   String[] months = {     "January", "February", "March", "April",     "May", "June", "July", "August",     "September", "October", "November", "December"   };   /** The days in each month. */   int dom[] = {       31, 28, 31, 30,  /* jan feb mar apr */       31, 30, 31, 31, /* may jun jul aug */       30, 31, 30, 31  /* sep oct nov dec */   }; %> <%   /** The number of days to leave blank at the start of this month */   int leadGap = 0; %> <table border=1> <tr><th colspan=7><%= months[mm] %>  <%= yy %></tr> <tr><td>Su<td>Mo<td>Tu<td>We<td>Th<td>Fr<td>Sa</tr> <%     GregorianCalendar calendar = new GregorianCalendar(yy, mm, 1);     // Compute how much to leave before the first.     // getDay() returns 0 for Sunday, which is just right.     leadGap = calendar.get(Calendar.DAY_OF_WEEK)-1;     int daysInMonth = dom[mm];     if (calendar.isLeapYear(calendar.get(Calendar.YEAR)) && mm == 1)       ++daysInMonth;     out.print("<tr>");     // Blank out the labels before 1st day of month     for (int i = 0; i < leadGap; i++) {       out.print("<td>&nbsp;");     }     // Fill in numbers for the day of month.     for (int i = 1; i <= daysInMonth; i++) {       out.print("<td>");       out.print(i);       out.print("</td>");       if ((leadGap + i) % 7 == 0) {    // wrap if end of line.         out.println("</tr>");         out.print("<tr>");       }     } %> </tr> </table>