File Source: pagebasedcontent.java
1 package net.sourceforge.pebble.domain;
2
3 import net.sourceforge.pebble.PebbleContext;
4 import net.sourceforge.pebble.security.PebbleUserDetails;
5 import net.sourceforge.pebble.security.SecurityRealm;
6 import net.sourceforge.pebble.security.SecurityRealmException;
7 import net.sourceforge.pebble.util.StringUtils;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11
12 import java.util.*;
13
14 /**
15 * The superclass for blog entries and pages.
16 *
17 * @author Simon Brown
18 */
19 public abstract class PageBasedContent extends Content {
20
/*
P/P * Method: net.sourceforge.pebble.domain.PageBasedContent__static_init
*
* Postconditions:
* init'ed(log)
*/
21 private static final Log log = LogFactory.getLog(PageBasedContent.class);
22
23 public static final String TITLE_PROPERTY = "title";
24 public static final String SUBTITLE_PROPERTY = "subtitle";
25 public static final String BODY_PROPERTY = "body";
26 public static final String AUTHOR_PROPERTY = "author";
27 public static final String DATE_PROPERTY = "date";
28 public static final String ORIGINAL_PERMALINK_PROPERTY = "originalPermalink";
29 public static final String TAGS_PROPERTY = "tags";
30
31 /**
32 * the id
33 */
34 private String id;
35
36 /**
37 * the title
38 */
39 private String title = "";
40
41 /**
42 * the subtitle
43 */
44 private String subtitle = "";
45
46 /**
47 * the body
48 */
49 private String body = "";
50
51 /**
52 * the date that the content was created
53 */
54 private Date date;
55
56 /**
57 * the author of the blog entry
58 */
59 private String author = "";
60
61 /** the enriched user details */
62 private PebbleUserDetails user;
63
64 /**
65 * the alternative permalink for this blog entry
66 */
67 private String originalPermalink;
68
69 /** the list of tags for this blog entry */
70 private String tags = "";
71
72 /** the List of tags for this blog entry */
73 private List<Tag> tagsAsList = new LinkedList<Tag>();
74
75 /** the tags, comma separated */
76 private String tagsAsCommaSeparated = "";
77
78 /** the owning blog */
79 private Blog blog;
80
81 private boolean persistent = false;
82 private String lockedBy = null;
83
84 /**
85 * Creates a new blog entry.
86 *
87 * @param blog the owning Blog
88 */
/*
P/P * Method: void net.sourceforge.pebble.domain.PageBasedContent(Blog)
*
* Postconditions:
* this.author == &""
* this.body == &""
* this.subtitle == &""
* this.tags == &""
* this.tagsAsCommaSeparated == &""
* this.title == &""
* this.blog == blog
* init'ed(this.blog)
* init'ed(this.date)
* this.events == &new ArrayList(Content#1)
* ...
*/
89 public PageBasedContent(Blog blog) {
90 this.blog = blog;
91 setDate(new Date());
92 }
93
94 /**
95 * Gets the unique id of this blog entry.
96 *
97 * @return the id as a String
98 */
99 public String getId() {
/*
P/P * Method: String getId()
*
* Preconditions:
* init'ed(this.id)
*
* Postconditions:
* return_value == this.id
* init'ed(return_value)
*/
100 return id;
101 }
102
103 /**
104 * Gets the title of this blog entry.
105 *
106 * @return the title as a String
107 */
108 public String getTitle() {
/*
P/P * Method: String getTitle()
*
* Preconditions:
* init'ed(this.title)
*
* Postconditions:
* return_value == this.title
* init'ed(return_value)
*/
109 return title;
110 }
111
112 /**
113 * Sets the title of this blog entry.
114 *
115 * @param newTitle the title as a String
116 */
117 public void setTitle(String newTitle) {
/*
P/P * Method: void setTitle(String)
*
* Preconditions:
* init'ed(this.title)
* this.propertyChangeSupport != null
*
* Postconditions:
* this.title == newTitle
* init'ed(this.title)
*/
118 newTitle = newTitle;
119 propertyChangeSupport.firePropertyChange(TITLE_PROPERTY, title, newTitle);
120 this.title = newTitle;
121 }
122
123 /**
124 * Gets the subtitle of this blog entry.
125 *
126 * @return the subtitle as a String
127 */
128 public String getSubtitle() {
/*
P/P * Method: String getSubtitle()
*
* Preconditions:
* init'ed(this.subtitle)
*
* Postconditions:
* return_value == this.subtitle
* init'ed(return_value)
*/
129 return subtitle;
130 }
131
132 /**
133 * Sets the subtitle of this blog entry.
134 *
135 * @param newSubtitle the subtitle as a String
136 */
137 public void setSubtitle(String newSubtitle) {
138 //newSubtitle = StringUtils.transformHTML(newSubtitle);
/*
P/P * Method: void setSubtitle(String)
*
* Preconditions:
* init'ed(this.subtitle)
* this.propertyChangeSupport != null
*
* Postconditions:
* this.subtitle == newSubtitle
* init'ed(this.subtitle)
*/
139 propertyChangeSupport.firePropertyChange(SUBTITLE_PROPERTY, subtitle, newSubtitle);
140 this.subtitle = newSubtitle;
141 }
142
143 /**
144 * Gets the body of this blog entry.
145 *
146 * @return the body as a String
147 */
148 public String getBody() {
/*
P/P * Method: String getBody()
*
* Preconditions:
* init'ed(this.body)
*
* Postconditions:
* return_value == this.body
* init'ed(return_value)
*/
149 return body;
150 }
151
152 /**
153 * Gets the content of this response.
154 *
155 * @return a String
156 */
157 public String getContent() {
/*
P/P * Method: String getContent()
*
* Preconditions:
* init'ed(this.body)
*
* Postconditions:
* return_value == this.body
* init'ed(return_value)
*/
158 return body;
159 }
160
161 /**
162 * Sets the body of this blog entry.
163 *
164 * @param newBody the body as a String
165 */
166 public void setBody(String newBody) {
/*
P/P * Method: void setBody(String)
*
* Preconditions:
* init'ed(this.body)
* this.propertyChangeSupport != null
*
* Postconditions:
* this.body == newBody
* init'ed(this.body)
*/
167 propertyChangeSupport.firePropertyChange(BODY_PROPERTY, body, newBody);
168 this.body = newBody;
169 }
170
171 /**
172 * Gets the date that this blog entry was created.
173 *
174 * @return a java.util.Date instance
175 */
176 public Date getDate() {
/*
P/P * Method: Date getDate()
*
* Preconditions:
* init'ed(this.date)
*
* Postconditions:
* return_value == this.date
* init'ed(return_value)
*/
177 return date;
178 }
179
180 /**
181 * Gets the date that this blog entry was last updated.
182 *
183 * @return a Date instance representing the time of the last comment/TrackBack
184 */
185 public Date getLastModified() {
/*
P/P * Method: Date getLastModified()
*
* Preconditions:
* init'ed(this.date)
*
* Postconditions:
* return_value == this.date
* init'ed(return_value)
*/
186 return date;
187 }
188
189 /**
190 * Sets the date that this blog entry was created.
191 *
192 * @param newDate a java.util.Date instance
193 */
194 public void setDate(Date newDate) {
/*
P/P * Method: void setDate(Date)
*
* Preconditions:
* newDate != null
* init'ed(this.date)
* this.propertyChangeSupport != null
*
* Postconditions:
* this.date == newDate
* this.date != null
* this.id != null
*/
195 propertyChangeSupport.firePropertyChange(DATE_PROPERTY, date, newDate);
196 this.date = newDate;
197 this.id = "" + this.date.getTime();
198 }
199
200 /**
201 * Gets the author of this blog entry.
202 *
203 * @return the author as a String
204 */
205 public String getAuthor() {
/*
P/P * Method: String getAuthor()
*
* Preconditions:
* init'ed(this.author)
*
* Postconditions:
* return_value == this.author
* init'ed(return_value)
*/
206 return author;
207 }
208
209 /**
210 * Gets full user details about the author including name, email-address, etc.
211 *
212 * @return a PebbleUserDetails instance
213 */
214 public PebbleUserDetails getUser() {
/*
P/P * Method: PebbleUserDetails getUser()
*
* Preconditions:
* (soft) init'ed(this.author)
*
* Presumptions:
* net.sourceforge.pebble.PebbleContext:getConfiguration(...).securityRealm@216 != null
* net.sourceforge.pebble.PebbleContext:getConfiguration(...)@216 != null
* net.sourceforge.pebble.PebbleContext:getInstance(...)@216 != null
*
* Preconditions:
* init'ed(this.user)
*
* Presumptions:
* org.apache.commons.logging.LogFactory:getLog(...)@21 != null
*
* Postconditions:
* init'ed(return_value)
* this.user == return_value
*
* Test Vectors:
* this.user: Inverse{null}, Addr_Set{null}
*/
215 if (this.user == null) {
216 SecurityRealm realm = PebbleContext.getInstance().getConfiguration().getSecurityRealm();
217 try {
218 this.user = realm.getUser(getAuthor());
219 } catch (SecurityRealmException e) {
220 log.error("Exception encountered", e);
221 }
222 }
223
224 return this.user;
225 }
226
227 /**
228 * Sets the author of this blog entry.
229 *
230 * @param newAuthor the author as a String
231 */
232 public void setAuthor(String newAuthor) {
/*
P/P * Method: void setAuthor(String)
*
* Postconditions:
* init'ed(this.author)
*/
233 this.author = StringUtils.transformHTML(newAuthor);
234 }
235
236 /**
237 * Gets the tags associated with this category.
238 *
239 * @return a list of tags
240 */
241 public String getTags() {
/*
P/P * Method: String getTags()
*
* Preconditions:
* init'ed(this.tags)
*
* Postconditions:
* return_value == this.tags
* init'ed(return_value)
*/
242 return this.tags;
243 }
244
245 /**
246 * Gets the tags associated with this category, as a List.
247 *
248 * @return a List of tags
249 */
250 public List<Tag> getTagsAsList() {
/*
P/P * Method: List getTagsAsList()
*
* Preconditions:
* init'ed(this.tagsAsList)
*
* Postconditions:
* return_value == this.tagsAsList
* init'ed(return_value)
*/
251 return this.tagsAsList;
252 }
253
254 /**
255 * Gets a list of all tags, as a comma separated string.
256 *
257 * @return a comma separated String of tags
258 */
259 public String getTagsAsCommaSeparated() {
/*
P/P * Method: String getTagsAsCommaSeparated()
*
* Preconditions:
* init'ed(this.tagsAsCommaSeparated)
*
* Postconditions:
* return_value == this.tagsAsCommaSeparated
* init'ed(return_value)
*/
260 return this.tagsAsCommaSeparated;
261 }
262
263 /**
264 * Gets a list of all tags.
265 *
266 * @return a List of tags
267 */
268 public abstract List<Tag> getAllTags();
269
270 /**
271 * Sets the set of tags associated with this category.
272 *
273 * @param newTags a set of tags
274 */
275 public void setTags(String newTags) {
/*
P/P * Method: void setTags(String)
*
* Preconditions:
* init'ed(this.tags)
* init'ed(this.blog)
* this.propertyChangeSupport != null
*
* Postconditions:
* init'ed(this.tags)
* this.tagsAsCommaSeparated != null
* this.tagsAsList == &new ArrayList(parse#1)
* new ArrayList(parse#1) num objects == 1
*
* Test Vectors:
* newTags: Addr_Set{null}, Inverse{null}
* java.lang.String:indexOf(...)@276: {-231..-1}, {0..232-1}
*/
276 if (newTags != null && newTags.indexOf(",") > -1) {
277 // if the tags have been comma separated, convert them to
278 // whitespace separated by
279 // - remove whitespace
280 // - convert commas to whitespace
281 newTags = newTags.replaceAll(" ", "").replaceAll(",", " ");
282 }
283 propertyChangeSupport.firePropertyChange(TAGS_PROPERTY, tags, newTags);
284 this.tags = newTags;
285 this.tagsAsList = Tag.parse(getBlog(), tags);
286 this.tagsAsCommaSeparated = Tag.format(getAllTags());
287 }
288
289 /**
290 * Determines whether this blog entry has been aggregated from another
291 * source. An aggregated blog entry will have a specified permalink.
292 *
293 * @return true if this blog entry has been aggegrated, false otherwise
294 */
295 public boolean isAggregated() {
/*
P/P * Method: bool isAggregated()
*
* Preconditions:
* init'ed(this.originalPermalink)
*
* Postconditions:
* init'ed(return_value)
*
* Test Vectors:
* this.originalPermalink: Addr_Set{null}, Inverse{null}
*/
296 return (originalPermalink != null);
297 }
298
299 /**
300 * Gets the alternative permalink for this blog entry.
301 *
302 * @return an absolute URL as a String
303 */
304 public String getOriginalPermalink() {
/*
P/P * Method: String getOriginalPermalink()
*
* Preconditions:
* init'ed(this.originalPermalink)
*
* Postconditions:
* return_value == this.originalPermalink
* init'ed(return_value)
*/
305 return this.originalPermalink;
306 }
307
308 /**
309 * Sets the alternative permalink for this blog entry.
310 *
311 * @param newPermalink an absolute URL as a String
312 */
313 public void setOriginalPermalink(String newPermalink) {
/*
P/P * Method: void setOriginalPermalink(String)
*
* Preconditions:
* init'ed(this.originalPermalink)
* this.propertyChangeSupport != null
*
* Postconditions:
* init'ed(this.originalPermalink)
*
* Test Vectors:
* java.lang.String:length(...)@315: {1..232-1}, {0}
* net.sourceforge.pebble.util.StringUtils:transformHTML(...)@314: Addr_Set{null}, Inverse{null}
*/
314 newPermalink = StringUtils.transformHTML(newPermalink);
315 if (newPermalink == null || newPermalink.length() == 0) {
316 propertyChangeSupport.firePropertyChange(ORIGINAL_PERMALINK_PROPERTY, originalPermalink, null);
317 this.originalPermalink = null;
318 } else {
319 propertyChangeSupport.firePropertyChange(ORIGINAL_PERMALINK_PROPERTY, originalPermalink, newPermalink);
320 this.originalPermalink = newPermalink;
321 }
322 }
323
324 /**
325 * Gets a permalink for this blog entry.
326 *
327 * @return an absolute URL as a String
328 */
329 public String getPermalink() {
/*
P/P * Method: String getPermalink()
*
* Preconditions:
* (soft) net/sourceforge/pebble/domain/BlogManager.instance != null
* (soft) init'ed(net/sourceforge/pebble/domain/BlogManager.instance.multiBlog)
* (soft) init'ed(this.blog.id)
* init'ed(this.originalPermalink)
* (soft) this.blog != null
*
* Postconditions:
* init'ed(return_value)
* possibly_updated(this.permalink)
*
* Test Vectors:
* this.originalPermalink: Addr_Set{null}, Inverse{null}
*/
330 if (isAggregated()) {
331 return getOriginalPermalink();
332 } else {
333 return getLocalPermalink();
334 }
335 }
336
337 /**
338 * Gets a permalink for this blog entry that is local to the blog. In other
339 * words, it doesn't take into account the original permalink for
340 * aggregated content.
341 *
342 * @return an absolute URL as a String
343 */
344 public abstract String getLocalPermalink();
345
346 /**
347 * Helper method to get the owning Blog instance.
348 *
349 * @return the overall owning Blog instance
350 */
351 public Blog getBlog() {
/*
P/P * Method: Blog getBlog()
*
* Preconditions:
* init'ed(this.blog)
*
* Postconditions:
* return_value == this.blog
* init'ed(return_value)
*/
352 return this.blog;
353 }
354
355 /**
356 * Gets a string representation of this object.
357 *
358 * @return a String
359 */
360 public String toString() {
/*
P/P * Method: String toString()
*
* Preconditions:
* init'ed(this.blog.id)
* this.blog != null
* init'ed(this.title)
*
* Postconditions:
* return_value != null
*/
361 return getBlog().getId() + "/" + getTitle();
362 }
363
364 public boolean isPersistent() {
/*
P/P * Method: bool isPersistent()
*
* Preconditions:
* init'ed(this.persistent)
*
* Postconditions:
* return_value == this.persistent
* init'ed(return_value)
*/
365 return persistent;
366 }
367
368 public void setPersistent(boolean persistent) {
/*
P/P * Method: void setPersistent(bool)
*
* Postconditions:
* this.persistent == persistent
* init'ed(this.persistent)
*/
369 this.persistent = persistent;
370 }
371
372 /**
373 * Determines whether this content is published.
374 *
375 * @return true if the state is published, false otherwise
376 */
377 public boolean isPublished() {
/*
P/P * Method: bool isPublished()
*
* Preconditions:
* this.state != null
* (soft) net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#5).name != null
* (soft) init'ed(this.state.name)
*
* Postconditions:
* init'ed(return_value)
*/
378 return getState().equals(State.PUBLISHED);
379 }
380
381 /**
382 * Determines whether this content is unpublished.
383 *
384 * @return true if the state is unpublished, false otherwise
385 */
386 public boolean isUnpublished() {
/*
P/P * Method: bool isUnpublished()
*
* Preconditions:
* this.state != null
* (soft) net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#4).name != null
* (soft) init'ed(this.state.name)
*
* Postconditions:
* init'ed(return_value)
*/
387 return getState().equals(State.UNPUBLISHED);
388 }
389
390 /**
391 * Sets the state of this content.
392 *
393 * @param published true if this content is published, false if unpublished
394 */
395 public void setPublished(boolean published) {
/*
P/P * Method: void setPublished(bool)
*
* Postconditions:
* this.state == One-of{&net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#5), old this.state, &net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#4)}
*
* Test Vectors:
* published: {0}, {1}
*/
396 if (published) {
397 setState(State.PUBLISHED);
398 } else {
399 setState(State.UNPUBLISHED);
400 }
401 }
402
403 public String getLockedBy() {
/*
P/P * Method: String getLockedBy()
*
* Preconditions:
* init'ed(this.lockedBy)
*
* Postconditions:
* return_value == this.lockedBy
* init'ed(return_value)
*/
404 return lockedBy;
405 }
406
407 public void setLockedBy(String lockedBy) {
/*
P/P * Method: void setLockedBy(String)
*
* Postconditions:
* this.lockedBy == lockedBy
* init'ed(this.lockedBy)
*/
408 this.lockedBy = lockedBy;
409 }
410
411 }
SofCheck Inspector Build Version : 2.22510
| pagebasedcontent.java |
2010-Jun-25 19:40:32 |
| pagebasedcontent.class |
2010-Jul-19 20:23:40 |