//# 0 errors, 712 messages
//#
package net.sourceforge.pebble.domain;
    //#pagebasedcontent.java:1:1: class: net.sourceforge.pebble.domain.PageBasedContent

import net.sourceforge.pebble.PebbleContext;
import net.sourceforge.pebble.security.PebbleUserDetails;
import net.sourceforge.pebble.security.SecurityRealm;
import net.sourceforge.pebble.security.SecurityRealmException;
import net.sourceforge.pebble.util.StringUtils;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.*;

/**
 * The superclass for blog entries and pages.
 *
 * @author Simon Brown
 */
public abstract class PageBasedContent extends Content {

  private static final Log log = LogFactory.getLog(PageBasedContent.class);
    //#pagebasedcontent.java:21: method: net.sourceforge.pebble.domain.PageBasedContent.net.sourceforge.pebble.domain.PageBasedContent__static_init
    //#pagebasedcontent.java:21: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: net.sourceforge.pebble.domain.PageBasedContent__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.addEvent(Lnet/sourceforge/pebble/api/event/PebbleEvent;)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.areEventsEnabled()Z
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.clearEvents()V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.clearPropertyChangeEvents()V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getAllTags()Ljava/util/List;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getAuthor()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getBody()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getContent()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getDate()Ljava/util/Date;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getEvents()Ljava/util/List;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getId()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getLastModified()Ljava/util/Date;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getLockedBy()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getOriginalPermalink()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getPermalink()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getPropertyChangeEvents()Ljava/util/List;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getSubtitle()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getTags()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getTagsAsCommaSeparated()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getTagsAsList()Ljava/util/List;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getTitle()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getTruncatedContent()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getUser()Lnet/sourceforge/pebble/security/PebbleUserDetails;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.hasEvents()Z
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.insertEvent(Lnet/sourceforge/pebble/api/event/PebbleEvent;)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.isAggregated()Z
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.isDirty()Z
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.isPersistent()Z
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.isPublished()Z
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.isUnpublished()Z
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.nextEvent()Lnet/sourceforge/pebble/api/event/PebbleEvent;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setBody(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setDate(Ljava/util/Date;)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setEventsEnabled(Z)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setLockedBy(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setOriginalPermalink(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setPersistent(Z)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setPublished(Z)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setSubtitle(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setTags(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setTitle(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): log
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#output(net.sourceforge.pebble.domain.PageBasedContent__static_init): net/sourceforge/pebble/domain/Permalinkable.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): net/sourceforge/pebble/domain/Permalinkable.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.addEvent(Lnet/sourceforge/pebble/api/event/PebbleEvent;)V == &net/sourceforge/pebble/domain/Content.addEvent
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.areEventsEnabled()Z == &net/sourceforge/pebble/domain/Content.areEventsEnabled
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.clearEvents()V == &net/sourceforge/pebble/domain/Content.clearEvents
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.clearPropertyChangeEvents()V == &net/sourceforge/pebble/domain/Content.clearPropertyChangeEvents
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getAllTags()Ljava/util/List; == &getAllTags
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getAuthor()Ljava/lang/String; == &getAuthor
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog; == &getBlog
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getBody()Ljava/lang/String; == &getBody
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getContent()Ljava/lang/String; == &getContent
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getDate()Ljava/util/Date; == &getDate
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getEvents()Ljava/util/List; == &net/sourceforge/pebble/domain/Content.getEvents
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getId()Ljava/lang/String; == &getId
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getLastModified()Ljava/util/Date; == &getLastModified
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getLocalPermalink()Ljava/lang/String; == &getLocalPermalink
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getLockedBy()Ljava/lang/String; == &getLockedBy
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getOriginalPermalink()Ljava/lang/String; == &getOriginalPermalink
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getPermalink()Ljava/lang/String; == &getPermalink
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getPropertyChangeEvents()Ljava/util/List; == &net/sourceforge/pebble/domain/Content.getPropertyChangeEvents
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State; == &net/sourceforge/pebble/domain/Content.getState
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getSubtitle()Ljava/lang/String; == &getSubtitle
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getTags()Ljava/lang/String; == &getTags
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getTagsAsCommaSeparated()Ljava/lang/String; == &getTagsAsCommaSeparated
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getTagsAsList()Ljava/util/List; == &getTagsAsList
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getTitle()Ljava/lang/String; == &getTitle
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getTruncatedContent()Ljava/lang/String; == &net/sourceforge/pebble/domain/Content.getTruncatedContent
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.getUser()Lnet/sourceforge/pebble/security/PebbleUserDetails; == &getUser
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.hasEvents()Z == &net/sourceforge/pebble/domain/Content.hasEvents
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.insertEvent(Lnet/sourceforge/pebble/api/event/PebbleEvent;)V == &net/sourceforge/pebble/domain/Content.insertEvent
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.isAggregated()Z == &isAggregated
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.isDirty()Z == &net/sourceforge/pebble/domain/Content.isDirty
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.isPersistent()Z == &isPersistent
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.isPublished()Z == &isPublished
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.isUnpublished()Z == &isUnpublished
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.nextEvent()Lnet/sourceforge/pebble/api/event/PebbleEvent; == &net/sourceforge/pebble/domain/Content.nextEvent
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setAuthor(Ljava/lang/String;)V == &setAuthor
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setBody(Ljava/lang/String;)V == &setBody
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setDate(Ljava/util/Date;)V == &setDate
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setEventsEnabled(Z)V == &net/sourceforge/pebble/domain/Content.setEventsEnabled
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setLockedBy(Ljava/lang/String;)V == &setLockedBy
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setOriginalPermalink(Ljava/lang/String;)V == &setOriginalPermalink
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setPersistent(Z)V == &setPersistent
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setPublished(Z)V == &setPublished
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V == &net/sourceforge/pebble/domain/Content.setState
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setSubtitle(Ljava/lang/String;)V == &setSubtitle
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setTags(Ljava/lang/String;)V == &setTags
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.setTitle(Ljava/lang/String;)V == &setTitle
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &toString
    //#post(net.sourceforge.pebble.domain.PageBasedContent__static_init): init'ed(log)
    //#pagebasedcontent.java:21: end of method: net.sourceforge.pebble.domain.PageBasedContent.net.sourceforge.pebble.domain.PageBasedContent__static_init

  public static final String TITLE_PROPERTY = "title";
  public static final String SUBTITLE_PROPERTY = "subtitle";
  public static final String BODY_PROPERTY = "body";
  public static final String AUTHOR_PROPERTY = "author";
  public static final String DATE_PROPERTY = "date";
  public static final String ORIGINAL_PERMALINK_PROPERTY = "originalPermalink";
  public static final String TAGS_PROPERTY = "tags";

  /**
   * the id
   */
  private String id;

  /**
   * the title
   */
  private String title = "";

  /**
   * the subtitle
   */
  private String subtitle = "";

  /**
   * the body
   */
  private String body = "";

  /**
   * the date that the content was created
   */
  private Date date;

  /**
   * the author of the blog entry
   */
  private String author = "";

  /** the enriched user details */
  private PebbleUserDetails user;

  /**
   * the alternative permalink for this blog entry
   */
  private String originalPermalink;

  /** the list of tags for this blog entry */
  private String tags = "";

  /** the List of tags for this blog entry */
  private List<Tag> tagsAsList = new LinkedList<Tag>();

  /** the tags, comma separated */
  private String tagsAsCommaSeparated = "";

  /** the owning blog */
  private Blog blog;

  private boolean persistent = false;
  private String lockedBy = null;

  /**
   * Creates a new blog entry.
   *
   * @param blog    the owning Blog
   */
  public PageBasedContent(Blog blog) {
    //#pagebasedcontent.java:89: method: void net.sourceforge.pebble.domain.PageBasedContent.net.sourceforge.pebble.domain.PageBasedContent(Blog)
    //#pagebasedcontent.java:89: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: void net.sourceforge.pebble.domain.PageBasedContent(Blog)
    //#    suspicious precondition index: [2]
    //#input(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): __Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): __Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): __Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): __Descendant_Table[others]
    //#input(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): __Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): blog
    //#input(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this
    //#input(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.__Tag
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new ArrayList(Content#1) num objects
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new ArrayList(Content#3) num objects
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new Date(PageBasedContent#2) num objects
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new LinkedList(PageBasedContent#1) num objects
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new PropertyChangeSupport(Content#2) num objects
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.__Tag
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.author
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.blog
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.body
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.date
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.events
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.eventsEnabled
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.id
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.lockedBy
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.permalink
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.persistent
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.propertyChangeEvents
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.propertyChangeSupport
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.subtitle
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.tags
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.tagsAsCommaSeparated
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.tagsAsList
    //#output(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.title
    //#new obj(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new ArrayList(Content#1)
    //#new obj(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new ArrayList(Content#3)
    //#new obj(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new Date(PageBasedContent#2)
    //#new obj(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new LinkedList(PageBasedContent#1)
    //#new obj(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new PropertyChangeSupport(Content#2)
    //#pre[2] (void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.__Tag in {net/sourceforge/pebble/domain/BlogEntry, net/sourceforge/pebble/domain/PageBasedContent, net/sourceforge/pebble/domain/StaticPage}
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.__Tag == old this.__Tag
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.__Tag in {net/sourceforge/pebble/domain/BlogEntry, net/sourceforge/pebble/domain/PageBasedContent, net/sourceforge/pebble/domain/StaticPage}
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.author == &""
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.body == &""
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.subtitle == &""
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.tags == &""
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.tagsAsCommaSeparated == &""
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.title == &""
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.blog == blog
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): init'ed(this.blog)
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): init'ed(this.date)
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.events == &new ArrayList(Content#1)
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): init'ed(this.eventsEnabled)
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): possibly_updated(this.id)
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): init'ed(this.lockedBy)
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.permalink == One-of{null, undefined}
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.permalink == null
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): init'ed(this.persistent)
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.propertyChangeEvents == &new ArrayList(Content#3)
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.propertyChangeSupport == &new PropertyChangeSupport(Content#2)
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): this.tagsAsList == &new LinkedList(PageBasedContent#1)
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new ArrayList(Content#1) num objects == 1
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new ArrayList(Content#3) num objects == 1
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new Date(PageBasedContent#2) num objects == 1
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new LinkedList(PageBasedContent#1) num objects == 1
    //#post(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): new PropertyChangeSupport(Content#2) num objects == 1
    //#unanalyzed(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): Effects-of-calling:java.beans.PropertyChangeSupport:firePropertyChange
    //#unanalyzed(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): Effects-of-calling:java.util.Date:getTime
    //#unanalyzed(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): Effects-of-calling:java.beans.PropertyChangeSupport
    //#unanalyzed(void net.sourceforge.pebble.domain.PageBasedContent(Blog)): Effects-of-calling:java.beans.PropertyChangeSupport:addPropertyChangeListener
    this.blog = blog;
    setDate(new Date());
  }
    //#pagebasedcontent.java:92: end of method: void net.sourceforge.pebble.domain.PageBasedContent.net.sourceforge.pebble.domain.PageBasedContent(Blog)

  /**
   * Gets the unique id of this blog entry.
   *
   * @return the id as a String
   */
  public String getId() {
    return id;
    //#pagebasedcontent.java:100: method: String net.sourceforge.pebble.domain.PageBasedContent.getId()
    //#input(String getId()): this
    //#input(String getId()): this.id
    //#output(String getId()): return_value
    //#pre[2] (String getId()): init'ed(this.id)
    //#post(String getId()): return_value == this.id
    //#post(String getId()): init'ed(return_value)
    //#pagebasedcontent.java:100: end of method: String net.sourceforge.pebble.domain.PageBasedContent.getId()
  }

  /**
   * Gets the title of this blog entry.
   *
   * @return the title as a String
   */
  public String getTitle() {
    return title;
    //#pagebasedcontent.java:109: method: String net.sourceforge.pebble.domain.PageBasedContent.getTitle()
    //#input(String getTitle()): this
    //#input(String getTitle()): this.title
    //#output(String getTitle()): return_value
    //#pre[2] (String getTitle()): init'ed(this.title)
    //#post(String getTitle()): return_value == this.title
    //#post(String getTitle()): init'ed(return_value)
    //#pagebasedcontent.java:109: end of method: String net.sourceforge.pebble.domain.PageBasedContent.getTitle()
  }

  /**
   * Sets the title of this blog entry.
   *
   * @param newTitle  the title as a String
   */
  public void setTitle(String newTitle) {
	newTitle = newTitle;
    //#pagebasedcontent.java:118: method: void net.sourceforge.pebble.domain.PageBasedContent.setTitle(String)
    //#input(void setTitle(String)): newTitle
    //#input(void setTitle(String)): this
    //#input(void setTitle(String)): this.propertyChangeSupport
    //#input(void setTitle(String)): this.title
    //#output(void setTitle(String)): this.title
    //#pre[2] (void setTitle(String)): init'ed(this.title)
    //#pre[4] (void setTitle(String)): this.propertyChangeSupport != null
    //#post(void setTitle(String)): this.title == newTitle
    //#post(void setTitle(String)): init'ed(this.title)
    propertyChangeSupport.firePropertyChange(TITLE_PROPERTY, title, newTitle);
    this.title = newTitle;
  }
    //#pagebasedcontent.java:121: end of method: void net.sourceforge.pebble.domain.PageBasedContent.setTitle(String)

  /**
   * Gets the subtitle of this blog entry.
   *
   * @return the subtitle as a String
   */
  public String getSubtitle() {
    return subtitle;
    //#pagebasedcontent.java:129: method: String net.sourceforge.pebble.domain.PageBasedContent.getSubtitle()
    //#input(String getSubtitle()): this
    //#input(String getSubtitle()): this.subtitle
    //#output(String getSubtitle()): return_value
    //#pre[2] (String getSubtitle()): init'ed(this.subtitle)
    //#post(String getSubtitle()): return_value == this.subtitle
    //#post(String getSubtitle()): init'ed(return_value)
    //#pagebasedcontent.java:129: end of method: String net.sourceforge.pebble.domain.PageBasedContent.getSubtitle()
  }

  /**
   * Sets the subtitle of this blog entry.
   *
   * @param newSubtitle  the subtitle as a String
   */
  public void setSubtitle(String newSubtitle) {
	//newSubtitle = StringUtils.transformHTML(newSubtitle);
    propertyChangeSupport.firePropertyChange(SUBTITLE_PROPERTY, subtitle, newSubtitle);
    //#pagebasedcontent.java:139: method: void net.sourceforge.pebble.domain.PageBasedContent.setSubtitle(String)
    //#input(void setSubtitle(String)): newSubtitle
    //#input(void setSubtitle(String)): this
    //#input(void setSubtitle(String)): this.propertyChangeSupport
    //#input(void setSubtitle(String)): this.subtitle
    //#output(void setSubtitle(String)): this.subtitle
    //#pre[2] (void setSubtitle(String)): init'ed(this.subtitle)
    //#pre[4] (void setSubtitle(String)): this.propertyChangeSupport != null
    //#post(void setSubtitle(String)): this.subtitle == newSubtitle
    //#post(void setSubtitle(String)): init'ed(this.subtitle)
    this.subtitle = newSubtitle;
  }
    //#pagebasedcontent.java:141: end of method: void net.sourceforge.pebble.domain.PageBasedContent.setSubtitle(String)

  /**
   * Gets the body of this blog entry.
   *
   * @return the body as a String
   */
  public String getBody() {
    return body;
    //#pagebasedcontent.java:149: method: String net.sourceforge.pebble.domain.PageBasedContent.getBody()
    //#input(String getBody()): this
    //#input(String getBody()): this.body
    //#output(String getBody()): return_value
    //#pre[2] (String getBody()): init'ed(this.body)
    //#post(String getBody()): return_value == this.body
    //#post(String getBody()): init'ed(return_value)
    //#pagebasedcontent.java:149: end of method: String net.sourceforge.pebble.domain.PageBasedContent.getBody()
  }

  /**
   * Gets the content of this response.
   *
   * @return a String
   */
  public String getContent() {
    return body;
    //#pagebasedcontent.java:158: method: String net.sourceforge.pebble.domain.PageBasedContent.getContent()
    //#input(String getContent()): this
    //#input(String getContent()): this.body
    //#output(String getContent()): return_value
    //#pre[2] (String getContent()): init'ed(this.body)
    //#post(String getContent()): return_value == this.body
    //#post(String getContent()): init'ed(return_value)
    //#pagebasedcontent.java:158: end of method: String net.sourceforge.pebble.domain.PageBasedContent.getContent()
  }

  /**
   * Sets the body of this blog entry.
   *
   * @param newBody the body as a String
   */
  public void setBody(String newBody) {
    propertyChangeSupport.firePropertyChange(BODY_PROPERTY, body, newBody);
    //#pagebasedcontent.java:167: method: void net.sourceforge.pebble.domain.PageBasedContent.setBody(String)
    //#input(void setBody(String)): newBody
    //#input(void setBody(String)): this
    //#input(void setBody(String)): this.body
    //#input(void setBody(String)): this.propertyChangeSupport
    //#output(void setBody(String)): this.body
    //#pre[2] (void setBody(String)): init'ed(this.body)
    //#pre[4] (void setBody(String)): this.propertyChangeSupport != null
    //#post(void setBody(String)): this.body == newBody
    //#post(void setBody(String)): init'ed(this.body)
    this.body = newBody;
  }
    //#pagebasedcontent.java:169: end of method: void net.sourceforge.pebble.domain.PageBasedContent.setBody(String)

  /**
   * Gets the date that this blog entry was created.
   *
   * @return a java.util.Date instance
   */
  public Date getDate() {
    return date;
    //#pagebasedcontent.java:177: method: Date net.sourceforge.pebble.domain.PageBasedContent.getDate()
    //#input(Date getDate()): this
    //#input(Date getDate()): this.date
    //#output(Date getDate()): return_value
    //#pre[2] (Date getDate()): init'ed(this.date)
    //#post(Date getDate()): return_value == this.date
    //#post(Date getDate()): init'ed(return_value)
    //#pagebasedcontent.java:177: end of method: Date net.sourceforge.pebble.domain.PageBasedContent.getDate()
  }

  /**
   * Gets the date that this blog entry was last updated.
   *
   * @return  a Date instance representing the time of the last comment/TrackBack
   */
  public Date getLastModified() {
    return date;
    //#pagebasedcontent.java:186: method: Date net.sourceforge.pebble.domain.PageBasedContent.getLastModified()
    //#input(Date getLastModified()): this
    //#input(Date getLastModified()): this.date
    //#output(Date getLastModified()): return_value
    //#pre[2] (Date getLastModified()): init'ed(this.date)
    //#post(Date getLastModified()): return_value == this.date
    //#post(Date getLastModified()): init'ed(return_value)
    //#pagebasedcontent.java:186: end of method: Date net.sourceforge.pebble.domain.PageBasedContent.getLastModified()
  }

  /**
   * Sets the date that this blog entry was created.
   *
   * @param newDate a java.util.Date instance
   */
  public void setDate(Date newDate) {
    propertyChangeSupport.firePropertyChange(DATE_PROPERTY, date, newDate);
    //#pagebasedcontent.java:195: method: void net.sourceforge.pebble.domain.PageBasedContent.setDate(Date)
    //#input(void setDate(Date)): newDate
    //#input(void setDate(Date)): this
    //#input(void setDate(Date)): this.date
    //#input(void setDate(Date)): this.propertyChangeSupport
    //#output(void setDate(Date)): this.date
    //#output(void setDate(Date)): this.id
    //#pre[1] (void setDate(Date)): newDate != null
    //#pre[2] (void setDate(Date)): init'ed(this.date)
    //#pre[4] (void setDate(Date)): this.propertyChangeSupport != null
    //#post(void setDate(Date)): this.date == newDate
    //#post(void setDate(Date)): this.date != null
    //#post(void setDate(Date)): this.id != null
    this.date = newDate;
    this.id = "" + this.date.getTime();
  }
    //#pagebasedcontent.java:198: end of method: void net.sourceforge.pebble.domain.PageBasedContent.setDate(Date)

  /**
   * Gets the author of this blog entry.
   *
   * @return the author as a String
   */
  public String getAuthor() {
    return author;
    //#pagebasedcontent.java:206: method: String net.sourceforge.pebble.domain.PageBasedContent.getAuthor()
    //#input(String getAuthor()): this
    //#input(String getAuthor()): this.author
    //#output(String getAuthor()): return_value
    //#pre[2] (String getAuthor()): init'ed(this.author)
    //#post(String getAuthor()): return_value == this.author
    //#post(String getAuthor()): init'ed(return_value)
    //#pagebasedcontent.java:206: end of method: String net.sourceforge.pebble.domain.PageBasedContent.getAuthor()
  }

  /**
   * Gets full user details about the author including name, email-address, etc.
   *
   * @return  a PebbleUserDetails instance
   */
  public PebbleUserDetails getUser() {
    if (this.user == null) {
    //#pagebasedcontent.java:215: method: PebbleUserDetails net.sourceforge.pebble.domain.PageBasedContent.getUser()
    //#pagebasedcontent.java:215: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: PebbleUserDetails getUser()
    //#    suspicious precondition index: [3]
    //#    Attribs:  Soft
    //#input(PebbleUserDetails getUser()): __Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(PebbleUserDetails getUser()): __Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(PebbleUserDetails getUser()): __Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(PebbleUserDetails getUser()): __Descendant_Table[others]
    //#input(PebbleUserDetails getUser()): __Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(PebbleUserDetails getUser()): log
    //#input(PebbleUserDetails getUser()): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(PebbleUserDetails getUser()): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(PebbleUserDetails getUser()): net/sourceforge/pebble/Configuration.__Dispatch_Table.getSecurityRealm()Lnet/sourceforge/pebble/security/SecurityRealm;
    //#input(PebbleUserDetails getUser()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(PebbleUserDetails getUser()): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(PebbleUserDetails getUser()): this
    //#input(PebbleUserDetails getUser()): this.__Tag
    //#input(PebbleUserDetails getUser()): this.author
    //#input(PebbleUserDetails getUser()): this.user
    //#output(PebbleUserDetails getUser()): return_value
    //#output(PebbleUserDetails getUser()): this.user
    //#pre[1] (PebbleUserDetails getUser()): init'ed(this.user)
    //#pre[3] (PebbleUserDetails getUser()): (soft) this.__Tag in {net/sourceforge/pebble/domain/BlogEntry, net/sourceforge/pebble/domain/PageBasedContent, net/sourceforge/pebble/domain/StaticPage}
    //#pre[4] (PebbleUserDetails getUser()): (soft) init'ed(this.author)
    //#presumption(PebbleUserDetails getUser()): net.sourceforge.pebble.PebbleContext:getConfiguration(...).__Tag@216 == net/sourceforge/pebble/Configuration
    //#presumption(PebbleUserDetails getUser()): net.sourceforge.pebble.PebbleContext:getConfiguration(...).securityRealm@216 != null
    //#presumption(PebbleUserDetails getUser()): net.sourceforge.pebble.PebbleContext:getConfiguration(...)@216 != null
    //#presumption(PebbleUserDetails getUser()): net.sourceforge.pebble.PebbleContext:getInstance(...)@216 != null
    //#presumption(PebbleUserDetails getUser()): org.apache.commons.logging.LogFactory:getLog(...)@21 != null
    //#post(PebbleUserDetails getUser()): init'ed(return_value)
    //#post(PebbleUserDetails getUser()): this.user == return_value
    //#test_vector(PebbleUserDetails getUser()): this.user: Inverse{null}, Addr_Set{null}
      SecurityRealm realm = PebbleContext.getInstance().getConfiguration().getSecurityRealm();
    //#pagebasedcontent.java:216: Warning: method not available
    //#    -- call on PebbleContext net.sourceforge.pebble.PebbleContext:getInstance()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: PebbleUserDetails getUser()
    //#    unanalyzed callee: PebbleContext net.sourceforge.pebble.PebbleContext:getInstance()
    //#pagebasedcontent.java:216: Warning: method not available
    //#    -- call on Configuration net.sourceforge.pebble.PebbleContext:getConfiguration()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: PebbleUserDetails getUser()
    //#    unanalyzed callee: Configuration net.sourceforge.pebble.PebbleContext:getConfiguration()
      try {
        this.user = realm.getUser(getAuthor());
    //#pagebasedcontent.java:218: Warning: method not available
    //#    -- call on PebbleUserDetails net.sourceforge.pebble.security.SecurityRealm:getUser(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: PebbleUserDetails getUser()
    //#    unanalyzed callee: PebbleUserDetails net.sourceforge.pebble.security.SecurityRealm:getUser(String)
      } catch (SecurityRealmException e) {
        log.error("Exception encountered", e);
    //#pagebasedcontent.java:220: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: PebbleUserDetails getUser()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
      }
    }

    return this.user;
    //#pagebasedcontent.java:224: end of method: PebbleUserDetails net.sourceforge.pebble.domain.PageBasedContent.getUser()
  }

  /**
   * Sets the author of this blog entry.
   *
   * @param newAuthor the author as a String
   */
  public void setAuthor(String newAuthor) {
    this.author = StringUtils.transformHTML(newAuthor);
    //#pagebasedcontent.java:233: method: void net.sourceforge.pebble.domain.PageBasedContent.setAuthor(String)
    //#pagebasedcontent.java:233: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.util.StringUtils:transformHTML(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: void setAuthor(String)
    //#    unanalyzed callee: String net.sourceforge.pebble.util.StringUtils:transformHTML(String)
    //#input(void setAuthor(String)): newAuthor
    //#input(void setAuthor(String)): this
    //#output(void setAuthor(String)): this.author
    //#post(void setAuthor(String)): init'ed(this.author)
  }
    //#pagebasedcontent.java:234: end of method: void net.sourceforge.pebble.domain.PageBasedContent.setAuthor(String)

  /**
   * Gets the tags associated with this category.
   *
   * @return  a list of tags
   */
  public String getTags() {
    return this.tags;
    //#pagebasedcontent.java:242: method: String net.sourceforge.pebble.domain.PageBasedContent.getTags()
    //#input(String getTags()): this
    //#input(String getTags()): this.tags
    //#output(String getTags()): return_value
    //#pre[2] (String getTags()): init'ed(this.tags)
    //#post(String getTags()): return_value == this.tags
    //#post(String getTags()): init'ed(return_value)
    //#pagebasedcontent.java:242: end of method: String net.sourceforge.pebble.domain.PageBasedContent.getTags()
  }

  /**
   * Gets the tags associated with this category, as a List.
   *
   * @return  a List of tags
   */
  public List<Tag> getTagsAsList() {
    return this.tagsAsList;
    //#pagebasedcontent.java:251: method: List net.sourceforge.pebble.domain.PageBasedContent.getTagsAsList()
    //#input(List getTagsAsList()): this
    //#input(List getTagsAsList()): this.tagsAsList
    //#output(List getTagsAsList()): return_value
    //#pre[2] (List getTagsAsList()): init'ed(this.tagsAsList)
    //#post(List getTagsAsList()): return_value == this.tagsAsList
    //#post(List getTagsAsList()): init'ed(return_value)
    //#pagebasedcontent.java:251: end of method: List net.sourceforge.pebble.domain.PageBasedContent.getTagsAsList()
  }

  /**
   * Gets a list of all tags, as a comma separated string.
   *
   * @return    a comma separated String of tags
   */
  public String getTagsAsCommaSeparated() {
    return this.tagsAsCommaSeparated;
    //#pagebasedcontent.java:260: method: String net.sourceforge.pebble.domain.PageBasedContent.getTagsAsCommaSeparated()
    //#input(String getTagsAsCommaSeparated()): this
    //#input(String getTagsAsCommaSeparated()): this.tagsAsCommaSeparated
    //#output(String getTagsAsCommaSeparated()): return_value
    //#pre[2] (String getTagsAsCommaSeparated()): init'ed(this.tagsAsCommaSeparated)
    //#post(String getTagsAsCommaSeparated()): return_value == this.tagsAsCommaSeparated
    //#post(String getTagsAsCommaSeparated()): init'ed(return_value)
    //#pagebasedcontent.java:260: end of method: String net.sourceforge.pebble.domain.PageBasedContent.getTagsAsCommaSeparated()
  }

  /**
   * Gets a list of all tags.
   *
   * @return  a List of tags
   */
  public abstract List<Tag> getAllTags();

  /**
   * Sets the set of tags associated with this category.
   *
   * @param newTags    a set of tags
   */
  public void setTags(String newTags) {
    if (newTags != null && newTags.indexOf(",") > -1) {
    //#pagebasedcontent.java:276: method: void net.sourceforge.pebble.domain.PageBasedContent.setTags(String)
    //#pagebasedcontent.java:276: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: void setTags(String)
    //#    suspicious precondition index: [4]
    //#input(void setTags(String)): __Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void setTags(String)): __Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(void setTags(String)): __Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void setTags(String)): __Descendant_Table[others]
    //#input(void setTags(String)): __Dispatch_Table.getAllTags()Ljava/util/List;
    //#input(void setTags(String)): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getRootCategory()Lnet/sourceforge/pebble/domain/Category;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void setTags(String)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(void setTags(String)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getAllTags()Ljava/util/List;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getCategories()Ljava/util/Set;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getTagsAsList()Ljava/util/List;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Category.__Descendant_Table[net/sourceforge/pebble/domain/Category]
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Category.__Descendant_Table[others]
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Category.__Dispatch_Table.getAllTags()Ljava/util/List;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Category.__Dispatch_Table.getParent()Lnet/sourceforge/pebble/domain/Category;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Category.__Dispatch_Table.getTagsAsList()Ljava/util/List;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/StaticPage.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void setTags(String)): net/sourceforge/pebble/domain/StaticPage.__Descendant_Table[others]
    //#input(void setTags(String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getAllTags()Ljava/util/List;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getTagsAsList()Ljava/util/List;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Tag.__Descendant_Table[net/sourceforge/pebble/domain/Tag]
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Tag.__Descendant_Table[net/sourceforge/pebble/index/IndexedTag]
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Tag.__Descendant_Table[others]
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Tag.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void setTags(String)): net/sourceforge/pebble/domain/Tag.__Dispatch_Table.setName(Ljava/lang/String;)V
    //#input(void setTags(String)): net/sourceforge/pebble/index/IndexedTag.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void setTags(String)): net/sourceforge/pebble/index/IndexedTag.__Dispatch_Table.setName(Ljava/lang/String;)V
    //#input(void setTags(String)): newTags
    //#input(void setTags(String)): this
    //#input(void setTags(String)): this.__Tag
    //#input(void setTags(String)): this.blog
    //#input(void setTags(String)): this.blog.__Tag
    //#input(void setTags(String)): this.blog.rootCategory...__Tag
    //#input(void setTags(String)): this.blog.rootCategory.__Tag
    //#input(void setTags(String)): this.propertyChangeSupport
    //#input(void setTags(String)): this.tags
    //#output(void setTags(String)): new ArrayList(parse#1) num objects
    //#output(void setTags(String)): this.tags
    //#output(void setTags(String)): this.tagsAsCommaSeparated
    //#output(void setTags(String)): this.tagsAsList
    //#new obj(void setTags(String)): new ArrayList(parse#1)
    //#pre[2] (void setTags(String)): init'ed(this.tags)
    //#pre[4] (void setTags(String)): this.__Tag in {net/sourceforge/pebble/domain/BlogEntry, net/sourceforge/pebble/domain/StaticPage}
    //#pre[5] (void setTags(String)): init'ed(this.blog)
    //#pre[15] (void setTags(String)): this.propertyChangeSupport != null
    //#post(void setTags(String)): init'ed(this.tags)
    //#post(void setTags(String)): this.tagsAsCommaSeparated != null
    //#post(void setTags(String)): this.tagsAsList == &new ArrayList(parse#1)
    //#post(void setTags(String)): new ArrayList(parse#1) num objects == 1
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.lang.String:trim
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.lang.String:toLowerCase
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.lang.String:replaceAll
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void setTags(String)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:transformHTML
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void setTags(String)): Effects-of-calling:getTagsAsList
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.Set:size
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void setTags(String)): Effects-of-calling:java.util.Collections:reverse
    //#unanalyzed(void setTags(String)): Effects-of-calling:getRootCategory
    //#test_vector(void setTags(String)): newTags: Addr_Set{null}, Inverse{null}
    //#test_vector(void setTags(String)): java.lang.String:indexOf(...)@276: {-2_147_483_648..-1}, {0..4_294_967_295}
      // if the tags have been comma separated, convert them to
      // whitespace separated by
      // - remove whitespace
      // - convert commas to whitespace
      newTags = newTags.replaceAll(" ", "").replaceAll(",", " ");
    }
    propertyChangeSupport.firePropertyChange(TAGS_PROPERTY, tags, newTags);
    this.tags = newTags;
    this.tagsAsList = Tag.parse(getBlog(), tags);
    this.tagsAsCommaSeparated = Tag.format(getAllTags());
    //#pagebasedcontent.java:286: Warning: method not available
    //#    -- call on List getAllTags()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: void setTags(String)
    //#    unanalyzed callee: List getAllTags()
  }
    //#pagebasedcontent.java:287: end of method: void net.sourceforge.pebble.domain.PageBasedContent.setTags(String)

  /**
   * Determines whether this blog entry has been aggregated from another
   * source. An aggregated blog entry will have a specified permalink.
   *
   * @return true if this blog entry has been aggegrated, false otherwise
   */
  public boolean isAggregated() {
    return (originalPermalink != null);
    //#pagebasedcontent.java:296: method: bool net.sourceforge.pebble.domain.PageBasedContent.isAggregated()
    //#input(bool isAggregated()): this
    //#input(bool isAggregated()): this.originalPermalink
    //#output(bool isAggregated()): return_value
    //#pre[2] (bool isAggregated()): init'ed(this.originalPermalink)
    //#post(bool isAggregated()): init'ed(return_value)
    //#test_vector(bool isAggregated()): this.originalPermalink: Addr_Set{null}, Inverse{null}
    //#pagebasedcontent.java:296: end of method: bool net.sourceforge.pebble.domain.PageBasedContent.isAggregated()
  }

  /**
   * Gets the alternative permalink for this blog entry.
   *
   * @return an absolute URL as a String
   */
  public String getOriginalPermalink() {
    return this.originalPermalink;
    //#pagebasedcontent.java:305: method: String net.sourceforge.pebble.domain.PageBasedContent.getOriginalPermalink()
    //#input(String getOriginalPermalink()): this
    //#input(String getOriginalPermalink()): this.originalPermalink
    //#output(String getOriginalPermalink()): return_value
    //#pre[2] (String getOriginalPermalink()): init'ed(this.originalPermalink)
    //#post(String getOriginalPermalink()): return_value == this.originalPermalink
    //#post(String getOriginalPermalink()): init'ed(return_value)
    //#pagebasedcontent.java:305: end of method: String net.sourceforge.pebble.domain.PageBasedContent.getOriginalPermalink()
  }

  /**
   * Sets the alternative permalink for this blog entry.
   *
   * @param newPermalink an absolute URL as a String
   */
  public void setOriginalPermalink(String newPermalink) {
	newPermalink = StringUtils.transformHTML(newPermalink);
    //#pagebasedcontent.java:314: method: void net.sourceforge.pebble.domain.PageBasedContent.setOriginalPermalink(String)
    //#pagebasedcontent.java:314: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.util.StringUtils:transformHTML(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: void setOriginalPermalink(String)
    //#    unanalyzed callee: String net.sourceforge.pebble.util.StringUtils:transformHTML(String)
    //#input(void setOriginalPermalink(String)): newPermalink
    //#input(void setOriginalPermalink(String)): this
    //#input(void setOriginalPermalink(String)): this.originalPermalink
    //#input(void setOriginalPermalink(String)): this.propertyChangeSupport
    //#output(void setOriginalPermalink(String)): this.originalPermalink
    //#pre[2] (void setOriginalPermalink(String)): init'ed(this.originalPermalink)
    //#pre[4] (void setOriginalPermalink(String)): this.propertyChangeSupport != null
    //#post(void setOriginalPermalink(String)): init'ed(this.originalPermalink)
    //#test_vector(void setOriginalPermalink(String)): java.lang.String:length(...)@315: {1..4_294_967_295}, {0}
    //#test_vector(void setOriginalPermalink(String)): net.sourceforge.pebble.util.StringUtils:transformHTML(...)@314: Addr_Set{null}, Inverse{null}
    if (newPermalink == null || newPermalink.length() == 0) {
      propertyChangeSupport.firePropertyChange(ORIGINAL_PERMALINK_PROPERTY, originalPermalink, null);
      this.originalPermalink = null;
    } else {
      propertyChangeSupport.firePropertyChange(ORIGINAL_PERMALINK_PROPERTY, originalPermalink, newPermalink);
      this.originalPermalink = newPermalink;
    }
  }
    //#pagebasedcontent.java:322: end of method: void net.sourceforge.pebble.domain.PageBasedContent.setOriginalPermalink(String)

  /**
   * Gets a permalink for this blog entry.
   *
   * @return an absolute URL as a String
   */
  public String getPermalink() {
    if (isAggregated()) {
    //#pagebasedcontent.java:330: method: String net.sourceforge.pebble.domain.PageBasedContent.getPermalink()
    //#pagebasedcontent.java:330: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: String getPermalink()
    //#    suspicious precondition index: [6]
    //#    Attribs:  Soft
    //#input(String getPermalink()): __Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(String getPermalink()): __Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(String getPermalink()): __Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(String getPermalink()): __Descendant_Table[others]
    //#input(String getPermalink()): __Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(String getPermalink()): __Dispatch_Table.getOriginalPermalink()Ljava/lang/String;
    //#input(String getPermalink()): __Dispatch_Table.isAggregated()Z
    //#input(String getPermalink()): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(String getPermalink()): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(String getPermalink()): net/sourceforge/pebble/Configuration.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/Configuration.__Dispatch_Table.isVirtualHostingEnabled()Z
    //#input(String getPermalink()): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[net/sourceforge/pebble/api/permalink/PermalinkProvider]
    //#input(String getPermalink()): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[others]
    //#input(String getPermalink()): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Dispatch_Table.getPermalink(Lnet/sourceforge/pebble/domain/BlogEntry;)Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getPermalinkProvider()Lnet/sourceforge/pebble/api/permalink/PermalinkProvider;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getOriginalPermalink()Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.isAggregated()Z
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[others]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.__Dispatch_Table.isMultiBlog()Z
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.instance
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.instance.multiBlog
    //#input(String getPermalink()): net/sourceforge/pebble/domain/StaticPage.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/StaticPage.__Descendant_Table[others]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getOriginalPermalink()Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.isAggregated()Z
    //#input(String getPermalink()): this
    //#input(String getPermalink()): this.__Tag
    //#input(String getPermalink()): this.blog
    //#input(String getPermalink()): this.blog.__Tag
    //#input(String getPermalink()): this.blog.id
    //#input(String getPermalink()): this.blog.permalinkProvider.__Tag
    //#input(String getPermalink()): this.originalPermalink
    //#output(String getPermalink()): return_value
    //#output(String getPermalink()): this.permalink
    //#pre[13] (String getPermalink()): init'ed(this.originalPermalink)
    //#pre[1] (String getPermalink()): (soft) net/sourceforge/pebble/domain/BlogManager.instance != null
    //#pre[2] (String getPermalink()): (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#pre[3] (String getPermalink()): (soft) init'ed(net/sourceforge/pebble/domain/BlogManager.instance.multiBlog)
    //#pre[6] (String getPermalink()): (soft) this.__Tag in {net/sourceforge/pebble/domain/BlogEntry, net/sourceforge/pebble/domain/StaticPage}
    //#pre[7] (String getPermalink()): (soft) this.blog != null
    //#pre[8] (String getPermalink()): (soft) this.blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[9] (String getPermalink()): (soft) init'ed(this.blog.id)
    //#post(String getPermalink()): init'ed(return_value)
    //#post(String getPermalink()): possibly_updated(this.permalink)
    //#unanalyzed(String getPermalink()): Effects-of-calling:getBlog
    //#unanalyzed(String getPermalink()): Effects-of-calling:getUrl
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(String getPermalink()): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(String getPermalink()): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(String getPermalink()): Effects-of-calling:getPermalinkProvider
    //#unanalyzed(String getPermalink()): Effects-of-calling:getPermalink
    //#test_vector(String getPermalink()): this.originalPermalink: Addr_Set{null}, Inverse{null}
      return getOriginalPermalink();
    } else {
      return getLocalPermalink();
    //#pagebasedcontent.java:333: Warning: method not available
    //#    -- call on String getLocalPermalink()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: String getPermalink()
    //#    unanalyzed callee: String getLocalPermalink()
    //#pagebasedcontent.java:333: end of method: String net.sourceforge.pebble.domain.PageBasedContent.getPermalink()
    }
  }

  /**
   * Gets a permalink for this blog entry that is local to the blog. In other
   * words, it doesn't take into account the original permalink for
   * aggregated content.
   *
   * @return an absolute URL as a String
   */
  public abstract String getLocalPermalink();

  /**
   * Helper method to get the owning Blog instance.
   *
   * @return the overall owning Blog instance
   */
  public Blog getBlog() {
    return this.blog;
    //#pagebasedcontent.java:352: method: Blog net.sourceforge.pebble.domain.PageBasedContent.getBlog()
    //#input(Blog getBlog()): this
    //#input(Blog getBlog()): this.blog
    //#output(Blog getBlog()): return_value
    //#pre[2] (Blog getBlog()): init'ed(this.blog)
    //#post(Blog getBlog()): return_value == this.blog
    //#post(Blog getBlog()): init'ed(return_value)
    //#pagebasedcontent.java:352: end of method: Blog net.sourceforge.pebble.domain.PageBasedContent.getBlog()
  }

  /**
   * Gets a string representation of this object.
   *
   * @return  a String
   */
  public String toString() {
    return getBlog().getId() + "/" + getTitle();
    //#pagebasedcontent.java:361: method: String net.sourceforge.pebble.domain.PageBasedContent.toString()
    //#pagebasedcontent.java:361: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: String toString()
    //#    suspicious precondition index: [2]
    //#input(String toString()): __Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(String toString()): __Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(String toString()): __Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(String toString()): __Descendant_Table[others]
    //#input(String toString()): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(String toString()): __Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(String toString()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(String toString()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(String toString()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(String toString()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(String toString()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(String toString()): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(String toString()): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(String toString()): this
    //#input(String toString()): this.__Tag
    //#input(String toString()): this.blog
    //#input(String toString()): this.blog.__Tag
    //#input(String toString()): this.blog.id
    //#input(String toString()): this.title
    //#output(String toString()): return_value
    //#pre[2] (String toString()): this.__Tag in {net/sourceforge/pebble/domain/BlogEntry, net/sourceforge/pebble/domain/PageBasedContent, net/sourceforge/pebble/domain/StaticPage}
    //#pre[3] (String toString()): this.blog != null
    //#pre[4] (String toString()): this.blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[5] (String toString()): init'ed(this.blog.id)
    //#pre[6] (String toString()): init'ed(this.title)
    //#post(String toString()): return_value != null
    //#pagebasedcontent.java:361: end of method: String net.sourceforge.pebble.domain.PageBasedContent.toString()
  }

  public boolean isPersistent() {
    return persistent;
    //#pagebasedcontent.java:365: method: bool net.sourceforge.pebble.domain.PageBasedContent.isPersistent()
    //#input(bool isPersistent()): this
    //#input(bool isPersistent()): this.persistent
    //#output(bool isPersistent()): return_value
    //#pre[2] (bool isPersistent()): init'ed(this.persistent)
    //#post(bool isPersistent()): return_value == this.persistent
    //#post(bool isPersistent()): init'ed(return_value)
    //#pagebasedcontent.java:365: end of method: bool net.sourceforge.pebble.domain.PageBasedContent.isPersistent()
  }

  public void setPersistent(boolean persistent) {
    this.persistent = persistent;
    //#pagebasedcontent.java:369: method: void net.sourceforge.pebble.domain.PageBasedContent.setPersistent(bool)
    //#input(void setPersistent(bool)): persistent
    //#input(void setPersistent(bool)): this
    //#output(void setPersistent(bool)): this.persistent
    //#post(void setPersistent(bool)): this.persistent == persistent
    //#post(void setPersistent(bool)): init'ed(this.persistent)
  }
    //#pagebasedcontent.java:370: end of method: void net.sourceforge.pebble.domain.PageBasedContent.setPersistent(bool)

  /**
   * Determines whether this content is published.
   *
   * @return  true if the state is published, false otherwise
   */
  public boolean isPublished() {
    return getState().equals(State.PUBLISHED);
    //#pagebasedcontent.java:378: method: bool net.sourceforge.pebble.domain.PageBasedContent.isPublished()
    //#pagebasedcontent.java:378: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: bool isPublished()
    //#    suspicious precondition index: [3]
    //#input(bool isPublished()): __Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(bool isPublished()): __Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(bool isPublished()): __Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(bool isPublished()): __Descendant_Table[others]
    //#input(bool isPublished()): __Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(bool isPublished()): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#5).__Tag
    //#input(bool isPublished()): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#5).name
    //#input(bool isPublished()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(bool isPublished()): net/sourceforge/pebble/domain/State.PUBLISHED
    //#input(bool isPublished()): net/sourceforge/pebble/domain/State.__Descendant_Table[net/sourceforge/pebble/domain/State]
    //#input(bool isPublished()): net/sourceforge/pebble/domain/State.__Descendant_Table[others]
    //#input(bool isPublished()): net/sourceforge/pebble/domain/State.__Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#input(bool isPublished()): net/sourceforge/pebble/domain/State.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(bool isPublished()): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(bool isPublished()): this
    //#input(bool isPublished()): this.__Tag
    //#input(bool isPublished()): this.state
    //#input(bool isPublished()): this.state.__Tag
    //#input(bool isPublished()): this.state.name
    //#output(bool isPublished()): return_value
    //#pre[3] (bool isPublished()): this.__Tag in {net/sourceforge/pebble/domain/BlogEntry, net/sourceforge/pebble/domain/PageBasedContent, net/sourceforge/pebble/domain/StaticPage}
    //#pre[4] (bool isPublished()): this.state != null
    //#pre[5] (bool isPublished()): this.state.__Tag == net/sourceforge/pebble/domain/State
    //#pre[1] (bool isPublished()): (soft) net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#5).name != null
    //#pre[6] (bool isPublished()): (soft) init'ed(this.state.name)
    //#post(bool isPublished()): init'ed(return_value)
    //#unanalyzed(bool isPublished()): Effects-of-calling:java.lang.String:equals
    //#pagebasedcontent.java:378: end of method: bool net.sourceforge.pebble.domain.PageBasedContent.isPublished()
  }

  /**
   * Determines whether this content is unpublished.
   *
   * @return  true if the state is unpublished, false otherwise
   */
  public boolean isUnpublished() {
    return getState().equals(State.UNPUBLISHED);
    //#pagebasedcontent.java:387: method: bool net.sourceforge.pebble.domain.PageBasedContent.isUnpublished()
    //#pagebasedcontent.java:387: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: bool isUnpublished()
    //#    suspicious precondition index: [3]
    //#input(bool isUnpublished()): __Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(bool isUnpublished()): __Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(bool isUnpublished()): __Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(bool isUnpublished()): __Descendant_Table[others]
    //#input(bool isUnpublished()): __Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(bool isUnpublished()): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#4).__Tag
    //#input(bool isUnpublished()): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#4).name
    //#input(bool isUnpublished()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(bool isUnpublished()): net/sourceforge/pebble/domain/State.UNPUBLISHED
    //#input(bool isUnpublished()): net/sourceforge/pebble/domain/State.__Descendant_Table[net/sourceforge/pebble/domain/State]
    //#input(bool isUnpublished()): net/sourceforge/pebble/domain/State.__Descendant_Table[others]
    //#input(bool isUnpublished()): net/sourceforge/pebble/domain/State.__Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#input(bool isUnpublished()): net/sourceforge/pebble/domain/State.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(bool isUnpublished()): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(bool isUnpublished()): this
    //#input(bool isUnpublished()): this.__Tag
    //#input(bool isUnpublished()): this.state
    //#input(bool isUnpublished()): this.state.__Tag
    //#input(bool isUnpublished()): this.state.name
    //#output(bool isUnpublished()): return_value
    //#pre[3] (bool isUnpublished()): this.__Tag in {net/sourceforge/pebble/domain/BlogEntry, net/sourceforge/pebble/domain/PageBasedContent, net/sourceforge/pebble/domain/StaticPage}
    //#pre[4] (bool isUnpublished()): this.state != null
    //#pre[5] (bool isUnpublished()): this.state.__Tag == net/sourceforge/pebble/domain/State
    //#pre[1] (bool isUnpublished()): (soft) net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#4).name != null
    //#pre[6] (bool isUnpublished()): (soft) init'ed(this.state.name)
    //#post(bool isUnpublished()): init'ed(return_value)
    //#unanalyzed(bool isUnpublished()): Effects-of-calling:java.lang.String:equals
    //#pagebasedcontent.java:387: end of method: bool net.sourceforge.pebble.domain.PageBasedContent.isUnpublished()
  }

  /**
   * Sets the state of this content.
   *
   * @param published   true if this content is published, false if unpublished
   */
  public void setPublished(boolean published) {
    if (published) {
    //#pagebasedcontent.java:396: method: void net.sourceforge.pebble.domain.PageBasedContent.setPublished(bool)
    //#pagebasedcontent.java:396: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.PageBasedContent
    //#    method: void setPublished(bool)
    //#    suspicious precondition index: [6]
    //#input(void setPublished(bool)): __Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void setPublished(bool)): __Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(void setPublished(bool)): __Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void setPublished(bool)): __Descendant_Table[others]
    //#input(void setPublished(bool)): __Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void setPublished(bool)): __Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V
    //#input(void setPublished(bool)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#4).__Tag
    //#input(void setPublished(bool)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#5).__Tag
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.addEvent(Lnet/sourceforge/pebble/api/event/PebbleEvent;)V
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.areEventsEnabled()Z
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.isPublished()Z
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.isUnpublished()Z
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/State.PUBLISHED
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/State.UNPUBLISHED
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/State.__Descendant_Table[net/sourceforge/pebble/domain/State]
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/State.__Descendant_Table[others]
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/State.__Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/State.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void setPublished(bool)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V
    //#input(void setPublished(bool)): published
    //#input(void setPublished(bool)): this
    //#input(void setPublished(bool)): this.__Tag
    //#input(void setPublished(bool)): this.state.__Tag
    //#output(void setPublished(bool)): this.state
    //#pre[6] (void setPublished(bool)): this.__Tag in {net/sourceforge/pebble/domain/BlogEntry, net/sourceforge/pebble/domain/PageBasedContent, net/sourceforge/pebble/domain/StaticPage}
    //#post(void setPublished(bool)): this.state == One-of{&net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#5), old this.state, &net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#4)}
    //#unanalyzed(void setPublished(bool)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void setPublished(bool)): Effects-of-calling:net.sourceforge.pebble.api.event.PebbleEvent
    //#unanalyzed(void setPublished(bool)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void setPublished(bool)): Effects-of-calling:java.util.EventObject
    //#test_vector(void setPublished(bool)): published: {0}, {1}
      setState(State.PUBLISHED);
    } else {
      setState(State.UNPUBLISHED);
    }
  }
    //#pagebasedcontent.java:401: end of method: void net.sourceforge.pebble.domain.PageBasedContent.setPublished(bool)

  public String getLockedBy() {
    return lockedBy;
    //#pagebasedcontent.java:404: method: String net.sourceforge.pebble.domain.PageBasedContent.getLockedBy()
    //#input(String getLockedBy()): this
    //#input(String getLockedBy()): this.lockedBy
    //#output(String getLockedBy()): return_value
    //#pre[2] (String getLockedBy()): init'ed(this.lockedBy)
    //#post(String getLockedBy()): return_value == this.lockedBy
    //#post(String getLockedBy()): init'ed(return_value)
    //#pagebasedcontent.java:404: end of method: String net.sourceforge.pebble.domain.PageBasedContent.getLockedBy()
  }

  public void setLockedBy(String lockedBy) {
    this.lockedBy = lockedBy;
    //#pagebasedcontent.java:408: method: void net.sourceforge.pebble.domain.PageBasedContent.setLockedBy(String)
    //#input(void setLockedBy(String)): lockedBy
    //#input(void setLockedBy(String)): this
    //#output(void setLockedBy(String)): this.lockedBy
    //#post(void setLockedBy(String)): this.lockedBy == lockedBy
    //#post(void setLockedBy(String)): init'ed(this.lockedBy)
  }
    //#pagebasedcontent.java:409: end of method: void net.sourceforge.pebble.domain.PageBasedContent.setLockedBy(String)

}    //#pagebasedcontent.java:: end of class: net.sourceforge.pebble.domain.PageBasedContent
