//# 2 errors, 531 messages
//#
/*
    //#saveblogentryaction.java:1:1: class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
 * Copyright (c) 2003-2006, Simon Brown
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in
 *     the documentation and/or other materials provided with the
 *     distribution.
 *
 *   - Neither the name of Pebble nor the names of its contributors may
 *     be used to endorse or promote products derived from this software
 *     without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package net.sourceforge.pebble.web.action;

import net.sourceforge.pebble.Constants;
import net.sourceforge.pebble.domain.*;
import net.sourceforge.pebble.util.SecurityUtils;
import net.sourceforge.pebble.util.StringUtils;
import net.sourceforge.pebble.web.security.RequireSecurityToken;
import net.sourceforge.pebble.web.validation.ValidationContext;
import net.sourceforge.pebble.web.view.RedirectView;
import net.sourceforge.pebble.web.view.View;
import net.sourceforge.pebble.web.view.impl.BlogEntryFormView;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.HeadMethod;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

/**
 * Saves a blog entry.
 *
 * @author    Simon Brown
 */
@RequireSecurityToken
public class SaveBlogEntryAction extends SecureAction {
    //#saveblogentryaction.java:65: method: void net.sourceforge.pebble.web.action.SaveBlogEntryAction.net.sourceforge.pebble.web.action.SaveBlogEntryAction()
    //#input(void net.sourceforge.pebble.web.action.SaveBlogEntryAction()): this
    //#saveblogentryaction.java:65: end of method: void net.sourceforge.pebble.web.action.SaveBlogEntryAction.net.sourceforge.pebble.web.action.SaveBlogEntryAction()

  /** the log used by this class */
  private static Log log = LogFactory.getLog(SaveBlogEntryAction.class);
    //#saveblogentryaction.java:68: method: net.sourceforge.pebble.web.action.SaveBlogEntryAction.net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init
    //#saveblogentryaction.java:68: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Descendant_Table[net/sourceforge/pebble/web/action/SaveBlogEntryAction]
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.getBlogEntry(Ljavax/servlet/http/HttpServletRequest;)Lnet/sourceforge/pebble/domain/BlogEntry;
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.getLocalizedString(Ljava/lang/String;)Ljava/lang/String;
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.getModel()Lnet/sourceforge/pebble/web/model/Model;
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.getRoles(Ljavax/servlet/http/HttpServletRequest;)[Ljava/lang/String;
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.populateAttachment(Lnet/sourceforge/pebble/domain/BlogEntry;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Attachment;
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.populateBlogEntry(Lnet/sourceforge/pebble/domain/BlogEntry;Ljavax/servlet/http/HttpServletRequest;)V
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.previewBlogEntry(Ljavax/servlet/http/HttpServletRequest;)Lnet/sourceforge/pebble/web/view/View;
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.process(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Lnet/sourceforge/pebble/web/view/View;
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.saveBlogEntry(Ljavax/servlet/http/HttpServletRequest;)Lnet/sourceforge/pebble/web/view/View;
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.setModel(Lnet/sourceforge/pebble/web/model/Model;)V
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): log
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): net/sourceforge/pebble/web/action/Action.__Descendant_Table[net/sourceforge/pebble/web/action/SaveBlogEntryAction]
    //#output(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): net/sourceforge/pebble/web/action/SecureAction.__Descendant_Table[net/sourceforge/pebble/web/action/SaveBlogEntryAction]
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Descendant_Table[net/sourceforge/pebble/web/action/SaveBlogEntryAction] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): net/sourceforge/pebble/web/action/Action.__Descendant_Table[net/sourceforge/pebble/web/action/SaveBlogEntryAction] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): net/sourceforge/pebble/web/action/SecureAction.__Descendant_Table[net/sourceforge/pebble/web/action/SaveBlogEntryAction] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.getBlogEntry(Ljavax/servlet/http/HttpServletRequest;)Lnet/sourceforge/pebble/domain/BlogEntry; == &getBlogEntry
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.getLocalizedString(Ljava/lang/String;)Ljava/lang/String; == &net/sourceforge/pebble/web/action/Action.getLocalizedString
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.getModel()Lnet/sourceforge/pebble/web/model/Model; == &net/sourceforge/pebble/web/action/Action.getModel
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.getRoles(Ljavax/servlet/http/HttpServletRequest;)[Ljava/lang/String; == &getRoles
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.populateAttachment(Lnet/sourceforge/pebble/domain/BlogEntry;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Attachment; == &populateAttachment
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.populateBlogEntry(Lnet/sourceforge/pebble/domain/BlogEntry;Ljavax/servlet/http/HttpServletRequest;)V == &populateBlogEntry
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.previewBlogEntry(Ljavax/servlet/http/HttpServletRequest;)Lnet/sourceforge/pebble/web/view/View; == &previewBlogEntry
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.process(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Lnet/sourceforge/pebble/web/view/View; == &process
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.saveBlogEntry(Ljavax/servlet/http/HttpServletRequest;)Lnet/sourceforge/pebble/web/view/View; == &saveBlogEntry
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): __Dispatch_Table.setModel(Lnet/sourceforge/pebble/web/model/Model;)V == &net/sourceforge/pebble/web/action/Action.setModel
    //#post(net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init): init'ed(log)
    //#saveblogentryaction.java:68: end of method: net.sourceforge.pebble.web.action.SaveBlogEntryAction.net.sourceforge.pebble.web.action.SaveBlogEntryAction__static_init

  /** the value used if the blog entry is being previewed rather than added */
  private static final String PREVIEW = "Preview";

  /**
   * 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 {
    String submitType = request.getParameter("submit");
    //#saveblogentryaction.java:81: method: View net.sourceforge.pebble.web.action.SaveBlogEntryAction.process(HttpServletRequest, HttpServletResponse)
    //#input(View process(HttpServletRequest, HttpServletResponse)): __Descendant_Table[net/sourceforge/pebble/web/action/SaveBlogEntryAction]
    //#input(View process(HttpServletRequest, HttpServletResponse)): __Descendant_Table[others]
    //#input(View process(HttpServletRequest, HttpServletResponse)): __Dispatch_Table.getModel()Lnet/sourceforge/pebble/web/model/Model;
    //#input(View process(HttpServletRequest, HttpServletResponse)): log
    //#input(View process(HttpServletRequest, HttpServletResponse)): net/sourceforge/pebble/web/model/Model.__Descendant_Table[net/sourceforge/pebble/web/model/Model]
    //#input(View process(HttpServletRequest, HttpServletResponse)): net/sourceforge/pebble/web/model/Model.__Descendant_Table[others]
    //#input(View process(HttpServletRequest, HttpServletResponse)): net/sourceforge/pebble/web/model/Model.__Dispatch_Table.get(Ljava/lang/String;)Ljava/lang/Object;
    //#input(View process(HttpServletRequest, HttpServletResponse)): net/sourceforge/pebble/web/model/Model.__Dispatch_Table.put(Ljava/lang/String;Ljava/lang/Object;)V
    //#input(View process(HttpServletRequest, HttpServletResponse)): net/sourceforge/pebble/web/validation/ValidationContext.__Descendant_Table[net/sourceforge/pebble/web/validation/ValidationContext]
    //#input(View process(HttpServletRequest, HttpServletResponse)): net/sourceforge/pebble/web/validation/ValidationContext.__Descendant_Table[others]
    //#input(View process(HttpServletRequest, HttpServletResponse)): net/sourceforge/pebble/web/validation/ValidationContext.__Dispatch_Table.addError(Ljava/lang/String;)V
    //#input(View process(HttpServletRequest, HttpServletResponse)): net/sourceforge/pebble/web/validation/ValidationContext.__Dispatch_Table.addError(Lnet/sourceforge/pebble/web/validation/ValidationError;)V
    //#input(View process(HttpServletRequest, HttpServletResponse)): net/sourceforge/pebble/web/validation/ValidationContext.__Dispatch_Table.hasErrors()Z
    //#input(View process(HttpServletRequest, HttpServletResponse)): request
    //#input(View process(HttpServletRequest, HttpServletResponse)): this
    //#input(View process(HttpServletRequest, HttpServletResponse)): this.__Tag
    //#input(View process(HttpServletRequest, HttpServletResponse)): this.model
    //#input(View process(HttpServletRequest, HttpServletResponse)): this.model.__Tag
    //#input(View process(HttpServletRequest, HttpServletResponse)): this.model.data
    //#output(View process(HttpServletRequest, HttpServletResponse)): new BlogEntryFormView(previewBlogEntry#2) num objects
    //#output(View process(HttpServletRequest, HttpServletResponse)): new BlogEntryFormView(saveBlogEntry#2) num objects
    //#output(View process(HttpServletRequest, HttpServletResponse)): new BlogEntryFormView(saveBlogEntry#6) num objects
    //#output(View process(HttpServletRequest, HttpServletResponse)): new RedirectView(saveBlogEntry#5) num objects
    //#output(View process(HttpServletRequest, HttpServletResponse)): return_value
    //#new obj(View process(HttpServletRequest, HttpServletResponse)): new BlogEntryFormView(previewBlogEntry#2)
    //#new obj(View process(HttpServletRequest, HttpServletResponse)): new BlogEntryFormView(saveBlogEntry#2)
    //#new obj(View process(HttpServletRequest, HttpServletResponse)): new BlogEntryFormView(saveBlogEntry#6)
    //#new obj(View process(HttpServletRequest, HttpServletResponse)): new RedirectView(saveBlogEntry#5)
    //#pre[2] (View process(HttpServletRequest, HttpServletResponse)): request != null
    //#pre[4] (View process(HttpServletRequest, HttpServletResponse)): this.__Tag == net/sourceforge/pebble/web/action/SaveBlogEntryAction
    //#pre[5] (View process(HttpServletRequest, HttpServletResponse)): this.model != null
    //#pre[6] (View process(HttpServletRequest, HttpServletResponse)): this.model.__Tag == net/sourceforge/pebble/web/model/Model
    //#pre[7] (View process(HttpServletRequest, HttpServletResponse)): this.model.data != null
    //#pre[1] (View process(HttpServletRequest, HttpServletResponse)): (soft) log != null
    //#post(View process(HttpServletRequest, HttpServletResponse)): return_value in Addr_Set{&new BlogEntryFormView(previewBlogEntry#2),&new BlogEntryFormView(saveBlogEntry#2),&new RedirectView(saveBlogEntry#5),&new BlogEntryFormView(saveBlogEntry#6)}
    //#post(View process(HttpServletRequest, HttpServletResponse)): new BlogEntryFormView(previewBlogEntry#2) num objects <= 1
    //#post(View process(HttpServletRequest, HttpServletResponse)): new BlogEntryFormView(saveBlogEntry#2) num objects <= 1
    //#post(View process(HttpServletRequest, HttpServletResponse)): new BlogEntryFormView(saveBlogEntry#6) num objects <= 1
    //#post(View process(HttpServletRequest, HttpServletResponse)): new RedirectView(saveBlogEntry#5) num objects <= 1
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.httpclient.HttpClient
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBlog
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getUrl
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.httpclient.methods.HeadMethod
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.httpclient.HttpClient:executeMethod
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.httpclient.methods.HeadMethod:getResponseHeader
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.httpclient.Header:getValue
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.io.IOException:getMessage
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.logging.Log:warn
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setUrl
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.Long:parseLong
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setSize
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setType
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.servlet.http.HttpServletRequest:getAttribute
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.servlet.http.HttpServletRequest:getParameter
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.String:replaceAll
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.servlet.http.HttpServletRequest:getParameterValues
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:isPersistent
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getLocale
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.text.DateFormat:getDateTimeInstance
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getTimeZone
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.text.DateFormat:setTimeZone
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.text.DateFormat:setLenient
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Date
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.text.DateFormat:parse
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Date:after
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setDate
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTimeZoneId
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTitle
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setSubtitle
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setBody
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setExcerpt
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCategory
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Set:add
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setCategories
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTags
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setOriginalPermalink
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setCommentsEnabled
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTrackBacksEnabled
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setAttachment
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:getBlogEntry
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:validate
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.HashMap:put
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.web.view.impl.BlogEntryFormView
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogService
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogService:putBlogEntry
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getLocalPermalink
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getTitle
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:info
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.web.view.RedirectView
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogServiceException:getMessage
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.List:add
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogServiceException:printStackTrace
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.HashMap:get
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogService:getBlogEntry
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.servlet.ServletException
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.acegisecurity.Authentication:getName
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.acegisecurity.context.SecurityContext:getAuthentication
    //#unanalyzed(View process(HttpServletRequest, HttpServletResponse)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setAuthor
    //#test_vector(View process(HttpServletRequest, HttpServletResponse)): java.lang.String:equalsIgnoreCase(...)@83: {0}, {1}
    //#test_vector(View process(HttpServletRequest, HttpServletResponse)): javax.servlet.http.HttpServletRequest:getParameter(...)@81: Addr_Set{null}, Inverse{null}

    if (submitType != null && submitType.equalsIgnoreCase(PREVIEW)) {
      return previewBlogEntry(request);
    } else {
      return saveBlogEntry(request);
    //#saveblogentryaction.java:86: end of method: View net.sourceforge.pebble.web.action.SaveBlogEntryAction.process(HttpServletRequest, HttpServletResponse)
    }
  }

  private View previewBlogEntry(HttpServletRequest request) throws ServletException {
    BlogEntry blogEntry = getBlogEntry(request);
    //#saveblogentryaction.java:91: method: View net.sourceforge.pebble.web.action.SaveBlogEntryAction.previewBlogEntry(HttpServletRequest)
    //#input(View previewBlogEntry(HttpServletRequest)): __Descendant_Table[net/sourceforge/pebble/web/action/SaveBlogEntryAction]
    //#input(View previewBlogEntry(HttpServletRequest)): __Descendant_Table[others]
    //#input(View previewBlogEntry(HttpServletRequest)): __Dispatch_Table.getModel()Lnet/sourceforge/pebble/web/model/Model;
    //#input(View previewBlogEntry(HttpServletRequest)): log
    //#input(View previewBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/model/Model.__Descendant_Table[net/sourceforge/pebble/web/model/Model]
    //#input(View previewBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/model/Model.__Descendant_Table[others]
    //#input(View previewBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/model/Model.__Dispatch_Table.get(Ljava/lang/String;)Ljava/lang/Object;
    //#input(View previewBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/model/Model.__Dispatch_Table.put(Ljava/lang/String;Ljava/lang/Object;)V
    //#input(View previewBlogEntry(HttpServletRequest)): request
    //#input(View previewBlogEntry(HttpServletRequest)): this
    //#input(View previewBlogEntry(HttpServletRequest)): this.__Tag
    //#input(View previewBlogEntry(HttpServletRequest)): this.model
    //#input(View previewBlogEntry(HttpServletRequest)): this.model.__Tag
    //#input(View previewBlogEntry(HttpServletRequest)): this.model.data
    //#output(View previewBlogEntry(HttpServletRequest)): new BlogEntryFormView(previewBlogEntry#2) num objects
    //#output(View previewBlogEntry(HttpServletRequest)): return_value
    //#new obj(View previewBlogEntry(HttpServletRequest)): new BlogEntryFormView(previewBlogEntry#2)
    //#pre[2] (View previewBlogEntry(HttpServletRequest)): request != null
    //#pre[4] (View previewBlogEntry(HttpServletRequest)): this.__Tag == net/sourceforge/pebble/web/action/SaveBlogEntryAction
    //#pre[5] (View previewBlogEntry(HttpServletRequest)): this.model != null
    //#pre[6] (View previewBlogEntry(HttpServletRequest)): this.model.__Tag == net/sourceforge/pebble/web/model/Model
    //#pre[7] (View previewBlogEntry(HttpServletRequest)): this.model.data != null
    //#pre[1] (View previewBlogEntry(HttpServletRequest)): (soft) log != null
    //#post(View previewBlogEntry(HttpServletRequest)): return_value == &new BlogEntryFormView(previewBlogEntry#2)
    //#post(View previewBlogEntry(HttpServletRequest)): new BlogEntryFormView(previewBlogEntry#2) num objects == 1
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.HttpClient
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBlog
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getUrl
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.methods.HeadMethod
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.HttpClient:executeMethod
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.methods.HeadMethod:getResponseHeader
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.Header:getValue
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.io.IOException:getMessage
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.logging.Log:warn
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setUrl
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.Long:parseLong
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setSize
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setType
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:javax.servlet.http.HttpServletRequest:getAttribute
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:javax.servlet.http.HttpServletRequest:getParameter
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:replaceAll
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:javax.servlet.http.HttpServletRequest:getParameterValues
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:isPersistent
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getLocale
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.text.DateFormat:getDateTimeInstance
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getTimeZone
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.text.DateFormat:setTimeZone
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.text.DateFormat:setLenient
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.Date
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.text.DateFormat:parse
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.Date:after
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setDate
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTimeZoneId
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTitle
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setSubtitle
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setBody
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setExcerpt
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCategory
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.Set:add
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setCategories
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTags
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setOriginalPermalink
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setCommentsEnabled
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTrackBacksEnabled
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setAttachment
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.HashMap:put
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogService
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.HashMap:get
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogService:getBlogEntry
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:javax.servlet.ServletException
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:org.acegisecurity.Authentication:getName
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:org.acegisecurity.context.SecurityContext:getAuthentication
    //#unanalyzed(View previewBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setAuthor

    populateBlogEntry(blogEntry, request);
    //#saveblogentryaction.java:93: ?precondition failure
    //#    net/sourceforge/pebble/web/action/SaveBlogEntryAction.populateBlogEntry: blogEntry != null
    //#    severity: MEDIUM
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View previewBlogEntry(HttpServletRequest)
    //#    basic block: Entry_BB_1
    //#    assertion: getBlogEntry(...) != null
    //#    callee: void net/sourceforge/pebble/web/action/SaveBlogEntryAction.populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    callee assertion: blogEntry != null
    //#    callee file: saveblogentryaction.java
    //#    callee precondition index: [1]
    //#    callee srcpos: 153
    //#    VN: getBlogEntry(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad

    ValidationContext validationContext = new ValidationContext();
    blogEntry.validate(validationContext);
    //#saveblogentryaction.java:96: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:validate(ValidationContext)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View previewBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:validate(ValidationContext)
    getModel().put("validationContext", validationContext);
    getModel().put(Constants.BLOG_ENTRY_KEY, blogEntry);

    return new BlogEntryFormView();
    //#saveblogentryaction.java:100: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.web.view.impl.BlogEntryFormView()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View previewBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.web.view.impl.BlogEntryFormView()
    //#saveblogentryaction.java:100: end of method: View net.sourceforge.pebble.web.action.SaveBlogEntryAction.previewBlogEntry(HttpServletRequest)
  }

  private View saveBlogEntry(HttpServletRequest request) throws ServletException {
    BlogEntry blogEntry = getBlogEntry(request);
    //#saveblogentryaction.java:104: method: View net.sourceforge.pebble.web.action.SaveBlogEntryAction.saveBlogEntry(HttpServletRequest)
    //#input(View saveBlogEntry(HttpServletRequest)): __Descendant_Table[net/sourceforge/pebble/web/action/SaveBlogEntryAction]
    //#input(View saveBlogEntry(HttpServletRequest)): __Descendant_Table[others]
    //#input(View saveBlogEntry(HttpServletRequest)): __Dispatch_Table.getModel()Lnet/sourceforge/pebble/web/model/Model;
    //#input(View saveBlogEntry(HttpServletRequest)): log
    //#input(View saveBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/model/Model.__Descendant_Table[net/sourceforge/pebble/web/model/Model]
    //#input(View saveBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/model/Model.__Descendant_Table[others]
    //#input(View saveBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/model/Model.__Dispatch_Table.get(Ljava/lang/String;)Ljava/lang/Object;
    //#input(View saveBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/model/Model.__Dispatch_Table.put(Ljava/lang/String;Ljava/lang/Object;)V
    //#input(View saveBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/validation/ValidationContext.__Descendant_Table[net/sourceforge/pebble/web/validation/ValidationContext]
    //#input(View saveBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/validation/ValidationContext.__Descendant_Table[others]
    //#input(View saveBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/validation/ValidationContext.__Dispatch_Table.addError(Ljava/lang/String;)V
    //#input(View saveBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/validation/ValidationContext.__Dispatch_Table.addError(Lnet/sourceforge/pebble/web/validation/ValidationError;)V
    //#input(View saveBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/validation/ValidationContext.__Dispatch_Table.hasErrors()Z
    //#input(View saveBlogEntry(HttpServletRequest)): request
    //#input(View saveBlogEntry(HttpServletRequest)): this
    //#input(View saveBlogEntry(HttpServletRequest)): this.__Tag
    //#input(View saveBlogEntry(HttpServletRequest)): this.model
    //#input(View saveBlogEntry(HttpServletRequest)): this.model.__Tag
    //#input(View saveBlogEntry(HttpServletRequest)): this.model.data
    //#output(View saveBlogEntry(HttpServletRequest)): new BlogEntryFormView(saveBlogEntry#2) num objects
    //#output(View saveBlogEntry(HttpServletRequest)): new BlogEntryFormView(saveBlogEntry#6) num objects
    //#output(View saveBlogEntry(HttpServletRequest)): new RedirectView(saveBlogEntry#5) num objects
    //#output(View saveBlogEntry(HttpServletRequest)): return_value
    //#new obj(View saveBlogEntry(HttpServletRequest)): new BlogEntryFormView(saveBlogEntry#2)
    //#new obj(View saveBlogEntry(HttpServletRequest)): new BlogEntryFormView(saveBlogEntry#6)
    //#new obj(View saveBlogEntry(HttpServletRequest)): new RedirectView(saveBlogEntry#5)
    //#pre[2] (View saveBlogEntry(HttpServletRequest)): request != null
    //#pre[4] (View saveBlogEntry(HttpServletRequest)): this.__Tag == net/sourceforge/pebble/web/action/SaveBlogEntryAction
    //#pre[5] (View saveBlogEntry(HttpServletRequest)): this.model != null
    //#pre[6] (View saveBlogEntry(HttpServletRequest)): this.model.__Tag == net/sourceforge/pebble/web/model/Model
    //#pre[7] (View saveBlogEntry(HttpServletRequest)): this.model.data != null
    //#pre[1] (View saveBlogEntry(HttpServletRequest)): (soft) log != null
    //#presumption(View saveBlogEntry(HttpServletRequest)): net.sourceforge.pebble.domain.BlogEntry:getBlog(...)@105 != null
    //#post(View saveBlogEntry(HttpServletRequest)): return_value in Addr_Set{&new RedirectView(saveBlogEntry#5),&new BlogEntryFormView(saveBlogEntry#6),&new BlogEntryFormView(saveBlogEntry#2)}
    //#post(View saveBlogEntry(HttpServletRequest)): new BlogEntryFormView(saveBlogEntry#2) num objects <= 1
    //#post(View saveBlogEntry(HttpServletRequest)): new BlogEntryFormView(saveBlogEntry#6) num objects <= 1
    //#post(View saveBlogEntry(HttpServletRequest)): new RedirectView(saveBlogEntry#5) num objects <= 1
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.HttpClient
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBlog
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getUrl
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.methods.HeadMethod
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.HttpClient:executeMethod
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.methods.HeadMethod:getResponseHeader
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.Header:getValue
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.io.IOException:getMessage
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:org.apache.commons.logging.Log:warn
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setUrl
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.Long:parseLong
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setSize
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setType
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:javax.servlet.http.HttpServletRequest:getAttribute
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:javax.servlet.http.HttpServletRequest:getParameter
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:replaceAll
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:javax.servlet.http.HttpServletRequest:getParameterValues
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:isPersistent
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getLocale
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.text.DateFormat:getDateTimeInstance
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getTimeZone
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.text.DateFormat:setTimeZone
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.text.DateFormat:setLenient
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.Date
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.text.DateFormat:parse
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.Date:after
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setDate
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTimeZoneId
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTitle
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setSubtitle
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setBody
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setExcerpt
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCategory
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.Set:add
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setCategories
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTags
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setOriginalPermalink
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setCommentsEnabled
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTrackBacksEnabled
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setAttachment
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.HashMap:put
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogService
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.List:add
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.HashMap:get
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogService:getBlogEntry
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:javax.servlet.ServletException
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:org.acegisecurity.Authentication:getName
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:org.acegisecurity.context.SecurityContext:getAuthentication
    //#unanalyzed(View saveBlogEntry(HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setAuthor
    Blog blog = blogEntry.getBlog();
    //#saveblogentryaction.java:105: ?null dereference
    //#    blogEntry != null
    //#    severity: MEDIUM
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    basic block: Entry_BB_1
    //#    assertion: blogEntry != null
    //#    VN: getBlogEntry(...)
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#saveblogentryaction.java:105: Warning: method not available
    //#    -- call on Blog net.sourceforge.pebble.domain.BlogEntry:getBlog()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: Blog net.sourceforge.pebble.domain.BlogEntry:getBlog()

    populateBlogEntry(blogEntry, request);

    ValidationContext context = new ValidationContext();
    blogEntry.validate(context);
    //#saveblogentryaction.java:110: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:validate(ValidationContext)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:validate(ValidationContext)

    getModel().put("validationContext", context);
    getModel().put(Constants.BLOG_ENTRY_KEY, blogEntry);

    if (context.hasErrors())  {
      return new BlogEntryFormView();
    //#saveblogentryaction.java:116: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.web.view.impl.BlogEntryFormView()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.web.view.impl.BlogEntryFormView()
    } else {
      BlogService service = new BlogService();
    //#saveblogentryaction.java:118: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService()
      try {
        service.putBlogEntry(blogEntry);
    //#saveblogentryaction.java:120: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService:putBlogEntry(BlogEntry)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService:putBlogEntry(BlogEntry)
        blog.info("Blog entry <a href=\"" + blogEntry.getLocalPermalink() + "\">" + blogEntry.getTitle() + "</a> saved.");
    //#saveblogentryaction.java:121: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogEntry:getLocalPermalink()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogEntry:getLocalPermalink()
    //#saveblogentryaction.java:121: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogEntry:getTitle()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogEntry:getTitle()
    //#saveblogentryaction.java:121: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.Blog:info(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.Blog:info(String)
        getModel().put(Constants.BLOG_ENTRY_KEY, blogEntry);
        return new RedirectView(blogEntry.getLocalPermalink());
    //#saveblogentryaction.java:123: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogEntry:getLocalPermalink()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogEntry:getLocalPermalink()
    //#saveblogentryaction.java:123: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.web.view.RedirectView(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.web.view.RedirectView(String)
      } catch (BlogServiceException be) {
        log.error(be.getMessage(), be);
    //#saveblogentryaction.java:125: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogServiceException:getMessage()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogServiceException:getMessage()
    //#saveblogentryaction.java:125: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
        context.addError(be.getMessage());
    //#saveblogentryaction.java:126: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogServiceException:getMessage()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogServiceException:getMessage()
        be.printStackTrace();
    //#saveblogentryaction.java:127: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogServiceException:printStackTrace()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogServiceException:printStackTrace()
        return new BlogEntryFormView();
    //#saveblogentryaction.java:128: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.web.view.impl.BlogEntryFormView()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: View saveBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.web.view.impl.BlogEntryFormView()
    //#saveblogentryaction.java:128: end of method: View net.sourceforge.pebble.web.action.SaveBlogEntryAction.saveBlogEntry(HttpServletRequest)
      }
    }
  }

  private BlogEntry getBlogEntry(HttpServletRequest request) throws ServletException {
    Blog blog = (Blog)getModel().get(Constants.BLOG_KEY);
    //#saveblogentryaction.java:134: method: BlogEntry net.sourceforge.pebble.web.action.SaveBlogEntryAction.getBlogEntry(HttpServletRequest)
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): __Descendant_Table[net/sourceforge/pebble/web/action/SaveBlogEntryAction]
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): __Descendant_Table[others]
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): __Dispatch_Table.getModel()Lnet/sourceforge/pebble/web/model/Model;
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/model/Model.__Descendant_Table[net/sourceforge/pebble/web/model/Model]
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/model/Model.__Descendant_Table[others]
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): net/sourceforge/pebble/web/model/Model.__Dispatch_Table.get(Ljava/lang/String;)Ljava/lang/Object;
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): request
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): this
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): this.__Tag
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): this.model
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): this.model.__Tag
    //#input(BlogEntry getBlogEntry(HttpServletRequest)): this.model.data
    //#output(BlogEntry getBlogEntry(HttpServletRequest)): new BlogEntry(getBlogEntry#3) num objects
    //#output(BlogEntry getBlogEntry(HttpServletRequest)): return_value
    //#new obj(BlogEntry getBlogEntry(HttpServletRequest)): new BlogEntry(getBlogEntry#3)
    //#pre[1] (BlogEntry getBlogEntry(HttpServletRequest)): request != null
    //#pre[3] (BlogEntry getBlogEntry(HttpServletRequest)): this.__Tag == net/sourceforge/pebble/web/action/SaveBlogEntryAction
    //#pre[4] (BlogEntry getBlogEntry(HttpServletRequest)): this.model != null
    //#pre[5] (BlogEntry getBlogEntry(HttpServletRequest)): this.model.__Tag == net/sourceforge/pebble/web/model/Model
    //#pre[6] (BlogEntry getBlogEntry(HttpServletRequest)): this.model.data != null
    //#post(BlogEntry getBlogEntry(HttpServletRequest)): init'ed(return_value)
    //#post(BlogEntry getBlogEntry(HttpServletRequest)): new BlogEntry(getBlogEntry#3) num objects <= 1
    //#unanalyzed(BlogEntry getBlogEntry(HttpServletRequest)): Effects-of-calling:java.util.HashMap:get
    //#unanalyzed(BlogEntry getBlogEntry(HttpServletRequest)): Effects-of-calling:org.acegisecurity.Authentication:getName
    //#unanalyzed(BlogEntry getBlogEntry(HttpServletRequest)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(BlogEntry getBlogEntry(HttpServletRequest)): Effects-of-calling:org.acegisecurity.context.SecurityContext:getAuthentication
    //#test_vector(BlogEntry getBlogEntry(HttpServletRequest)): java.lang.String:equalsIgnoreCase(...)@138: {0}, {1}
    //#test_vector(BlogEntry getBlogEntry(HttpServletRequest)): javax.servlet.http.HttpServletRequest:getParameter(...)@136: Addr_Set{null}, Inverse{null}
    String id = request.getParameter("entry");
    String persistent = request.getParameter("persistent");

    if (persistent != null && persistent.equalsIgnoreCase("true")) {
      BlogService service = new BlogService();
    //#saveblogentryaction.java:139: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: BlogEntry getBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService()
      try {
        return service.getBlogEntry(blog, id);
    //#saveblogentryaction.java:141: Warning: method not available
    //#    -- call on BlogEntry net.sourceforge.pebble.domain.BlogService:getBlogEntry(Blog, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: BlogEntry getBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: BlogEntry net.sourceforge.pebble.domain.BlogService:getBlogEntry(Blog, String)
      } catch (BlogServiceException e) {
        throw new ServletException(e);
      }
    } else {
      BlogEntry blogEntry = new BlogEntry(blog);
    //#saveblogentryaction.java:146: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry(Blog)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: BlogEntry getBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry(Blog)
      blogEntry.setAuthor(SecurityUtils.getUsername());
    //#saveblogentryaction.java:147: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setAuthor(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: BlogEntry getBlogEntry(HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setAuthor(String)
      return blogEntry;
    //#saveblogentryaction.java:148: end of method: BlogEntry net.sourceforge.pebble.web.action.SaveBlogEntryAction.getBlogEntry(HttpServletRequest)
    }
  }

  private void populateBlogEntry(BlogEntry blogEntry, HttpServletRequest request) {
    Blog blog = (Blog)request.getAttribute(Constants.BLOG_KEY);
    //#saveblogentryaction.java:153: method: void net.sourceforge.pebble.web.action.SaveBlogEntryAction.populateBlogEntry(BlogEntry, HttpServletRequest)
    //#input(void populateBlogEntry(BlogEntry, HttpServletRequest)): blogEntry
    //#input(void populateBlogEntry(BlogEntry, HttpServletRequest)): log
    //#input(void populateBlogEntry(BlogEntry, HttpServletRequest)): request
    //#input(void populateBlogEntry(BlogEntry, HttpServletRequest)): this
    //#pre[1] (void populateBlogEntry(BlogEntry, HttpServletRequest)): blogEntry != null
    //#pre[3] (void populateBlogEntry(BlogEntry, HttpServletRequest)): request != null
    //#pre[2] (void populateBlogEntry(BlogEntry, HttpServletRequest)): (soft) log != null
    //#presumption(void populateBlogEntry(BlogEntry, HttpServletRequest)): category.length@162 <= 4_294_967_295
    //#presumption(void populateBlogEntry(BlogEntry, HttpServletRequest)): java.text.DateFormat:getDateTimeInstance(...)@167 != null
    //#presumption(void populateBlogEntry(BlogEntry, HttpServletRequest)): java.text.DateFormat:parse(...)@175 != null
    //#presumption(void populateBlogEntry(BlogEntry, HttpServletRequest)): javax.servlet.http.HttpServletRequest:getAttribute(...)@153 != null
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.HttpClient
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBlog
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getUrl
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.methods.HeadMethod
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.HttpClient:executeMethod
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.methods.HeadMethod:getResponseHeader
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:org.apache.commons.httpclient.Header:getValue
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.io.IOException:getMessage
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:org.apache.commons.logging.Log:warn
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setUrl
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.Long:parseLong
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setSize
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:net.sourceforge.pebble.domain.Attachment:setType
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.String:replaceAll
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void populateBlogEntry(BlogEntry, HttpServletRequest)): Effects-of-calling:java.lang.StringBuffer:toString
    //#test_vector(void populateBlogEntry(BlogEntry, HttpServletRequest)): java.lang.String:equalsIgnoreCase(...)@204: {0}, {1}
    //#test_vector(void populateBlogEntry(BlogEntry, HttpServletRequest)): java.lang.String:equalsIgnoreCase(...)@209: {0}, {1}
    //#test_vector(void populateBlogEntry(BlogEntry, HttpServletRequest)): java.lang.String:length(...)@173: {0}, {1..4_294_967_295}
    //#test_vector(void populateBlogEntry(BlogEntry, HttpServletRequest)): java.lang.String:length(...)@218: {0}, {1..4_294_967_295}
    //#test_vector(void populateBlogEntry(BlogEntry, HttpServletRequest)): java.util.Date:after(...)@176: {0}, {1}
    //#test_vector(void populateBlogEntry(BlogEntry, HttpServletRequest)): javax.servlet.http.HttpServletRequest:getParameter(...)@160: Addr_Set{null}, Inverse{null}
    //#test_vector(void populateBlogEntry(BlogEntry, HttpServletRequest)): javax.servlet.http.HttpServletRequest:getParameter(...)@161: Addr_Set{null}, Inverse{null}
    //#test_vector(void populateBlogEntry(BlogEntry, HttpServletRequest)): javax.servlet.http.HttpServletRequest:getParameter(...)@172: Addr_Set{null}, Inverse{null}
    //#test_vector(void populateBlogEntry(BlogEntry, HttpServletRequest)): javax.servlet.http.HttpServletRequest:getParameter(...)@215: Addr_Set{null}, Inverse{null}
    //#test_vector(void populateBlogEntry(BlogEntry, HttpServletRequest)): javax.servlet.http.HttpServletRequest:getParameterValues(...)@162: Addr_Set{null}, Inverse{null}
    //#test_vector(void populateBlogEntry(BlogEntry, HttpServletRequest)): net.sourceforge.pebble.domain.BlogEntry:isPersistent(...)@166: {1}, {0}
    String title = StringUtils.stripScriptTags(request.getParameter("title"));
    String subtitle = StringUtils.stripScriptTags(request.getParameter("subtitle"));
    String body = StringUtils.filterNewlines(request.getParameter("body"));
    String excerpt = StringUtils.filterNewlines(request.getParameter("excerpt"));
    String originalPermalink = request.getParameter("originalPermalink");
    String tags = request.getParameter("tags");
    String commentsEnabled = request.getParameter("commentsEnabled");
    String trackBacksEnabled = request.getParameter("trackBacksEnabled");
    String category[] = request.getParameterValues("category");
    String timeZone = request.getParameter("timeZone");

    // the date can only set on those entries that have not yet been persisted
    if (!blogEntry.isPersistent()) {
    //#saveblogentryaction.java:166: Warning: method not available
    //#    -- call on bool net.sourceforge.pebble.domain.BlogEntry:isPersistent()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: bool net.sourceforge.pebble.domain.BlogEntry:isPersistent()
      DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, blog.getLocale());
    //#saveblogentryaction.java:167: Warning: method not available
    //#    -- call on Locale net.sourceforge.pebble.domain.Blog:getLocale()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: Locale net.sourceforge.pebble.domain.Blog:getLocale()
      dateFormat.setTimeZone(blog.getTimeZone());
    //#saveblogentryaction.java:168: Warning: method not available
    //#    -- call on TimeZone net.sourceforge.pebble.domain.Blog:getTimeZone()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: TimeZone net.sourceforge.pebble.domain.Blog:getTimeZone()
      dateFormat.setLenient(false);

      Date now = new Date();
      String dateAsString = request.getParameter("date");
      if (dateAsString != null && dateAsString.length() > 0) {
        try {
          Date date = dateFormat.parse(dateAsString);
          if (date.after(now)) {
            date = now;
          }
          blogEntry.setDate(date);
    //#saveblogentryaction.java:179: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setDate(Date)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setDate(Date)
        } catch (ParseException pe) {
          log.warn(pe);
    //#saveblogentryaction.java:181: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:warn(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:warn(Object)
          blogEntry.setDate(now);
    //#saveblogentryaction.java:182: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setDate(Date)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setDate(Date)
        }
      } else {
        // the date has been blanked out, so reset to "now"
        blogEntry.setDate(now);
    //#saveblogentryaction.java:186: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setDate(Date)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setDate(Date)
      }
    }

    blogEntry.setTimeZoneId(timeZone);
    //#saveblogentryaction.java:190: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setTimeZoneId(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setTimeZoneId(String)
    blogEntry.setTitle(title);
    //#saveblogentryaction.java:191: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setTitle(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setTitle(String)
    blogEntry.setSubtitle(subtitle);
    //#saveblogentryaction.java:192: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setSubtitle(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setSubtitle(String)
    blogEntry.setBody(body);
    //#saveblogentryaction.java:193: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setBody(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setBody(String)
    blogEntry.setExcerpt(excerpt);
    //#saveblogentryaction.java:194: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setExcerpt(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setExcerpt(String)
    Set categories = new HashSet();
    if (category != null) {
      for (int i = 0; i < category.length; i++) {
        categories.add(blog.getCategory(category[i]));
    //#saveblogentryaction.java:198: Warning: method not available
    //#    -- call on Category net.sourceforge.pebble.domain.Blog:getCategory(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: Category net.sourceforge.pebble.domain.Blog:getCategory(String)
      }
    }
    blogEntry.setCategories(categories);
    //#saveblogentryaction.java:201: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setCategories(Collection)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setCategories(Collection)
    blogEntry.setTags(tags);
    //#saveblogentryaction.java:202: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setTags(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setTags(String)
    blogEntry.setOriginalPermalink(originalPermalink);
    //#saveblogentryaction.java:203: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setOriginalPermalink(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setOriginalPermalink(String)
    if (commentsEnabled != null && commentsEnabled.equalsIgnoreCase("true")) {
      blogEntry.setCommentsEnabled(true);
    //#saveblogentryaction.java:205: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setCommentsEnabled(bool)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setCommentsEnabled(bool)
    } else {
      blogEntry.setCommentsEnabled(false);
    //#saveblogentryaction.java:207: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setCommentsEnabled(bool)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setCommentsEnabled(bool)
    }
    if (trackBacksEnabled != null && trackBacksEnabled.equalsIgnoreCase("true")) {
      blogEntry.setTrackBacksEnabled(true);
    //#saveblogentryaction.java:210: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setTrackBacksEnabled(bool)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setTrackBacksEnabled(bool)
    } else {
      blogEntry.setTrackBacksEnabled(false);
    //#saveblogentryaction.java:212: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setTrackBacksEnabled(bool)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setTrackBacksEnabled(bool)
    }

    String attachmentUrl = request.getParameter("attachmentUrl");
    String attachmentSize = request.getParameter("attachmentSize");
    String attachmentType = request.getParameter("attachmentType");
    if (attachmentUrl != null && attachmentUrl.length() > 0) {
      Attachment attachment = populateAttachment(blogEntry, attachmentUrl, attachmentSize, attachmentType);
      blogEntry.setAttachment(attachment);
    //#saveblogentryaction.java:220: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setAttachment(Attachment)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setAttachment(Attachment)
    } else {
      blogEntry.setAttachment(null);
    //#saveblogentryaction.java:222: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setAttachment(Attachment)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: void populateBlogEntry(BlogEntry, HttpServletRequest)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setAttachment(Attachment)
    }
  }
    //#saveblogentryaction.java:224: end of method: void net.sourceforge.pebble.web.action.SaveBlogEntryAction.populateBlogEntry(BlogEntry, HttpServletRequest)

  private Attachment populateAttachment(BlogEntry blogEntry, String attachmentUrl, String attachmentSize, String attachmentType) {
    if (attachmentSize == null || attachmentSize.length() == 0) {
    //#saveblogentryaction.java:227: method: Attachment net.sourceforge.pebble.web.action.SaveBlogEntryAction.populateAttachment(BlogEntry, String, String, String)
    //#input(Attachment populateAttachment(BlogEntry, String, String, String)): attachmentSize
    //#input(Attachment populateAttachment(BlogEntry, String, String, String)): attachmentType
    //#input(Attachment populateAttachment(BlogEntry, String, String, String)): attachmentUrl
    //#input(Attachment populateAttachment(BlogEntry, String, String, String)): blogEntry
    //#input(Attachment populateAttachment(BlogEntry, String, String, String)): log
    //#output(Attachment populateAttachment(BlogEntry, String, String, String)): new Attachment(populateAttachment#5) num objects
    //#output(Attachment populateAttachment(BlogEntry, String, String, String)): return_value
    //#new obj(Attachment populateAttachment(BlogEntry, String, String, String)): new Attachment(populateAttachment#5)
    //#pre[3] (Attachment populateAttachment(BlogEntry, String, String, String)): (soft) attachmentUrl != null
    //#pre[4] (Attachment populateAttachment(BlogEntry, String, String, String)): (soft) blogEntry != null
    //#pre[5] (Attachment populateAttachment(BlogEntry, String, String, String)): (soft) log != null
    //#presumption(Attachment populateAttachment(BlogEntry, String, String, String)): net.sourceforge.pebble.domain.BlogEntry:getBlog(...)@232 != null
    //#post(Attachment populateAttachment(BlogEntry, String, String, String)): return_value == &new Attachment(populateAttachment#5)
    //#post(Attachment populateAttachment(BlogEntry, String, String, String)): new Attachment(populateAttachment#5) num objects == 1
    //#test_vector(Attachment populateAttachment(BlogEntry, String, String, String)): attachmentSize: Addr_Set{null}, Inverse{null}
    //#test_vector(Attachment populateAttachment(BlogEntry, String, String, String)): java.lang.String:length(...)@227: {1..4_294_967_295}, {0}
    //#test_vector(Attachment populateAttachment(BlogEntry, String, String, String)): java.lang.String:length(...)@254: {0}, {1..4_294_967_295}
    //#test_vector(Attachment populateAttachment(BlogEntry, String, String, String)): java.lang.String:startsWith(...)@231: {0}, {1}
    //#test_vector(Attachment populateAttachment(BlogEntry, String, String, String)): org.apache.commons.httpclient.HttpClient:executeMethod(...)@236: {-2_147_483_648..199, 201..4_294_967_295}, {200}
    //#test_vector(Attachment populateAttachment(BlogEntry, String, String, String)): org.apache.commons.httpclient.methods.HeadMethod:getResponseHeader(...)@238: Addr_Set{null}, Inverse{null}
    //#test_vector(Attachment populateAttachment(BlogEntry, String, String, String)): org.apache.commons.httpclient.methods.HeadMethod:getResponseHeader(...)@242: Addr_Set{null}, Inverse{null}
      String absoluteAttachmentUrl =  attachmentUrl;
      try {
        HttpClient httpClient = new HttpClient();
    //#saveblogentryaction.java:230: Warning: method not available
    //#    -- call on void org.apache.commons.httpclient.HttpClient()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.httpclient.HttpClient()
        if (absoluteAttachmentUrl.startsWith("./")) {
          absoluteAttachmentUrl = blogEntry.getBlog().getUrl() + absoluteAttachmentUrl.substring(2);
    //#saveblogentryaction.java:232: Warning: method not available
    //#    -- call on Blog net.sourceforge.pebble.domain.BlogEntry:getBlog()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: Blog net.sourceforge.pebble.domain.BlogEntry:getBlog()
    //#saveblogentryaction.java:232: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.Blog:getUrl()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.Blog:getUrl()
        }

        HeadMethod headMethod = new HeadMethod(absoluteAttachmentUrl);
    //#saveblogentryaction.java:235: Warning: method not available
    //#    -- call on void org.apache.commons.httpclient.methods.HeadMethod(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.httpclient.methods.HeadMethod(String)
        int status = httpClient.executeMethod(headMethod);
    //#saveblogentryaction.java:236: Warning: method not available
    //#    -- call on int org.apache.commons.httpclient.HttpClient:executeMethod(HttpMethod)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: int org.apache.commons.httpclient.HttpClient:executeMethod(HttpMethod)
        if (status == 200) {
          Header attachmentSizeHeader = headMethod.getResponseHeader("Content-Length");
    //#saveblogentryaction.java:238: Warning: method not available
    //#    -- call on Header org.apache.commons.httpclient.methods.HeadMethod:getResponseHeader(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: Header org.apache.commons.httpclient.methods.HeadMethod:getResponseHeader(String)
          if (attachmentSizeHeader != null) {
            attachmentSize = attachmentSizeHeader.getValue();
    //#saveblogentryaction.java:240: Warning: method not available
    //#    -- call on String org.apache.commons.httpclient.Header:getValue()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: String org.apache.commons.httpclient.Header:getValue()
          }
          Header attachmentTypeHeader = headMethod.getResponseHeader("Content-Type");
    //#saveblogentryaction.java:242: Warning: method not available
    //#    -- call on Header org.apache.commons.httpclient.methods.HeadMethod:getResponseHeader(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: Header org.apache.commons.httpclient.methods.HeadMethod:getResponseHeader(String)
          if (attachmentTypeHeader != null) {
            attachmentType = attachmentTypeHeader.getValue();
    //#saveblogentryaction.java:244: Warning: method not available
    //#    -- call on String org.apache.commons.httpclient.Header:getValue()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: String org.apache.commons.httpclient.Header:getValue()
          }
        }
      } catch (IOException e) {
        log.warn("Could not get details for attachment located at " + absoluteAttachmentUrl + " : " + e.getMessage());
    //#saveblogentryaction.java:248: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:warn(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:warn(Object)
      }
    }

    Attachment attachment = new Attachment();
    //#saveblogentryaction.java:252: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.Attachment()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.Attachment()
    attachment.setUrl(attachmentUrl);
    //#saveblogentryaction.java:253: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.Attachment:setUrl(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.Attachment:setUrl(String)
    if (attachmentSize != null && attachmentSize.length() > 0) {
      attachment.setSize(Long.parseLong(attachmentSize));
    //#saveblogentryaction.java:255: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.Attachment:setSize(long)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.Attachment:setSize(long)
    }
    attachment.setType(attachmentType);
    //#saveblogentryaction.java:257: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.Attachment:setType(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
    //#    method: Attachment populateAttachment(BlogEntry, String, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.Attachment:setType(String)

    return attachment;
    //#saveblogentryaction.java:259: end of method: Attachment net.sourceforge.pebble.web.action.SaveBlogEntryAction.populateAttachment(BlogEntry, String, String, String)
  }

  /**
   * Gets a list of all roles that are allowed to access this action.
   *
   * @return  an array of Strings representing role names
   * @param request
   */
  public String[] getRoles(HttpServletRequest request) {
    return new String[]{Constants.BLOG_CONTRIBUTOR_ROLE};
    //#saveblogentryaction.java:269: method: String[] net.sourceforge.pebble.web.action.SaveBlogEntryAction.getRoles(HttpServletRequest)
    //#input(String[] getRoles(HttpServletRequest)): net.sourceforge.pebble.Constants.BLOG_CONTRIBUTOR_ROLE
    //#output(String[] getRoles(HttpServletRequest)): new String[](getRoles#1) num objects
    //#output(String[] getRoles(HttpServletRequest)): return_value.length
    //#output(String[] getRoles(HttpServletRequest)): return_value[0]
    //#output(String[] getRoles(HttpServletRequest)): return_value
    //#new obj(String[] getRoles(HttpServletRequest)): new String[](getRoles#1)
    //#presumption(String[] getRoles(HttpServletRequest)): init'ed(net.sourceforge.pebble.Constants.BLOG_CONTRIBUTOR_ROLE)
    //#post(String[] getRoles(HttpServletRequest)): return_value == &new String[](getRoles#1)
    //#post(String[] getRoles(HttpServletRequest)): new String[](getRoles#1) num objects == 1
    //#post(String[] getRoles(HttpServletRequest)): return_value.length == 1
    //#post(String[] getRoles(HttpServletRequest)): return_value[0] == net.sourceforge.pebble.Constants.BLOG_CONTRIBUTOR_ROLE
    //#post(String[] getRoles(HttpServletRequest)): (soft) init'ed(return_value[0])
    //#saveblogentryaction.java:269: end of method: String[] net.sourceforge.pebble.web.action.SaveBlogEntryAction.getRoles(HttpServletRequest)
  }

}    //#saveblogentryaction.java:: end of class: net.sourceforge.pebble.web.action.SaveBlogEntryAction
