//# 6 errors, 499 messages
//#
/*
    //#bloggerapihandler.java:1:1: class: net.sourceforge.pebble.webservice.BloggerAPIHandler
 * 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.webservice;

import net.sourceforge.pebble.domain.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.xmlrpc.XmlRpcException;

import java.util.*;

/**
 * A handler for the Blogger API (accessed via XML-RPC).
 *
 * @author    Simon Brown
 */
public class BloggerAPIHandler extends AbstractAPIHandler {
    //#bloggerapihandler.java:46: method: void net.sourceforge.pebble.webservice.BloggerAPIHandler.net.sourceforge.pebble.webservice.BloggerAPIHandler()
    //#input(void net.sourceforge.pebble.webservice.BloggerAPIHandler()): this
    //#bloggerapihandler.java:46: end of method: void net.sourceforge.pebble.webservice.BloggerAPIHandler.net.sourceforge.pebble.webservice.BloggerAPIHandler()

  static final String URL = "url";
  static final String BLOG_ID = "blogid";
  static final String BLOG_NAME = "blogName";
  static final String DATE_CREATED = "dateCreated";
  static final String USER_ID = "userId";
  static final String POST_ID = "postid";
  static final String CONTENT = "content";

  static final String TITLE_START_DELIMITER = "<title>";
  static final String TITLE_END_DELIMITER = "</title>";
  static final String CATEGORY_START_DELIMITER = "<category>";
  static final String CATEGORY_END_DELIMITER = "</category>";
  static final char BLOG_ID_SEPARATOR = '/';

  /** the log used by this class */
  private static Log log = LogFactory.getLog(BloggerAPIHandler.class);
    //#bloggerapihandler.java:63: method: net.sourceforge.pebble.webservice.BloggerAPIHandler.net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init
    //#bloggerapihandler.java:63: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler]
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.adaptBlogEntry(Lnet/sourceforge/pebble/domain/BlogEntry;)Ljava/util/Hashtable;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.addCategory(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.authenticate(Lnet/sourceforge/pebble/domain/Blog;Ljava/lang/String;Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.deletePost(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Z
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.editPost(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Z
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.formatPostId(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getAuthenticationManager()Lorg/acegisecurity/AuthenticationManager;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getBlogWithBlogId(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getBlogWithPostId(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getPost(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Hashtable;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getPostId(Ljava/lang/String;)Ljava/lang/String;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getRecentPosts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Ljava/util/Vector;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getTemplate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getUserInfo(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Hashtable;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getUsersBlogs(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.newPost(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.populateEntry(Lnet/sourceforge/pebble/domain/BlogEntry;Ljava/lang/String;Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.setAuthenticationManager(Lorg/acegisecurity/AuthenticationManager;)V
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.setTemplate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): log
    //#output(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): net/sourceforge/pebble/webservice/AbstractAPIHandler.__Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler]
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): net/sourceforge/pebble/webservice/AbstractAPIHandler.__Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.adaptBlogEntry(Lnet/sourceforge/pebble/domain/BlogEntry;)Ljava/util/Hashtable; == &adaptBlogEntry
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.addCategory(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z == &addCategory
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.authenticate(Lnet/sourceforge/pebble/domain/Blog;Ljava/lang/String;Ljava/lang/String;)V == &net/sourceforge/pebble/webservice/AbstractAPIHandler.authenticate
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.deletePost(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Z == &deletePost
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.editPost(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Z == &editPost
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.formatPostId(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; == &net/sourceforge/pebble/webservice/AbstractAPIHandler.formatPostId
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getAuthenticationManager()Lorg/acegisecurity/AuthenticationManager; == &net/sourceforge/pebble/webservice/AbstractAPIHandler.getAuthenticationManager
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getBlogWithBlogId(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog; == &net/sourceforge/pebble/webservice/AbstractAPIHandler.getBlogWithBlogId
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getBlogWithPostId(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog; == &net/sourceforge/pebble/webservice/AbstractAPIHandler.getBlogWithPostId
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getPost(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Hashtable; == &getPost
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getPostId(Ljava/lang/String;)Ljava/lang/String; == &net/sourceforge/pebble/webservice/AbstractAPIHandler.getPostId
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getRecentPosts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Ljava/util/Vector; == &getRecentPosts
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getTemplate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; == &getTemplate
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getUserInfo(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Hashtable; == &getUserInfo
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.getUsersBlogs(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector; == &getUsersBlogs
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.newPost(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String; == &newPost
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.populateEntry(Lnet/sourceforge/pebble/domain/BlogEntry;Ljava/lang/String;Ljava/lang/String;)V == &populateEntry
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.setAuthenticationManager(Lorg/acegisecurity/AuthenticationManager;)V == &net/sourceforge/pebble/webservice/AbstractAPIHandler.setAuthenticationManager
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): __Dispatch_Table.setTemplate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z == &setTemplate
    //#post(net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init): init'ed(log)
    //#bloggerapihandler.java:63: end of method: net.sourceforge.pebble.webservice.BloggerAPIHandler.net.sourceforge.pebble.webservice.BloggerAPIHandler__static_init

  /**
   * Gets information about the user logging in.
   *
   * @param appkey    the client application key (ignored)
   * @param username  the username used for logging in via XML-RPC
   * @param password  the password used for logging in via XML-RPC
   * @return  a Hashtable containing user information
   * @throws XmlRpcException    if something goes wrong, including an authentication error
   */
  public Hashtable getUserInfo(String appkey, String username, String password) throws XmlRpcException {
    log.debug("BloggerAPI.getUserInfo(" +
    //#bloggerapihandler.java:75: method: Hashtable net.sourceforge.pebble.webservice.BloggerAPIHandler.getUserInfo(String, String, String)
    //#bloggerapihandler.java:75: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable getUserInfo(String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#input(Hashtable getUserInfo(String, String, String)): __Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler]
    //#input(Hashtable getUserInfo(String, String, String)): __Descendant_Table[others]
    //#input(Hashtable getUserInfo(String, String, String)): __Dispatch_Table.authenticate(Lnet/sourceforge/pebble/domain/Blog;Ljava/lang/String;Ljava/lang/String;)V
    //#input(Hashtable getUserInfo(String, String, String)): appkey
    //#input(Hashtable getUserInfo(String, String, String)): log
    //#input(Hashtable getUserInfo(String, String, String)): password
    //#input(Hashtable getUserInfo(String, String, String)): this
    //#input(Hashtable getUserInfo(String, String, String)): this.__Tag
    //#input(Hashtable getUserInfo(String, String, String)): this.authenticationManager
    //#input(Hashtable getUserInfo(String, String, String)): username
    //#output(Hashtable getUserInfo(String, String, String)): new Hashtable(getUserInfo#2) num objects
    //#output(Hashtable getUserInfo(String, String, String)): return_value
    //#new obj(Hashtable getUserInfo(String, String, String)): new Hashtable(getUserInfo#2)
    //#pre[2] (Hashtable getUserInfo(String, String, String)): log != null
    //#pre[5] (Hashtable getUserInfo(String, String, String)): this.__Tag == net/sourceforge/pebble/webservice/BloggerAPIHandler
    //#pre[6] (Hashtable getUserInfo(String, String, String)): this.authenticationManager != null
    //#post(Hashtable getUserInfo(String, String, String)): return_value == &new Hashtable(getUserInfo#2)
    //#post(Hashtable getUserInfo(String, String, String)): new Hashtable(getUserInfo#2) num objects == 1
    //#unanalyzed(Hashtable getUserInfo(String, String, String)): Effects-of-calling:org.acegisecurity.providers.UsernamePasswordAuthenticationToken
    //#unanalyzed(Hashtable getUserInfo(String, String, String)): Effects-of-calling:org.acegisecurity.AuthenticationManager:authenticate
    //#unanalyzed(Hashtable getUserInfo(String, String, String)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(Hashtable getUserInfo(String, String, String)): Effects-of-calling:org.acegisecurity.context.SecurityContext:setAuthentication
    //#unanalyzed(Hashtable getUserInfo(String, String, String)): Effects-of-calling:net.sourceforge.pebble.util.SecurityUtils:isUserAuthorisedForBlogAsBlogContributor
        appkey + ", " +
        username + ", " +
        "********)");

    authenticate((Blog)null, username, password);
    Hashtable ht = new Hashtable();
    ht.put("userid", username);

    return ht;
    //#bloggerapihandler.java:84: end of method: Hashtable net.sourceforge.pebble.webservice.BloggerAPIHandler.getUserInfo(String, String, String)
  }

  /**
   * Gets a list of the blogs that the specified user can edit. Pabble
   * only has the concept of a single blog.
   *
   * @param appkey    the client application key (ignored)
   * @param username  the username used for logging in via XML-RPC
   * @param password  the password used for logging in via XML-RPC
   * @return  a Vector of Hashtables (an array of structs) representing blogs
   * @throws XmlRpcException    if something goes wrong, including an authentication error
   */
  public Vector getUsersBlogs(String appkey, String username, String password) throws XmlRpcException {
    log.debug("BloggerAPI.getUsersBlogs(" +
    //#bloggerapihandler.java:98: method: Vector net.sourceforge.pebble.webservice.BloggerAPIHandler.getUsersBlogs(String, String, String)
    //#bloggerapihandler.java:98: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Vector getUsersBlogs(String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#input(Vector getUsersBlogs(String, String, String)): __Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler]
    //#input(Vector getUsersBlogs(String, String, String)): __Descendant_Table[others]
    //#input(Vector getUsersBlogs(String, String, String)): __Dispatch_Table.authenticate(Lnet/sourceforge/pebble/domain/Blog;Ljava/lang/String;Ljava/lang/String;)V
    //#input(Vector getUsersBlogs(String, String, String)): appkey
    //#input(Vector getUsersBlogs(String, String, String)): log
    //#input(Vector getUsersBlogs(String, String, String)): password
    //#input(Vector getUsersBlogs(String, String, String)): this
    //#input(Vector getUsersBlogs(String, String, String)): this.__Tag
    //#input(Vector getUsersBlogs(String, String, String)): this.authenticationManager
    //#input(Vector getUsersBlogs(String, String, String)): username
    //#output(Vector getUsersBlogs(String, String, String)): new Vector(getUsersBlogs#2) num objects
    //#output(Vector getUsersBlogs(String, String, String)): return_value
    //#new obj(Vector getUsersBlogs(String, String, String)): new Vector(getUsersBlogs#2)
    //#pre[2] (Vector getUsersBlogs(String, String, String)): log != null
    //#pre[5] (Vector getUsersBlogs(String, String, String)): (soft) this.__Tag == net/sourceforge/pebble/webservice/BloggerAPIHandler
    //#pre[6] (Vector getUsersBlogs(String, String, String)): (soft) this.authenticationManager != null
    //#presumption(Vector getUsersBlogs(String, String, String)): java.util.Iterator:next(...)@106 != null
    //#presumption(Vector getUsersBlogs(String, String, String)): net.sourceforge.pebble.domain.BlogManager:getBlogs(...)@103 != null
    //#presumption(Vector getUsersBlogs(String, String, String)): net.sourceforge.pebble.domain.BlogManager:getInstance(...)@103 != null
    //#post(Vector getUsersBlogs(String, String, String)): return_value == &new Vector(getUsersBlogs#2)
    //#post(Vector getUsersBlogs(String, String, String)): new Vector(getUsersBlogs#2) num objects == 1
    //#unanalyzed(Vector getUsersBlogs(String, String, String)): Effects-of-calling:org.acegisecurity.providers.UsernamePasswordAuthenticationToken
    //#unanalyzed(Vector getUsersBlogs(String, String, String)): Effects-of-calling:org.acegisecurity.AuthenticationManager:authenticate
    //#unanalyzed(Vector getUsersBlogs(String, String, String)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(Vector getUsersBlogs(String, String, String)): Effects-of-calling:org.acegisecurity.context.SecurityContext:setAuthentication
    //#unanalyzed(Vector getUsersBlogs(String, String, String)): Effects-of-calling:net.sourceforge.pebble.util.SecurityUtils:isUserAuthorisedForBlogAsBlogContributor
    //#test_vector(Vector getUsersBlogs(String, String, String)): java.util.Iterator:hasNext(...)@106: {1}, {0}
        appkey + ", " +
        username + ", " +
        "********)");

    Collection<Blog> blogs = BlogManager.getInstance().getBlogs();
    //#bloggerapihandler.java:103: Warning: method not available
    //#    -- call on BlogManager net.sourceforge.pebble.domain.BlogManager:getInstance()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Vector getUsersBlogs(String, String, String)
    //#    unanalyzed callee: BlogManager net.sourceforge.pebble.domain.BlogManager:getInstance()
    //#bloggerapihandler.java:103: Warning: method not available
    //#    -- call on Collection net.sourceforge.pebble.domain.BlogManager:getBlogs()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Vector getUsersBlogs(String, String, String)
    //#    unanalyzed callee: Collection net.sourceforge.pebble.domain.BlogManager:getBlogs()
    Vector usersBlogs = new Vector();

    for (Blog blog : blogs) {
      try {
        authenticate(blog, username, password);
        Hashtable blogInfo = new Hashtable();
        blogInfo.put(URL, blog.getUrl());
    //#bloggerapihandler.java:110: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.Blog:getUrl()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Vector getUsersBlogs(String, String, String)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.Blog:getUrl()
        blogInfo.put(BLOG_ID, blog.getId());
    //#bloggerapihandler.java:111: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.Blog:getId()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Vector getUsersBlogs(String, String, String)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.Blog:getId()
        blogInfo.put(BLOG_NAME, blog.getName());
    //#bloggerapihandler.java:112: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.Blog:getName()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Vector getUsersBlogs(String, String, String)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.Blog:getName()

        usersBlogs.add(blogInfo);
      } catch (XmlRpcAuthenticationException xmlrpcae) {
        // do nothing - means that they didn't authenticate against the blog
      }
    }

    return usersBlogs;
    //#bloggerapihandler.java:120: end of method: Vector net.sourceforge.pebble.webservice.BloggerAPIHandler.getUsersBlogs(String, String, String)
  }

  /**
   * Gets a list of the recent blog entries.
   *
   * @param appkey    the client application key (ignored)
   * @param blogid    the ID of the blog (ignored)
   * @param username  the username used for logging in via XML-RPC
   * @param password  the password used for logging in via XML-RPC
   * @param numberOfPosts   the number of posts to get
   * @return  a Vector of Hashtables (an array of structs) representing blog entries
   * @throws XmlRpcException    if something goes wrong, including an authentication error
   */
  public Vector getRecentPosts(String appkey, String blogid, String username, String password, int numberOfPosts) throws XmlRpcException {
    log.debug("BloggerAPI.getRecentPosts(" +
    //#bloggerapihandler.java:135: method: Vector net.sourceforge.pebble.webservice.BloggerAPIHandler.getRecentPosts(String, String, String, String, int)
    //#bloggerapihandler.java:135: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Vector getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#input(Vector getRecentPosts(String, String, String, String, int)): __Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler]
    //#input(Vector getRecentPosts(String, String, String, String, int)): __Descendant_Table[others]
    //#input(Vector getRecentPosts(String, String, String, String, int)): __Dispatch_Table.authenticate(Lnet/sourceforge/pebble/domain/Blog;Ljava/lang/String;Ljava/lang/String;)V
    //#input(Vector getRecentPosts(String, String, String, String, int)): __Dispatch_Table.formatPostId(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(Vector getRecentPosts(String, String, String, String, int)): __Dispatch_Table.getBlogWithBlogId(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog;
    //#input(Vector getRecentPosts(String, String, String, String, int)): appkey
    //#input(Vector getRecentPosts(String, String, String, String, int)): blogid
    //#input(Vector getRecentPosts(String, String, String, String, int)): log
    //#input(Vector getRecentPosts(String, String, String, String, int)): numberOfPosts
    //#input(Vector getRecentPosts(String, String, String, String, int)): password
    //#input(Vector getRecentPosts(String, String, String, String, int)): this
    //#input(Vector getRecentPosts(String, String, String, String, int)): this.__Tag
    //#input(Vector getRecentPosts(String, String, String, String, int)): this.authenticationManager
    //#input(Vector getRecentPosts(String, String, String, String, int)): username
    //#output(Vector getRecentPosts(String, String, String, String, int)): new Vector(getRecentPosts#2) num objects
    //#output(Vector getRecentPosts(String, String, String, String, int)): return_value
    //#new obj(Vector getRecentPosts(String, String, String, String, int)): new Vector(getRecentPosts#2)
    //#pre[3] (Vector getRecentPosts(String, String, String, String, int)): log != null
    //#pre[7] (Vector getRecentPosts(String, String, String, String, int)): this.__Tag == net/sourceforge/pebble/webservice/BloggerAPIHandler
    //#pre[8] (Vector getRecentPosts(String, String, String, String, int)): this.authenticationManager != null
    //#presumption(Vector getRecentPosts(String, String, String, String, int)): java.util.Iterator:next(...)@150 != null
    //#presumption(Vector getRecentPosts(String, String, String, String, int)): net.sourceforge.pebble.domain.Blog:getRecentBlogEntries(...)@145 != null
    //#post(Vector getRecentPosts(String, String, String, String, int)): return_value == &new Vector(getRecentPosts#2)
    //#post(Vector getRecentPosts(String, String, String, String, int)): new Vector(getRecentPosts#2) num objects == 1
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBlog
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.util.Hashtable
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.util.Hashtable:put
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getId
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getCategories
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.domain.Category:getId
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getDate
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getAuthor
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getId
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:formatPostId
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getTitle
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBody
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.xmlrpc.XmlRpcException
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getInstance
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getBlog
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.acegisecurity.providers.UsernamePasswordAuthenticationToken
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.acegisecurity.AuthenticationManager:authenticate
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.acegisecurity.context.SecurityContext:setAuthentication
    //#unanalyzed(Vector getRecentPosts(String, String, String, String, int)): Effects-of-calling:net.sourceforge.pebble.util.SecurityUtils:isUserAuthorisedForBlogAsBlogContributor
    //#test_vector(Vector getRecentPosts(String, String, String, String, int)): java.util.Iterator:hasNext(...)@149: {1}, {0}
        appkey + ", " +
        blogid + ", " +
        username + ", " +
        "********)");

    Blog blog = getBlogWithBlogId(blogid);
    authenticate(blog, username, password);

    Vector posts = new Vector();
    Collection coll = blog.getRecentBlogEntries(numberOfPosts);
    //#bloggerapihandler.java:145: Warning: method not available
    //#    -- call on List net.sourceforge.pebble.domain.Blog:getRecentBlogEntries(int)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Vector getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: List net.sourceforge.pebble.domain.Blog:getRecentBlogEntries(int)

    Iterator it = coll.iterator();
    BlogEntry entry;
    while (it.hasNext()) {
      entry = (BlogEntry)it.next();
      posts.add(adaptBlogEntry(entry));
    }

    return posts;
    //#bloggerapihandler.java:154: end of method: Vector net.sourceforge.pebble.webservice.BloggerAPIHandler.getRecentPosts(String, String, String, String, int)
  }

  /**
   * Gets an individual blog entry.
   *
   * @param appkey    the client application key (ignored)
   * @param postid    the ID of the blog (ignored)
   * @param username  the username used for logging in via XML-RPC
   * @param password  the password used for logging in via XML-RPC
   * @return  a Hashtable representing a blog entry
   * @throws XmlRpcException    if something goes wrong, including an authentication error
   */
  public Hashtable getPost(String appkey, String postid, String username, String password) throws XmlRpcException {
    log.debug("BloggerAPI.getPost(" +
    //#bloggerapihandler.java:168: method: Hashtable net.sourceforge.pebble.webservice.BloggerAPIHandler.getPost(String, String, String, String)
    //#bloggerapihandler.java:168: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable getPost(String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#input(Hashtable getPost(String, String, String, String)): __Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler]
    //#input(Hashtable getPost(String, String, String, String)): __Descendant_Table[others]
    //#input(Hashtable getPost(String, String, String, String)): __Dispatch_Table.authenticate(Lnet/sourceforge/pebble/domain/Blog;Ljava/lang/String;Ljava/lang/String;)V
    //#input(Hashtable getPost(String, String, String, String)): __Dispatch_Table.formatPostId(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(Hashtable getPost(String, String, String, String)): __Dispatch_Table.getBlogWithPostId(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog;
    //#input(Hashtable getPost(String, String, String, String)): __Dispatch_Table.getPostId(Ljava/lang/String;)Ljava/lang/String;
    //#input(Hashtable getPost(String, String, String, String)): appkey
    //#input(Hashtable getPost(String, String, String, String)): log
    //#input(Hashtable getPost(String, String, String, String)): password
    //#input(Hashtable getPost(String, String, String, String)): postid
    //#input(Hashtable getPost(String, String, String, String)): this
    //#input(Hashtable getPost(String, String, String, String)): this.__Tag
    //#input(Hashtable getPost(String, String, String, String)): this.authenticationManager
    //#input(Hashtable getPost(String, String, String, String)): username
    //#output(Hashtable getPost(String, String, String, String)): new Hashtable(adaptBlogEntry#1) num objects
    //#output(Hashtable getPost(String, String, String, String)): return_value
    //#new obj(Hashtable getPost(String, String, String, String)): new Hashtable(adaptBlogEntry#1)
    //#pre[2] (Hashtable getPost(String, String, String, String)): log != null
    //#pre[4] (Hashtable getPost(String, String, String, String)): postid != null
    //#pre[6] (Hashtable getPost(String, String, String, String)): this.__Tag == net/sourceforge/pebble/webservice/BloggerAPIHandler
    //#pre[7] (Hashtable getPost(String, String, String, String)): this.authenticationManager != null
    //#presumption(Hashtable getPost(String, String, String, String)): net.sourceforge.pebble.domain.BlogService:getBlogEntry(...)@180 != null
    //#post(Hashtable getPost(String, String, String, String)): return_value == &new Hashtable(adaptBlogEntry#1)
    //#post(Hashtable getPost(String, String, String, String)): new Hashtable(adaptBlogEntry#1) num objects == 1
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBlog
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:java.util.Hashtable
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:java.util.Hashtable:put
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getId
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getCategories
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.Category:getId
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getDate
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getAuthor
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getId
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:formatPostId
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getTitle
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBody
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:org.apache.xmlrpc.XmlRpcException
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:java.lang.String:lastIndexOf
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getInstance
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getBlog
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:org.acegisecurity.providers.UsernamePasswordAuthenticationToken
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:org.acegisecurity.AuthenticationManager:authenticate
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:org.acegisecurity.context.SecurityContext:setAuthentication
    //#unanalyzed(Hashtable getPost(String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.util.SecurityUtils:isUserAuthorisedForBlogAsBlogContributor
        appkey + ", " +
        postid + ", " +
        username + ", " +
        "********)");

    Blog blog = getBlogWithPostId(postid);
    postid = getPostId(postid);
    authenticate(blog, username, password);
    BlogService service = new BlogService();
    //#bloggerapihandler.java:177: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable getPost(String, String, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService()
    BlogEntry entry = null;
    //#bloggerapihandler.java:178: Warning: unused assignment
    //#    unused assignment into entry
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable getPost(String, String, String, String)
    //#    Attribs:  Uncertain
    try {
      entry = service.getBlogEntry(blog, postid);
    //#bloggerapihandler.java:180: Warning: method not available
    //#    -- call on BlogEntry net.sourceforge.pebble.domain.BlogService:getBlogEntry(Blog, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable getPost(String, String, String, String)
    //#    unanalyzed callee: BlogEntry net.sourceforge.pebble.domain.BlogService:getBlogEntry(Blog, String)
    } catch (BlogServiceException e) {
      throw new XmlRpcException(0, "Blog entry with ID of " + postid + " was not found.");
    }

    if (entry != null) {
      return adaptBlogEntry(entry);
    } else {
      throw new XmlRpcException(0, "Blog entry with ID of " + postid + " was not found.");
    //#bloggerapihandler.java:188: end of method: Hashtable net.sourceforge.pebble.webservice.BloggerAPIHandler.getPost(String, String, String, String)
    }
  }

  /**
   * Creates a new blog entry.
   *
   * @param appkey    the client application key (ignored)
   * @param blogid    the ID of the blog (ignored)
   * @param username  the username used for logging in via XML-RPC
   * @param password  the password used for logging in via XML-RPC
   * @param content   the content of the new blog entry
   * @param publish   a flag to indicate whether the entry should be published
   * @return  a String representing the ID of the new blog entry
   * @throws XmlRpcException    if something goes wrong, including an authentication error
   */
  public String newPost(String appkey, String blogid, String username, String password, String content, boolean publish) throws XmlRpcException {
    log.debug("BloggerAPI.newPost(" +
    //#bloggerapihandler.java:205: method: String net.sourceforge.pebble.webservice.BloggerAPIHandler.newPost(String, String, String, String, String, bool)
    //#bloggerapihandler.java:205: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#input(String newPost(String, String, String, String, String, bool)): __Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler]
    //#input(String newPost(String, String, String, String, String, bool)): __Descendant_Table[others]
    //#input(String newPost(String, String, String, String, String, bool)): __Dispatch_Table.authenticate(Lnet/sourceforge/pebble/domain/Blog;Ljava/lang/String;Ljava/lang/String;)V
    //#input(String newPost(String, String, String, String, String, bool)): __Dispatch_Table.formatPostId(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(String newPost(String, String, String, String, String, bool)): __Dispatch_Table.getBlogWithBlogId(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog;
    //#input(String newPost(String, String, String, String, String, bool)): appkey
    //#input(String newPost(String, String, String, String, String, bool)): blogid
    //#input(String newPost(String, String, String, String, String, bool)): content
    //#input(String newPost(String, String, String, String, String, bool)): log
    //#input(String newPost(String, String, String, String, String, bool)): password
    //#input(String newPost(String, String, String, String, String, bool)): publish
    //#input(String newPost(String, String, String, String, String, bool)): this
    //#input(String newPost(String, String, String, String, String, bool)): this.__Tag
    //#input(String newPost(String, String, String, String, String, bool)): this.authenticationManager
    //#input(String newPost(String, String, String, String, String, bool)): username
    //#output(String newPost(String, String, String, String, String, bool)): return_value
    //#pre[3] (String newPost(String, String, String, String, String, bool)): content != null
    //#pre[4] (String newPost(String, String, String, String, String, bool)): log != null
    //#pre[8] (String newPost(String, String, String, String, String, bool)): this.__Tag == net/sourceforge/pebble/webservice/BloggerAPIHandler
    //#pre[9] (String newPost(String, String, String, String, String, bool)): this.authenticationManager != null
    //#post(String newPost(String, String, String, String, String, bool)): return_value != null
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTitle
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setBody
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setAuthor
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:trim
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBlog
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCategory
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:addCategory
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.xmlrpc.XmlRpcException
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getInstance
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getBlog
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.providers.UsernamePasswordAuthenticationToken
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.AuthenticationManager:authenticate
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.context.SecurityContext:setAuthentication
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.util.SecurityUtils:isUserAuthorisedForBlogAsBlogContributor
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:valueOf
        appkey + ", " +
        blogid + ", " +
        username + ", " +
        "********, " +
        content + ", " +
        publish + ")");

    try {
      Blog blog = getBlogWithBlogId(blogid);
      authenticate(blog, username, password);

      BlogEntry blogEntry = new BlogEntry(blog);
    //#bloggerapihandler.java:217: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry(Blog)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry(Blog)
      populateEntry(blogEntry, content, username);
      blogEntry.setPublished(publish);
    //#bloggerapihandler.java:219: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setPublished(bool)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setPublished(bool)

      BlogService service = new BlogService();
    //#bloggerapihandler.java:221: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService()
      service.putBlogEntry(blogEntry);
    //#bloggerapihandler.java:222: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService:putBlogEntry(BlogEntry)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService:putBlogEntry(BlogEntry)

      return formatPostId(blogid, blogEntry.getId());
    //#bloggerapihandler.java:224: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogEntry:getId()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogEntry:getId()
    } catch (BlogServiceException be) {
      throw new XmlRpcException(0, be.getMessage());
    //#bloggerapihandler.java:226: end of method: String net.sourceforge.pebble.webservice.BloggerAPIHandler.newPost(String, String, String, String, String, bool)
    }
  }

  /**
   * Edits an existing blog entry.
   *
   * @param appkey    the client application key (ignored)
   * @param postid    the ID of the blog entry to be edited
   * @param username  the username used for logging in via XML-RPC
   * @param password  the password used for logging in via XML-RPC
   * @param content   the new content of the new blog entry
   * @param publish   a flag to indicate whether the entry should be published
   *                  (this is ignored as all new entries are published)
   * @return  a boolean true value to signal success
   * @throws XmlRpcException    if something goes wrong, including an authentication error
   */
  public boolean editPost(String appkey, String postid, String username, String password, String content, boolean publish) throws XmlRpcException {
    log.debug("BloggerAPI.editPost(" +
    //#bloggerapihandler.java:244: method: bool net.sourceforge.pebble.webservice.BloggerAPIHandler.editPost(String, String, String, String, String, bool)
    //#bloggerapihandler.java:244: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#input(bool editPost(String, String, String, String, String, bool)): __Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler]
    //#input(bool editPost(String, String, String, String, String, bool)): __Descendant_Table[others]
    //#input(bool editPost(String, String, String, String, String, bool)): __Dispatch_Table.authenticate(Lnet/sourceforge/pebble/domain/Blog;Ljava/lang/String;Ljava/lang/String;)V
    //#input(bool editPost(String, String, String, String, String, bool)): __Dispatch_Table.getBlogWithPostId(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog;
    //#input(bool editPost(String, String, String, String, String, bool)): __Dispatch_Table.getPostId(Ljava/lang/String;)Ljava/lang/String;
    //#input(bool editPost(String, String, String, String, String, bool)): appkey
    //#input(bool editPost(String, String, String, String, String, bool)): content
    //#input(bool editPost(String, String, String, String, String, bool)): log
    //#input(bool editPost(String, String, String, String, String, bool)): password
    //#input(bool editPost(String, String, String, String, String, bool)): postid
    //#input(bool editPost(String, String, String, String, String, bool)): publish
    //#input(bool editPost(String, String, String, String, String, bool)): this
    //#input(bool editPost(String, String, String, String, String, bool)): this.__Tag
    //#input(bool editPost(String, String, String, String, String, bool)): this.authenticationManager
    //#input(bool editPost(String, String, String, String, String, bool)): username
    //#output(bool editPost(String, String, String, String, String, bool)): return_value
    //#pre[2] (bool editPost(String, String, String, String, String, bool)): content != null
    //#pre[3] (bool editPost(String, String, String, String, String, bool)): log != null
    //#pre[5] (bool editPost(String, String, String, String, String, bool)): postid != null
    //#pre[8] (bool editPost(String, String, String, String, String, bool)): this.__Tag == net/sourceforge/pebble/webservice/BloggerAPIHandler
    //#pre[9] (bool editPost(String, String, String, String, String, bool)): this.authenticationManager != null
    //#presumption(bool editPost(String, String, String, String, String, bool)): net.sourceforge.pebble.domain.BlogService:getBlogEntry(...)@257 != null
    //#post(bool editPost(String, String, String, String, String, bool)): return_value == 1
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setTitle
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setBody
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:setAuthor
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:trim
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBlog
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCategory
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:addCategory
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.xmlrpc.XmlRpcException
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:lastIndexOf
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getInstance
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getBlog
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.providers.UsernamePasswordAuthenticationToken
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.AuthenticationManager:authenticate
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.context.SecurityContext:setAuthentication
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.util.SecurityUtils:isUserAuthorisedForBlogAsBlogContributor
        appkey + ", " +
        postid + ", " +
        username + ", " +
        "********, " +
        content + ", " +
        publish + ")");

    try {
      Blog blog = getBlogWithPostId(postid);
      postid = getPostId(postid);
      authenticate(blog, username, password);
      BlogService service = new BlogService();
    //#bloggerapihandler.java:256: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService()
      BlogEntry entry = service.getBlogEntry(blog, postid);
    //#bloggerapihandler.java:257: Warning: method not available
    //#    -- call on BlogEntry net.sourceforge.pebble.domain.BlogService:getBlogEntry(Blog, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: BlogEntry net.sourceforge.pebble.domain.BlogService:getBlogEntry(Blog, String)

      if (entry != null) {
        populateEntry(entry, content, username);
        entry.setPublished(publish);
    //#bloggerapihandler.java:261: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setPublished(bool)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setPublished(bool)
        service.putBlogEntry(entry);
    //#bloggerapihandler.java:262: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService:putBlogEntry(BlogEntry)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService:putBlogEntry(BlogEntry)
      } else {
        throw new XmlRpcException(0, "Blog entry with ID of " + postid + " was not found.");
      }

      return true;
    } catch (BlogServiceException be) {
      throw new XmlRpcException(0, be.getMessage());
    //#bloggerapihandler.java:269: end of method: bool net.sourceforge.pebble.webservice.BloggerAPIHandler.editPost(String, String, String, String, String, bool)
    }
  }

  /**
   * Deletes an existing blog entry.
   *
   * @param appkey    the client application key (ignored)
   * @param postid    the ID of the blog entry to be edited
   * @param username  the username used for logging in via XML-RPC
   * @param password  the password used for logging in via XML-RPC
   * @param publish   a flag to indicate whether the entry should be published
   *                  (this is ignored)
   * @return  a boolean true value to signal success
   * @throws XmlRpcException    if something goes wrong, including an authentication error
   */
  public boolean deletePost(String appkey, String postid, String username, String password, boolean publish) throws XmlRpcException {
    log.debug("BloggerAPI.deletePost(" +
    //#bloggerapihandler.java:286: method: bool net.sourceforge.pebble.webservice.BloggerAPIHandler.deletePost(String, String, String, String, bool)
    //#bloggerapihandler.java:286: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#input(bool deletePost(String, String, String, String, bool)): __Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler]
    //#input(bool deletePost(String, String, String, String, bool)): __Descendant_Table[others]
    //#input(bool deletePost(String, String, String, String, bool)): __Dispatch_Table.authenticate(Lnet/sourceforge/pebble/domain/Blog;Ljava/lang/String;Ljava/lang/String;)V
    //#input(bool deletePost(String, String, String, String, bool)): __Dispatch_Table.getBlogWithPostId(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog;
    //#input(bool deletePost(String, String, String, String, bool)): __Dispatch_Table.getPostId(Ljava/lang/String;)Ljava/lang/String;
    //#input(bool deletePost(String, String, String, String, bool)): appkey
    //#input(bool deletePost(String, String, String, String, bool)): log
    //#input(bool deletePost(String, String, String, String, bool)): password
    //#input(bool deletePost(String, String, String, String, bool)): postid
    //#input(bool deletePost(String, String, String, String, bool)): publish
    //#input(bool deletePost(String, String, String, String, bool)): this
    //#input(bool deletePost(String, String, String, String, bool)): this.__Tag
    //#input(bool deletePost(String, String, String, String, bool)): this.authenticationManager
    //#input(bool deletePost(String, String, String, String, bool)): username
    //#output(bool deletePost(String, String, String, String, bool)): return_value
    //#pre[2] (bool deletePost(String, String, String, String, bool)): log != null
    //#pre[4] (bool deletePost(String, String, String, String, bool)): postid != null
    //#pre[7] (bool deletePost(String, String, String, String, bool)): this.__Tag == net/sourceforge/pebble/webservice/BloggerAPIHandler
    //#pre[8] (bool deletePost(String, String, String, String, bool)): this.authenticationManager != null
    //#presumption(bool deletePost(String, String, String, String, bool)): net.sourceforge.pebble.domain.BlogService:getBlogEntry(...)@298 != null
    //#post(bool deletePost(String, String, String, String, bool)): return_value == 1
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.xmlrpc.XmlRpcException
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:java.lang.String:lastIndexOf
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getInstance
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getBlog
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.providers.UsernamePasswordAuthenticationToken
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.AuthenticationManager:authenticate
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.acegisecurity.context.SecurityContext:setAuthentication
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:net.sourceforge.pebble.util.SecurityUtils:isUserAuthorisedForBlogAsBlogContributor
        appkey + ", " +
        postid + ", " +
        username + ", " +
        "********, " +
        publish + ")");

    try {
      Blog blog = getBlogWithPostId(postid);
      postid = getPostId(postid);
      authenticate(blog, username, password);
      BlogService service = new BlogService();
    //#bloggerapihandler.java:297: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService()
      BlogEntry blogEntry = service.getBlogEntry(blog, postid);
    //#bloggerapihandler.java:298: Warning: method not available
    //#    -- call on BlogEntry net.sourceforge.pebble.domain.BlogService:getBlogEntry(Blog, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: BlogEntry net.sourceforge.pebble.domain.BlogService:getBlogEntry(Blog, String)

      if (blogEntry != null) {
        service.removeBlogEntry(blogEntry);
    //#bloggerapihandler.java:301: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService:removeBlogEntry(BlogEntry)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService:removeBlogEntry(BlogEntry)
        return true;
      } else {
        throw new XmlRpcException(0, "Blog entry with ID of " + postid + " was not found.");
      }
    } catch (BlogServiceException be) {
      throw new XmlRpcException(0, be.getMessage());
    //#bloggerapihandler.java:307: end of method: bool net.sourceforge.pebble.webservice.BloggerAPIHandler.deletePost(String, String, String, String, bool)
    }
  }

  /**
   * Helper method to adapt a blog entry into an XML-RPC compatible struct.
   * Since the Blogger API doesn't support titles, the title is wrapped in
   * &lt;title&gt;&lt;/title&gt; tags.
   *
   * @param entry   the BlogEntry to adapt
   * @return  a Hashtable representing the major properties of the entry
   */
  private Hashtable adaptBlogEntry(BlogEntry entry) {
    Hashtable post = new Hashtable();
    //#bloggerapihandler.java:320: method: Hashtable net.sourceforge.pebble.webservice.BloggerAPIHandler.adaptBlogEntry(BlogEntry)
    //#input(Hashtable adaptBlogEntry(BlogEntry)): __Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler]
    //#input(Hashtable adaptBlogEntry(BlogEntry)): __Descendant_Table[others]
    //#input(Hashtable adaptBlogEntry(BlogEntry)): __Dispatch_Table.formatPostId(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(Hashtable adaptBlogEntry(BlogEntry)): entry
    //#input(Hashtable adaptBlogEntry(BlogEntry)): this
    //#input(Hashtable adaptBlogEntry(BlogEntry)): this.__Tag
    //#output(Hashtable adaptBlogEntry(BlogEntry)): new Hashtable(adaptBlogEntry#1) num objects
    //#output(Hashtable adaptBlogEntry(BlogEntry)): return_value
    //#new obj(Hashtable adaptBlogEntry(BlogEntry)): new Hashtable(adaptBlogEntry#1)
    //#pre[1] (Hashtable adaptBlogEntry(BlogEntry)): entry != null
    //#pre[3] (Hashtable adaptBlogEntry(BlogEntry)): this.__Tag == net/sourceforge/pebble/webservice/BloggerAPIHandler
    //#presumption(Hashtable adaptBlogEntry(BlogEntry)): java.util.Iterator:next(...)@324 != null
    //#presumption(Hashtable adaptBlogEntry(BlogEntry)): net.sourceforge.pebble.domain.BlogEntry:getBlog(...)@332 != null
    //#presumption(Hashtable adaptBlogEntry(BlogEntry)): net.sourceforge.pebble.domain.BlogEntry:getCategories(...)@322 != null
    //#post(Hashtable adaptBlogEntry(BlogEntry)): return_value == &new Hashtable(adaptBlogEntry#1)
    //#post(Hashtable adaptBlogEntry(BlogEntry)): new Hashtable(adaptBlogEntry#1) num objects == 1
    //#unanalyzed(Hashtable adaptBlogEntry(BlogEntry)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(Hashtable adaptBlogEntry(BlogEntry)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(Hashtable adaptBlogEntry(BlogEntry)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(Hashtable adaptBlogEntry(BlogEntry)): Effects-of-calling:java.lang.String:valueOf
    //#test_vector(Hashtable adaptBlogEntry(BlogEntry)): java.util.Iterator:hasNext(...)@323: {1}, {0}
    //#test_vector(Hashtable adaptBlogEntry(BlogEntry)): java.util.Iterator:hasNext(...)@326: {0}, {1}
    String categories = "";
    Iterator it = entry.getCategories().iterator();
    //#bloggerapihandler.java:322: Warning: method not available
    //#    -- call on Set net.sourceforge.pebble.domain.BlogEntry:getCategories()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable adaptBlogEntry(BlogEntry)
    //#    unanalyzed callee: Set net.sourceforge.pebble.domain.BlogEntry:getCategories()
    while (it.hasNext()) {
      Category category = (Category)it.next();
      categories += category.getId();
    //#bloggerapihandler.java:325: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.Category:getId()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable adaptBlogEntry(BlogEntry)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.Category:getId()
      if (it.hasNext()) {
        categories += ",";
      }
    }
    post.put(DATE_CREATED, entry.getDate());
    //#bloggerapihandler.java:330: Warning: method not available
    //#    -- call on Date net.sourceforge.pebble.domain.BlogEntry:getDate()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable adaptBlogEntry(BlogEntry)
    //#    unanalyzed callee: Date net.sourceforge.pebble.domain.BlogEntry:getDate()
    post.put(USER_ID, entry.getAuthor());
    //#bloggerapihandler.java:331: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogEntry:getAuthor()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable adaptBlogEntry(BlogEntry)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogEntry:getAuthor()
    post.put(POST_ID, formatPostId(entry.getBlog().getId(), entry.getId()));
    //#bloggerapihandler.java:332: Warning: method not available
    //#    -- call on Blog net.sourceforge.pebble.domain.BlogEntry:getBlog()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable adaptBlogEntry(BlogEntry)
    //#    unanalyzed callee: Blog net.sourceforge.pebble.domain.BlogEntry:getBlog()
    //#bloggerapihandler.java:332: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.Blog:getId()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable adaptBlogEntry(BlogEntry)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.Blog:getId()
    //#bloggerapihandler.java:332: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogEntry:getId()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable adaptBlogEntry(BlogEntry)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogEntry:getId()
    post.put(CONTENT, TITLE_START_DELIMITER + entry.getTitle() + TITLE_END_DELIMITER
    //#bloggerapihandler.java:333: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogEntry:getTitle()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable adaptBlogEntry(BlogEntry)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogEntry:getTitle()
        + CATEGORY_START_DELIMITER + categories + CATEGORY_END_DELIMITER + entry.getBody());
    //#bloggerapihandler.java:334: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogEntry:getBody()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: Hashtable adaptBlogEntry(BlogEntry)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogEntry:getBody()

    return post;
    //#bloggerapihandler.java:336: end of method: Hashtable net.sourceforge.pebble.webservice.BloggerAPIHandler.adaptBlogEntry(BlogEntry)
  }

  /**
   * Populates a given BlogEntry.
   *
   * @param entry     the BlogEntry to populate
   * @param content   the content (including title)
   * @param username  the author
   */
  private void populateEntry(BlogEntry entry, String content, String username) {
    String title = "";
    //#bloggerapihandler.java:347: method: void net.sourceforge.pebble.webservice.BloggerAPIHandler.populateEntry(BlogEntry, String, String)
    //#input(void populateEntry(BlogEntry, String, String)): content
    //#input(void populateEntry(BlogEntry, String, String)): entry
    //#input(void populateEntry(BlogEntry, String, String)): username
    //#pre[1] (void populateEntry(BlogEntry, String, String)): content != null
    //#pre[2] (void populateEntry(BlogEntry, String, String)): entry != null
    //#presumption(void populateEntry(BlogEntry, String, String)): categories.length@371 <= 4_294_967_295
    //#presumption(void populateEntry(BlogEntry, String, String)): categories[i]@371 != null
    //#presumption(void populateEntry(BlogEntry, String, String)): net.sourceforge.pebble.domain.BlogEntry:getBlog(...)@373 != null
    //#test_vector(void populateEntry(BlogEntry, String, String)): java.lang.String:equals(...)@370: {1}, {0}
    //#test_vector(void populateEntry(BlogEntry, String, String)): java.lang.String:indexOf(...)@350: {-2_147_483_648..-1}, {0..4_294_967_295}
    //#test_vector(void populateEntry(BlogEntry, String, String)): java.lang.String:indexOf(...)@358: {-2_147_483_648..-1}, {0..4_294_967_295}
    //#test_vector(void populateEntry(BlogEntry, String, String)): net.sourceforge.pebble.domain.Blog:getCategory(...)@373: Addr_Set{null}, Inverse{null}
    String category = "";

    if (content.indexOf(TITLE_START_DELIMITER) > -1 && content.indexOf(TITLE_END_DELIMITER) > -1) {
      content = content.substring(TITLE_START_DELIMITER.length());
      int index = content.indexOf(TITLE_END_DELIMITER);
      title = content.substring(0, index);
      content = content.substring(index);
      content = content.substring(TITLE_END_DELIMITER.length());
    }

    if (content.indexOf(CATEGORY_START_DELIMITER) > -1 && content.indexOf(CATEGORY_END_DELIMITER) > -1) {
      content = content.substring(CATEGORY_START_DELIMITER.length());
      int index = content.indexOf(CATEGORY_END_DELIMITER);
      category = content.substring(0, index);
      content = content.substring(index);
      content = content.substring(CATEGORY_END_DELIMITER.length());
    }

    entry.setTitle(title);
    //#bloggerapihandler.java:366: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setTitle(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: void populateEntry(BlogEntry, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setTitle(String)
    entry.setBody(content);
    //#bloggerapihandler.java:367: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setBody(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: void populateEntry(BlogEntry, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setBody(String)
    entry.setAuthor(username);
    //#bloggerapihandler.java:368: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:setAuthor(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: void populateEntry(BlogEntry, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:setAuthor(String)

    if (category != null && !category.trim().equals("")) {
    //#bloggerapihandler.java:370: Warning: test always goes same way
    //#    test predetermined because category != null
    //#    severity: LOW
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: void populateEntry(BlogEntry, String, String)
    //#    from bb: bb_7
    //#    live edge: bb_7-->bb_8
    //#    tested vn: category == null
    //#    tested vn values: {0}
      String[] categories = category.split(",");
      for (int i = 0; i < categories.length; i++) {
        Category c = entry.getBlog().getCategory(categories[i].trim());
    //#bloggerapihandler.java:373: Warning: method not available
    //#    -- call on Blog net.sourceforge.pebble.domain.BlogEntry:getBlog()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: void populateEntry(BlogEntry, String, String)
    //#    unanalyzed callee: Blog net.sourceforge.pebble.domain.BlogEntry:getBlog()
    //#bloggerapihandler.java:373: Warning: method not available
    //#    -- call on Category net.sourceforge.pebble.domain.Blog:getCategory(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: void populateEntry(BlogEntry, String, String)
    //#    unanalyzed callee: Category net.sourceforge.pebble.domain.Blog:getCategory(String)
         if (c != null) {
           entry.addCategory(c);
    //#bloggerapihandler.java:375: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:addCategory(Category)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: void populateEntry(BlogEntry, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:addCategory(Category)
         }
      }
    }
  }
    //#bloggerapihandler.java:379: end of method: void net.sourceforge.pebble.webservice.BloggerAPIHandler.populateEntry(BlogEntry, String, String)

  /**
   * Gets the specified template type for a blog - not supported by Pebble.
   *
   * @param appkey    the client application key (ignored)
   * @param blogid    the ID of the blog
   * @param username  the username used for logging in via XML-RPC
   * @param password  the password used for logging in via XML-RPC
   * @param templateType  the type of template to retrieve
   * @return  the text of the specified template
   * @throws XmlRpcException
   */
  public String getTemplate(String appkey, String blogid, String username, String password, String templateType) throws XmlRpcException {
    log.debug("BloggerAPI.getTemplate(" +
    //#bloggerapihandler.java:393: method: String net.sourceforge.pebble.webservice.BloggerAPIHandler.getTemplate(String, String, String, String, String)
    //#bloggerapihandler.java:393: ?use of default init
    //#    init'ed(log)
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    basic block: Entry_BB_1
    //#    assertion: init'ed(log)
    //#    VN: log
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
    //#bloggerapihandler.java:393: ?null dereference
    //#    log != null
    //#    severity: MEDIUM
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    basic block: Entry_BB_1
    //#    assertion: log != null
    //#    VN: log
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#bloggerapihandler.java:393: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#bloggerapihandler.java:393: ?check always fails: String getTemplate(String, String, String, String, String) always ends with an exception
    //#input(String getTemplate(String, String, String, String, String)): appkey
    //#input(String getTemplate(String, String, String, String, String)): blogid
    //#input(String getTemplate(String, String, String, String, String)): templateType
    //#input(String getTemplate(String, String, String, String, String)): username
    //#output(String getTemplate(String, String, String, String, String)): return_value
        appkey + ", " +
        blogid + ", " +
        username + ", " +
        "********, " +
        templateType + ")");

    throw new XmlRpcException(0, "getTemplate is not supported by Pebble.");
    //#bloggerapihandler.java:400: Warning: method not available
    //#    -- call on void org.apache.xmlrpc.XmlRpcException(int, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.xmlrpc.XmlRpcException(int, String)
    //#bloggerapihandler.java:400: end of method: String net.sourceforge.pebble.webservice.BloggerAPIHandler.getTemplate(String, String, String, String, String)
  }

  /**
   * Sets the specified template type for a blog - not supported by Pebble.
   *
   * @param appkey    the client application key (ignored)
   * @param blogid    the ID of the blog
   * @param username  the username used for logging in via XML-RPC
   * @param password  the password used for logging in via XML-RPC
   * @param template  the new text of the template
   * @param templateType  the type of template to retrieve
   * @return  true if setting the template was successful, false otherwise
   * @throws XmlRpcException
   */
  public boolean setTemplate(String appkey, String blogid, String username, String password, String template, String templateType) throws XmlRpcException {
    log.debug("BloggerAPI.setTemplate(" +
    //#bloggerapihandler.java:416: method: bool net.sourceforge.pebble.webservice.BloggerAPIHandler.setTemplate(String, String, String, String, String, String)
    //#bloggerapihandler.java:416: ?use of default init
    //#    init'ed(log)
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    basic block: Entry_BB_1
    //#    assertion: init'ed(log)
    //#    VN: log
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
    //#bloggerapihandler.java:416: ?null dereference
    //#    log != null
    //#    severity: MEDIUM
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    basic block: Entry_BB_1
    //#    assertion: log != null
    //#    VN: log
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#bloggerapihandler.java:416: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#bloggerapihandler.java:416: ?check always fails: bool setTemplate(String, String, String, String, String, String) always ends with an exception
    //#input(bool setTemplate(String, String, String, String, String, String)): appkey
    //#input(bool setTemplate(String, String, String, String, String, String)): blogid
    //#input(bool setTemplate(String, String, String, String, String, String)): template
    //#input(bool setTemplate(String, String, String, String, String, String)): templateType
    //#input(bool setTemplate(String, String, String, String, String, String)): username
    //#output(bool setTemplate(String, String, String, String, String, String)): return_value
        appkey + ", " +
        blogid + ", " +
        username + ", " +
        "********, " +
        template + ", " +
        templateType + ")");

    throw new XmlRpcException(0, "setTemplate is not supported by Pebble.");
    //#bloggerapihandler.java:424: Warning: method not available
    //#    -- call on void org.apache.xmlrpc.XmlRpcException(int, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.xmlrpc.XmlRpcException(int, String)
    //#bloggerapihandler.java:424: end of method: bool net.sourceforge.pebble.webservice.BloggerAPIHandler.setTemplate(String, String, String, String, String, String)
  }

  /**
   * Adds a category to a blog entry - this isn't a standard Blogger API method.
   *
   * @param appkey    the client application key (ignored)
   * @param postid    the ID of the blog entry to be edited
   * @param username  the username used for logging in via XML-RPC
   * @param password  the password used for logging in via XML-RPC
   * @param category  the category ID
   * @return  a boolean true value to signal success
   * @throws XmlRpcException    if something goes wrong, including an authentication error
   */
  public boolean addCategory(String appkey, String postid, String username, String password, String category) throws XmlRpcException {
    log.debug("BloggerAPI.addCategory(" +
    //#bloggerapihandler.java:439: method: bool net.sourceforge.pebble.webservice.BloggerAPIHandler.addCategory(String, String, String, String, String)
    //#bloggerapihandler.java:439: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool addCategory(String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#input(bool addCategory(String, String, String, String, String)): __Descendant_Table[net/sourceforge/pebble/webservice/BloggerAPIHandler]
    //#input(bool addCategory(String, String, String, String, String)): __Descendant_Table[others]
    //#input(bool addCategory(String, String, String, String, String)): __Dispatch_Table.authenticate(Lnet/sourceforge/pebble/domain/Blog;Ljava/lang/String;Ljava/lang/String;)V
    //#input(bool addCategory(String, String, String, String, String)): __Dispatch_Table.getBlogWithPostId(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog;
    //#input(bool addCategory(String, String, String, String, String)): __Dispatch_Table.getPostId(Ljava/lang/String;)Ljava/lang/String;
    //#input(bool addCategory(String, String, String, String, String)): appkey
    //#input(bool addCategory(String, String, String, String, String)): category
    //#input(bool addCategory(String, String, String, String, String)): log
    //#input(bool addCategory(String, String, String, String, String)): password
    //#input(bool addCategory(String, String, String, String, String)): postid
    //#input(bool addCategory(String, String, String, String, String)): this
    //#input(bool addCategory(String, String, String, String, String)): this.__Tag
    //#input(bool addCategory(String, String, String, String, String)): this.authenticationManager
    //#input(bool addCategory(String, String, String, String, String)): username
    //#output(bool addCategory(String, String, String, String, String)): return_value
    //#pre[3] (bool addCategory(String, String, String, String, String)): log != null
    //#pre[5] (bool addCategory(String, String, String, String, String)): postid != null
    //#pre[7] (bool addCategory(String, String, String, String, String)): this.__Tag == net/sourceforge/pebble/webservice/BloggerAPIHandler
    //#pre[8] (bool addCategory(String, String, String, String, String)): this.authenticationManager != null
    //#presumption(bool addCategory(String, String, String, String, String)): net.sourceforge.pebble.domain.BlogEntry:getBlog(...)@454 != null
    //#presumption(bool addCategory(String, String, String, String, String)): net.sourceforge.pebble.domain.BlogService:getBlogEntry(...)@451 != null
    //#post(bool addCategory(String, String, String, String, String)): init'ed(return_value)
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:org.apache.xmlrpc.XmlRpcException
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:java.lang.String:lastIndexOf
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getInstance
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.domain.BlogManager:getBlog
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:org.acegisecurity.providers.UsernamePasswordAuthenticationToken
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:org.acegisecurity.AuthenticationManager:authenticate
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:org.acegisecurity.context.SecurityContextHolder:getContext
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:org.acegisecurity.context.SecurityContext:setAuthentication
    //#unanalyzed(bool addCategory(String, String, String, String, String)): Effects-of-calling:net.sourceforge.pebble.util.SecurityUtils:isUserAuthorisedForBlogAsBlogContributor
    //#test_vector(bool addCategory(String, String, String, String, String)): net.sourceforge.pebble.domain.Blog:getCategory(...)@454: Addr_Set{null}, Inverse{null}
        appkey + ", " +
        postid + ", " +
        username + ", " +
        "********, " +
        category + ")");

    try {
      Blog blog = getBlogWithPostId(postid);
      postid = getPostId(postid);
      authenticate(blog, username, password);
      BlogService service = new BlogService();
    //#bloggerapihandler.java:450: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool addCategory(String, String, String, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService()
      BlogEntry entry = service.getBlogEntry(blog, postid);
    //#bloggerapihandler.java:451: Warning: method not available
    //#    -- call on BlogEntry net.sourceforge.pebble.domain.BlogService:getBlogEntry(Blog, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool addCategory(String, String, String, String, String)
    //#    unanalyzed callee: BlogEntry net.sourceforge.pebble.domain.BlogService:getBlogEntry(Blog, String)

      if (entry != null) {
        Category c = entry.getBlog().getCategory(category);
    //#bloggerapihandler.java:454: Warning: method not available
    //#    -- call on Blog net.sourceforge.pebble.domain.BlogEntry:getBlog()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool addCategory(String, String, String, String, String)
    //#    unanalyzed callee: Blog net.sourceforge.pebble.domain.BlogEntry:getBlog()
    //#bloggerapihandler.java:454: Warning: method not available
    //#    -- call on Category net.sourceforge.pebble.domain.Blog:getCategory(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool addCategory(String, String, String, String, String)
    //#    unanalyzed callee: Category net.sourceforge.pebble.domain.Blog:getCategory(String)
        if (c != null) {
          entry.addCategory(c);
    //#bloggerapihandler.java:456: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:addCategory(Category)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool addCategory(String, String, String, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:addCategory(Category)
          service.putBlogEntry(entry);
    //#bloggerapihandler.java:457: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogService:putBlogEntry(BlogEntry)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.webservice.BloggerAPIHandler
    //#    method: bool addCategory(String, String, String, String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogService:putBlogEntry(BlogEntry)

          return true;
        }
      } else {
        throw new XmlRpcException(0, "Blog entry with ID of " + postid + " was not found.");
      }

      return false;
    } catch (BlogServiceException be) {
      throw new XmlRpcException(0, be.getMessage());
    //#bloggerapihandler.java:467: end of method: bool net.sourceforge.pebble.webservice.BloggerAPIHandler.addCategory(String, String, String, String, String)
    }
  }

}    //#bloggerapihandler.java:: end of class: net.sourceforge.pebble.webservice.BloggerAPIHandler
