File Source: publishblogentryaction.java

         /* 
    P/P   *  Method: net.sourceforge.pebble.web.action.PublishBlogEntryAction__static_init
          * 
          *  Postconditions:
          *    init'ed(log)
          */
     1  /*
     2   * Copyright (c) 2003-2006, Simon Brown
     3   * All rights reserved.
     4   *
     5   * Redistribution and use in source and binary forms, with or without
     6   * modification, are permitted provided that the following conditions are met:
     7   *
     8   *   - Redistributions of source code must retain the above copyright
     9   *     notice, this list of conditions and the following disclaimer.
    10   *
    11   *   - Redistributions in binary form must reproduce the above copyright
    12   *     notice, this list of conditions and the following disclaimer in
    13   *     the documentation and/or other materials provided with the
    14   *     distribution.
    15   *
    16   *   - Neither the name of Pebble nor the names of its contributors may
    17   *     be used to endorse or promote products derived from this software
    18   *     without specific prior written permission.
    19   *
    20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    30   * POSSIBILITY OF SUCH DAMAGE.
    31   */
    32  package net.sourceforge.pebble.web.action;
    33  
    34  import net.sourceforge.pebble.Constants;
    35  import net.sourceforge.pebble.domain.*;
    36  import net.sourceforge.pebble.util.StringUtils;
    37  import net.sourceforge.pebble.web.security.RequireSecurityToken;
    38  import net.sourceforge.pebble.web.view.NotFoundView;
    39  import net.sourceforge.pebble.web.view.RedirectView;
    40  import net.sourceforge.pebble.web.view.View;
    41  import org.apache.commons.logging.Log;
    42  import org.apache.commons.logging.LogFactory;
    43  
         /* 
    P/P   *  Method: void net.sourceforge.pebble.web.action.PublishBlogEntryAction()
          */
    44  import javax.servlet.ServletException;
    45  import javax.servlet.http.HttpServletRequest;
    46  import javax.servlet.http.HttpServletResponse;
    47  import java.text.DateFormat;
    48  import java.text.ParseException;
    49  import java.util.Date;
    50  
    51  /**
    52   * Allows the user to publish/unpublish a blog entry.
    53   *
    54   * @author    Simon Brown
    55   */
    56  @RequireSecurityToken
    57  public class PublishBlogEntryAction extends SecureAction {
    58  
    59    /** the log used by this class */
    60    private static final Log log = LogFactory.getLog(PublishBlogEntryAction.class);
    61  
    62    /**
    63     * Peforms the processing associated with this action.
    64     *
    65     * @param request  the HttpServletRequest instance
    66     * @param response the HttpServletResponse instance
    67     * @return the name of the next view
    68     */
    69    public View process(HttpServletRequest request, HttpServletResponse response) throws ServletException {
             /* 
    P/P       *  Method: View process(HttpServletRequest, HttpServletResponse)
              * 
              *  Preconditions:
              *    request != null
              *    this.model != null
              *    this.model.data != null
              * 
              *  Presumptions:
              *    java.lang.Object:getClass(...)@101 != null
              *    java.text.DateFormat:getDateTimeInstance(...)@88 != null
              *    java.text.DateFormat:parse(...)@111 != null
              *    java.util.HashMap:get(...)@63 != null
              *    javax.servlet.http.HttpServletRequest:getParameter(...)@72 != null
              *    ...
              * 
              *  Postconditions:
              *    return_value in Addr_Set{&new RedirectView(process#12),&new NotFoundView(process#3)}
              *    new NotFoundView(process#3) num objects <= 1
              *    new RedirectView(process#12) num objects <= 1
              * 
              *  Test Vectors:
              *    java.lang.String:equals(...)@135: {0}, {1}
              *    java.lang.String:equals(...)@87: {0}, {1}
              *    java.lang.String:equalsIgnoreCase(...)@106: {0}, {1}
              *    java.lang.String:equalsIgnoreCase(...)@92: {0}, {1}
              *    java.lang.String:length(...)@109: {0}, {1..232-1}
              *    java.util.Date:after(...)@112: {0}, {1}
              *    javax.servlet.http.HttpServletRequest:getParameter(...)@108: Addr_Set{null}, Inverse{null}
              *    javax.servlet.http.HttpServletRequest:getParameter(...)@73: Addr_Set{null}, Inverse{null}
              *    net.sourceforge.pebble.domain.BlogService:getBlogEntry(...)@78: Inverse{null}, Addr_Set{null}
              */
    70      Blog blog = (Blog)getModel().get(Constants.BLOG_KEY);
    71      String id = request.getParameter("entry");
    72      String submit = request.getParameter("submit");
    73      String publishDate = request.getParameter("publishDate");
    74  
    75      BlogService service = new BlogService();
    76      BlogEntry blogEntry = null;
    77      try {
    78        blogEntry = service.getBlogEntry(blog, id);
    79      } catch (BlogServiceException e) {
    80        throw new ServletException(e);
    81      }
    82  
    83      if (blogEntry == null) {
    84        return new NotFoundView();
    85      }
    86  
    87      if (submit.equals("Publish")) {
    88        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, blog.getLocale());
    89        dateFormat.setTimeZone(blog.getTimeZone());
    90        dateFormat.setLenient(false);
    91  
    92        if (publishDate != null && publishDate.equalsIgnoreCase("as-is")) {
    93          // this is the easiest scenario - just set the blog entry to published
    94          // TODO: localization
    95          try {
    96            blogEntry.setPublished(true);
    97            service.putBlogEntry(blogEntry);
    98            blog.info("Blog entry <a href=\"" + blogEntry.getLocalPermalink() + "\">" + blogEntry.getTitle() + "</a> published.");
    99          } catch (BlogServiceException be) {
   100            // give feedback to the user that something bad has happened
   101            blog.error("Error publishing blog entry " + StringUtils.transformHTML(blogEntry.getTitle()) + ": " + be.getClass().getName() + " " + StringUtils.transformHTML(be.getMessage()));
   102            log.error(be);
   103          }
   104        } else {
   105          Date date = new Date();
   106          if (publishDate != null && publishDate.equalsIgnoreCase("custom")) {
   107            Date now = new Date();
   108            String dateAsString = request.getParameter("date");
   109            if (dateAsString != null && dateAsString.length() > 0) {
   110              try {
   111                date = dateFormat.parse(dateAsString);
   112                if (date.after(now)) {
   113                  date = now;
   114                }
   115              } catch (ParseException pe) {
   116                log.warn(pe);
   117              }
   118            }
   119          }
   120  
   121          // now save the published entry and remove the unpublished version
   122          try {
   123            log.info("Removing blog entry dated " + blogEntry.getDate());
   124            service.removeBlogEntry(blogEntry);
   125  
   126            blogEntry.setDate(date);
   127            blogEntry.setPublished(true);
   128            log.info("Putting blog entry dated " + blogEntry.getDate());
   129            service.putBlogEntry(blogEntry);
   130            blog.info("Blog entry <a href=\"" + blogEntry.getLocalPermalink() + "\">" + blogEntry.getTitle() + "</a> published.");
   131          } catch (BlogServiceException be) {
   132            log.error(be);
   133          }
   134        }
   135      } else if (submit.equals("Unpublish")) {
   136        blogEntry.setPublished(false);
   137        try {
   138          service.putBlogEntry(blogEntry);
   139          blog.info("Blog entry <a href=\"" + blogEntry.getLocalPermalink() + "\">" + blogEntry.getTitle() + "</a> unpublished.");
   140        } catch (BlogServiceException be) {
   141          log.error(be);
   142        }
   143      }
   144  
   145      return new RedirectView(blogEntry.getLocalPermalink());
   146    }
   147  
   148    /**
   149     * Gets a list of all roles that are allowed to access this action.
   150     *
   151     * @return  an array of Strings representing role names
   152     * @param request
   153     */
   154    public String[] getRoles(HttpServletRequest request) {
             /* 
    P/P       *  Method: String[] getRoles(HttpServletRequest)
              * 
              *  Presumptions:
              *    init'ed(net.sourceforge.pebble.Constants.BLOG_PUBLISHER_ROLE)
              * 
              *  Postconditions:
              *    return_value == &new String[](getRoles#1)
              *    new String[](getRoles#1) num objects == 1
              *    return_value.length == 1
              *    return_value[0] == net.sourceforge.pebble.Constants.BLOG_PUBLISHER_ROLE
              *    (soft) init'ed(return_value[0])
              */
   155      return new String[]{Constants.BLOG_PUBLISHER_ROLE};
   156    }
   157  
   158  }








SofCheck Inspector Build Version : 2.22510
publishblogentryaction.java 2010-Jun-25 19:40:34
publishblogentryaction.class 2010-Jul-19 20:23:38