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