You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2006/10/11 18:01:57 UTC

svn commit: r462836 - in /incubator/roller/trunk/src/org/apache/roller/ui/rendering: model/PreviewPageModel.java pagers/WeblogEntriesPermalinkPager.java pagers/WeblogEntriesPreviewPager.java util/WeblogPreviewRequest.java

Author: agilliland
Date: Wed Oct 11 09:01:55 2006
New Revision: 462836

URL: http://svn.apache.org/viewvc?view=rev&rev=462836
Log:
make it possible to do a fully rendered entry preview.

- add a special preview pager which doesn't enforce things like status=PUBLISHED
- modify preview request to accept a 'previewEntry' parameter defining what entry to preview.
- update PreviewPageModel to use new preview pager.


Added:
    incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/PreviewPageModel.java
    incubator/roller/trunk/src/org/apache/roller/ui/rendering/pagers/WeblogEntriesPreviewPager.java
Modified:
    incubator/roller/trunk/src/org/apache/roller/ui/rendering/pagers/WeblogEntriesPermalinkPager.java
    incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogPreviewRequest.java

Added: incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/PreviewPageModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/PreviewPageModel.java?view=auto&rev=462836
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/PreviewPageModel.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/model/PreviewPageModel.java Wed Oct 11 09:01:55 2006
@@ -0,0 +1,101 @@
+/*
+ * 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.Map;
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.wrapper.WeblogEntryDataWrapper;
+import org.apache.roller.ui.rendering.pagers.WeblogEntriesPager;
+import org.apache.roller.ui.rendering.pagers.WeblogEntriesPreviewPager;
+import org.apache.roller.ui.rendering.util.WeblogPreviewRequest;
+import org.apache.roller.ui.rendering.util.WeblogRequest;
+
+
+/**
+ * An extension of the PageModel to make some adjustments for previewing.
+ */
+public class PreviewPageModel extends PageModel {
+    
+    private WeblogPreviewRequest previewRequest = null;
+    
+    
+    /** 
+     * Init model.
+     */
+    public void init(Map initData) throws RollerException {
+        
+        // we expect the init data to contain a weblogRequest object
+        WeblogRequest weblogRequest = (WeblogRequest) initData.get("weblogRequest");
+        if(weblogRequest == null) {
+            throw new RollerException("expected weblogRequest from init data");
+        }
+        
+        // PreviewPageModel only works on preview requests, so cast weblogRequest
+        // into a WeblogPreviewRequest and if it fails then throw exception
+        if(weblogRequest instanceof WeblogPreviewRequest) {
+            this.previewRequest = (WeblogPreviewRequest) weblogRequest;
+        } else {
+            throw new RollerException("weblogRequest is not a WeblogPreviewRequest."+
+                    "  PreviewPageModel only supports preview requests.");
+        }
+        
+        super.init(initData);
+    }    
+    
+    
+    public boolean isPermalink() {
+        return (previewRequest.getPreviewEntry() != null ||
+                previewRequest.getWeblogAnchor() != null);
+    }
+    
+    
+    public WeblogEntryDataWrapper getWeblogEntry() {
+        
+        if(previewRequest.getPreviewEntry() != null ||
+                previewRequest.getWeblogAnchor() != null) {
+            return WeblogEntryDataWrapper.wrap(previewRequest.getWeblogEntry());
+        }
+        return null;
+    }
+    
+    
+    /**
+     * Override method that returns pager so that we can introduce a custom
+     * pager for preview pages which can display things that we don't want
+     * available on the "live" weblog, like DRAFT entries.
+     */
+    public WeblogEntriesPager getWeblogEntriesPager(String catArgument) {
+        
+        String anchor = previewRequest.getPreviewEntry();
+        if(anchor == null) {
+            anchor = previewRequest.getWeblogAnchor();
+        }
+        
+        return new WeblogEntriesPreviewPager(
+                previewRequest.getWeblog(),
+                previewRequest.getLocale(),
+                previewRequest.getWeblogPageName(),
+                anchor,
+                previewRequest.getWeblogDate(),
+                null,
+                previewRequest.getTags(),
+                previewRequest.getPageNum());
+    }
+
+}

Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/pagers/WeblogEntriesPermalinkPager.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/pagers/WeblogEntriesPermalinkPager.java?view=diff&rev=462836&r1=462835&r2=462836
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/pagers/WeblogEntriesPermalinkPager.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/pagers/WeblogEntriesPermalinkPager.java Wed Oct 11 09:01:55 2006
@@ -49,7 +49,7 @@
     WeblogEntryData prevEntry = null;
     
     // collection for the pager
-    private Map entries = null;
+    Map entries = null;
     
     
     public WeblogEntriesPermalinkPager(

Added: incubator/roller/trunk/src/org/apache/roller/ui/rendering/pagers/WeblogEntriesPreviewPager.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/pagers/WeblogEntriesPreviewPager.java?view=auto&rev=462836
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/pagers/WeblogEntriesPreviewPager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/pagers/WeblogEntriesPreviewPager.java Wed Oct 11 09:01:55 2006
@@ -0,0 +1,85 @@
+/*
+ * 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.pagers;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+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.WebsiteData;
+import org.apache.roller.pojos.wrapper.WeblogEntryDataWrapper;
+
+
+/**
+ * A special pager for showing entries in preview mode.
+ *
+ * This pager is different from the other pagers because it allows access to
+ * data we don't normally provide to templates working on the "live" weblog,
+ * like entries in DRAFT mode.
+ */
+public class WeblogEntriesPreviewPager extends WeblogEntriesPermalinkPager {
+    
+    private static Log log = LogFactory.getLog(WeblogEntriesPreviewPager.class);
+    
+    
+    public WeblogEntriesPreviewPager(
+            WebsiteData        weblog,
+            String             locale,
+            String             pageLink,
+            String             entryAnchor,
+            String             dateString,
+            String             catPath,
+            List               tags,
+            int                page) {
+        
+        super(weblog, locale, pageLink, entryAnchor, dateString, catPath, tags, page);
+    }
+    
+    
+    public Map getEntries() {
+        if (entries == null) try {
+            Roller roller = RollerFactory.getRoller();
+            WeblogManager wmgr = roller.getWeblogManager();
+            currEntry = wmgr.getWeblogEntryByAnchor(weblog, entryAnchor);
+            if (currEntry != null) {
+                entries = new TreeMap();
+                
+                // if entry is not published then pubtime may be null
+                Date pubtime = currEntry.getPubTime();
+                if(pubtime == null) {
+                    pubtime = new Date();
+                }
+                
+                entries.put(pubtime,
+                        Collections.singletonList(WeblogEntryDataWrapper.wrap(currEntry)));
+            }
+        } catch (Exception e) {
+            log.error("ERROR: fetching entry", e);
+        }
+        
+        return entries;
+    }
+    
+}

Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogPreviewRequest.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogPreviewRequest.java?view=diff&rev=462836&r1=462835&r2=462836
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogPreviewRequest.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/util/WeblogPreviewRequest.java Wed Oct 11 09:01:55 2006
@@ -25,7 +25,10 @@
 import org.apache.roller.ThemeNotFoundException;
 import org.apache.roller.model.RollerFactory;
 import org.apache.roller.model.ThemeManager;
+import org.apache.roller.model.WeblogManager;
 import org.apache.roller.pojos.Theme;
+import org.apache.roller.pojos.WeblogEntryData;
+import org.apache.roller.util.URLUtilities;
 
 
 /**
@@ -39,10 +42,11 @@
     
     // lightweight attributes
     private String themeName = null;
+    private String previewEntry = null;
     
     // heavyweight attributes
     private Theme theme = null;
-    
+    private WeblogEntryData weblogEntry = null;
     
     public WeblogPreviewRequest(HttpServletRequest request) 
             throws InvalidRequestException {
@@ -50,12 +54,16 @@
         // let parent go first
         super(request);
         
-        // all we need to worry about is the query params
-        // the only param we expect is "theme"
+        // we may have a specific theme to preview
         if(request.getParameter("theme") != null) {
             this.themeName = request.getParameter("theme");
         }
         
+        // we may also have a specific entry to preview
+        if(request.getParameter("previewEntry") != null) {
+            this.previewEntry = URLUtilities.decode(request.getParameter("previewEntry"));
+        }
+        
         if(log.isDebugEnabled()) {
             log.debug("theme = "+this.themeName);
         }
@@ -103,6 +111,40 @@
 
     public void setTheme(Theme theme) {
         this.theme = theme;
+    }
+
+    public String getPreviewEntry() {
+        return previewEntry;
+    }
+
+    public void setPreviewEntry(String previewEntry) {
+        this.previewEntry = previewEntry;
+    }
+    
+    // if we have a preview entry we would prefer to return that
+    public WeblogEntryData getWeblogEntry() {
+        
+        if(weblogEntry == null && 
+                (previewEntry != null || super.getWeblogAnchor() != null)) {
+            
+            String anchor = previewEntry;
+            if(previewEntry == null) {
+                anchor = super.getWeblogAnchor();
+            }
+            
+            try {
+                WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager();
+                weblogEntry = wmgr.getWeblogEntryByAnchor(getWeblog(), anchor);
+            } catch (RollerException ex) {
+                log.error("Error getting weblog entry "+anchor, ex);
+            }
+        }
+        
+        return weblogEntry;
+    }
+    
+    public void setWeblogEntry(WeblogEntryData weblogEntry) {
+        this.weblogEntry = weblogEntry;
     }
     
 }