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/02/11 04:52:15 UTC

svn commit: r376921 - /incubator/roller/trunk/src/org/roller/presentation/velocity/ContextLoader.java

Author: snoopdave
Date: Fri Feb 10 19:52:13 2006
New Revision: 376921

URL: http://svn.apache.org/viewcvs?rev=376921&view=rev
Log:
Feeds obey weblog entry count, but don't exceed site-wide maxEntries setting

Modified:
    incubator/roller/trunk/src/org/roller/presentation/velocity/ContextLoader.java

Modified: incubator/roller/trunk/src/org/roller/presentation/velocity/ContextLoader.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/velocity/ContextLoader.java?rev=376921&r1=376920&r2=376921&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/velocity/ContextLoader.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/velocity/ContextLoader.java Fri Feb 10 19:52:13 2006
@@ -47,7 +47,6 @@
 
 /**
  * Load Velocity Context with Roller objects, values, and custom plugins.
- *
  * @author llavandowska
  * @author David M Johnson
  */
@@ -68,7 +67,10 @@
      * Setup the a Velocity context by loading it with objects, values, and
      * RollerPagePlugins needed for Roller page execution.
      */
-    public static void setupContext(Context ctx, RollerRequest rreq, HttpServletResponse response )
+    public static void setupContext(
+            Context ctx, 
+            RollerRequest rreq, 
+            HttpServletResponse response )
             throws RollerException {
         
         mLogger.debug("setupContext( ctx = "+ctx+")");
@@ -79,7 +81,7 @@
         try {
             // Add page model object to context
             String pageModelClassName =
-                    RollerConfig.getProperty("velocity.pagemodel.classname");
+                RollerConfig.getProperty("velocity.pagemodel.classname");
             Class pageModelClass = Class.forName(pageModelClassName);
             PageModel pageModel = (PageModel)pageModelClass.newInstance();
             pageModel.init(rreq);
@@ -93,15 +95,16 @@
         PageHelper pageHelper = new PageHelper(request, response, ctx);
         Roller roller = RollerFactory.getRoller();
         ctx.put("pageHelper", pageHelper);
-        
+                
         // Load standard Roller objects and values into the context
-        String handle = loadWebsiteValues(ctx, rreq, rollerCtx );
-        loadWeblogValues( ctx, rreq, rollerCtx, handle );
-        loadPathValues( ctx, rreq, rollerCtx, handle );
-        loadRssValues( ctx, rreq, handle );
-        loadUtilityObjects( ctx, rreq, rollerCtx, handle );
-        loadRequestParamKeys(ctx);
-        loadStatusMessage( ctx, rreq );
+        WebsiteData website = 
+            loadWebsiteValues(ctx, rreq, rollerCtx );
+        loadWeblogValues(     ctx, rreq, rollerCtx, website );
+        loadPathValues(       ctx, rreq, rollerCtx, website );
+        loadRssValues(        ctx, rreq, website );
+        loadUtilityObjects(   ctx, rreq, rollerCtx, website );
+        loadRequestParamKeys( ctx);
+        loadStatusMessage(    ctx, rreq );
         
         // If single entry is specified, load comments too
         if ( rreq.getWeblogEntry() != null ) {
@@ -111,53 +114,90 @@
         // add Velocity Toolbox tools to context
         loadToolboxContext(request, response, ctx);
     }
-    
-    
+        
     /**
-     * If there is an ERROR or STATUS message in the session,
-     * place it into the Context for rendering later.
-     *
-     * @param rreq
+     * Load website object and related objects.
      */
-    private static void loadStatusMessage(Context ctx, RollerRequest rreq) {
+    protected static WebsiteData loadWebsiteValues(
+            Context ctx, 
+            RollerRequest rreq, 
+            RollerContext rollerCtx )
+            throws RollerException {
+                
+        Roller mRoller = RollerFactory.getRoller();
+        Map props = mRoller.getPropertiesManager().getProperties();
         
-        mLogger.debug("Loading status message");
+        WebsiteData website = rreq.getWebsite();            
+        if (website == null && rreq.getRequest().getParameter("entry") != null) {
+            String handle = rreq.getRequest().getParameter("entry");
+            website = RollerFactory.getRoller().getUserManager().getWebsiteByHandle(handle);
+        }
+        if (website == null && rreq.getRequest().getAttribute(RollerRequest.OWNING_WEBSITE) != null) {
+            website = (WebsiteData)rreq.getRequest().getAttribute(RollerRequest.OWNING_WEBSITE);
+        } 
         
-        HttpSession session = rreq.getRequest().getSession(false);
-        String msg = null;
-        if (session != null)
-            msg = (String)session.getAttribute(RollerSession.ERROR_MESSAGE);
-        if (msg != null) {
-            ctx.put("errorMessage", msg);
-            session.removeAttribute(RollerSession.ERROR_MESSAGE);
+        if (website != null) {
+            ctx.put("userName",         website.getHandle());
+            ctx.put("fullName",         website.getName() );
+            ctx.put("emailAddress",     website.getEmailAddress() );
+            ctx.put("encodedEmail",     RegexUtil.encode(website.getEmailAddress()));
+            ctx.put("obfuscatedEmail",  RegexUtil.obfuscateEmail(website.getEmailAddress()));
+            
+            // setup Locale for future rendering
+            ctx.put("locale", website.getLocaleInstance());
+            
+            // setup Timezone for future rendering
+            ctx.put("timezone", website.getTimeZoneInstance());
+            ctx.put("timeZone", website.getTimeZoneInstance());
+        } else {
+            website = new WebsiteData();
+            website.setAllowComments(Boolean.FALSE);
+            website.setHandle("zzz_none_zzz");
+            website.setName(
+                ((RollerPropertyData)props.get("site.name")).getValue());
+            website.setDescription(
+                ((RollerPropertyData)props.get("site.description")).getValue());
+            ctx.put("handle",   website.getHandle() );
+            ctx.put("userName", website.getHandle() );
+            ctx.put("fullName", website.getHandle());
+            ctx.put("locale",   Locale.getDefault());
+            ctx.put("timezone", TimeZone.getDefault());
+            ctx.put("timeZone", TimeZone.getDefault());
+            ctx.put("emailAddress",
+                ((RollerPropertyData)props.get("site.adminemail")).getValue());
         }
+        ctx.put("website", WebsiteDataWrapper.wrap(website) );
         
-        if (session != null)
-            msg = (String)session.getAttribute(RollerSession.STATUS_MESSAGE);
-        if (msg != null) {
-            ctx.put("statusMessage", msg);
-            session.removeAttribute(RollerSession.STATUS_MESSAGE);
-        }
+        String siteName = ((RollerPropertyData)props.get("site.name")).getValue();
+        if ("Roller-based Site".equals(siteName)) siteName = "Main";
+        ctx.put("siteName", siteName);
+        
+        String siteShortName = ((RollerPropertyData)props.get("site.shortName")).getValue();
+        ctx.put("siteShortName", siteShortName);
+        
+        // add language of the session (using locale of viewer set by Struts)
+        ctx.put("viewLocale",
+                LanguageUtil.getViewLocale(rreq.getRequest()));
+        mLogger.debug("context viewLocale = "+ctx.get( "viewLocale"));
+        
+        return website;
     }
     
-    
     /**
-     * @param ctx
-     * @param rreq
-     * @param rollerCtx
-     * @param userName
+     * Load other values associated with one weblog
      */
-    private static void loadWeblogValues(Context ctx, RollerRequest rreq, 
-                                        RollerContext rollerCtx, String handle)
+    private static void loadWeblogValues(
+            Context ctx, 
+            RollerRequest rreq, 
+            RollerContext 
+            rollerCtx, WebsiteData website)
             throws RollerException {
         
         mLogger.debug("Loading weblog values");
         
         // if there is an "_entry" page, only load it once
-        WebsiteData website =
-                RollerFactory.getRoller().getUserManager().getWebsiteByHandle(handle);
         if (website != null) {
-            /* alternative display pages - customization */
+            // alternative display pages - customization
             Template entryPage = website.getPageByName("_entry");
             if (entryPage != null) {
                 ctx.put("entryPage", TemplateWrapper.wrap(entryPage));
@@ -169,29 +209,23 @@
         }
         
         boolean commentsEnabled =
-                RollerRuntimeConfig.getBooleanProperty("users.comments.enabled");
+            RollerRuntimeConfig.getBooleanProperty("users.comments.enabled");
         boolean trackbacksEnabled =
-                RollerRuntimeConfig.getBooleanProperty("users.trackbacks.enabled");
+            RollerRuntimeConfig.getBooleanProperty("users.trackbacks.enabled");
         boolean linkbacksEnabled =
-                RollerRuntimeConfig.getBooleanProperty("site.linkbacks.enabled");
+            RollerRuntimeConfig.getBooleanProperty("site.linkbacks.enabled");
         ctx.put("commentsEnabled", new Boolean(commentsEnabled) );
         ctx.put("trackbacksEnabled", new Boolean(trackbacksEnabled) );
         ctx.put("linkbacksEnabled", new Boolean(linkbacksEnabled) );
     }
-    
-    
-    private static String figureResourcePath(RollerRequest rreq) {
-        
-        String uploadurl = null;
-        try {
-            uploadurl = RollerFactory.getRoller().getFileManager().getUploadUrl();
-        } catch(Exception e) {}
         
-        return uploadurl;
-    }
-    
-    
-    protected static void loadCommentValues(Context ctx, RollerRequest rreq, RollerContext rollerCtx )
+    /**
+     * Load comments for one weblog entry and related objects.
+     */
+    protected static void loadCommentValues(
+            Context       ctx, 
+            RollerRequest rreq, 
+            RollerContext rollerCtx )
             throws RollerException {
         
         mLogger.debug("Loading comment values");
@@ -199,9 +233,9 @@
         HttpServletRequest request = rreq.getRequest();
         
         String escapeHtml =
-                RollerRuntimeConfig.getProperty("users.comments.escapehtml");
+            RollerRuntimeConfig.getProperty("users.comments.escapehtml");
         String autoFormat =
-                RollerRuntimeConfig.getProperty("users.comments.autoformat");
+            RollerRuntimeConfig.getProperty("users.comments.autoformat");
         
         // Add comments related values to context
         ctx.put("isCommentPage", Boolean.TRUE);
@@ -237,62 +271,13 @@
         }
     }
     
-    
-    protected static void loadPathValues(Context ctx, RollerRequest rreq, 
-                                        RollerContext rollerCtx, String userName)
-            throws RollerException {
-        
-        mLogger.debug("Loading path values");
-        
-        HttpServletRequest request = rreq.getRequest();
-        String url = null;
-        if ( userName != null && !userName.equals("zzz_none_zzz")) {
-            url = Utilities.escapeHTML(
-                    rollerCtx.getAbsoluteContextUrl(request)+"/page/"+userName);
-        } else {
-            url= Utilities.escapeHTML(rollerCtx.getAbsoluteContextUrl(request));
-        }
-        ctx.put("websiteURL", url);
-        ctx.put("baseURL",    rollerCtx.getContextUrl( request ) );
-        ctx.put("absBaseURL", rollerCtx.getAbsoluteContextUrl( request ) );
-        ctx.put("ctxPath",    request.getContextPath() );
-        ctx.put("uploadPath", ContextLoader.figureResourcePath( rreq ) );
-        
-        try {
-            URL absUrl = RequestUtils.absoluteURL(request, "/");
-            ctx.put("host", absUrl.getHost());
-        } catch (MalformedURLException e) {
-            throw new RollerException(e);
-        }
-    }
-    
-    
-    protected static void loadRequestParamKeys(Context ctx) {
-        
-        mLogger.debug("Loading request param keys");
-        
-        // Since Velocity *requires* accessor methods, these values from
-        // RollerRequest are not available to it, put them into the context
-        ctx.put("USERNAME_KEY",           RollerRequest.USERNAME_KEY);
-        ctx.put("WEBSITEID_KEY",          RollerRequest.WEBSITEID_KEY);
-        ctx.put("FOLDERID_KEY",           RollerRequest.FOLDERID_KEY);
-        ctx.put("NEWSFEEDID_KEY",         RollerRequest.NEWSFEEDID_KEY);
-        ctx.put("PAGEID_KEY",             RollerRequest.PAGEID_KEY);
-        ctx.put("PAGELINK_KEY",           RollerRequest.PAGELINK_KEY);
-        ctx.put("ANCHOR_KEY",             RollerRequest.ANCHOR_KEY);
-        ctx.put("EXCERPTS_KEY",           RollerRequest.EXCERPTS_KEY);
-        ctx.put("BOOKMARKID_KEY",         RollerRequest.BOOKMARKID_KEY);
-        ctx.put("REFERERID_KEY",          RollerRequest.REFERERID_KEY);
-        ctx.put("WEBLOGENTRYID_KEY",      RollerRequest.WEBLOGENTRYID_KEY);
-        ctx.put("WEBLOGCATEGORYNAME_KEY", RollerRequest.WEBLOGCATEGORYNAME_KEY);
-        ctx.put("WEBLOGCATEGORYID_KEY",   RollerRequest.WEBLOGENTRIES_KEY);
-        ctx.put("WEBLOGENTRIES_KEY",      RollerRequest.WEBLOGENTRIES_KEY);
-        ctx.put("WEBLOGDAY_KEY",          RollerRequest.WEBLOGDAY_KEY);
-        ctx.put("WEBLOGCOMMENTID_KEY",    RollerRequest.WEBLOGCOMMENTID_KEY);
-    }
-    
-    
-    protected static void loadRssValues(Context ctx, RollerRequest rreq, String handle) 
+    /**
+     * Load objects needed for RSS and Atom newsfeed generation.
+     */
+    protected static void loadRssValues(
+            Context ctx, 
+            RollerRequest rreq, 
+            WebsiteData website) 
             throws RollerException {
         
         mLogger.debug("Loading rss values");
@@ -306,17 +291,16 @@
         }
         ctx.put("entryLength",  new Integer(entryLength));
         
-        int entryCount = 15;
-        String sCount = request.getParameter("count");
-        if ( sCount!=null && sExcerpts!=null && sExcerpts.trim().equals("")) {
-            try {
-                entryCount = Integer.parseInt(sCount);
-            } catch (NumberFormatException e) {
-                mLogger.warn("Improperly formatted count parameter");
-            }
-            if ( entryCount > 50 ) entryCount = 50;
-            if ( entryCount < 0 ) entryCount = 15;
-        }
+        // Display same number of entries in feed as displayed on page
+        int entryCount = website.getEntryDisplayCount();
+        
+        // But don't exceed installation-wide maxEntries settings
+        int maxEntries = 
+            RollerRuntimeConfig.getIntProperty("site.newsfeeds.maxEntries");
+        int defaultEntries = 
+            RollerRuntimeConfig.getIntProperty("site.newsfeeds.defaultEntries");
+        if (entryCount < 1) entryCount = defaultEntries;
+        if (entryCount > maxEntries) entryCount = maxEntries;
         ctx.put("entryCount",  new Integer(entryCount));
         
         String catname = null;
@@ -331,19 +315,22 @@
         ctx.put("now", new Date());
     }
     
-    
-    protected static void loadUtilityObjects(Context ctx, RollerRequest rreq, 
-                                            RollerContext rollerCtx, String handle)
+    /**
+     * Load useful utility objects for string and date formatting.
+     */
+    protected static void loadUtilityObjects(
+            Context ctx, 
+            RollerRequest rreq,                                             
+            RollerContext rollerCtx, 
+            WebsiteData website)
             throws RollerException {
         
         mLogger.debug("Loading utility objects");
         
-        // date formatter for macro's
-        // set this up with the Locale to make sure we can reuse it with other patterns
-        // in the macro's
+        // date formatter for macro's set this up with the Locale to make 
+        // sure we can reuse it with other patterns in the macro's
         Locale viewLocale = (Locale) ctx.get("viewLocale");
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", viewLocale);
-        WebsiteData website = rreq.getWebsite();
         if (website != null) {
             sdf.setTimeZone(website.getTimeZoneInstance());
         }
@@ -365,74 +352,107 @@
         
         ctx.put("requestParameters", rreq.getRequest().getParameterMap());
     }
-    
-    
-    protected static String loadWebsiteValues(Context ctx, RollerRequest rreq, RollerContext rollerCtx )
+        
+    /**
+     * Load URL paths useful in page templates.
+     */
+    protected static void loadPathValues(
+            Context ctx,  RollerRequest rreq, 
+            RollerContext rollerCtx, 
+            WebsiteData   website)
             throws RollerException {
         
-        String handle = null;
-        WebsiteData website = null;
+        mLogger.debug("Loading path values");
         
-        Roller mRoller = RollerFactory.getRoller();
-        Map props = mRoller.getPropertiesManager().getProperties();
+        HttpServletRequest request = rreq.getRequest();
+        String url = null;
+        if (website != null) {
+            url = Utilities.escapeHTML(
+                      rollerCtx.getAbsoluteContextUrl(request) 
+                          + "/page/" + website.getHandle());
+        } else {
+            url= Utilities.escapeHTML(rollerCtx.getAbsoluteContextUrl(request));
+        }
+        ctx.put("websiteURL", url);
+        ctx.put("baseURL",    rollerCtx.getContextUrl( request ) );
+        ctx.put("absBaseURL", rollerCtx.getAbsoluteContextUrl( request ) );
+        ctx.put("ctxPath",    request.getContextPath() );
+        ctx.put("uploadPath", ContextLoader.figureResourcePath( rreq ) );
         
-        if ( rreq.getRequest().getAttribute(RollerRequest.OWNING_WEBSITE) != null) {
-            website = (WebsiteData)
-            rreq.getRequest().getAttribute(RollerRequest.OWNING_WEBSITE);
-        } else if ( rreq.getWebsite() != null ) {
-            website = rreq.getWebsite();
+        try {
+            URL absUrl = RequestUtils.absoluteURL(request, "/");
+            ctx.put("host", absUrl.getHost());
+        } catch (MalformedURLException e) {
+            throw new RollerException(e);
         }
+    }
+      
+    /**
+     * Determine URL path to Roller upload directory.
+     */
+    private static String figureResourcePath(RollerRequest rreq) {
         
-        if ( website != null ) {
-            handle = website.getHandle();
-            ctx.put("userName",      handle);
-            ctx.put("fullName",      website.getName() );
-            ctx.put("emailAddress",  website.getEmailAddress() );
-            ctx.put("encodedEmail",  RegexUtil.encode(website.getEmailAddress()));
-            ctx.put("obfuscatedEmail",  RegexUtil.obfuscateEmail(website.getEmailAddress()));
-            
-            // setup Locale for future rendering
-            ctx.put("locale", website.getLocaleInstance());
-            
-            // setup Timezone for future rendering
-            ctx.put("timezone", website.getTimeZoneInstance());
-            ctx.put("timeZone", website.getTimeZoneInstance());
-        } else {
-            website = new WebsiteData();
-            website.setName(((RollerPropertyData)props.get("site.name")).getValue());
-            website.setAllowComments(Boolean.FALSE);
-            website.setDescription(((RollerPropertyData)props.get("site.description")).getValue());
-            handle = "zzz_none_zzz";
-            ctx.put("userName", handle );
-            ctx.put("fullName","zzz_none_zzz");
-            ctx.put("emailAddress",
-                    ((RollerPropertyData)props.get("site.adminemail")).getValue());
-            ctx.put("locale", Locale.getDefault());
-            ctx.put("timezone", TimeZone.getDefault());
-            ctx.put("timeZone", TimeZone.getDefault());
+        String uploadurl = null;
+        try {
+            uploadurl = RollerFactory.getRoller().getFileManager().getUploadUrl();
+        } catch(Exception e) {}
+        
+        return uploadurl;
+    }
+    
+    /**
+     * If there is an ERROR or STATUS message in the session,
+     * place it into the Context for rendering later.
+     */
+    private static void loadStatusMessage(Context ctx, RollerRequest rreq) {
+        
+        mLogger.debug("Loading status message");
+        
+        HttpSession session = rreq.getRequest().getSession(false);
+        String msg = null;
+        if (session != null)
+            msg = (String)session.getAttribute(RollerSession.ERROR_MESSAGE);
+        if (msg != null) {
+            ctx.put("errorMessage", msg);
+            session.removeAttribute(RollerSession.ERROR_MESSAGE);
         }
-        ctx.put("website", WebsiteDataWrapper.wrap(website) );
         
-        String siteName = ((RollerPropertyData)props.get("site.name")).getValue();
-        if ("Roller-based Site".equals(siteName)) siteName = "Main";
-        ctx.put("siteName", siteName);
+        if (session != null)
+            msg = (String)session.getAttribute(RollerSession.STATUS_MESSAGE);
+        if (msg != null) {
+            ctx.put("statusMessage", msg);
+            session.removeAttribute(RollerSession.STATUS_MESSAGE);
+        }
+    }
         
-        String siteShortName = ((RollerPropertyData)props.get("site.shortName")).getValue();
-        ctx.put("siteShortName", siteShortName);
+    protected static void loadRequestParamKeys(Context ctx) {
         
-        // add language of the session (using locale of viewer set by Struts)
-        ctx.put(
-                "viewLocale",
-                LanguageUtil.getViewLocale(rreq.getRequest()));
-        mLogger.debug("context viewLocale = "+ctx.get( "viewLocale"));
+        mLogger.debug("Loading request param keys");
         
-        return handle;
+        // Since Velocity *requires* accessor methods, these values from
+        // RollerRequest are not available to it, put them into the context
+        ctx.put("USERNAME_KEY",           RollerRequest.USERNAME_KEY);
+        ctx.put("WEBSITEID_KEY",          RollerRequest.WEBSITEID_KEY);
+        ctx.put("FOLDERID_KEY",           RollerRequest.FOLDERID_KEY);
+        ctx.put("NEWSFEEDID_KEY",         RollerRequest.NEWSFEEDID_KEY);
+        ctx.put("PAGEID_KEY",             RollerRequest.PAGEID_KEY);
+        ctx.put("PAGELINK_KEY",           RollerRequest.PAGELINK_KEY);
+        ctx.put("ANCHOR_KEY",             RollerRequest.ANCHOR_KEY);
+        ctx.put("EXCERPTS_KEY",           RollerRequest.EXCERPTS_KEY);
+        ctx.put("BOOKMARKID_KEY",         RollerRequest.BOOKMARKID_KEY);
+        ctx.put("REFERERID_KEY",          RollerRequest.REFERERID_KEY);
+        ctx.put("WEBLOGENTRYID_KEY",      RollerRequest.WEBLOGENTRYID_KEY);
+        ctx.put("WEBLOGCATEGORYNAME_KEY", RollerRequest.WEBLOGCATEGORYNAME_KEY);
+        ctx.put("WEBLOGCATEGORYID_KEY",   RollerRequest.WEBLOGENTRIES_KEY);
+        ctx.put("WEBLOGENTRIES_KEY",      RollerRequest.WEBLOGENTRIES_KEY);
+        ctx.put("WEBLOGDAY_KEY",          RollerRequest.WEBLOGDAY_KEY);
+        ctx.put("WEBLOGCOMMENTID_KEY",    RollerRequest.WEBLOGCOMMENTID_KEY);
     }
     
-    
-    public static ToolboxContext loadToolboxContext(HttpServletRequest request, 
-                                                    HttpServletResponse response, 
-                                                    Context ctx) {
+    public static ToolboxContext loadToolboxContext(
+            HttpServletRequest request,                                                     
+            HttpServletResponse response,                                                    
+            Context ctx) {
         
         mLogger.debug("Loading toolbox context");