abstracttagsdecorator.java

### File Source: abstracttagsdecorator.java

             /*
        P/P   *  Method: net.sourceforge.pebble.decorator.AbstractTagsDecorator__static_init
              */
         1  package net.sourceforge.pebble.decorator;
         2
         3  import java.util.Iterator;
         4
         5  import net.sourceforge.pebble.api.decorator.ContentDecoratorContext;
         6  import net.sourceforge.pebble.domain.PageBasedContent;
         7  import net.sourceforge.pebble.domain.Tag;
         8  import net.sourceforge.pebble.util.I18n;
         9
        10  /**
        11   * Generates tag links for inclusion in the body of blog entries,
        12   * when rendered as HTML.
        13   *
        14   * @author Simon Brown
        15   */
        16  public abstract class AbstractTagsDecorator extends ContentDecoratorSupport {
        17    private final String resourceKey;
        18    private final String target;
        19
        20    /**
        21     * Extended Parameters for generating Links to different Tagging sites - like Technorati.
        22     * @param resourceKey is used to determine the label for the tags from pebbles resource files
        23     * @param openLinkInNewWindow set to true to generate links with 'target="_blank"'
        24     */
        25
               /*
        P/P     *  Method: void net.sourceforge.pebble.decorator.AbstractTagsDecorator(String, bool)
                *
                *  Postconditions:
                *    this.resourceKey == resourceKey
                *    init'ed(this.resourceKey)
                *    this.target == One-of{&" target="_blank"", &""}
                *    this.target in Addr_Set{&"",&" target="_blank""}
                */
        26    public AbstractTagsDecorator(String resourceKey, boolean openLinkInNewWindow) {
        27  	this.resourceKey = resourceKey;
        28  	target=openLinkInNewWindow ? " target=\"_blank\"":"";
        29    }
        30
        31    /**
        32     * Default constructors makes Tags use the standard label (key tag.tags) and open links
        33     * in the same browser window.
        34     */
        35
               /*
        P/P     *  Method: void net.sourceforge.pebble.decorator.AbstractTagsDecorator()
                *
                *  Postconditions:
                *    this.resourceKey == &"tag.tags"
                *    this.target == &""
                */
        36    public AbstractTagsDecorator() {
        37  	this.resourceKey = "tag.tags";
        38  	target="";
        39    }
        40
        41    protected String generateDecorationHtml(ContentDecoratorContext context, PageBasedContent content) {
                 /*
        P/P       *  Method: String generateDecorationHtml(ContentDecoratorContext, PageBasedContent)
                  *
                  *  Preconditions:
                  *    context != null
                  *    (soft) content != null
                  *
                  *  Presumptions:
                  *    java.util.Iterator:next(...)@56 != null
                  *
                  *  Postconditions:
                  *    return_value != null
                  *
                  *  Test Vectors:
                  *    java.lang.String:equals(...)@58: {1}, {0}
                  *    java.util.Iterator:hasNext(...)@49: {0}, {1}
                  *    java.util.Iterator:hasNext(...)@54: {1}, {0}
                  *    java.util.Iterator:hasNext(...)@68: {0}, {1}
                  *
                  *  Preconditions:
                  *    init'ed(context.media)
                  *    (soft) init'ed(content.blog)
                  *    (soft) init'ed(content.tagsAsList)
                  *
                  *  Test Vectors:
                  *    context.media: {-231..-1, 1..232-1}, {0}
                  *    tag.name@56: Addr_Set{null}, Inverse{null}
                  */
        42      StringBuffer buf = new StringBuffer();
        43
        44      if (context.getMedia() == ContentDecoratorContext.HTML_PAGE) {
        45        Iterator<Tag> tags = content.getAllTags().iterator();
        46
        47        String baseUrl = getBaseUrl(content);
        48
        49        if (tags.hasNext()) {
        50          buf.append("<div class=\"tags\"><span>");
        51  		buf.append(I18n.getMessage(content.getBlog(), resourceKey));
        52          buf.append(" : </span>");
        53
        54          while (tags.hasNext()) {
        55
        56            Tag tag = tags.next();
        57
        58  		  if (tag.getName() != null && !tag.getName().equals("")) {
        59
        60  			  buf.append("<a href=\"");
        61  			  buf.append(baseUrl);
        62  			  buf.append(tag.getName() + "\"");
        63  			  buf.append(target);
        64  			  buf.append(" rel=\"tag\">");
        65  			  buf.append(tag.getName());
        66  			  buf.append("</a>");
        67
        68  			  if (tags.hasNext()) {
        69  				buf.append(", ");
        70  			  }
        71  		  }
        72          }
        73          buf.append("</div>");
        74
        75        }
        76      }
        77
        78      return buf.toString();
        79    }
        80
        81    /**
        82     * Gets the base URL for tag links, complete with trailing slash.
        83     *
        84     * @param content   the owning content
        85     * @return  a URL as a String
        86     */
        87    public abstract String getBaseUrl(PageBasedContent content);
        88  }

SofCheck Inspector Build Version : 2.22510

abstracttagsdecorator.java | 2010-Jun-25 19:40:32
abstracttagsdecorator.class | 2010-Jul-19 20:23:40