1 4 package org.openedit.blog.archive; 5 6 import java.io.IOException ; 7 import java.io.Reader ; 8 import java.io.Writer ; 9 import java.util.ArrayList ; 10 import java.util.Iterator ; 11 import java.util.List ; 12 13 import org.apache.commons.logging.Log; 14 import org.apache.commons.logging.LogFactory; 15 import org.dom4j.Document; 16 import org.dom4j.DocumentHelper; 17 import org.dom4j.Element; 18 import org.dom4j.io.OutputFormat; 19 import org.dom4j.io.XMLWriter; 20 import org.openedit.links.Link; 21 import org.openedit.repository.filesystem.StringItem; 22 23 import com.openedit.OpenEditException; 24 import com.openedit.blog.Blog; 25 import com.openedit.blog.BlogEntry; 26 import com.openedit.blog.Question; 27 import com.openedit.config.XMLConfiguration; 28 import com.openedit.page.Page; 29 30 public class BlogArchive extends BaseArchive 31 { 32 protected EntryArchive fieldEntryArchive; 33 34 private static final Log log = LogFactory.getLog(BlogArchive.class); 35 36 37 public void loadBlog(Blog inBlog) throws OpenEditException 38 { 39 Page settings = getPageManager().getPage(inBlog.getBlogHome() + "/blogsettings.xml"); 40 Reader read = settings.getReader(); 42 43 inBlog.setPageManager(getPageManager()); 44 inBlog.setUserManager(getUserManager()); 45 inBlog.setEntryArchive(getEntryArchive()); 46 Element root = null; 47 root = getXmlUtil().getXml(read, "UTF-8"); 48 49 inBlog.setTitle( root.elementText("title") ); 50 inBlog.setHostName(root.elementText("hostname")); 51 inBlog.setAuthor(root.elementText("author")); 52 inBlog.setDescription(root.elementText("description")); 53 inBlog.setAllowAnonymous("true".equals(root.elementText("allow-anonymous-comments"))); 54 String dir = root.elementText("archive-root-directory"); 55 if( dir != null) 56 { 57 if( dir.endsWith("/")) 58 { 59 dir = dir.substring(0,dir.length() - 1); 60 } 61 inBlog.setArchiveRootDirectory(dir); 62 } 63 else 64 { 65 inBlog.setArchiveRootDirectory(inBlog.getBlogHome() + "/permalink"); 66 } 67 68 String autoPublishCommentsStr = root.elementText("auto-publish-comments"); 70 if ( autoPublishCommentsStr == null ) 71 { 72 inBlog.setAutoPublishingComments( true ); 73 } 74 else 75 { 76 inBlog.setAutoPublishingComments(Boolean.parseBoolean(autoPublishCommentsStr)); 77 } 78 inBlog.setAutoPublishEntries(Boolean.parseBoolean( root.elementText("auto-publish-entries") ) ); 79 inBlog.setUseNotification(Boolean.parseBoolean( root.elementText("use-notification") ) ); 80 81 List questions = new ArrayList (); 82 for (Iterator iter = root.elementIterator("question"); iter.hasNext();) 83 { 84 Element q = (Element) iter.next(); 85 Question ques = new Question(); 86 ques.setId(q.attributeValue("id")); 87 ques.setDescription(q.attributeValue("description")); 88 ques.setAnswer(q.attributeValue("answer")); 89 questions.add(ques); 90 } 91 inBlog.setQuestions(questions); 92 getEntryArchive().loadLinks(inBlog); 93 } 94 95 public void saveBlog(Blog inBlog, Writer inWriter, String inEncoding) throws IOException 96 { 97 Element root = DocumentHelper.createElement("blog"); 98 root.addElement("title").setText(inBlog.getTitle()); 99 root.addElement("hostname").setText(inBlog.getHostName()); 100 root.addElement("author").setText(inBlog.getAuthor()); 101 root.addElement("description").setText(inBlog.getDescription()); 102 root.addElement("allow-anonymous-comments").setText(String.valueOf(inBlog.getAllowAnonymous())); 104 root.addElement("auto-publish-comments").setText(String.valueOf(inBlog.isAutoPublishingComments())); 105 106 root.addElement("archive-root-directory").setText(inBlog.getArchiveRootDirectory()); 107 108 109 Document doc = DocumentHelper.createDocument( root ); 110 111 OutputFormat format = OutputFormat.createPrettyPrint(); 112 format.setEncoding( inEncoding ); 113 new XMLWriter( inWriter, format ).write( doc ); 114 } 115 116 public void saveEntry(Blog inBlog, BlogEntry inEntry) throws OpenEditException 117 { 118 Page page = getPageManager().getPage(inEntry.getPath()); 119 String content = ""; 120 if ( inEntry.getDescription() != null) 121 { 122 content = inEntry.getDescription().getValue(); 123 } 124 StringItem item = new StringItem(inEntry.getPath(),content,"UTF-8"); 125 page.setContentItem(item); 126 getPageManager().putPage(page); 127 128 XMLConfiguration pageconfig = new XMLConfiguration("page"); 130 XMLConfiguration blog = (XMLConfiguration)pageconfig.addChild("blog"); 131 blog.setAttribute("author",inEntry.getAuthor()); 132 blog.setAttribute("username",inEntry.getUser().getUserName()); 133 134 blog.setAttribute("title",inEntry.getTitle()); 135 blog.addChild("publishdate").setValue(inEntry.getGmtStandard().format(inEntry.getPublishedDate())); 136 blog.addChild("visible").setValue(String.valueOf(inEntry.isVisible())); 137 138 StringItem xconf = new StringItem(page.getPageSettings().getXConf().getPath(),pageconfig.toXml("UTF-8"),"UTF-8"); 139 getPageManager().getPageSettingsManager().saveSetting(xconf); 140 getPageManager().clearCache(page); 141 142 Link existing = inEntry.getLinkTree().getLink(inEntry.getId()); 143 if ( existing == null) 144 { 145 Link link = new Link(); 147 link.setId(inEntry.getId()); 148 link.setPath(inEntry.getPath()); 149 inEntry.getLinkTree().insertLink("index",link); 151 } 152 getEntryArchive().saveLinks(inBlog); 153 154 155 } 156 157 public EntryArchive getEntryArchive() 158 { 159 return fieldEntryArchive; 160 } 161 162 public void setEntryArchive(EntryArchive inEntryArchive) 163 { 164 fieldEntryArchive = inEntryArchive; 165 } 166 167 } 168 | Popular Tags |