Clover Coverage Report - Pebble 2.5-SNAPSHOT
Coverage timestamp: Sat Jun 12 2010 09:39:29 EST
../../../../img/srcFileCovDistChart10.png 0% of files have more coverage
21   158   10   2,62
4   53   0,48   8
8     1,25  
1    
This report was generated with an evaluation server license. Purchase Clover or configure your license.
 
  PermalinkProviderSupport       Line # 47 21 0% 10 0 100% 1.0
 
  (152)
 
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    */
 
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  262 toggle public Blog getBlog() {
64  262 return this.blog;
65    }
66   
67    /**
68    * Sets the blog associated with this provider instance.
69    *
70    * @param blog a Blog instance
71    */
 
72  1502 toggle public void setBlog(Blog blog) {
73  1502 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  10 toggle public String getPermalink(Month month) {
83  10 SimpleDateFormat format = new SimpleDateFormat("'/'yyyy'/'MM'.html'");
84  10 format.setTimeZone(blog.getTimeZone());
85  10 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  204 toggle public boolean isMonthPermalink(String uri) {
96  204 if (uri != null) {
97  198 return uri.matches(MONTH_PERMALINK_REGEX);
98    } else {
99  6 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  10 toggle public Month getMonth(String uri) {
110  10 String year = uri.substring(1, 5);
111  10 String month = uri.substring(6, 8);
112   
113  10 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  10 toggle public String getPermalink(Day day) {
123  10 SimpleDateFormat format = new SimpleDateFormat("'/'yyyy'/'MM'/'dd'.html'");
124  10 format.setTimeZone(blog.getTimeZone());
125  10 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  204 toggle public boolean isDayPermalink(String uri) {
136  204 if (uri != null) {
137  198 return uri.matches(DAY_PERMALINK_REGEX);
138    } else {
139  6 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  24 toggle public Day getDay(String uri) {
150  24 String year = uri.substring(1, 5);
151  24 String month = uri.substring(6, 8);
152  24 String day = uri.substring(9, 11);
153   
154  24 return getBlog().getBlogForDay(Integer.parseInt(year),
155    Integer.parseInt(month), Integer.parseInt(day));
156    }
157   
158    }