KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openedit > blog > archive > CommentArchive


1 /*
2  * Created on Oct 18, 2006
3  */

4 package org.openedit.blog.archive;
5
6 import java.io.File JavaDoc;
7 import java.io.IOException JavaDoc;
8 import java.io.Reader JavaDoc;
9 import java.text.ParseException JavaDoc;
10 import java.util.Date JavaDoc;
11 import java.util.Iterator JavaDoc;
12
13 import org.apache.commons.logging.Log;
14 import org.apache.commons.logging.LogFactory;
15 import org.dom4j.DocumentHelper;
16 import org.dom4j.Element;
17 import org.openedit.repository.filesystem.FileItem;
18
19 import com.openedit.OpenEditException;
20 import com.openedit.blog.Blog;
21 import com.openedit.blog.BlogEntry;
22 import com.openedit.blog.Comment;
23 import com.openedit.page.Page;
24 import com.openedit.users.User;
25 import com.openedit.users.UserManager;
26 import com.openedit.util.FileUtils;
27 import com.openedit.util.PathUtilities;
28
29 public class CommentArchive extends BaseArchive
30 {
31     private static final Log log = LogFactory.getLog(CommentArchive.class);
32     
33     protected Comment loadComment(BlogEntry inEntry, Element inCommentElement) throws ParseException JavaDoc
34     {
35         Comment comment = new Comment();
36         comment.setAuthor(inCommentElement.attributeValue("author"));
37         
38         String JavaDoc username = inCommentElement.attributeValue("username");
39         if( username != null)
40         {
41             User user = getUserManager().getUser(username);
42             comment.setUser(user);
43         }
44         
45         String JavaDoc id = inCommentElement.attributeValue("id");
46         comment.setId(id);
47         comment.setContent(inCommentElement.getTextTrim());
48         Date JavaDoc date = inEntry.parse( inCommentElement.attributeValue("date"));
49         comment.setDateTime(date);
50         String JavaDoc visible = inCommentElement.attributeValue("visible");
51         if ( visible == null )
52         {
53             visible = "true";
54         }
55         comment.setVisible(Boolean.parseBoolean(visible));
56         return comment;
57     }
58
59     public void loadComments(BlogEntry inEntry) throws OpenEditException
60     {
61         Page page = commentsPage(inEntry);
62         
63         if ( page.exists() )
64         {
65             log.debug( "Loading comments for entry " + inEntry.getId() + " from " + page.getPath() );
66             Reader JavaDoc reader = page.getReader();
67             try
68             {
69                 Element root = getXmlUtil().getXml(reader, page.getCharacterEncoding());
70                 for (Iterator JavaDoc iter = root.elementIterator("comment"); iter.hasNext();)
71                 {
72                     Element element = (Element) iter.next();
73                     Comment comment = loadComment(inEntry, element);
74                     inEntry.addComment(comment);
75                 }
76             }
77             catch ( Exception JavaDoc ex)
78             {
79                 throw new OpenEditException(ex);
80             }
81             finally
82             {
83                 FileUtils.safeClose(reader);
84             }
85         }
86     }
87
88     public void setUserManager(UserManager inUserManager)
89     {
90         fieldUserManager = inUserManager;
91     }
92     protected Page commentsPage(BlogEntry inEntry) throws OpenEditException
93     {
94         String JavaDoc dir = PathUtilities.extractPagePath(inEntry.getPath());
95         String JavaDoc path = dir + "-comments.xml";
96
97         Page page = getPageManager().getPage(path);
98         return page;
99     }
100
101
102     public void saveComments(Blog inBlog, BlogEntry inEntry) throws OpenEditException
103     {
104         Page page = commentsPage(inEntry);
105         Element root = DocumentHelper.createDocument().addElement("comments");
106         for (Iterator JavaDoc iter = inEntry.getComments().iterator(); iter.hasNext();)
107         {
108             Comment com = (Comment) iter.next(); // <comment author="admin" date="Feb 18, 2005 2:42:29 PM">This is a snide remark</comment>
109

110             Element comment = root.addElement("comment");
111             comment.addAttribute("author",com.getAuthor());
112             if( com.getUser() != null)
113             {
114                 comment.addAttribute("username",com.getUser().getUserName());
115             }
116             
117             comment.addAttribute("date",inEntry.getGmtStandard().format(com.getDateTime()));
118             comment.addAttribute("id",com.getId());
119             comment.addAttribute("visible", String.valueOf(com.isVisible()));
120             comment.setText(com.getContent());
121         }
122         try
123         {
124             //TODO: Add locking
125
File JavaDoc tmp = File.createTempFile("blog", "junk");
126             getXmlUtil().saveXml(root.getDocument(), tmp);
127             FileItem item = new FileItem();
128             item.setFile(tmp);
129             item.setPath(page.getPath());
130             Page tmpPage = new Page(page);
131             tmpPage.setContentItem(item);
132
133             getPageManager().copyPage(tmpPage, page); //Copy over as a tmp file in case there is a problem
134
tmp.delete();
135         }
136         catch (IOException JavaDoc ex)
137         {
138             throw new OpenEditException(ex);
139         }
140     }
141
142     
143 }
144
Popular Tags