defaultpermalinkprovider.java

### File Source: defaultpermalinkprovider.java

             /*
        P/P   *  Method: net.sourceforge.pebble.permalink.DefaultPermalinkProvider__static_init
              */
         1  /*
         2   * Copyright (c) 2003-2006, Simon Brown
         3   * All rights reserved.
         4   *
         5   * Redistribution and use in source and binary forms, with or without
         6   * modification, are permitted provided that the following conditions are met:
         7   *
         8   *   - Redistributions of source code must retain the above copyright
         9   *     notice, this list of conditions and the following disclaimer.
        10   *
        11   *   - Redistributions in binary form must reproduce the above copyright
        12   *     notice, this list of conditions and the following disclaimer in
        13   *     the documentation and/or other materials provided with the
        14   *     distribution.
        15   *
        16   *   - Neither the name of Pebble nor the names of its contributors may
        17   *     be used to endorse or promote products derived from this software
        18   *     without specific prior written permission.
        19   *
        20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
        21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
        24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
        26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
        27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
        28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        30   * POSSIBILITY OF SUCH DAMAGE.
        31   */
        32  package net.sourceforge.pebble.permalink;
        33
        34  import net.sourceforge.pebble.domain.Blog;
        35  import net.sourceforge.pebble.domain.BlogEntry;
        36  import net.sourceforge.pebble.domain.BlogService;
        37  import net.sourceforge.pebble.domain.BlogServiceException;
        38
        39  import java.text.DateFormat;
        40  import java.text.SimpleDateFormat;
        41  import java.util.Date;
        42
        43  /**
        44   * Generates permalinks using the pattern /YYYY/MM/DD/<time-in-millis>.
        45   *
        46   * @author Simon Brown
        47   */
             /*
        P/P   *  Method: void net.sourceforge.pebble.permalink.DefaultPermalinkProvider()
              */
        48  public class DefaultPermalinkProvider extends PermalinkProviderSupport {
        49
        50    /** the regex used to check for a blog entry permalink : /yyyy/mm/dd/blogentryid.html */
        51    private static final String BLOG_ENTRY_PERMALINK_REGEX = "/\\d\\d\\d\\d/\\d\\d/\\d\\d/\\d*.html";
        52
        53    /**
        54     * Gets the permalink for a blog entry.
        55     *
        56     * @return  a URI as a String
        57     */
        58    public String getPermalink(BlogEntry blogEntry) {
                 /*
        P/P       *  Method: String getPermalink(BlogEntry)
                  *
                  *  Presumptions:
                  *    net.sourceforge.pebble.domain.BlogEntry:getBlog(...)@59 != null
                  *
                  *  Preconditions:
                  *    blogEntry != null
                  *
                  *  Postconditions:
                  *    return_value != null
                  */
        59      Blog blog = blogEntry.getBlog();
        60      Date date = blogEntry.getDate();
        61      DateFormat year = new SimpleDateFormat("yyyy");
        62      year.setTimeZone(blog.getTimeZone());
        63      DateFormat month = new SimpleDateFormat("MM");
        64      month.setTimeZone(blog.getTimeZone());
        65      DateFormat day = new SimpleDateFormat("dd");
        66      day.setTimeZone(blog.getTimeZone());
        67
        68      StringBuffer buf = new StringBuffer();
        69      buf.append("/");
        70      buf.append(year.format(date));
        71      buf.append("/");
        72      buf.append(month.format(date));
        73      buf.append("/");
        74      buf.append(day.format(date));
        75      buf.append("/");
        76      buf.append(blogEntry.getId());
        77      buf.append(".html");
        78
        79      return buf.toString();
        80    }
        81
        82    /**
        83     * Determines whether the specified URI is a blog entry permalink.
        84     *
        85     * @param uri   a relative URI
        86     * @return      true if the URI represents a permalink to a blog entry,
        87     *              false otherwise
        88     */
        89    public boolean isBlogEntryPermalink(String uri) {
                 /*
        P/P       *  Method: bool isBlogEntryPermalink(String)
                  *
                  *  Postconditions:
                  *    init'ed(return_value)
                  *
                  *  Test Vectors:
                  *    uri: Addr_Set{null}, Inverse{null}
                  */
        90      if (uri != null) {
        91        return uri.matches(BLOG_ENTRY_PERMALINK_REGEX);
        92      } else {
        93        return false;
        94      }
        95    }
        96
        97    /**
        98     * Gets the blog entry referred to by the specified URI.
        99     *
       100     * @param uri   a relative URI
       101     * @return  a BlogEntry instance, or null if one can't be found
       102     */
       103    public BlogEntry getBlogEntry(String uri) {
                 /*
        P/P       *  Method: BlogEntry getBlogEntry(String)
                  *
                  *  Preconditions:
                  *    init'ed(this.blog)
                  *    (soft) uri != null
                  *
                  *  Postconditions:
                  *    init'ed(return_value)
                  */
       104      Blog blog = getBlog();
       105      BlogService service = new BlogService();
       106      try {
       107        return service.getBlogEntry(blog, uri.substring(12, uri.lastIndexOf(".")));
       108      } catch (BlogServiceException e) {
       109        return null;
       110      }
       111    }
       112
       113  }

SofCheck Inspector Build Version : 2.22510

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