[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao ...
Christian Bauer
christian at hibernate.org
Sun Apr 8 11:10:37 EDT 2007
User: cbauer
Date: 07/04/08 11:10:37
Modified: examples/wiki/src/main/org/jboss/seam/wiki/core/dao
NodeDAO.java
Added: examples/wiki/src/main/org/jboss/seam/wiki/core/dao
FeedDAO.java
Log:
Implemented Atom feeds for site and directories
Revision Changes Path
1.10 +40 -0 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/NodeDAO.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: NodeDAO.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/NodeDAO.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- NodeDAO.java 4 Apr 2007 10:38:13 -0000 1.9
+++ NodeDAO.java 8 Apr 2007 15:10:37 -0000 1.10
@@ -22,6 +22,7 @@
import javax.persistence.EntityNotFoundException;
import javax.persistence.NoResultException;
import java.util.List;
+import java.util.ArrayList;
/**
* DAO for nodes, transparently respects security access levels.
@@ -191,6 +192,45 @@
.list();
}
+ // TODO: Although it seem like a good idea this is broken until I implement ON CASCADE DELETE on the foreign keys
+ public void removeChildNodes(Directory dir) {
+ throw new UnsupportedOperationException("Not implemented, see TODO");
+ /*
+ entityManager.joinTransaction();
+
+ // Find all the parents of this area whose children we should NOT delete
+ List<Long> excludeIdentifiers = new ArrayList<Long>();
+ Directory temp = dir;
+ while (temp.getParent() != null && temp.getParent().getId() != null) {
+ excludeIdentifiers.add(temp.getParent().getId());
+ temp = temp.getParent();
+ }
+
+ // Avoid FK violation if one of the child nodes is the default document of the directory
+ entityManager.createQuery("update Node n set n.defaultDocument = null where n = :node").setParameter("node", dir).executeUpdate();
+
+ System.out.println("################# DELETING FILES");
+ // Delete all records from the File secondary table
+ ((Session)entityManager.getDelegate())
+ .createQuery("delete from File f where f.areaNumber = :area" +
+ " and f.parent.id not in (:excludedIdentifiers)")
+ .setParameter("area", dir.getAreaNumber())
+ .setParameterList("excludedIdentifiers", excludeIdentifiers)
+ .executeUpdate();
+
+ System.out.println("################# DELETING NODES");
+
+ // Delete all records from the Node main table
+ ((Session)entityManager.getDelegate())
+ .createQuery("delete from Node n where n.areaNumber = :area" +
+ " and n.parent.id not in (:excludedIdentifiers) and not n = :exclude")
+ .setParameter("area", dir.getAreaNumber())
+ .setParameter("exclude", dir)
+ .setParameterList("excludedIdentifiers", excludeIdentifiers)
+ .executeUpdate();
+ */
+ }
+
// Multi-row constraint validation
public boolean isUniqueWikiname(Node node) {
Node foundNode = findNodeInArea(node.getParent().getAreaNumber(), node.getWikiname(), entityManager);
1.1 date: 2007/04/08 15:10:37; author: cbauer; state: Exp;jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/FeedDAO.java
Index: FeedDAO.java
===================================================================
package org.jboss.seam.wiki.core.dao;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.annotations.In;
import org.jboss.seam.wiki.core.model.*;
import org.jboss.seam.wiki.core.engine.WikiTextParser;
import org.jboss.seam.wiki.core.engine.WikiTextRenderer;
import org.jboss.seam.wiki.core.engine.WikiLink;
import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
import org.jboss.seam.wiki.util.WikiUtil;
import org.jboss.seam.Component;
import javax.persistence.EntityManager;
import javax.persistence.EntityNotFoundException;
import javax.persistence.NoResultException;
import java.util.List;
import java.util.Set;
import java.util.HashSet;
/**
* DAO for feeds.
*
* @author Christian Bauer
*
*/
@Name("feedDAO")
@AutoCreate
@Transactional
public class FeedDAO {
@In protected EntityManager restrictedEntityManager;
public Feed findFeed(Long feedId) {
restrictedEntityManager.joinTransaction();
try {
return (Feed) restrictedEntityManager
.createQuery("select f from Feed f where f.id = :id")
.setParameter("id", feedId)
.getSingleResult();
} catch (EntityNotFoundException ex) {
} catch (NoResultException ex) {}
return null;
}
public List<FeedEntry> findFeedEntries(Feed feed) {
restrictedEntityManager.joinTransaction();
//noinspection unchecked
return (List<FeedEntry>)restrictedEntityManager
.createQuery("select fe from FeedEntry fe join fe.feeds f where f = :feed")
.setParameter("feed", feed)
.getResultList();
}
public void createFeedEntries(Document document) {
restrictedEntityManager.joinTransaction();
Set<Feed> feeds = new HashSet<Feed>();
Directory temp = document.getParent();
while (temp.getParent() != null) {
if (temp.getFeed() != null) feeds.add(temp.getFeed());
temp = temp.getParent();
}
feeds.add(temp.getFeed()); // Reached wiki root, feed for whole site
FeedEntry feedEntry = new FeedEntry();
feedEntry.setDocument(document);
feedEntry.setLink(renderFeedURL(document));
feedEntry.setTitle(document.getName());
feedEntry.setAuthor(document.getCreatedBy().getFullname());
feedEntry.setDescriptionType("text/html");
feedEntry.setDescriptionValue(renderWikiText(document.getContent()));
feedEntry.getFeeds().addAll(feeds);
restrictedEntityManager.persist(feedEntry);
}
public void updateFeedEntries(Document document) {
restrictedEntityManager.joinTransaction();
int updatedEntries = restrictedEntityManager
.createQuery("update FeedEntry fe set" +
" fe.updatedDate = :date," +
" fe.title = :title," +
" fe.author = :author, " +
" fe.descriptionValue = :description" +
" where fe.document = :document")
.setParameter("date", document.getLastModifiedOn())
.setParameter("title", document.getName())
.setParameter("author", document.getLastModifiedBy().getFullname())
.setParameter("description", renderWikiText(document.getContent()))
.setParameter("document", document)
.executeUpdate();
if (updatedEntries == 0) createFeedEntries(document);
}
public void removeFeedEntries(Document document) {
restrictedEntityManager.joinTransaction();
try {
FeedEntry entry = (FeedEntry) restrictedEntityManager
.createQuery("select fe from FeedEntry fe where fe.document = :document")
.setParameter("document", document)
.getSingleResult();
restrictedEntityManager.remove(entry);
} catch (EntityNotFoundException ex) {
} catch (NoResultException ex) {}
}
private String renderFeedURL(Node node) {
WikiPreferences wikiPrefs = (WikiPreferences) Component.getInstance("wikiPreferences");
return wikiPrefs.getBaseUrl() + WikiUtil.renderURL(node);
}
private String renderWikiText(String wikiText) {
// Use the WikiTextParser to resolve macros
WikiTextParser parser = new WikiTextParser(wikiText, false);
// Set a customized renderer for parser macro callbacks
parser.setRenderer(
new WikiTextRenderer() {
public String renderInlineLink(WikiLink inlineLink) {
return !inlineLink.isBroken() ?
"<a href=\""
+ renderFeedURL(inlineLink.getNode())
+ "\">"
+ inlineLink.getDescription()
+ "</a>" : "[Broken Link]";
}
public String renderExternalLink(WikiLink externalLink) {
return "<a href=\""
+ externalLink.getUrl()
+ "\">"
+ externalLink.getDescription()
+ "</a>";
}
public String renderFileAttachmentLink(int attachmentNumber, WikiLink attachmentLink) {
return "[Attachment]";
}
public String renderThumbnailImageInlineLink(WikiLink inlineLink) {
return "[Embedded Image]";
}
public String renderMacro(String macroName) {
return "[Embedded Plugin]";
}
public void setAttachmentLinks(List<WikiLink> attachmentLinks) {}
public void setExternalLinks(List<WikiLink> externalLinks) {}
}
);
// Run the parser
parser.parse(true);
return parser.toString();
}
}
More information about the jboss-cvs-commits
mailing list