Author: snoopdave
Date: Fri Aug 10 09:32:37 2007
New Revision: 564661
URL: http://svn.apache.org/viewvc?view=rev&rev=564661
Log:
Fix for:
"WeblogCalendarModel should use timezone setting of weblog consistently"
http://opensource.atlassian.com/projects/roller/browse/ROL-1515
Modified:
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel.java
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/pagers/AbstractWeblogEntriesPager.java
Modified:
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel.java
URL:
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel.java?view=diff&rev=564661&r1=564660&r2=564661
==============================================================================
---
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel.java
(original)
+++
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel.java
Fri Aug 10 09:32:37 2007
@@ -24,7 +24,11 @@
import java.util.Date;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
+import java.util.TimeZone;
+
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.WebloggerException;
@@ -65,7 +69,9 @@
pageRequest.getWeblogHandle());
}
pageLink = pageRequest.getWeblogPageName();
- day =
DateUtil.parseWeblogURLDateString(pageRequest.getWeblogDate(),
+// day =
DateUtil.parseWeblogURLDateString(pageRequest.getWeblogDate(),
+// weblog.getTimeZoneInstance(),
weblog.getLocaleInstance());
+ day = parseWeblogURLDateString(pageRequest.getWeblogDate(),
weblog.getTimeZoneInstance(), weblog.getLocaleInstance());
locale = pageRequest.getLocale();
@@ -92,8 +98,8 @@
weblog.getLocaleInstance());
Calendar cal = (Calendar)calendar.clone();
- Date startDate = DateUtil.getStartOfMonth(month);
- Date endDate = DateUtil.getEndOfMonth(month);
+ Date startDate = DateUtil.getStartOfMonth(month,cal);
+ Date endDate = DateUtil.getEndOfMonth(month,cal);
// Determine previous non-empty month
// Get entries before startDate, using category restriction limit 1
@@ -105,7 +111,8 @@
weblog, // website
null, // user
null, // startDate
- startDate, // endDate
+ // since we need an entry.pubTime<startDate, but the
method use <=
+ new Date(startDate.getTime()-1), //
endDate
cat, // cat
null,WeblogEntry.PUBLISHED, // status
null, // text
@@ -115,7 +122,7 @@
0, 1); // offset, range
if (prevEntries.size() > 0) {
WeblogEntry prevEntry = (WeblogEntry)prevEntries.get(0);
- prevMonth = DateUtil.getStartOfMonth(new
Date(prevEntry.getPubTime().getTime()));
+ prevMonth = DateUtil.getStartOfMonth(new
Date(prevEntry.getPubTime().getTime()),getCalendar());
}
} catch (WebloggerException e) {
log.error("ERROR determining previous non-empty month");
@@ -130,7 +137,8 @@
weblog, // website
null, // user
- endDate, // startDate
+ // since we need an entry.pubTime>endDate, but the method
use >=
+ new Date(endDate.getTime()+1), //
startDate
null, // endDate
cat, // cat
null,WeblogEntry.PUBLISHED, // status
@@ -141,7 +149,7 @@
0, 1); // offset, range
if (nextEntries.size() > 0) {
WeblogEntry nextEntry = (WeblogEntry)nextEntries.get(0);
- nextMonth = DateUtil.getStartOfMonth(new
Date(nextEntry.getPubTime().getTime()));
+ nextMonth = DateUtil.getStartOfMonth(new
Date(nextEntry.getPubTime().getTime()),getCalendar());
}
} catch (WebloggerException e) {
log.error("ERROR determining next non-empty month");
@@ -149,7 +157,10 @@
// Fix for ROL-840 Don't include future entries
Date now = new Date();
- if (endDate.after(now)) endDate = now;
+ if (endDate.after(now)) {
+ endDate = now;
+ nextMonth = null;
+ }
loadWeblogEntries(startDate, endDate, cat);
}
@@ -174,6 +185,7 @@
public void setDay(String month) throws Exception {
SimpleDateFormat fmt = DateUtil.get8charDateFormat();
+ fmt.setCalendar(getCalendar());
ParsePosition pos = new ParsePosition(0);
initDay( fmt.parse( month, pos ) );
}
@@ -185,6 +197,71 @@
public String getParameterValue(Date day) {
return (String)monthMap.get( day );
}
+
+ // convenience method returns 8 char day stamp YYYYMMDD
+ public static String format8chars(Date date, Calendar cal) {
+ SimpleDateFormat format = DateUtil.get8charDateFormat();
+ format.setCalendar(cal);
+ return DateUtil.format(date,format);
+ }
+
+
+ // convenience method returns 6 char month stamp YYYYMM
+ public static String format6chars(Date date, Calendar cal) {
+ SimpleDateFormat format = DateUtil.get6charDateFormat();
+ format.setCalendar(cal);
+ return DateUtil.format(date,format);
+ }
+
+ /**
+ * Parse data as either 6-char or 8-char format.
+ */
+ public static Date parseWeblogURLDateString(String dateString, TimeZone
tz, Locale locale) {
+
+ Date ret = new Date();
+ Calendar cal = Calendar.getInstance(tz,locale);
+
+ if (dateString != null
+ && dateString.length()==8
+ && StringUtils.isNumeric(dateString) ) {
+ SimpleDateFormat char8DateFormat = DateUtil.get8charDateFormat();
+ char8DateFormat.setCalendar(cal);
+ ParsePosition pos = new ParsePosition(0);
+ ret = char8DateFormat.parse(dateString, pos);
+
+ // make sure the requested date is not in the future
+// Date today = null;
+// Calendar todayCal = Calendar.getInstance();
+// todayCal = Calendar.getInstance(tz, locale);
+// todayCal.setTime(new Date());
+// today = todayCal.getTime();
+ // Date is always ms offset from epoch in UTC, by no means of
timezone.
+ Date today = new Date();
+ if(ret.after(today)) {
+ ret = today;
+ }
+
+ } else if(dateString != null
+ && dateString.length()==6
+ && StringUtils.isNumeric(dateString)) {
+ SimpleDateFormat char6DateFormat = DateUtil.get6charDateFormat();
+ char6DateFormat.setCalendar(cal);
+ ParsePosition pos = new ParsePosition(0);
+ ret = char6DateFormat.parse(dateString, pos);
+
+ // make sure the requested date is not in the future
+// Calendar todayCal = Calendar.getInstance();
+// todayCal = Calendar.getInstance(tz, locale);
+// todayCal.setTime(new Date());
+// Date today = todayCal.getTime();
+ Date today = new Date();
+ if(ret.after(today)) {
+ ret = today;
+ }
+ }
+
+ return ret;
+ }
/**
* Create URL for use on view-weblog page
@@ -199,8 +276,10 @@
if (dateString == null && !alwaysURL) return null;
else if (dateString == null && !monthURL) {
dateString = DateUtil.format8chars(day);
+ dateString = format8chars(day,getCalendar());
} else if (dateString == null && monthURL) {
- dateString = DateUtil.format6chars(day);
+// dateString = DateUtil.format6chars(day);
+ dateString = format6chars(day,getCalendar());
}
try {
if (pageLink == null) { // create date URL
@@ -239,7 +318,13 @@
}
public String computeTodayMonthUrl() {
- return
WebloggerFactory.getWeblogger().getUrlStrategy().getWeblogCollectionURL(weblog,
locale, cat, null, null, -1, false);
+ String url;
+ if (pageLink == null) { // create default URL
+ url =
WebloggerFactory.getWeblogger().getUrlStrategy().getWeblogCollectionURL(weblog,
locale, cat, null, null, -1, false);
+ } else { // create page URL
+ url =
WebloggerFactory.getWeblogger().getUrlStrategy().getWeblogPageURL(weblog,
locale, pageLink, null, cat, null, null, -1, false);
+ }
+ return url;
}
}
Modified:
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/pagers/AbstractWeblogEntriesPager.java
URL:
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/pagers/AbstractWeblogEntriesPager.java?view=diff&rev=564661&r1=564660&r2=564661
==============================================================================
---
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/pagers/AbstractWeblogEntriesPager.java
(original)
+++
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/pagers/AbstractWeblogEntriesPager.java
Fri Aug 10 09:32:37 2007
@@ -189,9 +189,12 @@
Date ret = null;
SimpleDateFormat char8DateFormat = DateUtil.get8charDateFormat();
SimpleDateFormat char6DateFormat = DateUtil.get6charDateFormat();
+ Calendar cal = Calendar.getInstance(
+ weblog.getTimeZoneInstance(), weblog.getLocaleInstance());
if ( dateString!=null
&& dateString.length()==8
&& StringUtils.isNumeric(dateString) ) {
+ char8DateFormat.setCalendar(cal);
ParsePosition pos = new ParsePosition(0);
ret = char8DateFormat.parse( dateString, pos );
@@ -202,6 +205,7 @@
if ( dateString!=null
&& dateString.length()==6
&& StringUtils.isNumeric(dateString) ) {
+ char6DateFormat.setCalendar(cal);
ParsePosition pos = new ParsePosition(0);
ret = char6DateFormat.parse( dateString, pos );