//# 0 errors, 160 messages
//#
package net.sourceforge.pebble.decorator;
    //#abstracttagsdecorator.java:1:1: class: net.sourceforge.pebble.decorator.AbstractTagsDecorator
    //#abstracttagsdecorator.java:1:1: method: net.sourceforge.pebble.decorator.AbstractTagsDecorator.net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init

import java.util.Iterator;

import net.sourceforge.pebble.api.decorator.ContentDecoratorContext;
import net.sourceforge.pebble.domain.PageBasedContent;
import net.sourceforge.pebble.domain.Tag;
import net.sourceforge.pebble.util.I18n;

/**
 * Generates tag links for inclusion in the body of blog entries,
 * when rendered as HTML.
 * 
 * @author Simon Brown
 */
public abstract class AbstractTagsDecorator extends ContentDecoratorSupport {
  private final String resourceKey;
  private final String target;

  /**
   * Extended Parameters for generating Links to different Tagging sites - like Technorati.
   * @param resourceKey is used to determine the label for the tags from pebbles resource files
   * @param openLinkInNewWindow set to true to generate links with 'target="_blank"' 
   */

  public AbstractTagsDecorator(String resourceKey, boolean openLinkInNewWindow) {
    //#abstracttagsdecorator.java:26: method: void net.sourceforge.pebble.decorator.AbstractTagsDecorator.net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)
    //#input(void net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)): openLinkInNewWindow
    //#input(void net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)): resourceKey
    //#input(void net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)): this
    //#output(void net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)): this.resourceKey
    //#output(void net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)): this.target
    //#post(void net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)): this.resourceKey == resourceKey
    //#post(void net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)): init'ed(this.resourceKey)
    //#post(void net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)): this.target == One-of{&" target="_blank"", &""}
    //#post(void net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)): this.target in Addr_Set{&"",&" target="_blank""}
	this.resourceKey = resourceKey;
	target=openLinkInNewWindow ? " target=\"_blank\"":"";
  }
    //#abstracttagsdecorator.java:29: end of method: void net.sourceforge.pebble.decorator.AbstractTagsDecorator.net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)
	
  /**
   * Default constructors makes Tags use the standard label (key tag.tags) and open links
   * in the same browser window. 
   */

  public AbstractTagsDecorator() {
    //#abstracttagsdecorator.java:36: method: void net.sourceforge.pebble.decorator.AbstractTagsDecorator.net.sourceforge.pebble.decorator.AbstractTagsDecorator()
    //#input(void net.sourceforge.pebble.decorator.AbstractTagsDecorator()): this
    //#output(void net.sourceforge.pebble.decorator.AbstractTagsDecorator()): this.resourceKey
    //#output(void net.sourceforge.pebble.decorator.AbstractTagsDecorator()): this.target
    //#post(void net.sourceforge.pebble.decorator.AbstractTagsDecorator()): this.resourceKey == &"tag.tags"
    //#post(void net.sourceforge.pebble.decorator.AbstractTagsDecorator()): this.target == &""
	this.resourceKey = "tag.tags";
	target="";
  }
    //#abstracttagsdecorator.java:39: end of method: void net.sourceforge.pebble.decorator.AbstractTagsDecorator.net.sourceforge.pebble.decorator.AbstractTagsDecorator()
	
  protected String generateDecorationHtml(ContentDecoratorContext context, PageBasedContent content) {
    StringBuffer buf = new StringBuffer();
    //#abstracttagsdecorator.java:42: method: String net.sourceforge.pebble.decorator.AbstractTagsDecorator.generateDecorationHtml(ContentDecoratorContext, PageBasedContent)
    //#abstracttagsdecorator.java:42: Warning: suspicious precondition
    //#    the precondition for content.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.decorator.AbstractTagsDecorator
    //#    method: String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)
    //#    suspicious precondition index: [2]
    //#    Attribs:  Soft
    //#abstracttagsdecorator.java:42: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.decorator.AbstractTagsDecorator
    //#    method: String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)
    //#    suspicious precondition index: [22]
    //#    Attribs:  Soft
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): __Descendant_Table[net/sourceforge/pebble/decorator/AbstractTagsDecorator]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): __Descendant_Table[net/sourceforge/pebble/decorator/BlogTagsDecorator]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): __Descendant_Table[net/sourceforge/pebble/decorator/StaticPageTagsDecorator]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): __Descendant_Table[net/sourceforge/pebble/decorator/TechnoratiTagsDecorator]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): __Descendant_Table[others]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): __Dispatch_Table.getBaseUrl(Lnet/sourceforge/pebble/domain/PageBasedContent;)Ljava/lang/String;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): content
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): content.__Tag
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): content.blog
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): content.blog.__Tag
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): content.blog.rootCategory...__Tag
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): content.blog.rootCategory.__Tag
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): content.tagsAsList
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): context
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): context.__Tag
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): context.media
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/Configuration.__Dispatch_Table.isVirtualHostingEnabled()Z
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Descendant_Table[net/sourceforge/pebble/api/decorator/ContentDecoratorContext]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Descendant_Table[others]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Dispatch_Table.getMedia()I
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/decorator/BlogTagsDecorator.__Dispatch_Table.getBaseUrl(Lnet/sourceforge/pebble/domain/PageBasedContent;)Ljava/lang/String;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/decorator/StaticPageTagsDecorator.__Dispatch_Table.getBaseUrl(Lnet/sourceforge/pebble/domain/PageBasedContent;)Ljava/lang/String;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/decorator/TechnoratiTagsDecorator.__Dispatch_Table.getBaseUrl(Lnet/sourceforge/pebble/domain/PageBasedContent;)Ljava/lang/String;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getRootCategory()Lnet/sourceforge/pebble/domain/Category;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getAllTags()Ljava/util/List;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getCategories()Ljava/util/Set;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getTagsAsList()Ljava/util/List;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[others]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/BlogManager.__Dispatch_Table.isMultiBlog()Z
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Category.__Descendant_Table[net/sourceforge/pebble/domain/Category]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Category.__Descendant_Table[others]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Category.__Dispatch_Table.getAllTags()Ljava/util/List;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Category.__Dispatch_Table.getParent()Lnet/sourceforge/pebble/domain/Category;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Category.__Dispatch_Table.getTagsAsList()Ljava/util/List;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[others]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getAllTags()Ljava/util/List;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/StaticPage.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/StaticPage.__Descendant_Table[others]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getAllTags()Ljava/util/List;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getTagsAsList()Ljava/util/List;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Tag.__Descendant_Table[net/sourceforge/pebble/domain/Tag]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Tag.__Descendant_Table[net/sourceforge/pebble/index/IndexedTag]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Tag.__Descendant_Table[others]
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/domain/Tag.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): net/sourceforge/pebble/index/IndexedTag.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): this
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): this.__Tag
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): this.resourceKey
    //#input(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): this.target
    //#output(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): return_value
    //#pre[15] (String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): context != null
    //#pre[16] (String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): context.__Tag == net/sourceforge/pebble/api/decorator/ContentDecoratorContext
    //#pre[17] (String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): init'ed(context.media)
    //#pre[1] (String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): (soft) content != null
    //#pre[2] (String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): (soft) content.__Tag in {net/sourceforge/pebble/domain/BlogEntry, net/sourceforge/pebble/domain/StaticPage}
    //#pre[3] (String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): (soft) init'ed(content.blog)
    //#pre[14] (String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): (soft) init'ed(content.tagsAsList)
    //#pre[22] (String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): (soft) this.__Tag in {net/sourceforge/pebble/decorator/AbstractTagsDecorator, net/sourceforge/pebble/decorator/BlogTagsDecorator, net/sourceforge/pebble/decorator/StaticPageTagsDecorator, net/sourceforge/pebble/decorator/TechnoratiTagsDecorator}
    //#presumption(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): java.util.Iterator:next(...).__Tag@56 in {net/sourceforge/pebble/domain/Tag, net/sourceforge/pebble/index/IndexedTag}
    //#presumption(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): java.util.Iterator:next(...)@56 != null
    //#post(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): return_value != null
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:getBlog
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:getUrl
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:getTagsAsList
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.List:add
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.List:contains
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.Set:size
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.util.Collections:reverse
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:getRootCategory
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): Effects-of-calling:java.lang.String:substring
    //#test_vector(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): context.media: {-2_147_483_648..-1, 1..4_294_967_295}, {0}
    //#test_vector(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): java.lang.String:equals(...)@58: {1}, {0}
    //#test_vector(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): java.util.Iterator:hasNext(...)@49: {0}, {1}
    //#test_vector(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): java.util.Iterator:hasNext(...)@54: {1}, {0}
    //#test_vector(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): java.util.Iterator:hasNext(...)@68: {0}, {1}
    //#test_vector(String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)): tag.name@56: Addr_Set{null}, Inverse{null}

    if (context.getMedia() == ContentDecoratorContext.HTML_PAGE) {
      Iterator<Tag> tags = content.getAllTags().iterator();
    //#abstracttagsdecorator.java:45: Warning: method not available
    //#    -- call on List getAllTags()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.decorator.AbstractTagsDecorator
    //#    method: String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)
    //#    unanalyzed callee: List getAllTags()

      String baseUrl = getBaseUrl(content);
    //#abstracttagsdecorator.java:47: Warning: method not available
    //#    -- call on String getBaseUrl(PageBasedContent)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.decorator.AbstractTagsDecorator
    //#    method: String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)
    //#    unanalyzed callee: String getBaseUrl(PageBasedContent)

      if (tags.hasNext()) {
        buf.append("<div class=\"tags\"><span>");
		buf.append(I18n.getMessage(content.getBlog(), resourceKey));
    //#abstracttagsdecorator.java:51: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.util.I18n:getMessage(Blog, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.decorator.AbstractTagsDecorator
    //#    method: String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)
    //#    unanalyzed callee: String net.sourceforge.pebble.util.I18n:getMessage(Blog, String)
        buf.append(" : </span>");

        while (tags.hasNext()) {

          Tag tag = tags.next();

		  if (tag.getName() != null && !tag.getName().equals("")) {

			  buf.append("<a href=\"");
			  buf.append(baseUrl);
			  buf.append(tag.getName() + "\"");
			  buf.append(target);
			  buf.append(" rel=\"tag\">");
			  buf.append(tag.getName());
			  buf.append("</a>");

			  if (tags.hasNext()) {
				buf.append(", ");
			  }
		  }
        }
        buf.append("</div>");

      }
    }

    return buf.toString();
    //#abstracttagsdecorator.java:78: end of method: String net.sourceforge.pebble.decorator.AbstractTagsDecorator.generateDecorationHtml(ContentDecoratorContext, PageBasedContent)
  }

  /**
   * Gets the base URL for tag links, complete with trailing slash.
   *
   * @param content   the owning content
   * @return  a URL as a String
   */
  public abstract String getBaseUrl(PageBasedContent content);
}
    //#output(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Descendant_Table[net/sourceforge/pebble/decorator/AbstractTagsDecorator]
    //#output(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/BlogEntry;)V
    //#output(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#output(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/StaticPage;)V
    //#output(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/TrackBack;)V
    //#output(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.generateDecorationHtml(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/PageBasedContent;)Ljava/lang/String;
    //#output(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.getBaseUrl(Lnet/sourceforge/pebble/domain/PageBasedContent;)Ljava/lang/String;
    //#output(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#output(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.setBlog(Lnet/sourceforge/pebble/domain/Blog;)V
    //#output(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): net/sourceforge/pebble/api/decorator/ContentDecorator.__Descendant_Table[net/sourceforge/pebble/decorator/AbstractTagsDecorator]
    //#output(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): net/sourceforge/pebble/decorator/ContentDecoratorSupport.__Descendant_Table[net/sourceforge/pebble/decorator/AbstractTagsDecorator]
    //#post(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Descendant_Table[net/sourceforge/pebble/decorator/AbstractTagsDecorator] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): net/sourceforge/pebble/api/decorator/ContentDecorator.__Descendant_Table[net/sourceforge/pebble/decorator/AbstractTagsDecorator] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): net/sourceforge/pebble/decorator/ContentDecoratorSupport.__Descendant_Table[net/sourceforge/pebble/decorator/AbstractTagsDecorator] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/BlogEntry;)V == &net/sourceforge/pebble/decorator/ContentDecoratorSupport.decorate
    //#post(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V == &net/sourceforge/pebble/decorator/ContentDecoratorSupport.decorate
    //#post(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/StaticPage;)V == &net/sourceforge/pebble/decorator/ContentDecoratorSupport.decorate
    //#post(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/TrackBack;)V == &net/sourceforge/pebble/decorator/ContentDecoratorSupport.decorate
    //#post(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.generateDecorationHtml(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/PageBasedContent;)Ljava/lang/String; == &generateDecorationHtml
    //#post(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.getBaseUrl(Lnet/sourceforge/pebble/domain/PageBasedContent;)Ljava/lang/String; == &getBaseUrl
    //#post(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog; == &net/sourceforge/pebble/decorator/ContentDecoratorSupport.getBlog
    //#post(net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init): __Dispatch_Table.setBlog(Lnet/sourceforge/pebble/domain/Blog;)V == &net/sourceforge/pebble/decorator/ContentDecoratorSupport.setBlog
    //#abstracttagsdecorator.java:: end of method: net.sourceforge.pebble.decorator.AbstractTagsDecorator.net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init
    //#abstracttagsdecorator.java:: end of class: net.sourceforge.pebble.decorator.AbstractTagsDecorator
