You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2006/07/28 19:16:19 UTC

svn commit: r426611 [1/2] - in /incubator/roller/branches/roller_3.0: metadata/database/ src/org/apache/roller/business/ src/org/apache/roller/model/ src/org/apache/roller/pojos/ src/org/apache/roller/ui/rendering/model/ src/org/apache/roller/ui/render...

Author: snoopdave
Date: Fri Jul 28 10:16:17 2006
New Revision: 426611

URL: http://svn.apache.org/viewvc?rev=426611&view=rev
Log:

-------------------------
1) Rewrote SiteModel and PlanetModel to completely eliminate the need for 
use of offset/length paging logic in macro code. 

1a) For all collections suitable for paging I added pagers: WeblogsPager, 
UsersPager, CommentsPager and PlanetEntriesPager. 

1b) For collections suitable for display in a sidebar, I only allow the caller
    to specify the max number of objects returned. 

   ISSUE: We don't want callers to use these to fetch giant collections, so 
   perhaps length should be throttled at 100 or some configurable value.

1c) $siteModel and $planetModel are now known as $site and $page.

1d) Updated site.vm to use new pagers.

   ISSUE: Still need to fix URL formulation in site.vm


-------------------------
2) Updated the Atlas theme to use the new SiteModel and PlanetModel pagers.

   ISSUE: Still need to pare Atlas down to the bare essentials and move it out
   of the themes directory, or perhaps make it available onto to frontpage 
   and/or aggregated weblogs.

   ISSUE: The frontpage macros still use $pageModel beacuse they need access
   to request parameters for letter, user and weblog.
   
   ISSUE: I had to add a hack to the PageServlet to allow the use of the 
   "letter" request parameter, which is bad but we need to figure out some 
   way to allow theme pages to use arbitrary request parameters.


-------------------------
3) Added new webpage.navbar field to indicate if a page should be shown in the
weblog's standard navbar. This replaces the old "_" prefix. 

3a) Added navbar field to database migration script. The script also sets all 
pages with names that start with "_" to navbar=falase.

3b) Template files still use "_" to indicate "hidden-from-navbar". Files that
use this convention still get special treatment, they're marked as navbar=false
and since the "_" prefix is unsuitable for use in URLs, it is stripped off in 
the template link field.

3c) The page menu macro now uses the navbar field instead of "_" to hide pages.




Added:
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/AbstractPager.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/CommentsPager.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/Pager.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PlanetEntriesPager.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/UsersPager.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesMapPager.java
      - copied, changed from r426351, incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPager.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesMapPagerImpl.java
      - copied, changed from r426351, incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPagerImpl.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPager.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogsPager.java
    incubator/roller/branches/roller_3.0/web/themes/atlas/_tabbedMenu.vm
      - copied, changed from r426577, incubator/roller/branches/roller_3.0/web/themes/atlas/_macros.vm
Removed:
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPagerImpl.java
    incubator/roller/branches/roller_3.0/web/themes/atlas/_macros.vm
Modified:
    incubator/roller/branches/roller_3.0/metadata/database/240-to-300-migration.vm
    incubator/roller/branches/roller_3.0/src/org/apache/roller/business/ThemeManagerImpl.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/model/PlanetManager.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/StaticTemplate.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/Template.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/ThemeTemplate.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WeblogTemplate.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PageModel.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PlanetModel.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SearchResultsModel.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SearchResultsPager.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SiteModel.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/servlets/PageServlet.java
    incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/site.vm
    incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/weblog.vm
    incubator/roller/branches/roller_3.0/web/themes/atlas/Weblog.vm
    incubator/roller/branches/roller_3.0/web/themes/atlas/_blogs.vm
    incubator/roller/branches/roller_3.0/web/themes/atlas/_comments.vm
    incubator/roller/branches/roller_3.0/web/themes/atlas/_planet.vm
    incubator/roller/branches/roller_3.0/web/themes/atlas/_users.vm

Modified: incubator/roller/branches/roller_3.0/metadata/database/240-to-300-migration.vm
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/metadata/database/240-to-300-migration.vm?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/metadata/database/240-to-300-migration.vm (original)
+++ incubator/roller/branches/roller_3.0/metadata/database/240-to-300-migration.vm Fri Jul 28 10:16:17 2006
@@ -20,6 +20,11 @@
 -- add new column which holds the hidden status for a page, default is false
 #addColumnNotNull("webpage" "hidden" $BOOLEAN_SQL_TYPE $BOOLEAN_FALSE)
 
+-- add new column which holds the hidden status for a page, default is false
+#addColumnNotNull("webpage" "navbar" $BOOLEAN_SQL_TYPE $BOOLEAN_FALSE)
+update webpage set navbar=true;
+update webpage set navbar=false where name like '%_';
+
 -- add new column which holds the template language used for a page
 -- then set template language to velocity for all templates
 #addColumnNull("webpage" "templatelang" "varchar(20)")

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/business/ThemeManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/business/ThemeManagerImpl.java?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/business/ThemeManagerImpl.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/business/ThemeManagerImpl.java Fri Jul 28 10:16:17 2006
@@ -281,6 +281,14 @@
                 continue;
             }
             
+            // Strip "_" from name to form link
+            boolean navbar = true;
+            String template_link = template_name;
+            if (template_name.startsWith("_") && template_name.length() > 1) {
+                navbar = false;
+                template_link = template_link.substring(1);
+            }
+            
             String decorator = "_decorator";
             if("_decorator".equals(template_name)) {
                 decorator = null;
@@ -295,12 +303,13 @@
                     theme,
                     theme_name+":"+template_name,
                     template_name,
-                    template_name,
+                    template_link,
                     new String(chars),
                     template_name,
                     new Date(template_file.lastModified()),
                     "velocity",
                     true,
+                    navbar,
                     decorator);
 
             // add it to the theme
@@ -367,6 +376,7 @@
                             new Date(),                         // last mod
                             theme_template.getTemplateLanguage(), // temp lang
                             theme_template.isHidden(),          // hidden
+                            theme_template.isNavbar(),          // navbar
                             theme_template.getDecoratorName()   // decorator
                             );
                     userMgr.savePage( template );

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/model/PlanetManager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/model/PlanetManager.java?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/model/PlanetManager.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/model/PlanetManager.java Fri Jul 28 10:16:17 2006
@@ -1,20 +1,20 @@
 /*
-* 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.
-*/
+ * 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.model;
 
 import java.io.Serializable;
@@ -32,21 +32,21 @@
  * Manages groups and subscriptions, can return aggregation for any group.
  * @author David M Johnson
  */
-public interface PlanetManager extends Serializable
-{
+public interface PlanetManager extends Serializable {
+    
     //------------------------------------------------------------------ create
     
     /**
-     * Save configration 
+     * Save configration
      */
-    public void saveConfiguration(PlanetConfigData config) 
-        throws RollerException;
+    public void saveConfiguration(PlanetConfigData config)
+    throws RollerException;
     
     /**
      * Save new or update existing entry
      */
-    public void saveEntry(PlanetEntryData entry) throws RollerException; 
-
+    public void saveEntry(PlanetEntryData entry) throws RollerException;
+    
     /**
      * Save new or update existing a group
      */
@@ -55,32 +55,32 @@
     /**
      * Save or update a subscription
      */
-    public void saveSubscription(PlanetSubscriptionData sub) 
-        throws RollerException;
+    public void saveSubscription(PlanetSubscriptionData sub)
+    throws RollerException;
     
-    //---------------------------------------------------------------- retrieve    
-
-    /** 
-     * Get the one planet config object, config has default group 
+    //---------------------------------------------------------------- retrieve
+    
+    /**
+     * Get the one planet config object, config has default group
      */
     public PlanetConfigData getConfiguration() throws RollerException;
     
-    /** 
-     * Get handles for all defined groups 
+    /**
+     * Get handles for all defined groups
      */
     public List getGroupHandles() throws RollerException;
     
-    /** 
-     * Get list of group objects 
+    /**
+     * Get list of group objects
      */
     public List getGroups() throws RollerException;
     
-    /** 
+    /**
      * Get group by handle, group has subscriptions
      */
     public PlanetGroupData getGroup(String handle) throws RollerException;
     
-    /** 
+    /**
      * Get group by ID rather than handle.
      */
     public PlanetGroupData getGroupById(String id) throws RollerException;
@@ -88,16 +88,16 @@
     /**
      * Get subscription by feedUrl.
      */
-    public PlanetSubscriptionData getSubscription(String feedUrl) 
-        throws RollerException;
-
+    public PlanetSubscriptionData getSubscription(String feedUrl)
+    throws RollerException;
+    
     /**
      * Get subscription by ID rather than feedUrl.
      */
-    public PlanetSubscriptionData getSubscriptionById(String id) 
-        throws RollerException;
+    public PlanetSubscriptionData getSubscriptionById(String id)
+    throws RollerException;
     
-    /** 
+    /**
      * Get all subscriptions.
      */
     public Iterator getAllSubscriptions() throws RollerException;
@@ -107,42 +107,42 @@
      */
     public int getSubscriptionCount() throws RollerException;
     
-    /** 
+    /**
      * Get top X subscriptions.
      */
     public List getTopSubscriptions(int offset, int len) throws RollerException;
-
-    /** 
+    
+    /**
      * Get top X subscriptions, restricted by group.
      */
-    public List getTopSubscriptions( 
-        String groupHandle, int offset, int len) throws RollerException;
-
-    /** 
+    public List getTopSubscriptions(
+            String groupHandle, int offset, int len) throws RollerException;
+    
+    /**
      * Get entries in a single feed as list of PlanetEntryData objects.
      */
-    public List getFeedEntries( 
-        String feedUrl, int offset, int len) throws RollerException;
-
+    public List getFeedEntries(
+            String feedUrl, int offset, int len) throws RollerException;
+    
     //------------------------------------------------------------ aggregations
     
-    /** 
+    /**
      * Get agggration for group from cache, enries in reverse chonological order.
      * Respects category constraints of group.
      * @param group Restrict to entries from one subscription group.
      * @param offset    Offset into results (for paging)
-     * @param len       Maximum number of results to return (for paging) 
+     * @param len       Maximum number of results to return (for paging)
      */
     public List getAggregation(
-            PlanetGroupData group, Date startDate, Date endDate, 
+            PlanetGroupData group, Date startDate, Date endDate,
             int offset, int len) throws RollerException;
     
-    /** 
+    /**
      * Get agggration from cache, enries in reverse chonological order.
      * @param offset    Offset into results (for paging)
      * @param len       Maximum number of results to return (for paging)
      */
-    public List getAggregation(Date startDate, Date endDate, 
+    public List getAggregation(Date startDate, Date endDate,
             int offset, int len) throws RollerException;
     
     //------------------------------------------------------------------ update
@@ -156,12 +156,12 @@
     public void deleteGroup(PlanetGroupData group) throws RollerException;
     
     /** Delete subscription, remove it from groups, cache, etc. */
-    public void deleteSubscription(PlanetSubscriptionData group) 
-        throws RollerException;
+    public void deleteSubscription(PlanetSubscriptionData group)
+    throws RollerException;
     
     /** Delete entry. */
     public void deleteEntry(PlanetEntryData entry) throws RollerException;
-
+    
     /** Clear any aggregations and update times that have been cached */
     public void clearCachedAggregations();
     

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/StaticTemplate.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/StaticTemplate.java?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/StaticTemplate.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/StaticTemplate.java Fri Jul 28 10:16:17 2006
@@ -39,6 +39,7 @@
     private Date lastModified = new Date();
     private String templateLanguage = null;
     private boolean hidden = false;
+    private boolean navbar = false;
     
     
     public StaticTemplate() {}
@@ -119,6 +120,14 @@
 
     public void setHidden(boolean hidden) {
         this.hidden = hidden;
+    }
+
+    public void setNavbar(boolean navbar) {
+        this.navbar = navbar;
+    }
+    
+    public boolean isNavbar() {
+        return navbar; 
     }
     
     

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/Template.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/Template.java?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/Template.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/Template.java Fri Jul 28 10:16:17 2006
@@ -77,7 +77,15 @@
      *
      * @roller.wrapPojoMethod type="simple"
      */
+    
     public boolean isHidden();
+    
+    /**
+     * Is the Template to be included in the navbar?
+     *
+     * @roller.wrapPojoMethod type="simple"
+     */
+    public boolean isNavbar();
     
     /**
      * The templating language used by this template.

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/ThemeTemplate.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/ThemeTemplate.java?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/ThemeTemplate.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/ThemeTemplate.java Fri Jul 28 10:16:17 2006
@@ -37,6 +37,7 @@
     private Date lastModified = null;
     private String templateLanguage = null;
     private boolean hidden = false;
+    private boolean navbar = false;
     private String decoratorName = null;
     
     private Theme myTheme = null;
@@ -46,7 +47,7 @@
     
     public ThemeTemplate(Theme theme, String id, String name, String desc, 
             String contents, String link, Date date, String tempLang, 
-            boolean hid, String decor) {
+            boolean hid, boolean navbar, String decor) {
         
         this.myTheme = theme;
         this.id = id;
@@ -57,6 +58,7 @@
         this.lastModified = date;
         this.templateLanguage = tempLang;
         this.hidden = hid;
+        this.navbar = navbar;
         this.decoratorName = decor;
     }
     
@@ -130,6 +132,14 @@
 
     public void setHidden(boolean isHidden) {
         this.hidden = isHidden;
+    }
+
+    public boolean isNavbar() {
+        return hidden;
+    }
+
+    public void setNavbar(boolean navbar) {
+        this.navbar = navbar;
     }
 
     public String getDecoratorName() {

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WeblogTemplate.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WeblogTemplate.java?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WeblogTemplate.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WeblogTemplate.java Fri Jul 28 10:16:17 2006
@@ -54,6 +54,7 @@
     private Date lastModified = null;
     private String templateLanguage = null;
     private boolean hidden = false;
+    private boolean navbar = false;
     private String decoratorName = null;
     
     private WebsiteData weblog = null;
@@ -79,6 +80,7 @@
             java.util.Date updateTime,
             String tempLang,
             boolean hid,
+            boolean navbar,
             String decorator) {
         this.id = id;
         this.weblog = website;
@@ -230,6 +232,19 @@
     
     /**
      * @ejb:persistent-field
+     * @hibernate.property column="navbar" non-null="true" unique="false"
+     */
+    public boolean isNavbar() {
+        return navbar;
+    }
+
+    /** @ejb:persistent-field */
+    public void setNavbar(boolean navbar) {
+        this.navbar = navbar;
+    }
+    
+    /**
+     * @ejb:persistent-field
      * @hibernate.property column="hidden" non-null="true" unique="false"
      */
     public boolean isHidden() {
@@ -240,8 +255,7 @@
     public void setHidden(boolean isHidden) {
         this.hidden = isHidden;
     }
-    
-    
+        
     /**
      * @ejb:persistent-field
      * @hibernate.property column="decorator" non-null="false" unique="false"

Added: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/AbstractPager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/AbstractPager.java?rev=426611&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/AbstractPager.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/AbstractPager.java Fri Jul 28 10:16:17 2006
@@ -0,0 +1,115 @@
+/*
+ * 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.model;
+
+import java.util.List;
+import org.apache.roller.pojos.WeblogTemplate;
+import org.apache.roller.pojos.WebsiteData;
+import org.apache.roller.util.URLUtilities;
+
+/**
+ * Abstract base for simple pagers.
+ */
+public abstract class AbstractPager implements Pager {
+    
+    protected List           users;
+    protected WebsiteData    weblog;
+    protected WeblogTemplate weblogPage;
+    protected String         locale;
+    protected int            sinceDays;
+    protected int            page;
+    protected int            length;
+    protected int            offset;
+    protected boolean        more = false;   
+    
+    /** Creates a new instance of AbstractPager */
+    public AbstractPager(            
+            WebsiteData    weblog,             
+            WeblogTemplate weblogPage,
+            String         locale,
+            int            sinceDays,
+            int            page,
+            int            length) {
+        
+        this.weblog =     weblog;
+        this.weblogPage = weblogPage;
+        this.locale =     locale;
+        this.sinceDays =  sinceDays;
+        this.page =       page;
+        this.length =     length;
+
+        if(page > 0) {
+            this.page = page;
+        }
+        this.offset = length * page;
+    }
+
+    public String getHomeLink() {
+        return createURL(page, 0, weblog, weblogPage, locale);
+    }
+
+    public String getHomeName() {
+        return "Home";
+    }
+
+    public String getNextLink() {
+        if (page > 0) {
+            return createURL(page, -1, weblog, weblogPage, locale);
+        }
+        return null;
+    }
+
+    public String getNextName() {
+        if (page > 0) {
+            return "Next";
+        }
+        return null;
+    }
+
+    public String getPrevLink() {
+        if (more) {        
+            return createURL(page, 1, weblog, weblogPage, locale);
+        }
+        return null;
+    }
+
+    public String getPrevName() {
+        if (more) {
+            return "Previous";
+        }
+        return null;
+    }
+    
+    protected static String createURL(
+        int                page, 
+        int                pageAdd, 
+        WebsiteData        weblog, 
+        WeblogTemplate     weblogPage, 
+        String             locale) {
+
+        int pageNum = page + pageAdd;
+        String pageLink = (weblogPage != null) ? weblogPage.getLink() : null;
+        if (weblogPage != null) {
+            return URLUtilities.getWeblogPageURL(
+                weblog, locale, pageLink, null, null, null, pageNum, false);
+        } 
+        return URLUtilities.getWeblogCollectionURL(
+                weblog, locale, null, null, pageNum, false);
+    }  
+}

Added: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/CommentsPager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/CommentsPager.java?rev=426611&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/CommentsPager.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/CommentsPager.java Fri Jul 28 10:16:17 2006
@@ -0,0 +1,87 @@
+/*
+ * 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.model;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ResourceBundle;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.model.Roller;
+import org.apache.roller.model.RollerFactory;
+import org.apache.roller.model.WeblogManager;
+import org.apache.roller.pojos.CommentData;
+import org.apache.roller.pojos.WeblogTemplate;
+import org.apache.roller.pojos.WebsiteData;
+import org.apache.roller.pojos.wrapper.CommentDataWrapper;
+import org.apache.roller.util.URLUtilities;
+
+/**
+ * Provides paging for comments.
+ */
+public class CommentsPager extends AbstractPager {
+    private List comments = null;
+    protected static Log log =
+            LogFactory.getFactory().getInstance(CommentsPager.class);
+    
+    /** Creates a new instance of CommentPager */
+    public CommentsPager(            
+            WebsiteData    weblog,             
+            WeblogTemplate weblogPage,
+            String         locale,
+            int            sinceDays,
+            int            page,
+            int            length) {
+        super(weblog, weblogPage, locale, sinceDays, page, length);
+        getComments();
+    }
+    
+    public List getComments() {
+        if (comments == null) {
+            List results = new ArrayList();
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(new Date());
+            cal.add(Calendar.DATE, -1 * sinceDays);
+            Date startDate = cal.getTime();
+            try {            
+                Roller roller = RollerFactory.getRoller();
+                WeblogManager wmgr = roller.getWeblogManager();
+                List entries = wmgr.getComments( 
+                    null, null, null, startDate, new Date(), 
+                    Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, true, offset, length + 1);
+                int count = 0;
+                for (Iterator it = entries.iterator(); it.hasNext();) {
+                    CommentData comment = (CommentData) it.next();
+                    if (count++ < length) {
+                        results.add(CommentDataWrapper.wrap(comment));
+                    } else {
+                        more = true;
+                    }                                
+                }
+            } catch (Exception e) {
+                log.error("ERROR: fetching comment list", e);
+            }
+            comments = results;
+        }
+        return comments;
+    }   
+}

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PageModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PageModel.java?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PageModel.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PageModel.java Fri Jul 28 10:16:17 2006
@@ -154,7 +154,7 @@
      * date they were published.
      * @param catArgument Category restriction (null or "nil" for no restriction)
      */
-    public WeblogEntriesPager getWeblogEntriesPager(String catArgument) {        
+    public WeblogEntriesMapPager getWeblogEntriesPager(String catArgument) {        
         // category specified by argument wins over request parameter
         WeblogCategoryData chosenCat = null;
         if (catArgument != null) {
@@ -166,7 +166,7 @@
                 log.debug("Ignoring unknown category restriction");
             }
         }            
-        return new WeblogEntriesPagerImpl(  
+        return new WeblogEntriesMapPagerImpl(  
             weblog, 
             pageRequest.getWeblogPage(), 
             pageRequest.getWeblogEntry(),
@@ -182,7 +182,7 @@
      * days of entries.  Each value is a list of entry objects keyed by the 
      * date they were published.
      */
-    public WeblogEntriesPager getWeblogEntriesPager() {
+    public WeblogEntriesMapPager getWeblogEntriesPager() {
         return getWeblogEntriesPager(null);
     }
         

Added: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/Pager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/Pager.java?rev=426611&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/Pager.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/Pager.java Fri Jul 28 10:16:17 2006
@@ -0,0 +1,55 @@
+/*
+ * 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.model;
+
+/**
+ * Common pager interface.
+ */
+public interface Pager {
+    /**
+     * Link value for returning to pager home
+     */
+    public String getHomeLink();
+
+    /**
+     * Name of pager home.
+     */
+    public String getHomeName();
+
+    /**
+     * Link value for next page in current collection view
+     */
+    public String getNextLink();
+
+    /**
+     * Name for next page in current collection view
+     */
+    public String getNextName();
+
+    /**
+     * Link value for prev page in current collection view
+     */
+    public String getPrevLink();
+
+    /**
+     * Link value for prev page in current collection view
+     */
+    public String getPrevName();
+    
+}

Added: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PlanetEntriesPager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PlanetEntriesPager.java?rev=426611&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PlanetEntriesPager.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PlanetEntriesPager.java Fri Jul 28 10:16:17 2006
@@ -0,0 +1,99 @@
+/*
+ * 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.model;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.model.PlanetManager;
+import org.apache.roller.model.Roller;
+import org.apache.roller.model.RollerFactory;
+import org.apache.roller.pojos.PlanetEntryData;
+import org.apache.roller.pojos.PlanetGroupData;
+import org.apache.roller.pojos.WeblogTemplate;
+import org.apache.roller.pojos.WebsiteData;
+import org.apache.roller.pojos.wrapper.PlanetEntryDataWrapper;
+
+/**
+ * Paging for planet entries.
+ */
+public class PlanetEntriesPager extends AbstractPager {
+    private String feedURL;
+    private String groupHandle;
+    private List entries;    
+    protected static Log log =
+            LogFactory.getFactory().getInstance(PlanetEntriesPager.class);
+    
+    /** Creates a new instance of CommentPager */
+    public PlanetEntriesPager(   
+            String         feedURL,
+            String         groupHandle,  
+            WebsiteData    weblog,
+            WeblogTemplate weblogPage,
+            String         locale,
+            int            sinceDays,
+            int            page,
+            int            length) {
+        super(weblog, weblogPage, locale, sinceDays, page, length);
+        this.feedURL = feedURL;
+        this.groupHandle = groupHandle;
+        getEntries();
+    }
+    
+    public List getEntries() {
+        if (entries == null) {
+            List results = new ArrayList();
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(new Date());
+            cal.add(Calendar.DATE, -1 * sinceDays);
+            Date startDate = cal.getTime();        
+            try {
+                Roller roller = RollerFactory.getRoller();
+                PlanetManager planetManager = roller.getPlanetManager();
+                PlanetGroupData group = planetManager.getGroup(groupHandle);
+                List rawEntries = null; 
+                if (feedURL != null) {
+                    rawEntries = planetManager.getFeedEntries(feedURL, offset, length);
+                } else if (groupHandle == null) {
+                    rawEntries = planetManager.getAggregation(startDate, null, offset, length);
+                } else {
+                    rawEntries = planetManager.getAggregation(group, startDate, null, offset, length); 
+                }
+                int count = 0;
+                for (Iterator it = rawEntries.iterator(); it.hasNext();) {
+                    PlanetEntryData entry = (PlanetEntryData) it.next();
+                    if (count++ < length) {
+                        PlanetEntryDataWrapper wrapped = PlanetEntryDataWrapper.wrap(entry);
+                        results.add(wrapped);
+                    } else {
+                        more = true;
+                    }    
+                }
+            } catch (Exception e) {
+                log.error("ERROR: get aggregation", e);
+            }
+            entries = results;
+        }
+        return entries;
+    }   
+}

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PlanetModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PlanetModel.java?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PlanetModel.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/PlanetModel.java Fri Jul 28 10:16:17 2006
@@ -19,22 +19,19 @@
 package org.apache.roller.ui.rendering.model;
 
 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 javax.servlet.http.HttpServletRequest;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.roller.RollerException;
 import org.apache.roller.model.PlanetManager;
 import org.apache.roller.model.Roller;
 import org.apache.roller.model.RollerFactory;
-import org.apache.roller.pojos.PlanetEntryData;
-import org.apache.roller.pojos.PlanetGroupData;
 import org.apache.roller.pojos.PlanetSubscriptionData;
-import org.apache.roller.pojos.wrapper.PlanetEntryDataWrapper;
+import org.apache.roller.pojos.WebsiteData;
 import org.apache.roller.pojos.wrapper.PlanetSubscriptionDataWrapper;
+import org.apache.roller.ui.rendering.util.WeblogPageRequest;
 
 
 /**
@@ -42,6 +39,9 @@
  */
 public class PlanetModel implements Model {
     
+    private WeblogPageRequest pageRequest = null;
+    protected WebsiteData  weblog = null;  
+    
     private static Log log = LogFactory.getLog(PlanetModel.class);
     
     
@@ -49,84 +49,72 @@
         return "planet";
     }
     
-    public void init(Map map) {
-        // no-op for now
+    public void init(Map initData) throws RollerException {
+        // we expect the init data to contain a pageRequest object
+        this.pageRequest = (WeblogPageRequest) initData.get("pageRequest");
+        if(this.pageRequest == null) {
+            throw new RollerException("expected pageRequest from init data");
+        }
+        
+        // extract weblog object
+        weblog = pageRequest.getWeblog();
     } 
     
     
     /**
-     * Get move recent PlanetEntry objects from 'all' and
+     * Get pager for PlanetEntry objects from 'all' and
      * 'exernal' Planet groups. in reverse chrono order.
      * @param offset   Offset into results (for paging)
      * @param len      Max number of results to return
      */
-    public List getAggregation(int sinceDays, int offset, int len) {
-        List results = new ArrayList();
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(new Date());
-        cal.add(Calendar.DATE, -1 * sinceDays);
-        Date startDate = cal.getTime();        
-        try {
-            Roller roller = RollerFactory.getRoller();
-            PlanetManager planetManager = roller.getPlanetManager();
-            List entries = planetManager.getAggregation(startDate, null, offset, len);
-            for (Iterator it = entries.iterator(); it.hasNext();) {
-                PlanetEntryData entry = (PlanetEntryData) it.next();
-                PlanetEntryDataWrapper wrapped = PlanetEntryDataWrapper.wrap(entry);
-                results.add(wrapped);
-            }
-        } catch (Exception e) {
-            log.error("ERROR: get aggregation", e);
-        }
-        return results;
+    public Pager getAggregationPager(int sinceDays, int length) {
+        return new PlanetEntriesPager(
+            null,
+            null,    
+            weblog, 
+            pageRequest.getWeblogPage(),
+            pageRequest.getLocale(),
+            sinceDays,
+            pageRequest.getPageNum(), 
+            length);
     }
     
     
     /**
-     * Get move recent WeblogEntry objects from specified
+     * Get pager for WeblogEntry objects from specified
      * Planet groups in reverse chrono order.
      * @param offset   Offset into results (for paging)
      * @param len      Max number of results to return
      */
-    public List getAggregation(String groupHandle, int sinceDays, int offset, int len) {
-        List list = new ArrayList();
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(new Date());
-        cal.add(Calendar.DATE, -1 * sinceDays);
-        Date startDate = cal.getTime();
-        try {
-            Roller roller = RollerFactory.getRoller();
-            PlanetManager planetManager = roller.getPlanetManager();
-            PlanetGroupData group = planetManager.getGroup(groupHandle);
-            if (group != null) {
-                list = planetManager.getAggregation(group, startDate, null, offset, len);
-            }
-        } catch (Exception e) {
-            log.error("ERROR: get aggregation", e);
-        }
-        return list;
+    public Pager getAggregationPager(String groupHandle, int sinceDays, int length) {
+        return new PlanetEntriesPager(
+            null,
+            groupHandle,
+            weblog, 
+            pageRequest.getWeblogPage(),
+            pageRequest.getLocale(),
+            sinceDays,
+            pageRequest.getPageNum(), 
+            length);
     }
     
     
     /**
-     * Get move recent WeblogEntry objects from specified
-     * Planet subscription in reverse chrono order.
+     * Get pager for WeblogEntry objects from specified
+     * Planet feed in reverse chrono order.
      * @param offset   Offset into results (for paging)
      * @param len      Max number of results to return
      */
-    public List getFeed(String feedUrl, int offset, int len) {
-        List list = new ArrayList();
-        try {
-            Roller roller = RollerFactory.getRoller();
-            PlanetManager planetManager = roller.getPlanetManager();
-            PlanetSubscriptionData sub = planetManager.getSubscription(feedUrl);
-            if (sub != null) {
-                list = sub.getEntries();
-            }
-        } catch (Exception e) {
-            log.error("ERROR: get feed", e);
-        }
-        return list;
+    public Pager getFeedPager(String feedURL, int length) {
+        return new PlanetEntriesPager(
+            feedURL,
+            null,
+            weblog, 
+            pageRequest.getWeblogPage(),
+            pageRequest.getLocale(),
+            -1,
+            pageRequest.getPageNum(), 
+            length);
     }
     
     
@@ -136,8 +124,8 @@
      * @param offset   Offset into results (for paging)
      * @param len      Max number of results to return
      */
-    public List getRankedSubscriptions(int sinceDays, int offset, int length) {
-        return getRankedSubscriptions(null, sinceDays, offset, length);
+    public List getRankedSubscriptions(int sinceDays, int length) {
+        return getRankedSubscriptions(null, sinceDays, length);
     }
     
     
@@ -148,12 +136,12 @@
      * @param offset      Offset into results (for paging)
      * @param len         Max number of results to return
      */
-    public List getRankedSubscriptions(String groupHandle, int sinceDays, int offset, int length) {
+    public List getRankedSubscriptions(String groupHandle, int sinceDays, int length) {
         List list = new ArrayList();
         try {
             Roller roller = RollerFactory.getRoller();
             PlanetManager planetManager = roller.getPlanetManager();
-            List subs = planetManager.getTopSubscriptions(groupHandle, offset, length);
+            List subs = planetManager.getTopSubscriptions(groupHandle, 0, length);
             for (Iterator it = subs.iterator(); it.hasNext();) {
                 PlanetSubscriptionData sub = (PlanetSubscriptionData) it.next();
                 list.add(PlanetSubscriptionDataWrapper.wrap(sub)); 

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SearchResultsModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SearchResultsModel.java?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SearchResultsModel.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SearchResultsModel.java Fri Jul 28 10:16:17 2006
@@ -120,7 +120,7 @@
     }
     
     // override page model and return search results pager
-    public WeblogEntriesPager getWeblogEntriesPager() {
+    public WeblogEntriesMapPager getWeblogEntriesPager() {
         return pager;
     }
     

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SearchResultsPager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SearchResultsPager.java?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SearchResultsPager.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SearchResultsPager.java Fri Jul 28 10:16:17 2006
@@ -28,7 +28,7 @@
 /**
  * Pager for navigating through search results.
  */
-public class SearchResultsPager implements WeblogEntriesPager {
+public class SearchResultsPager implements WeblogEntriesMapPager {
     
     private Map entries = null;
     

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SiteModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SiteModel.java?rev=426611&r1=426610&r2=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SiteModel.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/SiteModel.java Fri Jul 28 10:16:17 2006
@@ -33,15 +33,12 @@
 import org.apache.roller.model.RollerFactory;
 import org.apache.roller.model.UserManager;
 import org.apache.roller.model.WeblogManager;
-import org.apache.roller.pojos.CommentData;
 import org.apache.roller.pojos.PermissionsData;
 import org.apache.roller.pojos.UserData;
-import org.apache.roller.pojos.WeblogEntryData;
 import org.apache.roller.pojos.WebsiteData;
-import org.apache.roller.pojos.wrapper.CommentDataWrapper;
 import org.apache.roller.pojos.wrapper.UserDataWrapper;
-import org.apache.roller.pojos.wrapper.WeblogEntryDataWrapper;
 import org.apache.roller.pojos.wrapper.WebsiteDataWrapper;
+import org.apache.roller.ui.rendering.util.WeblogPageRequest;
 
 
 /**
@@ -49,46 +46,143 @@
  */
 public class SiteModel implements Model {
     
-    private static Log log = LogFactory.getLog(SiteModel.class);
-    
+    private WeblogPageRequest pageRequest = null;
+    protected WebsiteData  weblog = null;
+    private static Log log = LogFactory.getLog(SiteModel.class);    
     
     public String getModelName() {
         return "site";
     }
     
-    public void init(Map map) throws RollerException {
-        // no-op for now
+    public void init(Map initData) throws RollerException {        
+        // we expect the init data to contain a pageRequest object
+        this.pageRequest = (WeblogPageRequest) initData.get("pageRequest");
+        if(this.pageRequest == null) {
+            throw new RollerException("expected pageRequest from init data");
+        }
+        
+        // extract weblog object
+        weblog = pageRequest.getWeblog();
     }
     
+    //----------------------------------------------------------------- Pagers
     
     /**
-     * Get most collection of Website objects,
-     * in reverse chrono order by creationDate.
+     * Get pager ofWeblogEntry objects across all weblogs, in reverse chrono order by pubTime.
+     * @param sinceDays Limit to past X days in past (or -1 for no limit)
+     * @param length    Max number of results to return
+     */
+    public Pager getWeblogEntriesPager(int sinceDays, int length) {
+        return new WeblogEntriesPager(
+            weblog, null, null, null,
+            pageRequest.getWeblogPage(),
+            pageRequest.getLocale(),
+            sinceDays,
+            pageRequest.getPageNum(), 
+            length);
+    }
+    
+       
+    /**
+     * Get pager ofWeblogEntry objects across all weblogs,
+     * in reverse chrono order by pubTime.
+     * @param queryWeblog Restrict to this weblog
+     * @param user        Restrict to this user
+     * @param cat         Restrict to this category
+     * @param sinceDays   Limit to past X days in past (or -1 for no limit)
+     * @param length      Max number of results to return
+     */   
+    public Pager getWeblogEntriesPager(WebsiteData queryWeblog, UserData user, String cat, int sinceDays, int length) {
+        return new WeblogEntriesPager(
+            weblog, queryWeblog, user, cat,
+            pageRequest.getWeblogPage(),
+            pageRequest.getLocale(),
+            sinceDays,
+            pageRequest.getPageNum(), 
+            length);
+    }    
+    
+    
+    /*
+     * Get pager of most recent Comment objects across all weblogs,
+     * in reverse chrono order by postTime.
      * @param offset   Offset into results (for paging)
      * @param len      Max number of results to return
      */
-    public List getWeblogs(int sinceDays, int offset, int length) {
-        List results = new ArrayList();
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(new Date());
-        cal.add(Calendar.DATE, -1 * sinceDays);
-        Date startDate = cal.getTime();
+    public Pager getCommentsPager(int sinceDays, int length) {
+        return new CommentsPager(
+            weblog, 
+            pageRequest.getWeblogPage(),
+            pageRequest.getLocale(),
+            sinceDays,
+            pageRequest.getPageNum(), 
+            length);
+    }     
+    
+    
+    /* Get pager of users whose names begin with specified letter */
+    public Pager getUsersByLetterPager(String letter, int sinceDays, int length) {
+        return new UsersPager(
+            letter,
+            weblog, 
+            pageRequest.getWeblogPage(),
+            pageRequest.getLocale(),
+            sinceDays,
+            pageRequest.getPageNum(), 
+            length);
+    }      
+    
+    
+    /** Get pager of weblogs whose handles begin with specified letter */
+    public Pager getWeblogsByLetterPager(String letter, int sinceDays, int length) {
+        return new WeblogsPager(
+            letter,
+            weblog, 
+            pageRequest.getWeblogPage(),
+            pageRequest.getLocale(),
+            sinceDays,
+            pageRequest.getPageNum(), 
+            length);
+    }   
+    
+    //--------------------------------------------------- User/weblog directory 
+
+    /**
+     * Get map with 26 entries, one for each letter A-Z and
+     * containing integers reflecting the number of users whose
+     * names start with each letter.
+     */
+    public Map getUserNameLetterMap() {
+        Map results = new HashMap();
         try {            
             Roller roller = RollerFactory.getRoller();
             UserManager umgr = roller.getUserManager();
-            List weblogs = umgr.getWebsites(
-                null, Boolean.TRUE, Boolean.TRUE, startDate, null, offset, length);
-            for (Iterator it = weblogs.iterator(); it.hasNext();) {
-                WebsiteData website = (WebsiteData) it.next();
-                results.add(WebsiteDataWrapper.wrap(website));
-            }
+            results = umgr.getUserNameLetterMap();
         } catch (Exception e) {
-            log.error("ERROR: fetching weblog list", e);
+            log.error("ERROR: fetching username letter map", e);
         }
         return results;
     }
     
     
+    /**
+     * Get map with 26 entries, one for each letter A-Z and
+     * containing integers reflecting the number of weblogs whose
+     * names start with each letter.
+     */
+    public Map getWeblogHandleLetterMap() {
+        Map results = new HashMap();
+        try {            
+            Roller roller = RollerFactory.getRoller();
+            UserManager umgr = roller.getUserManager();
+            results = umgr.getWeblogHandleLetterMap();
+        } catch (Exception e) {
+            log.error("ERROR: fetching weblog handle letter map", e);
+        }
+        return results;
+    }
+    
+
     /** 
      * Return list of weblogs that user belongs to.
      */
@@ -131,110 +225,46 @@
     }
     
     
-    /**
-     * Get most collection of most commented websites, as StatCount objects,
-     * in descending order by number of comments.
-     * @param sinceDays Only consider weblogs updated in the last sinceDays
-     * @param offset   Offset into results (for paging)
-     * @param length   Max number of results to return
-     */
-    public List getMostCommentedWeblogs(int sinceDays , int offset, int length) {
-        List results = new ArrayList();
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(new Date());
-        cal.add(Calendar.DATE, -1 * sinceDays);
-        Date startDate = cal.getTime();
-        try {            
-            Roller roller = RollerFactory.getRoller();
-            UserManager umgr = roller.getUserManager();
-            results = umgr.getMostCommentedWebsites(
-                    startDate, new Date(), offset, length);
-        } catch (Exception e) {
-            log.error("ERROR: fetching commented weblog list", e);
-        }
-        return results;
-    }
-    
     
-    /**
-     * Get most commented weblog entries across all weblogs, as StatCount 
-     * objects, in descending order by number of comments.
-     * @param sinceDays Only consider weblogs updated in the last sinceDays
-     * @param cats     To limit results to list of category names
-     * @param offset   Offset into results (for paging)
-     * @param len      Max number of results to return
-     */
-    public List getMostCommentedWeblogEntries(
-            List cats, int sinceDays, int offset, int length) {
-        List results = new ArrayList();
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(new Date());
-        cal.add(Calendar.DATE, -1 * sinceDays);
-        Date startDate = cal.getTime();
+    /** Get User object by username */
+    public UserDataWrapper getUser(String username) {
+        UserDataWrapper wrappedUser = null;
         try {            
             Roller roller = RollerFactory.getRoller();
-            WeblogManager wmgr = roller.getWeblogManager();
-            results = wmgr.getMostCommentedWeblogEntries(
-                    null, startDate, new Date(), offset, length);
+            UserManager umgr = roller.getUserManager();
+            UserData user = umgr.getUserByUserName(username, Boolean.TRUE);
+            wrappedUser = UserDataWrapper.wrap(user);
         } catch (Exception e) {
-            log.error("ERROR: fetching commented weblog entries list", e);
+            log.error("ERROR: fetching users by letter", e);
         }
-        return results;
+        return wrappedUser;
     }
     
     
-    /**
-     * Get most recent WeblogEntry objects across all weblogs,
-     * in reverse chrono order by pubTime.
-     * @param handle    Restrict to this weblog handle (or 'nil' for all)
-     * @param userName  Restrict to this userName (or 'nil' for all)
-     * @param cat       Restrict to category (or 'nil' for all)
-     * @param sinceDays Limit to past X days in past (or -1 for no limit)
-     * @param offset    Offset into results (for paging)
-     * @param length    Max number of results to return
-     */
-    public List getWeblogEntries(String handle, String userName, String cat, int sinceDays, int offset, int length) {
-        List results = new ArrayList();
-        if (handle != null && handle.equals("nil")) handle = null;
-        if (userName != null && userName.equals("nil")) userName = null;
-        if (cat != null && cat.equals("nil")) cat = null;
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(new Date());
-        cal.add(Calendar.DATE, -1 * sinceDays);
-        Date startDate = cal.getTime();
+    /** Get Website object by handle */
+    public WebsiteDataWrapper getWeblog(String handle) {
+        WebsiteDataWrapper wrappedWebsite = null;
         try {            
             Roller roller = RollerFactory.getRoller();
-            WeblogManager wmgr = roller.getWeblogManager();
             UserManager umgr = roller.getUserManager();
-            WebsiteData website = null;
-            if (handle != null) {
-                website = umgr.getWebsiteByHandle(handle);
-            }
-            UserData user = null;
-            if (userName != null) {
-                user = umgr.getUserByUserName(userName);
-            }
-            // TODO 3.0: we may want this to be constrained by a locale
-            List entries = wmgr.getWeblogEntries( 
-                website, user, startDate, new Date(), cat, WeblogEntryData.PUBLISHED, "pubTime", null, offset, length);
-            for (Iterator it = entries.iterator(); it.hasNext();) {
-                WeblogEntryData entry = (WeblogEntryData) it.next();
-                results.add(WeblogEntryDataWrapper.wrap(entry));
-            }
+            WebsiteData website = umgr.getWebsiteByHandle(handle);
+            wrappedWebsite = WebsiteDataWrapper.wrap(website);
         } catch (Exception e) {
-            log.error("ERROR: fetching weblog list", e);
+            log.error("ERROR: fetching users by letter", e);
         }
-        return results;
+        return wrappedWebsite;
     }
     
+        
+    //------------------------------------------------------- Small collections
     
-    /**
-     * Get most recent Comment objects across all weblogs,
-     * in reverse chrono order by postTime.
+    /*
+     * Get most collection of Website objects,
+     * in reverse chrono order by creationDate.
      * @param offset   Offset into results (for paging)
      * @param len      Max number of results to return
      */
-    public List getComments(int sinceDays, int offset, int length) {
+    public List getNewWeblogs(int sinceDays, int length) {
         List results = new ArrayList();
         Calendar cal = Calendar.getInstance();
         cal.setTime(new Date());
@@ -242,32 +272,31 @@
         Date startDate = cal.getTime();
         try {            
             Roller roller = RollerFactory.getRoller();
-            WeblogManager wmgr = roller.getWeblogManager();
-            List entries = wmgr.getComments( 
-                null, null, null, startDate, new Date(), 
-                Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, true, offset, length);
-            for (Iterator it = entries.iterator(); it.hasNext();) {
-                CommentData comment = (CommentData) it.next();
-                results.add(CommentDataWrapper.wrap(comment));
+            UserManager umgr = roller.getUserManager();
+            List weblogs = umgr.getWebsites(
+                null, Boolean.TRUE, Boolean.TRUE, startDate, null, 0, length);
+            for (Iterator it = weblogs.iterator(); it.hasNext();) {
+                WebsiteData website = (WebsiteData) it.next();
+                results.add(WebsiteDataWrapper.wrap(website));
             }
         } catch (Exception e) {
-            log.error("ERROR: fetching comment list", e);
+            log.error("ERROR: fetching weblog list", e);
         }
         return results;
     }
-    
-    
-    /**
+           
+
+    /*
      * Get most recent User objects, in reverse chrono order by creationDate.
      * @param offset   Offset into results (for paging)
      * @param len      Max number of results to return
      */
-    public List getUsers(int sinceDays, int offset, int length) {
+    public List getNewUsers(int sinceDays, int length) {
         List results = new ArrayList();
         try {            
             Roller roller = RollerFactory.getRoller();
             UserManager umgr = roller.getUserManager();
-            List users = umgr.getUsers(offset, length);
+            List users = umgr.getUsers(0, length);
             for (Iterator it = users.iterator(); it.hasNext();) {
                 UserData user = (UserData) it.next();
                 results.add(UserDataWrapper.wrap(user));
@@ -276,21 +305,20 @@
             log.error("ERROR: fetching weblog list", e);
         }
         return results;
-    }
+    }   
     
     
     /**
      * Get list of WebsiteDisplay objects, ordered by number of hits.
      * @param sinceDays Only consider weblogs updated in the last sinceDays
-     * @param offset   Offset into results (for paging)
      * @param len      Max number of results to return
      */
-    public List getHotWeblogs(int sinceDays, int offset, int length) {
+    public List getHotWeblogs(int sinceDays, int length) {
         List results = new ArrayList();
         try {            
             Roller roller = RollerFactory.getRoller();
             RefererManager rmgr = roller.getRefererManager();
-            results = rmgr.getHotWeblogs(sinceDays, offset, length);
+            results = rmgr.getHotWeblogs(sinceDays, 0, length);
         } catch (Exception e) {
             log.error("ERROR: fetching hot weblog list", e);
         }
@@ -298,107 +326,53 @@
     }
     
     
-    /** Get User object by username */
-    public UserDataWrapper getUser(String username) {
-        UserDataWrapper wrappedUser = null;
-        try {            
-            Roller roller = RollerFactory.getRoller();
-            UserManager umgr = roller.getUserManager();
-            UserData user = umgr.getUserByUserName(username, Boolean.TRUE);
-            wrappedUser = UserDataWrapper.wrap(user);
-        } catch (Exception e) {
-            log.error("ERROR: fetching users by letter", e);
-        }
-        return wrappedUser;
-    }
-    
-    
-    /** Get Website object by handle */
-    public WebsiteDataWrapper getWeblog(String handle) {
-        WebsiteDataWrapper wrappedWebsite = null;
-        try {            
-            Roller roller = RollerFactory.getRoller();
-            UserManager umgr = roller.getUserManager();
-            WebsiteData website = umgr.getWebsiteByHandle(handle);
-            wrappedWebsite = WebsiteDataWrapper.wrap(website);
-        } catch (Exception e) {
-            log.error("ERROR: fetching users by letter", e);
-        }
-        return wrappedWebsite;
-    }
-    
-    
     /**
-     * Get map with 26 entries, one for each letter A-Z and
-     * containing integers reflecting the number of users whose
-     * names start with each letter.
+     * Get most collection of most commented websites, as StatCount objects,
+     * in descending order by number of comments.
+     * @param sinceDays Only consider weblogs updated in the last sinceDays
+     * @param offset   Offset into results (for paging)
+     * @param length   Max number of results to return
      */
-    public Map getUserNameLetterMap() {
-        Map results = new HashMap();
-        try {            
-            Roller roller = RollerFactory.getRoller();
-            UserManager umgr = roller.getUserManager();
-            results = umgr.getUserNameLetterMap();
-        } catch (Exception e) {
-            log.error("ERROR: fetching username letter map", e);
-        }
-        return results;
-    }
-    
-    
-    /** Get collection of users whose names begin with specified letter */
-    public List getUsersByLetter(String letter, int offset, int length) {
+    public List getMostCommentedWeblogs(int sinceDays , int length) {
         List results = new ArrayList();
-        letter = letter.toUpperCase();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(new Date());
+        cal.add(Calendar.DATE, -1 * sinceDays);
+        Date startDate = cal.getTime();
         try {            
             Roller roller = RollerFactory.getRoller();
             UserManager umgr = roller.getUserManager();
-            List users = umgr.getUsersByLetter(letter.charAt(0), offset, length);
-            for (Iterator it = users.iterator(); it.hasNext();) {
-                UserData user = (UserData) it.next();
-                results.add(UserDataWrapper.wrap(user));
-            }
+            results = umgr.getMostCommentedWebsites(
+                    startDate, new Date(), 0, length);
         } catch (Exception e) {
-            log.error("ERROR: fetching users by letter", e);
+            log.error("ERROR: fetching commented weblog list", e);
         }
         return results;
     }
     
     
     /**
-     * Get map with 26 entries, one for each letter A-Z and
-     * containing integers reflecting the number of weblogs whose
-     * names start with each letter.
+     * Get most commented weblog entries across all weblogs, as StatCount 
+     * objects, in descending order by number of comments.
+     * @param sinceDays Only consider weblogs updated in the last sinceDays
+     * @param cats     To limit results to list of category names
+     * @param len      Max number of results to return
      */
-    public Map getWeblogHandleLetterMap() {
-        Map results = new HashMap();
-        try {            
-            Roller roller = RollerFactory.getRoller();
-            UserManager umgr = roller.getUserManager();
-            results = umgr.getWeblogHandleLetterMap();
-        } catch (Exception e) {
-            log.error("ERROR: fetching weblog handle letter map", e);
-        }
-        return results;
-    }
-    
-    
-    /** Get collection of weblogs whose handles begin with specified letter */
-    public List getWeblogsByLetter(String letter, int offset, int length) {
+    public List getMostCommentedWeblogEntries(
+            List cats, int sinceDays, int length) {
         List results = new ArrayList();
-        letter = letter.toUpperCase();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(new Date());
+        cal.add(Calendar.DATE, -1 * sinceDays);
+        Date startDate = cal.getTime();
         try {            
             Roller roller = RollerFactory.getRoller();
-            UserManager umgr = roller.getUserManager();
-            List weblogs = umgr.getWeblogsByLetter(letter.charAt(0), offset, length);
-            for (Iterator it = weblogs.iterator(); it.hasNext();) {
-                WebsiteData website = (WebsiteData) it.next();
-                results.add(WebsiteDataWrapper.wrap(website));
-            }
+            WeblogManager wmgr = roller.getWeblogManager();
+            results = wmgr.getMostCommentedWeblogEntries(
+                    null, startDate, new Date(), 0, length);
         } catch (Exception e) {
-            log.error("ERROR: fetching weblogs by letter", e);
+            log.error("ERROR: fetching commented weblog entries list", e);
         }
         return results;
     }
-    
 }

Added: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/UsersPager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/UsersPager.java?rev=426611&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/UsersPager.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/UsersPager.java Fri Jul 28 10:16:17 2006
@@ -0,0 +1,99 @@
+/*
+ * 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.model;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ResourceBundle;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.model.Roller;
+import org.apache.roller.model.RollerFactory;
+import org.apache.roller.model.UserManager;
+import org.apache.roller.pojos.UserData;
+import org.apache.roller.pojos.WeblogTemplate;
+import org.apache.roller.pojos.WebsiteData;
+import org.apache.roller.pojos.wrapper.UserDataWrapper;
+import org.apache.roller.util.URLUtilities;
+
+/**
+ * Paging for users.
+ */
+public class UsersPager extends AbstractPager {
+    private List users;    
+    private String letter = null;
+    protected static Log log =
+            LogFactory.getFactory().getInstance(UsersPager.class);
+    
+    /** Creates a new instance of CommentPager */
+    public UsersPager(            
+            WebsiteData    weblog,             
+            WeblogTemplate weblogPage,
+            String         locale,
+            int            sinceDays,
+            int            page,
+            int            length) {
+        super(weblog, weblogPage, locale, sinceDays, page, length);
+        getUsers();
+    }
+    
+    /** Creates a new instance of CommentPager */
+    public UsersPager(   
+            String letter,
+            WebsiteData    weblog,             
+            WeblogTemplate weblogPage,
+            String         locale,
+            int            sinceDays,
+            int            page,
+            int            length) {
+        super(weblog, weblogPage, locale, sinceDays, page, length);
+        this.letter = letter;
+        getUsers();
+    }
+    
+    public List getUsers() {
+        if (users == null) {
+            List results = new ArrayList();
+            try {            
+                Roller roller = RollerFactory.getRoller();
+                UserManager umgr = roller.getUserManager();
+                List rawUsers = null;
+                if (letter == null) {
+                    rawUsers = umgr.getUsers(offset, length + 1);
+                } else {
+                    rawUsers = umgr.getUsersByLetter(letter.charAt(0), offset, length);
+                }
+                int count = 0;
+                for (Iterator it = rawUsers.iterator(); it.hasNext();) {
+                    UserData user = (UserData) it.next();
+                    if (count++ < length) {
+                        results.add(UserDataWrapper.wrap(user));
+                    } else {
+                        more = true;
+                    }                    
+                }
+            } catch (Exception e) {
+                log.error("ERROR: fetching user list", e);
+            }
+            users = results;
+        }
+        return users;
+    }   
+}

Copied: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesMapPager.java (from r426351, incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPager.java)
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesMapPager.java?p2=incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesMapPager.java&p1=incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPager.java&r1=426351&r2=426611&rev=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPager.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesMapPager.java Fri Jul 28 10:16:17 2006
@@ -41,7 +41,7 @@
  * Collection returned is a list of lists of entries, where each list of 
  * entries represents one day.
  */
-public interface WeblogEntriesPager {
+public interface WeblogEntriesMapPager extends Pager {
         
     /**
      * A map of entries representing this collection.
@@ -50,31 +50,6 @@
      * entry objects keyed by the date they were published.
      */
     public Map getEntries();
-        
-    /**
-     * Link value for returning to pager home
-     */
-    public String getHomeLink();
-    /**
-     * Name of pager home.
-     */
-    public String getHomeName();    
-    /**
-     * Link value for next page in current collection view
-     */
-    public String getNextLink();
-    /**
-     * Name for next page in current collection view
-     */
-    public String getNextName();    
-    /**
-     * Link value for prev page in current collection view
-     */
-    public String getPrevLink(); 
-    /**
-     * Link value for prev page in current collection view
-     */
-    public String getPrevName();  
     /**
      * Link value for next collection view
      */

Copied: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesMapPagerImpl.java (from r426351, incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPagerImpl.java)
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesMapPagerImpl.java?p2=incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesMapPagerImpl.java&p1=incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPagerImpl.java&r1=426351&r2=426611&rev=426611&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPagerImpl.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesMapPagerImpl.java Fri Jul 28 10:16:17 2006
@@ -53,13 +53,13 @@
  * Collection returned is a list of lists of entries, where each list of 
  * entries represents one day.
  */
-public class WeblogEntriesPagerImpl implements WeblogEntriesPager {
+public class WeblogEntriesMapPagerImpl implements WeblogEntriesMapPager {
     
     /**
      * Behavior of the pager is detemined by the mode, which is itself a pager.
      * The mode may be LatestMode, SingleEntryMode, DayMode or MonthMode.
      */
-    protected WeblogEntriesPager mode = null;    
+    protected WeblogEntriesMapPager mode = null;    
     protected Map                entries = null;    
     protected WebsiteData        weblog = null;
     protected WeblogTemplate     weblogPage = null;
@@ -73,16 +73,17 @@
     protected int                length = 0;
     
     protected static Log log =
-            LogFactory.getFactory().getInstance(WeblogEntriesPagerImpl.class);
+            LogFactory.getFactory().getInstance(WeblogEntriesMapPagerImpl.class);
     
     private static ResourceBundle bundle =
             ResourceBundle.getBundle("ApplicationResources");
+    
     private SimpleDateFormat dayFormat = new SimpleDateFormat(
             bundle.getString("weblogEntriesPager.day.dateFormat"));
     private SimpleDateFormat monthFormat = new SimpleDateFormat(
             bundle.getString("weblogEntriesPager.month.dateFormat"));
     
-    public WeblogEntriesPagerImpl(
+    public WeblogEntriesMapPagerImpl(
             WebsiteData        weblog, 
             WeblogTemplate     weblogPage,
             WeblogEntryData    entry,
@@ -167,7 +168,7 @@
      * We're paging through the latest entries in the blog.
      * In this mode there's no prev/next collection.
      */
-    class LatestMode implements WeblogEntriesPager {
+    class LatestMode implements WeblogEntriesMapPager {
         
         public LatestMode() {
             LatestMode.this.getEntries();
@@ -237,7 +238,7 @@
      * Next/prev return permalinks of next and previous weblog entries.
      * In this mode there's no prev/next collection.
      */
-    class SingleEntryMode implements WeblogEntriesPager {
+    class SingleEntryMode implements WeblogEntriesMapPager {
         String nextLink = null;
         WeblogEntryData nextEntry = null;
         WeblogEntryData prevEntry = null;
@@ -363,7 +364,7 @@
      * Next/prev methods return links to offsets within day's entries.
      * Next/prev collection methods return links to next and previous days.
      */
-    class DayMode implements WeblogEntriesPager {
+    class DayMode implements WeblogEntriesMapPager {
         private Date day;
         private Date nextDay;
         private Date prevDay;
@@ -480,7 +481,7 @@
      * Next/prev methods return links to offsets within month's entries.
      * Next/prev collection methods return links to next and previous months.
      */
-    class MonthMode implements WeblogEntriesPager {
+    class MonthMode implements WeblogEntriesMapPager {
         private Date month;
         private Date nextMonth;
         private Date prevMonth;

Added: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPager.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPager.java?rev=426611&view=auto
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPager.java (added)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPager.java Fri Jul 28 10:16:17 2006
@@ -0,0 +1,104 @@
+/*
+ * 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.model;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.model.Roller;
+import org.apache.roller.model.RollerFactory;
+import org.apache.roller.model.UserManager;
+import org.apache.roller.model.WeblogManager;
+import org.apache.roller.pojos.UserData;
+import org.apache.roller.pojos.WeblogEntryData;
+import org.apache.roller.pojos.WeblogTemplate;
+import org.apache.roller.pojos.WebsiteData;
+import org.apache.roller.pojos.wrapper.WeblogEntryDataWrapper;
+
+/**
+ * Simple pager for list of weblog entries.
+ */
+public class WeblogEntriesPager extends AbstractPager {
+    private WebsiteData queryWeblog;
+    private UserData    queryUser;
+    private String      queryCat;
+    private List        entries;    
+    protected static Log log =
+            LogFactory.getFactory().getInstance(PlanetEntriesPager.class);
+    
+    public WeblogEntriesPager(            
+            WebsiteData    weblog,
+            WebsiteData    queryWeblog,
+            UserData       queryUser,
+            String         queryCat,
+            WeblogTemplate weblogPage,
+            String         locale,
+            int            sinceDays,
+            int            page,
+            int            length) {
+        super(weblog, weblogPage, locale, sinceDays, page, length);
+        this.queryWeblog = queryWeblog;
+        this.queryUser = queryUser;
+        this.queryCat = queryCat;
+        getEntries();
+    }
+    
+    public List getEntries() {
+        if (entries == null) {
+            List results = new ArrayList();
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(new Date());
+            cal.add(Calendar.DATE, -1 * sinceDays);
+            Date startDate = cal.getTime();
+            try {            
+                Roller roller = RollerFactory.getRoller();
+                WeblogManager wmgr = roller.getWeblogManager();
+                UserManager umgr = roller.getUserManager();
+                List rawEntries = wmgr.getWeblogEntries( 
+                    queryWeblog, 
+                    queryUser, 
+                    startDate, 
+                    new Date(), 
+                    queryCat, 
+                    WeblogEntryData.PUBLISHED, 
+                    "pubTime", 
+                    locale, 
+                    offset, 
+                    length + 1);
+                int count = 0;
+                for (Iterator it = rawEntries.iterator(); it.hasNext();) {
+                    WeblogEntryData entry = (WeblogEntryData) it.next();
+                    if (count++ < length) {
+                        results.add(WeblogEntryDataWrapper.wrap(entry));
+                    } else {
+                        more = true;
+                    }                      
+                }
+            } catch (Exception e) {
+                log.error("ERROR: fetching weblog entries list", e);
+            }
+            entries = results;
+        }
+        return entries;
+    }   
+}