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 |