1 4 package org.openedit.blog.archive; 5 6 import java.io.File ; 7 import java.io.IOException ; 8 import java.io.Reader ; 9 import java.text.ParseException ; 10 import java.util.Date ; 11 import java.util.Iterator ; 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  34 { 35 Comment comment = new Comment(); 36 comment.setAuthor(inCommentElement.attributeValue("author")); 37 38 String username = inCommentElement.attributeValue("username"); 39 if( username != null) 40 { 41 User user = getUserManager().getUser(username); 42 comment.setUser(user); 43 } 44 45 String id = inCommentElement.attributeValue("id"); 46 comment.setId(id); 47 comment.setContent(inCommentElement.getTextTrim()); 48 Date date = inEntry.parse( inCommentElement.attributeValue("date")); 49 comment.setDateTime(date); 50 String 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 reader = page.getReader(); 67 try 68 { 69 Element root = getXmlUtil().getXml(reader, page.getCharacterEncoding()); 70 for (Iterator 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 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 dir = PathUtilities.extractPagePath(inEntry.getPath()); 95 String 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 iter = inEntry.getComments().iterator(); iter.hasNext();) 107 { 108 Comment com = (Comment) iter.next(); 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 File 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); tmp.delete(); 135 } 136 catch (IOException ex) 137 { 138 throw new OpenEditException(ex); 139 } 140 } 141 142 143 } 144 | Popular Tags |