Coverage Report - net.sourceforge.pebble.permalink.PermalinkProviderSupport
 
Classes in this File Line Coverage Branch Coverage Complexity
PermalinkProviderSupport
100%
23/23
100%
4/4
1.5
 
 1  
 /*
 2  
  * Copyright (c) 2003-2011, 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  
  */
 47  3056
 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() {
 64  524
     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) {
 73  3056
     this.blog = blog;
 74  3056
   }
 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) {
 83  20
     SimpleDateFormat format = new SimpleDateFormat("'/'yyyy'/'MM'.html'");
 84  20
     format.setTimeZone(blog.getTimeZone());
 85  20
     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) {
 96  408
     if (uri != null) {
 97  396
       return uri.matches(MONTH_PERMALINK_REGEX);
 98  
     } else {
 99  12
       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) {
 110  20
     String year = uri.substring(1, 5);
 111  20
     String month = uri.substring(6, 8);
 112  
 
 113  20
     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) {
 123  20
     SimpleDateFormat format = new SimpleDateFormat("'/'yyyy'/'MM'/'dd'.html'");
 124  20
     format.setTimeZone(blog.getTimeZone());
 125  20
     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) {
 136  408
     if (uri != null) {
 137  396
       return uri.matches(DAY_PERMALINK_REGEX);
 138  
     } else {
 139  12
       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) {
 150  48
     String year = uri.substring(1, 5);
 151  48
     String month = uri.substring(6, 8);
 152  48
     String day = uri.substring(9, 11);
 153  
 
 154  48
     return getBlog().getBlogForDay(Integer.parseInt(year),
 155  
        Integer.parseInt(month), Integer.parseInt(day));
 156  
   }
 157  
 
 158  
 }