//# 0 errors, 585 messages
//#
/*
    //#BloggerAPIHandler.java:1:1: class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
 * Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  The ASF licenses this file to You
 * under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.  For additional information regarding
 * copyright in this work, please see the NOTICE file in the top level
 * directory of this distribution.
 */

package org.apache.roller.weblogger.webservices.xmlrpc;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.Vector;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
import org.apache.roller.weblogger.business.Weblogger;
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.business.UserManager;
import org.apache.roller.weblogger.business.WeblogManager;
import org.apache.roller.weblogger.pojos.User;
import org.apache.roller.weblogger.pojos.WeblogEntry;
import org.apache.roller.weblogger.pojos.WeblogTemplate;
import org.apache.roller.weblogger.pojos.Weblog;
import org.apache.roller.weblogger.util.Utilities;
import org.apache.xmlrpc.XmlRpcException;

/**
 * Weblogger XML-RPC Handler for the Blogger v1 API.
 * 
 * Blogger API spec can be found at http://plant.blogger.com/api/index.html
 * See also http://xmlrpc.free-conversant.com/docs/bloggerAPI
 * 
 * @author David M Johnson
 */
public class BloggerAPIHandler extends BaseAPIHandler {
    
    static final long serialVersionUID = 2398898776655115019L;
    
    private static Log mLogger = LogFactory.getLog(BloggerAPIHandler.class);
    //#BloggerAPIHandler.java:61: method: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init
    //#BloggerAPIHandler.java:61: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler]
    //#output(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.deletePost(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Z
    //#output(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.editPost(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Z
    //#output(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.flushPageCache(Lorg/apache/roller/weblogger/pojos/Weblog;)V
    //#output(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.getRecentPosts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/Object;
    //#output(org.apache.roller.weblogger.webservices.xmlrpc.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(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.getUserInfo(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
    //#output(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.getUsersBlogs(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
    //#output(org.apache.roller.weblogger.webservices.xmlrpc.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(org.apache.roller.weblogger.webservices.xmlrpc.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(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#output(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.validateUser(Ljava/lang/String;Ljava/lang/String;)Z
    //#output(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): mLogger
    //#output(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.__Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler]
    //#post(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.__Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.deletePost(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Z == &deletePost
    //#post(org.apache.roller.weblogger.webservices.xmlrpc.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(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.flushPageCache(Lorg/apache/roller/weblogger/pojos/Weblog;)V == &org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.flushPageCache
    //#post(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.getRecentPosts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/Object; == &getRecentPosts
    //#post(org.apache.roller.weblogger.webservices.xmlrpc.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(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.getUserInfo(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object; == &getUserInfo
    //#post(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.getUsersBlogs(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object; == &getUsersBlogs
    //#post(org.apache.roller.weblogger.webservices.xmlrpc.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(org.apache.roller.weblogger.webservices.xmlrpc.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(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog; == &org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.validate
    //#post(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): __Dispatch_Table.validateUser(Ljava/lang/String;Ljava/lang/String;)Z == &org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.validateUser
    //#post(org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init): init'ed(mLogger)
    //#BloggerAPIHandler.java:61: end of method: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler__static_init
    
    public BloggerAPIHandler() {
        super();
    //#BloggerAPIHandler.java:64: method: void org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler()
    //#input(void org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler()): this
    }
    //#BloggerAPIHandler.java:65: end of method: void org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler()
    
    
    /**
     * Delete a Post
     *
     * @param appkey Unique identifier/passcode of the application sending the post
     * @param postid Unique identifier of the post to be changed
     * @param userid Login for a Blogger user who has permission to post to the blog
     * @param password Password for said username
     * @param publish Ignored
     * @throws XmlRpcException
     * @return
     */
    public boolean deletePost(String appkey, String postid, String userid,
            String password, boolean publish) throws Exception {
        
        mLogger.debug("deletePost() Called =====[ SUPPORTED ]=====");
    //#BloggerAPIHandler.java:82: method: bool org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.deletePost(String, String, String, String, bool)
    //#BloggerAPIHandler.java:82: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#BloggerAPIHandler.java:82: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    suspicious precondition index: [9]
    //#    Attribs:  Soft
    //#input(bool deletePost(String, String, String, String, bool)): "     Appkey: "._tainted
    //#input(bool deletePost(String, String, String, String, bool)): "     PostId: "._tainted
    //#input(bool deletePost(String, String, String, String, bool)): "     UserId: "._tainted
    //#input(bool deletePost(String, String, String, String, bool)): "ERROR in blogger.deletePost: "._tainted
    //#input(bool deletePost(String, String, String, String, bool)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler]
    //#input(bool deletePost(String, String, String, String, bool)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler]
    //#input(bool deletePost(String, String, String, String, bool)): __Descendant_Table[others]
    //#input(bool deletePost(String, String, String, String, bool)): __Dispatch_Table.flushPageCache(Lorg/apache/roller/weblogger/pojos/Weblog;)V
    //#input(bool deletePost(String, String, String, String, bool)): __Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(bool deletePost(String, String, String, String, bool)): appkey
    //#input(bool deletePost(String, String, String, String, bool)): appkey._tainted
    //#input(bool deletePost(String, String, String, String, bool)): mLogger
    //#input(bool deletePost(String, String, String, String, bool)): org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger
    //#input(bool deletePost(String, String, String, String, bool)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.flushPageCache(Lorg/apache/roller/weblogger/pojos/Weblog;)V
    //#input(bool deletePost(String, String, String, String, bool)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#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)): postid._tainted
    //#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)): userid
    //#input(bool deletePost(String, String, String, String, bool)): userid._tainted
    //#output(bool deletePost(String, String, String, String, bool)): return_value
    //#pre[3] (bool deletePost(String, String, String, String, bool)): mLogger != null
    //#pre[4] (bool deletePost(String, String, String, String, bool)): (soft) org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger != null
    //#pre[5] (bool deletePost(String, String, String, String, bool)): (soft) password != null
    //#pre[9] (bool deletePost(String, String, String, String, bool)): (soft) this.__Tag in {org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler, org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler}
    //#presumption(bool deletePost(String, String, String, String, bool)): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@88 != null
    //#presumption(bool deletePost(String, String, String, String, bool)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@87 != null
    //#presumption(bool deletePost(String, String, String, String, bool)): org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite(...)@94 != null
    //#post(bool deletePost(String, String, String, String, bool)): init'ed(return_value)
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUserManager
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getUserByUserName
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getEnabled
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.config.WebloggerConfig:getProperty
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:encodePassword
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getPassword
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.util.cache.CacheManager:invalidate
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getWebsiteByHandle
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEnabled
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEnableBloggerApi
    //#unanalyzed(bool deletePost(String, String, String, String, bool)): Effects-of-calling:org.apache.xmlrpc.XmlRpcException
    //#test_vector(bool deletePost(String, String, String, String, bool)): org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry(...)@89: Inverse{null}, Addr_Set{null}
        mLogger.debug("     Appkey: " + appkey);
    //#BloggerAPIHandler.java:83: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     PostId: " + postid);
    //#BloggerAPIHandler.java:84: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     UserId: " + userid);
    //#BloggerAPIHandler.java:85: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        
        Weblogger roller = WebloggerFactory.getWeblogger();
    //#BloggerAPIHandler.java:87: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
        WeblogManager weblogMgr = roller.getWeblogManager();
    //#BloggerAPIHandler.java:88: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
        WeblogEntry entry = weblogMgr.getWeblogEntry(postid);
    //#BloggerAPIHandler.java:89: Warning: method not available
    //#    -- call on WeblogEntry org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: WeblogEntry org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry(String)
        
        // Return false if entry not found
        if (entry == null) return false;
        
        validate(entry.getWebsite().getHandle(), userid, password);
    //#BloggerAPIHandler.java:94: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
    //#BloggerAPIHandler.java:94: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.Weblog:getHandle()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.Weblog:getHandle()
        
        try {
            // delete the entry
            weblogMgr.removeWeblogEntry(entry);
    //#BloggerAPIHandler.java:98: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.WeblogManager:removeWeblogEntry(WeblogEntry)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.WeblogManager:removeWeblogEntry(WeblogEntry)
            roller.flush();
    //#BloggerAPIHandler.java:99: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.Weblogger:flush()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.Weblogger:flush()
            
            // notify cache
            flushPageCache(entry.getWebsite());
    //#BloggerAPIHandler.java:102: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool deletePost(String, String, String, String, bool)
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
        } catch (Exception e) {
            String msg = "ERROR in blogger.deletePost: "+e.getClass().getName();
            mLogger.error(msg,e);
            throw new XmlRpcException(UNKNOWN_EXCEPTION, msg);
        }
        
        return true;
    //#BloggerAPIHandler.java:109: end of method: bool org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.deletePost(String, String, String, String, bool)
    }
    
    
    /**
     * Edits the main index template of a given blog. Weblogger only support
     * updating the main template, the default template of your weblog.
     * 
     * @param appkey Unique identifier/passcode of the application sending the post
     * @param blogid Unique identifier of the blog the post will be added to
     * @param userid Login for a Blogger user who has permission to post to the blog
     * @param password Password for said username
     * @param template The text for the new template (usually mostly HTML).
     * @param templateType Determines which of the blog's templates is to be set.
     * @return 
     * @throws XmlRpcException
     */
    public boolean setTemplate(String appkey, String blogid, String userid,
            String password, String templateData,
            String templateType) throws Exception {
        
        mLogger.debug("setTemplate() Called =====[ SUPPORTED ]=====");
    //#BloggerAPIHandler.java:130: method: bool org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.setTemplate(String, String, String, String, String, String)
    //#BloggerAPIHandler.java:130: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#BloggerAPIHandler.java:130: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    suspicious precondition index: [13]
    //#input(bool setTemplate(String, String, String, String, String, String)): "       Type: "._tainted
    //#input(bool setTemplate(String, String, String, String, String, String)): "     Appkey: "._tainted
    //#input(bool setTemplate(String, String, String, String, String, String)): "     BlogId: "._tainted
    //#input(bool setTemplate(String, String, String, String, String, String)): "     UserId: "._tainted
    //#input(bool setTemplate(String, String, String, String, String, String)): "   Template: "._tainted
    //#input(bool setTemplate(String, String, String, String, String, String)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler]
    //#input(bool setTemplate(String, String, String, String, String, String)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler]
    //#input(bool setTemplate(String, String, String, String, String, String)): __Descendant_Table[others]
    //#input(bool setTemplate(String, String, String, String, String, String)): __Dispatch_Table.flushPageCache(Lorg/apache/roller/weblogger/pojos/Weblog;)V
    //#input(bool setTemplate(String, String, String, String, String, String)): __Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(bool setTemplate(String, String, String, String, String, String)): appkey
    //#input(bool setTemplate(String, String, String, String, String, String)): appkey._tainted
    //#input(bool setTemplate(String, String, String, String, String, String)): blogid
    //#input(bool setTemplate(String, String, String, String, String, String)): blogid._tainted
    //#input(bool setTemplate(String, String, String, String, String, String)): mLogger
    //#input(bool setTemplate(String, String, String, String, String, String)): org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger
    //#input(bool setTemplate(String, String, String, String, String, String)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.flushPageCache(Lorg/apache/roller/weblogger/pojos/Weblog;)V
    //#input(bool setTemplate(String, String, String, String, String, String)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(bool setTemplate(String, String, String, String, String, String)): password
    //#input(bool setTemplate(String, String, String, String, String, String)): templateData
    //#input(bool setTemplate(String, String, String, String, String, String)): templateData._tainted
    //#input(bool setTemplate(String, String, String, String, String, String)): templateType
    //#input(bool setTemplate(String, String, String, String, String, String)): templateType._tainted
    //#input(bool setTemplate(String, String, String, String, String, String)): this
    //#input(bool setTemplate(String, String, String, String, String, String)): this.__Tag
    //#input(bool setTemplate(String, String, String, String, String, String)): userid
    //#input(bool setTemplate(String, String, String, String, String, String)): userid._tainted
    //#output(bool setTemplate(String, String, String, String, String, String)): return_value
    //#pre[5] (bool setTemplate(String, String, String, String, String, String)): mLogger != null
    //#pre[10] (bool setTemplate(String, String, String, String, String, String)): templateType != null
    //#pre[13] (bool setTemplate(String, String, String, String, String, String)): this.__Tag in {org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler, org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler}
    //#pre[6] (bool setTemplate(String, String, String, String, String, String)): (soft) org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger != null
    //#pre[7] (bool setTemplate(String, String, String, String, String, String)): (soft) password != null
    //#presumption(bool setTemplate(String, String, String, String, String, String)): java.lang.String:equals(...)@139 == 1
    //#presumption(bool setTemplate(String, String, String, String, String, String)): org.apache.roller.weblogger.business.UserManager:getPage(...)@148 != null
    //#presumption(bool setTemplate(String, String, String, String, String, String)): org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@146 != null
    //#presumption(bool setTemplate(String, String, String, String, String, String)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@145 != null
    //#post(bool setTemplate(String, String, String, String, String, String)): return_value == 1
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUserManager
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getUserByUserName
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getEnabled
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.config.WebloggerConfig:getProperty
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:encodePassword
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getPassword
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.util.cache.CacheManager:invalidate
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getWebsiteByHandle
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEnabled
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEnableBloggerApi
    //#unanalyzed(bool setTemplate(String, String, String, String, String, String)): Effects-of-calling:org.apache.xmlrpc.XmlRpcException
        mLogger.debug("     Appkey: " + appkey);
    //#BloggerAPIHandler.java:131: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     BlogId: " + blogid);
    //#BloggerAPIHandler.java:132: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     UserId: " + userid);
    //#BloggerAPIHandler.java:133: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("   Template: " + templateData);
    //#BloggerAPIHandler.java:134: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("       Type: " + templateType);
    //#BloggerAPIHandler.java:135: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        
        validate(blogid, userid, password);
        
        if (! templateType.equals("main")) {
            throw new XmlRpcException(
    //#BloggerAPIHandler.java:140: Warning: method not available
    //#    -- call on void org.apache.xmlrpc.XmlRpcException(int, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.xmlrpc.XmlRpcException(int, String)
                    UNKNOWN_EXCEPTION, "Roller only supports main template");
        }
        
        try {
            Weblogger roller = WebloggerFactory.getWeblogger();
    //#BloggerAPIHandler.java:145: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
            UserManager userMgr = roller.getUserManager();
    //#BloggerAPIHandler.java:146: Warning: method not available
    //#    -- call on UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
            
            WeblogTemplate page = userMgr.getPage(templateType);
    //#BloggerAPIHandler.java:148: Warning: method not available
    //#    -- call on WeblogTemplate org.apache.roller.weblogger.business.UserManager:getPage(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: WeblogTemplate org.apache.roller.weblogger.business.UserManager:getPage(String)
            page.setContents(templateData);
    //#BloggerAPIHandler.java:149: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogTemplate:setContents(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogTemplate:setContents(String)
            userMgr.savePage(page);
    //#BloggerAPIHandler.java:150: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.UserManager:savePage(WeblogTemplate)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.UserManager:savePage(WeblogTemplate)
            flushPageCache(page.getWebsite());
    //#BloggerAPIHandler.java:151: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.pojos.WeblogTemplate:getWebsite()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool setTemplate(String, String, String, String, String, String)
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.pojos.WeblogTemplate:getWebsite()
            
            return true;
        } catch (WebloggerException e) {
            String msg = "ERROR in BlooggerAPIHander.setTemplate";
            mLogger.error(msg,e);
            throw new XmlRpcException(UNKNOWN_EXCEPTION,msg);
    //#BloggerAPIHandler.java:157: end of method: bool org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.setTemplate(String, String, String, String, String, String)
        }
    }
    
    
    /**
     * Returns the main or archive index template of a given blog
     *
     * @param appkey Unique identifier/passcode of the application sending the post
     * @param blogid Unique identifier of the blog the post will be added to
     * @param userid Login for a Blogger user who has permission to post to the blog
     * @param password Password for said username
     * @param templateType Determines which of the blog's templates will be returned. Currently, either "main" or "archiveIndex"
     * @throws XmlRpcException
     * @return
     */
    public String getTemplate(String appkey, String blogid, String userid,
            String password, String templateType)
            throws Exception {
        
        mLogger.debug("getTemplate() Called =====[ SUPPORTED ]=====");
    //#BloggerAPIHandler.java:177: method: String org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.getTemplate(String, String, String, String, String)
    //#BloggerAPIHandler.java:177: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#BloggerAPIHandler.java:177: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    suspicious precondition index: [11]
    //#input(String getTemplate(String, String, String, String, String)): "       Type: "._tainted
    //#input(String getTemplate(String, String, String, String, String)): "     Appkey: "._tainted
    //#input(String getTemplate(String, String, String, String, String)): "     BlogId: "._tainted
    //#input(String getTemplate(String, String, String, String, String)): "     UserId: "._tainted
    //#input(String getTemplate(String, String, String, String, String)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler]
    //#input(String getTemplate(String, String, String, String, String)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler]
    //#input(String getTemplate(String, String, String, String, String)): __Descendant_Table[others]
    //#input(String getTemplate(String, String, String, String, String)): __Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(String getTemplate(String, String, String, String, String)): appkey
    //#input(String getTemplate(String, String, String, String, String)): appkey._tainted
    //#input(String getTemplate(String, String, String, String, String)): blogid
    //#input(String getTemplate(String, String, String, String, String)): blogid._tainted
    //#input(String getTemplate(String, String, String, String, String)): mLogger
    //#input(String getTemplate(String, String, String, String, String)): org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger
    //#input(String getTemplate(String, String, String, String, String)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(String getTemplate(String, String, String, String, String)): password
    //#input(String getTemplate(String, String, String, String, String)): templateType
    //#input(String getTemplate(String, String, String, String, String)): templateType._tainted
    //#input(String getTemplate(String, String, String, String, String)): this
    //#input(String getTemplate(String, String, String, String, String)): this.__Tag
    //#input(String getTemplate(String, String, String, String, String)): userid
    //#input(String getTemplate(String, String, String, String, String)): userid._tainted
    //#output(String getTemplate(String, String, String, String, String)): return_value
    //#pre[5] (String getTemplate(String, String, String, String, String)): mLogger != null
    //#pre[11] (String getTemplate(String, String, String, String, String)): this.__Tag in {org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler, org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler}
    //#pre[6] (String getTemplate(String, String, String, String, String)): (soft) org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger != null
    //#pre[7] (String getTemplate(String, String, String, String, String)): (soft) password != null
    //#presumption(String getTemplate(String, String, String, String, String)): org.apache.roller.weblogger.business.UserManager:getPage(...)@188 != null
    //#presumption(String getTemplate(String, String, String, String, String)): org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@187 != null
    //#presumption(String getTemplate(String, String, String, String, String)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@186 != null
    //#post(String getTemplate(String, String, String, String, String)): init'ed(return_value)
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUserManager
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getUserByUserName
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getEnabled
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.config.WebloggerConfig:getProperty
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:encodePassword
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getPassword
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getWebsiteByHandle
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEnabled
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEnableBloggerApi
    //#unanalyzed(String getTemplate(String, String, String, String, String)): Effects-of-calling:org.apache.xmlrpc.XmlRpcException
        mLogger.debug("     Appkey: " + appkey);
    //#BloggerAPIHandler.java:178: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     BlogId: " + blogid);
    //#BloggerAPIHandler.java:179: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     UserId: " + userid);
    //#BloggerAPIHandler.java:180: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("       Type: " + templateType);
    //#BloggerAPIHandler.java:181: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        
        validate(blogid, userid,password);
        
        try {
            Weblogger roller = WebloggerFactory.getWeblogger();
    //#BloggerAPIHandler.java:186: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
            UserManager userMgr = roller.getUserManager();
    //#BloggerAPIHandler.java:187: Warning: method not available
    //#    -- call on UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    unanalyzed callee: UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
            WeblogTemplate page = userMgr.getPage(templateType);
    //#BloggerAPIHandler.java:188: Warning: method not available
    //#    -- call on WeblogTemplate org.apache.roller.weblogger.business.UserManager:getPage(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    unanalyzed callee: WeblogTemplate org.apache.roller.weblogger.business.UserManager:getPage(String)
            
            if ( null == page ) {
                throw new XmlRpcException(UNKNOWN_EXCEPTION,"Template not found");
            } else {
                return page.getContents();
    //#BloggerAPIHandler.java:193: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogTemplate:getContents()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String getTemplate(String, String, String, String, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogTemplate:getContents()
            }
        } catch (Exception e) {
            String msg = "ERROR in BlooggerAPIHander.getTemplate";
            mLogger.error(msg,e);
            throw new XmlRpcException(UNKNOWN_EXCEPTION,msg);
    //#BloggerAPIHandler.java:198: end of method: String org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.getTemplate(String, String, String, String, String)
        }
    }
    
    
    /**
     * Authenticates a user and returns basic user info (name, email, userid, etc.)
     *
     * @param appkey Unique identifier/passcode of the application sending the post
     * @param userid Login for a Blogger user who has permission to post to the blog
     * @param password Password for said username
     * @throws XmlRpcException
     * @return
     */
    public Object getUserInfo(String appkey, String userid, String password)
    throws Exception {
        
        mLogger.debug("getUserInfo() Called =====[ SUPPORTED ]=====");
    //#BloggerAPIHandler.java:215: method: Object org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.getUserInfo(String, String, String)
    //#BloggerAPIHandler.java:215: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUserInfo(String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#BloggerAPIHandler.java:215: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUserInfo(String, String, String)
    //#    suspicious precondition index: [7]
    //#input(Object getUserInfo(String, String, String)): "     Appkey: "._tainted
    //#input(Object getUserInfo(String, String, String)): "     UserId: "._tainted
    //#input(Object getUserInfo(String, String, String)): " "._tainted
    //#input(Object getUserInfo(String, String, String)): ""._tainted
    //#input(Object getUserInfo(String, String, String)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler]
    //#input(Object getUserInfo(String, String, String)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler]
    //#input(Object getUserInfo(String, String, String)): __Descendant_Table[others]
    //#input(Object getUserInfo(String, String, String)): __Dispatch_Table.validateUser(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(Object getUserInfo(String, String, String)): appkey
    //#input(Object getUserInfo(String, String, String)): appkey._tainted
    //#input(Object getUserInfo(String, String, String)): mLogger
    //#input(Object getUserInfo(String, String, String)): org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger
    //#input(Object getUserInfo(String, String, String)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.validateUser(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(Object getUserInfo(String, String, String)): password
    //#input(Object getUserInfo(String, String, String)): this
    //#input(Object getUserInfo(String, String, String)): this.__Tag
    //#input(Object getUserInfo(String, String, String)): userid
    //#input(Object getUserInfo(String, String, String)): userid._tainted
    //#output(Object getUserInfo(String, String, String)): new Hashtable(getUserInfo#6) num objects
    //#output(Object getUserInfo(String, String, String)): return_value
    //#new obj(Object getUserInfo(String, String, String)): new Hashtable(getUserInfo#6)
    //#pre[3] (Object getUserInfo(String, String, String)): mLogger != null
    //#pre[7] (Object getUserInfo(String, String, String)): this.__Tag in {org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler, org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler}
    //#pre[4] (Object getUserInfo(String, String, String)): (soft) org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger != null
    //#presumption(Object getUserInfo(String, String, String)): org.apache.roller.weblogger.business.UserManager:getUserByUserName(...)@224 != null
    //#presumption(Object getUserInfo(String, String, String)): org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@223 != null
    //#presumption(Object getUserInfo(String, String, String)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@222 != null
    //#post(Object getUserInfo(String, String, String)): return_value == &new Hashtable(getUserInfo#6)
    //#post(Object getUserInfo(String, String, String)): new Hashtable(getUserInfo#6) num objects == 1
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUserManager
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getUserByUserName
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getEnabled
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.config.WebloggerConfig:getProperty
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:encodePassword
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getPassword
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(Object getUserInfo(String, String, String)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#test_vector(Object getUserInfo(String, String, String)): java.lang.String:equals(...)@235: {1}, {0}
    //#test_vector(Object getUserInfo(String, String, String)): java.util.StringTokenizer:hasMoreTokens(...)@230: {0}, {1}
    //#test_vector(Object getUserInfo(String, String, String)): java.util.StringTokenizer:hasMoreTokens(...)@234: {0}, {1}
        mLogger.debug("     Appkey: " + appkey);
    //#BloggerAPIHandler.java:216: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUserInfo(String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     UserId: " + userid);
    //#BloggerAPIHandler.java:217: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUserInfo(String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        
        validateUser(userid, password);
        
        try {
            Weblogger roller = WebloggerFactory.getWeblogger();
    //#BloggerAPIHandler.java:222: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUserInfo(String, String, String)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
            UserManager userMgr = roller.getUserManager();
    //#BloggerAPIHandler.java:223: Warning: method not available
    //#    -- call on UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUserInfo(String, String, String)
    //#    unanalyzed callee: UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
            User user = userMgr.getUserByUserName(userid);
    //#BloggerAPIHandler.java:224: Warning: method not available
    //#    -- call on User org.apache.roller.weblogger.business.UserManager:getUserByUserName(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUserInfo(String, String, String)
    //#    unanalyzed callee: User org.apache.roller.weblogger.business.UserManager:getUserByUserName(String)
            
            // parses full name into two strings, firstname and lastname
            String firstname = "", lastname = "";
            StringTokenizer toker = new StringTokenizer(user.getFullName());
    //#BloggerAPIHandler.java:228: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.User:getFullName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUserInfo(String, String, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.User:getFullName()
            
            if (toker.hasMoreTokens()) {
                firstname = toker.nextToken();
            }
            
            while (toker.hasMoreTokens()) {
                if ( !lastname.equals("") ) {
                    lastname += " ";
                }
                lastname += toker.nextToken();
            }

            // TODO: Should screen name be renamed nickname and used here?
            // populates user information to return as a result
            Hashtable result = new Hashtable();
            result.put("nickname", user.getUserName());
    //#BloggerAPIHandler.java:244: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.User:getUserName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUserInfo(String, String, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.User:getUserName()
            result.put("userid", user.getUserName());
    //#BloggerAPIHandler.java:245: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.User:getUserName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUserInfo(String, String, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.User:getUserName()
            result.put("email", "");
            result.put("lastname", lastname);
            result.put("firstname", firstname);
            
            return result;
        } catch (WebloggerException e) {
            String msg = "ERROR in BlooggerAPIHander.getInfo";
            mLogger.error(msg,e);
            throw new XmlRpcException(UNKNOWN_EXCEPTION,msg);
    //#BloggerAPIHandler.java:254: end of method: Object org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.getUserInfo(String, String, String)
        }
    }
    
    
    /**
     * Returns information on all the blogs a given user is a member of
     *
     * @param appkey Unique identifier/passcode of the application sending the post
     * @param userid Login for a Blogger user who has permission to post to the blog
     * @param password Password for said username
     * @throws XmlRpcException
     * @return
     */
    public Object getUsersBlogs(String appkey, String userid, String password)
    throws Exception {
        
        mLogger.debug("getUsersBlogs() Called ===[ SUPPORTED ]=======");
    //#BloggerAPIHandler.java:271: method: Object org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.getUsersBlogs(String, String, String)
    //#BloggerAPIHandler.java:271: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#BloggerAPIHandler.java:271: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    suspicious precondition index: [7]
    //#input(Object getUsersBlogs(String, String, String)): "     Appkey: "._tainted
    //#input(Object getUsersBlogs(String, String, String)): "     UserId: "._tainted
    //#input(Object getUsersBlogs(String, String, String)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler]
    //#input(Object getUsersBlogs(String, String, String)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler]
    //#input(Object getUsersBlogs(String, String, String)): __Descendant_Table[others]
    //#input(Object getUsersBlogs(String, String, String)): __Dispatch_Table.validateUser(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(Object getUsersBlogs(String, String, String)): appkey
    //#input(Object getUsersBlogs(String, String, String)): appkey._tainted
    //#input(Object getUsersBlogs(String, String, String)): java.lang.Boolean.TRUE
    //#input(Object getUsersBlogs(String, String, String)): mLogger
    //#input(Object getUsersBlogs(String, String, String)): org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger
    //#input(Object getUsersBlogs(String, String, String)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.validateUser(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(Object getUsersBlogs(String, String, String)): password
    //#input(Object getUsersBlogs(String, String, String)): this
    //#input(Object getUsersBlogs(String, String, String)): this.__Tag
    //#input(Object getUsersBlogs(String, String, String)): userid
    //#input(Object getUsersBlogs(String, String, String)): userid._tainted
    //#output(Object getUsersBlogs(String, String, String)): new Vector(getUsersBlogs#3) num objects
    //#output(Object getUsersBlogs(String, String, String)): return_value
    //#new obj(Object getUsersBlogs(String, String, String)): new Vector(getUsersBlogs#3)
    //#pre[3] (Object getUsersBlogs(String, String, String)): mLogger != null
    //#pre[7] (Object getUsersBlogs(String, String, String)): this.__Tag in {org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler, org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler}
    //#pre[4] (Object getUsersBlogs(String, String, String)): (soft) org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger != null
    //#presumption(Object getUsersBlogs(String, String, String)): java.lang.Boolean.TRUE != null
    //#presumption(Object getUsersBlogs(String, String, String)): java.util.Iterator:next(...)@287 != null
    //#presumption(Object getUsersBlogs(String, String, String)): org.apache.roller.weblogger.business.UserManager:getWebsites(...)@284 != null
    //#presumption(Object getUsersBlogs(String, String, String)): org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@280 != null
    //#presumption(Object getUsersBlogs(String, String, String)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@280 != null
    //#post(Object getUsersBlogs(String, String, String)): return_value == &new Vector(getUsersBlogs#3)
    //#post(Object getUsersBlogs(String, String, String)): new Vector(getUsersBlogs#3) num objects == 1
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUserManager
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getUserByUserName
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getEnabled
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.config.WebloggerConfig:getProperty
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:encodePassword
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getPassword
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(Object getUsersBlogs(String, String, String)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#test_vector(Object getUsersBlogs(String, String, String)): java.lang.Boolean:equals(...)@290: {0}, {1}
    //#test_vector(Object getUsersBlogs(String, String, String)): java.util.Iterator:hasNext(...)@286: {1}, {0}
        mLogger.debug("     Appkey: " + appkey);
    //#BloggerAPIHandler.java:272: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     UserId: " + userid);
    //#BloggerAPIHandler.java:273: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        
        Vector result = new Vector();
        if (validateUser(userid, password)) {
    //#BloggerAPIHandler.java:276: Warning: test always goes same way
    //#    test predetermined because validateUser(...) == 1
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    from bb: Entry_BB_1
    //#    live edge: Entry_BB_1-->bb_2
    //#    tested vn: validateUser(...)
    //#    tested vn values: {1}
            try {
                String contextUrl = WebloggerRuntimeConfig.getAbsoluteContextURL();
    //#BloggerAPIHandler.java:278: Warning: unused assignment
    //#    unused assignment into contextUrl
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#BloggerAPIHandler.java:278: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getAbsoluteContextURL()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getAbsoluteContextURL()
                
                UserManager umgr = WebloggerFactory.getWeblogger().getUserManager();
    //#BloggerAPIHandler.java:280: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#BloggerAPIHandler.java:280: Warning: method not available
    //#    -- call on UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
                User user = umgr.getUserByUserName(userid);
    //#BloggerAPIHandler.java:281: Warning: method not available
    //#    -- call on User org.apache.roller.weblogger.business.UserManager:getUserByUserName(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: User org.apache.roller.weblogger.business.UserManager:getUserByUserName(String)
                
                // get list of user's enabled websites
                List websites = umgr.getWebsites(user, Boolean.TRUE, null, null, null, 0, -1);
    //#BloggerAPIHandler.java:284: Warning: method not available
    //#    -- call on List org.apache.roller.weblogger.business.UserManager:getWebsites(User, Boolean, Boolean, Date, Date, int, int)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: List org.apache.roller.weblogger.business.UserManager:getWebsites(User, Boolean, Boolean, Date, Date, int, int)
                Iterator iter = websites.iterator();
                while (iter.hasNext()) {
                    Weblog website = (Weblog)iter.next();
                    
                    // only include weblog's that have client API support enabled
                    if (Boolean.TRUE.equals(website.getEnableBloggerApi())) {
    //#BloggerAPIHandler.java:290: Warning: method not available
    //#    -- call on Boolean org.apache.roller.weblogger.pojos.Weblog:getEnableBloggerApi()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: Boolean org.apache.roller.weblogger.pojos.Weblog:getEnableBloggerApi()
                        Hashtable blog = new Hashtable(3);
                        blog.put("url", website.getURL());
    //#BloggerAPIHandler.java:292: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.Weblog:getURL()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.Weblog:getURL()
                        blog.put("blogid", website.getHandle());
    //#BloggerAPIHandler.java:293: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.Weblog:getHandle()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.Weblog:getHandle()
                        blog.put("blogName", website.getName());
    //#BloggerAPIHandler.java:294: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.Weblog:getName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getUsersBlogs(String, String, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.Weblog:getName()
                        result.add(blog);
                    }
                }
            } catch (Exception e) {
                String msg = "ERROR in BlooggerAPIHander.getUsersBlogs";
                mLogger.error(msg,e);
                throw new XmlRpcException(UNKNOWN_EXCEPTION, msg);
            }
        }
        return result;
    //#BloggerAPIHandler.java:304: end of method: Object org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.getUsersBlogs(String, String, String)
    }
    
    
    /**
     * Edits a given post. Optionally, will publish the blog after making the edit
     *
     * @param appkey Unique identifier/passcode of the application sending the post
     * @param postid Unique identifier of the post to be changed
     * @param userid Login for a Blogger user who has permission to post to the blog
     * @param password Password for said username
     * @param content Contents of the post
     * @param publish If true, the blog will be published immediately after the post is made
     * @throws XmlRpcException
     * @return
     */
    public boolean editPost(String appkey, String postid, String userid,
            String password, String content, boolean publish)
            throws Exception {
        
        mLogger.debug("editPost() Called ========[ SUPPORTED ]=====");
    //#BloggerAPIHandler.java:324: method: bool org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.editPost(String, String, String, String, String, bool)
    //#BloggerAPIHandler.java:324: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#BloggerAPIHandler.java:324: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    suspicious precondition index: [12]
    //#input(bool editPost(String, String, String, String, String, bool)): "     Appkey: "._tainted
    //#input(bool editPost(String, String, String, String, String, bool)): "     Content:&#10; "._tainted
    //#input(bool editPost(String, String, String, String, String, bool)): "     PostId: "._tainted
    //#input(bool editPost(String, String, String, String, String, bool)): "     UserId: "._tainted
    //#input(bool editPost(String, String, String, String, String, bool)): "    Publish: "._tainted
    //#input(bool editPost(String, String, String, String, String, bool)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler]
    //#input(bool editPost(String, String, String, String, String, bool)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler]
    //#input(bool editPost(String, String, String, String, String, bool)): __Descendant_Table[others]
    //#input(bool editPost(String, String, String, String, String, bool)): __Dispatch_Table.flushPageCache(Lorg/apache/roller/weblogger/pojos/Weblog;)V
    //#input(bool editPost(String, String, String, String, String, bool)): __Dispatch_Table.validateUser(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(bool editPost(String, String, String, String, String, bool)): appkey
    //#input(bool editPost(String, String, String, String, String, bool)): appkey._tainted
    //#input(bool editPost(String, String, String, String, String, bool)): content
    //#input(bool editPost(String, String, String, String, String, bool)): content._tainted
    //#input(bool editPost(String, String, String, String, String, bool)): mLogger
    //#input(bool editPost(String, String, String, String, String, bool)): org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger
    //#input(bool editPost(String, String, String, String, String, bool)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.flushPageCache(Lorg/apache/roller/weblogger/pojos/Weblog;)V
    //#input(bool editPost(String, String, String, String, String, bool)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.validateUser(Ljava/lang/String;Ljava/lang/String;)Z
    //#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)): postid._tainted
    //#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)): userid
    //#input(bool editPost(String, String, String, String, String, bool)): userid._tainted
    //#output(bool editPost(String, String, String, String, String, bool)): return_value
    //#pre[5] (bool editPost(String, String, String, String, String, bool)): mLogger != null
    //#pre[12] (bool editPost(String, String, String, String, String, bool)): this.__Tag in {org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler, org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler}
    //#pre[6] (bool editPost(String, String, String, String, String, bool)): (soft) org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger != null
    //#presumption(bool editPost(String, String, String, String, String, bool)): java.lang.Boolean:valueOf(...)@340 != null
    //#presumption(bool editPost(String, String, String, String, String, bool)): org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry(...)@337 != null
    //#presumption(bool editPost(String, String, String, String, String, bool)): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@336 != null
    //#presumption(bool editPost(String, String, String, String, String, bool)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@335 != 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:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUserManager
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getUserByUserName
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getEnabled
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.config.WebloggerConfig:getProperty
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:encodePassword
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getPassword
    //#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.Throwable:__curr_excep_obj
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(bool editPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.util.cache.CacheManager:invalidate
    //#test_vector(bool editPost(String, String, String, String, String, bool)): java.lang.Boolean:booleanValue(...)@340: {0}, {1}
        mLogger.debug("     Appkey: " + appkey);
    //#BloggerAPIHandler.java:325: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     PostId: " + postid);
    //#BloggerAPIHandler.java:326: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     UserId: " + userid);
    //#BloggerAPIHandler.java:327: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("    Publish: " + publish);
    //#BloggerAPIHandler.java:328: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     Content:\n " + content);
    //#BloggerAPIHandler.java:329: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        
        if (validateUser(userid, password)) {
    //#BloggerAPIHandler.java:331: Warning: test always goes same way
    //#    test predetermined because validateUser(...) == 1
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    from bb: Entry_BB_1
    //#    live edge: Entry_BB_1-->bb_2
    //#    tested vn: validateUser(...)
    //#    tested vn values: {1}
            try {
                Timestamp current = new Timestamp(System.currentTimeMillis());
                
                Weblogger roller = WebloggerFactory.getWeblogger();
    //#BloggerAPIHandler.java:335: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
                WeblogManager weblogMgr = roller.getWeblogManager();
    //#BloggerAPIHandler.java:336: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
                WeblogEntry entry = weblogMgr.getWeblogEntry(postid);
    //#BloggerAPIHandler.java:337: Warning: method not available
    //#    -- call on WeblogEntry org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: WeblogEntry org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry(String)
                entry.setText(content);
    //#BloggerAPIHandler.java:338: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setText(String)
                entry.setUpdateTime(current);
    //#BloggerAPIHandler.java:339: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setUpdateTime(Timestamp)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setUpdateTime(Timestamp)
                if (Boolean.valueOf(publish).booleanValue()) {
                    entry.setStatus(WeblogEntry.PUBLISHED);
    //#BloggerAPIHandler.java:341: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setStatus(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setStatus(String)
                } else {
                    entry.setStatus(WeblogEntry.DRAFT);
    //#BloggerAPIHandler.java:343: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setStatus(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setStatus(String)
                }
                
                // save the entry
                weblogMgr.saveWeblogEntry(entry);
    //#BloggerAPIHandler.java:347: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.WeblogManager:saveWeblogEntry(WeblogEntry)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.WeblogManager:saveWeblogEntry(WeblogEntry)
                roller.flush();
    //#BloggerAPIHandler.java:348: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.Weblogger:flush()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.Weblogger:flush()
                
                // notify cache
                flushPageCache(entry.getWebsite());
    //#BloggerAPIHandler.java:351: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
                
                return true;
            } catch (Exception e) {
                String msg = "ERROR in BlooggerAPIHander.editPost";
                mLogger.error(msg,e);
                throw new XmlRpcException(UNKNOWN_EXCEPTION, msg);
            }
        }
        return false;
    //#BloggerAPIHandler.java:360: Warning: dead code
    //#    dead code here because validateUser(...) == 1
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: bool editPost(String, String, String, String, String, bool)
    //#    dead bb: bb_8
    //#BloggerAPIHandler.java:360: end of method: bool org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.editPost(String, String, String, String, String, bool)
    }
    
    
    /**
     * Makes a new post to a designated blog. Optionally, will publish the blog after making the post
     *
     * @param appkey Unique identifier/passcode of the application sending the post
     * @param blogid Unique identifier of the blog the post will be added to
     * @param userid Login for a Blogger user who has permission to post to the blog
     * @param password Password for said username
     * @param content Contents of the post
     * @param publish If true, the blog will be published immediately after the post is made
     * @throws XmlRpcException
     * @return
     */
    public String newPost(String appkey, String blogid, String userid,
            String password, String content, boolean publish)
            throws Exception {
        
        mLogger.debug("newPost() Called ===========[ SUPPORTED ]=====");
    //#BloggerAPIHandler.java:380: method: String org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.newPost(String, String, String, String, String, bool)
    //#BloggerAPIHandler.java:380: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#BloggerAPIHandler.java:380: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    suspicious precondition index: [12]
    //#input(String newPost(String, String, String, String, String, bool)): "     Appkey: "._tainted
    //#input(String newPost(String, String, String, String, String, bool)): "     BlogId: "._tainted
    //#input(String newPost(String, String, String, String, String, bool)): "     UserId: "._tainted
    //#input(String newPost(String, String, String, String, String, bool)): "    Content:&#10; "._tainted
    //#input(String newPost(String, String, String, String, String, bool)): "    Publish: "._tainted
    //#input(String newPost(String, String, String, String, String, bool)): ""._tainted
    //#input(String newPost(String, String, String, String, String, bool)): "<.title>"._tainted
    //#input(String newPost(String, String, String, String, String, bool)): "<title>"._tainted
    //#input(String newPost(String, String, String, String, String, bool)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler]
    //#input(String newPost(String, String, String, String, String, bool)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler]
    //#input(String newPost(String, String, String, String, String, bool)): __Descendant_Table[others]
    //#input(String newPost(String, String, String, String, String, bool)): __Dispatch_Table.flushPageCache(Lorg/apache/roller/weblogger/pojos/Weblog;)V
    //#input(String newPost(String, String, String, String, String, bool)): __Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(String newPost(String, String, String, String, String, bool)): appkey
    //#input(String newPost(String, String, String, String, String, bool)): appkey._tainted
    //#input(String newPost(String, String, String, String, String, bool)): blogid
    //#input(String newPost(String, String, String, String, String, bool)): blogid._tainted
    //#input(String newPost(String, String, String, String, String, bool)): content
    //#input(String newPost(String, String, String, String, String, bool)): content._tainted
    //#input(String newPost(String, String, String, String, String, bool)): mLogger
    //#input(String newPost(String, String, String, String, String, bool)): org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger
    //#input(String newPost(String, String, String, String, String, bool)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.flushPageCache(Lorg/apache/roller/weblogger/pojos/Weblog;)V
    //#input(String newPost(String, String, String, String, String, bool)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#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)): userid
    //#input(String newPost(String, String, String, String, String, bool)): userid._tainted
    //#output(String newPost(String, String, String, String, String, bool)): return_value
    //#pre[5] (String newPost(String, String, String, String, String, bool)): content != null
    //#pre[7] (String newPost(String, String, String, String, String, bool)): mLogger != null
    //#pre[12] (String newPost(String, String, String, String, String, bool)): this.__Tag in {org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler, org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler}
    //#pre[8] (String newPost(String, String, String, String, String, bool)): (soft) org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger != null
    //#pre[9] (String newPost(String, String, String, String, String, bool)): (soft) password != null
    //#presumption(String newPost(String, String, String, String, String, bool)): java.lang.Boolean:valueOf(...)@419 != null
    //#presumption(String newPost(String, String, String, String, String, bool)): java.lang.String:indexOf(...)@393 <= 4_294_967_288
    //#presumption(String newPost(String, String, String, String, String, bool)): org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@414 != null
    //#presumption(String newPost(String, String, String, String, String, bool)): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@404 != null
    //#presumption(String newPost(String, String, String, String, String, bool)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@403 != null
    //#post(String newPost(String, String, String, String, String, bool)): init'ed(return_value)
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUserManager
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getUserByUserName
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getEnabled
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.config.WebloggerConfig:getProperty
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:encodePassword
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getPassword
    //#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.Throwable:__curr_excep_obj
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.util.cache.CacheManager:invalidate
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getWebsiteByHandle
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEnabled
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEnableBloggerApi
    //#unanalyzed(String newPost(String, String, String, String, String, bool)): Effects-of-calling:org.apache.xmlrpc.XmlRpcException
    //#test_vector(String newPost(String, String, String, String, String, bool)): java.lang.Boolean:booleanValue(...)@419: {0}, {1}
    //#test_vector(String newPost(String, String, String, String, String, bool)): java.lang.String:indexOf(...)@392: {-1}, {-2_147_483_648..-2, 0..4_294_967_295}
    //#test_vector(String newPost(String, String, String, String, String, bool)): org.apache.commons.lang.StringUtils:isEmpty(...)@398: {0}, {1}
        mLogger.debug("     Appkey: " + appkey);
    //#BloggerAPIHandler.java:381: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     BlogId: " + blogid);
    //#BloggerAPIHandler.java:382: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     UserId: " + userid);
    //#BloggerAPIHandler.java:383: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("    Publish: " + publish);
    //#BloggerAPIHandler.java:384: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("    Content:\n " + content);
    //#BloggerAPIHandler.java:385: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        
        Weblog website = validate(blogid, userid, password);
        
        // extract the title from the content
        String title = "";
        
        if (content.indexOf("<title>") != -1) {
            title =
                    content.substring(content.indexOf("<title>") + 7,
                    content.indexOf("</title>"));
            content = StringUtils.replace(content, "<title>"+title+"</title>", "");
    //#BloggerAPIHandler.java:396: Warning: method not available
    //#    -- call on String org.apache.commons.lang.StringUtils:replace(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: String org.apache.commons.lang.StringUtils:replace(String, String, String)
        }
        if (StringUtils.isEmpty(title)) {
    //#BloggerAPIHandler.java:398: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isEmpty(String)
            title = Utilities.truncateNicely(content, 15, 15, "...");
    //#BloggerAPIHandler.java:399: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.util.Utilities:truncateNicely(String, int, int, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: String org.apache.roller.weblogger.util.Utilities:truncateNicely(String, int, int, String)
        }
        
        try {
            Weblogger roller = WebloggerFactory.getWeblogger();
    //#BloggerAPIHandler.java:403: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
            WeblogManager weblogMgr = roller.getWeblogManager();
    //#BloggerAPIHandler.java:404: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
            
            Timestamp current = new Timestamp(System.currentTimeMillis());
            
            WeblogEntry entry = new WeblogEntry();
    //#BloggerAPIHandler.java:408: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry()
            entry.setTitle(title);
    //#BloggerAPIHandler.java:409: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setTitle(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setTitle(String)
            entry.setText(content);
    //#BloggerAPIHandler.java:410: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setText(String)
            entry.setLocale(website.getLocale());
    //#BloggerAPIHandler.java:411: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.Weblog:getLocale()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.Weblog:getLocale()
    //#BloggerAPIHandler.java:411: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setLocale(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setLocale(String)
            entry.setPubTime(current);
    //#BloggerAPIHandler.java:412: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setPubTime(Timestamp)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setPubTime(Timestamp)
            entry.setUpdateTime(current);
    //#BloggerAPIHandler.java:413: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setUpdateTime(Timestamp)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setUpdateTime(Timestamp)
            User user = roller.getUserManager().getUserByUserName(userid);
    //#BloggerAPIHandler.java:414: Warning: method not available
    //#    -- call on UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
    //#BloggerAPIHandler.java:414: Warning: method not available
    //#    -- call on User org.apache.roller.weblogger.business.UserManager:getUserByUserName(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: User org.apache.roller.weblogger.business.UserManager:getUserByUserName(String)
            entry.setCreator(user);
    //#BloggerAPIHandler.java:415: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setCreator(User)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setCreator(User)
            entry.setWebsite(website);
    //#BloggerAPIHandler.java:416: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setWebsite(Weblog)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setWebsite(Weblog)
            entry.setCategory(website.getBloggerCategory());
    //#BloggerAPIHandler.java:417: Warning: method not available
    //#    -- call on WeblogCategory org.apache.roller.weblogger.pojos.Weblog:getBloggerCategory()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: WeblogCategory org.apache.roller.weblogger.pojos.Weblog:getBloggerCategory()
    //#BloggerAPIHandler.java:417: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setCategory(WeblogCategory)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setCategory(WeblogCategory)
            entry.setCommentDays(new Integer(website.getDefaultCommentDays()));
    //#BloggerAPIHandler.java:418: Warning: method not available
    //#    -- call on int org.apache.roller.weblogger.pojos.Weblog:getDefaultCommentDays()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: int org.apache.roller.weblogger.pojos.Weblog:getDefaultCommentDays()
    //#BloggerAPIHandler.java:418: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setCommentDays(Integer)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setCommentDays(Integer)
            if (Boolean.valueOf(publish).booleanValue()) {
                entry.setStatus(WeblogEntry.PUBLISHED);
    //#BloggerAPIHandler.java:420: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setStatus(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setStatus(String)
            } else {
                entry.setStatus(WeblogEntry.DRAFT);
    //#BloggerAPIHandler.java:422: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntry:setStatus(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntry:setStatus(String)
            }
            
            // save the entry
            weblogMgr.saveWeblogEntry(entry);
    //#BloggerAPIHandler.java:426: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.WeblogManager:saveWeblogEntry(WeblogEntry)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.WeblogManager:saveWeblogEntry(WeblogEntry)
            roller.flush();
    //#BloggerAPIHandler.java:427: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.Weblogger:flush()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.Weblogger:flush()
            
            // notify cache
            flushPageCache(entry.getWebsite());
    //#BloggerAPIHandler.java:430: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
            
            return entry.getId();
    //#BloggerAPIHandler.java:432: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntry:getId()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: String newPost(String, String, String, String, String, bool)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntry:getId()
        } catch (Exception e) {
            String msg = "ERROR in BlooggerAPIHander.newPost";
            mLogger.error(msg,e);
            throw new XmlRpcException(UNKNOWN_EXCEPTION, msg);
    //#BloggerAPIHandler.java:436: end of method: String org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.newPost(String, String, String, String, String, bool)
        }
    }
    
    
    /**
     * This method was added to the Blogger 1.0 API via an Email from Evan
     * Williams to the Yahoo Group bloggerDev, see the email message for details -
     * http://groups.yahoo.com/group/bloggerDev/message/225
     *
     * @param appkey Unique identifier/passcode of the application sending the post
     * @param blogid Unique identifier of the blog the post will be added to
     * @param userid Login for a Blogger user who has permission to post to the blog
     * @param password Password for said username
     * @param numposts Number of Posts to Retrieve
     * @throws XmlRpcException
     * @return Vector of Hashtables, each containing dateCreated, userid, postid, content
     */
    public Object getRecentPosts(String appkey, String blogid, String userid,
            String password, int numposts)
            throws Exception {
        
        mLogger.debug("getRecentPosts() Called ===========[ SUPPORTED ]=====");
    //#BloggerAPIHandler.java:458: method: Object org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.getRecentPosts(String, String, String, String, int)
    //#BloggerAPIHandler.java:458: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#BloggerAPIHandler.java:458: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    suspicious precondition index: [10]
    //#input(Object getRecentPosts(String, String, String, String, int)): "     Appkey: "._tainted
    //#input(Object getRecentPosts(String, String, String, String, int)): "     BlogId: "._tainted
    //#input(Object getRecentPosts(String, String, String, String, int)): "     Number: "._tainted
    //#input(Object getRecentPosts(String, String, String, String, int)): "     UserId: "._tainted
    //#input(Object getRecentPosts(String, String, String, String, int)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler]
    //#input(Object getRecentPosts(String, String, String, String, int)): __Descendant_Table[org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler]
    //#input(Object getRecentPosts(String, String, String, String, int)): __Descendant_Table[others]
    //#input(Object getRecentPosts(String, String, String, String, int)): __Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(Object getRecentPosts(String, String, String, String, int)): appkey
    //#input(Object getRecentPosts(String, String, String, String, int)): appkey._tainted
    //#input(Object getRecentPosts(String, String, String, String, int)): blogid
    //#input(Object getRecentPosts(String, String, String, String, int)): blogid._tainted
    //#input(Object getRecentPosts(String, String, String, String, int)): mLogger
    //#input(Object getRecentPosts(String, String, String, String, int)): numposts
    //#input(Object getRecentPosts(String, String, String, String, int)): org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger
    //#input(Object getRecentPosts(String, String, String, String, int)): org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler.__Dispatch_Table.validate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(Object getRecentPosts(String, String, String, String, int)): password
    //#input(Object getRecentPosts(String, String, String, String, int)): this
    //#input(Object getRecentPosts(String, String, String, String, int)): this.__Tag
    //#input(Object getRecentPosts(String, String, String, String, int)): userid
    //#input(Object getRecentPosts(String, String, String, String, int)): userid._tainted
    //#output(Object getRecentPosts(String, String, String, String, int)): new Vector(getRecentPosts#5) num objects
    //#output(Object getRecentPosts(String, String, String, String, int)): return_value
    //#new obj(Object getRecentPosts(String, String, String, String, int)): new Vector(getRecentPosts#5)
    //#pre[5] (Object getRecentPosts(String, String, String, String, int)): mLogger != null
    //#pre[10] (Object getRecentPosts(String, String, String, String, int)): this.__Tag in {org/apache/roller/weblogger/webservices/xmlrpc/BloggerAPIHandler, org/apache/roller/weblogger/webservices/xmlrpc/MetaWeblogAPIHandler}
    //#pre[7] (Object getRecentPosts(String, String, String, String, int)): (soft) org/apache/roller/weblogger/webservices/xmlrpc/BaseAPIHandler.mLogger != null
    //#pre[8] (Object getRecentPosts(String, String, String, String, int)): (soft) password != null
    //#presumption(Object getRecentPosts(String, String, String, String, int)): java.util.ArrayList:iterator(...)@483 != null
    //#presumption(Object getRecentPosts(String, String, String, String, int)): java.util.Iterator:next(...)@482 != null
    //#presumption(Object getRecentPosts(String, String, String, String, int)): java.util.Iterator:next(...)@485 != null
    //#presumption(Object getRecentPosts(String, String, String, String, int)): java.util.Map:values(...)@480 != null
    //#presumption(Object getRecentPosts(String, String, String, String, int)): org.apache.roller.weblogger.business.WeblogManager:getWeblogEntryObjectMap(...)@472 != null
    //#presumption(Object getRecentPosts(String, String, String, String, int)): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@470 != null
    //#presumption(Object getRecentPosts(String, String, String, String, int)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@469 != null
    //#post(Object getRecentPosts(String, String, String, String, int)): return_value == &new Vector(getRecentPosts#5)
    //#post(Object getRecentPosts(String, String, String, String, int)): new Vector(getRecentPosts#5) num objects == 1
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUserManager
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getUserByUserName
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getEnabled
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.roller.weblogger.config.WebloggerConfig:getProperty
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:encodePassword
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getPassword
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.roller.weblogger.business.UserManager:getWebsiteByHandle
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEnabled
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEnableBloggerApi
    //#unanalyzed(Object getRecentPosts(String, String, String, String, int)): Effects-of-calling:org.apache.xmlrpc.XmlRpcException
    //#test_vector(Object getRecentPosts(String, String, String, String, int)): java.util.Iterator:hasNext(...)@481: {0}, {1}
    //#test_vector(Object getRecentPosts(String, String, String, String, int)): java.util.Iterator:hasNext(...)@484: {0}, {1}
    //#test_vector(Object getRecentPosts(String, String, String, String, int)): org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime(...)@487: Addr_Set{null}, Inverse{null}
        mLogger.debug("     Appkey: " + appkey);
    //#BloggerAPIHandler.java:459: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     BlogId: " + blogid);
    //#BloggerAPIHandler.java:460: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     UserId: " + userid);
    //#BloggerAPIHandler.java:461: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        mLogger.debug("     Number: " + numposts);
    //#BloggerAPIHandler.java:462: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        
        Weblog website = validate(blogid, userid,password);
        
        try {
            Vector results = new Vector();
            
            Weblogger roller = WebloggerFactory.getWeblogger();
    //#BloggerAPIHandler.java:469: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
            WeblogManager weblogMgr = roller.getWeblogManager();
    //#BloggerAPIHandler.java:470: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
            if (website != null) {
    //#BloggerAPIHandler.java:471: Warning: test always goes same way
    //#    test predetermined because website != null
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    from bb: bb_2
    //#    live edge: bb_2-->bb_3
    //#    tested vn: validate(...) == null
    //#    tested vn values: {0}
                Map entries = weblogMgr.getWeblogEntryObjectMap(
    //#BloggerAPIHandler.java:472: Warning: method not available
    //#    -- call on Map org.apache.roller.weblogger.business.WeblogManager:getWeblogEntryObjectMap(Weblog, Date, Date, String, List, String, String, int, int)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: Map org.apache.roller.weblogger.business.WeblogManager:getWeblogEntryObjectMap(Weblog, Date, Date, String, List, String, String, int, int)
                        website,                // website
                        null,                   // startDate
                        new Date(),             // endDate
                        null,                   // catName
                        null,                   // tags
                        null, null, 0, -1);
                
                Iterator iter = entries.values().iterator();
                while (iter.hasNext()) {
                    ArrayList list = (ArrayList) iter.next();
                    Iterator i = list.iterator();
                    while (i.hasNext()) {
                        WeblogEntry entry = (WeblogEntry) i.next();
                        Hashtable result = new Hashtable();
                        if (entry.getPubTime() != null) {
    //#BloggerAPIHandler.java:487: Warning: method not available
    //#    -- call on Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime()
                            result.put("dateCreated", entry.getPubTime());
    //#BloggerAPIHandler.java:488: Warning: method not available
    //#    -- call on Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime()
                        }
                        result.put("userid", userid);
                        result.put("postid", entry.getId());
    //#BloggerAPIHandler.java:491: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntry:getId()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntry:getId()
                        result.put("content", entry.getText());
    //#BloggerAPIHandler.java:492: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntry:getText()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
    //#    method: Object getRecentPosts(String, String, String, String, int)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntry:getText()
                        results.add(result);
                    }
                }
            }
            return results;
        } catch (Exception e) {
            String msg = "ERROR in BlooggerAPIHander.getRecentPosts";
            mLogger.error(msg,e);
            throw new XmlRpcException(UNKNOWN_EXCEPTION, msg);
    //#BloggerAPIHandler.java:501: end of method: Object org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler.getRecentPosts(String, String, String, String, int)
        }
    }
    
}
    //#BloggerAPIHandler.java:: end of class: org.apache.roller.weblogger.webservices.xmlrpc.BloggerAPIHandler
