[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao ...
Christian Bauer
christian at hibernate.org
Sat Aug 25 13:59:20 EDT 2007
User: cbauer
Date: 07/08/25 13:59:20
Modified: examples/wiki/src/main/org/jboss/seam/wiki/core/dao
UserDAO.java FeedDAO.java NodeDAO.java
Log:
Major refactoring of navigation
Revision Changes Path
1.7 +2 -2 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserDAO.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: UserDAO.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserDAO.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- UserDAO.java 22 Apr 2007 19:19:29 -0000 1.6
+++ UserDAO.java 25 Aug 2007 17:59:20 -0000 1.7
@@ -37,7 +37,7 @@
public User findUser(String username, boolean onlyActivated, boolean caseSensitive) {
entityManager.joinTransaction();
- StringBuffer query = new StringBuffer("select u from User u where");
+ StringBuilder query = new StringBuilder("select u from User u where");
if (caseSensitive)
query.append(" u.username = :username");
else
@@ -58,7 +58,7 @@
public User findUserWithActivationCode(String activationCode) {
entityManager.joinTransaction();
- StringBuffer query = new StringBuffer("select u from User u where u.activationCode = :activationCode");
+ StringBuilder query = new StringBuilder("select u from User u where u.activationCode = :activationCode");
try {
return (User) entityManager
.createQuery(query.toString())
1.12 +1 -1 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/FeedDAO.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: FeedDAO.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/FeedDAO.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- FeedDAO.java 17 Aug 2007 13:00:26 -0000 1.11
+++ FeedDAO.java 25 Aug 2007 17:59:20 -0000 1.12
@@ -41,7 +41,7 @@
public List<FeedEntry> findLastFeedEntries(Long feedId, int maxResults) {
restrictedEntityManager.joinTransaction();
return (List<FeedEntry>) restrictedEntityManager
- .createQuery("select fe from Feed f join f.feedEntries fe where f.id = :feedId order by f.publishedDate desc")
+ .createQuery("select fe from Feed f join f.feedEntries fe where f.id = :feedId order by fe.publishedDate desc")
.setParameter("feedId", feedId)
.setHint("org.hibernate.cacheable", true)
.setMaxResults(maxResults)
1.19 +65 -1 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.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- NodeDAO.java 17 Aug 2007 13:00:26 -0000 1.18
+++ NodeDAO.java 25 Aug 2007 17:59:20 -0000 1.19
@@ -14,6 +14,7 @@
import org.jboss.seam.wiki.core.nestedset.NestedSetNode;
import org.jboss.seam.wiki.core.nestedset.NestedSetNodeWrapper;
import org.jboss.seam.wiki.core.nestedset.NestedSetResultTransformer;
+import org.jboss.seam.wiki.core.nestedset.NestedSetNodeDuplicator;
import org.jboss.seam.Component;
import org.hibernate.Session;
import org.hibernate.Criteria;
@@ -201,6 +202,14 @@
.list();
}
+ public Long findNumberOfHistoricalNodes(Node node) {
+ if (node == null) return null;
+ return (Long)getSession().createQuery("select count(n) from HistoricalNode n where n.nodeId = :nodeId")
+ .setParameter("nodeId", node.getId())
+ .uniqueResult();
+
+ }
+
// Multi-row constraint validation
public boolean isUniqueWikiname(Node node) {
Node foundNode = findNodeInArea(node.getParent().getAreaNumber(), node.getWikiname(), entityManager);
@@ -314,21 +323,76 @@
NestedSetNodeWrapper<Node> startNodeWrapper = new NestedSetNodeWrapper<Node>(startNode, comp);
NestedSetResultTransformer<Node> transformer = new NestedSetResultTransformer<Node>(startNodeWrapper, flattenToLevel);
+ // Make hollow copies for menu display so that changes to the model in the persistence context don't appear
+ transformer.setNestedSetNodeDuplicator(
+ new NestedSetNodeDuplicator<Node>() {
+ public Node duplicate(Node nestedSetNode) {
+ Node copy = null;
+ if (nestedSetNode instanceof Document) {
+ copy = new Document((Document)nestedSetNode);
+ } else if (nestedSetNode instanceof Directory) {
+ copy = new Directory((Directory)nestedSetNode);
+ } else if (nestedSetNode instanceof File) {
+ copy = new File((File)nestedSetNode);
+ }
+ if (copy != null) {
+ copy.setId(nestedSetNode.getId());
+ copy.setParent(nestedSetNode.getParent());
+ }
+ return copy;
+ }
+ }
+ );
+
appendNestedSetNodes(transformer, maxDepth, showAdminOnly, "n1.menuItem = true");
return startNodeWrapper;
}
+ // TODO: Not used
+ public NestedSetNodeWrapper<Node> findWithCommentCountOrderedByCreatedOn(Node startNode, Long maxDepth, Long flattenToLevel) {
+ // Needs to be equals() safe (SortedSet):
+ // - compare by creation date (note: don't compare data/timestamp), if equal
+ // - compare by name, if equal
+ // - compare by id
+ Comparator<NestedSetNodeWrapper<Node>> comp =
+ new Comparator<NestedSetNodeWrapper<Node>>() {
+ public int compare(NestedSetNodeWrapper<Node> o1, NestedSetNodeWrapper<Node> o2) {
+ Node node1 = o1.getWrappedNode();
+ Node node2 = o2.getWrappedNode();
+ if (node1.getCreatedOn().getTime() != node2.getCreatedOn().getTime()) {
+ return node1.getCreatedOn().getTime() > node2.getCreatedOn().getTime() ? -1 : 1;
+ } else if (node1.getName().compareTo(node2.getName()) != 0) {
+ return node1.getName().compareTo(node2.getName());
+ }
+ return node1.getId().compareTo(node2.getId());
+ }
+ };
+
+ Map<String, String> additionalProjections = new LinkedHashMap<String, String>();
+ additionalProjections.put("commentCount", "(select count(c) from Comment c where c.document.id = n1.id)");
+
+ NestedSetNodeWrapper<Node> startNodeWrapper = new NestedSetNodeWrapper<Node>(startNode, comp);
+ NestedSetResultTransformer<Node> transformer =
+ new NestedSetResultTransformer<Node>(startNodeWrapper, flattenToLevel, additionalProjections);
+
+ appendNestedSetNodes(transformer, maxDepth, false);
+ return startNodeWrapper;
+ }
+
public <N extends NestedSetNode> void appendNestedSetNodes(NestedSetResultTransformer<N> transformer,
Long maxDepth,
boolean showAdminOnly,
String... restrictionFragment) {
N startNode = transformer.getRootWrapper().getWrappedNode();
- StringBuffer queryString = new StringBuffer();
+ StringBuilder queryString = new StringBuilder();
queryString.append("select").append(" ");
queryString.append("count(n1.id) as nestedSetNodeLevel").append(", ");
queryString.append("n1 as nestedSetNode").append(" ");
+ for (Map.Entry<String, String> entry : transformer.getAdditionalProjections().entrySet()) {
+ queryString.append(", ").append(entry.getValue()).append(" as ").append(entry.getKey()).append(" ");
+ }
queryString.append("from ").append(startNode.getTreeSuperclassEntityName()).append(" n1, ");
queryString.append(startNode.getTreeSuperclassEntityName()).append(" n2 ");
queryString.append("where n1.nsThread = :thread and n2.nsThread = :thread").append(" ");
More information about the jboss-cvs-commits
mailing list