[jboss-cvs] JBossBlog SVN: r122 - in trunk/blog-view/src/java/org/jboss/blog: view and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jun 21 06:10:50 EDT 2007


Author: adamw
Date: 2007-06-21 06:10:50 -0400 (Thu, 21 Jun 2007)
New Revision: 122

Added:
   trunk/blog-view/src/java/org/jboss/blog/view/
   trunk/blog-view/src/java/org/jboss/blog/view/BlogView.java
   trunk/blog-view/src/java/org/jboss/blog/view/BlogViewPortlet.java
   trunk/blog-view/src/java/org/jboss/blog/view/BlogViewState.java
   trunk/blog-view/src/java/org/jboss/blog/view/State.java
Removed:
   trunk/blog-view/src/java/org/jboss/blog/portlet/
   trunk/blog-view/src/java/org/jboss/blog/ui/
Log:
Refactoring

Added: trunk/blog-view/src/java/org/jboss/blog/view/BlogView.java
===================================================================
--- trunk/blog-view/src/java/org/jboss/blog/view/BlogView.java	                        (rev 0)
+++ trunk/blog-view/src/java/org/jboss/blog/view/BlogView.java	2007-06-21 10:10:50 UTC (rev 122)
@@ -0,0 +1,349 @@
+package org.jboss.blog.view;
+
+import org.jboss.blog.model.*;
+import org.jboss.blog.model.impl.EmptyBlogPost;
+import org.jboss.blog.model.impl.EmptyBlogModel;
+import org.jboss.blog.BlogName;
+import org.jboss.blog.tools.BasicTools;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A request-scoped bean allowing to access current view setup - what and how
+ * should be displayed.
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class BlogView {
+    private State state;
+    private Object postParam;
+    private Object fromParam;
+    private Object request;
+
+    public BlogView(State state, Object request) {
+		super();
+		this.state = state;
+		this.request = request;
+	}
+
+	public State getState() {
+        return state;
+    }
+
+	public Object getRequest() {
+		return request;
+	}
+	
+    // Cached properties
+    private BlogName blogName;
+    private BlogModel blogModel;
+    private BlogViewState blogViewState;
+    private Integer numberOfPostsPerPage;
+    private Boolean viewPostsOnSeparatePage;
+    private Boolean viewAllPosts;
+    private Boolean commentsEnabled;
+    private Boolean postsExpandable;
+    private Boolean showLinkToOriginalBlog;
+    private Boolean showLinkToOriginalPost;
+    private Boolean linkPostsToOriginal;
+    private Map<String, String> feedLinks;
+
+    /* A list of posts to show in the current view, plus the next post,
+     * if such a post exists (used to checking if there is a next page). */
+    private List<? extends BlogPost> postsWithNext;
+    // A list of posts to show in the current view.
+    private List<? extends BlogPost> posts;
+
+    public BlogName getBlogName() {
+        if (blogName == null) {
+            // Blog name from the state has precedence over the default one.
+            blogName = getState().getSelectedBlogName();
+            if (blogName == null) {
+                blogName = BasicTools.getBlogService().getNameService().retrieveBlogName(getRequest());
+            }
+        }
+
+        return blogName;
+    }
+
+    public BlogModel getBlogModel() {
+        if (blogModel == null) {
+            try {
+                blogModel = BasicTools.getBlogService().getModelService().retrieveBlogModel(
+                        getBlogName());
+            } catch (BlogModelDoesNotExistException e) {
+                addMessageBlogDoesntExist(getBlogName());
+                blogModel = new EmptyBlogModel();
+            }
+        }
+
+        return blogModel;
+    }
+
+    public Boolean getCommentsEnabled() {
+        if (commentsEnabled == null) {
+            commentsEnabled = BasicTools.getBlogService().getConfigurationService().
+                    getCommentsEnabled(getRequest());
+        }
+
+        return commentsEnabled;
+    }
+
+    public Integer getNumberOfPostsPerPage() {
+        if (numberOfPostsPerPage == null) {
+            numberOfPostsPerPage = BasicTools.getBlogService().getConfigurationService().
+                    getNumberOfPostsPerPage(getRequest());
+        }
+
+        return numberOfPostsPerPage;
+    }
+
+    public Boolean getViewPostsOnSeparatePage() {
+        if (viewPostsOnSeparatePage == null) {
+            viewPostsOnSeparatePage = BasicTools.getBlogService().getConfigurationService().
+                    getViewPostsOnSeparatePage(getRequest());
+        }
+
+        return viewPostsOnSeparatePage;
+    }
+
+    public Boolean getViewAllPosts() {
+        if (viewAllPosts == null) {
+            viewAllPosts = BasicTools.getBlogService().getConfigurationService().
+                    getViewAllPosts(getRequest());
+        }
+
+        return viewAllPosts;
+    }
+
+    public Boolean getShowLinkToOriginalBlog() {
+        if (showLinkToOriginalBlog == null) {
+            showLinkToOriginalBlog = BasicTools.getBlogService().getConfigurationService().
+                    getShowLinkToOriginalBlog(getRequest());
+        }
+
+        return showLinkToOriginalBlog;
+    }
+
+    public Boolean getShowLinkToOriginalPost() {
+        if (showLinkToOriginalPost == null) {
+            showLinkToOriginalPost = BasicTools.getBlogService().getConfigurationService().
+                    getShowLinkToOriginalPost(getRequest());
+        }
+
+        return showLinkToOriginalPost;
+    }
+
+    public Boolean getLinkPostsToOriginal() {
+        if (linkPostsToOriginal == null) {
+            linkPostsToOriginal = BasicTools.getBlogService().getConfigurationService().
+                    getLinkPostsToOriginal(getRequest());
+        }
+
+        return linkPostsToOriginal;
+    }
+
+    public Map<String, String> getFeedLinks() {
+        if (feedLinks == null) {
+            feedLinks = BasicTools.getBlogService().getConfigurationService().
+                    getFeedLinks(getRequest());
+        }
+
+        return feedLinks;
+    }
+
+    public BlogViewState getBlogViewState() {
+        if (blogViewState == null) {
+            blogViewState = getState().getBlogViewState(getBlogName());
+        }
+
+        return blogViewState;
+    }
+
+    public Boolean getPostsExpandable() {
+        if (postsExpandable == null) {
+            postsExpandable = Boolean.valueOf(!getViewAllPosts().booleanValue() ||
+                    getViewPostsOnSeparatePage().booleanValue());
+        }
+
+        return postsExpandable;
+    }
+
+    private List<? extends BlogPost> getPostsWithNext() {
+        if (postsWithNext == null) {
+            postsWithNext = getBlogModel().getPosts(getFrom(), getTo()+1);
+        }
+
+        return postsWithNext;
+    }
+
+    public List<? extends BlogPost> getPosts() {
+        if (posts == null) {
+            List<? extends BlogPost> postsWithNext = getPostsWithNext();
+            posts = postsWithNext.subList(0, Math.min(postsWithNext.size(),
+                    getNumberOfPostsPerPage().intValue()));
+        }
+
+        return posts;
+    }
+
+    //
+
+    public boolean getHasPrevious() {
+        return getFrom() > 0;
+    }
+
+    public boolean getHasNext() {
+        return getPostsWithNext().size() > getTo() - getFrom();
+    }
+
+    public int getNextFrom() {
+        return getFrom() + getNumberOfPostsPerPage().intValue();
+    }
+
+    public int getPreviousFrom() {
+        return Math.max(getFrom() - getNumberOfPostsPerPage().intValue(), 0);
+    }
+
+    public int getTo() {
+        return getFrom() + getNumberOfPostsPerPage().intValue();
+    }
+
+    public int getFrom() {
+        return getBlogViewState().getFrom();
+    }
+
+    private void setFrom(int from) {
+        BlogViewState bvs = getBlogViewState();
+        bvs.setFrom(from);
+    }
+
+    //
+    
+    public Object getPostParam() {
+        return postParam;
+    }
+
+    public void setPostParam(Object postParam) {
+        this.postParam = postParam;
+
+        if (postParam != null) {
+        	String titleAsId = postParam.toString();
+        	
+        	BlogPostWithIndex bpwi;
+            try {
+                bpwi = getBlogModel().getPostByTitleAsId(titleAsId);
+            } catch (BlogPostDoesNotExistException e) {
+                setFrom(0);
+                setSelectedPostTitleAsId(null);
+                return;
+            }
+
+            // Setting a new "from".
+            int postsOnPage = getNumberOfPostsPerPage().intValue();
+            int currentPost = bpwi.getIndex();
+
+            setFrom((currentPost / postsOnPage) * postsOnPage);
+            setSelectedPostTitleAsId(titleAsId);
+        }
+    }
+
+    public Object getFromParam() {
+        return fromParam;
+    }
+
+    public void setFromParam(Object fromParam) {
+        this.fromParam = fromParam;
+
+        if (fromParam != null) {
+            try {
+                setFrom(Integer.parseInt(fromParam.toString()));
+                setSelectedPostTitleAsId(null);
+            } catch (NumberFormatException e) {
+                // Doing nothing.
+            }
+        }
+    }
+
+    public String getSelectedPostTitleAsId() {
+        String post = BasicTools.safeToString(getPostParam());
+
+        if (post != null) {
+            setSelectedPostTitleAsId(post);
+            return post;
+        }
+
+        return getBlogViewState().getSelectedPostTitleAsId();
+    }
+
+    private void setSelectedPostTitleAsId(String selectedPostId) {
+        getBlogViewState().setSelectedPostTitleAsId(selectedPostId);
+    }
+
+    private BlogPost postDoesNotExist(String id) {
+        addMessagePostDoesntExist(id);
+        return new EmptyBlogPost();
+    }
+
+    public BlogPost getSelectedPost() {
+        String titleAsId = getSelectedPostTitleAsId();
+
+        if (titleAsId == null) {
+            return postDoesNotExist(titleAsId);
+        }
+
+        // First looking in the specified range.
+        List<? extends BlogPost> posts = getPostsWithNext();
+        for (BlogPost current : posts) {
+            if (titleAsId.equals(current.getTitleAsId())) {
+                return current;
+            }
+        }
+
+        // If unsuccessfull, looking in all entries (we may find something if
+        // after selecting the entry, new entries have been added/ remvoed).
+        try {
+            return getBlogModel().getPostByTitleAsId(titleAsId).getPost();
+        } catch (BlogPostDoesNotExistException e) {
+            return postDoesNotExist(titleAsId);
+        }
+    }
+    
+    // Messages support
+    
+    private List<String> infoMessages;
+    private List<String> errorMessages;
+    
+    public List<String> getInfoMessages() {
+    	if (infoMessages == null) {
+    		infoMessages = new ArrayList<String>();
+    	}
+    	
+    	return infoMessages;
+    }
+    
+    public List<String> getErrorMessages() {
+    	if (errorMessages == null) {
+    		errorMessages = new ArrayList<String>();
+    	}
+    	
+    	return errorMessages;
+    }
+    
+    public void addInfoMessage(String message) {
+    	getInfoMessages().add(message);
+    }
+
+    public void addErrorMessage(String message) {
+        getErrorMessages().add(message);
+    }
+
+    public void addMessageBlogDoesntExist(BlogName blogName) {
+        addErrorMessage("The blog you requested does not exist: " + blogName.toString() + ".");
+    }
+
+    public void addMessagePostDoesntExist(String id) {
+        addErrorMessage("The post you requested: " + id + " does not exist.");
+    }
+}
\ No newline at end of file

Added: trunk/blog-view/src/java/org/jboss/blog/view/BlogViewPortlet.java
===================================================================
--- trunk/blog-view/src/java/org/jboss/blog/view/BlogViewPortlet.java	                        (rev 0)
+++ trunk/blog-view/src/java/org/jboss/blog/view/BlogViewPortlet.java	2007-06-21 10:10:50 UTC (rev 122)
@@ -0,0 +1,55 @@
+package org.jboss.blog.view;
+
+import org.jboss.blog.tools.UITools;
+
+import javax.portlet.*;
+import java.io.IOException;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class BlogViewPortlet extends GenericPortlet {
+    private String jspPrefix;
+
+    public void init(PortletConfig portletConfig) throws PortletException {
+        super.init(portletConfig);
+
+        jspPrefix = portletConfig.getInitParameter("jspPrefix");
+    }
+
+    private State getStateBean(PortletRequest request) {
+        Object stateBean = request.getPortletSession().getAttribute("stateBean");
+        if (stateBean == null) {
+            stateBean = new State();
+            request.getPortletSession().setAttribute("stateBean", stateBean);
+        }
+
+        return (State) stateBean;
+    }
+
+    private BlogView getBlogViewBean(PortletRequest request, State stateBean) {
+        BlogView blogViewBean = new BlogView(stateBean, request);
+        blogViewBean.setFromParam(request.getParameter(UITools.FROM_PARAM_NAME));
+        blogViewBean.setPostParam(request.getParameter(UITools.POST_ID_PARAM_NAME));
+
+        return blogViewBean;
+    }
+
+    public void render(RenderRequest request, RenderResponse response) throws PortletException, IOException {
+        response.setContentType("text/html");
+
+        BlogView blogViewBean = getBlogViewBean(request, getStateBean(request));
+
+        String jsp;
+        if ((blogViewBean.getSelectedPostTitleAsId() != null) &&
+                (blogViewBean.getViewPostsOnSeparatePage().booleanValue())) {
+            jsp = jspPrefix + "post_view.jsp";
+        } else {
+            jsp = jspPrefix + "blog_view.jsp";
+        }
+
+        request.setAttribute("blogView", blogViewBean);
+
+        getPortletContext().getRequestDispatcher(jsp).include(request, response);
+    }
+}

Added: trunk/blog-view/src/java/org/jboss/blog/view/BlogViewState.java
===================================================================
--- trunk/blog-view/src/java/org/jboss/blog/view/BlogViewState.java	                        (rev 0)
+++ trunk/blog-view/src/java/org/jboss/blog/view/BlogViewState.java	2007-06-21 10:10:50 UTC (rev 122)
@@ -0,0 +1,32 @@
+package org.jboss.blog.view;
+
+/**
+ * A view state of one specific blog:
+ * - number of a post that should be shown as the first one
+ * - currently selected post
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class BlogViewState {
+    private int from;
+    private String selectedPostTitleAsId;
+
+    public BlogViewState() {
+        from = 0;
+    }
+
+    public int getFrom() {
+        return from;
+    }
+
+    public void setFrom(int from) {
+        this.from = from;
+    }
+
+    public String getSelectedPostTitleAsId() {
+        return selectedPostTitleAsId;
+    }
+
+    public void setSelectedPostTitleAsId(String selectedPostTitleAsId) {
+        this.selectedPostTitleAsId = selectedPostTitleAsId;
+    }
+}

Added: trunk/blog-view/src/java/org/jboss/blog/view/State.java
===================================================================
--- trunk/blog-view/src/java/org/jboss/blog/view/State.java	                        (rev 0)
+++ trunk/blog-view/src/java/org/jboss/blog/view/State.java	2007-06-21 10:10:50 UTC (rev 122)
@@ -0,0 +1,44 @@
+package org.jboss.blog.view;
+
+import org.jboss.blog.BlogName;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * A session-scoped bean that remembers the current view state for each blog
+ * that has been viewed, plus administration parameters.   
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class State {
+    // Map BlogName --> BlogViewState.
+    private Map<BlogName, BlogViewState> blogViewStates;
+
+    private BlogName selectedBlogName;
+
+    public State() {
+        blogViewStates = new HashMap<BlogName, BlogViewState>();
+    }
+
+    public BlogViewState getBlogViewState(BlogName blogName) {
+        BlogViewState ret = blogViewStates.get(blogName);
+        if (ret == null) {
+            ret = new BlogViewState();
+            blogViewStates.put(blogName, ret);
+        }
+
+        return ret;
+    }
+
+    /**
+     * Gets the name of the selected blog.
+     * @return Name of the blog selected for viewing.
+     */
+    public BlogName getSelectedBlogName() {
+        return selectedBlogName;
+    }
+
+    public void setSelectedBlogName(BlogName selectedBlogName) {
+        this.selectedBlogName = selectedBlogName;
+    }
+}




More information about the jboss-cvs-commits mailing list