You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2006/06/30 03:38:20 UTC
svn commit: r418161 - in
/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering:
model/PageRenderModel.java util/WeblogEntriesCollectionPager.java
util/WeblogEntriesPager.java util/WeblogEntriesPermalinkPager.java
Author: agilliland
Date: Thu Jun 29 18:38:19 2006
New Revision: 418161
URL: http://svn.apache.org/viewvc?rev=418161&view=rev
Log:
modifying implementation of entry pager and updating page render model to use entry pager. we now have 2 entry pagers, 1 for a single entry pager, and one for
a collection entry pager.
NOTE: these changes have not been tested yet.
Added:
incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesCollectionPager.java
incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesPermalinkPager.java
Modified:
incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PageRenderModel.java
incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesPager.java
Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PageRenderModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PageRenderModel.java?rev=418161&r1=418160&r2=418161&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PageRenderModel.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PageRenderModel.java Thu Jun 29 18:38:19 2006
@@ -15,6 +15,7 @@
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
+
package org.apache.roller.ui.rendering.model;
import java.util.ArrayList;
@@ -41,32 +42,38 @@
import org.apache.roller.pojos.wrapper.WebsiteDataWrapper;
import org.apache.roller.ui.authoring.struts.formbeans.CommentFormEx;
import org.apache.roller.ui.core.RollerSession;
+import org.apache.roller.ui.rendering.util.WeblogEntriesPager;
import org.apache.roller.ui.rendering.util.WeblogPageRequest;
+
/**
* Model provides information needed to render a weblog page.
*/
public class PageRenderModel implements RenderModel {
+
+ protected static Log log = LogFactory.getLog(PageRenderModel.class);
+
private HttpServletRequest request = null;
private WebsiteData weblog = null;
private int offset = 0;
private String categoryPath = null;
private String entryAnchor = null;
private String dateString = null;
+ private int page = 0;
private WeblogEntryDataWrapper nextEntry = null;
private WeblogEntryDataWrapper prevEntry = null;
private WeblogEntryDataWrapper firstEntry = null;
private WeblogEntryDataWrapper lastEntry = null;
- protected static Log log =
- LogFactory.getFactory().getInstance(PageRenderModel.class);
+ private WeblogEntriesPager pager = null;
+
/**
* Creates an un-initialized new instance, Roller calls init() to complete
* construction.
*/
- public PageRenderModel() {
- }
+ public PageRenderModel() {}
+
/**
* Template context name to be used for model.
@@ -75,6 +82,7 @@
return "model";
}
+
/**
* Init page model based on request.
*/
@@ -92,11 +100,19 @@
categoryPath = parsed.getWeblogCategory();
entryAnchor = parsed.getWeblogAnchor();
dateString = parsed.getWeblogDate();
+ page = parsed.getPageNum();
+
+ // lookup weblog object
Roller roller = RollerFactory.getRoller();
UserManager umgr = roller.getUserManager();
weblog = umgr.getWebsiteByHandle(parsed.getWeblogHandle(), Boolean.TRUE);
+
+ // get the entry pager which represents this page
+ this.pager = WeblogEntriesPager.getWeblogEntriesPager(
+ weblog, entryAnchor, dateString, categoryPath, page);
}
+
/**
* Get weblog being displayed.
*/
@@ -104,29 +120,91 @@
return WebsiteDataWrapper.wrap(weblog);
}
+
/**
- * Get weblog entry to be displayed; null if not on single-entry page or
- * if entry not published. The entry is also available from teh pager,
- * so this is a convenience method.
+ * Is this page considered a permalink?
*/
- public WeblogEntryDataWrapper getWeblogEntry() {
- WeblogEntryDataWrapper ret = null;
- try {
- Roller roller = RollerFactory.getRoller();
- WeblogManager wmgr = roller.getWeblogManager();
- WeblogEntryData entry =
- wmgr.getWeblogEntryByAnchor(weblog, entryAnchor);
- if (entry != null && entry.getStatus().equals(WeblogEntryData.PUBLISHED)) {
- ret = WeblogEntryDataWrapper.wrap(entry);
- }
-
- } catch (Exception e) {
- log.error("ERROR: fetching entry");
- }
- return ret;
+ public boolean isPermalink() {
+ return false;
+ }
+
+
+ /**
+ * A map of entries representing this page.
+ *
+ * The collection is grouped by days of entries. Each value is a list of
+ * entry objects keyed by the date they were published.
+ */
+ public Map getEntries() {
+ return this.pager.getEntries();
+ }
+
+
+ /**
+ * Link value for next collection view
+ */
+ public String getNextLink() {
+ return this.pager.getNextLink();
+ }
+
+ /**
+ * Link name for next collection view
+ */
+ public String getNextLinkName() {
+ return this.pager.getNextLinkName();
+ }
+
+ /**
+ * Link value for prev collection view
+ */
+ public String getPrevLink() {
+ return this.pager.getPrevLink();
+ }
+
+ /**
+ * Link name for prev collection view
+ */
+ public String getPrevLinkName() {
+ return this.pager.getPrevLinkName();
+ }
+
+ /**
+ * Does this pager represent a multi-page collection?
+ */
+ public boolean isMultiPage() {
+ return this.pager.isMultiPage();
}
/**
+ * Link value for next page in current collection view
+ */
+ public String getNextPageLink() {
+ return this.pager.getNextPageLink();
+ }
+
+ /**
+ * Link name for next page in current collection view
+ */
+ public String getNextPageName() {
+ return this.pager.getNextPageName();
+ }
+
+ /**
+ * Link value for prev page in current collection view
+ */
+ public String getPrevPageLink() {
+ return this.pager.getPrevPageLink();
+ }
+
+ /**
+ * Link value for prev page in current collection view
+ */
+ public String getPrevPageName() {
+ return this.pager.getPrevPageName();
+ }
+
+
+ /**
* Get weblog category specified by request, or null if the category path
* found in the request does not exist in the current weblog.
*/
@@ -145,14 +223,7 @@
}
return ret;
}
-
- /**
- * Return pager for displaying weblog entries, next/prev pagers, etc.
- */
- public RenderDayPager getWeblogEntriesPager(String cat) {
- return new WeblogEntriesPager(
- request, weblog, entryAnchor, categoryPath, cat, dateString);
- }
+
/**
* Get up to 100 most recent published entries in weblog.
@@ -190,6 +261,7 @@
return recentEntries;
}
+
/**
* Get up to 100 most recent approved and non-spam comments in weblog.
* @param length Max entries to return (1-100)
@@ -226,6 +298,7 @@
return recentComments;
}
+
/**
* Get comment form to be displayed, may contain preview data.
* @return Comment form object or null if not on a comment page.
@@ -243,6 +316,7 @@
}
return commentForm;
}
+
/**
* Get preview comment or null if none exists.
Added: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesCollectionPager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesCollectionPager.java?rev=418161&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesCollectionPager.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesCollectionPager.java Thu Jun 29 18:38:19 2006
@@ -0,0 +1,343 @@
+/*
+ * WeblogEntriesCollectionPager.java
+ *
+ * Created on June 29, 2006, 3:09 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.apache.roller.ui.rendering.util;
+
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.RollerException;
+import org.apache.roller.model.RollerFactory;
+import org.apache.roller.pojos.WeblogEntryData;
+import org.apache.roller.pojos.WebsiteData;
+import org.apache.roller.pojos.wrapper.WeblogEntryDataWrapper;
+import org.apache.roller.util.DateUtil;
+
+
+/**
+ * We're paging through the latest entries in the blog.
+ * In this mode there's no prev/next collection.
+ */
+public class WeblogEntriesCollectionPager extends WeblogEntriesPager {
+
+ private static Log log = LogFactory.getLog(WeblogEntriesCollectionPager.class);
+
+ private Map entries = null;
+
+ private WebsiteData weblog = null;
+ private String dateString = null;
+ private String catPath = null;
+ private int page = 0;
+
+ // these will help define the boundaries of the entries query
+ private Date startDate = null;
+ private Date endDate = null;
+ private int offset = 0;
+ private int length = 0;
+
+ // next/prev link variables
+ private String nextLink = null;
+ private String nextLinkName = null;
+ private String prevLink = null;
+ private String prevLinkName = null;
+
+
+ public WeblogEntriesCollectionPager(WebsiteData weblog, String dateString,
+ String catPath, int page) {
+
+ this.weblog = weblog;
+ this.dateString = dateString;
+ this.catPath = catPath;
+ if(page > 0) {
+ this.page = page;
+ }
+
+ // calculate offset and length
+ this.length = weblog.getEntryDisplayCount();
+ this.offset = length * page;
+
+ // if we have a date string then do date calculations
+ Date thisDate = null;
+ Date nextDate = null;
+ Date prevDate = null;
+ String nextDateString = null;
+ String prevDateString = null;
+ if(dateString != null) {
+ Calendar cal = Calendar.getInstance();
+
+ // parse date string and figure out date
+ thisDate = parseDate(dateString, weblog);
+
+ // single day
+ if(dateString.length() == 8) {
+ // calculate next day
+ cal.setTime(thisDate);
+ cal.add(Calendar.DAY_OF_MONTH, 1);
+ cal.set(Calendar.HOUR, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ nextDate = cal.getTime();
+ if(nextDate.after(getToday(weblog))) {
+ nextDate = null;
+ }
+
+ // calculate next day date string
+ nextDateString = DateUtil.format8chars(nextDate);
+
+ // calculate previous day
+ cal.setTime(thisDate);
+ cal.add(Calendar.DAY_OF_MONTH, -1);
+ cal.set(Calendar.HOUR, 23);
+ cal.set(Calendar.MINUTE, 59);
+ cal.set(Calendar.SECOND, 59);
+ prevDate = cal.getTime();
+
+ // calculate prev day date string
+ prevDateString = DateUtil.format8chars(prevDate);
+
+ // calculate query start/end dates
+ cal = Calendar.getInstance(weblog.getTimeZoneInstance());
+ startDate = DateUtil.getStartOfDay(thisDate, cal);
+ endDate = DateUtil.getEndOfDay(thisDate, cal);
+
+ // single month
+ } else if(dateString.length() == 6) {
+ // calculate next month
+ cal.setTime(thisDate);
+ cal.add(Calendar.MONTH, 1);
+ nextDate = cal.getTime();
+ if(nextDate.after(getToday(weblog))) {
+ nextDate = null;
+ }
+
+ // calculate next month date string
+ nextDateString = DateUtil.format6chars(nextDate);
+
+ // calculate previous month
+ cal.setTime(thisDate);
+ cal.add(Calendar.MONTH, -1);
+ prevDate = cal.getTime();
+
+ // calculate prev month date string
+ prevDateString = DateUtil.format6chars(prevDate);
+
+ // calculate query start/end dates
+ cal = Calendar.getInstance(weblog.getTimeZoneInstance());
+ startDate = DateUtil.getStartOfMonth(thisDate, cal);
+ endDate = DateUtil.getEndOfMonth(thisDate, cal);
+ }
+ }
+
+ // finally, calculate next/prev links and link names
+ if(dateString != null & catPath != null) {
+ nextLink = weblog.getURL()+"?date="+nextDateString+"&cat="+catPath+"&page="+page++;
+ nextLinkName = nextDateString;
+ prevLink = weblog.getURL()+"?date="+prevDateString+"&cat="+catPath;
+ prevLinkName = prevDateString;
+
+ if(page > 1) {
+ prevLink += "&page="+page--;
+ }
+
+ } else if(dateString != null) {
+ nextLink = weblog.getURL()+"/date/"+nextDateString;
+ nextLinkName = nextDateString;
+ prevLink = weblog.getURL()+"/date/"+prevDateString;
+ prevLinkName = prevDateString;
+
+ nextLink += "?page="+page++;
+ if(page > 1) {
+ prevLink += "?page="+page--;
+ }
+ } else {
+ // there is no next/prev paging for homepage or just category
+ }
+ }
+
+
+ public Map getEntries() {
+
+ if(this.entries == null) {
+ try {
+ this.entries = getEntriesMap(weblog, startDate, endDate,
+ catPath, offset, length);
+ } catch (RollerException ex) {
+ log.error("Error getting entries", ex);
+ }
+ }
+
+ return this.entries;
+ }
+
+
+ public String getNextLink() {
+ return nextLink;
+ }
+
+
+ public String getNextLinkName() {
+ return nextLinkName;
+ }
+
+
+ public String getPrevLink() {
+ return prevLink;
+ }
+
+
+ public String getPrevLinkName() {
+ return prevLinkName;
+ }
+
+
+ // TODO 3.0: calculate # of entries and figure this out
+// public boolean isMultiPage() {
+// return more;
+// }
+//
+//
+// public String getNextPageLink() {
+// String ret = null;
+// if (more) {
+// ret = getCurrentPageLink() + "?page=" + this.page++;
+// }
+// return ret;
+// }
+
+
+ public String getNextPageLinkName() {
+ String ret = null;
+ if (getNextLink() != null) {
+ ret = "Next"; // TODO: I18N
+ }
+ return ret;
+ }
+
+
+ public String getPrevPageLink() {
+ String ret = null;
+ if(this.page > 0) {
+ ret = getCurrentPageLink() + "?page=" + this.page--;
+ }
+ return ret;
+ }
+
+
+ public String getPrevPageLinkName() {
+ String ret = null;
+ if (getNextLink() != null) {
+ ret = "Prev"; // TODO: I18N
+ }
+ return ret;
+ }
+
+
+ private String getCurrentPageLink() {
+ return weblog.getURL();
+ }
+
+
+ /**
+ * Convenience method for querying for a map of entries and getting the
+ * results wrapped using our pojo wrappers.
+ */
+ Map getEntriesMap(WebsiteData weblog, Date start, Date end,
+ String catPath, int offset, int length)
+ throws RollerException {
+
+ Map entries = new TreeMap();
+
+ Map mmap = RollerFactory.getRoller().getWeblogManager().getWeblogEntryObjectMap(
+ weblog,
+ start,
+ end,
+ catPath,
+ WeblogEntryData.PUBLISHED,
+ offset,
+ length);
+
+ // need to wrap pojos
+ java.util.Date key = null;
+ Iterator days = mmap.keySet().iterator();
+ while(days.hasNext()) {
+ key = (java.util.Date)days.next();
+
+ // now we need to go through each entry in a day and wrap
+ List wrapped = new ArrayList();
+ List unwrapped= (List) mmap.get(key);
+ for(int i=0; i < unwrapped.size(); i++) {
+ wrapped.add(i,
+ WeblogEntryDataWrapper.wrap((WeblogEntryData)unwrapped.get(i)));
+ }
+ entries.put(key, wrapped);
+ }
+
+ return entries;
+ }
+
+
+ /**
+ * Parse data as either 6-char or 8-char format.
+ */
+ Date parseDate(String dateString, WebsiteData weblog) {
+
+ Date ret = null;
+ SimpleDateFormat char8DateFormat = DateUtil.get8charDateFormat();
+ SimpleDateFormat char6DateFormat = DateUtil.get6charDateFormat();
+
+ if (dateString != null
+ && dateString.length()==8
+ && StringUtils.isNumeric(dateString) ) {
+ ParsePosition pos = new ParsePosition(0);
+ ret = char8DateFormat.parse(dateString, pos);
+
+ // make sure the requested date is not in the future
+ Date today = getToday(weblog);
+ if(ret.after(today)) {
+ ret = today;
+ }
+
+ } else if(dateString != null
+ && dateString.length()==6
+ && StringUtils.isNumeric(dateString)) {
+ ParsePosition pos = new ParsePosition(0);
+ ret = char6DateFormat.parse(dateString, pos);
+
+ // make sure the requested date is not in the future
+ Date today = getToday(weblog);
+ if(ret.after(today)) {
+ ret = today;
+ }
+ }
+
+ return ret;
+ }
+
+
+ /**
+ * Return today based on current blog's timezone/locale.
+ */
+ Date getToday(WebsiteData weblog) {
+ Calendar todayCal = Calendar.getInstance();
+ todayCal = Calendar.getInstance(
+ weblog.getTimeZoneInstance(), weblog.getLocaleInstance());
+ todayCal.setTime(new Date());
+ return todayCal.getTime();
+ }
+
+}
Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesPager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesPager.java?rev=418161&r1=418160&r2=418161&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesPager.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesPager.java Thu Jun 29 18:38:19 2006
@@ -4,24 +4,17 @@
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
-import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
-import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.apache.roller.RollerException;
-import org.apache.roller.model.Roller;
import org.apache.roller.model.RollerFactory;
-import org.apache.roller.model.WeblogManager;
import org.apache.roller.pojos.WeblogEntryData;
import org.apache.roller.pojos.WebsiteData;
import org.apache.roller.pojos.wrapper.WeblogEntryDataWrapper;
-import org.apache.roller.ui.rendering.model.*;
import org.apache.roller.util.DateUtil;
@@ -30,602 +23,96 @@
* Collection returned is a list of lists of entries, where each list of
* entries represents one day.
*/
-public class WeblogEntriesPager implements RenderDayPager {
+public abstract class WeblogEntriesPager {
- /**
- * Behavior of the pager is detemined by the mode, which is itself a pager.
- * The mode may be LatestMode, SingleEntryMode, DayMode or MonthMode.
- */
- protected RenderDayPager mode = null;
- protected Map entries = null;
- protected WebsiteData weblog = null;
- protected int offset = 0;
- protected int length = 0;
- protected String chosenCatPath = null;
- protected String dateString = null;
- protected String entryAnchor = null;
- protected boolean more = false;
-
- protected static Log log =
- LogFactory.getFactory().getInstance(WeblogEntriesPager.class);
-
- public WeblogEntriesPager(
- HttpServletRequest request,
- WebsiteData weblog,
+ public static WeblogEntriesPager getWeblogEntriesPager(
+ WebsiteData weblog,
String entryAnchor,
- String requestedCat,
- String callerCat,
- String dateString) {
-
- this.weblog = weblog;
- this.dateString = dateString;
- this.entryAnchor = entryAnchor;
-
- length = weblog.getEntryDisplayCount();
-
- if (callerCat != null && "nil".equals(callerCat)) callerCat = null;
-
- if (request.getParameter("offset") != null) {
- try {
- offset = Integer.parseInt(request.getParameter("offset"));
- } catch (Exception ignored) {}
- }
+ String dateString,
+ String catPath,
+ int page) {
- String chosenCatPath = callerCat != null ? callerCat : requestedCat;
- if (chosenCatPath == null) {
- // no category specifed so use default
- chosenCatPath = weblog.getDefaultCategory().getPath();
- chosenCatPath = chosenCatPath.equals("/") ? null : chosenCatPath;
- }
-
- // determine which mode we're working in
+ // determine which implementation to return
if (entryAnchor != null) {
- mode = new SingleEntryMode();
- } else if (dateString != null && dateString.length() == 8) {
- mode = new DayMode();
- } else if (dateString != null && dateString.length() == 6) {
- mode = new MonthMode();
+ return new WeblogEntriesPermalinkPager(weblog, entryAnchor);
} else {
- mode = new LatestMode();
+ return new WeblogEntriesCollectionPager(weblog, dateString, catPath, page);
}
}
-
- public Map getCurrentValues() {
- return mode.getCurrentValues();
- }
+
+ /**
+ * A map of entries representing this collection.
+ *
+ * The collection is grouped by days of entries. Each value is a list of
+ * entry objects keyed by the date they were published.
+ */
+ public abstract Map getEntries();
+
+
+ /**
+ * Link value for next collection view
+ */
public String getNextLink() {
- return mode.getNextLink();
+ return null;
}
-
+
+ /**
+ * Link name for next collection view
+ */
public String getNextLinkName() {
- return mode.getNextLink();
- }
-
- public String getPrevLink() {
- return mode.getPrevLink();
- }
-
- public String getPrevLinkName() {
- return mode.getPrevLinkName();
- }
-
- public String getNextCollectionLink() {
- return mode.getNextCollectionLink();
- }
-
- public String getNextCollectionName() {
- return mode.getNextCollectionName();
+ return null;
}
-
- public String getPrevCollectionLink() {
- return mode.getPrevCollectionLink();
- }
-
- public String getPrevCollectionName() {
- return mode.getPrevCollectionName();
- }
-
- //-------------------------------------------------------------------------
/**
- * We're paging through the latest entries in the blog.
- * In this mode there's no prev/next collection.
+ * Link value for prev collection view
*/
- class LatestMode implements RenderDayPager {
-
- public Map getCurrentValues() {
- return getCurrentValuesImpl();
- }
-
- public String getNextLink() {
- String ret = null;
- if (more) {
- int nextOffset = offset + length;
- ret = weblog.getURL() + "&offset=" + nextOffset;
- }
- return ret;
- }
-
- public String getNextLinkName() {
- String ret = null;
- if (getNextLink() != null) {
- ret = "Next"; // TODO: I18N
- }
- return ret;
- }
-
- public String getPrevLink() {
- String ret = null;
- if (offset > 0) {
- int prevOffset = offset + length;
- prevOffset = (prevOffset < 0) ? 0 : prevOffset;
- ret = weblog.getURL() + "&offset=" + prevOffset;
- }
- return ret;
- }
-
- public String getPrevLinkName() {
- String ret = null;
- if (getNextLink() != null) {
- ret = "Prev"; // TODO: I18N
- }
- return ret;
- }
-
- public String getNextCollectionLink() {
- return null;
- }
-
- public String getNextCollectionName() {
- return null;
- }
-
- public String getPrevCollectionLink() {
- return null;
- }
-
- public String getPrevCollectionName() {
- return null;
- }
-
- }
-
- //-------------------------------------------------------------------------
+ public String getPrevLink() {
+ return null;
+ }
/**
- * We're showing one weblog entry.
- * Next/prev return permalinks of next and previous weblog entries.
- * In this mode there's no prev/next collection.
+ * Link name for prev collection view
*/
- class SingleEntryMode implements RenderDayPager {
- String nextLink = null;
- WeblogEntryData entry = null;
- WeblogEntryData nextEntry = null;
- WeblogEntryData prevEntry = null;
-
- public SingleEntryMode() {
- SingleEntryMode.this.getCurrentValues();
- }
-
- /**
- * Wrap entry up in map of lists.
- */
- public Map getCurrentValues() {
- if (entries == null) try {
- Roller roller = RollerFactory.getRoller();
- WeblogManager wmgr = roller.getWeblogManager();
- entry = wmgr.getWeblogEntryByAnchor(weblog, entryAnchor);
- if (entry == null || !entry.getStatus().equals(WeblogEntryData.PUBLISHED)) {
- entry = null;
- } else {
- entries = new TreeMap();
- entries.put(new Date(entry.getPubTime().getTime()),
- Collections.singletonList(WeblogEntryDataWrapper.wrap(entry)));
- }
- } catch (Exception e) {
- log.error("ERROR: fetching entry");
- }
- return entries;
- }
-
- public String getNextLink() {
- String ret = null;
- if (getNextEntry() != null) {
- ret = getNextEntry().getPermalink();
- }
- return ret;
- }
-
- public String getNextLinkName() {
- String ret = null;
- if (getNextEntry() != null) {
- ret = getNextEntry().getTitle();
- }
- return ret;
- }
-
- public String getPrevLink() {
- String ret = null;
- if (getPrevEntry() != null) {
- ret = getPrevEntry().getPermalink();
- }
- return ret;
- }
-
- public String getPrevLinkName() {
- String ret = null;
- if (getPrevEntry() != null) {
- ret = getPrevEntry().getTitle();
- }
- return ret;
- }
-
- public String getNextCollectionLink() {
- return null;
- }
-
- public String getNextCollectionName() {
- return null;
- }
-
- public String getPrevCollectionLink() {
- return null;
- }
-
- public String getPrevCollectionName() {
- return null;
- }
-
- private WeblogEntryData getNextEntry() {
- if (nextEntry == null) try {
- Roller roller = RollerFactory.getRoller();
- WeblogManager wmgr = roller.getWeblogManager();
- nextEntry = wmgr.getNextEntry(entry, chosenCatPath);
- // make sure that entry is published and not to future
- if (nextEntry != null && nextEntry.getPubTime().after(new Date())
- && nextEntry.getStatus().equals(WeblogEntryData.PUBLISHED)) {
- nextEntry = null;
- }
- } catch (RollerException e) {
- log.error("ERROR: getting next entry", e);
- }
- return nextEntry;
- }
-
- private WeblogEntryData getPrevEntry() {
- if (prevEntry == null) try {
- Roller roller = RollerFactory.getRoller();
- WeblogManager wmgr = roller.getWeblogManager();
- prevEntry = wmgr.getPreviousEntry(entry, chosenCatPath);
- // make sure that entry is published and not to future
- if (prevEntry != null && prevEntry.getPubTime().after(new Date())
- && prevEntry.getStatus().equals(WeblogEntryData.PUBLISHED)) {
- prevEntry = null;
- }
- } catch (RollerException e) {
- log.error("ERROR: getting prev entry", e);
- }
- return prevEntry;
- }
+ public String getPrevLinkName() {
+ return null;
}
- //-------------------------------------------------------------------------
-
/**
- * We're paging through entries in one day.
- * Next/prev methods return links to offsets within day's entries.
- * Next/prev collection methods return links to next and previous days.
+ * Does this pager represent a multi-page collection?
*/
- class DayMode implements RenderDayPager {
- private Date day;
- private Date nextDay;
- private Date prevDay;
-
- public DayMode() {
- getCurrentValuesImpl();
- day = parseDate(dateString);
-
- Calendar cal = Calendar.getInstance();
-
- cal.setTime(day);
- cal.add(Calendar.DAY_OF_MONTH, 1);
- cal.set(Calendar.HOUR, 0);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- nextDay = cal.getTime();
- if (nextDay.after(getToday())) {
- nextDay = null;
- }
-
- cal.setTime(day);
- cal.add(Calendar.DAY_OF_MONTH, -1);
- cal.set(Calendar.HOUR, 23);
- cal.set(Calendar.MINUTE, 59);
- cal.set(Calendar.SECOND, 59);
- prevDay = cal.getTime();
- }
-
- public Map getCurrentValues() {
- return getCurrentValuesImpl();
- }
-
- public String getNextLink() {
- String ret = null;
- if (more) {
- int nextOffset = offset + length;
- ret = weblog.getURL() + "/date/" + dateString + "&offset=" + nextOffset;
- }
- return ret;
- }
-
- public String getNextLinkName() {
- String ret = null;
- if (getNextLink() != null) {
- ret = "Next"; // TODO: I18N
- }
- return ret;
- }
-
- public String getPrevLink() {
- String ret = null;
- if (offset > 0) {
- int prevOffset = offset + length;
- prevOffset = (prevOffset < 0) ? 0 : prevOffset;
- ret = weblog.getURL() + "/date/" + dateString + "&offset=" + prevOffset;
- }
- return ret;
- }
-
- public String getPrevLinkName() {
- String ret = null;
- if (getNextLink() != null) {
- ret = "Prev"; // TODO: I18N
- }
- return ret;
- }
-
- public String getNextCollectionLink() {
- String ret = null;
- if (nextDay != null) {
- String next = DateUtil.format8chars(nextDay);
- ret = weblog.getURL() + "/date/" + next;
- }
- return ret;
- }
-
- public String getNextCollectionName() {
- String ret = null;
- if (nextDay != null) {
- ret = DateUtil.format8chars(nextDay);
- }
- return ret;
- }
-
- public String getPrevCollectionLink() {
- String ret = null;
- if (prevDay != null) {
- String prev = DateUtil.format8chars(prevDay);
- ret = weblog.getURL() + "/date/" + prev;
- }
- return ret;
- }
-
- public String getPrevCollectionName() {
- String ret = null;
- if (prevDay != null) {
- ret = DateUtil.format8chars(prevDay);
- }
- return ret;
- }
+ public boolean isMultiPage() {
+ return false;
}
- //-------------------------------------------------------------------------
-
/**
- * We're paging through entries within one month.
- * Next/prev methods return links to offsets within month's entries.
- * Next/prev collection methods return links to next and previous months.
+ * Link value for next page in current collection view
*/
- class MonthMode implements RenderDayPager {
- private Date month;
- private Date nextMonth;
- private Date prevMonth;
-
- public MonthMode() {
- getCurrentValuesImpl();
- month = parseDate(dateString);
-
- Calendar cal = Calendar.getInstance();
-
- cal.setTime(month);
- cal.add(Calendar.MONTH, 1);
- nextMonth = cal.getTime();
- if (nextMonth.after(getToday())) {
- nextMonth = null;
- }
-
- cal.setTime(month);
- cal.add(Calendar.MONTH, -1);
- prevMonth = cal.getTime();
- }
-
- public Map getCurrentValues() {
- return getCurrentValuesImpl();
- }
-
- public String getNextLink() {
- String ret = null;
- if (more) {
- int nextOffset = offset + length;
- ret = weblog.getURL() + "/date/" + dateString + "&offset=" + nextOffset;
- }
- return ret;
- }
-
- public String getNextLinkName() {
- String ret = null;
- if (getNextLink() != null) {
- ret = "Next"; // TODO: I18N
- }
- return ret;
- }
-
- public String getPrevLink() {
- String ret = null;
- if (offset > 0) {
- int prevOffset = offset + length;
- prevOffset = (prevOffset < 0) ? 0 : prevOffset;
- ret = weblog.getURL() + "/date/" + dateString + "&offset=" + prevOffset;
- }
- return ret;
- }
-
- public String getPrevLinkName() {
- String ret = null;
- if (getNextLink() != null) {
- ret = "Prev"; // TODO: I18N
- }
- return ret;
- }
-
- public String getNextCollectionLink() {
- String ret = null;
- if (nextMonth != null) {
- String next = DateUtil.format6chars(nextMonth);
- ret = weblog.getURL() + "/date/" + next;
- }
- return ret;
- }
-
- public String getNextCollectionName() {
- String ret = null;
- if (nextMonth != null) {
- ret = DateUtil.format6chars(nextMonth);
- }
- return ret;
- }
-
- public String getPrevCollectionLink() {
- String ret = null;
- if (prevMonth != null) {
- String prev = DateUtil.format6chars(prevMonth);
- ret = weblog.getURL() + "/date/" + prev;
- }
- return ret;
- }
-
- public String getPrevCollectionName() {
- String ret = null;
- if (prevMonth != null) {
- ret = DateUtil.format6chars(prevMonth);
- }
- return ret;
- }
-
- }
-
- //------------------------------------------------------------------------
+ public String getNextPageLink() {
+ return null;
+ }
/**
- * Get current values specified by request, a map of lists of entry
- * wrappers, keyed by date objects, where each list holds entries
- * for one day.
+ * Link name for next page in current collection view
*/
- private Map getCurrentValuesImpl() {
- if (entries == null) {
- entries = new TreeMap();
- try {
- Roller roller = RollerFactory.getRoller();
- WeblogManager wmgr = roller.getWeblogManager();
- Date date = parseDate(dateString);
-
- Calendar cal = Calendar.getInstance(weblog.getTimeZoneInstance());
- Date startDate = null;
- Date endDate = date;
- if (endDate == null) endDate = new Date();
- if (mode instanceof DayMode) {
- // URL specified a specific day so get all entries for it
- startDate = DateUtil.getStartOfDay(endDate, cal);
- endDate = DateUtil.getEndOfDay(endDate, cal);
- } else if (mode instanceof MonthMode) {
- // URL specified a specific month so get all entries for it
- startDate = DateUtil.getStartOfMonth(endDate, cal);
- endDate = DateUtil.getEndOfMonth(endDate, cal);
- }
- Map mmap = RollerFactory.getRoller().getWeblogManager().getWeblogEntryObjectMap(
- weblog,
- startDate,
- endDate,
- chosenCatPath,
- WeblogEntryData.PUBLISHED,
- offset,
- length);
-
- // need to wrap pojos
- java.util.Date key = null;
- Iterator days = mmap.keySet().iterator();
- while(days.hasNext()) {
- key = (java.util.Date)days.next();
-
- // now we need to go through each entry in a day and wrap
- List wrapped = new ArrayList();
- List unwrapped= (List) mmap.get(key);
- for(int i=0; i < unwrapped.size(); i++) {
- wrapped.add(i,
- WeblogEntryDataWrapper.wrap((WeblogEntryData)unwrapped.get(i)));
- }
- entries.put(key, wrapped);
- }
- } catch (Exception e) {
- log.error("ERROR: getting entry month map", e);
- }
- }
- return entries;
+ public String getNextPageName() {
+ return null;
}
- /**
- * Parse data as either 6-char or 8-char format.
+ /**
+ * Link value for prev page in current collection view
*/
- private Date parseDate(String dateString) {
- Date ret = null;
- SimpleDateFormat char8DateFormat = DateUtil.get8charDateFormat();
- SimpleDateFormat char6DateFormat = DateUtil.get6charDateFormat();
- if ( dateString!=null
- && dateString.length()==8
- && StringUtils.isNumeric(dateString) ) {
- ParsePosition pos = new ParsePosition(0);
- ret = char8DateFormat.parse( dateString, pos );
-
- // make sure the requested date is not in the future
- Date today = getToday();
- if (ret.after(today)) ret = today;
- }
- if ( dateString!=null
- && dateString.length()==6
- && StringUtils.isNumeric(dateString) ) {
- ParsePosition pos = new ParsePosition(0);
- ret = char6DateFormat.parse( dateString, pos );
-
- // make sure the requested date is not in the future
- Date today = getToday();
- if (ret.after(today)) ret = today;
- }
- return ret;
+ public String getPrevPageLink() {
+ return null;
}
/**
- * Return today based on current blog's timezone/locale.
+ * Link value for prev page in current collection view
*/
- private Date getToday() {
- Calendar todayCal = Calendar.getInstance();
- todayCal = Calendar.getInstance(
- weblog.getTimeZoneInstance(), weblog.getLocaleInstance());
- todayCal.setTime(new Date());
- return todayCal.getTime();
+ public String getPrevPageName() {
+ return null;
}
-
}
Added: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesPermalinkPager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesPermalinkPager.java?rev=418161&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesPermalinkPager.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/util/WeblogEntriesPermalinkPager.java Thu Jun 29 18:38:19 2006
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.rendering.util;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.RollerException;
+import org.apache.roller.model.Roller;
+import org.apache.roller.model.RollerFactory;
+import org.apache.roller.model.WeblogManager;
+import org.apache.roller.pojos.WeblogEntryData;
+import org.apache.roller.pojos.WebsiteData;
+import org.apache.roller.pojos.wrapper.WeblogEntryDataWrapper;
+
+
+/**
+ * We're showing one weblog entry.
+ * Next/prev return permalinks of next and previous weblog entries.
+ * In this mode there's no prev/next collection.
+ */
+public class WeblogEntriesPermalinkPager extends WeblogEntriesPager {
+
+ private static Log log = LogFactory.getLog(WeblogEntriesPermalinkPager.class);
+
+ private Map entries = null;
+ private String entryAnchor = null;
+ private WebsiteData weblog = null;
+ private WeblogEntryData entry = null;
+ private WeblogEntryData nextEntry = null;
+ private WeblogEntryData prevEntry = null;
+
+
+ public WeblogEntriesPermalinkPager(WebsiteData weblog, String anchor) {
+ this.weblog = weblog;
+ this.entryAnchor = anchor;
+ }
+
+
+ /**
+ * Wrap entry up in map of lists.
+ */
+ public Map getEntries() {
+
+ if(this.entries == null) {
+ entry = getEntry();
+ if(entry != null) {
+ entries = new HashMap();
+ entries.put(new Date(entry.getPubTime().getTime()),
+ Collections.singletonList(WeblogEntryDataWrapper.wrap(entry)));
+ }
+ }
+
+ return this.entries;
+ }
+
+
+ public String getNextLink() {
+ String ret = null;
+ if (getNextEntry() != null) {
+ ret = getNextEntry().getPermalink();
+ }
+ return ret;
+ }
+
+
+ public String getNextLinkName() {
+ String ret = null;
+ if (getNextEntry() != null) {
+ ret = getNextEntry().getTitle();
+ }
+ return ret;
+ }
+
+
+ public String getPrevLink() {
+ String ret = null;
+ if (getPrevEntry() != null) {
+ ret = getPrevEntry().getPermalink();
+ }
+ return ret;
+ }
+
+
+ public String getPrevLinkName() {
+ String ret = null;
+ if (getPrevEntry() != null) {
+ ret = getPrevEntry().getTitle();
+ }
+ return ret;
+ }
+
+
+ private WeblogEntryData getEntry() {
+
+ if (entry == null) try {
+ Roller roller = RollerFactory.getRoller();
+ WeblogManager wmgr = roller.getWeblogManager();
+ entry = wmgr.getWeblogEntryByAnchor(weblog, entryAnchor);
+
+ // make sure that entry is published and not to future
+ if(entry == null ||
+ !entry.getStatus().equals(WeblogEntryData.PUBLISHED) ||
+ entry.getPubTime().after(new Date())) {
+ entry = null;
+ }
+ } catch (RollerException e) {
+ log.error("ERROR: getting entry", e);
+ }
+
+ return entry;
+ }
+
+
+ private WeblogEntryData getNextEntry() {
+
+ if (nextEntry == null) try {
+ Roller roller = RollerFactory.getRoller();
+ WeblogManager wmgr = roller.getWeblogManager();
+ //nextEntry = wmgr.getNextEntry(entry, chosenCatPath);
+ nextEntry = wmgr.getNextEntry(getEntry(), null);
+ // make sure that entry is published and not to future
+ if (nextEntry != null && nextEntry.getPubTime().after(new Date())
+ && nextEntry.getStatus().equals(WeblogEntryData.PUBLISHED)) {
+ nextEntry = null;
+ }
+ } catch (RollerException e) {
+ log.error("ERROR: getting next entry", e);
+ }
+
+ return nextEntry;
+ }
+
+
+ private WeblogEntryData getPrevEntry() {
+
+ if (prevEntry == null) try {
+ Roller roller = RollerFactory.getRoller();
+ WeblogManager wmgr = roller.getWeblogManager();
+ //prevEntry = wmgr.getPreviousEntry(entry, chosenCatPath);
+ nextEntry = wmgr.getPreviousEntry(getEntry(), null);
+ // make sure that entry is published and not to future
+ if (prevEntry != null && prevEntry.getPubTime().after(new Date())
+ && prevEntry.getStatus().equals(WeblogEntryData.PUBLISHED)) {
+ prevEntry = null;
+ }
+ } catch (RollerException e) {
+ log.error("ERROR: getting prev entry", e);
+ }
+
+ return prevEntry;
+ }
+
+}