001: /*
002: * Created on Oct 18, 2006
003: */
004: package org.openedit.blog.archive;
005:
006: import java.io.StringWriter;
007: import java.io.Writer;
008: import java.text.SimpleDateFormat;
009: import java.util.ArrayList;
010: import java.util.Date;
011: import java.util.Iterator;
012: import java.util.List;
013:
014: import org.openedit.links.LinkTree;
015: import org.openedit.links.XmlLinkLoader;
016: import org.openedit.repository.ContentItem;
017: import org.openedit.repository.filesystem.StringItem;
018:
019: import com.openedit.OpenEditException;
020: import com.openedit.blog.Blog;
021: import com.openedit.blog.BlogEntry;
022: import com.openedit.config.Configuration;
023: import com.openedit.page.Page;
024: import com.openedit.users.User;
025: import com.openedit.util.FileUtils;
026: import com.sun.syndication.feed.synd.SyndCategoryImpl;
027: import com.sun.syndication.feed.synd.SyndContentImpl;
028:
029: public class EntryArchive extends BaseArchive {
030: protected CommentArchive fieldCommentArchive;
031:
032: public BlogEntry createEntry(Blog inBlog, Page inPath)
033: throws OpenEditException {
034: // if( !inPath.exists() )
035: // {
036: // return null;
037: // }
038: BlogEntry entry = new BlogEntry();
039: entry.setCommentArchive(getCommentArchive());
040: entry.setPath(inPath.getPath());
041: entry.setLink(inBlog.getHostName() + inPath);
042:
043: entry.setPageManager(getPageManager());
044: entry.setLinkTree(inBlog.getLinkTree());
045:
046: Configuration config = inPath.getPageSettings().getUserDefined(
047: "blog");
048: if (config != null) {
049: entry.setTitle(config.getAttribute("title"));
050: entry.setAuthor(config.getAttribute("author"));
051:
052: String username = config.getAttribute("username");
053: if (username != null) {
054: User user = getUserManager().getUser(username);
055: entry.setUser(user);
056: }
057: String pubdate = config.getChildValue("publishdate");
058: String visible = config.getChildValue("visible");
059: for (Iterator iter = config.getChildIterator("property"); iter
060: .hasNext();) {
061: Configuration element = (Configuration) iter.next();
062: String value = element.getValue();
063: String key = element.getAttribute("id");
064: if (key != null && value != null) {
065: entry.addProperty(key, value);
066: }
067: }
068: config.getChildIterator("property");
069:
070: entry.setVisible(visible == null || visible.equals("true"));
071: entry.setPublishedDate(entry.parse(pubdate));
072: List categories = new ArrayList();
073: for (Iterator iter = config.getChildren("category")
074: .iterator(); iter.hasNext();) {
075: Configuration element = (Configuration) iter.next();
076: SyndCategoryImpl cat = new SyndCategoryImpl();
077: cat.setName(element.getValue());
078: categories.add(cat);
079: }
080: entry.setCategories(categories);
081: entry.setDescription(inPath.getContent());
082: } else {
083: entry.setTitle(inPath.get("title"));
084: entry.setPublishedDate(inPath.getLastModified());
085: ContentItem item = getPageManager().getLatestVersion(
086: entry.getPath());
087: if (item != null) {
088: entry.setAuthor(item.getAuthor());
089: User user = getUserManager().getUser(item.getAuthor());
090: entry.setUser(user);
091: }
092: }
093: return entry;
094: }
095:
096: /**
097: *
098: */
099: public void saveLinks(Blog inBlog) throws OpenEditException {
100:
101: String slink = inBlog.getBlogHome() + "/permalinks.xml";
102:
103: Page linkpage = getPageManager().getPage(slink);
104: Writer out = new StringWriter();
105: try {
106: XmlLinkLoader loader = new XmlLinkLoader();
107: loader.saveLinks(inBlog.getLinkTree(), out, linkpage
108: .getCharacterEncoding());
109: } finally {
110: FileUtils.safeClose(out);
111: }
112: StringItem item = new StringItem(linkpage.getPath(), out
113: .toString(), linkpage.getCharacterEncoding());
114: linkpage.setContentItem(item);
115: getPageManager().putPage(linkpage);
116:
117: }
118:
119: /**
120: *
121: */
122: public void loadLinks(Blog inBlog) throws OpenEditException {
123: String slink = inBlog.getBlogHome() + "/permalinks.xml";
124: Page linkpage = getPageManager().getPage(slink);
125: if (!linkpage.exists()) {
126: slink = inBlog.getBlogHome() + "/links.xml";
127: linkpage = getPageManager().getPage(slink);
128: if (!linkpage.exists()) {
129: throw new OpenEditException("could not find " + slink);
130: }
131: }
132:
133: XmlLinkLoader loader = new XmlLinkLoader();
134: LinkTree tree = loader.loadLinks(linkpage);
135: inBlog.setLinkTree(tree);
136: }
137:
138: public CommentArchive getCommentArchive() {
139: return fieldCommentArchive;
140: }
141:
142: public void setCommentArchive(CommentArchive inCommentArchive) {
143: fieldCommentArchive = inCommentArchive;
144: }
145:
146: public BlogEntry createEntry(Blog inBlog, User inUser) {
147: BlogEntry entry = new BlogEntry();
148: //
149: entry.setCommentArchive(getCommentArchive());
150: Date now = new Date();
151: entry.setPublishedDate(now);
152:
153: SimpleDateFormat format = new SimpleDateFormat(
154: "yyyy/M/d/HHmmss");
155: String path = inBlog.getArchiveRootDirectory() + "/"
156: + format.format(now) + ".html";
157:
158: entry.setPath(path);
159:
160: entry.setLink(inBlog.getHostName() + inBlog.getBlogHome()
161: + path);
162:
163: entry.setLinkTree(inBlog.getLinkTree());
164: entry.setPageManager(getPageManager());
165: SyndContentImpl content = new SyndContentImpl();
166: content.setType("text/html");
167: entry.setDescription(content);
168:
169: entry.setUser(inUser);
170: return entry;
171: }
172:
173: }
|