permalinkprovidersupport.java

### File Source: permalinkprovidersupport.java

             /*
        P/P   *  Method: net.sourceforge.pebble.permalink.PermalinkProviderSupport__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.Day;
        35  import net.sourceforge.pebble.domain.Month;
        36  import net.sourceforge.pebble.domain.Blog;
        37  import net.sourceforge.pebble.api.permalink.PermalinkProvider;
        38
        39  import java.text.SimpleDateFormat;
        40
        41  /**
        42   * Support class that can be used as a basis for PermalinkProvider
        43   * implementations.
        44   *
        45   * @author Simon Brown
        46   */
             /*
        P/P   *  Method: void net.sourceforge.pebble.permalink.PermalinkProviderSupport()
              */
        47  public abstract class PermalinkProviderSupport implements PermalinkProvider {
        48
        49    /** the regex used to check for a day request */
        50    private static final String DAY_PERMALINK_REGEX = "/\\d\\d\\d\\d/\\d\\d/\\d\\d.html";
        51
        52    /** the regex used to check for a monthly blog request */
        53    private static final String MONTH_PERMALINK_REGEX = "/\\d\\d\\d\\d/\\d\\d.html";
        54
        55    /** the Blog associated with this provider instance */
        56    private Blog blog;
        57
        58    /**
        59     * Gets the blog associated with this provider instance.
        60     *
        61     * @return  a Blog instance
        62     */
        63    public Blog getBlog() {
                 /*
        P/P       *  Method: Blog getBlog()
                  *
                  *  Preconditions:
                  *    init'ed(this.blog)
                  *
                  *  Postconditions:
                  *    return_value == this.blog
                  *    init'ed(return_value)
                  */
        64      return this.blog;
        65    }
        66
        67    /**
        68     * Sets the blog associated with this provider instance.
        69     *
        70     * @param blog    a Blog instance
        71     */
        72    public void setBlog(Blog blog) {
                 /*
        P/P       *  Method: void setBlog(Blog)
                  *
                  *  Postconditions:
                  *    this.blog == blog
                  *    init'ed(this.blog)
                  */
        73      this.blog = blog;
        74    }
        75
        76    /**
        77     * Gets the permalink for a monthly blog.
        78     *
        79     * @param month a Month instance
        80     * @return a URI as a String
        81     */
        82    public String getPermalink(Month month) {
                 /*
        P/P       *  Method: String getPermalink(Month)
                  *
                  *  Preconditions:
                  *    month != null
                  *    this.blog != null
                  *
                  *  Postconditions:
                  *    init'ed(return_value)
                  */
        83      SimpleDateFormat format = new SimpleDateFormat("'/'yyyy'/'MM'.html'");
        84      format.setTimeZone(blog.getTimeZone());
        85      return format.format(month.getDate());
        86    }
        87
        88    /**
        89     * Determines whether the specified URI is a monthly blog permalink.
        90     *
        91     * @param uri   a relative URI
        92     * @return      true if the URI represents a permalink to a monthly blog,
        93     *              false otherwise
        94     */
        95    public boolean isMonthPermalink(String uri) {
                 /*
        P/P       *  Method: bool isMonthPermalink(String)
                  *
                  *  Postconditions:
                  *    init'ed(return_value)
                  *
                  *  Test Vectors:
                  *    uri: Addr_Set{null}, Inverse{null}
                  */
        96      if (uri != null) {
        97        return uri.matches(MONTH_PERMALINK_REGEX);
        98      } else {
        99        return false;
       100      }
       101    }
       102
       103    /**
       104     * Gets the monthly blog referred to by the specified URI.
       105     *
       106     * @param uri   a relative URI
       107     * @return  a Month instance, or null if one can't be found
       108     */
       109    public Month getMonth(String uri) {
                 /*
        P/P       *  Method: Month getMonth(String)
                  *
                  *  Postconditions:
                  *    init'ed(return_value)
                  *
                  *  Preconditions:
                  *    this.blog != null
                  *    uri != null
                  */
       110      String year = uri.substring(1, 5);
       111      String month = uri.substring(6, 8);
       112
       113      return getBlog().getBlogForMonth(Integer.parseInt(year), Integer.parseInt(month));
       114    }
       115
       116    /**
       117     * Gets the permalink for a day.
       118     *
       119     * @param day a Day instance
       120     * @return a URI as a String
       121     */
       122    public String getPermalink(Day day) {
                 /*
        P/P       *  Method: String getPermalink(Day)
                  *
                  *  Preconditions:
                  *    day != null
                  *    this.blog != null
                  *
                  *  Postconditions:
                  *    init'ed(return_value)
                  */
       123      SimpleDateFormat format = new SimpleDateFormat("'/'yyyy'/'MM'/'dd'.html'");
       124      format.setTimeZone(blog.getTimeZone());
       125      return format.format(day.getDate());
       126    }
       127
       128    /**
       129     * Determines whether the specified URI is a day permalink.
       130     *
       131     * @param uri   a relative URI
       132     * @return      true if the URI represents a permalink to a day,
       133     *              false otherwise
       134     */
       135    public boolean isDayPermalink(String uri) {
                 /*
        P/P       *  Method: bool isDayPermalink(String)
                  *
                  *  Postconditions:
                  *    init'ed(return_value)
                  *
                  *  Test Vectors:
                  *    uri: Addr_Set{null}, Inverse{null}
                  */
       136      if (uri != null) {
       137        return uri.matches(DAY_PERMALINK_REGEX);
       138      } else {
       139        return false;
       140      }
       141    }
       142
       143    /**
       144     * Gets the day referred to by the specified URI.
       145     *
       146     * @param uri   a relative URI
       147     * @return  a Day instance, or null if one can't be found
       148     */
       149    public Day getDay(String uri) {
                 /*
        P/P       *  Method: Day getDay(String)
                  *
                  *  Postconditions:
                  *    init'ed(return_value)
                  *
                  *  Preconditions:
                  *    this.blog != null
                  *    uri != null
                  */
       150      String year = uri.substring(1, 5);
       151      String month = uri.substring(6, 8);
       152      String day = uri.substring(9, 11);
       153
       154      return getBlog().getBlogForDay(Integer.parseInt(year),
       155         Integer.parseInt(month), Integer.parseInt(day));
       156    }
       157
       158  }

SofCheck Inspector Build Version : 2.22510

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