/**
   * Peforms the processing associated with this action.
   *
   * @param request the HttpServletRequest instance
   * @param response the HttpServletResponse instance
   * @return the name of the next view
   */
  public View process(HttpServletRequest request, HttpServletResponse response)
      throws ServletException {
    Blog blog = (Blog) getModel().get(Constants.BLOG_KEY);
    BlogEntry blogEntryToClone = null;

    String entryToClone = request.getParameter("entryToClone");
    if (entryToClone != null && entryToClone.length() > 0) {
      BlogService service = new BlogService();
      try {
        blogEntryToClone = service.getBlogEntry(blog, entryToClone);
      } catch (BlogServiceException e) {
        throw new ServletException(e);
      }
    }

    BlogEntry entry = new BlogEntry(blog);
    if (blogEntryToClone != null) {
      entry.setTitle(blogEntryToClone.getTitle());
      entry.setSubtitle(blogEntryToClone.getSubtitle());
      entry.setBody(blogEntryToClone.getBody());
      entry.setExcerpt(blogEntryToClone.getExcerpt());
      entry.setTimeZoneId(blogEntryToClone.getTimeZoneId());
      entry.setCommentsEnabled(blogEntryToClone.isCommentsEnabled());
      entry.setTrackBacksEnabled(blogEntryToClone.isTrackBacksEnabled());

      // copy the categories
      Iterator it = blogEntryToClone.getCategories().iterator();
      while (it.hasNext()) {
        entry.addCategory((Category) it.next());
      }

      entry.setTags(blogEntryToClone.getTags());
    } else {
      entry.setTitle("Title");
      entry.setBody("<p>\n\n</p>");
    }

    entry.setAuthor(SecurityUtils.getUsername());

    getModel().put(Constants.BLOG_ENTRY_KEY, entry);

    return new BlogEntryFormView();
  }
  /**
   * Peforms the processing associated with this action.
   *
   * @param request the HttpServletRequest instance
   * @param response the HttpServletResponse instance
   * @return the name of the next view
   */
  public View process(HttpServletRequest request, HttpServletResponse response)
      throws ServletException {
    try {
      SecurityRealm realm = PebbleContext.getInstance().getConfiguration().getSecurityRealm();
      PebbleUserDetails currentUserDetails = SecurityUtils.getUserDetails();
      String password1 = request.getParameter("password1");
      String password2 = request.getParameter("password2");
      String submit = request.getParameter("submit");

      // can the user change their user details?
      if (!currentUserDetails.isDetailsUpdateable()) {
        return new ForbiddenView();
      }

      if (submit == null || submit.length() == 0) {
        return new ChangePasswordView();
      }

      ValidationContext validationContext = new ValidationContext();

      if (password1 == null || password1.length() == 0) {
        validationContext.addError("Password can not be empty");
      } else if (!password1.equals(password2)) {
        validationContext.addError("Passwords do not match");
      }

      if (!validationContext.hasErrors()) {
        realm.changePassword(currentUserDetails.getUsername(), password1);

        return new PasswordChangedView();
      }

      getModel().put("validationContext", validationContext);
      return new ChangePasswordView();
    } catch (SecurityRealmException e) {
      throw new ServletException(e);
    }
  }