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

import net.sourceforge.pebble.PebbleContext;
import net.sourceforge.pebble.util.UpgradeUtilities;
import net.sourceforge.pebble.comparator.BlogByLastModifiedDateComparator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.*;
import java.util.*;

/**
 * A singleton to manage the active blog.
 *
 * @author    Simon Brown
 */
public class BlogManager {

  /** the log used by this class */
  private static Log log = LogFactory.getLog(BlogManager.class);
    //#blogmanager.java:51: method: net.sourceforge.pebble.domain.BlogManager.net.sourceforge.pebble.domain.BlogManager__static_init
    //#blogmanager.java:51: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: net.sourceforge.pebble.domain.BlogManager__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.addBlog(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.addBlog(Lnet/sourceforge/pebble/domain/Blog;)V
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getBlog(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog;
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getBlogs()Ljava/util/Collection;
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getBlogsDirectory()Ljava/io/File;
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getMultiBlog()Lnet/sourceforge/pebble/domain/MultiBlog;
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getNumberOfBlogs()I
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getPublicBlogs()Ljava/util/List;
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.hasBlog(Ljava/lang/String;)Z
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.isMultiBlog()Z
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.reloadBlog(Lnet/sourceforge/pebble/domain/Blog;)V
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.removeAllBlogs()V
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.setMultiBlog(Z)V
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.startBlog(Ljava/lang/String;Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.startBlogs()V
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.stopBlog(Lnet/sourceforge/pebble/domain/Blog;)V
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.stopBlogs()V
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): instance
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): log
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): new BlogManager(BlogManager__static_init#1) num objects
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): instance.__Tag
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): instance.blogs
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): instance.multiBlog
    //#output(net.sourceforge.pebble.domain.BlogManager__static_init): new HashMap(BlogManager#1) num objects
    //#new obj(net.sourceforge.pebble.domain.BlogManager__static_init): new BlogManager(BlogManager__static_init#1)
    //#new obj(net.sourceforge.pebble.domain.BlogManager__static_init): new HashMap(BlogManager#1)
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Descendant_Table[net/sourceforge/pebble/domain/BlogManager] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.addBlog(Ljava/lang/String;)V == &addBlog
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.addBlog(Lnet/sourceforge/pebble/domain/Blog;)V == &addBlog
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog; == &getBlog
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getBlog(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog; == &getBlog
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getBlogs()Ljava/util/Collection; == &getBlogs
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getBlogsDirectory()Ljava/io/File; == &getBlogsDirectory
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getMultiBlog()Lnet/sourceforge/pebble/domain/MultiBlog; == &getMultiBlog
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getNumberOfBlogs()I == &getNumberOfBlogs
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.getPublicBlogs()Ljava/util/List; == &getPublicBlogs
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.hasBlog(Ljava/lang/String;)Z == &hasBlog
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.isMultiBlog()Z == &isMultiBlog
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.reloadBlog(Lnet/sourceforge/pebble/domain/Blog;)V == &reloadBlog
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.removeAllBlogs()V == &removeAllBlogs
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.setMultiBlog(Z)V == &setMultiBlog
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.startBlog(Ljava/lang/String;Ljava/lang/String;)V == &startBlog
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.startBlogs()V == &startBlogs
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.stopBlog(Lnet/sourceforge/pebble/domain/Blog;)V == &stopBlog
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): __Dispatch_Table.stopBlogs()V == &stopBlogs
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): instance == &new BlogManager(BlogManager__static_init#1)
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): init'ed(log)
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): new BlogManager(BlogManager__static_init#1) num objects == 1
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): new HashMap(BlogManager#1) num objects == 1
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): instance.blogs == &new HashMap(BlogManager#1)
    //#post(net.sourceforge.pebble.domain.BlogManager__static_init): instance.multiBlog == 0
    //#unanalyzed(net.sourceforge.pebble.domain.BlogManager__static_init): Effects-of-calling:java.util.HashMap

  /** the singleton instance of this class */
  private static BlogManager instance = new BlogManager();
    //#blogmanager.java:54: end of method: net.sourceforge.pebble.domain.BlogManager.net.sourceforge.pebble.domain.BlogManager__static_init

  private static final String THEMES_PATH = "themes";
  private static final String DEFAULT_BLOG = "default";

  /** the blogs that are currently being managed */
  private Map<String,Blog> blogs = new HashMap<String,Blog>();

  private boolean multiBlog = false;

  /**
   * Creates a new instance - private constructor for the singleton pattern.
   */
  private BlogManager() {
    //#blogmanager.java:67: method: void net.sourceforge.pebble.domain.BlogManager.net.sourceforge.pebble.domain.BlogManager()
    //#input(void net.sourceforge.pebble.domain.BlogManager()): this
    //#output(void net.sourceforge.pebble.domain.BlogManager()): new HashMap(BlogManager#1) num objects
    //#output(void net.sourceforge.pebble.domain.BlogManager()): this.blogs
    //#output(void net.sourceforge.pebble.domain.BlogManager()): this.multiBlog
    //#new obj(void net.sourceforge.pebble.domain.BlogManager()): new HashMap(BlogManager#1)
    //#post(void net.sourceforge.pebble.domain.BlogManager()): this.blogs == &new HashMap(BlogManager#1)
    //#post(void net.sourceforge.pebble.domain.BlogManager()): this.multiBlog == 0
    //#post(void net.sourceforge.pebble.domain.BlogManager()): new HashMap(BlogManager#1) num objects == 1
  }
    //#blogmanager.java:68: end of method: void net.sourceforge.pebble.domain.BlogManager.net.sourceforge.pebble.domain.BlogManager()

  /**
   * Gets the singleton instance of this class.
   *
   * @return    the singleton BlogManager instance
   */
  public static BlogManager getInstance() {
    return instance;
    //#blogmanager.java:76: method: BlogManager net.sourceforge.pebble.domain.BlogManager.getInstance()
    //#input(BlogManager getInstance()): instance
    //#output(BlogManager getInstance()): return_value
    //#pre[1] (BlogManager getInstance()): init'ed(instance)
    //#post(BlogManager getInstance()): return_value == instance
    //#post(BlogManager getInstance()): init'ed(return_value)
    //#blogmanager.java:76: end of method: BlogManager net.sourceforge.pebble.domain.BlogManager.getInstance()
  }

  /**
   * Gets the default blog.
   *
   * @return    the active Blog instance
   */
  public Blog getBlog() {
    return getBlog(DEFAULT_BLOG);
    //#blogmanager.java:85: method: Blog net.sourceforge.pebble.domain.BlogManager.getBlog()
    //#input(Blog getBlog()): __Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(Blog getBlog()): __Descendant_Table[others]
    //#input(Blog getBlog()): __Dispatch_Table.getBlog(Ljava/lang/String;)Lnet/sourceforge/pebble/domain/Blog;
    //#input(Blog getBlog()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(Blog getBlog()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(Blog getBlog()): this
    //#input(Blog getBlog()): this.__Tag
    //#input(Blog getBlog()): this.blogs
    //#output(Blog getBlog()): return_value
    //#pre[2] (Blog getBlog()): this.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#pre[3] (Blog getBlog()): this.blogs != null
    //#post(Blog getBlog()): init'ed(return_value)
    //#unanalyzed(Blog getBlog()): Effects-of-calling:java.util.Map:get
    //#blogmanager.java:85: end of method: Blog net.sourceforge.pebble.domain.BlogManager.getBlog()
  }

  /**
   * Gets a named blog. If running in single user mode then this method
   * returns the currently active blog. If running in multi-user mode,
   * this method returns the named blog from the overall composite
   * blog.
   *
   * @param id    the blog ID
   * @return  a Blog instance
   */
  public Blog getBlog(String id) {
    return blogs.get(id);
    //#blogmanager.java:98: method: Blog net.sourceforge.pebble.domain.BlogManager.getBlog(String)
    //#input(Blog getBlog(String)): id
    //#input(Blog getBlog(String)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(Blog getBlog(String)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(Blog getBlog(String)): this
    //#input(Blog getBlog(String)): this.blogs
    //#output(Blog getBlog(String)): return_value
    //#pre[3] (Blog getBlog(String)): this.blogs != null
    //#presumption(Blog getBlog(String)): java.util.Map:get(...).__Tag@98 == net/sourceforge/pebble/domain/Blog
    //#post(Blog getBlog(String)): init'ed(return_value)
    //#blogmanager.java:98: end of method: Blog net.sourceforge.pebble.domain.BlogManager.getBlog(String)
  }

  /**
   * Configures this instance to manage the blog(s) in the specified directory.
   */
  public void startBlogs() {
    File blogsDirectory = getBlogsDirectory();
    //#blogmanager.java:105: method: void net.sourceforge.pebble.domain.BlogManager.startBlogs()
    //#input(void startBlogs()): __Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(void startBlogs()): __Descendant_Table[others]
    //#input(void startBlogs()): __Dispatch_Table.isMultiBlog()Z
    //#input(void startBlogs()): log
    //#input(void startBlogs()): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(void startBlogs()): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(void startBlogs()): net/sourceforge/pebble/Configuration.__Dispatch_Table.getDataDirectory()Ljava/lang/String;
    //#input(void startBlogs()): this
    //#input(void startBlogs()): this.__Tag
    //#input(void startBlogs()): this.multiBlog
    //#pre[4] (void startBlogs()): this.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#pre[6] (void startBlogs()): init'ed(this.multiBlog)
    //#pre[1] (void startBlogs()): (soft) log != null
    //#presumption(void startBlogs()): Local_7[Local_5]@115 != null
    //#presumption(void startBlogs()): files.length@115 <= 4_294_967_295
    //#unanalyzed(void startBlogs()): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(void startBlogs()): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(void startBlogs()): Effects-of-calling:getDataDirectory
    //#unanalyzed(void startBlogs()): Effects-of-calling:java.io.File
    //#test_vector(void startBlogs()): this.multiBlog: {0}, {1}
    //#test_vector(void startBlogs()): java.io.File:exists(...)@108: {1}, {0}
    //#test_vector(void startBlogs()): java.io.File:isDirectory(...)@118: {0}, {1}
    //#test_vector(void startBlogs()): java.io.File:listFiles(...)@115: Addr_Set{null}, Inverse{null}
    File defaultBlog = new File(blogsDirectory, DEFAULT_BLOG);

    if (!blogsDirectory.exists()) {
      log.info("Pebble blog directory does not exist - creating");
    //#blogmanager.java:109: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:info(Object)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void startBlogs()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:info(Object)
      defaultBlog.mkdirs();
    }

    if (isMultiBlog()) {
      // find all directories and set them up as blogs
      File files[] = getBlogsDirectory().listFiles();
      if (files != null) {
        for (File file : files) {
          if (file.isDirectory()) {
            startBlog(file.getAbsolutePath(), file.getName());
    //#blogmanager.java:119: Warning: call too complex - analysis skipped
    //#    -- call on void startBlog(String, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void startBlogs()
    //#    unanalyzed callee: void startBlog(String, String)
          }
        }
      }
    } else {
      // start the default blog only
      startBlog(defaultBlog.getAbsolutePath(), DEFAULT_BLOG);      
    //#blogmanager.java:125: Warning: call too complex - analysis skipped
    //#    -- call on void startBlog(String, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void startBlogs()
    //#    unanalyzed callee: void startBlog(String, String)
    }
  }
    //#blogmanager.java:127: end of method: void net.sourceforge.pebble.domain.BlogManager.startBlogs()

  public void stopBlogs() {
    for (Blog blog : blogs.values()) {
    //#blogmanager.java:130: method: void net.sourceforge.pebble.domain.BlogManager.stopBlogs()
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[net/sourceforge/pebble/api/event/EventDispatcher]
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[net/sourceforge/pebble/event/DefaultEventDispatcher]
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[others]
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/EventDispatcher.__Dispatch_Table.fireBlogEvent(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/blog/BlogEvent.__Descendant_Table[net/sourceforge/pebble/api/event/blog/BlogEvent]
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/blog/BlogEvent.__Descendant_Table[others]
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.getType()I
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.isVetoed()Z
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[net/sourceforge/pebble/api/event/blog/BlogListener]
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator]
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[others]
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/blog/BlogListener.__Dispatch_Table.blogStarted(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void stopBlogs()): net/sourceforge/pebble/api/event/blog/BlogListener.__Dispatch_Table.blogStopped(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void stopBlogs()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void stopBlogs()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void stopBlogs()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void stopBlogs()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.stop()V
    //#input(void stopBlogs()): net/sourceforge/pebble/domain/Blog.log
    //#input(void stopBlogs()): net/sourceforge/pebble/domain/Theme.__Descendant_Table[net/sourceforge/pebble/domain/Theme]
    //#input(void stopBlogs()): net/sourceforge/pebble/domain/Theme.__Descendant_Table[others]
    //#input(void stopBlogs()): net/sourceforge/pebble/domain/Theme.__Dispatch_Table.backup()V
    //#input(void stopBlogs()): net/sourceforge/pebble/domain/Theme.__Dispatch_Table.getBackupThemeDirectory()Ljava/lang/String;
    //#input(void stopBlogs()): net/sourceforge/pebble/domain/Theme.log
    //#input(void stopBlogs()): net/sourceforge/pebble/event/DefaultEventDispatcher.__Descendant_Table[net/sourceforge/pebble/event/DefaultEventDispatcher]
    //#input(void stopBlogs()): net/sourceforge/pebble/event/DefaultEventDispatcher.__Descendant_Table[others]
    //#input(void stopBlogs()): net/sourceforge/pebble/event/DefaultEventDispatcher.__Dispatch_Table.fireBlogEvent(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void stopBlogs()): net/sourceforge/pebble/event/DefaultEventDispatcher.__Dispatch_Table.getEventListenerList()Lnet/sourceforge/pebble/event/EventListenerList;
    //#input(void stopBlogs()): net/sourceforge/pebble/event/EventListenerList.__Descendant_Table[net/sourceforge/pebble/event/EventListenerList]
    //#input(void stopBlogs()): net/sourceforge/pebble/event/EventListenerList.__Descendant_Table[others]
    //#input(void stopBlogs()): net/sourceforge/pebble/event/EventListenerList.__Dispatch_Table.getBlogListeners()Ljava/util/List;
    //#input(void stopBlogs()): net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator.__Dispatch_Table.blogStarted(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void stopBlogs()): net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator.__Dispatch_Table.blogStopped(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void stopBlogs()): this
    //#input(void stopBlogs()): this.blogs
    //#pre[3] (void stopBlogs()): this.blogs != null
    //#pre[1] (void stopBlogs()): (soft) net/sourceforge/pebble/domain/Theme.log != null
    //#presumption(void stopBlogs()): blog.editableTheme.__Tag@130 == net/sourceforge/pebble/domain/Theme
    //#presumption(void stopBlogs()): blog.editableTheme.blog@130 != null
    //#presumption(void stopBlogs()): blog.editableTheme@130 != null
    //#presumption(void stopBlogs()): blog.eventDispatcher.__Tag@130 == net/sourceforge/pebble/event/DefaultEventDispatcher
    //#presumption(void stopBlogs()): blog.eventDispatcher.eventListenerList.__Tag@130 == net/sourceforge/pebble/event/EventListenerList
    //#presumption(void stopBlogs()): blog.eventDispatcher.eventListenerList.blogListeners@130 != null
    //#presumption(void stopBlogs()): blog.eventDispatcher.eventListenerList@130 != null
    //#presumption(void stopBlogs()): blog.eventDispatcher@130 != null
    //#presumption(void stopBlogs()): blog.logger@130 != null
    //#presumption(void stopBlogs()): java.util.Iterator:next(...).__Tag@130 == net/sourceforge/pebble/domain/Blog
    //#presumption(void stopBlogs()): java.util.Iterator:next(...)@130 != null
    //#presumption(void stopBlogs()): java.util.Map:values(...)@130 != null
    //#unanalyzed(void stopBlogs()): Effects-of-calling:stop
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void stopBlogs()): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void stopBlogs()): Effects-of-calling:net.sourceforge.pebble.logging.AbstractLogger:stop
    //#unanalyzed(void stopBlogs()): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getRoot
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.File
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.File:exists
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.File:mkdir
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.File:listFiles
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.File:isDirectory
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.File:getName
    //#unanalyzed(void stopBlogs()): Effects-of-calling:copy
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.FileInputStream:getChannel
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.FileOutputStream
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.FileOutputStream:getChannel
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.nio.channels.FileChannel:size
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.nio.channels.FileChannel:transferFrom
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.nio.channels.FileChannel:close
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.File:getAbsolutePath
    //#unanalyzed(void stopBlogs()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void stopBlogs()): Effects-of-calling:net.sourceforge.pebble.util.FileUtils:deleteFile
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.io.File:renameTo
    //#unanalyzed(void stopBlogs()): Effects-of-calling:net.sourceforge.pebble.api.event.PebbleEvent
    //#unanalyzed(void stopBlogs()): Effects-of-calling:fireBlogEvent
    //#unanalyzed(void stopBlogs()): Effects-of-calling:getEventListenerList
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void stopBlogs()): Effects-of-calling:getType
    //#unanalyzed(void stopBlogs()): Effects-of-calling:isVetoed
    //#unanalyzed(void stopBlogs()): Effects-of-calling:getBlogListeners
    //#unanalyzed(void stopBlogs()): Effects-of-calling:blogStarted
    //#unanalyzed(void stopBlogs()): Effects-of-calling:blogStopped
    //#unanalyzed(void stopBlogs()): Effects-of-calling:org.apache.commons.logging.Log:info
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.util.EventObject
    //#unanalyzed(void stopBlogs()): Effects-of-calling:getBlog
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.util.Timer:schedule
    //#unanalyzed(void stopBlogs()): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void stopBlogs()): Effects-of-calling:net.sourceforge.pebble.api.event.blog.BlogEvent:getSource
    //#test_vector(void stopBlogs()): java.util.Iterator:hasNext(...)@130: {1}, {0}
      stopBlog(blog);
    }
  }
    //#blogmanager.java:133: end of method: void net.sourceforge.pebble.domain.BlogManager.stopBlogs()

  private void stopBlog(Blog blog) {
    blog.stop();
    //#blogmanager.java:136: method: void net.sourceforge.pebble.domain.BlogManager.stopBlog(Blog)
    //#input(void stopBlog(Blog)): blog
    //#input(void stopBlog(Blog)): blog.__Tag
    //#input(void stopBlog(Blog)): blog.editableTheme
    //#input(void stopBlog(Blog)): blog.editableTheme.__Tag
    //#input(void stopBlog(Blog)): blog.editableTheme.blog
    //#input(void stopBlog(Blog)): blog.editableTheme.name
    //#input(void stopBlog(Blog)): blog.editableTheme.pathToLiveThemes
    //#input(void stopBlog(Blog)): blog.eventDispatcher
    //#input(void stopBlog(Blog)): blog.eventDispatcher.__Tag
    //#input(void stopBlog(Blog)): blog.eventDispatcher.eventListenerList
    //#input(void stopBlog(Blog)): blog.eventDispatcher.eventListenerList.__Tag
    //#input(void stopBlog(Blog)): blog.eventDispatcher.eventListenerList.blogListeners
    //#input(void stopBlog(Blog)): blog.id
    //#input(void stopBlog(Blog)): blog.logger
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[net/sourceforge/pebble/api/event/EventDispatcher]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[net/sourceforge/pebble/event/DefaultEventDispatcher]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[others]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/EventDispatcher.__Dispatch_Table.fireBlogEvent(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Descendant_Table[net/sourceforge/pebble/api/event/blog/BlogEvent]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Descendant_Table[others]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.getType()I
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.isVetoed()Z
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[net/sourceforge/pebble/api/event/blog/BlogListener]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[others]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogListener.__Dispatch_Table.blogStarted(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogListener.__Dispatch_Table.blogStopped(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.stop()V
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/domain/Blog.log
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/domain/Theme.__Descendant_Table[net/sourceforge/pebble/domain/Theme]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/domain/Theme.__Descendant_Table[others]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/domain/Theme.__Dispatch_Table.backup()V
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/domain/Theme.__Dispatch_Table.getBackupThemeDirectory()Ljava/lang/String;
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/domain/Theme.log
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Descendant_Table[net/sourceforge/pebble/event/DefaultEventDispatcher]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Descendant_Table[others]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Dispatch_Table.fireBlogEvent(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Dispatch_Table.getEventListenerList()Lnet/sourceforge/pebble/event/EventListenerList;
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/event/EventListenerList.__Descendant_Table[net/sourceforge/pebble/event/EventListenerList]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/event/EventListenerList.__Descendant_Table[others]
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/event/EventListenerList.__Dispatch_Table.getBlogListeners()Ljava/util/List;
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator.__Dispatch_Table.blogStarted(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void stopBlog(Blog)): net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator.__Dispatch_Table.blogStopped(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#pre[1] (void stopBlog(Blog)): blog != null
    //#pre[2] (void stopBlog(Blog)): blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[3] (void stopBlog(Blog)): blog.editableTheme != null
    //#pre[4] (void stopBlog(Blog)): blog.editableTheme.__Tag == net/sourceforge/pebble/domain/Theme
    //#pre[5] (void stopBlog(Blog)): blog.editableTheme.blog != null
    //#pre[6] (void stopBlog(Blog)): init'ed(blog.editableTheme.name)
    //#pre[7] (void stopBlog(Blog)): init'ed(blog.editableTheme.pathToLiveThemes)
    //#pre[8] (void stopBlog(Blog)): blog.eventDispatcher != null
    //#pre[9] (void stopBlog(Blog)): blog.eventDispatcher.__Tag == net/sourceforge/pebble/event/DefaultEventDispatcher
    //#pre[10] (void stopBlog(Blog)): blog.eventDispatcher.eventListenerList != null
    //#pre[11] (void stopBlog(Blog)): blog.eventDispatcher.eventListenerList.__Tag == net/sourceforge/pebble/event/EventListenerList
    //#pre[12] (void stopBlog(Blog)): blog.eventDispatcher.eventListenerList.blogListeners != null
    //#pre[13] (void stopBlog(Blog)): init'ed(blog.id)
    //#pre[14] (void stopBlog(Blog)): blog.logger != null
    //#pre[15] (void stopBlog(Blog)): net/sourceforge/pebble/domain/Theme.log != null
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.logging.AbstractLogger:stop
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getRoot
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.File
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.File:exists
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.File:mkdir
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.File:listFiles
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.File:isDirectory
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.File:getName
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:copy
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.FileInputStream:getChannel
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.FileOutputStream
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.FileOutputStream:getChannel
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.nio.channels.FileChannel:size
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.nio.channels.FileChannel:transferFrom
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.nio.channels.FileChannel:close
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.File:getAbsolutePath
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.util.FileUtils:deleteFile
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.io.File:renameTo
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.api.event.PebbleEvent
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:fireBlogEvent
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:getEventListenerList
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:getType
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:isVetoed
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:getBlogListeners
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:blogStarted
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:blogStopped
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:org.apache.commons.logging.Log:info
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.util.EventObject
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:getBlog
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.util.Timer:schedule
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void stopBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.api.event.blog.BlogEvent:getSource
  }
    //#blogmanager.java:137: end of method: void net.sourceforge.pebble.domain.BlogManager.stopBlog(Blog)

  public void reloadBlog(Blog blog) {
    stopBlog(blog);
    //#blogmanager.java:140: method: void net.sourceforge.pebble.domain.BlogManager.reloadBlog(Blog)
    //#input(void reloadBlog(Blog)): blog
    //#input(void reloadBlog(Blog)): blog.__Tag
    //#input(void reloadBlog(Blog)): blog.editableTheme
    //#input(void reloadBlog(Blog)): blog.editableTheme.__Tag
    //#input(void reloadBlog(Blog)): blog.editableTheme.blog
    //#input(void reloadBlog(Blog)): blog.editableTheme.name
    //#input(void reloadBlog(Blog)): blog.editableTheme.pathToLiveThemes
    //#input(void reloadBlog(Blog)): blog.eventDispatcher
    //#input(void reloadBlog(Blog)): blog.eventDispatcher.__Tag
    //#input(void reloadBlog(Blog)): blog.eventDispatcher.eventListenerList
    //#input(void reloadBlog(Blog)): blog.eventDispatcher.eventListenerList.__Tag
    //#input(void reloadBlog(Blog)): blog.eventDispatcher.eventListenerList.blogListeners
    //#input(void reloadBlog(Blog)): blog.id
    //#input(void reloadBlog(Blog)): blog.logger
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getDataDirectory()Ljava/lang/String;
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[net/sourceforge/pebble/api/event/EventDispatcher]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[net/sourceforge/pebble/event/DefaultEventDispatcher]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[others]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/EventDispatcher.__Dispatch_Table.fireBlogEvent(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Descendant_Table[net/sourceforge/pebble/api/event/blog/BlogEvent]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Descendant_Table[others]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.getType()I
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.isVetoed()Z
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[net/sourceforge/pebble/api/event/blog/BlogListener]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[others]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogListener.__Dispatch_Table.blogStarted(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/api/event/blog/BlogListener.__Dispatch_Table.blogStopped(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.stop()V
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/domain/Blog.log
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/domain/Theme.__Descendant_Table[net/sourceforge/pebble/domain/Theme]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/domain/Theme.__Descendant_Table[others]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/domain/Theme.__Dispatch_Table.backup()V
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/domain/Theme.__Dispatch_Table.getBackupThemeDirectory()Ljava/lang/String;
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/domain/Theme.log
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Descendant_Table[net/sourceforge/pebble/event/DefaultEventDispatcher]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Descendant_Table[others]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Dispatch_Table.fireBlogEvent(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Dispatch_Table.getEventListenerList()Lnet/sourceforge/pebble/event/EventListenerList;
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/event/EventListenerList.__Descendant_Table[net/sourceforge/pebble/event/EventListenerList]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/event/EventListenerList.__Descendant_Table[others]
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/event/EventListenerList.__Dispatch_Table.getBlogListeners()Ljava/util/List;
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator.__Dispatch_Table.blogStarted(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void reloadBlog(Blog)): net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator.__Dispatch_Table.blogStopped(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void reloadBlog(Blog)): this
    //#pre[1] (void reloadBlog(Blog)): blog != null
    //#pre[2] (void reloadBlog(Blog)): blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[3] (void reloadBlog(Blog)): blog.editableTheme != null
    //#pre[4] (void reloadBlog(Blog)): blog.editableTheme.__Tag == net/sourceforge/pebble/domain/Theme
    //#pre[5] (void reloadBlog(Blog)): blog.editableTheme.blog != null
    //#pre[6] (void reloadBlog(Blog)): init'ed(blog.editableTheme.name)
    //#pre[7] (void reloadBlog(Blog)): init'ed(blog.editableTheme.pathToLiveThemes)
    //#pre[8] (void reloadBlog(Blog)): blog.eventDispatcher != null
    //#pre[9] (void reloadBlog(Blog)): blog.eventDispatcher.__Tag == net/sourceforge/pebble/event/DefaultEventDispatcher
    //#pre[10] (void reloadBlog(Blog)): blog.eventDispatcher.eventListenerList != null
    //#pre[11] (void reloadBlog(Blog)): blog.eventDispatcher.eventListenerList.__Tag == net/sourceforge/pebble/event/EventListenerList
    //#pre[12] (void reloadBlog(Blog)): blog.eventDispatcher.eventListenerList.blogListeners != null
    //#pre[13] (void reloadBlog(Blog)): init'ed(blog.id)
    //#pre[14] (void reloadBlog(Blog)): blog.logger != null
    //#pre[16] (void reloadBlog(Blog)): net/sourceforge/pebble/domain/Theme.log != null
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:getDataDirectory
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.File
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:stop
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.logging.AbstractLogger:stop
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getRoot
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.File:exists
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.File:mkdir
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.File:listFiles
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.File:isDirectory
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.File:getName
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:copy
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.FileInputStream:getChannel
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.FileOutputStream
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.FileOutputStream:getChannel
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.nio.channels.FileChannel:size
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.nio.channels.FileChannel:transferFrom
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.nio.channels.FileChannel:close
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.File:getAbsolutePath
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.util.FileUtils:deleteFile
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.io.File:renameTo
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.api.event.PebbleEvent
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:fireBlogEvent
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:getEventListenerList
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:getType
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:isVetoed
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:getBlogListeners
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:blogStarted
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:blogStopped
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:org.apache.commons.logging.Log:info
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.util.EventObject
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:getBlog
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.util.Timer:schedule
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void reloadBlog(Blog)): Effects-of-calling:net.sourceforge.pebble.api.event.blog.BlogEvent:getSource

    File f = new File(getBlogsDirectory(), blog.getId());
    startBlog(f.getAbsolutePath(), blog.getId());
    //#blogmanager.java:143: Warning: call too complex - analysis skipped
    //#    -- call on void startBlog(String, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void reloadBlog(Blog)
    //#    unanalyzed callee: void startBlog(String, String)
  }
    //#blogmanager.java:144: end of method: void net.sourceforge.pebble.domain.BlogManager.reloadBlog(Blog)

  /**
   * Loads a blog that is a part of a larger composite blog.
   *
   * @param blogDir   the blog.dir for the blog
   * @param blogId    the ID for the blog
   */
  private void startBlog(String blogDir, String blogId) {
    Blog blog = new Blog(blogDir);
    //#blogmanager.java:153: method: void net.sourceforge.pebble.domain.BlogManager.startBlog(String, String)
    //#input(void startBlog(String, String)): __Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(void startBlog(String, String)): __Descendant_Table[others]
    //#input(void startBlog(String, String)): __Dispatch_Table.isMultiBlog()Z
    //#input(void startBlog(String, String)): __Dispatch_Table.reloadBlog(Lnet/sourceforge/pebble/domain/Blog;)V
    //#input(void startBlog(String, String)): blogDir
    //#input(void startBlog(String, String)): blogId
    //#input(void startBlog(String, String)): instance.__Tag
    //#input(void startBlog(String, String)): log
    //#input(void startBlog(String, String)): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getDataDirectory()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/Configuration.__Dispatch_Table.isVirtualHostingEnabled()Z
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[net/sourceforge/pebble/api/event/EventDispatcher]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[net/sourceforge/pebble/event/DefaultEventDispatcher]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/EventDispatcher.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/EventDispatcher.__Dispatch_Table.fireBlogEvent(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Descendant_Table[net/sourceforge/pebble/api/event/blog/BlogEvent]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.getType()I
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/blog/BlogEvent.__Dispatch_Table.isVetoed()Z
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[net/sourceforge/pebble/api/event/blog/BlogListener]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/blog/BlogListener.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/blog/BlogListener.__Dispatch_Table.blogStarted(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/event/blog/BlogListener.__Dispatch_Table.blogStopped(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[net/sourceforge/pebble/api/permalink/PermalinkProvider]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Dispatch_Table.getPermalink(Lnet/sourceforge/pebble/domain/BlogEntry;)Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/DAOFactory.__Descendant_Table[net/sourceforge/pebble/dao/DAOFactory]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/DAOFactory.__Descendant_Table[net/sourceforge/pebble/dao/file/FileDAOFactory]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/DAOFactory.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/DAOFactory.__Dispatch_Table.getStaticPageDAO()Lnet/sourceforge/pebble/dao/StaticPageDAO;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/DAOFactory.configuredFactory.__Tag
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/DAOFactory.configuredFactory.staticPageDAO.__Tag
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/StaticPageDAO.__Descendant_Table[net/sourceforge/pebble/dao/StaticPageDAO]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/StaticPageDAO.__Descendant_Table[net/sourceforge/pebble/dao/file/FileStaticPageDAO]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/StaticPageDAO.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/StaticPageDAO.__Dispatch_Table.loadStaticPages(Lnet/sourceforge/pebble/domain/Blog;)Ljava/util/Collection;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/file/FileDAOFactory.__Dispatch_Table.getStaticPageDAO()Lnet/sourceforge/pebble/dao/StaticPageDAO;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/file/FileStaticPageDAO.__Descendant_Table[net/sourceforge/pebble/dao/file/FileStaticPageDAO]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/file/FileStaticPageDAO.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/file/FileStaticPageDAO.__Dispatch_Table.loadStaticPage(Lnet/sourceforge/pebble/domain/Blog;Ljava/lang/String;)Lnet/sourceforge/pebble/domain/StaticPage;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/dao/file/FileStaticPageDAO.__Dispatch_Table.loadStaticPages(Lnet/sourceforge/pebble/domain/Blog;)Ljava/util/Collection;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/AbstractBlog]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/MultiBlog]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getRoot()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.error(Ljava/lang/String;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getFilesDirectory()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getImagesDirectory()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getIndexesDirectory()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getLogsDirectory()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getLuceneAnalyzer()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getPermalinkProvider()Lnet/sourceforge/pebble/api/permalink/PermalinkProvider;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getRoot()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.info(Ljava/lang/String;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.init()V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.reindex()V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.reindexBlogEntries()V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.reindexStaticPages()V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.setEditableTheme(Lnet/sourceforge/pebble/domain/Theme;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.setId(Ljava/lang/String;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.start()V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.stop()V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Blog.log
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBody()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getOriginalPermalink()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.isAggregated()Z
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getBody()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/Content]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/Response]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Content.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Content.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Message.__Descendant_Table[net/sourceforge/pebble/domain/Message]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Message.__Dispatch_Table.getText()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/MessageType.ERROR
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/MessageType.INFO
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getRoot()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getOriginalPermalink()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.isAggregated()Z
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getBody()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getOriginalPermalink()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getPermalink()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getTruncatedContent()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.isAggregated()Z
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Theme.__Descendant_Table[net/sourceforge/pebble/domain/Theme]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Theme.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Theme.__Dispatch_Table.backup()V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Theme.__Dispatch_Table.getBackupThemeDirectory()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Theme.__Dispatch_Table.getPathToLiveTheme()Ljava/io/File;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Theme.__Dispatch_Table.restore()V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Theme.__Dispatch_Table.restore(Ljava/lang/String;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/Theme.log
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getExcerpt()Ljava/lang/String;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Descendant_Table[net/sourceforge/pebble/event/DefaultEventDispatcher]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Dispatch_Table.fireBlogEvent(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/event/DefaultEventDispatcher.__Dispatch_Table.getEventListenerList()Lnet/sourceforge/pebble/event/EventListenerList;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/event/EventListenerList.__Descendant_Table[net/sourceforge/pebble/event/EventListenerList]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/event/EventListenerList.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/event/EventListenerList.__Dispatch_Table.getBlogListeners()Ljava/util/List;
    //#input(void startBlog(String, String)): net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator.__Dispatch_Table.blogStarted(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/event/blog/PebbleAPIBlogEntryAggregator.__Dispatch_Table.blogStopped(Lnet/sourceforge/pebble/api/event/blog/BlogEvent;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/index/SearchIndex.__Descendant_Table[net/sourceforge/pebble/index/SearchIndex]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/index/SearchIndex.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/index/SearchIndex.__Dispatch_Table.indexStaticPages(Ljava/util/Collection;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/index/SearchIndex.log
    //#input(void startBlog(String, String)): net/sourceforge/pebble/index/StaticPageIndex.__Descendant_Table[net/sourceforge/pebble/index/StaticPageIndex]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/index/StaticPageIndex.__Descendant_Table[others]
    //#input(void startBlog(String, String)): net/sourceforge/pebble/index/StaticPageIndex.__Dispatch_Table.reindex(Ljava/util/Collection;)V
    //#input(void startBlog(String, String)): net/sourceforge/pebble/index/StaticPageIndex.log
    //#input(void startBlog(String, String)): this
    //#input(void startBlog(String, String)): this.__Tag
    //#input(void startBlog(String, String)): this.blogs
    //#pre[12] (void startBlog(String, String)): net/sourceforge/pebble/domain/Theme.log != null
    //#pre[15] (void startBlog(String, String)): this.blogs != null
    //#pre[6] (void startBlog(String, String)): (soft) log != null
    //#pre[14] (void startBlog(String, String)): (soft) this.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#presumption(void startBlog(String, String)): blog.eventDispatcher != null
    //#presumption(void startBlog(String, String)): blog.eventDispatcher.__Tag == net/sourceforge/pebble/event/DefaultEventDispatcher
    //#presumption(void startBlog(String, String)): blog.eventDispatcher.__Tag@179 == net/sourceforge/pebble/event/DefaultEventDispatcher
    //#presumption(void startBlog(String, String)): blog.eventDispatcher.eventListenerList != null
    //#presumption(void startBlog(String, String)): blog.eventDispatcher.eventListenerList.__Tag == net/sourceforge/pebble/event/EventListenerList
    //#presumption(void startBlog(String, String)): blog.eventDispatcher.eventListenerList.__Tag@179 == net/sourceforge/pebble/event/EventListenerList
    //#presumption(void startBlog(String, String)): blog.eventDispatcher.eventListenerList.blogListeners != null
    //#presumption(void startBlog(String, String)): blog.eventDispatcher.eventListenerList.blogListeners@179 != null
    //#presumption(void startBlog(String, String)): blog.eventDispatcher.eventListenerList@179 != null
    //#presumption(void startBlog(String, String)): blog.eventDispatcher@179 != null
    //#presumption(void startBlog(String, String)): blog.logger != null
    //#presumption(void startBlog(String, String)): blog.logger@179 != null
    //#presumption(void startBlog(String, String)): net.sourceforge.pebble.PebbleContext:getInstance(...)@156 != null
    //#presumption(void startBlog(String, String)): net.sourceforge.pebble.PebbleContext:getInstance(...)@166 != null
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getDataDirectory
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:stopBlog
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getBlogsDirectory
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getId
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.File
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.File:getAbsolutePath
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:startBlog
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.File:exists
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:stop
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.domain.Blog
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:setId
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getWebApplicationRoot
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:setEditableTheme
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:start
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getBuildVersion
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.FileReader
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.BufferedReader
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.BufferedReader:readLine
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.BufferedReader:close
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.util.UpgradeUtilities:upgradeBlog
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.FileWriter
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.BufferedWriter
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.BufferedWriter:write
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.BufferedWriter:close
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.Properties:getProperty
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.logging.AbstractLogger:stop
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getRoot
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.File:mkdir
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.File:listFiles
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.File:isDirectory
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.File:getName
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:copy
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.FileInputStream:getChannel
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.FileOutputStream
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.FileOutputStream:getChannel
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.nio.channels.FileChannel:size
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.nio.channels.FileChannel:transferFrom
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.nio.channels.FileChannel:close
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.util.FileUtils:deleteFile
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.File:renameTo
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.api.event.PebbleEvent
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:fireBlogEvent
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getEventListenerList
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getType
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:isVetoed
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getBlogListeners
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:blogStarted
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:blogStopped
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.commons.logging.Log:info
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.LinkedList
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:init
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.List:subList
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.util.SecurityUtils:getUsername
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.Date
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getIndexesDirectory
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:reindex
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getFilesDirectory
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.logging.AbstractLogger:start
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:reindexBlogEntries
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:reindexStaticPages
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getSearchIndexDirectory
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.Exception:getMessage
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getAnalyzer
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.lucene.index.IndexWriter:close
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getLuceneAnalyzer
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.Class:forName
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.Class:newInstance
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getDate
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getAuthor
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getTitle
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.lucene.index.IndexWriter
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.lucene.document.Document
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.lucene.document.Field:Keyword
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.lucene.document.Document:add
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.lucene.document.Field:Text
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getPermalink
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.lucene.document.DateField:dateToString
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.lucene.document.Field:UnIndexed
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getBody
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.lucene.document.Field:UnStored
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getTruncatedContent
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.lucene.index.IndexWriter:addDocument
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:transformHTML
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getStaticPageDAO
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:loadStaticPages
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:loadStaticPage
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.File:createNewFile
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:org.apache.commons.logging.Log:warn
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.Map:keySet
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.BufferedWriter:newLine
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.BufferedWriter:flush
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.io.File:delete
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getName
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.domain.StaticPage:getId
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:index
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.EventObject
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getBlog
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.Timer:schedule
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getLocalPermalink
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getUrl
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getContent
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:truncate
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:net.sourceforge.pebble.api.event.blog.BlogEvent:getSource
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void startBlog(String, String)): Effects-of-calling:getPermalinkProvider
    //#test_vector(void startBlog(String, String)): java.io.File:exists(...)@168: {0}, {1}
    //#test_vector(void startBlog(String, String)): java.lang.String:equals(...)@178: {1}, {0}
    blog.setId(blogId);

    File pathToLiveThemes = new File(PebbleContext.getInstance().getWebApplicationRoot(), THEMES_PATH);
    //#blogmanager.java:156: Warning: method not available
    //#    -- call on PebbleContext net.sourceforge.pebble.PebbleContext:getInstance()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void startBlog(String, String)
    //#    unanalyzed callee: PebbleContext net.sourceforge.pebble.PebbleContext:getInstance()
    //#blogmanager.java:156: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.PebbleContext:getWebApplicationRoot()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void startBlog(String, String)
    //#    unanalyzed callee: String net.sourceforge.pebble.PebbleContext:getWebApplicationRoot()
    Theme theme = new Theme(blog, "user-" + blogId, pathToLiveThemes.getAbsolutePath());
    blog.setEditableTheme(theme);

    blog.start();
    blogs.put(blog.getId(), blog);

    // which version are we at and do we need to upgrade?
    File versionFile = new File(blogDir, "pebble.version");
    String blogVersion = null;
    String currentVersion = PebbleContext.getInstance().getBuildVersion();
    //#blogmanager.java:166: Warning: method not available
    //#    -- call on PebbleContext net.sourceforge.pebble.PebbleContext:getInstance()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void startBlog(String, String)
    //#    unanalyzed callee: PebbleContext net.sourceforge.pebble.PebbleContext:getInstance()
    //#blogmanager.java:166: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.PebbleContext:getBuildVersion()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void startBlog(String, String)
    //#    unanalyzed callee: String net.sourceforge.pebble.PebbleContext:getBuildVersion()
    try {
      if (versionFile.exists()) {
        BufferedReader reader = new BufferedReader(new FileReader(versionFile));
        blogVersion = reader.readLine();
        reader.close();
      }
    } catch (Exception e) {
      log.error("Exception encountered", e);
    //#blogmanager.java:174: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void startBlog(String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
    }

    try {
      if (blogVersion == null || !blogVersion.equals(currentVersion)) {
        UpgradeUtilities.upgradeBlog(blog, blogVersion, currentVersion);
    //#blogmanager.java:179: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.util.UpgradeUtilities:upgradeBlog(Blog, String, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void startBlog(String, String)
    //#    unanalyzed callee: void net.sourceforge.pebble.util.UpgradeUtilities:upgradeBlog(Blog, String, String)

        BufferedWriter writer = new BufferedWriter(new FileWriter(versionFile));
        writer.write(currentVersion);
        writer.close();

        // now that the upgrade is complete, reload the blog
        reloadBlog(blog);
      }
    } catch (Exception e) {
      log.error("Exception encountered", e);
    //#blogmanager.java:189: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void startBlog(String, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
    }
  }
    //#blogmanager.java:191: end of method: void net.sourceforge.pebble.domain.BlogManager.startBlog(String, String)

  public void addBlog(String blogId) {
    File file = new File(getBlogsDirectory(), blogId);
    //#blogmanager.java:194: method: void net.sourceforge.pebble.domain.BlogManager.addBlog(String)
    //#input(void addBlog(String)): blogId
    //#input(void addBlog(String)): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(void addBlog(String)): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(void addBlog(String)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getDataDirectory()Ljava/lang/String;
    //#input(void addBlog(String)): this
    //#unanalyzed(void addBlog(String)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(void addBlog(String)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(void addBlog(String)): Effects-of-calling:getDataDirectory
    //#unanalyzed(void addBlog(String)): Effects-of-calling:java.io.File
    file.mkdirs();
    startBlog(file.getAbsolutePath(), blogId);
    //#blogmanager.java:196: Warning: call too complex - analysis skipped
    //#    -- call on void startBlog(String, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: void addBlog(String)
    //#    unanalyzed callee: void startBlog(String, String)
  }
    //#blogmanager.java:197: end of method: void net.sourceforge.pebble.domain.BlogManager.addBlog(String)

  /**
   * Determines whether this blog manager supports multiple blogs.
   *
   * @return  true if multiple blogs are supported, false otherwise
   */
  public boolean isMultiBlog() {
    return this.multiBlog;
    //#blogmanager.java:205: method: bool net.sourceforge.pebble.domain.BlogManager.isMultiBlog()
    //#input(bool isMultiBlog()): this
    //#input(bool isMultiBlog()): this.multiBlog
    //#output(bool isMultiBlog()): return_value
    //#pre[2] (bool isMultiBlog()): init'ed(this.multiBlog)
    //#post(bool isMultiBlog()): return_value == this.multiBlog
    //#post(bool isMultiBlog()): init'ed(return_value)
    //#blogmanager.java:205: end of method: bool net.sourceforge.pebble.domain.BlogManager.isMultiBlog()
  }

  public void setMultiBlog(boolean multiBlog) {
    this.multiBlog = multiBlog;
    //#blogmanager.java:209: method: void net.sourceforge.pebble.domain.BlogManager.setMultiBlog(bool)
    //#input(void setMultiBlog(bool)): multiBlog
    //#input(void setMultiBlog(bool)): this
    //#output(void setMultiBlog(bool)): this.multiBlog
    //#post(void setMultiBlog(bool)): this.multiBlog == multiBlog
    //#post(void setMultiBlog(bool)): init'ed(this.multiBlog)
  }
    //#blogmanager.java:210: end of method: void net.sourceforge.pebble.domain.BlogManager.setMultiBlog(bool)

  public void addBlog(Blog blog) {
    blogs.put(blog.getId(), blog);
    //#blogmanager.java:213: method: void net.sourceforge.pebble.domain.BlogManager.addBlog(Blog)
    //#input(void addBlog(Blog)): blog
    //#input(void addBlog(Blog)): blog.__Tag
    //#input(void addBlog(Blog)): blog.id
    //#input(void addBlog(Blog)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void addBlog(Blog)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void addBlog(Blog)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void addBlog(Blog)): this
    //#input(void addBlog(Blog)): this.blogs
    //#pre[1] (void addBlog(Blog)): blog != null
    //#pre[2] (void addBlog(Blog)): blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[3] (void addBlog(Blog)): init'ed(blog.id)
    //#pre[5] (void addBlog(Blog)): this.blogs != null
  }
    //#blogmanager.java:214: end of method: void net.sourceforge.pebble.domain.BlogManager.addBlog(Blog)

  public void removeAllBlogs() {
    blogs = new HashMap<String,Blog>();
    //#blogmanager.java:217: method: void net.sourceforge.pebble.domain.BlogManager.removeAllBlogs()
    //#input(void removeAllBlogs()): this
    //#output(void removeAllBlogs()): new HashMap(removeAllBlogs#1) num objects
    //#output(void removeAllBlogs()): this.blogs
    //#new obj(void removeAllBlogs()): new HashMap(removeAllBlogs#1)
    //#post(void removeAllBlogs()): this.blogs == &new HashMap(removeAllBlogs#1)
    //#post(void removeAllBlogs()): new HashMap(removeAllBlogs#1) num objects == 1
  }
    //#blogmanager.java:218: end of method: void net.sourceforge.pebble.domain.BlogManager.removeAllBlogs()

  /**
   * Gets all blogs that are currently being managed.
   *
   * @return  a Collection of Blog instances
   */
  public Collection<Blog> getBlogs() {
    List<Blog> sortedBlogs = new ArrayList<Blog>(blogs.values());
    //#blogmanager.java:226: method: Collection net.sourceforge.pebble.domain.BlogManager.getBlogs()
    //#input(Collection getBlogs()): this
    //#input(Collection getBlogs()): this.blogs
    //#output(Collection getBlogs()): new ArrayList(getBlogs#1) num objects
    //#output(Collection getBlogs()): return_value
    //#new obj(Collection getBlogs()): new ArrayList(getBlogs#1)
    //#pre[2] (Collection getBlogs()): this.blogs != null
    //#post(Collection getBlogs()): return_value == &new ArrayList(getBlogs#1)
    //#post(Collection getBlogs()): new ArrayList(getBlogs#1) num objects == 1
    Collections.sort(sortedBlogs, new BlogByLastModifiedDateComparator());
    return sortedBlogs;
    //#blogmanager.java:228: end of method: Collection net.sourceforge.pebble.domain.BlogManager.getBlogs()
  }

  /**
   * Gets the number of blogs that are currently being managed.
   *
   * @return the number of managed blogs
   */
  public int getNumberOfBlogs() {
	  return blogs.size();
    //#blogmanager.java:237: method: int net.sourceforge.pebble.domain.BlogManager.getNumberOfBlogs()
    //#input(int getNumberOfBlogs()): this
    //#input(int getNumberOfBlogs()): this.blogs
    //#output(int getNumberOfBlogs()): return_value
    //#pre[2] (int getNumberOfBlogs()): this.blogs != null
    //#post(int getNumberOfBlogs()): init'ed(return_value)
    //#blogmanager.java:237: end of method: int net.sourceforge.pebble.domain.BlogManager.getNumberOfBlogs()
  }
  
  
  /**
   * Gets all blogs that are currently being managed and are
   * to be included in aggregated pages and feeds.
   *
   * @return  a List of Blog instances
   */
  public List<Blog> getPublicBlogs() {
    List<Blog> list = new ArrayList<Blog>();
    //#blogmanager.java:248: method: List net.sourceforge.pebble.domain.BlogManager.getPublicBlogs()
    //#input(List getPublicBlogs()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(List getPublicBlogs()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(List getPublicBlogs()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.isPublic()Z
    //#input(List getPublicBlogs()): this
    //#input(List getPublicBlogs()): this.blogs
    //#output(List getPublicBlogs()): new ArrayList(getPublicBlogs#1) num objects
    //#output(List getPublicBlogs()): return_value
    //#new obj(List getPublicBlogs()): new ArrayList(getPublicBlogs#1)
    //#pre[2] (List getPublicBlogs()): this.blogs != null
    //#presumption(List getPublicBlogs()): blog.properties@249 != null
    //#presumption(List getPublicBlogs()): java.util.Iterator:next(...).__Tag@249 == net/sourceforge/pebble/domain/Blog
    //#presumption(List getPublicBlogs()): java.util.Iterator:next(...)@249 != null
    //#presumption(List getPublicBlogs()): java.util.Map:values(...)@249 != null
    //#post(List getPublicBlogs()): return_value == &new ArrayList(getPublicBlogs#1)
    //#post(List getPublicBlogs()): new ArrayList(getPublicBlogs#1) num objects == 1
    //#unanalyzed(List getPublicBlogs()): Effects-of-calling:java.util.Properties:getProperty
    //#unanalyzed(List getPublicBlogs()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#test_vector(List getPublicBlogs()): java.lang.String:equalsIgnoreCase(...)@1554: {0}, {1}
    //#test_vector(List getPublicBlogs()): java.util.Iterator:hasNext(...)@249: {1}, {0}
    for (Blog blog : blogs.values()) {
      if (blog.isPublic()) {
        list.add(blog);
      }
    }

    return list;
    //#blogmanager.java:255: end of method: List net.sourceforge.pebble.domain.BlogManager.getPublicBlogs()
  }

  /**
   * Determines whether there is a blog with the specified ID.
   *
   * @param id    the blog ID
   * @return  true if a blog with the specified ID exists, false otherwise
   */
  public boolean hasBlog(String id) {
    return blogs.containsKey(id);
    //#blogmanager.java:265: method: bool net.sourceforge.pebble.domain.BlogManager.hasBlog(String)
    //#input(bool hasBlog(String)): id
    //#input(bool hasBlog(String)): this
    //#input(bool hasBlog(String)): this.blogs
    //#output(bool hasBlog(String)): return_value
    //#pre[3] (bool hasBlog(String)): this.blogs != null
    //#post(bool hasBlog(String)): init'ed(return_value)
    //#blogmanager.java:265: end of method: bool net.sourceforge.pebble.domain.BlogManager.hasBlog(String)
  }

  public MultiBlog getMultiBlog() {
    return new MultiBlog(PebbleContext.getInstance().getConfiguration().getDataDirectory());
    //#blogmanager.java:269: method: MultiBlog net.sourceforge.pebble.domain.BlogManager.getMultiBlog()
    //#blogmanager.java:269: Warning: method not available
    //#    -- call on PebbleContext net.sourceforge.pebble.PebbleContext:getInstance()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: MultiBlog getMultiBlog()
    //#    unanalyzed callee: PebbleContext net.sourceforge.pebble.PebbleContext:getInstance()
    //#blogmanager.java:269: Warning: method not available
    //#    -- call on Configuration net.sourceforge.pebble.PebbleContext:getConfiguration()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: MultiBlog getMultiBlog()
    //#    unanalyzed callee: Configuration net.sourceforge.pebble.PebbleContext:getConfiguration()
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/Configuration.__Dispatch_Table.getDataDirectory()Ljava/lang/String;
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/AbstractBlog]
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/MultiBlog]
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[others]
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getDefaultProperties()Ljava/util/Properties;
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getRoot()Ljava/lang/String;
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.loadProperties()V
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/AbstractBlog.log
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getDefaultProperties()Ljava/util/Properties;
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getRoot()Ljava/lang/String;
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.loadProperties()V
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/MultiBlog.__Descendant_Table[net/sourceforge/pebble/domain/MultiBlog]
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/MultiBlog.__Descendant_Table[others]
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getDefaultProperties()Ljava/util/Properties;
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getRoot()Ljava/lang/String;
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.init()V
    //#input(MultiBlog getMultiBlog()): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.loadProperties()V
    //#output(MultiBlog getMultiBlog()): new LinkedList(AbstractBlog#1) num objects
    //#output(MultiBlog getMultiBlog()): new MultiBlog(getMultiBlog#1) num objects
    //#output(MultiBlog getMultiBlog()): return_value.__Tag
    //#output(MultiBlog getMultiBlog()): return_value.blog
    //#output(MultiBlog getMultiBlog()): return_value.messages
    //#output(MultiBlog getMultiBlog()): return_value.properties
    //#output(MultiBlog getMultiBlog()): return_value.root
    //#output(MultiBlog getMultiBlog()): new Properties(loadProperties#1) num objects
    //#output(MultiBlog getMultiBlog()): return_value
    //#new obj(MultiBlog getMultiBlog()): new LinkedList(AbstractBlog#1)
    //#new obj(MultiBlog getMultiBlog()): new MultiBlog(getMultiBlog#1)
    //#new obj(MultiBlog getMultiBlog()): new Properties(loadProperties#1)
    //#pre[1] (MultiBlog getMultiBlog()): (soft) net/sourceforge/pebble/domain/AbstractBlog.log != null
    //#presumption(MultiBlog getMultiBlog()): net.sourceforge.pebble.PebbleContext:getConfiguration(...).__Tag@269 == net/sourceforge/pebble/Configuration
    //#presumption(MultiBlog getMultiBlog()): net.sourceforge.pebble.PebbleContext:getConfiguration(...)@269 != null
    //#presumption(MultiBlog getMultiBlog()): net.sourceforge.pebble.PebbleContext:getInstance(...)@269 != null
    //#post(MultiBlog getMultiBlog()): return_value == &new MultiBlog(getMultiBlog#1)
    //#post(MultiBlog getMultiBlog()): new LinkedList(AbstractBlog#1) num objects == 1
    //#post(MultiBlog getMultiBlog()): new MultiBlog(getMultiBlog#1) num objects == 1
    //#post(MultiBlog getMultiBlog()): new Properties(loadProperties#1) num objects == 1
    //#post(MultiBlog getMultiBlog()): return_value.__Tag == net/sourceforge/pebble/domain/MultiBlog
    //#post(MultiBlog getMultiBlog()): init'ed(return_value.blog)
    //#post(MultiBlog getMultiBlog()): return_value.messages == &new LinkedList(AbstractBlog#1)
    //#post(MultiBlog getMultiBlog()): return_value.properties == &new Properties(loadProperties#1)
    //#post(MultiBlog getMultiBlog()): init'ed(return_value.root)
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:net.sourceforge.pebble.domain.AbstractBlog
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:init
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:java.util.LinkedList
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:java.util.Properties
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:java.util.Properties:setProperty
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:java.io.File
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:java.io.File:exists
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:getDefaultProperties
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:java.util.Properties:load
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:java.io.FileInputStream:close
    //#unanalyzed(MultiBlog getMultiBlog()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#blogmanager.java:269: end of method: MultiBlog net.sourceforge.pebble.domain.BlogManager.getMultiBlog()
  }

  private File getBlogsDirectory() {
    return new File(PebbleContext.getInstance().getConfiguration().getDataDirectory(), "blogs");
    //#blogmanager.java:273: method: File net.sourceforge.pebble.domain.BlogManager.getBlogsDirectory()
    //#blogmanager.java:273: Warning: method not available
    //#    -- call on PebbleContext net.sourceforge.pebble.PebbleContext:getInstance()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: File getBlogsDirectory()
    //#    unanalyzed callee: PebbleContext net.sourceforge.pebble.PebbleContext:getInstance()
    //#blogmanager.java:273: Warning: method not available
    //#    -- call on Configuration net.sourceforge.pebble.PebbleContext:getConfiguration()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.BlogManager
    //#    method: File getBlogsDirectory()
    //#    unanalyzed callee: Configuration net.sourceforge.pebble.PebbleContext:getConfiguration()
    //#input(File getBlogsDirectory()): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(File getBlogsDirectory()): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(File getBlogsDirectory()): net/sourceforge/pebble/Configuration.__Dispatch_Table.getDataDirectory()Ljava/lang/String;
    //#output(File getBlogsDirectory()): new File(getBlogsDirectory#1) num objects
    //#output(File getBlogsDirectory()): return_value
    //#new obj(File getBlogsDirectory()): new File(getBlogsDirectory#1)
    //#presumption(File getBlogsDirectory()): net.sourceforge.pebble.PebbleContext:getConfiguration(...).__Tag@273 == net/sourceforge/pebble/Configuration
    //#presumption(File getBlogsDirectory()): net.sourceforge.pebble.PebbleContext:getConfiguration(...)@273 != null
    //#presumption(File getBlogsDirectory()): net.sourceforge.pebble.PebbleContext:getInstance(...)@273 != null
    //#post(File getBlogsDirectory()): return_value == &new File(getBlogsDirectory#1)
    //#post(File getBlogsDirectory()): new File(getBlogsDirectory#1) num objects == 1
    //#blogmanager.java:273: end of method: File net.sourceforge.pebble.domain.BlogManager.getBlogsDirectory()
  }

}    //#blogmanager.java:: end of class: net.sourceforge.pebble.domain.BlogManager
