ugo 2004/04/15 09:15:50
Modified: src/java/org/apache/cocoon/generation CalendarGenerator.java
Log:
Added attributes for previous and next months.
Revision Changes Path
1.7 +36 -12
cocoon-2.1/src/java/org/apache/cocoon/generation/CalendarGenerator.java
Index: CalendarGenerator.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/generation/CalendarGenerator.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- CalendarGenerator.java 14 Apr 2004 18:53:39 -0000 1.6
+++ CalendarGenerator.java 15 Apr 2004 16:15:50 -0000 1.7
@@ -18,6 +18,7 @@
import java.io.IOException;
import java.io.Serializable;
import java.text.DateFormat;
+import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
@@ -41,7 +42,8 @@
* Here is a sample output:
* <pre>
* <calendar:calendar
xmlns:calendar="http://apache.org/cocoon/calendar/1.0"
- * year="2004" month="January">
+ * year="2004" month="January" prevMonth="12" prevYear="2003"
+ * nextMonth="02" nextYear="2004">
* <calendar:week number="1">
* <calendar:day number="1" date="January 1, 2004"/>
* <calendar:day number="2" date="January 2, 2004"/>
@@ -83,13 +85,20 @@
protected static final String PREFIX = "calendar";
/** Node and attribute names */
- protected static final String CALENDAR_NODE_NAME = "calendar";
- protected static final String WEEK_NODE_NAME = "week";
- protected static final String DAY_NODE_NAME = "day";
- protected static final String MONTH_ATTR_NAME = "month";
- protected static final String YEAR_ATTR_NAME = "year";
- protected static final String DATE_ATTR_NAME = "date";
- protected static final String NUMBER_ATTR_NAME = "number";
+ protected static final String CALENDAR_NODE_NAME = "calendar";
+ protected static final String WEEK_NODE_NAME = "week";
+ protected static final String DAY_NODE_NAME = "day";
+ protected static final String MONTH_ATTR_NAME = "month";
+ protected static final String YEAR_ATTR_NAME = "year";
+ protected static final String DATE_ATTR_NAME = "date";
+ protected static final String NUMBER_ATTR_NAME = "number";
+ protected static final String PREV_MONTH_ATTR_NAME = "prevMonth";
+ protected static final String PREV_YEAR_ATTR_NAME = "prevYear";
+ protected static final String NEXT_MONTH_ATTR_NAME = "nextMonth";
+ protected static final String NEXT_YEAR_ATTR_NAME = "nextYear";
+
+ /** Formatter for month number */
+ protected static final DecimalFormat monthNumberFormatter = new
DecimalFormat("00");
/** Convenience object, so we don't need to create an AttributesImpl for
every element. */
protected AttributesImpl attributes;
@@ -107,13 +116,13 @@
protected int month;
/** The format for dates */
- DateFormat dateFormatter;
+ protected DateFormat dateFormatter;
/** The format for month names */
- DateFormat monthFormatter;
+ protected DateFormat monthFormatter;
/** The current locale */
- Locale locale;
+ protected Locale locale;
/**
* Set the request parameters. Must be called before the generate method.
@@ -177,6 +186,10 @@
start.set(Calendar.DAY_OF_MONTH, 1);
Calendar end = (Calendar) start.clone();
end.add(Calendar.MONTH, 1);
+
+ // Determine previous and next months
+ Calendar prevMonth = (Calendar) start.clone();
+ prevMonth.add(Calendar.MONTH, -1);
this.contentHandler.startDocument();
this.contentHandler.startPrefixMapping(PREFIX, URI);
@@ -184,6 +197,17 @@
attributes.addAttribute("", YEAR_ATTR_NAME, YEAR_ATTR_NAME, "CDATA",
String.valueOf(year));
attributes.addAttribute("", MONTH_ATTR_NAME, MONTH_ATTR_NAME,
"CDATA",
monthFormatter.format(start.getTime()));
+
+ // Add previous and next month
+ attributes.addAttribute("", PREV_YEAR_ATTR_NAME,
PREV_YEAR_ATTR_NAME, "CDATA",
+ String.valueOf(prevMonth.get(Calendar.YEAR)));
+ attributes.addAttribute("", PREV_MONTH_ATTR_NAME,
PREV_MONTH_ATTR_NAME, "CDATA",
+ monthNumberFormatter.format(prevMonth.get(Calendar.MONTH) +
1));
+ attributes.addAttribute("", NEXT_YEAR_ATTR_NAME,
NEXT_YEAR_ATTR_NAME, "CDATA",
+ String.valueOf(end.get(Calendar.YEAR)));
+ attributes.addAttribute("", NEXT_MONTH_ATTR_NAME,
NEXT_MONTH_ATTR_NAME, "CDATA",
+ monthNumberFormatter.format(end.get(Calendar.MONTH) + 1));
+
this.contentHandler.startElement(URI, CALENDAR_NODE_NAME,
PREFIX + ':' + CALENDAR_NODE_NAME, attributes);
int weekNo = start.get(Calendar.WEEK_OF_MONTH);