File Source: defaultpermalinkprovider.java
/*
P/P * Method: net.sourceforge.pebble.permalink.DefaultPermalinkProvider__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.Blog;
35 import net.sourceforge.pebble.domain.BlogEntry;
36 import net.sourceforge.pebble.domain.BlogService;
37 import net.sourceforge.pebble.domain.BlogServiceException;
38
39 import java.text.DateFormat;
40 import java.text.SimpleDateFormat;
41 import java.util.Date;
42
43 /**
44 * Generates permalinks using the pattern /YYYY/MM/DD/<time-in-millis>.
45 *
46 * @author Simon Brown
47 */
/*
P/P * Method: void net.sourceforge.pebble.permalink.DefaultPermalinkProvider()
*/
48 public class DefaultPermalinkProvider extends PermalinkProviderSupport {
49
50 /** the regex used to check for a blog entry permalink : /yyyy/mm/dd/blogentryid.html */
51 private static final String BLOG_ENTRY_PERMALINK_REGEX = "/\\d\\d\\d\\d/\\d\\d/\\d\\d/\\d*.html";
52
53 /**
54 * Gets the permalink for a blog entry.
55 *
56 * @return a URI as a String
57 */
58 public String getPermalink(BlogEntry blogEntry) {
/*
P/P * Method: String getPermalink(BlogEntry)
*
* Presumptions:
* net.sourceforge.pebble.domain.BlogEntry:getBlog(...)@59 != null
*
* Preconditions:
* blogEntry != null
*
* Postconditions:
* return_value != null
*/
59 Blog blog = blogEntry.getBlog();
60 Date date = blogEntry.getDate();
61 DateFormat year = new SimpleDateFormat("yyyy");
62 year.setTimeZone(blog.getTimeZone());
63 DateFormat month = new SimpleDateFormat("MM");
64 month.setTimeZone(blog.getTimeZone());
65 DateFormat day = new SimpleDateFormat("dd");
66 day.setTimeZone(blog.getTimeZone());
67
68 StringBuffer buf = new StringBuffer();
69 buf.append("/");
70 buf.append(year.format(date));
71 buf.append("/");
72 buf.append(month.format(date));
73 buf.append("/");
74 buf.append(day.format(date));
75 buf.append("/");
76 buf.append(blogEntry.getId());
77 buf.append(".html");
78
79 return buf.toString();
80 }
81
82 /**
83 * Determines whether the specified URI is a blog entry permalink.
84 *
85 * @param uri a relative URI
86 * @return true if the URI represents a permalink to a blog entry,
87 * false otherwise
88 */
89 public boolean isBlogEntryPermalink(String uri) {
/*
P/P * Method: bool isBlogEntryPermalink(String)
*
* Postconditions:
* init'ed(return_value)
*
* Test Vectors:
* uri: Addr_Set{null}, Inverse{null}
*/
90 if (uri != null) {
91 return uri.matches(BLOG_ENTRY_PERMALINK_REGEX);
92 } else {
93 return false;
94 }
95 }
96
97 /**
98 * Gets the blog entry referred to by the specified URI.
99 *
100 * @param uri a relative URI
101 * @return a BlogEntry instance, or null if one can't be found
102 */
103 public BlogEntry getBlogEntry(String uri) {
/*
P/P * Method: BlogEntry getBlogEntry(String)
*
* Preconditions:
* init'ed(this.blog)
* (soft) uri != null
*
* Postconditions:
* init'ed(return_value)
*/
104 Blog blog = getBlog();
105 BlogService service = new BlogService();
106 try {
107 return service.getBlogEntry(blog, uri.substring(12, uri.lastIndexOf(".")));
108 } catch (BlogServiceException e) {
109 return null;
110 }
111 }
112
113 }
SofCheck Inspector Build Version : 2.22510
| defaultpermalinkprovider.java |
2010-Jun-25 19:40:32 |
| defaultpermalinkprovider.class |
2010-Jul-19 20:23:38 |