[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