[seam-commits] Seam SVN: r11995 - in branches/community/Seam_2_2/examples/wiki: src/etc/META-INF and 30 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Wed Jan 27 12:13:29 EST 2010


Author: christian.bauer at jboss.com
Date: 2010-01-27 12:13:25 -0500 (Wed, 27 Jan 2010)
New Revision: 11995

Added:
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiTreeNode.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiTreeNodeEntityConverter.java
Removed:
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/Queries.hbm.xml
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectoryDisplayPositionComparator.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectoryNameComparator.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentCountComment.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentLastComment.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/nestedset/
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenuItem.xhtml
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayMenu.java
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/MenuTests.java
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/nestedset/
   branches/community/Seam_2_2/examples/wiki/view/includes/mainMenuItem.xhtml
Modified:
   branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-dev-war.xml
   branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-prod-war.xml
   branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-test-war.xml
   branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/components.xml
   branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/pages.xml
   branches/community/Seam_2_2/examples/wiki/src/etc/i18n/messages_en.properties
   branches/community/Seam_2_2/examples/wiki/src/etc/production.sql
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentNodeRemover.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentQuery.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryBrowser.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/prefs/CommentsPreferences.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/TagDAO.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserRoleAccessFactory.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeDAO.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/FeedDAO.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiCommentFeedEntryManager.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/DatabaseObjects.hbm.xml
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/FeedEntry.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/NativeQueries.hbm.xml
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiComment.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectory.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenu.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocQuery.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenu.xhtml
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirToc.xhtml
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirMenu.css
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirToc.css
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirMenu.css
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirToc.css
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirMenu.css
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirToc.css
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDAO.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowser.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowserDAO.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionHome.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqControls.xhtml
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumDAO.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumQueries.hbm.xml
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumReplyFeedEntryManager.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ReplyHome.java
   branches/community/Seam_2_2/examples/wiki/src/test/AllTests.tng.xml
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/DocumentFeedEntries.dbunit.xml
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/FAQData.dbunit.xml
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/ForumData.dbunit.xml
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/HelpDocuments.dbunit.xml
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/KnowledgeBase.dbunit.xml
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayComments.java
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/dao/TagDAOTests.java
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/dao/WikiNodeDAOTests.java
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/BasicNodeOperations.java
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/ClipboardTests.java
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/Commenting.java
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/CommentTests.java
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/DirectoryTests.java
   branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/plugin/TopicHomeTests.java
   branches/community/Seam_2_2/examples/wiki/view/dirDisplay_d.xhtml
   branches/community/Seam_2_2/examples/wiki/view/docDisplay_d.xhtml
   branches/community/Seam_2_2/examples/wiki/view/includes/commentsDisplay.xhtml
   branches/community/Seam_2_2/examples/wiki/view/includes/directoryBrowserPath.xhtml
   branches/community/Seam_2_2/examples/wiki/view/includes/directoryBrowserTree.xhtml
   branches/community/Seam_2_2/examples/wiki/view/includes/mainMenu.xhtml
   branches/community/Seam_2_2/examples/wiki/view/themes/default/css/mainMenu.css
   branches/community/Seam_2_2/examples/wiki/view/themes/inrelationto/css/inrelationto.css
   branches/community/Seam_2_2/examples/wiki/view/themes/sfwkorg/css/sfwk.css
Log:
JBSEAM-4499, removed nested set datamodel

Modified: branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-dev-war.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-dev-war.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-dev-war.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -75,14 +75,6 @@
             <property name="hibernate.ejb.collectioncache.org.jboss.seam.wiki.core.model.Feed.feedEntries"
                       value="read-write, WikiFeedEntryCollection"/>
 
-            <!-- Nested Set handling through special Hibernate event listeners -->
-            <property name="hibernate.ejb.event.flush"
-                      value="org.jboss.seam.wiki.core.nestedset.listener.NestedSetFlushEventListener"/>
-            <property name="hibernate.ejb.event.post-insert"
-                      value="org.jboss.seam.wiki.core.nestedset.listener.NestedSetPostInsertEventListener"/>
-            <property name="hibernate.ejb.event.post-delete"
-                      value="org.jboss.seam.wiki.core.nestedset.listener.NestedSetPostDeleteEventListener"/>
-
         </properties>
     </persistence-unit>
 

Modified: branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-prod-war.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-prod-war.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-prod-war.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -72,14 +72,6 @@
             <property name="hibernate.ejb.collectioncache.org.jboss.seam.wiki.core.model.Feed.feedEntries"
                       value="read-write, WikiFeedEntryCollection"/>
 
-            <!-- Nested Set handling through special Hibernate event listeners -->
-            <property name="hibernate.ejb.event.flush"
-                      value="org.jboss.seam.wiki.core.nestedset.listener.NestedSetFlushEventListener"/>
-            <property name="hibernate.ejb.event.post-insert"
-                      value="org.jboss.seam.wiki.core.nestedset.listener.NestedSetPostInsertEventListener"/>
-            <property name="hibernate.ejb.event.post-delete"
-                      value="org.jboss.seam.wiki.core.nestedset.listener.NestedSetPostDeleteEventListener"/>
-
         </properties>
     </persistence-unit>
 

Modified: branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-test-war.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-test-war.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/etc/META-INF/persistence-test-war.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -47,14 +47,6 @@
             <property name="hibernate.generate_statistics" value="true"/>
             <property name="hibernate.session_factory_name" value="SessionFactories/lacewikiSF"/>
 
-            <!-- Nested Set handling through special Hibernate event listeners -->
-            <property name="hibernate.ejb.event.flush"
-                      value="org.jboss.seam.wiki.core.nestedset.listener.NestedSetFlushEventListener"/>
-            <property name="hibernate.ejb.event.post-insert"
-                      value="org.jboss.seam.wiki.core.nestedset.listener.NestedSetPostInsertEventListener"/>
-            <property name="hibernate.ejb.event.post-delete"
-                      value="org.jboss.seam.wiki.core.nestedset.listener.NestedSetPostDeleteEventListener"/>
-
         </properties>
 
     </persistence-unit>

Modified: branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/components.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/components.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/components.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -59,8 +59,8 @@
                          scope="CONVERSATION" precedence="20" entity-loader="#{restrictedEntityLoader}"/>
     <ui:jpa-entity-loader name="restrictedEntityLoader" entity-manager="#{restrictedEntityManager}"/>
 
-    <ui:entity-converter name="nestedSetNodeWrapperRestrictedEntityConverter" 
-                         class="org.jboss.seam.wiki.core.nestedset.ui.NestedSetNodeWrapperEntityConverter"
+    <ui:entity-converter name="wikiTreeNodeRestrictedEntityConverter"
+                         class="org.jboss.seam.wiki.core.ui.WikiTreeNodeEntityConverter"
                          scope="CONVERSATION" precedence="20" entity-loader="#{restrictedEntityLoader}"/>
 
     <!-- Login and security -->

Modified: branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/pages.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/pages.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/pages.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -339,13 +339,6 @@
         </redirect>
     </exception>
 
-    <exception class="org.jboss.seam.wiki.core.nestedset.listener.NestedSetLockTimeoutException">
-        <end-conversation before-redirect="true"/>
-        <redirect view-id="/wiki.xhtml">
-            <message severity="WARN">#{messages['lacewiki.msg.LockTimeoutError']}</message>
-        </redirect>
-    </exception>
-
     <!-- This occurs on concurrent delete of comments -->
     <exception class="javax.persistence.EntityNotFoundException" log="false">
         <end-conversation before-redirect="true"/>

Modified: branches/community/Seam_2_2/examples/wiki/src/etc/i18n/messages_en.properties
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/etc/i18n/messages_en.properties	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/etc/i18n/messages_en.properties	2010-01-27 17:13:25 UTC (rev 11995)
@@ -773,7 +773,6 @@
 lacewiki.preferences.comments.Name=Core: Comments
 lacewiki.preferences.comments.ListAscending=List flat comments ascending by date (or descending)
 lacewiki.preferences.comments.EnableByDefault=Enable comments by default for new documents
-lacewiki.preferences.comments.Threaded=Threaded comment display (or flat)
 
 
 # Templates

Modified: branches/community/Seam_2_2/examples/wiki/src/etc/production.sql
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/etc/production.sql	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/etc/production.sql	2010-01-27 17:13:25 UTC (rev 11995)
@@ -30,9 +30,8 @@
 INSERT INTO PREFERENCE VALUES(64,'UserManagement','createHomeAfterUserActivation',NULL,NULL,NULL,FALSE,NULL,0,NULL);
 INSERT INTO PREFERENCE VALUES(65,'UserManagement','homepageDefaultContent',NULL,NULL,NULL,NULL,'This is your homepage, login to edit it.',0,NULL);
 
-INSERT INTO PREFERENCE VALUES(70,'Comments','listAscending',NULL,NULL,NULL,FALSE,NULL,0,NULL);
+INSERT INTO PREFERENCE VALUES(70,'Comments','listAscending',NULL,NULL,NULL,TRUE,NULL,0,NULL);
 INSERT INTO PREFERENCE VALUES(71,'Comments','enableByDefault',NULL,NULL,NULL,TRUE,NULL,0,NULL);
-INSERT INTO PREFERENCE VALUES(72,'Comments','threaded',NULL,NULL,NULL,TRUE,NULL,0,NULL);
 
 INSERT INTO PREFERENCE VALUES(110,'LastModifiedDocuments','numberOfItems',5,NULL,NULL,NULL,NULL,0,NULL);
 INSERT INTO PREFERENCE VALUES(111,'LastModifiedDocuments','showUsernames',NULL,NULL,NULL,TRUE,NULL,0,NULL);
@@ -115,12 +114,12 @@
 INSERT INTO `WIKI_FILE` (`NODE_ID`, `FILE_REVISION`) VALUES (3,0);
 INSERT INTO `WIKI_FILE` (`NODE_ID`, `FILE_REVISION`) VALUES (7,0);
 
-INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `NS_LEFT`, `NS_RIGHT`, `NS_THREAD`, `DEFAULT_FILE_ID`) VALUES (1,'Root Area',1,12,1,NULL);
-INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `NS_LEFT`, `NS_RIGHT`, `NS_THREAD`, `DEFAULT_FILE_ID`) VALUES (2,'Start Area',2,3,1,3);
-INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `NS_LEFT`, `NS_RIGHT`, `NS_THREAD`, `DEFAULT_FILE_ID`) VALUES (4,'Default member area',8,9,1,NULL);
-INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `NS_LEFT`, `NS_RIGHT`, `NS_THREAD`, `DEFAULT_FILE_ID`) VALUES (5,'Help documents',4,7,1,NULL);
-INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `NS_LEFT`, `NS_RIGHT`, `NS_THREAD`, `DEFAULT_FILE_ID`) VALUES (6,'Creating and editing wiki documents',5,6,1,NULL);
-INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `NS_LEFT`, `NS_RIGHT`, `NS_THREAD`, `DEFAULT_FILE_ID`) VALUES (8,'Trash Area',10,11,1,NULL);
+INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `DEFAULT_FILE_ID`) VALUES (1,'Root Area',NULL);
+INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `DEFAULT_FILE_ID`) VALUES (2,'Start Area',3);
+INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `DEFAULT_FILE_ID`) VALUES (4,'Default member area',NULL);
+INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `DEFAULT_FILE_ID`) VALUES (5,'Help documents',NULL);
+INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `DEFAULT_FILE_ID`) VALUES (6,'Creating and editing wiki documents',NULL);
+INSERT INTO `WIKI_DIRECTORY` (`NODE_ID`, `DESCRIPTION`, `DEFAULT_FILE_ID`) VALUES (8,'Trash Area',NULL);
 
 INSERT INTO `WIKI_DOCUMENT` (`NODE_ID`, `CONTENT`, `CONTENT_MACROS`, `ENABLE_COMMENT_FORM`, `ENABLE_COMMENTS`, `ENABLE_COMMENTS_ON_FEEDS`, `FOOTER`, `FOOTER_MACROS`, `HEADER`, `HEADER_MACROS`, `NAME_AS_TITLE`) VALUES (3,'Welcome to LaceWiki.\n\nLogin with admin-admin and rebuild the search index in the administration area.',NULL,true,true,true,NULL,NULL,NULL,NULL,true);
 

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -138,7 +138,8 @@
         // Create home directory
         WikiDirectory memberArea = (WikiDirectory)Component.getInstance("memberArea");
 
-        WikiDirectory homeDirectory = new WikiDirectory(user.getUsername());
+        WikiDirectory homeDirectory = new WikiDirectory();
+        homeDirectory.setName(user.getUsername());
         homeDirectory.setWikiname(WikiUtil.convertToWikiName(homeDirectory.getName()));
         homeDirectory.setAreaNumber(memberArea.getAreaNumber());
         homeDirectory.setCreatedBy(user);

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -133,7 +133,12 @@
 
     @Override
     public String persist() {
+        // TODO: This is not pretty but this has really not been designed for non-threaded comments
+        WikiNode oldParent = getParentNode(); // Remember old parent
+        setParentNode(documentHome.getInstance()); // Set the "real" parent, which is the document
         String outcome = super.persist();
+        setParentNode(oldParent); // Reset old parent afterwards
+
         if (outcome != null) {
 
             if (documentHome.getInstance().isEnableCommentsOnFeeds()) {
@@ -144,10 +149,6 @@
                 getEntityManager().flush();
             }
 
-            getLog().debug("updating last comment aggregation for: " + documentHome.getInstance());
-            getWikiNodeDAO().updateWikiDocumentComments(documentHome.getInstance());
-            getEntityManager().flush();
-
             Events.instance().raiseEvent("Comment.persisted");
             endConversation();
             WikiRedirect.instance()
@@ -178,12 +179,6 @@
 
             remove();
             getEntityManager().clear();
-
-            getLog().debug("updating last comment aggregation for: " + documentHome.getInstance());
-            getWikiNodeDAO().updateWikiDocumentComments(documentHome.getInstance());
-            getEntityManager().flush();
-
-            getEntityManager().clear();
             Events.instance().raiseEvent("Comment.commentListRefresh");
         }
 

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentNodeRemover.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentNodeRemover.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentNodeRemover.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -10,7 +10,6 @@
 import org.jboss.seam.annotations.AutoCreate;
 import org.jboss.seam.wiki.core.model.WikiComment;
 
-import java.util.List;
 import java.io.Serializable;
 
 /**
@@ -34,18 +33,6 @@
     public void removeDependencies(WikiComment comment) {
         getLog().debug("removing dependencies of: " + comment);
 
-        List<WikiComment> children = getWikiNodeDAO().findWikiCommentSubtree(comment, true);
-        // These are ordered by level, deepest first, so no FK violation if we delete in that order
-        // (does it matter? Hibernate should sort it...)
-        for (WikiComment child : children) {
-            getLog().debug("deleting child comment: " + child);
-            feedDAO.removeFeedEntry(
-                feedDAO.findFeeds(child),
-                feedDAO.findFeedEntry(child)
-            );
-            getEntityManager().remove(child);
-        }
-
         feedDAO.removeFeedEntry(
             feedDAO.findFeeds(comment),
             feedDAO.findFeedEntry(comment)

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentQuery.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentQuery.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentQuery.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -54,11 +54,7 @@
             return;
         }
 
-        if (commentsPreferences.getThreaded()) {
-            comments = wikiNodeDAO.findWikiCommentsThreaded(documentHome.getInstance());
-        } else {
-            comments = wikiNodeDAO.findWikiCommentsFlat(documentHome.getInstance(), commentsPreferences.getListAscending());
-        }
+        comments = wikiNodeDAO.findWikiComments(documentHome.getInstance(), commentsPreferences.getListAscending());
     }
 
 }

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryBrowser.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryBrowser.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryBrowser.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -17,7 +17,6 @@
 import org.jboss.seam.log.Log;
 import org.jboss.seam.security.Identity;
 import org.jboss.seam.wiki.core.model.*;
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetNodeWrapper;
 import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
 import org.jboss.seam.wiki.core.dao.UserDAO;
 import org.jboss.seam.wiki.core.exception.InvalidWikiRequestException;
@@ -73,7 +72,10 @@
 
     private Long directoryId;
     private WikiDirectory instance;
-    private NestedSetNodeWrapper<WikiDirectory> treeRoot;
+
+    // TODO: No more nested set, rewriting this with the same functionality is more difficult...
+    //private NestedSetNodeWrapper<WikiDirectory> treeRoot;
+
     private List<WikiNode> childNodes;
     private Map<WikiNode, Boolean> selectedNodes = new HashMap<WikiNode,Boolean>();
     private Pager pager;
@@ -109,10 +111,12 @@
         pager = new Pager(settings.getPageSize());
     }
 
+    /*
     public NestedSetNodeWrapper<WikiDirectory> getTreeRoot() {
         if (treeRoot == null) loadTree();
         return treeRoot;
     }
+    */
 
     public void showTree() {
         settings.setTreeVisible(true);
@@ -122,6 +126,7 @@
         settings.setTreeVisible(false);
     }
 
+    /*
     // Open a node in the visible UI tree if its identifier is in the current path
     public boolean adviseTreeNodeOpened(UITree tree) {
 
@@ -170,6 +175,7 @@
         log.debug("selecting tree node: " + currentTreeNodeId);
         selectDirectory(currentTreeNodeId);
     }
+    */
 
     public void findInstance() {
         if (getDirectoryId() == null)
@@ -206,11 +212,13 @@
         refreshChildNodes();
     }
 
+    /*
     @Observer(value = {"Node.removed"}, create = false)
     public void loadTree() {
         WikiDirectory wikiRoot = (WikiDirectory) Component.getInstance("wikiRoot");
         treeRoot = wikiNodeDAO.findWikiDirectoryTree(wikiRoot);
     }
+    */
 
     @Observer(value = {"Node.removed", "Pager.pageChanged"}, create = false)
     public void refreshChildNodes() {
@@ -355,7 +363,7 @@
 
                     // TODO: Ugly and memory intensive, better use a database query but HQL updates are limited with joins
                     if (n.isInstance(WikiDocument.class)) {
-                        List<WikiComment> comments = wikiNodeDAO.findWikiCommentsFlat((WikiDocument)n, true);
+                        List<WikiComment> comments = wikiNodeDAO.findWikiComments((WikiDocument)n, true);
                         for (WikiComment comment : comments) {
                             comment.setAreaNumber(n.getAreaNumber());
                         }

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -14,11 +14,12 @@
 import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
 import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
 import org.jboss.seam.wiki.core.model.WikiDirectory;
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetNodeWrapper;
+import org.jboss.seam.wiki.core.model.WikiTreeNode;
 import org.jboss.seam.wiki.core.cache.PageFragmentCache;
 import org.jboss.seam.wiki.preferences.Preferences;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * Holds the nodes that are displayed in the site menu
@@ -38,12 +39,12 @@
     @In
     Integer currentAccessLevel;
 
-    NestedSetNodeWrapper<WikiDirectory> root;
-    public NestedSetNodeWrapper<WikiDirectory> getRoot() {
-        if (root == null) {
-            refreshRoot();
+    List<WikiTreeNode<WikiDirectory>> tree;
+    public List<WikiTreeNode<WikiDirectory>> getTree() {
+        if (tree == null) {
+            refreshTree();
         }
-        return root;
+        return tree;
     }
 
     public String getCacheRegion() {
@@ -59,13 +60,13 @@
     public void invalidateCache() {
         log.debug("invaliding menu items tree cache");
         PageFragmentCache.instance().removeAll(CACHE_REGION);
-        root = null;
+        tree = null;
     }
 
-    private void refreshRoot() {
+    private void refreshTree() {
         log.debug("Loading menu items tree");
         WikiPreferences wikiPreferences = Preferences.instance().get(WikiPreferences.class);
-        root = WikiNodeDAO.instance().findMenuItemTree(
+        tree = WikiNodeDAO.instance().findMenuItemTree(
                 (WikiDirectory)Component.getInstance("wikiRoot"),
                 wikiPreferences.getMainMenuDepth(),
                 wikiPreferences.getMainMenuLevels(),

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/prefs/CommentsPreferences.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/prefs/CommentsPreferences.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/prefs/CommentsPreferences.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -24,13 +24,6 @@
     @NotNull
     private Boolean enableByDefault;
 
-    @PreferenceProperty(
-        description = "#{messages['lacewiki.preferences.comments.Threaded']}",
-        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.USER}
-    )
-    @NotNull
-    private Boolean threaded;
-
     public Boolean getListAscending() {
         return listAscending;
     }
@@ -39,7 +32,4 @@
         return enableByDefault;
     }
 
-    public Boolean getThreaded() {
-        return threaded;
-    }
 }

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/TagDAO.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/TagDAO.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/TagDAO.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,18 +1,14 @@
 package org.jboss.seam.wiki.core.dao;
 
-import org.hibernate.Query;
 import org.hibernate.Session;
+import org.hibernate.Query;
 import org.hibernate.transform.Transformers;
 import org.jboss.seam.annotations.AutoCreate;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Logger;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.log.Log;
-import org.jboss.seam.wiki.core.model.DisplayTagCount;
-import org.jboss.seam.wiki.core.model.WikiDirectory;
-import org.jboss.seam.wiki.core.model.WikiFile;
-import org.jboss.seam.wiki.core.model.WikiNode;
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetQueryBuilder;
+import org.jboss.seam.wiki.core.model.*;
 
 import javax.persistence.EntityManager;
 import java.util.Collections;
@@ -28,34 +24,32 @@
     @In
     protected EntityManager restrictedEntityManager;
 
-    // TODO: This query needs to be optimized, the nested subselect with in() is not good for MySQL, needs to be a join
+    @In
+    protected WikiNodeDAO wikiNodeDAO;
+
     public List<DisplayTagCount> findTagCounts(WikiDirectory startDir, WikiFile ignoreFile, int limit, long minimumCount) {
 
         StringBuilder queryString = new StringBuilder();
-
         queryString.append("select t as tag, count(t) as count").append(" ");
         queryString.append("from WikiFile f join f.tags as t").append(" ");
-        queryString.append("where f.parent.id in");
-        queryString.append("(").append(getNestedDirectoryQuery(startDir)).append(")").append(" ");
+        queryString.append("where f.parent.id in (:parentDirIds) ");
         if (ignoreFile != null && ignoreFile.getId() != null) queryString.append("and not f = :ignoreFile").append(" ");
         queryString.append("group by t").append(" ");
         queryString.append("having count(t) >= :minimumCount").append(" ");
         queryString.append("order by count(t) desc, t asc ");
 
-        Query nestedSetQuery = getSession().createQuery(queryString.toString());
-        nestedSetQuery.setParameter("nsThread", startDir.getNodeInfo().getNsThread());
-        nestedSetQuery.setParameter("nsLeft", startDir.getNodeInfo().getNsLeft());
-        nestedSetQuery.setParameter("nsRight", startDir.getNodeInfo().getNsRight());
-        nestedSetQuery.setParameter("minimumCount", minimumCount);
+        Query tagQuery = getSession().createQuery(queryString.toString());
+        tagQuery.setParameterList("parentDirIds", wikiNodeDAO.findWikiDirectoryTreeIDs(startDir));
+        tagQuery.setParameter("minimumCount", minimumCount);
         if (ignoreFile != null && ignoreFile.getId() != null)
-            nestedSetQuery.setParameter("ignoreFile", ignoreFile);
+            tagQuery.setParameter("ignoreFile", ignoreFile);
         if (limit > 0) {
-            nestedSetQuery.setMaxResults(limit);
+            tagQuery.setMaxResults(limit);
         }
 
-        nestedSetQuery.setResultTransformer(Transformers.aliasToBean(DisplayTagCount.class));
+        tagQuery.setResultTransformer(Transformers.aliasToBean(DisplayTagCount.class));
 
-        return nestedSetQuery.list();
+        return tagQuery.list();
     }
 
     public List<WikiFile> findWikFiles(WikiDirectory startDir, WikiFile ignoreFile, final String tag,
@@ -65,32 +59,21 @@
 
         StringBuilder queryString = new StringBuilder();
 
-        queryString.append("select distinct f from WikiFile f join f.tags as t where f.parent.id in");
-        queryString.append("(").append(getNestedDirectoryQuery(startDir)).append(")").append(" ");
+        queryString.append("select distinct f from WikiFile f join f.tags as t ");
+        queryString.append("where f.parent.id in (:parentDirIds) ");
         if (ignoreFile != null && ignoreFile.getId() != null) queryString.append("and not f = :ignoreFile").append(" ");
         queryString.append("and t = :tag").append(" ");
         queryString.append("order by f.").append(orderBy.name()).append(" ").append(orderAscending ? "asc" : "desc");
 
-        Query nestedSetQuery = getSession().createQuery(queryString.toString());
-        nestedSetQuery.setParameter("nsThread", startDir.getNodeInfo().getNsThread());
-        nestedSetQuery.setParameter("nsLeft", startDir.getNodeInfo().getNsLeft());
-        nestedSetQuery.setParameter("nsRight", startDir.getNodeInfo().getNsRight());
+        Query fileQuery = getSession().createQuery(queryString.toString());
+        fileQuery.setParameterList("parentDirIds", wikiNodeDAO.findWikiDirectoryTreeIDs(startDir));
         if (ignoreFile != null && ignoreFile.getId() != null)
-            nestedSetQuery.setParameter("ignoreFile", ignoreFile);
-        nestedSetQuery.setParameter("tag", tag);
+            fileQuery.setParameter("ignoreFile", ignoreFile);
+        fileQuery.setParameter("tag", tag);
 
-        return nestedSetQuery.list();
+        return fileQuery.list();
     }
 
-    private String getNestedDirectoryQuery(WikiDirectory dir) {
-        NestedSetQueryBuilder builder = new NestedSetQueryBuilder(dir, true);
-        StringBuilder queryString = new StringBuilder();
-        queryString.append("select distinct ").append(NestedSetQueryBuilder.NODE_ALIAS).append(".id").append(" ");
-        queryString.append("from ").append(builder.getFromClause()).append(" ");
-        queryString.append("where ").append(builder.getWhereClause()).append(" ");
-        return queryString.toString();
-    }
-
     private Session getSession() {
         return ((Session)((org.jboss.seam.persistence.EntityManagerProxy) restrictedEntityManager).getDelegate());
     }

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserRoleAccessFactory.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserRoleAccessFactory.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserRoleAccessFactory.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -36,6 +36,15 @@
     @Factory(value = "guestUser", scope = ScopeType.SESSION)
     public User getGuestUser() {
         try {
+            /*
+            This causes the following warning in Hibernate 3.3:
+
+            WARN  [org.hibernate.hql.ast.QueryTranslatorImpl] firstResult/maxResults specified with collection fetch; applying in memory!
+
+            Of course that is just wrong and it looks like this warning was added in a hurry between 3.2 and 3.3. Or this is not the
+            query that is causing the warning - who knows! It probably would have been too easy printing the offending query string
+            with the message...
+             */
             User guestUser =
                     (User) entityManager
                             .createQuery("select u from User u left join fetch u.roles where u.username = '"+User.GUEST_USERNAME+"'")

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeDAO.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeDAO.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeDAO.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -9,11 +9,6 @@
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.log.Log;
 import org.jboss.seam.wiki.core.model.*;
-import org.jboss.seam.wiki.core.nestedset.NestedSetNode;
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetDuplicator;
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetNodeWrapper;
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetQueryBuilder;
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetResultTransformer;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityNotFoundException;
@@ -56,8 +51,8 @@
                     .setHint("org.hibernate.comment", "Find wikinode by id")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
 
@@ -85,8 +80,8 @@
                     .setHint("org.hibernate.comment", "Find node in area")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -99,8 +94,8 @@
                     .setHint("org.hibernate.comment", "Find number of wikinode children")
                     .setHint("org.hibernate.cacheable", true)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -138,99 +133,23 @@
                     .setHint("org.hibernate.comment", "Find comment by id")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
 
-    public List<WikiComment> findWikiCommentsThreaded(WikiDocument document) {
-        return findWikiComments(document, true, false);
+    public List<WikiComment> findWikiComments(WikiDocument document, boolean orderbyDateAscending) {
+        String query =
+                "select c from WikiComment c where c.parent = :parentDoc order by c.createdOn " +
+                (orderbyDateAscending ? "asc" : "desc");
+        return (List<WikiComment>)restrictedEntityManager
+                .createQuery(query)
+                .setParameter("parentDoc", document)
+                .setHint("org.hibernate.comment", "Finding all comments of document")
+                .getResultList();
     }
 
-    public List<WikiComment> findWikiCommentsFlat(WikiDocument document, boolean orderbyDateAscending) {
-        return findWikiComments(document, false, orderbyDateAscending);
-    }
-
-    private List<WikiComment> findWikiComments(WikiDocument document, final boolean threaded, boolean unthreadedAscending) {
-        StringBuilder queryString = new StringBuilder();
-
-        NestedSetQueryBuilder queryBuilder = new NestedSetQueryBuilder(new WikiComment(), false, true);
-        queryString.append("select ").append(queryBuilder.getSelectLevelClause()).append(", ");
-        queryString.append(queryBuilder.getSelectNodeClause()).append(" ");
-        queryString.append("from ").append(queryBuilder.getFromClause()).append(" ");
-        queryString.append("where ").append(queryBuilder.getWhereClause(false)).append(" ");
-        queryString.append("and ").append(NestedSetQueryBuilder.NODE2_ALIAS).append(".nodeInfo.nsThread in ");
-        queryString.append("(select c3.nodeInfo.nsThread from WikiComment c3 where c3.parent = :doc)").append(" ");
-        queryString.append("group by ").append(queryBuilder.getGroupByClause()).append(" ");
-        queryString.append("order by ");
-        if (threaded) {
-            queryString.append(NestedSetQueryBuilder.NODE_ALIAS).append(".nodeInfo.nsThread asc").append(", ");
-            queryString.append(queryBuilder.getOrderByClause());
-        } else {
-            queryString.append(NestedSetQueryBuilder.NODE_ALIAS).append(".createdOn ").append(unthreadedAscending ? "asc" : "desc");
-        }
-
-        org.hibernate.Query nsQuery = getSession(true).createQuery(queryString.toString());
-        nsQuery.setParameter("doc", document);
-        nsQuery.setComment("Find wikicomments (tree)");
-        nsQuery.setCacheable(false);
-        nsQuery.setResultTransformer(
-            new ResultTransformer() {
-                public Object transformTuple(Object[] objects, String[] aliases) {
-                    Long level = (Long)objects[0];
-                    WikiComment c = (WikiComment)objects[1];
-                    if (threaded) c.setLevel(level);
-                    return c;
-                }
-                public List transformList(List list) {
-                    return list;
-                }
-            }
-        );
-        return nsQuery.list();
-    }
-
-    public List<WikiComment> findWikiCommentSubtree(WikiComment root) {
-        return findWikiCommentSubtree(root, false);
-    }
-
-    public List<WikiComment> findWikiCommentSubtree(WikiComment root, boolean orderByLevelDescending) {
-        NestedSetQueryBuilder queryBuilder;
-        if (orderByLevelDescending) {
-            queryBuilder = new NestedSetQueryBuilder(new WikiComment(), false, false) {
-                public String getOrderByClause() {
-                    StringBuilder clause = new StringBuilder();
-                    clause.append("count(").append(NestedSetQueryBuilder.NODE_ALIAS).append(".id) desc");
-                    return clause.toString();
-                }
-            };
-        } else {
-            queryBuilder = new NestedSetQueryBuilder(new WikiComment(), false, false);
-        }
-
-        org.hibernate.Query nsQuery = getSession(true).createQuery(queryBuilder.getSimpleQuery());
-        nsQuery.setParameter("nsThread", root.getNodeInfo().getNsThread());
-        nsQuery.setParameter("nsLeft", root.getNodeInfo().getNsLeft());
-        nsQuery.setParameter("nsRight", root.getNodeInfo().getNsRight());
-        nsQuery.setComment("Find wikicomments subtree");
-        nsQuery.setCacheable(false);
-        nsQuery.setResultTransformer(
-            new ResultTransformer() {
-                public Object transformTuple(Object[] objects, String[] aliases) {
-                    Long level = (Long)objects[0];
-                    WikiComment c = (WikiComment)objects[1];
-                    c.setLevel(level);
-                    return c;
-                }
-                public List transformList(List list) {
-                    return list;
-                }
-            }
-        );
-        return nsQuery.list();
-    }
-
     public WikiFile findWikiFile(Long fileId) {
         try {
             return (WikiFile) restrictedEntityManager
@@ -239,8 +158,8 @@
                     .setHint("org.hibernate.comment", "Find wikifile by id")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -258,8 +177,8 @@
                     .setHint("org.hibernate.comment", "Find wikifile in area")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -272,8 +191,8 @@
                     .setHint("org.hibernate.comment", "Find document by id")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -288,8 +207,8 @@
                     .setHint("org.hibernate.comment", "Find default file")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -303,8 +222,8 @@
                     .setHint("org.hibernate.comment", "Find default doc")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -334,8 +253,8 @@
                     .setHint("org.hibernate.comment", "Find document in area")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -366,8 +285,8 @@
                     .setMaxResults(1)
                     .setParameter("current", currentDocument)
                     .getSingleResult();
-            } catch (EntityNotFoundException ex) {
-            } catch (NoResultException ex) {
+            } catch (EntityNotFoundException ignored) {
+            } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -380,8 +299,8 @@
                     .setHint("org.hibernate.comment", "Find upload by id")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -406,8 +325,8 @@
                     .setHint("org.hibernate.comment", "Find directory by id")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -419,8 +338,8 @@
                     .setParameter("id", directoryId)
                     .setHint("org.hibernate.comment", "Find user for directory member home by id")
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -442,12 +361,70 @@
                     .setHint("org.hibernate.comment", "Find directory in area")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
 
+    public List<Long> findWikiDirectoryTreeIDs(WikiDirectory startDir) {
+        List<Long> parentDirIds = new ArrayList();
+        List<WikiTreeNode<WikiDirectory>> directoryTree = findWikiDirectoryTree(startDir, WikiNode.SortableProperty.createdOn, true);
+        for (WikiTreeNode<WikiDirectory> treeNode : directoryTree) {
+            parentDirIds.add(treeNode.getNode().getId());
+        }
+        return parentDirIds;
+    }
+
+    public List<WikiTreeNode<WikiDirectory>> findWikiDirectoryTree(WikiDirectory rootDir, WikiNode.SortableProperty sortByProperty, boolean sortAscending) {
+        List<WikiTreeNode<WikiDirectory>> tree = new ArrayList();
+        long level = 1;
+        tree.add(new WikiTreeNode<WikiDirectory>(level++, rootDir));
+
+        String query = "select d from WikiDirectory d where d.parent.id = :parentNodeId and d.readAccessLevel <= :readAccessLevel order by " +
+                sortByProperty.name() + " " + (sortAscending ? "asc" : "desc");
+
+        appendWikiNodeChildren(query, tree, rootDir.getId(), level, null, null);
+        return tree;
+    }
+
+    public List<WikiTreeNode<WikiDirectory>> findMenuItemTree(WikiDirectory rootDir, Long maxDepth, Long flattenToLevel, boolean onlyCreatedByAdminUser) {
+        List<WikiTreeNode<WikiDirectory>> tree = new ArrayList();
+        long level = 1;
+        // TODO: Root in or out?
+        // tree.add(new WikiTreeNode<WikiDirectory>(level++, rootDir));
+
+        String query = "select d from WikiMenuItem mi join mi.directory d" +
+                " where d.parent.id = :parentNodeId" +
+                " and d.readAccessLevel <= :readAccessLevel" +
+                (onlyCreatedByAdminUser ? " and d.createdBy.id = '"+((User)Component.getInstance("adminUser")).getId()+"'" : "") +
+                " order by mi.displayPosition asc";
+
+        appendWikiNodeChildren(query, tree, rootDir.getId(), level, maxDepth, flattenToLevel);
+        return tree;
+    }
+
+    // Recursive! Don't use for large trees...
+    private void appendWikiNodeChildren(String query, List tree, long parentNodeId, long currentLevel, Long maxDepth, Long flattenToLevel) {
+        List<WikiNode> nodes = restrictedEntityManager.createQuery(query)
+                .setHint("org.hibernate.comment", "Querying children of wiki node: " + parentNodeId)
+                .setParameter("parentNodeId", parentNodeId)
+                .setParameter("readAccessLevel", Component.getInstance("currentAccessLevel"))
+                .getResultList();
+        for (WikiNode node : nodes) {
+            tree.add(new WikiTreeNode(currentLevel, node));
+            if (maxDepth == null || currentLevel < maxDepth) {
+                if (flattenToLevel == null || currentLevel < flattenToLevel) {
+                    currentLevel++;
+                    appendWikiNodeChildren(query, tree, node.getId(), currentLevel, maxDepth, flattenToLevel);
+                    currentLevel--;
+                } else {
+                    appendWikiNodeChildren(query, tree, node.getId(), currentLevel, maxDepth, flattenToLevel);
+                }
+            }
+        }
+    }
+
     public WikiDirectory findAreaUnrestricted(String wikiname) {
         return findArea(wikiname, entityManager);
     }
@@ -464,8 +441,8 @@
                     .setHint("org.hibernate.comment", "Find area by wikiname")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -478,8 +455,8 @@
                     .setHint("org.hibernate.comment", "Find area by area number")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
     }
@@ -555,8 +532,8 @@
                     .setParameter("dir", dir)
                     .setHint("org.hibernate.comment", "Find menu item of directory")
                     .getSingleResult();
-        } catch (EntityNotFoundException ex) {
-        } catch (NoResultException ex) {
+        } catch (EntityNotFoundException ignored) {
+        } catch (NoResultException ignored) {
         }
         return null;
 
@@ -568,167 +545,6 @@
                 .getResultList();
     }
 
-    public NestedSetNodeWrapper<WikiDirectory> findMenuItemTree(WikiDirectory startDir, Long maxDepth, Long flattenToLevel, boolean showAdminOnly) {
-
-        NestedSetNodeWrapper<WikiDirectory> startNodeWrapper = 
-            new NestedSetNodeWrapper<WikiDirectory>(startDir, new WikiDirectoryDisplayPositionComparator());
-
-        NestedSetResultTransformer<WikiDirectory> transformer =
-            new NestedSetResultTransformer<WikiDirectory>(startNodeWrapper, flattenToLevel);
-
-        transformer.getAdditionalProjections().put("displayPosition", "m.displayPosition");
-
-        // Make hollow copies for menu display so that changes to the model in the persistence context don't appear
-        transformer.setNestedSetDuplicator(
-            new NestedSetDuplicator<WikiDirectory>() {
-                public WikiDirectory duplicate(WikiDirectory original) {
-                    WikiDirectory copy = new WikiDirectory();
-                    copy.flatCopy(original, false);
-                    copy.setId(original.getId());
-                    copy.setParent(original.getParent());
-                    return copy;
-                }
-            }
-        );
-
-        appendNestedSetNodes(transformer, maxDepth, showAdminOnly, "WikiMenuItem m", "m.id = n1.id");
-        return startNodeWrapper;
-
-    }
-
-    public NestedSetNodeWrapper<WikiDirectory> findWikiDirectoryTree(WikiDirectory startDir) {
-        return findWikiDirectoryTree(startDir, null, 0l, false);
-    }
-
-    public NestedSetNodeWrapper<WikiDirectory> findWikiDirectoryTree(WikiDirectory startDir,
-                                                                     Long maxDepth, Long flattenToLevel,
-                                                                     boolean showAdminOnly) {
-
-        NestedSetNodeWrapper<WikiDirectory> startNodeWrapper =
-            new NestedSetNodeWrapper<WikiDirectory>(startDir, new WikiDirectoryNameComparator());
-
-        NestedSetResultTransformer<WikiDirectory> transformer =
-            new NestedSetResultTransformer<WikiDirectory>(startNodeWrapper, flattenToLevel);
-
-        appendNestedSetNodes(transformer, maxDepth, showAdminOnly, null);
-        return startNodeWrapper;
-
-    }
-
-    public <N extends NestedSetNode> void appendNestedSetNodes(NestedSetResultTransformer<N> transformer,
-                                                                   Long maxDepth,
-                                                                   boolean showAdminOnly,
-                                                                   String selectionFragment,
-                                                                   String... restrictionFragment) {
-
-        N startNode = transformer.getRootWrapper().getWrappedNode();
-
-        log.debug("appending nested set nodes to node: " + startNode + ", " + startNode.getNodeInfo());
-
-        NestedSetQueryBuilder builder = new NestedSetQueryBuilder(startNode, false);
-
-        StringBuilder queryString = new StringBuilder();
-
-        queryString.append("select").append(" ");
-        queryString.append(builder.getSelectLevelClause()).append(", ");
-        queryString.append(builder.getSelectNodeClause()).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(builder.getFromClause());
-        if (selectionFragment != null) {
-            queryString.append(", ").append(selectionFragment);
-        }
-        queryString.append(" where ").append(builder.getWhereClause()).append(" ");
-        if (showAdminOnly) {
-            queryString.append("and ").append(NestedSetQueryBuilder.NODE_ALIAS).append(".createdBy = :adminUser").append(" ");
-        }
-        for (String fragment: restrictionFragment) {
-            queryString.append("and ").append(fragment).append(" ");
-        }
-        queryString.append("group by ").append(builder.getGroupByClause()).append(" ");
-        for (Map.Entry<String, String> entry : transformer.getAdditionalProjections().entrySet()) {
-            queryString.append(", ").append(entry.getValue()).append(" ");
-        }
-
-        if (maxDepth != null) {
-            queryString.append("having count(").append(NestedSetQueryBuilder.NODE_ALIAS).append(".id) <= :maxDepth").append(" ");
-        }
-
-        queryString.append("order by ").append(builder.getOrderByClause());
-
-        org.hibernate.Query nestedSetQuery = getSession(true).createQuery(queryString.toString());
-        nestedSetQuery.setParameter("nsThread", startNode.getNodeInfo().getNsThread());
-        nestedSetQuery.setParameter("nsLeft", startNode.getNodeInfo().getNsLeft());
-        nestedSetQuery.setParameter("nsRight", startNode.getNodeInfo().getNsRight());
-        if (showAdminOnly) nestedSetQuery.setParameter("adminUser", Component.getInstance("adminUser"));
-        if (maxDepth != null) nestedSetQuery.setParameter("maxDepth", maxDepth);
-
-        nestedSetQuery.setComment("Appending nested set nodes to startnode: " + startNode.getId());
-
-        nestedSetQuery.setResultTransformer(transformer);
-        nestedSetQuery.list(); // Append all children hierarchically to the transformers rootWrapper
-    }
-
-    // TODO: This is not great
-    public void updateWikiDocumentComments(WikiDocument document) {
-
-        // First, the denormalized "last comment" data duplication
-
-        // TODO: This probably is vulnerable to a race condition if we don't lock the whole WIKI_DOCUMENT_LAST_COMMENT table
-
-        Long lastCommentId = (Long)
-            getSession(true).getNamedQuery("findLastCommentOfDocument")
-                .setParameter("documentId", document.getId())
-                .setComment("Finding last comment of document: " + document.getId())
-                .uniqueResult();
-
-        WikiComment lastComment = null;
-        if (lastCommentId!= null) {
-            lastComment = restrictedEntityManager.find(WikiComment.class, lastCommentId);
-        }
-
-        WikiDocumentLastComment existingLastCommentEntry
-                = restrictedEntityManager.find(WikiDocumentLastComment.class, document.getId());
-
-        if (existingLastCommentEntry != null && lastComment == null) {
-            restrictedEntityManager.remove(existingLastCommentEntry);
-        } else if (existingLastCommentEntry != null) {
-            existingLastCommentEntry.setLastCommentId(lastComment.getId());
-            existingLastCommentEntry.setLastCommentCreatedOn(lastComment.getCreatedOn());
-        } else if (lastComment != null){
-            existingLastCommentEntry = new WikiDocumentLastComment();
-            existingLastCommentEntry.setDocumentId(document.getId());
-            existingLastCommentEntry.setLastCommentId(lastComment.getId());
-            existingLastCommentEntry.setLastCommentCreatedOn(lastComment.getCreatedOn());
-            restrictedEntityManager.persist(existingLastCommentEntry);
-        }
-
-        // Next, the denormalized "total comment count" data duplication
-
-        Long commentCount = 0l;
-        try {
-            commentCount = (Long)
-                    getSession(true).getNamedQuery("countCommentOfDocument")
-                        .setParameter("documentId", document.getId())
-                        .setComment("Counting comments of document: " + document.getId())
-                        .uniqueResult();
-        } catch (Exception ex) {
-            // Ugh
-        }
-
-        WikiDocumentCountComment existingCommentCount =
-                restrictedEntityManager.find(WikiDocumentCountComment.class, document.getId());
-        if (existingCommentCount != null) {
-            existingCommentCount.setCommentCount(commentCount);
-        } else {
-            existingCommentCount = new WikiDocumentCountComment();
-            existingCommentCount.setDocumentId(document.getId());
-            existingCommentCount.setCommentCount(commentCount);
-            restrictedEntityManager.persist(existingCommentCount);
-        }
-    }
-
     private Session getSession(boolean restricted) {
         if (restricted) {
             return ((Session)((org.jboss.seam.persistence.EntityManagerProxy) restrictedEntityManager).getDelegate());

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -38,7 +38,7 @@
     public void checkPreferences() {
         
         log.info("checking wiki preferences...");
-/* TODO: needs to be disabled in testing
+        /* TODO: needs to be disabled in testing
         // We need a fake user so we can retrieve preferences without a request, on startup
         Contexts.getEventContext().set("currentPreferencesUser", new User());
 

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/FeedDAO.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/FeedDAO.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/FeedDAO.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -14,14 +14,15 @@
 import org.jboss.seam.log.Log;
 import org.jboss.seam.wiki.core.model.*;
 import org.jboss.seam.wiki.core.ui.WikiURLRenderer;
+import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityNotFoundException;
 import javax.persistence.NoResultException;
-import javax.persistence.Query;
 import java.util.Date;
 import java.util.List;
 import java.util.Iterator;
+import java.util.ArrayList;
 
 /**
  * DAO for feeds.
@@ -95,23 +96,24 @@
     }
 
     public List<WikiFeed> findParentFeeds(WikiDirectory startDir, boolean includeSiteFeed) {
-        StringBuilder queryString = new StringBuilder();
+        WikiDirectory currentDir = WikiNodeDAO.instance().findWikiDirectory(startDir.getId()); // Use restricted PC!
 
-        queryString.append("select f from WikiDirectory d join d.feed f ");
-        queryString.append("where d.nodeInfo.nsThread = :nsThread and ");
-        queryString.append("d.nodeInfo.nsLeft <= :nsLeft and d.nodeInfo.nsRight >= :nsRight ");
-        if (!includeSiteFeed) queryString.append("and not d = :wikiRoot ");
-        queryString.append("order by f.publishedDate desc ");
+        List<WikiFeed> feeds = new ArrayList();
+        if (currentDir.getParent() == null && currentDir.getFeed() != null) {
+            feeds.add(currentDir.getFeed());
+        }
+        while (currentDir.getParent() != null) {
+            if (currentDir.getFeed() != null)
+                feeds.add(currentDir.getFeed());
+            currentDir = (WikiDirectory)currentDir.getParent();
+        }
 
-        Query query = restrictedEntityManager.createQuery(queryString.toString())
-                .setParameter("nsThread", startDir.getNodeInfo().getNsThread())
-                .setParameter("nsLeft", startDir.getNodeInfo().getNsLeft())
-                .setParameter("nsRight", startDir.getNodeInfo().getNsRight());
+        if (includeSiteFeed) {
+            WikiDirectory wikiRoot = (WikiDirectory)Component.getInstance("wikiRoot");
+            feeds.add(WikiNodeDAO.instance().findWikiDirectory(wikiRoot.getId()).getFeed()); // Use restricted PC!
+        }
 
-        if (!includeSiteFeed)
-            query.setParameter("wikiRoot", Component.getInstance("wikiRoot"));
-
-        return query.getResultList();
+        return feeds;
     }
 
     public WikiDocumentFeedEntry findFeedEntry(WikiDocument document) {

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiCommentFeedEntryManager.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiCommentFeedEntryManager.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiCommentFeedEntryManager.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -58,8 +58,8 @@
         StringBuilder desc = new StringBuilder();
         desc.append(Messages.instance().get("lacewiki.msg.comment.FeedIntro"));
         desc.append("&#160;");
-        desc.append("<a href=\"").append(wikiURLRenderer.renderURL(comment.getParentDocument())).append("\">");
-        desc.append("'").append(comment.getParentDocument().getName()).append("'");
+        desc.append("<a href=\"").append(wikiURLRenderer.renderURL(comment.getParent())).append("\">");
+        desc.append("'").append(comment.getParent().getName()).append("'");
         desc.append("</a>.");
         desc.append("<hr/>");
         desc.append(

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/DatabaseObjects.hbm.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/DatabaseObjects.hbm.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/DatabaseObjects.hbm.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -46,22 +46,6 @@
         <dialect-scope name="org.hibernate.dialect.HSQLDialect"/>
     </database-object>
 
-    <database-object>
-        <create>
-            alter table WIKI_DOCUMENT_LAST_COMMENT add constraint FK_WIKI_DOCUMENT_LAST_COMMENT_DOCUMENT_ID foreign key (WIKI_DOCUMENT_ID) references WIKI_DOCUMENT (NODE_ID) on delete cascade;
-        </create>
-        <drop/>
-        <dialect-scope name="org.hibernate.dialect.HSQLDialect"/>
-    </database-object>
-
-    <database-object>
-        <create>
-            alter table WIKI_DOCUMENT_COUNT_COMMENT add constraint FK_WIKI_DOCUMENT_COUNT_COMMENT_DOCUMENT_ID foreign key (WIKI_DOCUMENT_ID) references WIKI_DOCUMENT (NODE_ID) on delete cascade;
-        </create>
-        <drop/>
-        <dialect-scope name="org.hibernate.dialect.HSQLDialect"/>
-    </database-object>
-
     <!-- ############################### MySQL ############################### -->
 
 
@@ -112,22 +96,6 @@
 
     <database-object>
         <create>
-            alter table WIKI_DOCUMENT_LAST_COMMENT add index FK_WIKI_DOCUMENT_LAST_COMMENT_DOCUMENT_ID (WIKI_DOCUMENT_ID), add constraint FK_WIKI_DOCUMENT_LAST_COMMENT_DOCUMENT_ID foreign key (WIKI_DOCUMENT_ID) references WIKI_DOCUMENT (NODE_ID) on delete cascade;
-        </create>
-        <drop/>
-        <dialect-scope name="org.jboss.seam.wiki.util.WikiMySQL5HibernateDialect"/>
-    </database-object>
-
-    <database-object>
-        <create>
-            alter table WIKI_DOCUMENT_COUNT_COMMENT add index FK_WIKI_DOCUMENT_COUNT_COMMENT_DOCUMENT_ID (WIKI_DOCUMENT_ID), add constraint FK_WIKI_DOCUMENT_COUNT_COMMENT_DOCUMENT_ID foreign key (WIKI_DOCUMENT_ID) references WIKI_DOCUMENT (NODE_ID) on delete cascade;
-        </create>
-        <drop/>
-        <dialect-scope name="org.jboss.seam.wiki.util.WikiMySQL5HibernateDialect"/>
-    </database-object>
-
-    <database-object>
-        <create>
             create index IDX_PREFERENCE_ENTITY_NAME on PREFERENCE (ENTITY_NAME)
         </create>
         <drop>
@@ -178,66 +146,6 @@
 
     <database-object>
         <create>
-            create index IDX_WIKI_DIRECTORY_NS_LEFT on WIKI_DIRECTORY (NS_LEFT)
-        </create>
-        <drop>
-            drop index IDX_WIKI_DIRECTORY_NS_LEFT
-        </drop>
-        <dialect-scope name="org.jboss.seam.wiki.util.WikiMySQL5HibernateDialect"/>
-    </database-object>
-
-    <database-object>
-        <create>
-            create index IDX_WIKI_DIRECTORY_NS_RIGHT on WIKI_DIRECTORY (NS_RIGHT)
-        </create>
-        <drop>
-            drop index IDX_WIKI_DIRECTORY_NS_RIGHT
-        </drop>
-        <dialect-scope name="org.jboss.seam.wiki.util.WikiMySQL5HibernateDialect"/>
-    </database-object>
-
-    <database-object>
-        <create>
-            create index IDX_WIKI_DIRECTORY_NS_THREAD on WIKI_DIRECTORY (NS_THREAD)
-        </create>
-        <drop>
-            drop index IDX_WIKI_DIRECTORY_NS_THREAD
-        </drop>
-        <dialect-scope name="org.jboss.seam.wiki.util.WikiMySQL5HibernateDialect"/>
-    </database-object>
-
-    <database-object>
-        <create>
-            create index IDX_WIKI_COMMENT_NS_LEFT on WIKI_COMMENT (NS_LEFT)
-        </create>
-        <drop>
-            drop index IDX_WIKI_COMMENT_NS_LEFT
-        </drop>
-        <dialect-scope name="org.jboss.seam.wiki.util.WikiMySQL5HibernateDialect"/>
-    </database-object>
-
-    <database-object>
-        <create>
-            create index IDX_WIKI_COMMENT_NS_RIGHT on WIKI_COMMENT (NS_RIGHT)
-        </create>
-        <drop>
-            drop index IDX_WIKI_COMMENT_NS_RIGHT
-        </drop>
-        <dialect-scope name="org.jboss.seam.wiki.util.WikiMySQL5HibernateDialect"/>
-    </database-object>
-
-    <database-object>
-        <create>
-            create index IDX_WIKI_COMMENT_NS_THREAD on WIKI_COMMENT (NS_THREAD)
-        </create>
-        <drop>
-            drop index IDX_WIKI_COMMENT_NS_THREAD
-        </drop>
-        <dialect-scope name="org.jboss.seam.wiki.util.WikiMySQL5HibernateDialect"/>
-    </database-object>
-
-    <database-object>
-        <create>
             create index IDX_WIKI_DOCUMENT_HEADER_MACROS on WIKI_DOCUMENT (HEADER_MACROS)
         </create>
         <drop>

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/FeedEntry.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/FeedEntry.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/FeedEntry.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -173,6 +173,26 @@
         return (getPublishedDate().getTime() == other.getPublishedDate().getTime() ? 0 : 1);
     }
 
+/*
+    // Equality needs to be consistent with comparable/ordering!
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        FeedEntry feedEntry = (FeedEntry) o;
+
+        if (!publishedDate.equals(feedEntry.publishedDate)) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        return publishedDate.hashCode();
+    }
+*/
+
     public String toString() {
         return "FeedEntry (" + getId() + ")";
     }

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/NativeQueries.hbm.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/NativeQueries.hbm.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/NativeQueries.hbm.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -4,33 +4,6 @@
         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 <hibernate-mapping>
 
-    <sql-query name="findLastCommentOfDocument">
-        <return-scalar column="LAST_COMMENT_ID" type="long"/>
-        select
-            ct3.NODE_ID as LAST_COMMENT_ID
-        from WIKI_COMMENT ct
-            inner join WIKI_NODE ct1 on ct.NODE_ID = ct1.NODE_ID
-                inner join WIKI_COMMENT ct2 on ct2.NS_THREAD in (ct.NS_THREAD)
-                    inner join WIKI_NODE ct3 on ct2.NODE_ID = ct3.NODE_ID,
-            WIKI_NODE doc0
-               inner join WIKI_DOCUMENT doc1 on doc0.NODE_ID = doc1.NODE_ID
-        where
-            ct1.PARENT_NODE_ID = :documentId
-        order by
-            ct3.CREATED_ON desc
-        limit 1
-    </sql-query>
+    <!-- No externalized queries at this time... -->
 
-    <sql-query name="countCommentOfDocument">
-        <return-scalar column="COMMENT_COUNT" type="long"/>
-        select
-            count(distinct c0.NODE_ID) as COMMENT_COUNT
-        from
-            WIKI_NODE ct0
-                inner join WIKI_COMMENT ct1 on ct0.NODE_ID = ct1.NODE_ID
-                    inner join WIKI_COMMENT c0 on c0.NS_THREAD in (ct1.NS_THREAD)
-        where
-            ct0.PARENT_NODE_ID = :documentId
-    </sql-query>
-
 </hibernate-mapping>
\ No newline at end of file

Deleted: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/Queries.hbm.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/Queries.hbm.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/Queries.hbm.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<!--
-
-Workarounds for Hibernate bugs, mostly.
-
- at author Christian Bauer
--->
-<hibernate-mapping package="org.jboss.seam.wiki.core.model" default-access="field">
-
-    <!--
-        TODO: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1657
-    -->
-    <sql-query name="updateNestedSet.org.jboss.seam.wiki.core.model.WikiComment">
-        <query-param name="left" type="long"/>
-        <query-param name="right" type="long"/>
-        <query-param name="thread" type="long"/>
-        <query-param name="id" type="long"/>
-        update WIKI_COMMENT set NS_LEFT = :left, NS_RIGHT = :right, NS_THREAD = :thread where NODE_ID = :id
-    </sql-query>
-    <sql-query name="updateNestedSet.org.jboss.seam.wiki.core.model.WikiDirectory">
-        <query-param name="left" type="long"/>
-        <query-param name="right" type="long"/>
-        <query-param name="thread" type="long"/>
-        <query-param name="id" type="long"/>
-        update WIKI_DIRECTORY set NS_LEFT = :left, NS_RIGHT = :right, NS_THREAD = :thread where NODE_ID = :id
-    </sql-query>
-    <sql-query name="updateNestedSet.org.jboss.seam.wiki.test.nestedset.TestDirectory">
-        <query-param name="left" type="long"/>
-        <query-param name="right" type="long"/>
-        <query-param name="thread" type="long"/>
-        <query-param name="id" type="long"/>
-        update TEST_DIRECTORY set NS_LEFT = :left, NS_RIGHT = :right, NS_THREAD = :thread where ITEM_ID = :id
-    </sql-query>
-
-</hibernate-mapping>
-

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiComment.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiComment.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiComment.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -2,8 +2,6 @@
 
 import org.hibernate.validator.Email;
 import org.hibernate.validator.Length;
-import org.jboss.seam.wiki.core.nestedset.NestedSetNode;
-import org.jboss.seam.wiki.core.nestedset.NestedSetNodeInfo;
 import org.jboss.seam.wiki.core.search.annotations.Searchable;
 import org.jboss.seam.wiki.core.search.annotations.SearchableType;
 import org.jboss.seam.wiki.core.search.annotations.CompositeSearchables;
@@ -25,7 +23,7 @@
         properties = {"subject", "content"}
     )
 )
-public class WikiComment extends WikiNode<WikiComment> implements NestedSetNode<WikiComment>, Serializable {
+public class WikiComment extends WikiNode<WikiComment> implements Serializable {
 
     @Column(name = "SUBJECT", nullable = false)
     @Length(min = 3, max = 255)
@@ -54,16 +52,6 @@
     @Column(name = "USE_WIKI_TEXT", nullable = false)
     private boolean useWikiText = true;
 
-    @Transient
-    private Long level;
-
-    @Embedded
-    private NestedSetNodeInfo<WikiComment> nodeInfo;
-
-    public WikiComment () {
-        nodeInfo = new NestedSetNodeInfo<WikiComment>(this);
-    }
-
     public String getSubject() { return subject; }
     public void setSubject(String subject) { this.subject = subject; }
 
@@ -82,9 +70,6 @@
     public boolean isUseWikiText() { return useWikiText; }
     public void setUseWikiText(boolean useWikiText) { this.useWikiText = useWikiText; }
 
-    public Long getLevel() { return level; }
-    public void setLevel(Long level) { this.level = level; }
-
     public void flatCopy(WikiComment original, boolean copyLazyProperties) {
         super.flatCopy(original, copyLazyProperties);
         this.subject = original.subject;
@@ -103,16 +88,6 @@
         return dupe;
     }
 
-    public NestedSetNodeInfo<WikiComment> getNodeInfo() {
-        return nodeInfo;
-    }
-
-    public NestedSetNodeInfo<WikiComment> getParentNodeInfo() {
-        if (getParent() != null && WikiComment.class.isAssignableFrom(getParent().getClass()))
-            return ((WikiComment)getParent()).getNodeInfo();
-        return null;
-    }
-
     public String[] getPropertiesForGroupingInQueries() {
         return new String[]{
             "version", "parent", "rating",
@@ -128,31 +103,19 @@
 
 
     public String getPermURL(String suffix) {
-        return getParentDocument().getId() + suffix + "#comment" + getId();
+        return getParent().getId() + suffix + "#comment" + getId();
     }
 
     public String getWikiURL() {
-        return getArea().getWikiname() + "/" + getParentDocument().getWikiname() + "#comment" + getId();
+        return getArea().getWikiname() + "/" + getParent().getWikiname() + "#comment" + getId();
     }
 
-    // TODO: Everything can have comments, this has the wrong name and it's crude
-    public WikiNode getParentDocument() {
-        WikiNode current = this.getParent();
-        if (WikiDocument.class.isAssignableFrom(current.getClass())) return current;
-        while (current.getParent() != null && WikiComment.class.isAssignableFrom(current.getParent().getClass())) {
-            current = current.getParent();
-        }
-        return current.getParent(); // Let's just assume that the parent of a comment is at some point a document
-
-    }
-
     public void setDerivedName(WikiNode node) {
         setName(node.getName() + ".Comment" + new Date().getTime());
     }
 
     public String toString() {
         return  "Comment (" + getId() + ")," +
-                " Level: " + getLevel() +
                 " Subject: '" + getSubject() + "'";
     }
 

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectory.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectory.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectory.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,8 +1,6 @@
 package org.jboss.seam.wiki.core.model;
 
 import org.hibernate.validator.Length;
-import org.jboss.seam.wiki.core.nestedset.NestedSetNode;
-import org.jboss.seam.wiki.core.nestedset.NestedSetNodeInfo;
 
 import javax.persistence.*;
 import java.io.Serializable;
@@ -13,17 +11,17 @@
 @Entity
 @Table(name = "WIKI_DIRECTORY")
 @org.hibernate.annotations.ForeignKey(name = "FK_WIKI_DIRECTORY_NODE_ID")
-public class WikiDirectory extends WikiNode<WikiDirectory> implements NestedSetNode<WikiDirectory>, Serializable {
+public class WikiDirectory extends WikiNode<WikiDirectory> implements Serializable {
 
     @Column(name = "DESCRIPTION", nullable = true)
     @Length(min = 0, max = 512)
     private String description;
 
-// This does not work, as usual. Hibernate just ignores it and gives me a proxy sometimes, leading to CCE later on
-// Maybe because I query directories with "from WikiNode where parentId", so the instrumentation of the WikiDirectory
-// subclass has no effect. 
-//    @ManyToOne(fetch = FetchType.LAZY)
-//    @org.hibernate.annotations.LazyToOne(org.hibernate.annotations.LazyToOneOption.NO_PROXY)
+    // This does not work, as usual. Hibernate just ignores it and gives me a proxy sometimes, leading to CCE later on
+    // Maybe because I query directories with "from WikiNode where parentId", so the instrumentation of the WikiDirectory
+    // subclass has no effect.
+    //    @ManyToOne(fetch = FetchType.LAZY)
+    //    @org.hibernate.annotations.LazyToOne(org.hibernate.annotations.LazyToOneOption.NO_PROXY)
     @ManyToOne(fetch = FetchType.EAGER)
     @JoinColumn(name = "DEFAULT_FILE_ID", nullable = true, unique = true)
     @org.hibernate.annotations.ForeignKey(name = "FK_WIKI_DIRECTORY_DEFAULT_FILE_ID")
@@ -33,18 +31,6 @@
     @org.hibernate.annotations.Fetch(org.hibernate.annotations.FetchMode.JOIN)
     private WikiFeed feed;
 
-    @Embedded
-    private NestedSetNodeInfo<WikiDirectory> nodeInfo;
-
-    public WikiDirectory() {
-        nodeInfo = new NestedSetNodeInfo<WikiDirectory>(this);
-    }
-
-    public WikiDirectory(String name) {
-        super(name);
-        nodeInfo = new NestedSetNodeInfo<WikiDirectory>(this);
-    }
-
     public String getDescription() { return description; }
     public void setDescription(String description) { this.description = description; }
 
@@ -64,7 +50,6 @@
     public void flatCopy(WikiDirectory original, boolean copyLazyProperties) {
         super.flatCopy(original, copyLazyProperties);
         this.description = original.description;
-        this.nodeInfo = original.nodeInfo;
     }
 
     public WikiDirectory duplicate(boolean copyLazyProperties) {
@@ -73,16 +58,6 @@
         return dupe;
     }
 
-    public NestedSetNodeInfo<WikiDirectory> getNodeInfo() {
-        return nodeInfo;
-    }
-
-    public NestedSetNodeInfo<WikiDirectory> getParentNodeInfo() {
-        if (getParent() != null && WikiDirectory.class.isAssignableFrom(getParent().getClass()))
-            return ((WikiDirectory)getParent()).getNodeInfo();
-        return null;
-    }
-
     public String[] getPropertiesForGroupingInQueries() {
         return new String[]{
             "version", "parent", "rating",
@@ -133,6 +108,23 @@
         return path;
     }
 
+
+    public List<WikiDirectory> getParentsRecursive() {
+        if (this.getParent() == null) return Collections.EMPTY_LIST;
+        List parents = new ArrayList();
+        WikiNode currentNode = this.getParent();
+        while (true) {
+            if (currentNode.getParent() == null) {
+                parents.add(currentNode);
+                break;
+            } else {
+                parents.add(currentNode);
+                currentNode = currentNode.getParent();
+            }
+        }
+        return parents;
+    }
+
     public String toString() {
         return "WikiDirectory (" + getId() + "): " + getName();
     }

Deleted: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectoryDisplayPositionComparator.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectoryDisplayPositionComparator.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectoryDisplayPositionComparator.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,36 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.seam.wiki.core.model;
-
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetNodeWrapper;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * Needs to be equals() safe (SortedSet): compare by display position, if equal compare by name,
- * if equal compare by id.
- *
- * @author Christian Bauer
- */
-public class WikiDirectoryDisplayPositionComparator
-        implements Comparator<NestedSetNodeWrapper<WikiDirectory>>, Serializable {
-
-    public int compare(NestedSetNodeWrapper<WikiDirectory> o1, NestedSetNodeWrapper<WikiDirectory> o2) {
-        WikiDirectory node1 = o1.getWrappedNode();
-        Long node1DisplayPosition = (Long)o1.getAdditionalProjections().get("displayPosition");
-        WikiDirectory node2 = o2.getWrappedNode();
-        Long node2DisplayPosition = (Long)o2.getAdditionalProjections().get("displayPosition");
-        if (node1DisplayPosition.compareTo(node2DisplayPosition) != 0) {
-            return node1DisplayPosition.compareTo(node2DisplayPosition);
-        } else if (node1.getName().compareTo(node2.getName()) != 0) {
-            return node1.getName().compareTo(node2.getName());
-        }
-        return node1.getId().compareTo(node2.getId());
-    }
-
-}

Deleted: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectoryNameComparator.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectoryNameComparator.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDirectoryNameComparator.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,31 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.seam.wiki.core.model;
-
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetNodeWrapper;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * Needs to be equals() safe (SortedSet), compare by name, if equal compare by id.
- *
- * @author Christian Bauer
- */
-public class WikiDirectoryNameComparator
-        implements Comparator<NestedSetNodeWrapper<WikiDirectory>>, Serializable {
-
-    public int compare(NestedSetNodeWrapper<WikiDirectory> o1, NestedSetNodeWrapper<WikiDirectory> o2) {
-        WikiDirectory node1 = o1.getWrappedNode();
-        WikiDirectory node2 = o2.getWrappedNode();
-        if (node1.getName().compareTo(node2.getName()) != 0) {
-            return node1.getName().compareTo(node2.getName());
-        }
-        return node1.getId().compareTo(node2.getId());
-    }
-
-}

Deleted: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentCountComment.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentCountComment.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentCountComment.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,42 +0,0 @@
-package org.jboss.seam.wiki.core.model;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-/**
- * An ugly denormalization and duplication of data, so aggregation queries
- * can execute faster on nested set trees.
- *
- * @author Christian Bauer
- */
- at Entity
- at Table(name = "WIKI_DOCUMENT_COUNT_COMMENT")
-public class WikiDocumentCountComment {
-
-    @Id
-    @Column(name = "WIKI_DOCUMENT_ID", nullable = false)
-    private Long documentId;
-
-    @Column(name = "COMMENT_COUNT", nullable = false)
-    protected Long commentCount = 0l;
-
-    public WikiDocumentCountComment() {}
-
-    public Long getDocumentId() {
-        return documentId;
-    }
-
-    public void setDocumentId(Long documentId) {
-        this.documentId = documentId;
-    }
-
-    public Long getCommentCount() {
-        return commentCount;
-    }
-
-    public void setCommentCount(Long commentCount) {
-        this.commentCount = commentCount;
-    }
-}
\ No newline at end of file

Deleted: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentLastComment.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentLastComment.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentLastComment.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,57 +0,0 @@
-package org.jboss.seam.wiki.core.model;
-
-import javax.persistence.*;
-import java.util.Date;
-
-/**
- * A not-so-pretty denormalization and duplication of data, so aggregation queries
- * can execute faster on nested set trees.
- *
- * @author Christian Bauer
- */
- at Entity
- at Table(
-    name = "WIKI_DOCUMENT_LAST_COMMENT",
-    uniqueConstraints = {
-        @UniqueConstraint(columnNames = {"WIKI_DOCUMENT_ID", "LAST_COMMENT_ID"})
-    }
-)
-
-public class WikiDocumentLastComment {
-
-    @Id
-    @Column(name = "WIKI_DOCUMENT_ID", nullable = false)
-    private Long documentId;
-
-    @Column(name = "LAST_COMMENT_ID", nullable = false)
-    protected Long lastCommentId;
-
-    @Column(name = "LAST_COMMENT_CREATED_ON", nullable = false)
-    protected Date lastCommentCreatedOn;
-
-    public WikiDocumentLastComment() {}
-
-    public Long getDocumentId() {
-        return documentId;
-    }
-
-    public void setDocumentId(Long documentId) {
-        this.documentId = documentId;
-    }
-
-    public Long getLastCommentId() {
-        return lastCommentId;
-    }
-
-    public void setLastCommentId(Long lastCommentId) {
-        this.lastCommentId = lastCommentId;
-    }
-
-    public Date getLastCommentCreatedOn() {
-        return lastCommentCreatedOn;
-    }
-
-    public void setLastCommentCreatedOn(Date lastCommentCreatedOn) {
-        this.lastCommentCreatedOn = lastCommentCreatedOn;
-    }
-}

Added: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiTreeNode.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiTreeNode.java	                        (rev 0)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiTreeNode.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -0,0 +1,56 @@
+package org.jboss.seam.wiki.core.model;
+
+/**
+ * A simple wrapper for hierarchical display (with level) of wiki nodes.
+ *
+ * @author Christian Bauer
+ */
+public class WikiTreeNode<N extends WikiNode> {
+
+    private long level;
+    private N node;
+    private Object payload; // This can be anything we want to attach for display
+
+    public WikiTreeNode(long level, N node) {
+        this.level = level;
+        this.node = node;
+    }
+
+    public long getLevel() {
+        return level;
+    }
+
+    public N getNode() {
+        return node;
+    }
+
+    public Object getPayload() {
+        return payload;
+    }
+
+    public void setPayload(Object payload) {
+        this.payload = payload;
+    }
+
+    @Override
+    public String toString() {
+        return "(WikiTreeNode) L: " + getLevel() + " - " + getNode().toString();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        WikiTreeNode that = (WikiTreeNode) o;
+
+        if (!node.getId().equals(that.node.getId())) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        return node.getId().hashCode();
+    }
+}

Added: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiTreeNodeEntityConverter.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiTreeNodeEntityConverter.java	                        (rev 0)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiTreeNodeEntityConverter.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -0,0 +1,37 @@
+package org.jboss.seam.wiki.core.ui;
+
+import org.jboss.seam.ui.EntityConverter;
+import org.jboss.seam.wiki.core.model.WikiNode;
+import org.jboss.seam.wiki.core.model.WikiTreeNode;
+
+import javax.faces.convert.ConverterException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ * Making the broken JSF implementation happy.
+ */
+public class WikiTreeNodeEntityConverter extends EntityConverter {
+
+    @Override
+    public String getAsString(FacesContext facesContext,
+                              UIComponent uiComponent, Object o)
+            throws ConverterException {
+        String result;
+        if (o instanceof WikiTreeNode) {
+            result = super.getAsString(facesContext, uiComponent, ((WikiTreeNode) o).getNode());
+            return result;
+        } else {
+            throw new IllegalArgumentException("Can not convert: " + o);
+        }
+    }
+
+    @Override
+    public Object getAsObject(FacesContext facesContext,
+                              UIComponent uiComponent, String s)
+            throws ConverterException {
+        Object o = super.getAsObject(facesContext, uiComponent, s);
+        return new WikiTreeNode(0, (WikiNode) o);
+    }
+    
+}

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenu.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenu.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenu.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -12,11 +12,13 @@
 import org.jboss.seam.annotations.Scope;
 import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
 import org.jboss.seam.wiki.core.model.WikiDirectory;
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetNodeWrapper;
+import org.jboss.seam.wiki.core.model.WikiTreeNode;
+import org.jboss.seam.wiki.core.model.WikiNode;
 import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
 import org.jboss.seam.wiki.preferences.Preferences;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * Menu tree, base is the current directory.
@@ -27,24 +29,24 @@
 @Scope(ScopeType.PAGE)
 public class DirMenu implements Serializable {
 
-    public static final String MACRO_ATTR_ROOT = "dirMenuRoot";
+    public static final String MACRO_ATTR_DIRMENUTREE = "dirMenuTree";
 
     @In
     WikiDirectory currentDirectory;
 
-    public NestedSetNodeWrapper<WikiDirectory> getRoot(WikiPluginMacro macro) {
+    public List<WikiTreeNode<WikiDirectory>> getTree(WikiPluginMacro macro) {
         // We cache the result in the macro, so that when the getter is called over and over during rendering, we have it
-        if (macro.getAttributes().get(MACRO_ATTR_ROOT) == null) {
-            NestedSetNodeWrapper<WikiDirectory> root;
+        if (macro.getAttributes().get(MACRO_ATTR_DIRMENUTREE) == null) {
+            List<WikiTreeNode<WikiDirectory>> tree;
             DirMenuPreferences prefs  = Preferences.instance().get(DirMenuPreferences.class, macro);
             if (prefs.getOnlyMenuItems() != null && prefs.getOnlyMenuItems()) {
-                root = WikiNodeDAO.instance().findMenuItemTree(currentDirectory, 3l, 3l, false);
+                tree = WikiNodeDAO.instance().findMenuItemTree(currentDirectory, 3l, 3l, false);
             } else {
-                root = WikiNodeDAO.instance().findWikiDirectoryTree(currentDirectory, 3l, 3l, false);
+                tree = WikiNodeDAO.instance().findWikiDirectoryTree(currentDirectory, WikiNode.SortableProperty.name, true);
             }
-            macro.getAttributes().put(MACRO_ATTR_ROOT, root);
+            macro.getAttributes().put(MACRO_ATTR_DIRMENUTREE, tree);
         }
-        return (NestedSetNodeWrapper<WikiDirectory>)macro.getAttributes().get(MACRO_ATTR_ROOT);
+        return (List<WikiTreeNode<WikiDirectory>>)macro.getAttributes().get(MACRO_ATTR_DIRMENUTREE);
     }
 
 }

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocQuery.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocQuery.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocQuery.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -17,7 +17,8 @@
 import org.jboss.seam.wiki.core.wikitext.engine.WikiLinkResolver;
 import org.jboss.seam.wiki.core.model.WikiDirectory;
 import org.jboss.seam.wiki.core.model.WikiDocument;
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetNodeWrapper;
+import org.jboss.seam.wiki.core.model.WikiNode;
+import org.jboss.seam.wiki.core.model.WikiTreeNode;
 import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
 import org.jboss.seam.wiki.preferences.Preferences;
 import org.richfaces.component.UITree;
@@ -33,7 +34,7 @@
 @Scope(ScopeType.CONVERSATION)
 public class DirTocQuery implements Serializable {
 
-    public static final String MACRO_ATTR_TOCROOT = "dirTocRoot";
+    public static final String MACRO_ATTR_TOCTREE = "dirTocTree";
 
     @In
     EntityManager restrictedEntityManager;
@@ -44,11 +45,11 @@
     @In
     WikiDirectory currentDirectory;
 
-    public NestedSetNodeWrapper<WikiDirectory> getTocRoot(WikiPluginMacro macro) {
+    public List<WikiTreeNode<WikiDirectory>> getToc(WikiPluginMacro macro) {
 
-        NestedSetNodeWrapper<WikiDirectory> tocRoot =
-                (NestedSetNodeWrapper<WikiDirectory>)macro.getAttributes().get(MACRO_ATTR_TOCROOT);
-        if (tocRoot == null) {
+        // We cache the result in the macro, so that when the getter is called over and over during rendering, we have it
+        if (macro.getAttributes().get(MACRO_ATTR_TOCTREE) == null) {
+
             DirTocPreferences prefs = Preferences.instance().get(DirTocPreferences.class, macro);
 
             if (prefs.getRootDocumentLink() != null) {
@@ -60,11 +61,17 @@
             }
 
             // Query the directory tree
-            tocRoot = WikiNodeDAO.instance().findWikiDirectoryTree(currentDirectory);
+            List<WikiTreeNode<WikiDirectory>>
+                tree = WikiNodeDAO.instance().findWikiDirectoryTree(currentDirectory, WikiNode.SortableProperty.createdOn, true);
 
-            Set<Long> directoryIds = new HashSet<Long>(tocRoot.getFlatTree().keySet());
-            if (prefs.getShowRootDocuments() != null && prefs.getShowRootDocuments()) {
-                directoryIds.add(tocRoot.getWrappedNode().getId());
+            Set<Long> directoryIds = new HashSet<Long>();
+            for (WikiTreeNode<WikiDirectory> treeNode : tree) {
+                if (currentDirectory.getId().equals(treeNode.getNode().getId())
+                        && (prefs.getShowRootDocuments() != null && prefs.getShowRootDocuments())) {
+                    directoryIds.add(treeNode.getNode().getId());
+                } else if (!currentDirectory.getId().equals(treeNode.getNode().getId())){
+                    directoryIds.add(treeNode.getNode().getId());
+                }
             }
             if (directoryIds.size() == 0) return null; // Early exit
 
@@ -89,25 +96,21 @@
             for (WikiDocument flatDoc : flatDocs) {
 
                 Long directoryId = flatDoc.getParent().getId();
-                NestedSetNodeWrapper<WikiDirectory> dirWrapper;
 
-                if (prefs.getShowRootDocuments() != null && prefs.getShowRootDocuments()
-                    && directoryId.equals(tocRoot.getWrappedNode().getId())) {
-                    dirWrapper = tocRoot;
-                } else {
-                    dirWrapper = tocRoot.getFlatTree().get(directoryId);
+                for (WikiTreeNode<WikiDirectory> treeNode : tree) {
+                    if (treeNode.getNode().getId().equals(directoryId)) {
+                        if (treeNode.getPayload() == null)
+                            treeNode.setPayload(new ArrayList());
+
+                        ((Collection)treeNode.getPayload()).add(flatDoc);
+                    }
                 }
-
-                if (dirWrapper.getPayload() == null)
-                    dirWrapper.setPayload(new ArrayList<WikiDocument>());
-
-                ((Collection)dirWrapper.getPayload()).add(flatDoc);
             }
 
-            macro.getAttributes().put(MACRO_ATTR_TOCROOT, tocRoot);
+            macro.getAttributes().put(MACRO_ATTR_TOCTREE, tree);
         }
 
-        return tocRoot;
+        return (List<WikiTreeNode<WikiDirectory>>)macro.getAttributes().get(MACRO_ATTR_TOCTREE);
     }
 
     public boolean expandTocTree(UITree tree) {

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenu.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenu.xhtml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenu.xhtml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -36,9 +36,15 @@
 
             <s:cache region="#{currentMacro.getCacheRegion('DirMenuList')}"
                      key="#{currentMacro.cacheKey}">
-                <ui:include src="dirMenuItem.xhtml">
-                    <ui:param name="node" value="#{dirMenu.getRoot(currentMacro)}"/>
-                </ui:include>
+                <c:forEach items="#{dirMenu.getTree(currentMacro)}" var="tn">
+                    <s:div styleClass="level#{tn.level}">
+                        <h:outputText styleClass="level#{tn.level}Marker level#{tn.level}MarkerDot" value="&#183;"/>
+                        <h:outputText styleClass="level#{tn.level}Marker level#{tn.level}MarkerGreaterThan" value=">"/>
+                        <h:outputText styleClass="level#{tn.level}Marker level#{tn.level}MarkerSlash" value="&#47;"/>
+                        <h:outputText styleClass="level#{tn.level}Marker level#{tn.level}MarkerSpace" value="&#160;"/>
+                        <h:outputLink styleClass="level#{tn.level}Link" value="#{wikiURLRenderer.renderURL(tn.node)}">#{tn.node.name}</h:outputLink>
+                    </s:div>
+                </c:forEach>
             </s:cache>
         </div>
 

Deleted: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenuItem.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenuItem.xhtml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenuItem.xhtml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,35 +0,0 @@
-<ui:composition
-        xmlns="http://www.w3.org/1999/xhtml"
-        xmlns:ui="http://java.sun.com/jsf/facelets"
-        xmlns:h="http://java.sun.com/jsf/html"
-        xmlns:f="http://java.sun.com/jsf/core"
-        xmlns:wiki="http://jboss.com/products/seam/wiki"
-        xmlns:c="http://java.sun.com/jstl/core"
-        xmlns:s="http://jboss.com/products/seam/taglib">
-
-<c:forEach var="childWrapper" items="#{node.wrappedChildren}">
-    <s:div styleClass="level#{childWrapper.level}">
-        <s:div styleClass="level#{childWrapper.level}Body">
-            <h:panelGrid columns="3"
-                         columnClasses="level#{childWrapper.level}Marker, level#{childWrapper.level}Icon, level#{childWrapper.level}LinkColumn">
-
-                <h:outputText value="&#183;"/>
-
-                <s:span>
-                    <h:graphicImage value="#{imagePath}/icon.dir.gif" width="18" height="20"/>
-                </s:span>
-
-                <h:outputLink styleClass="level#{childWrapper.level}Link" target="_top"
-                              value="#{wikiURLRenderer.renderURL(childWrapper.wrappedNode)}">#{wiki:truncateString(childWrapper.wrappedNode.name, 40, '...')}</h:outputLink>
-
-            </h:panelGrid>
-        </s:div>
-        <s:div styleClass="level#{childWrapper.level}Children" style="padding-left: #{childWrapper.level*7}px;">
-            <ui:include src="dirMenuItem.xhtml">
-                <ui:param name="node" value="#{childWrapper}"/>
-            </ui:include>
-        </s:div>
-    </s:div>
-</c:forEach>
-
-</ui:composition>

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirToc.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirToc.xhtml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirToc.xhtml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -8,71 +8,42 @@
         xmlns:rich="http://richfaces.ajax4jsf.org/rich"
         xmlns:s="http://jboss.com/products/seam/taglib">
 
+
     <s:cache region="#{currentMacro.getCacheRegion('DirectoryToc')}"
              key="#{currentMacro.cacheKey}">
 
-    <rich:tree switchType="client" styleClass="dirToc"
-               adviseNodeOpened="#{dirTocQuery.expandTocTree}">
+        <h:dataTable var="n" value="#{dirTocQuery.getToc(currentMacro)}" cellpadding="0" cellspacing="0" border="0">
+            <h:column>
+                <s:div rendered="#{not empty n.payload}" styleClass="tocLevel#{n.level-1}">
+                    <h:panelGrid columns="2" styleClass="category" cellpadding="0" cellspacing="0" border="0">
+                        <h:graphicImage value="#{imagePath}/icon.dir.gif" width="18" height="20"/>
+                        <h:outputText styleClass="tocCategory" value="#{wiki:truncateString(n.node.name, 100, '...')}" />
+                    </h:panelGrid>
+                    <ui:repeat var="doc" value="#{n.payload}">
+                        <s:fragment rendered="#{doc.id != n.node.defaultFile.id or
+                                                       preferences.get('DirToc', currentMacro).showDefaultDocuments}">
+                            <h:panelGrid columns="4" styleClass="children" cellpadding="0" cellspacing="0" border="0">
+                                <h:graphicImage value="#{imagePath}/icon.doc.gif" width="18" height="20"/>
+                                <h:outputLink value="#{wikiURLRenderer.renderURL(doc)}">
+                                    <h:outputText styleClass="tocDocumentLabel" value="#{doc.name}"/>
+                                </h:outputLink>
+                                <s:span styleClass="lastUpdatedLabel smallFont"
+                                        rendered="#{preferences.get('DirToc', currentMacro).showLastUpdatedTimestamp and not empty doc.lastModifiedOn}">
+                                    <h:outputText value="&#160;(#{messages['basic.dirToc.label.LastUpdated']}:&#160;"/>
+                                    <h:outputText value="#{doc.lastModifiedOn}">
+                                        <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
+                                    </h:outputText>
+                                    <h:outputText value="&#160;#{preferences.get('Wiki').timeZone}"/>
+                                    <h:outputText value=")"/>
+                                </s:span>
+                            </h:panelGrid>
+                       </s:fragment>
+                    </ui:repeat>
 
-        <rich:treeNodesAdaptor
-                var="rootDoc"
-                nodes="#{dirTocQuery.getTocRoot(currentMacro).payload}"
-                includedNode="#{rootDoc.id != dirTocQuery.getTocRoot(currentMacro).wrappedNode.defaultFile.id or
-                                preferences.get('DirToc', currentMacro).showDefaultDocuments}">
-            <rich:treeNode>
-                <f:facet name="iconLeaf">
-                    <h:graphicImage value="#{imagePath}/icon.doc.gif" width="18" height="20"/>
-                </f:facet>
-                <h:outputLink value="#{wikiURLRenderer.renderURL(doc)}">
-                    <h:outputText styleClass="tocDocumentLabel" value="#{doc.name}"/>
-                </h:outputLink>
-            </rich:treeNode>
-        </rich:treeNodesAdaptor>
+                </s:div>
+            </h:column>
+        </h:dataTable>
 
-        <rich:recursiveTreeNodesAdaptor
-                var="tocDir"
-                roots="#{dirTocQuery.getTocRoot(currentMacro).wrappedChildren}"
-                nodes="#{tocDir.wrappedChildren}">
-
-            <rich:treeNode>
-                <f:facet name="icon">
-                    <h:graphicImage value="#{imagePath}/icon.dir.gif" width="18" height="20"/>
-                </f:facet>
-                <f:facet name="iconLeaf">
-                    <h:graphicImage value="#{imagePath}/icon.dir.gif" width="18" height="20"/>
-                </f:facet>
-                <s:span styleClass="undecoratedLink">
-                    <h:outputLink value="#{wikiURLRenderer.renderURL(tocDir.wrappedNode)}">
-                        <h:outputText styleClass="tocDirectoryLabel" value="#{tocDir.wrappedNode.name}"/>
-                    </h:outputLink>
-                </s:span>
-            </rich:treeNode>
-
-            <rich:treeNodesAdaptor var="doc" nodes="#{tocDir.payload}"
-                                   includedNode="#{doc.id != tocDir.wrappedNode.defaultFile.id or
-                                                   preferences.get('DirToc', currentMacro).showDefaultDocuments}">
-                <rich:treeNode>
-                    <f:facet name="iconLeaf">
-                        <h:graphicImage value="#{imagePath}/icon.doc.gif" width="18" height="20"/>
-                    </f:facet>
-                    <h:outputLink value="#{wikiURLRenderer.renderURL(doc)}">
-                        <h:outputText styleClass="tocDocumentLabel" value="#{doc.name}"/>
-                    </h:outputLink>
-                    <s:span styleClass="tocLastUpdatedLabel"
-                            rendered="#{preferences.get('DirToc', currentMacro).showLastUpdatedTimestamp and not empty doc.lastModifiedOn}">
-                        <h:outputText value="&#160;(#{messages['basic.dirToc.label.LastUpdated']}:&#160;"/>
-                        <h:outputText value="#{doc.lastModifiedOn}">
-                            <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
-                        </h:outputText>
-                        <h:outputText value="&#160;#{preferences.get('Wiki').timeZone}"/>
-                        <h:outputText value=")"/>
-                    </s:span>
-                </rich:treeNode>
-            </rich:treeNodesAdaptor>
-
-        </rich:recursiveTreeNodesAdaptor>
-    </rich:tree>
-
     </s:cache>
 
 </wiki:plugin>
\ No newline at end of file

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirMenu.css
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirMenu.css	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirMenu.css	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,10 +1,8 @@
 .dirMenu .level1 {
+    margin-top: 2px;
+    margin-bottom: 2px;
 }
 
-.dirMenu .level1Body {
-    background-color: white;
-}
-
 .dirMenu .level1Marker {
     display: none;
 }
@@ -13,26 +11,34 @@
     color: #962325;
     font-size: 95%;
     text-decoration: none;
+    font-weight: bold;
 }
 
 .dirMenu .level1Link:hover {color: #666}
 
-.dirMenu .level1Children {
-    background-color: white;
-}
-
 .dirMenu .level2 {
+    margin-left: 10px;
+    margin-top: 2px;
+    margin-bottom: 2px;
 }
 
 .dirMenu .level2Marker {
     padding-left: 2px;
     padding-right: 2px;
-    font-size: 80%;
+    font-size: 95%;
     color: #962325;
 }
 
+.dirMenu .level2MarkerGreaterThan,
+.dirMenu .level2MarkerSlash,
+.dirMenu .level3MarkerSlash,
+.dirMenu .level3MarkerDot
+{
+    display: none;
+}
+
 .dirMenu .level2Link {
-    font-size: 80%;
+    font-size: 95%;
     color: #962325;
     text-decoration: none;
     white-space: nowrap;
@@ -40,7 +46,9 @@
 
 .dirMenu .level2Link:hover {color: #666}
 
-.dirMenu .level3 {}
+.dirMenu .level3 {
+    margin-left: 20px;
+}
 
 .dirMenu .level3Marker {
     padding-left: 2px;

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirToc.css
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirToc.css	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirToc.css	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,20 +1,38 @@
-.dirToc {
+.tocLevel1,
+    .tocLevel2,
+    .tocLevel3,
+    .tocLevel4
+{
+    margin-bottom: 6px;
 }
 
-.tocDirectoryLabel {
-    font-weight: bold;
+.tocLevel2 {
+    margin-left: 18px;
 }
 
-.tocDirectoryLabel {
-    cursor: pointer;
+
+.tocLevel3 {
+    margin-left: 36px;
 }
 
-.tocDocumentLabel {
-    margin-left: 5px;
-    cursor: pointer;
+.tocLevel4 {
+    margin-left: 54px;
 }
 
-.rich-tree-node-highlighted .tocDirectoryLabel,
-.rich-tree-node-highlighted .tocDocumentLabel {
-    color: black;
+.tocLevel1 .children,
+    .tocLevel2 .children,
+    .tocLevel3 .children,
+    .tocLevel4 .children
+{
+    margin-left: 18px;
+    margin-top: 4px;
+
 }
+
+.tocLevel1 .category,
+    .tocLevel2 .category,
+    .tocLevel3 .category,
+    .tocLevel4 .category
+{
+    font-weight: bold;
+}

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirMenu.css
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirMenu.css	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirMenu.css	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,8 +1,10 @@
-.dirMenu .level1 {
+.dirMenu .boxContent {
+    padding: 5px;
 }
 
-.dirMenu .level1Body {
-    background-color: white;
+.dirMenu .level1 {
+    margin-top: 2px;
+    margin-bottom: 2px;
 }
 
 .dirMenu .level1Marker {
@@ -10,50 +12,49 @@
 }
 
 .dirMenu .level1Link {
-    color: #d75525;
     font-size: 95%;
     text-decoration: none;
+    font-weight: bold;
 }
 
-.dirMenu .level1Link:hover {color: #666}
-
-.dirMenu .level1Children {
-    background-color: white;
-}
-
 .dirMenu .level2 {
+    margin-left: 10px;
+    margin-top: 2px;
+    margin-bottom: 2px;
 }
 
 .dirMenu .level2Marker {
-    color: #d75525;
     padding-left: 2px;
     padding-right: 2px;
-    font-size: 80%;
+    font-size: 95%;
 }
 
+.dirMenu .level2MarkerGreaterThan,
+.dirMenu .level2MarkerSlash,
+.dirMenu .level3MarkerSlash,
+.dirMenu .level3MarkerDot
+{
+    display: none;
+}
+
 .dirMenu .level2Link {
-    color: #d75525;
-    font-size: 80%;
+    font-size: 95%;
     text-decoration: none;
     white-space: nowrap;
 }
 
-.dirMenu .level2Link:hover {color: #666}
+.dirMenu .level3 {
+    margin-left: 20px;
+}
 
-.dirMenu .level3 {}
-
 .dirMenu .level3Marker {
-    color: #d75525;
     padding-left: 2px;
     padding-right: 2px;
     font-size: 80%;
 }
 
 .dirMenu .level3Link {
-    color: #d75525;
     font-size: 80%;
     text-decoration: none;
     white-space: nowrap;
 }
-
-.dirMenu .level3Link:hover {color: #666}

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirToc.css
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirToc.css	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirToc.css	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,20 +1,38 @@
-.dirToc {
+.tocLevel1,
+    .tocLevel2,
+    .tocLevel3,
+    .tocLevel4
+{
+    margin-bottom: 6px;
 }
 
-.tocDirectoryLabel {
-    font-weight: bold;
+.tocLevel2 {
+    margin-left: 18px;
 }
 
-.tocDirectoryLabel {
-    cursor: pointer;
+
+.tocLevel3 {
+    margin-left: 36px;
 }
 
-.tocDocumentLabel {
-    margin-left: 5px;
-    cursor: pointer;
+.tocLevel4 {
+    margin-left: 54px;
 }
 
-.rich-tree-node-highlighted .tocDirectoryLabel,
-.rich-tree-node-highlighted .tocDocumentLabel {
-    color: black;
+.tocLevel1 .children,
+    .tocLevel2 .children,
+    .tocLevel3 .children,
+    .tocLevel4 .children
+{
+    margin-left: 18px;
+    margin-top: 4px;
+
 }
+
+.tocLevel1 .category,
+    .tocLevel2 .category,
+    .tocLevel3 .category,
+    .tocLevel4 .category
+{
+    font-weight: bold;
+}

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirMenu.css
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirMenu.css	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirMenu.css	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,8 +1,10 @@
-.dirMenu .level1 {
+.dirMenu .boxContent {
+    padding: 5px;
 }
 
-.dirMenu .level1Body {
-    background-color: white;
+.dirMenu .level1 {
+    margin-top: 2px;
+    margin-bottom: 2px;
 }
 
 .dirMenu .level1Marker {
@@ -10,33 +12,49 @@
 }
 
 .dirMenu .level1Link {
+    font-size: 95%;
+    text-decoration: none;
+    font-weight: bold;
 }
 
-
-.dirMenu .level1Children {
-    background-color: white;
-}
-
 .dirMenu .level2 {
+    margin-left: 10px;
+    margin-top: 2px;
+    margin-bottom: 2px;
 }
 
 .dirMenu .level2Marker {
     padding-left: 2px;
     padding-right: 2px;
+    font-size: 95%;
 }
 
+.dirMenu .level2MarkerGreaterThan,
+.dirMenu .level2MarkerSlash,
+.dirMenu .level3MarkerSlash,
+.dirMenu .level3MarkerDot
+{
+    display: none;
+}
+
 .dirMenu .level2Link {
+    font-size: 95%;
+    text-decoration: none;
     white-space: nowrap;
 }
 
-.dirMenu .level3 {}
+.dirMenu .level3 {
+    margin-left: 20px;
+}
 
 .dirMenu .level3Marker {
     padding-left: 2px;
     padding-right: 2px;
+    font-size: 80%;
 }
 
 .dirMenu .level3Link {
+    font-size: 80%;
+    text-decoration: none;
     white-space: nowrap;
 }
-

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirToc.css
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirToc.css	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirToc.css	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,21 +1,38 @@
-.dirToc {
+.tocLevel1,
+    .tocLevel2,
+    .tocLevel3,
+    .tocLevel4
+{
+    margin-bottom: 6px;
 }
 
-.tocDirectoryPanel {
-    margin-top: 5px;
+.tocLevel2 {
+    margin-left: 18px;
 }
 
-.tocDirectoryLabel {
-    font-weight: bold;
-    cursor: pointer;
+
+.tocLevel3 {
+    margin-left: 36px;
 }
 
-.tocDocumentLabel {
-    margin-left: 5px;
-    cursor: pointer;
+.tocLevel4 {
+    margin-left: 54px;
 }
 
-.rich-tree-node-highlighted .tocDirectoryLabel,
-.rich-tree-node-highlighted .tocDocumentLabel {
-    color: black;
+.tocLevel1 .children,
+    .tocLevel2 .children,
+    .tocLevel3 .children,
+    .tocLevel4 .children
+{
+    margin-left: 18px;
+    margin-top: 4px;
+
 }
+
+.tocLevel1 .category,
+    .tocLevel2 .category,
+    .tocLevel3 .category,
+    .tocLevel4 .category
+{
+    font-weight: bold;
+}

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDAO.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDAO.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDAO.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -7,9 +7,9 @@
 package org.jboss.seam.wiki.plugin.blog;
 
 import org.hibernate.Hibernate;
-import org.hibernate.Query;
 import org.hibernate.SQLQuery;
 import org.hibernate.Session;
+import org.hibernate.Query;
 import org.hibernate.transform.ResultTransformer;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
@@ -17,7 +17,9 @@
 import org.jboss.seam.annotations.AutoCreate;
 import org.jboss.seam.wiki.core.model.WikiDirectory;
 import org.jboss.seam.wiki.core.model.WikiDocument;
+import org.jboss.seam.wiki.core.model.WikiNode;
 import org.jboss.seam.wiki.core.action.Pager;
+import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
 import org.jboss.seam.ScopeType;
 
 import javax.persistence.EntityManager;
@@ -29,7 +31,7 @@
 
 /**
  * Queries and database operations related to blog entries (mostly aggregation queries).
- *
+ * <p/>
  * TODO: The queries (especially since they are all SQL) should be externalized to a hbm.xml file. However,
  * building them dynamically here is less duplication for now.
  *
@@ -44,6 +46,9 @@
     EntityManager restrictedEntityManager;
 
     @In
+    WikiNodeDAO wikiNodeDAO;
+
+    @In
     Integer currentAccessLevel;
 
     // Too bad, but we really need a SQL query here... better use SQL queries for ALL queries in this DAO and generalize things
@@ -70,12 +75,7 @@
 
     private String getBlogEntryWhereClause(WikiDocument ignoreDoc, Integer year, Integer month, Integer day, String tag) {
         StringBuilder clause = new StringBuilder();
-        clause.append("where doc2.PARENT_NODE_ID in").append(" (");
-        clause.append("select distinct dir1.NODE_ID from WIKI_DIRECTORY dir1, WIKI_DIRECTORY dir2").append(" ");
-        clause.append("where dir1.NS_THREAD = dir2.NS_THREAD").append(" ");
-        clause.append("and dir1.NS_LEFT between dir2.NS_LEFT and dir2.NS_RIGHT").append(" ");
-        clause.append("and dir2.NS_THREAD=:nsThread and dir2.NS_LEFT>=:nsLeft and dir2.NS_RIGHT<=:nsRight");
-        clause.append(") ");
+        clause.append("where doc2.PARENT_NODE_ID in (:directoryIDs)").append(" ");
         clause.append("and doc.HEADER_MACROS like '%blogEntry%'").append(" ");
         clause.append("and doc2.READ_ACCESS_LEVEL <= :currentAccessLevel").append(" ");
         if (ignoreDoc != null && ignoreDoc.getId() != null) clause.append("and doc.NODE_ID<>:ignoreDoc").append(" ");
@@ -88,9 +88,7 @@
 
     private void bindBlogEntryWhereClause(Query query, WikiDirectory startDir, WikiDocument ignoreDoc,
                                           Integer year, Integer month, Integer day, String tag) {
-        query.setParameter("nsThread", startDir.getNodeInfo().getNsThread());
-        query.setParameter("nsLeft", startDir.getNodeInfo().getNsLeft());
-        query.setParameter("nsRight", startDir.getNodeInfo().getNsRight());
+        query.setParameterList("directoryIDs", wikiNodeDAO.findWikiDirectoryTreeIDs(startDir));
         query.setParameter("currentAccessLevel", currentAccessLevel);
 
         if (ignoreDoc != null && ignoreDoc.getId() != null) query.setParameter("ignoreDoc", ignoreDoc);
@@ -151,11 +149,9 @@
         if (countComments && result.size() > 0) {
             // The risk here is that pager.getQueryMaxResults() is too large for the IN() operator of some DBs...
             StringBuilder commentQueryString = new StringBuilder();
-            commentQueryString.append("select doc.NODE_ID as DOC_ID, count(c3.NODE_ID) as COMMENT_COUNT").append(" ");
+            commentQueryString.append("select doc.NODE_ID as DOC_ID, count(c1.NODE_ID) as COMMENT_COUNT").append(" ");
             commentQueryString.append("from WIKI_DOCUMENT doc").append(" ");
             commentQueryString.append("left outer join WIKI_NODE c1 on doc.NODE_ID = c1.PARENT_NODE_ID").append(" ");
-            commentQueryString.append("left outer join WIKI_COMMENT c2 on c1.NODE_ID = c2.NODE_ID").append(" ");
-            commentQueryString.append("left outer join WIKI_COMMENT c3 on c2.NS_THREAD = c3.NS_THREAD").append(" ");
             commentQueryString.append("where doc.NODE_ID in (:blogEntriesIds)").append(" ");
             commentQueryString.append("group by doc.NODE_ID");
 

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowser.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowser.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowser.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -13,7 +13,7 @@
 import org.jboss.seam.wiki.core.model.WikiDirectory;
 import org.jboss.seam.wiki.core.model.WikiDocument;
 import org.jboss.seam.wiki.core.model.WikiNode;
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetNodeWrapper;
+import org.jboss.seam.wiki.core.model.WikiTreeNode;
 
 import java.util.List;
 import java.io.Serializable;
@@ -40,8 +40,8 @@
     @In(required = false)
     String requestedCategory;
 
-    NestedSetNodeWrapper<WikiDirectory> tree;
-    NestedSetNodeWrapper<WikiDirectory> selectedDir;
+    List<WikiTreeNode<WikiDirectory>> tree;
+    WikiTreeNode<WikiDirectory> selectedDir;
     boolean directorySelected = false;
 
     public void loadTree() {
@@ -49,7 +49,7 @@
         WikiDirectory faqRoot = faqBrowserDAO.findFaqRootDir(currentDirectory);
         if (faqRoot != null) {
             log.debug("found faq root: " + faqRoot);
-            tree = wikiNodeDAO.findWikiDirectoryTree(faqRoot, 99l, 1l, false);
+            tree = wikiNodeDAO.findWikiDirectoryTree(faqRoot, WikiNode.SortableProperty.createdOn, true);
         } else {
             log.warn("did not find faq root, started search in: " + currentDirectory);
         }
@@ -65,31 +65,28 @@
             WikiDirectory dir = wikiNodeDAO.findWikiDirectoryInArea(currentDirectory.getAreaNumber(), requestedCategory);
             if (dir != null) {
                 log.debug("found requested category, setting selected directory: " + dir);
-                selectedDir = new NestedSetNodeWrapper<WikiDirectory>(dir);
+                selectedDir = new WikiTreeNode(0, dir);
                 showQuestions();
             }
         }
         if (selectedDir == null) {
             log.debug("setting selected directory to current directory");
-            selectedDir =
-                new NestedSetNodeWrapper<WikiDirectory>(
-                    wikiNodeDAO.findWikiDirectory(currentDirectory.getId())
-                );
+            selectedDir = new WikiTreeNode(0, wikiNodeDAO.findWikiDirectory(currentDirectory.getId()));
         }
     }
 
-    public NestedSetNodeWrapper<WikiDirectory> getTree() {
+    public List<WikiTreeNode<WikiDirectory>> getTree() {
         log.debug("getting faq tree");
         if (tree == null) loadTree();
         return tree;
     }
 
-    public NestedSetNodeWrapper<WikiDirectory> getSelectedDir() {
+    public WikiTreeNode<WikiDirectory> getSelectedDir() {
         log.debug("getting selected directory : " + selectedDir);
         return selectedDir;
     }
 
-    public void setSelectedDir(NestedSetNodeWrapper<WikiDirectory> selectedDir) {
+    public void setSelectedDir(WikiTreeNode<WikiDirectory> selectedDir) {
         log.debug("setting selected directory: " + selectedDir);
         this.selectedDir = selectedDir;
     }
@@ -100,9 +97,9 @@
 
     @Observer("FaqBrowser.questionListRefresh")
     public void showQuestions() {
-        log.debug("showing questions of currently selected directory: " + selectedDir.getWrappedNode());
+        log.debug("showing questions of currently selected: " + selectedDir);
         directorySelected = true;
-        questions = wikiNodeDAO.findWikiDocuments(selectedDir.getWrappedNode(), WikiNode.SortableProperty.createdOn, true);
+        questions = wikiNodeDAO.findWikiDocuments(selectedDir.getNode(), WikiNode.SortableProperty.createdOn, true);
     }
 
     public void hideQuestions() {

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowserDAO.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowserDAO.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowserDAO.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -7,13 +7,16 @@
 package org.jboss.seam.wiki.plugin.faqBrowser;
 
 import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.*;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
 import org.jboss.seam.wiki.core.model.WikiDirectory;
+import org.jboss.seam.wiki.core.model.WikiDocument;
 
 import javax.persistence.EntityManager;
-import javax.persistence.Query;
 import java.io.Serializable;
 import java.util.List;
+import java.util.ArrayList;
 
 /**
  * @author Christian Bauer
@@ -27,31 +30,20 @@
 
     public WikiDirectory findFaqRootDir(WikiDirectory startDir) {
 
-        StringBuilder queryString = new StringBuilder();
-        queryString.append("select dir from WikiDirectory dir join dir.defaultFile f, WikiDocument doc");
-        queryString.append(" where dir.nodeInfo.nsThread = :nsThread and");
-        queryString.append(" dir.nodeInfo.nsLeft <= :nsLeft and dir.nodeInfo.nsRight >= :nsRight");
-        queryString.append(" and f = doc and doc.headerMacrosString like '%faqBrowser%'");
-
-        Query query = restrictedEntityManager.createQuery(queryString.toString())
-                .setParameter("nsThread", startDir.getNodeInfo().getNsThread())
-                .setParameter("nsLeft", startDir.getNodeInfo().getNsLeft())
-                .setParameter("nsRight", startDir.getNodeInfo().getNsRight());
-
-        List<WikiDirectory> result = query.getResultList();
-
-        if (result.size() == 0) return null;
-
-        // We need to iterate through all found directories, these directories are all the "parents" in the
-        // tree which might have a default document with "faqBrowser" macro. We assume that the "highest level"
-        // directory is the root of the FAQ tree - luckily we have the nested set values to find that one.
-        WikiDirectory highestLevelDirectory = result.get(0);
-        for (WikiDirectory wikiDirectory : result) {
-            if (wikiDirectory.getNodeInfo().getNsLeft() < highestLevelDirectory.getNodeInfo().getNsLeft()) {
-                highestLevelDirectory = wikiDirectory;
+        // This was a database query once... now it's in-memory iteration
+        List<WikiDirectory> parents = new ArrayList();
+        parents.add(startDir);
+        parents.addAll(startDir.getParentsRecursive());
+        WikiDirectory faqRootDir = null;
+        // We need the highest level directory that has a document with a "faqBrowser" macro
+        for (WikiDirectory parent : parents) {
+            if (parent.getDefaultFile() == null) continue;
+            if (((WikiDocument)parent.getDefaultFile()).getHeaderMacrosString().contains("faqBrowser")) {
+                faqRootDir = parent;
+                // Continue iterating, maybe we find a higher level directory with the macro
             }
         }
-        return highestLevelDirectory;
+        return faqRootDir;
     }
 
 }

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionHome.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionHome.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionHome.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -35,7 +35,7 @@
     @Override
     public void create() {
         super.create();
-        setParentNodeId(faqBrowser.getSelectedDir().getWrappedNode().getId());
+        setParentNodeId(faqBrowser.getSelectedDir().getNode().getId());
     }
 
     @Override

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqControls.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqControls.xhtml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqControls.xhtml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -23,38 +23,37 @@
 
             <s:span>
                 <h:selectOneMenu value="#{faqBrowser.selectedDir}"
-                                 rendered="#{not empty faqBrowser.tree and faqBrowser.tree.wrappedChildren.size() > 0}"
-                                 converter="#{nestedSetNodeWrapperRestrictedEntityConverter}"
+                                 rendered="#{not empty faqBrowser.tree}"
+                                 converter="#{wikiTreeNodeRestrictedEntityConverter}"
                                  styleClass="ajaxSupport" tabindex="1">
-                    <s:selectItems value="#{faqBrowser.tree.wrappedChildren}"
+                    <s:selectItems value="#{faqBrowser.tree}"
                                    var="faqsDir"
-                                   label="#{wiki:repeatString('&#160;&#183;&#160;',faqsDir.level-1)}#{wiki:truncateString(faqsDir.wrappedNode.name, 40, '...')}"/>
+                                   label="#{wiki:repeatString('&#160;',faqsDir.level-1)}&#183;&#160;#{wiki:truncateString(faqsDir.node.name, 40, '...')}"/>
                     <a:support event="onchange" status="globalStatus"
                                action="#{faqBrowser.showQuestions}"
                                reRender="faqQuestions, faqQuestionsControl, faqCategoryLink, messageBoxContainer"/>
                 </h:selectOneMenu>
                 <h:outputText value="#{messages['fb.faqBrowser.msg.TreeNotFound']}" rendered="#{empty faqBrowser.tree}"/>
-                <h:outputText value="#{messages['fb.faqBrowser.msg.TreeEmpty']}" rendered="#{faqBrowser.tree.wrappedChildren.size() == 0}"/>
             </s:span>
 
             <s:span id="faqQuestionsControl">
                 <a:commandLink action="#{faqBrowser.showQuestions}" tabindex="1"
                                reRender="faqQuestions, faqQuestionsControl, faqCategoryLink, messageBoxContainer"
                                status="globalStatus"
-                               rendered="#{not faqBrowser.directorySelected and not empty faqBrowser.tree and faqBrowser.tree.wrappedChildren.size() > 0}">
+                               rendered="#{not faqBrowser.directorySelected and not empty faqBrowser.tree}">
                     <h:graphicImage value="#{imagePath}/menu_down.gif" width="18" height="18"/>
                 </a:commandLink>
                 <a:commandLink action="#{faqBrowser.hideQuestions}" tabindex="1"
                                reRender="faqQuestions, faqQuestionsControl, faqCategoryLink, messageBoxContainer"
                                status="globalStatus"
-                               rendered="#{faqBrowser.directorySelected and not empty faqBrowser.tree and faqBrowser.tree.wrappedChildren.size() > 0}">
+                               rendered="#{faqBrowser.directorySelected and not empty faqBrowser.tree}">
                     <h:graphicImage value="#{imagePath}/menu_up.gif" width="18" height="18"/>
                 </a:commandLink>
             </s:span>
 
             <s:span id="faqCategoryLink" styleClass="undecoratedLink">
                 <s:fragment rendered="#{faqBrowser.directorySelected}">
-                    <h:outputLink value="#{wikiURLRenderer.renderWikiURL(currentDocument)}/Category/#{faqBrowser.selectedDir.wrappedNode.wikiname}">
+                    <h:outputLink value="#{wikiURLRenderer.renderWikiURL(currentDocument)}/Category/#{faqBrowser.selectedDir.node.wikiname}">
                         <h:outputText value="Link"/>
                     </h:outputLink>
                 </s:fragment>
@@ -69,9 +68,9 @@
                 <h:panelGrid columns="2" styleClass="header" columnClasses="categoryDescription, newQuestionButton"
                              cellpadding="0" cellspacing="0" border="0">
 
-                    <h:outputText value="#{faqBrowser.selectedDir.wrappedNode.description}"/>
+                    <h:outputText value="#{faqBrowser.selectedDir.node.description}"/>
 
-                    <s:fragment rendered="#{s:hasPermission('Node', 'create', faqBrowser.selectedDir.wrappedNode)}">
+                    <s:fragment rendered="#{s:hasPermission('Node', 'create', faqBrowser.selectedDir.node)}">
                         <a:commandLink action="#{faqQuestionHome.newQuestion()}"
                                        reRender="faqBrowserPluginContainer, messageBoxContainer"
                                        status="globalStatus"

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumDAO.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumDAO.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumDAO.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -275,7 +275,7 @@
             )
             .list();
 
-        if (topicInfoMap.keySet().size() == 0) return topicInfoMap; // Early exist possible
+        if (topicInfoMap.keySet().size() == 0) return topicInfoMap; // Early exit possible
 
         // Retrieve the topic entity instances and shove them into the map
         getSession(true).getNamedQuery("forumTopics")

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumQueries.hbm.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumQueries.hbm.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumQueries.hbm.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -76,25 +76,28 @@
         order by m.displayPosition asc
     </query>
 
+    <!--
+        This query should take 200-400 ms with about 50.000 postings on the forum.
+        (No, querying per-forum instead of querying all forums at once is not (much) faster.) 
+     -->
     <sql-query name="forumTopicReplyCount">
         <return-scalar column="FORUM_ID" type="long"/>
         <return-scalar column="TOPIC_COUNT" type="long"/>
         <return-scalar column="REPLY_COUNT" type="long"/>
         select
             dir0.NODE_ID as FORUM_ID,
-            count(doc0.NODE_ID) as TOPIC_COUNT,
-            sum(dc.COMMENT_COUNT) as REPLY_COUNT
+            count(distinct doc0.NODE_ID) as TOPIC_COUNT,
+            count(distinct c0.NODE_ID) as REPLY_COUNT
         from
             WIKI_NODE dir0
-              inner join WIKI_NODE doc1 on doc1.PARENT_NODE_ID = dir0.NODE_ID
-                                        and doc1.READ_ACCESS_LEVEL &lt;= :readAccessLevel
-                inner join WIKI_DOCUMENT doc0 on doc0.NODE_ID=doc1.NODE_ID
-                                          and (doc0.HEADER_MACROS like '%forumPosting%' or doc0.HEADER_MACROS like '%forumStickyPosting%')
-                    left outer join WIKI_DOCUMENT_COUNT_COMMENT dc on dc.WIKI_DOCUMENT_ID = doc0.NODE_ID
+                left outer join WIKI_NODE doc1 on doc1.PARENT_NODE_ID = dir0.NODE_ID
+                and doc1.READ_ACCESS_LEVEL &lt;= :readAccessLevel
+                    inner join WIKI_DOCUMENT doc0 on doc0.NODE_ID=doc1.NODE_ID
+                    and (doc0.HEADER_MACROS like '%forumPosting%' or doc0.HEADER_MACROS like '%forumStickyPosting%')
+                        left outer join WIKI_NODE c0 on c0.PARENT_NODE_ID = doc0.NODE_ID
         where
             dir0.READ_ACCESS_LEVEL &lt;= :readAccessLevel and dir0.PARENT_NODE_ID = :parentDirId
-        group by
-            dir0.NODE_ID
+        group by dir0.NODE_ID
     </sql-query>
 
     <sql-query name="forumLastTopic">
@@ -142,26 +145,27 @@
             c0.FROM_USER_NAME as FROM_USER_NAME,
             c0.FROM_USER_EMAIL as FROM_USER_EMAIL,
             c0.FROM_USER_HOMEPAGE as FROM_USER_HOMEPAGE,
-            c0.USE_WIKI_TEXT as USE_WIKI_TEXT,
-            c0.NS_LEFT as NS_LEFT,
-            c0.NS_RIGHT as NS_RIGHT,
-            c0.NS_THREAD as NS_THREAD
+            c0.USE_WIKI_TEXT as USE_WIKI_TEXT
+        from
+            WIKI_NODE c1 inner join WIKI_COMMENT c0 on c1.NODE_ID = c0.NODE_ID
+        where
+            c1.NODE_ID in
+            (
+            select
+                c2.NODE_ID
             from
-                    WIKI_NODE doc0
-                        inner join WIKI_DOCUMENT doc1 on doc0.NODE_ID = doc1.NODE_ID
-                                and (doc1.HEADER_MACROS like '%forumPosting%' or doc1.HEADER_MACROS like '%forumStickyPosting%')
-                            inner join WIKI_DOCUMENT_LAST_COMMENT lc on lc.WIKI_DOCUMENT_ID = doc1.NODE_ID,
-                    WIKI_NODE c1
-                        inner join WIKI_COMMENT c0 on c0.NODE_ID = c1.NODE_ID
+                WIKI_NODE doc0
+                    inner join WIKI_DOCUMENT doc1 on doc0.NODE_ID = doc1.NODE_ID
+                    and (doc1.HEADER_MACROS like '%forumPosting%' or doc1.HEADER_MACROS like '%forumStickyPosting%')
+                        left outer join WIKI_NODE c2 on c2.PARENT_NODE_ID = doc1.NODE_ID
             where
                 doc0.PARENT_NODE_ID = :parentDirId
-              and
+            and
                 doc0.READ_ACCESS_LEVEL &lt;= :readAccessLevel
-             and
-                c0.NODE_ID = lc.LAST_COMMENT_ID
-             order by
-                lc.LAST_COMMENT_CREATED_ON desc
-             limit 1
+            )
+        order by
+            c1.CREATED_ON desc
+        limit 1
     </sql-query>
 
     <query name="forumUnreadTopics"><![CDATA[
@@ -181,25 +185,20 @@
         <return-scalar column="FORUM_ID" type="long"/>
         <![CDATA[
             select
-                distinct doc0.NODE_ID as UNREAD_TOPIC_ID, doc1.PARENT_NODE_ID as FORUM_ID
+                distinct doc0.NODE_ID as UNREAD_TOPIC_ID,
+                doc1.PARENT_NODE_ID as FORUM_ID
             from
-                WIKI_DIRECTORY dir0
-                    inner join WIKI_NODE dir1 on dir0.NODE_ID=dir1.NODE_ID,
-                WIKI_DOCUMENT doc0
-                        inner join WIKI_NODE doc1 on doc0.NODE_ID=doc1.NODE_ID
-                            inner join WIKI_NODE ct0 on ct0.PARENT_NODE_ID = doc1.NODE_ID
-                                inner join WIKI_COMMENT ct1 on ct0.NODE_ID = ct1.NODE_ID,
-                WIKI_COMMENT c0
-                    inner join WIKI_NODE c1 on c0.NODE_ID=c1.NODE_ID
+                WIKI_NODE dir1
+                inner join WIKI_NODE doc1 on doc1.PARENT_NODE_ID = dir1.NODE_ID
+                and doc1.READ_ACCESS_LEVEL <= :readAccessLevel
+                    inner join WIKI_DOCUMENT doc0 on doc0.NODE_ID=doc1.NODE_ID
+                    and (doc0.HEADER_MACROS like '%forumPosting%' or doc0.HEADER_MACROS like '%forumStickyPosting%')
+                        inner join WIKI_NODE c0 on c0.PARENT_NODE_ID = doc0.NODE_ID
+                        and c0.CREATED_ON > :lastLoginDate
             where
                 dir1.READ_ACCESS_LEVEL <= :readAccessLevel
-                and doc1.READ_ACCESS_LEVEL <= :readAccessLevel
-                and c1.READ_ACCESS_LEVEL <= :readAccessLevel
-                and dir1.PARENT_NODE_ID= :parentDirId
-                and doc1.PARENT_NODE_ID=dir1.NODE_ID
-                and (doc0.HEADER_MACROS like '%forumPosting%' or doc0.HEADER_MACROS like '%forumStickyPosting%')
-                and c0.NS_THREAD in (ct1.NS_THREAD)
-                and c1.CREATED_ON > :lastLoginDate
+            and
+                dir1.PARENT_NODE_ID= :parentDirId
         ]]>
     </sql-query>
 
@@ -219,21 +218,18 @@
         <return-scalar column="FORUM_ID" type="long"/>
         <![CDATA[
             select
-                distinct doc0.NODE_ID as UNREAD_TOPIC_ID, doc1.PARENT_NODE_ID as FORUM_ID
+                distinct doc0.NODE_ID as UNREAD_TOPIC_ID,
+                doc1.PARENT_NODE_ID as FORUM_ID
             from
-                WIKI_DOCUMENT doc0
-                        inner join WIKI_NODE doc1 on doc0.NODE_ID=doc1.NODE_ID
-                            inner join WIKI_NODE ct0 on ct0.PARENT_NODE_ID = doc1.NODE_ID
-                                inner join WIKI_COMMENT ct1 on ct0.NODE_ID = ct1.NODE_ID,
-                WIKI_COMMENT c0
-                    inner join WIKI_NODE c1 on c0.NODE_ID=c1.NODE_ID
+                WIKI_NODE doc1
+                    inner join WIKI_DOCUMENT doc0 on doc0.NODE_ID=doc1.NODE_ID
+                    and (doc0.HEADER_MACROS like '%forumPosting%' or doc0.HEADER_MACROS like '%forumStickyPosting%')
+                        inner join WIKI_NODE c0 on c0.PARENT_NODE_ID = doc0.NODE_ID
+                        and c0.CREATED_ON > :lastLoginDate
             where
                 doc1.READ_ACCESS_LEVEL <= :readAccessLevel
-                and c1.READ_ACCESS_LEVEL <= :readAccessLevel
-                and doc1.PARENT_NODE_ID= :parentDirId
-                and (doc0.HEADER_MACROS like '%forumPosting%' or doc0.HEADER_MACROS like '%forumStickyPosting%')
-                and c0.NS_THREAD in (ct1.NS_THREAD)
-                and c1.CREATED_ON > :lastLoginDate
+            and
+                doc1.PARENT_NODE_ID= :parentDirId
         ]]>
     </sql-query>
 
@@ -243,29 +239,38 @@
         and (t.headerMacrosString like '%forumPosting%' or t.headerMacrosString like '%forumStickyPosting%')
     </query>
 
+    <!--
+        Although we do not read the LAST_POST column, we need to project it so we can order by date. Note
+        that this is probably the most problematic of all the queries here, it is quite slow. I don't see
+        any way how to optimize this further without denormalization/data quality degradation. Also note
+        that the nested select is using a max(CREATED_ON) date comparison. This is the (much slower!)
+        alternative:
+
+         cl0.NODE_ID = (
+             select lc.NODE_ID from WIKI_NODE lc where lc.PARENT_NODE_ID = doc0.NODE_ID order by lc.CREATED_ON desc limit 1
+         )
+    -->
     <sql-query name="forumTopicsList">
         <return-scalar column="NODE_ID" type="long"/>
         <return-scalar column="STICKY" type="integer"/>
         <return-scalar column="HAS_REPLIES" type="boolean"/>
         <return-scalar column="LAST_POST" type="timestamp"/>
         <![CDATA[
-        select distinct
-            d0.NODE_ID as NODE_ID,
-            case when (d2.HEADER_MACROS like '%forumStickyPosting%') then 1 else 0 end as STICKY,
-            case when c0.CREATED_ON is null then false else true end as HAS_REPLIES,
-            case when c0.CREATED_ON is null then d0.CREATED_ON else c0.CREATED_ON end as LAST_POST
-        from
-            WIKI_NODE d0
-                inner join WIKI_DOCUMENT d2 on d0.NODE_ID = d2.NODE_ID and (d2.HEADER_MACROS like '%forumPosting%' or d2.HEADER_MACROS like '%forumStickyPosting%')
-             left outer join WIKI_NODE c0
-             on c0.NODE_ID = (
-                 select lc.LAST_COMMENT_ID from WIKI_DOCUMENT_LAST_COMMENT lc
-                 where lc.WIKI_DOCUMENT_ID = d2.NODE_ID
-             )
-        where
-            d0.READ_ACCESS_LEVEL <= :readAccessLevel and d0.PARENT_NODE_ID = :parentNodeId
-        order
-            by STICKY desc, LAST_POST desc
+            select distinct
+                d0.NODE_ID as NODE_ID,
+                case when (d2.HEADER_MACROS like '%forumStickyPosting%') then 1 else 0 end as STICKY,
+                case when c0.CREATED_ON is null then false else true end as HAS_REPLIES,
+                case when c0.CREATED_ON is null then d0.CREATED_ON else c0.CREATED_ON end as LAST_POST
+            from
+                WIKI_NODE d0
+                    inner join WIKI_DOCUMENT d2 on d0.NODE_ID = d2.NODE_ID
+                    and (d2.HEADER_MACROS like '%forumPosting%' or d2.HEADER_MACROS like '%forumStickyPosting%')
+                        left outer join WIKI_NODE c0 on c0.CREATED_ON =
+                        (select max(lc.CREATED_ON) from WIKI_NODE lc where lc.PARENT_NODE_ID = d2.NODE_ID)
+            where
+                d0.READ_ACCESS_LEVEL <= :readAccessLevel and d0.PARENT_NODE_ID = :parentNodeId
+            order
+                by STICKY desc, LAST_POST desc
         ]]>
     </sql-query>
 
@@ -320,64 +325,52 @@
         <return-scalar column="TOPIC_ID" type="long"/>
         <return-scalar column="NUM_OF_REPLIES" type="long"/>
         <![CDATA[
-        select
-            cl1.NODE_ID as NODE_ID,
-            cl1.OBJ_VERSION as OBJ_VERSION,
-            cl1.RATING as RATING,
-            cl1.AREA_NR as AREA_NR,
-            cl1.NAME as NAME,
-            cl1.WIKINAME as WIKINAME,
-            cl1.MESSAGE_ID as MESSAGE_ID,
-            cl1.CREATED_ON as CREATED_ON,
-            cl1.CREATED_BY_USER_ID as CREATED_BY_USER_ID,
-            cl1.LAST_MODIFIED_ON as LAST_MODIFIED_ON,
-            cl1.LAST_MODIFIED_BY_USER_ID as LAST_MODIFIED_BY_USER_ID,
-            cl1.WRITE_ACCESS_LEVEL as WRITE_ACCESS_LEVEL,
-            cl1.READ_ACCESS_LEVEL as READ_ACCESS_LEVEL,
-            cl1.WRITE_PROTECTED as WRITE_PROTECTED,
-            cl1.PARENT_NODE_ID as PARENT_NODE_ID,
+            select
+                cl1.NODE_ID as NODE_ID,
+                cl1.OBJ_VERSION as OBJ_VERSION,
+                cl1.RATING as RATING,
+                cl1.AREA_NR as AREA_NR,
+                cl1.NAME as NAME,
+                cl1.WIKINAME as WIKINAME,
+                cl1.MESSAGE_ID as MESSAGE_ID,
+                cl1.CREATED_ON as CREATED_ON,
+                cl1.CREATED_BY_USER_ID as CREATED_BY_USER_ID,
+                cl1.LAST_MODIFIED_ON as LAST_MODIFIED_ON,
+                cl1.LAST_MODIFIED_BY_USER_ID as LAST_MODIFIED_BY_USER_ID,
+                cl1.WRITE_ACCESS_LEVEL as WRITE_ACCESS_LEVEL,
+                cl1.READ_ACCESS_LEVEL as READ_ACCESS_LEVEL,
+                cl1.WRITE_PROTECTED as WRITE_PROTECTED,
+                cl1.PARENT_NODE_ID as PARENT_NODE_ID,
+                cl0.SUBJECT as SUBJECT,
+                cl0.FROM_USER_NAME as FROM_USER_NAME,
+                cl0.FROM_USER_EMAIL as FROM_USER_EMAIL,
+                cl0.FROM_USER_HOMEPAGE as FROM_USER_HOMEPAGE,
+                cl0.USE_WIKI_TEXT as USE_WIKI_TEXT,
+                u.USER_ID, u.ACTIVATED, u.ACTIVATION_CODE, u.CREATED_ON, u.EMAIL, u.FIRSTNAME, u.LAST_LOGIN_ON,
+                u.LASTNAME, u.MEMBER_HOME_WIKI_DIRECTORY_ID, u.PASSWORDHASH, u.USER_PROFILE_ID, u.USERNAME, u.OBJ_VERSION,
+                doc0.NODE_ID as TOPIC_ID,
+                count(distinct c0.NODE_ID) as NUM_OF_REPLIES
+            from
+                WIKI_DOCUMENT doc0
+                    left outer join WIKI_NODE c0 on c0.PARENT_NODE_ID = doc0.NODE_ID,
+                WIKI_COMMENT cl0
+                    inner join WIKI_NODE cl1 on cl0.NODE_ID = cl1.NODE_ID
+                        inner join USERS u on cl1.CREATED_BY_USER_ID = u.USER_ID
+            where
+               doc0.NODE_ID in (:topicIds)
+               and cl0.NODE_ID = (
+                 select lc.NODE_ID from WIKI_NODE lc where lc.PARENT_NODE_ID = doc0.NODE_ID order by lc.CREATED_ON desc limit 1
+              )
+            group by
+                cl1.NODE_ID, cl1.OBJ_VERSION, cl1.RATING, cl1.AREA_NR, cl1.NAME, cl1.WIKINAME, cl1.MESSAGE_ID, cl1.CREATED_ON, cl1.CREATED_BY_USER_ID, cl1.LAST_MODIFIED_ON,
+                cl1.LAST_MODIFIED_BY_USER_ID, cl1.WRITE_ACCESS_LEVEL, cl1.READ_ACCESS_LEVEL, cl1.WRITE_PROTECTED, cl1.PARENT_NODE_ID,
+                cl0.SUBJECT, cl0.FROM_USER_NAME, cl0.FROM_USER_EMAIL, cl0.FROM_USER_HOMEPAGE, cl0.USE_WIKI_TEXT,
+                u.USER_ID, u.ACTIVATED, u.ACTIVATION_CODE, u.CREATED_ON, u.EMAIL, u.FIRSTNAME, u.LAST_LOGIN_ON,
+                u.LASTNAME, u.MEMBER_HOME_WIKI_DIRECTORY_ID, u.PASSWORDHASH, u.USER_PROFILE_ID, u.USERNAME, u.OBJ_VERSION,
+                doc0.NODE_ID
+        ]]>
+    </sql-query>
 
-            cl0.SUBJECT as SUBJECT,
-            cl0.FROM_USER_NAME as FROM_USER_NAME,
-            cl0.FROM_USER_EMAIL as FROM_USER_EMAIL,
-            cl0.FROM_USER_HOMEPAGE as FROM_USER_HOMEPAGE,
-            cl0.USE_WIKI_TEXT as USE_WIKI_TEXT,
-            cl0.NS_LEFT as NS_LEFT,
-            cl0.NS_RIGHT as NS_RIGHT,
-            cl0.NS_THREAD as NS_THREAD,
-
-            u.USER_ID, u.ACTIVATED, u.ACTIVATION_CODE, u.CREATED_ON, u.EMAIL, u.FIRSTNAME, u.LAST_LOGIN_ON,
-            u.LASTNAME, u.MEMBER_HOME_WIKI_DIRECTORY_ID, u.PASSWORDHASH, u.USER_PROFILE_ID, u.USERNAME, u.OBJ_VERSION,
-
-            doc0.NODE_ID as TOPIC_ID,
-            count(c0.NODE_ID) as NUM_OF_REPLIES
-        from
-            WIKI_DOCUMENT doc0
-                inner join WIKI_NODE ct0 on ct0.PARENT_NODE_ID = doc0.NODE_ID
-                    inner join WIKI_COMMENT ct1 on ct0.NODE_ID = ct1.NODE_ID,
-            WIKI_COMMENT c0,
-            WIKI_COMMENT cl0
-                inner join WIKI_NODE cl1 on cl0.NODE_ID = cl1.NODE_ID
-                    inner join USERS u on cl1.CREATED_BY_USER_ID = u.USER_ID
-        where
-           doc0.NODE_ID in (:topicIds)
-           and c0.NS_THREAD in (ct1.NS_THREAD)
-           and cl0.NODE_ID = (
-             select lc.LAST_COMMENT_ID
-                from WIKI_DOCUMENT_LAST_COMMENT lc
-                where lc.WIKI_DOCUMENT_ID = doc0.NODE_ID
-          )
-        group by
-            cl1.NODE_ID, cl1.OBJ_VERSION, cl1.RATING, cl1.AREA_NR, cl1.NAME, cl1.WIKINAME, cl1.MESSAGE_ID, cl1.CREATED_ON, cl1.CREATED_BY_USER_ID, cl1.LAST_MODIFIED_ON,
-            cl1.LAST_MODIFIED_BY_USER_ID, cl1.WRITE_ACCESS_LEVEL, cl1.READ_ACCESS_LEVEL, cl1.WRITE_PROTECTED, cl1.PARENT_NODE_ID,
-            cl0.SUBJECT, cl0.FROM_USER_NAME, cl0.FROM_USER_EMAIL, cl0.FROM_USER_HOMEPAGE, cl0.USE_WIKI_TEXT, cl0.NS_LEFT, cl0.NS_RIGHT, cl0.NS_THREAD,
-
-            u.USER_ID, u.ACTIVATED, u.ACTIVATION_CODE, u.CREATED_ON, u.EMAIL, u.FIRSTNAME, u.LAST_LOGIN_ON,
-            u.LASTNAME, u.MEMBER_HOME_WIKI_DIRECTORY_ID, u.PASSWORDHASH, u.USER_PROFILE_ID, u.USERNAME, u.OBJ_VERSION,
-
-            doc0.NODE_ID
-    ]]></sql-query>
-
     <sql-query name="forumPostersAndRatingPoints">
         <return class="org.jboss.seam.wiki.core.model.User"/>
         <return-scalar column="RATING_POINTS" type="long"/>
@@ -388,30 +381,26 @@
             sum(ur.RATING) as RATING_POINTS
         from
            (select distinct
-                user2.*,
-                com2.NODE_ID,
-                com2.RATING
+                u0.*,
+                c0.NODE_ID,
+                c0.RATING
             from
-                WIKI_DOCUMENT doc0
-                  inner join WIKI_NODE doc1 on doc0.NODE_ID=doc1.NODE_ID
-                      inner join WIKI_NODE ct0 on ct0.PARENT_NODE_ID = doc1.NODE_ID
-                          inner join WIKI_COMMENT ct1 on ct0.NODE_ID = ct1.NODE_ID,
-                WIKI_COMMENT com1
-                 inner join WIKI_NODE com2 on com1.NODE_ID=com2.NODE_ID
-                  inner join USERS user2 on com2.CREATED_BY_USER_ID=user2.USER_ID
-                   inner join USER_ROLE roles1 on user2.USER_ID=roles1.USER_ID
-                    inner join ROLES roles2 on roles1.ROLE_ID=roles2.ROLE_ID
+                WIKI_NODE doc0
+                 inner join WIKI_NODE c0 on c0.PARENT_NODE_ID = doc0.NODE_ID
+                  inner join USERS u0 on c0.CREATED_BY_USER_ID = u0.USER_ID
+                   inner join USER_ROLE r0 on u0.USER_ID = r0.USER_ID
+                    inner join ROLES r1 on r0.ROLE_ID = r1.ROLE_ID
             where
-                doc1.PARENT_NODE_ID=:parentDirId
-                and com1.NS_THREAD in (ct1.NS_THREAD)
-                and (roles2.NAME not in (:ignoreUserInRoles))
-                and com2.RATING<>0
+                doc0.PARENT_NODE_ID = :parentDirId
+                and (r1.NAME not in (:ignoreUserInRoles))
+                and c0.RATING<>0
             ) as ur
         group by
             ur.USER_ID, ur.ACTIVATED, ur.ACTIVATION_CODE, ur.CREATED_ON, ur.EMAIL, ur.FIRSTNAME, ur.LAST_LOGIN_ON,
             ur.LASTNAME, ur.MEMBER_HOME_WIKI_DIRECTORY_ID, ur.PASSWORDHASH, ur.USER_PROFILE_ID, ur.USERNAME,
             ur.OBJ_VERSION
         order by sum(ur.RATING) desc
-    ]]></sql-query>
+        ]]>
+    </sql-query>
 
 </hibernate-mapping>
\ No newline at end of file

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumReplyFeedEntryManager.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumReplyFeedEntryManager.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumReplyFeedEntryManager.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -8,7 +8,7 @@
 public class ForumReplyFeedEntryManager extends WikiCommentFeedEntryManager {
 
     public String getFeedEntryTitle(WikiComment comment) {
-        return "[" + comment.getParentDocument().getParent().getName() + "] " + comment.getSubject();
+        return "[" + comment.getParent().getParent().getName() + "] " + comment.getSubject();
     }
 
 }

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ReplyHome.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ReplyHome.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ReplyHome.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -63,7 +63,7 @@
         // Find all posters of the thread
         Set<User> notifyPosters = new HashSet();
         getLog().debug("finding all posters of current topic thread");
-        List<WikiComment> comments = getWikiNodeDAO().findWikiCommentsFlat(documentHome.getInstance(), true);
+        List<WikiComment> comments = getWikiNodeDAO().findWikiComments(documentHome.getInstance(), true);
         for (WikiComment comment : comments) {
 
             Long commentPosterId = comment.getCreatedBy().getId();

Modified: branches/community/Seam_2_2/examples/wiki/src/test/AllTests.tng.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/AllTests.tng.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/AllTests.tng.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -5,7 +5,7 @@
     <parameter name="database" value="HSQL"/>
 
     <!-- MySQL also requires changes to persistence-test.xml and wiki-test-ds.xml
-    <parameter name="database" value="mysql"/>
+    <parameter name="database" value="MYSQL"/>
     -->
 
     <parameter name="datasourceJndiName" value="java:/wikiTestDatasource"/>
@@ -47,12 +47,6 @@
         </packages>
     </test>
 
-    <test name="NestedSet">
-        <packages>
-            <package name="org.jboss.seam.wiki.test.nestedset"/>
-        </packages>
-    </test>
-
     <test name="User">
         <packages>
             <package name="org.jboss.seam.wiki.test.user"/>

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/DocumentFeedEntries.dbunit.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/DocumentFeedEntries.dbunit.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/DocumentFeedEntries.dbunit.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -2,6 +2,7 @@
 
 <dataset>
 
+    <!-- These PUBLISED_ON/UPDATED_ON dates are a timebomb because we expire old stuff, but I'm too lazy to fix it now... -->
     <FEEDENTRY
         FEEDENTRY_TYPE="WIKI_DOCUMENT" WIKI_COMMENT_ID="[NULL]" WIKI_DOCUMENT_ID="9"
         FEEDENTRY_ID="1" AUTHOR="System Administrator"

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/FAQData.dbunit.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/FAQData.dbunit.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/FAQData.dbunit.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -9,8 +9,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="1000" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="300" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="301"
-        NS_LEFT="300" NS_RIGHT="311" NS_THREAD="1"/>
+        NODE_ID="300" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="301"/>
     <WIKI_MENU_ITEM DIRECTORY_ID="300" DISPLAY_POSITION="4"/>
 
     <!-- FAQs directory start page, faq browser plugin -->
@@ -39,8 +38,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="302" DESCRIPTION="Questions for new users and evaluators of Seam." DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="301" NS_RIGHT="304" NS_THREAD="1"/>
+        NODE_ID="302" DESCRIPTION="Questions for new users and evaluators of Seam." DEFAULT_FILE_ID="[NULL]"/>
 
         <!-- Second FAQ category -->
         <WIKI_NODE
@@ -49,8 +47,7 @@
             CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
             READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
         <WIKI_DIRECTORY
-            NODE_ID="303" DESCRIPTION="Questions about Seams distribution and usage license." DEFAULT_FILE_ID="[NULL]"
-            NS_LEFT="302" NS_RIGHT="303" NS_THREAD="1"/>
+            NODE_ID="303" DESCRIPTION="Questions about Seams distribution and usage license." DEFAULT_FILE_ID="[NULL]"/>
 
     <!-- Third FAQ category -->
     <WIKI_NODE
@@ -59,8 +56,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="304" DESCRIPTION="Seam core technology questions." DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="305" NS_RIGHT="310" NS_THREAD="1"/>
+        NODE_ID="304" DESCRIPTION="Seam core technology questions." DEFAULT_FILE_ID="[NULL]"/>
 
         <!-- Fourth FAQ category -->
         <WIKI_NODE
@@ -69,8 +65,7 @@
             CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
             READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
         <WIKI_DIRECTORY
-            NODE_ID="305" DESCRIPTION="Questions about the JSP-, JSF-, and Unified-EL." DEFAULT_FILE_ID="[NULL]"
-            NS_LEFT="306" NS_RIGHT="307" NS_THREAD="1"/>
+            NODE_ID="305" DESCRIPTION="Questions about the JSP-, JSF-, and Unified-EL." DEFAULT_FILE_ID="[NULL]"/>
 
         <!-- Fifth FAQ category -->
         <WIKI_NODE
@@ -79,8 +74,7 @@
             CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
             READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
         <WIKI_DIRECTORY
-            NODE_ID="306" DESCRIPTION="Tips and tricks about creating Seam components." DEFAULT_FILE_ID="[NULL]"
-            NS_LEFT="308" NS_RIGHT="309" NS_THREAD="1"/>
+            NODE_ID="306" DESCRIPTION="Tips and tricks about creating Seam components." DEFAULT_FILE_ID="[NULL]"/>
 
 
     <!-- FAQ questions -->
@@ -131,16 +125,6 @@
         NODE_ID="309"
         SUBJECT="No, you don't."
         CONTENT="But you can send us as much money as you want. Or, if you are not happy with our free software and support, we can send you some money to reimburse your download expenses and the time it took you to read this." USE_WIKI_TEXT="true"
-        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"
-        NS_LEFT="1" NS_RIGHT="2" NS_THREAD="309"/>
+        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"/>
 
-    <WIKI_DOCUMENT_LAST_COMMENT
-        WIKI_DOCUMENT_ID="308"
-        LAST_COMMENT_CREATED_ON="2006-09-23 13:45:00"
-        LAST_COMMENT_ID="309"/>
-
-    <WIKI_DOCUMENT_COUNT_COMMENT
-        WIKI_DOCUMENT_ID="308"
-        COMMENT_COUNT="1"/>
-
 </dataset>
\ No newline at end of file

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/ForumData.dbunit.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/ForumData.dbunit.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/ForumData.dbunit.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -9,8 +9,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="1000" WRITE_PROTECTED="true"/>
     <WIKI_DIRECTORY
-        NODE_ID="100" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="101"
-        NS_LEFT="100" NS_RIGHT="105" NS_THREAD="1"/>
+        NODE_ID="100" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="101"/>
     <FEED
         FEED_ID = "100"
         FEED_TYPE="INTERNAL"
@@ -47,8 +46,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="true"/>
     <WIKI_DIRECTORY
-        NODE_ID="102" DESCRIPTION="Seam usage discussions go here." DEFAULT_FILE_ID="103"
-        NS_LEFT="101" NS_RIGHT="102" NS_THREAD="1"/>
+        NODE_ID="102" DESCRIPTION="Seam usage discussions go here." DEFAULT_FILE_ID="103"/>
     <FEED
         FEED_ID = "101"
         FEED_TYPE="INTERNAL"
@@ -76,8 +74,8 @@
         CONTENT_MACROS="forumTopics"
         FOOTER_MACROS="[NULL]"
         NAME_AS_TITLE="true" ENABLE_COMMENTS="false" ENABLE_COMMENT_FORM="false" ENABLE_COMMENTS_ON_FEEDS="false"/>
-    
 
+
     <!-- First posting -->
     <WIKI_NODE
         NODE_ID="104" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="102"
@@ -107,12 +105,11 @@
         SUBJECT="This is a first test comment"
         CONTENT="Collaboration-oriented websites require a human-friendly markup language for easy entry of formatted text in forum posts, wiki pages, blogs, comments, etc. Seam provides the |&lt;s:formattedText/>| control for display of formatted text that conforms to the Seam Text language. Seam Text is implemented using an ANTLR-based parser. You do not need to know anything about ANTLR to use it, however."
         USE_WIKI_TEXT="true"
-        FROM_USER_NAME="Regular Member" FROM_USER_EMAIL="[NULL]" FROM_USER_HOMEPAGE="[NULL]"
-        NS_LEFT="1" NS_RIGHT="4" NS_THREAD="105"/>
+        FROM_USER_NAME="Regular Member" FROM_USER_EMAIL="[NULL]" FROM_USER_HOMEPAGE="[NULL]"/>
 
     <!-- Reply to first posting -->
     <WIKI_NODE
-        NODE_ID="106" OBJ_VERSION="0" RATING="5" PARENT_NODE_ID="105"
+        NODE_ID="106" OBJ_VERSION="0" RATING="5" PARENT_NODE_ID="104"
         AREA_NR="100" NAME="The First Posting.Comment119672933218233" WIKINAME="TheFirstPostingComment119672933218233"
         CREATED_ON="2007-04-10 10:00:00" CREATED_BY_USER_ID="3" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="1000" WRITE_PROTECTED="false"/>
@@ -121,18 +118,8 @@
         SUBJECT="The first posting"
         CONTENT="Collaboration-oriented websites require a human-friendly markup language for easy entry of formatted text in forum posts, wiki pages, blogs, comments, etc. Seam provides the |&lt;s:formattedText/>| control for display of formatted text that conforms to the Seam Text language. &#xA;&#xA;Seam Text is implemented using an ANTLR-based parser. You do not need to know anything about ANTLR to use it, however."
         USE_WIKI_TEXT="true"
-        FROM_USER_NAME="Regular Member" FROM_USER_EMAIL="[NULL]" FROM_USER_HOMEPAGE="[NULL]"
-        NS_LEFT="2" NS_RIGHT="3" NS_THREAD="105"/>
+        FROM_USER_NAME="Regular Member" FROM_USER_EMAIL="[NULL]" FROM_USER_HOMEPAGE="[NULL]"/>
 
-    <WIKI_DOCUMENT_LAST_COMMENT
-        WIKI_DOCUMENT_ID="104"
-        LAST_COMMENT_CREATED_ON="2007-04-10 10:00:00"
-        LAST_COMMENT_ID="106"/>
-
-    <WIKI_DOCUMENT_COUNT_COMMENT
-        WIKI_DOCUMENT_ID="104"
-        COMMENT_COUNT="2"/>
-
     <!-- Second (sticky) posting -->
     <WIKI_NODE
         NODE_ID="107" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="102"
@@ -162,18 +149,8 @@
         SUBJECT="This is a third test comment"
         CONTENT="Collaboration-oriented websites require a human-friendly markup language for easy entry of formatted text in forum posts, wiki pages, blogs, comments, etc. Seam provides the |&lt;s:formattedText/>| control for display of formatted text that conforms to the Seam Text language. Seam Text is implemented using an ANTLR-based parser. You do not need to know anything about ANTLR to use it, however."
         USE_WIKI_TEXT="true"
-        FROM_USER_NAME="Regular Member" FROM_USER_EMAIL="[NULL]" FROM_USER_HOMEPAGE="[NULL]"
-        NS_LEFT="1" NS_RIGHT="2" NS_THREAD="108"/>
+        FROM_USER_NAME="Regular Member" FROM_USER_EMAIL="[NULL]" FROM_USER_HOMEPAGE="[NULL]"/>
 
-    <WIKI_DOCUMENT_LAST_COMMENT
-        WIKI_DOCUMENT_ID="107"
-        LAST_COMMENT_CREATED_ON="2007-04-04 08:01:00"
-        LAST_COMMENT_ID="108"/>
-
-    <WIKI_DOCUMENT_COUNT_COMMENT
-        WIKI_DOCUMENT_ID="107"
-        COMMENT_COUNT="1"/>
-
     <!-- Third posting
     <WIKI_NODE
         NODE_ID="112" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="102"
@@ -201,8 +178,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="1" WRITE_ACCESS_LEVEL="1" WRITE_PROTECTED="true"/>
     <WIKI_DIRECTORY
-        NODE_ID="109" DESCRIPTION="Only for Seam developers or people interested in Seam development." DEFAULT_FILE_ID="110"
-        NS_LEFT="103" NS_RIGHT="104" NS_THREAD="1"/>
+        NODE_ID="109" DESCRIPTION="Only for Seam developers or people interested in Seam development." DEFAULT_FILE_ID="110"/>
     <WIKI_MENU_ITEM DIRECTORY_ID="109" DISPLAY_POSITION="1"/>
     <FEED
         FEED_ID = "102"
@@ -249,7 +225,7 @@
         FOOTER_MACROS="forumReplies"
         NAME_AS_TITLE="false" ENABLE_COMMENTS="true" ENABLE_COMMENT_FORM="true" ENABLE_COMMENTS_ON_FEEDS="true"/>
 
-    
 
+
 </dataset>
 

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/HelpDocuments.dbunit.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/HelpDocuments.dbunit.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/HelpDocuments.dbunit.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -8,8 +8,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="1000" WRITE_PROTECTED="true"/>
     <WIKI_DIRECTORY
-        NODE_ID="20" DESCRIPTION="Help documents" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="20" NS_RIGHT="29" NS_THREAD="1"/>
+        NODE_ID="20" DESCRIPTION="Help documents" DEFAULT_FILE_ID="[NULL]"/>
 
     <WIKI_NODE
         NODE_ID="21" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="20"
@@ -17,8 +16,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="1000" WRITE_PROTECTED="true"/>
     <WIKI_DIRECTORY
-        NODE_ID="21" DESCRIPTION="Creating and editing wiki documents" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="21" NS_RIGHT="22" NS_THREAD="1"/>
+        NODE_ID="21" DESCRIPTION="Creating and editing wiki documents" DEFAULT_FILE_ID="[NULL]"/>
 
 
     <WIKI_NODE
@@ -42,8 +40,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="1000" WRITE_PROTECTED="true"/>
     <WIKI_DIRECTORY
-        NODE_ID="23" DESCRIPTION="The plugin system" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="23" NS_RIGHT="28" NS_THREAD="1"/>
+        NODE_ID="23" DESCRIPTION="The plugin system" DEFAULT_FILE_ID="[NULL]"/>
 
     <WIKI_NODE
         NODE_ID="24" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="23"
@@ -51,8 +48,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="1000" WRITE_PROTECTED="true"/>
     <WIKI_DIRECTORY
-        NODE_ID="24" DESCRIPTION="How to use plugins" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="24" NS_RIGHT="25" NS_THREAD="1"/>
+        NODE_ID="24" DESCRIPTION="How to use plugins" DEFAULT_FILE_ID="[NULL]"/>
 
     <WIKI_NODE
         NODE_ID="25" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="23"
@@ -60,8 +56,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="1000" WRITE_PROTECTED="true"/>
     <WIKI_DIRECTORY
-        NODE_ID="25"  DESCRIPTION="How to write plugins" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="26" NS_RIGHT="27" NS_THREAD="1"/>
+        NODE_ID="25"  DESCRIPTION="How to write plugins" DEFAULT_FILE_ID="[NULL]"/>
 
 
 </dataset>

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/KnowledgeBase.dbunit.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/KnowledgeBase.dbunit.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/KnowledgeBase.dbunit.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -8,8 +8,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="200" DESCRIPTION="Seam Documentation" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="200" NS_RIGHT="211" NS_THREAD="1"/>
+        NODE_ID="200" DESCRIPTION="Seam Documentation" DEFAULT_FILE_ID="[NULL]"/>
     <WIKI_MENU_ITEM DIRECTORY_ID="200" DISPLAY_POSITION="3"/>
 
     <WIKI_NODE
@@ -18,8 +17,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="201" DESCRIPTION="Seam Knowledge Base" DEFAULT_FILE_ID="202"
-        NS_LEFT="201" NS_RIGHT="210" NS_THREAD="1"/>
+        NODE_ID="201" DESCRIPTION="Seam Knowledge Base" DEFAULT_FILE_ID="202"/>
     <WIKI_MENU_ITEM DIRECTORY_ID="201" DISPLAY_POSITION="0"/>
 
     <WIKI_NODE
@@ -39,12 +37,11 @@
 
     <WIKI_NODE
         NODE_ID="203" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="201"
-        AREA_NR="200" NAME="FAQs" WIKINAME="FAQs"
+        AREA_NR="200" NAME="Some Stuff" WIKINAME="SomeStuff"
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="203" DESCRIPTION="Seam frequently asked questions" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="202" NS_RIGHT="203" NS_THREAD="1"/>
+        NODE_ID="203" DESCRIPTION="Some Random Stuff" DEFAULT_FILE_ID="[NULL]"/>
     <WIKI_MENU_ITEM DIRECTORY_ID="203" DISPLAY_POSITION="0"/>
 
     <WIKI_NODE
@@ -53,8 +50,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="204" DESCRIPTION="Installing Seam and setting up Seam projects" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="204" NS_RIGHT="205" NS_THREAD="1"/>
+        NODE_ID="204" DESCRIPTION="Installing Seam and setting up Seam projects" DEFAULT_FILE_ID="[NULL]"/>
     <WIKI_MENU_ITEM DIRECTORY_ID="204" DISPLAY_POSITION="1"/>
 
     <WIKI_NODE
@@ -63,8 +59,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="205" DESCRIPTION="Designing and creating Seam components and services" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="206" NS_RIGHT="207" NS_THREAD="1"/>
+        NODE_ID="205" DESCRIPTION="Designing and creating Seam components and services" DEFAULT_FILE_ID="[NULL]"/>
     <WIKI_MENU_ITEM DIRECTORY_ID="205" DISPLAY_POSITION="2"/>
 
     <WIKI_NODE
@@ -73,8 +68,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="206" DESCRIPTION="User interfaces and presentation layer" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="208" NS_RIGHT="209" NS_THREAD="1"/>
+        NODE_ID="206" DESCRIPTION="User interfaces and presentation layer" DEFAULT_FILE_ID="[NULL]"/>
     <WIKI_MENU_ITEM DIRECTORY_ID="206" DISPLAY_POSITION="3"/>
 
 

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -34,9 +34,8 @@
     <PREFERENCE PREF_ID = "64" OBJ_VERSION = "0" USER_ID = "[NULL]" ENTITY_NAME = "UserManagement" PROPERTY_NAME = "createHomeAfterUserActivation" STRING_VALUE = "[NULL]" LONG_VALUE = "[NULL]" BOOLEAN_VALUE = "false"/>
     <PREFERENCE PREF_ID = "65" OBJ_VERSION = "0" USER_ID = "[NULL]" ENTITY_NAME = "UserManagement" PROPERTY_NAME = "homepageDefaultContent" STRING_VALUE = "This is your homepage, login to edit it." LONG_VALUE = "[NULL]" BOOLEAN_VALUE = "[NULL]"/>
 
-    <PREFERENCE PREF_ID = "70" OBJ_VERSION = "0" USER_ID = "[NULL]" ENTITY_NAME = "Comments" PROPERTY_NAME = "listAscending" STRING_VALUE = "[NULL]" LONG_VALUE = "[NULL]" BOOLEAN_VALUE = "false"/>
+    <PREFERENCE PREF_ID = "70" OBJ_VERSION = "0" USER_ID = "[NULL]" ENTITY_NAME = "Comments" PROPERTY_NAME = "listAscending" STRING_VALUE = "[NULL]" LONG_VALUE = "[NULL]" BOOLEAN_VALUE = "true"/>
     <PREFERENCE PREF_ID = "71" OBJ_VERSION = "0" USER_ID = "[NULL]" ENTITY_NAME = "Comments" PROPERTY_NAME = "enableByDefault" STRING_VALUE = "[NULL]" LONG_VALUE = "[NULL]" BOOLEAN_VALUE = "true"/>
-    <PREFERENCE PREF_ID = "72" OBJ_VERSION = "0" USER_ID = "[NULL]" ENTITY_NAME = "Comments" PROPERTY_NAME = "threaded" STRING_VALUE = "[NULL]" LONG_VALUE = "[NULL]" BOOLEAN_VALUE = "true"/>
 
     <!-- PLUGINS -->
 
@@ -185,8 +184,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="true"/>
     <WIKI_DIRECTORY
-        NODE_ID="1" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="1" NS_RIGHT="999" NS_THREAD="1"/>
+        NODE_ID="1" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="[NULL]"/>
 
     <WIKI_NODE
         NODE_ID="2" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="1"
@@ -194,8 +192,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="2" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="2" NS_RIGHT="3" NS_THREAD="1"/>
+        NODE_ID="2" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="[NULL]"/>
 
     <WIKI_NODE
         NODE_ID="3" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="1"
@@ -203,8 +200,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="3" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="6"
-        NS_LEFT="4" NS_RIGHT="9" NS_THREAD="1"/>
+        NODE_ID="3" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="6"/>
 
     <WIKI_NODE
         NODE_ID="4" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="3"
@@ -212,8 +208,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="4" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="5" NS_RIGHT="6" NS_THREAD="1"/>
+        NODE_ID="4" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="[NULL]"/>
 
     <WIKI_NODE
         NODE_ID="5" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="3"
@@ -221,8 +216,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_DIRECTORY
-        NODE_ID="5" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="7" NS_RIGHT="8" NS_THREAD="1"/>
+        NODE_ID="5" DESCRIPTION="[NULL]" DEFAULT_FILE_ID="[NULL]"/>
 
 
     <WIKI_MENU_ITEM DIRECTORY_ID="2" DISPLAY_POSITION="0"/>
@@ -301,41 +295,37 @@
         NODE_ID="10"
         SUBJECT="This is the first comment with a very long title so we can test the layout on different browsers"
         CONTENT="Comment One&#xA;&#xA;[=>BBB|Test Image]&#xA;&#xA;[=>BBB|Test Upload]" USE_WIKI_TEXT="true"
-        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"
-        NS_LEFT="1" NS_RIGHT="8" NS_THREAD="10"/>
+        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"/>
 
     <WIKI_NODE
-        NODE_ID="11" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="10"
+        NODE_ID="11" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="6"
         AREA_NR="3" NAME="One.Comment1196729823870" WIKINAME="OneComment1196729823870"
         CREATED_ON="2006-09-24 13:45:00" CREATED_BY_USER_ID="3" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_COMMENT
         NODE_ID="11"
         SUBJECT="Two" CONTENT="Comment Two" USE_WIKI_TEXT="true"
-        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"
-        NS_LEFT="2" NS_RIGHT="3" NS_THREAD="10"/>
+        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"/>
 
     <WIKI_NODE
-        NODE_ID="12" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="10"
+        NODE_ID="12" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="6"
         AREA_NR="3" NAME="One.Comment1196729874870" WIKINAME="OneComment.1196729874870"
         CREATED_ON="2006-09-25 13:46:00" CREATED_BY_USER_ID="2" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_COMMENT
         NODE_ID="12"
         SUBJECT="Three" CONTENT="Comment Three" USE_WIKI_TEXT="true"
-        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"
-        NS_LEFT="4" NS_RIGHT="7" NS_THREAD="10"/>
+        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"/>
 
     <WIKI_NODE
-        NODE_ID="13" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="12"
+        NODE_ID="13" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="6"
         AREA_NR="3" NAME="One.Comment11967293211870" WIKINAME="OneComment11967293211870"
         CREATED_ON="2006-09-26 13:47:00" CREATED_BY_USER_ID="2" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_COMMENT
         NODE_ID="13"
         SUBJECT="Four" CONTENT="Comment Four" USE_WIKI_TEXT="true"
-        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"
-        NS_LEFT="5" NS_RIGHT="6" NS_THREAD="10"/>
+        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"/>
 
     <WIKI_NODE
         NODE_ID="14" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="6"
@@ -345,29 +335,18 @@
     <WIKI_COMMENT
         NODE_ID="14"
         SUBJECT="Five" CONTENT="Comment Five" USE_WIKI_TEXT="true"
-        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"
-        NS_LEFT="1" NS_RIGHT="4" NS_THREAD="14"/>
+        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"/>
 
     <WIKI_NODE
-        NODE_ID="15" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="14"
+        NODE_ID="15" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="6"
         AREA_NR="3" NAME="One.Comment119672932118230" WIKINAME="OneComment119672932118230"
         CREATED_ON="2006-09-28 13:49:00" CREATED_BY_USER_ID="2" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="false"/>
     <WIKI_COMMENT
         NODE_ID="15"
         SUBJECT="Six" CONTENT="Comment Six" USE_WIKI_TEXT="true"
-        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"
-        NS_LEFT="2" NS_RIGHT="3" NS_THREAD="14"/>
+        FROM_USER_NAME="My Anonymous Name" FROM_USER_EMAIL="foo at bar.baz.somemoretext.tld" FROM_USER_HOMEPAGE="http://foo.bar.baz/foo/bar?foo=123"/>
 
-    <WIKI_DOCUMENT_LAST_COMMENT
-        WIKI_DOCUMENT_ID="6"
-        LAST_COMMENT_CREATED_ON="2006-09-28 13:49:00"
-        LAST_COMMENT_ID="15"/>
-
-    <WIKI_DOCUMENT_COUNT_COMMENT
-        WIKI_DOCUMENT_ID="6"
-        COMMENT_COUNT="6"/>
-
     <WIKI_DOCUMENT_HISTORY
         FILE_HISTORY_ID="1" FILE_ID="6" FILE_REVISION="0"
         NAME="One" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USERNAME="admin" content="Original text of Testdocument One"/>
@@ -408,8 +387,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="1000" WRITE_PROTECTED="true"/>
     <WIKI_DIRECTORY
-        NODE_ID="16" DESCRIPTION="Default member area" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="10" NS_RIGHT="11" NS_THREAD="1"/>
+        NODE_ID="16" DESCRIPTION="Default member area" DEFAULT_FILE_ID="[NULL]"/>
     
 
     <!-- Trash Area -->
@@ -419,8 +397,7 @@
         CREATED_ON="2006-09-23 13:45:00" CREATED_BY_USER_ID="1" LAST_MODIFIED_ON="[NULL]" LAST_MODIFIED_BY_USER_ID="[NULL]"
         READ_ACCESS_LEVEL="0" WRITE_ACCESS_LEVEL="0" WRITE_PROTECTED="true"/>
     <WIKI_DIRECTORY
-        NODE_ID="17" DESCRIPTION="Trash area" DEFAULT_FILE_ID="[NULL]"
-        NS_LEFT="12" NS_RIGHT="13" NS_THREAD="1"/>
+        NODE_ID="17" DESCRIPTION="Trash area" DEFAULT_FILE_ID="[NULL]"/>
 
     <!-- Clean these tables -->
     <FEEDENTRY/>

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayComments.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayComments.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayComments.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -35,7 +35,6 @@
                 assert doc != null;
                 assert doc.getId().equals(6l);
 
-
                 CommentQuery commentQuery = (CommentQuery)getInstance(CommentQuery.class);
                 assert commentQuery.getComments().size() == 6;
 

Deleted: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayMenu.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayMenu.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayMenu.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,62 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.seam.wiki.test.browse;
-
-import org.dbunit.operation.DatabaseOperation;
-import org.jboss.seam.wiki.core.action.Menu;
-import org.jboss.seam.wiki.core.nestedset.query.NestedSetNodeWrapper;
-import org.jboss.seam.wiki.core.model.WikiDirectory;
-import org.jboss.seam.mock.DBUnitSeamTest;
-import org.testng.annotations.Test;
-
-public class DisplayMenu extends DBUnitSeamTest {
-
-
-    protected void prepareDBUnitOperations() {
-        beforeTestOperations.add(
-                new DataSetOperation("org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml", DatabaseOperation.CLEAN_INSERT)
-        );
-    }
-
-    @Test
-    public void allMenuItems() throws Exception {
-
-        new NonFacesRequest("/wiki.xhtml") {
-
-            protected void renderResponse() throws Exception {
-
-                Menu menu = (Menu)getValue("#{menu}");
-
-                assert menu.getRoot().getAdditionalProjections().get("displayPosition") == null;
-                assert menu.getRoot().getWrappedNode().getId().equals(1l);
-                assert menu.getRoot().getLevel().equals(0l);
-                assert menu.getRoot().getWrappedChildren().size() == 2;
-                for (NestedSetNodeWrapper<WikiDirectory> child : menu.getRoot().getWrappedChildrenSorted()) {
-                    assert child.getLevel().equals(1l);
-                }
-
-            }
-
-        }.run();
-    }
-
-
-    /*
-        System.out.println("#### GOT MENU ROOT DISPLAY POSITION: " + menu.getRoot().getAdditionalProjections().get("displayPosition") + ": " + menu.getRoot());
-        System.out.println("############## ROOT HAS CHILDREN: " + menu.getRoot().getWrappedChildren().size());
-
-        for (NestedSetNodeWrapper<WikiDirectory> child : menu.getRoot().getWrappedChildrenSorted()) {
-
-            System.out.println("#### CHILD DISPLAY POSITION: " + child.getAdditionalProjections().get("displayPosition") + ": " + child);
-
-            for (NestedSetNodeWrapper<WikiDirectory> child2 : child.getWrappedChildrenSorted()) {
-                System.out.println("####### CHILD2 DISPLAY POSITION: " + child.getAdditionalProjections().get("displayPosition") + ": " + child2);
-
-            }
-        }
-     */
-}
\ No newline at end of file

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/dao/TagDAOTests.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/dao/TagDAOTests.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/dao/TagDAOTests.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -11,8 +11,11 @@
 import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
 import org.jboss.seam.wiki.core.model.WikiDirectory;
 import org.jboss.seam.wiki.core.model.DisplayTagCount;
+import org.jboss.seam.wiki.core.model.WikiFile;
+import org.jboss.seam.wiki.core.model.WikiNode;
 import org.jboss.seam.mock.DBUnitSeamTest;
 import org.testng.annotations.Test;
+import org.testng.Assert;
 
 import java.util.List;
 
@@ -65,4 +68,23 @@
         }.run();
     }
 
+    @Test
+    public void findTaggedFiles() throws Exception {
+        new FacesRequest() {
+
+            protected void invokeApplication() throws Exception {
+                WikiDirectory startDir = ((WikiNodeDAO)getInstance(WikiNodeDAO.class)).findWikiDirectory(3l);
+
+                TagDAO dao = (TagDAO)getInstance(TagDAO.class);
+                List<WikiFile> taggedFiles = dao.findWikFiles(startDir, null, "Tag One", WikiNode.SortableProperty.name, true);
+
+                Assert.assertEquals(taggedFiles.size(), 3);
+
+                Assert.assertEquals(taggedFiles.get(0).getName(), "One");
+                Assert.assertEquals(taggedFiles.get(1).getName(), "Three");
+                Assert.assertEquals(taggedFiles.get(2).getName(), "Two");
+            }
+        }.run();
+    }
+
 }

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/dao/WikiNodeDAOTests.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/dao/WikiNodeDAOTests.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/dao/WikiNodeDAOTests.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -11,6 +11,7 @@
 import org.jboss.seam.wiki.core.model.*;
 import org.jboss.seam.mock.DBUnitSeamTest;
 import org.testng.annotations.Test;
+import org.testng.Assert;
 
 import java.util.List;
 
@@ -192,7 +193,7 @@
     }
 
     @Test
-    public void findCommentThreads() throws Exception {
+    public void findComments() throws Exception {
         new FacesRequest() {
 
             protected void invokeApplication() throws Exception {
@@ -200,64 +201,122 @@
                 WikiDocument d = dao.findWikiDocument(6l);
                 assert d.getName().equals("One");
 
-                List<WikiComment> comments = dao.findWikiCommentsThreaded(d);
+                List<WikiComment> comments = dao.findWikiComments(d, true);
                 assert comments.size() == 6;
 
-                assert comments.get(0).getLevel().equals(1l);
                 assert comments.get(0).getId().equals(10l);
-                assert comments.get(1).getLevel().equals(2l);
                 assert comments.get(1).getId().equals(11l);
-                assert comments.get(2).getLevel().equals(2l);
                 assert comments.get(2).getId().equals(12l);
-                assert comments.get(3).getLevel().equals(3l);
                 assert comments.get(3).getId().equals(13l);
-                assert comments.get(4).getLevel().equals(1l);
                 assert comments.get(4).getId().equals(14l);
-                assert comments.get(5).getLevel().equals(2l);
                 assert comments.get(5).getId().equals(15l);
             }
         }.run();
     }
 
     @Test
-    public void findCommentSubthreads() throws Exception {
+    public void findSiblings() throws Exception {
         new FacesRequest() {
 
             protected void invokeApplication() throws Exception {
                 WikiNodeDAO dao = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
+                WikiDocument d = dao.findWikiDocument(6l);
+                assert d.getName().equals("One");
 
-                WikiComment rootOne = dao.findWikiComment(10l);
-                List<WikiComment> commentsOne = dao.findWikiCommentSubtree(rootOne);
-                assert commentsOne.size() == 3;
-                assert commentsOne.get(0).getLevel().equals(1l);
-                assert commentsOne.get(0).getId().equals(11l);
-                assert commentsOne.get(1).getLevel().equals(1l);
-                assert commentsOne.get(1).getId().equals(12l);
-                assert commentsOne.get(2).getLevel().equals(2l);
-                assert commentsOne.get(2).getId().equals(13l);
+                assert dao.findSiblingWikiDocumentInDirectory(d, WikiNode.SortableProperty.createdOn, true) == null;
+                assert dao.findSiblingWikiDocumentInDirectory(d, WikiNode.SortableProperty.createdOn, false).getId().equals(7l);
+            }
+        }.run();
+    }
 
-                WikiComment rootTwo = dao.findWikiComment(14l);
-                List<WikiComment> commentsTwo = dao.findWikiCommentSubtree(rootTwo);
-                assert commentsTwo.size() == 1;
-                assert commentsTwo.get(0).getLevel().equals(1l);
-                assert commentsTwo.get(0).getId().equals(15l);
+    @Test
+    public void findWikiDirectoryTree() throws Exception {
+        new FacesRequest() {
 
+            protected void invokeApplication() throws Exception {
+                WikiNodeDAO dao = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
+
+                WikiDirectory root = dao.findWikiDirectory(1l);
+                List<WikiTreeNode<WikiDirectory>> tree = dao.findWikiDirectoryTree(root, WikiNode.SortableProperty.name, true);
+
+                Assert.assertEquals(tree.size(), 7);
+
+                Assert.assertEquals(tree.get(0).getLevel(), 1);
+                Assert.assertEquals(tree.get(0).getNode().getName(), "AAA");
+                Assert.assertEquals(tree.get(1).getLevel(), 2);
+                Assert.assertEquals(tree.get(1).getNode().getName(), "BBB");
+                Assert.assertEquals(tree.get(2).getLevel(), 2);
+                Assert.assertEquals(tree.get(2).getNode().getName(), "CCC");
+                Assert.assertEquals(tree.get(3).getLevel(), 3);
+                Assert.assertEquals(tree.get(3).getNode().getName(), "DDD");
+                Assert.assertEquals(tree.get(4).getLevel(), 3);
+                Assert.assertEquals(tree.get(4).getNode().getName(), "EEE");
+                Assert.assertEquals(tree.get(5).getLevel(), 2);
+                Assert.assertEquals(tree.get(5).getNode().getName(), "Members");
+                Assert.assertEquals(tree.get(6).getLevel(), 2);
+                Assert.assertEquals(tree.get(6).getNode().getName(), "Trash");
+
             }
         }.run();
     }
 
+    @Test
+    public void findWikiDirectorySubtree() throws Exception {
+        new FacesRequest() {
 
+            protected void invokeApplication() throws Exception {
+                WikiNodeDAO dao = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
+
+                WikiDirectory root = dao.findWikiDirectory(3l);
+                List<WikiTreeNode<WikiDirectory>> tree = dao.findWikiDirectoryTree(root, WikiNode.SortableProperty.name, false);
+
+                Assert.assertEquals(tree.size(), 3);
+
+                Assert.assertEquals(tree.get(0).getLevel(), 1);
+                Assert.assertEquals(tree.get(0).getNode().getName(), "CCC");
+                Assert.assertEquals(tree.get(1).getLevel(), 2);
+                Assert.assertEquals(tree.get(1).getNode().getName(), "EEE");
+                Assert.assertEquals(tree.get(2).getLevel(), 2);
+                Assert.assertEquals(tree.get(2).getNode().getName(), "DDD");
+
+            }
+        }.run();
+    }
+
     @Test
-    public void findSiblings() throws Exception {
+    public void findMenuItems() throws Exception {
         new FacesRequest() {
 
             protected void invokeApplication() throws Exception {
                 WikiNodeDAO dao = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
-                WikiDocument d = dao.findWikiDocument(6l);
-                assert d.getName().equals("One");
 
-                assert dao.findSiblingWikiDocumentInDirectory(d, WikiNode.SortableProperty.createdOn, true) == null;
-                assert dao.findSiblingWikiDocumentInDirectory(d, WikiNode.SortableProperty.createdOn, false).getId().equals(7l);
+                WikiDirectory root = dao.findWikiDirectory(1l);
+
+                List<WikiTreeNode<WikiDirectory>> tree = dao.findMenuItemTree(root, 3l, 3l, false);
+                Assert.assertEquals(tree.size(), 3);
+                Assert.assertEquals(tree.get(0).getLevel(), 1);
+                Assert.assertEquals(tree.get(0).getNode().getName(), "BBB");
+                Assert.assertEquals(tree.get(1).getLevel(), 1);
+                Assert.assertEquals(tree.get(1).getNode().getName(), "CCC");
+                Assert.assertEquals(tree.get(2).getLevel(), 2);
+                Assert.assertEquals(tree.get(2).getNode().getName(), "DDD");
+
+                tree = dao.findMenuItemTree(root, 3l, 1l, false);
+                Assert.assertEquals(tree.size(), 3);
+                Assert.assertEquals(tree.get(0).getLevel(), 1);
+                Assert.assertEquals(tree.get(0).getNode().getName(), "BBB");
+                Assert.assertEquals(tree.get(1).getLevel(), 1);
+                Assert.assertEquals(tree.get(1).getNode().getName(), "CCC");
+                Assert.assertEquals(tree.get(2).getLevel(), 1);
+                Assert.assertEquals(tree.get(2).getNode().getName(), "DDD");
+
+                tree = dao.findMenuItemTree(root, 1l, 3l, false);
+                Assert.assertEquals(tree.size(), 2);
+                Assert.assertEquals(tree.get(0).getLevel(), 1);
+                Assert.assertEquals(tree.get(0).getNode().getName(), "BBB");
+                Assert.assertEquals(tree.get(1).getLevel(), 1);
+                Assert.assertEquals(tree.get(1).getNode().getName(), "CCC");
+
             }
         }.run();
     }

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/BasicNodeOperations.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/BasicNodeOperations.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/BasicNodeOperations.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -84,7 +84,6 @@
                 Redirect.instance().setViewId("/dirDisplay.xhtml");
                 Redirect.instance().execute();
 
-                assert checkNestedSetNodeInDatabase(1l, 1, 997);
                 assert !checkDirectoryInDatabase(5l);
             }
 
@@ -119,7 +118,6 @@
             protected void renderResponse() throws Exception {
                 WikiDocument newNode = (WikiDocument)getValue("#{documentHome.instance}");
 
-                assert checkNestedSetNodeInDatabase(3l, 4, 9);
                 assert newNode.getAreaNumber().equals(3l);
                 assert newNode.getCreatedBy().getId().equals(2l);
                 assert newNode.getParent().getId().equals(3l);
@@ -245,13 +243,6 @@
         }.run();
     }
 
-    private boolean checkNestedSetNodeInDatabase(long nodeId, long left, long right) throws Exception {
-        Session s = getHibernateSession();
-        WikiDirectory dir = (WikiDirectory)s.createQuery("select d from WikiDirectory d  left join fetch d.parent where d.id = :id").setParameter("id", nodeId).uniqueResult();
-        s.close();
-        return dir.getNodeInfo().getNsLeft() == left && dir.getNodeInfo().getNsRight() == right;
-    }
-
     private boolean checkDirectoryInDatabase(long nodeId) throws Exception {
         Session s = getHibernateSession();
         WikiDirectory dir = (WikiDirectory ) s.createQuery("select d from WikiDirectory d left join fetch d.parent where d.id = :id").setParameter("id", nodeId).uniqueResult();

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/ClipboardTests.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/ClipboardTests.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/ClipboardTests.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -761,7 +761,7 @@
                 assert doc.getAreaNumber().equals(2l);
                 assert doc.getParent().getId().equals(2l);
 
-                List<WikiComment> comments = browser.getWikiNodeDAO().findWikiCommentsFlat(doc, false);
+                List<WikiComment> comments = browser.getWikiNodeDAO().findWikiComments(doc, false);
                 for (WikiComment comment : comments) {
                     assert comment.getAreaNumber().equals(2l);
                 }

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/Commenting.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/Commenting.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/Commenting.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -12,12 +12,9 @@
 import org.jboss.seam.wiki.core.action.CommentQuery;
 import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
 import org.jboss.seam.wiki.core.model.User;
-import org.jboss.seam.wiki.core.model.WikiDocumentCountComment;
-import org.jboss.seam.wiki.core.model.WikiDocumentLastComment;
 import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
 
-import javax.persistence.EntityManager;
-
 public class Commenting extends DBUnitSeamTest {
 
     protected void prepareDBUnitOperations() {
@@ -49,12 +46,10 @@
                 commentHome.getInstance().setFromUserHomepage("http://foo.bar");
                 commentHome.getInstance().setFromUserEmail("foo at bar.tld");
                 commentHome.getInstance().setSubject("Some Subject");
-                commentHome.getInstance().setContent("Some Content");
+                commentHome.getTextEditor().setValue("Some Content");
 
                 invokeMethod("#{commentHome.persist}");
-            }
 
-            protected void renderResponse() throws Exception {
                 CommentQuery commentQuery = (CommentQuery)getInstance(CommentQuery.class);
                 assert commentQuery.getComments().size() == 7;
 
@@ -70,19 +65,10 @@
                 assert commentQuery.getComments().get(6).getFromUserHomepage().equals("http://foo.bar");
                 assert commentQuery.getComments().get(6).getFromUserEmail().equals("foo at bar.tld");
                 assert commentQuery.getComments().get(6).getSubject().equals("Some Subject");
-                assert commentQuery.getComments().get(6).getContent().equals("Some Content");
+                assertEquals(commentQuery.getComments().get(6).getContent(), "Some Content");
 
                 assert commentQuery.getComments().get(6).getName().matches("One\\.Comment[0-9]+");
                 assert !commentQuery.getComments().get(6).getWikiname().contains(" ");
-
-                EntityManager em = (EntityManager)getInstance("entityManager");
-                WikiDocumentLastComment lastComment = em.find(WikiDocumentLastComment.class, 6l);
-                assert lastComment != null;
-                assert lastComment.getLastCommentId().equals(commentQuery.getComments().get(6).getId());
-
-                WikiDocumentCountComment countComment = em.find(WikiDocumentCountComment.class, 6l);
-                assert countComment != null;
-                assert countComment.getCommentCount() == 8;
             }
 
         }.run();
@@ -112,12 +98,10 @@
                 commentHome.getInstance().setFromUserHomepage("http://foo.bar");
                 commentHome.getInstance().setFromUserEmail("foo at bar.tld");
                 commentHome.getInstance().setSubject("Some Subject");
-                commentHome.getInstance().setContent("Some Content");
+                commentHome.getTextEditor().setValue("Some Content");
 
                 invokeMethod("#{commentHome.persist}");
-            }
 
-            protected void renderResponse() throws Exception {
                 CommentQuery commentQuery = (CommentQuery)getInstance(CommentQuery.class);
                 assert commentQuery.getComments().size() == 7;
 
@@ -132,23 +116,14 @@
                 assert commentQuery.getComments().get(6).getFromUserName().equals("Foo");
                 assert commentQuery.getComments().get(6).getFromUserHomepage().equals("http://foo.bar");
                 assert commentQuery.getComments().get(6).getFromUserEmail().equals("foo at bar.tld");
-                assert commentQuery.getComments().get(6).getSubject().equals("Some Subject");
-                assert commentQuery.getComments().get(6).getContent().equals("Some Content");
-                assert commentQuery.getComments().get(6).getParent().getId().equals(15l);
+                assertEquals(commentQuery.getComments().get(6).getSubject(), "Some Subject");
+                assertEquals(commentQuery.getComments().get(6).getContent(), "Some Content");
+                assertEquals(commentQuery.getComments().get(6).getParent().getId(), new Long(6));
 
                 assert commentQuery.getComments().get(6).getName().matches("One\\.Comment[0-9]+");
                 assert !commentQuery.getComments().get(6).getWikiname().contains(" ");
-
-                EntityManager em = (EntityManager)getInstance("entityManager");
-                WikiDocumentLastComment lastComment = em.find(WikiDocumentLastComment.class, 6l);
-                assert lastComment != null;
-                assert lastComment.getLastCommentId().equals(commentQuery.getComments().get(6).getId());
-
-                WikiDocumentCountComment countComment = em.find(WikiDocumentCountComment.class, 6l);
-                assert countComment != null;
-                assert countComment.getCommentCount() == 7;
             }
-
+            
         }.run();
     }
 
@@ -169,28 +144,14 @@
 
             protected void invokeApplication() throws Exception {
                 invokeMethod("#{commentHome.remove(14)}");
-            }
 
-            protected void renderResponse() throws Exception {
                 CommentQuery commentQuery = (CommentQuery)getInstance(CommentQuery.class);
-                assert commentQuery.getComments().size() == 4;
+                assert commentQuery.getComments().size() == 5;
                 assert commentQuery.getComments().get(0).getId().equals(10l);
-                assert commentQuery.getComments().get(0).getLevel().equals(1l);
                 assert commentQuery.getComments().get(1).getId().equals(11l);
-                assert commentQuery.getComments().get(1).getLevel().equals(2l);
                 assert commentQuery.getComments().get(2).getId().equals(12l);
-                assert commentQuery.getComments().get(2).getLevel().equals(2l);
                 assert commentQuery.getComments().get(3).getId().equals(13l);
-                assert commentQuery.getComments().get(3).getLevel().equals(3l);
-
-                EntityManager em = (EntityManager)getInstance("entityManager");
-                WikiDocumentLastComment lastComment = em.find(WikiDocumentLastComment.class, 6l);
-                assert lastComment != null;
-                assert lastComment.getLastCommentId().equals(13l);
-
-                WikiDocumentCountComment countComment = em.find(WikiDocumentCountComment.class, 6l);
-                assert countComment != null;
-                assert countComment.getCommentCount() == 4;
+                assert commentQuery.getComments().get(4).getId().equals(15l);
             }
 
         }.run();

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/CommentTests.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/CommentTests.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/CommentTests.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -13,10 +13,10 @@
 import org.jboss.seam.wiki.util.WikiUtil;
 import org.dbunit.operation.DatabaseOperation;
 import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
 
 import javax.persistence.EntityManager;
 import java.util.List;
-import java.util.Date;
 
 public class CommentTests extends DBUnitSeamTest {
 
@@ -27,7 +27,7 @@
     }
 
     @Test
-    public void findAllCommentsFlat() throws Exception {
+    public void findAllComments() throws Exception {
         new FacesRequest() {
 
             protected void invokeApplication() throws Exception {
@@ -43,77 +43,19 @@
                         .setParameter("doc", d)
                         .getResultList();
 
-                assert comments.size() == 2;
+                assert comments.size() == 6;
 
                 assert comments.get(0).getName().equals("One.Comment11967298211870");
-                assert comments.get(1).getSubject().equals("Five");
+                assert comments.get(1).getSubject().equals("Two");
+                assert comments.get(2).getSubject().equals("Three");
+                assert comments.get(3).getSubject().equals("Four");
+                assert comments.get(4).getSubject().equals("Five");
+                assert comments.get(5).getSubject().equals("Six");
             }
         }.run();
     }
 
     @Test
-    public void findAllCommentsHierachical() throws Exception {
-        new FacesRequest() {
-
-            protected void invokeApplication() throws Exception {
-                EntityManager em = (EntityManager) getInstance("restrictedEntityManager");
-                WikiDocument d = (WikiDocument)
-                        em.createQuery("select d from WikiDocument d where d.id = :id")
-                                .setParameter("id", 6l)
-                                .getSingleResult();
-                assert d.getName().equals("One");
-
-                List<Object[]> result = queryComments(d, em);
-
-                assert result.size() == 6;
-
-                Object[] one = result.get(0);
-                assert one[0].equals(1l);
-                assert one[1].equals(10l);
-                assert one[2].equals(1l);
-                assert one[3].equals(8l);
-                assert one[4].equals(10l);
-
-                Object[] two = result.get(1);
-                assert two[0].equals(2l);
-                assert two[1].equals(11l);
-                assert two[2].equals(2l);
-                assert two[3].equals(3l);
-                assert two[4].equals(10l);
-
-                Object[] three = result.get(2);
-                assert three[0].equals(2l);
-                assert three[1].equals(12l);
-                assert three[2].equals(4l);
-                assert three[3].equals(7l);
-                assert three[4].equals(10l);
-
-                Object[] four = result.get(3);
-                assert four[0].equals(3l);
-                assert four[1].equals(13l);
-                assert four[2].equals(5l);
-                assert four[3].equals(6l);
-                assert four[4].equals(10l);
-
-                Object[] five = result.get(4);
-                assert five[0].equals(1l);
-                assert five[1].equals(14l);
-                assert five[2].equals(1l);
-                assert five[3].equals(4l);
-                assert five[4].equals(14l);
-
-                Object[] six = result.get(5);
-                assert six[0].equals(2l);
-                assert six[1].equals(15l);
-                assert six[2].equals(2l);
-                assert six[3].equals(3l);
-                assert six[4].equals(14l);
-            }
-        }.run();
-    }
-
-
-    @Test
     public void insertCommentNewThread() throws Exception {
         new FacesRequest() {
 
@@ -143,59 +85,22 @@
                 em.flush();
                 em.clear();
 
-                List<Object[]> result = queryComments(d, em);
+                List<WikiComment> comments =
+                        em.createQuery("select c from WikiComment c where c.parent = :doc order by c.createdOn asc")
+                        .setParameter("doc", d)
+                        .getResultList();
 
-                assert result.size() == 7;
+                assert comments.size() == 7;
 
-                Object[] one = result.get(0);
-                assert one[0].equals(1l);
-                assert one[1].equals(10l);
-                assert one[2].equals(1l);
-                assert one[3].equals(8l);
-                assert one[4].equals(10l);
+                assert comments.get(0).getName().equals("One.Comment11967298211870");
+                assert comments.get(1).getSubject().equals("Two");
+                assert comments.get(2).getSubject().equals("Three");
+                assert comments.get(3).getSubject().equals("Four");
+                assert comments.get(4).getSubject().equals("Five");
+                assert comments.get(5).getSubject().equals("Six");
+                assert comments.get(6).getSubject().equals("Seven");
+                assert comments.get(6).getId().equals(newComment.getId());
 
-                Object[] two = result.get(1);
-                assert two[0].equals(2l);
-                assert two[1].equals(11l);
-                assert two[2].equals(2l);
-                assert two[3].equals(3l);
-                assert two[4].equals(10l);
-
-                Object[] three = result.get(2);
-                assert three[0].equals(2l);
-                assert three[1].equals(12l);
-                assert three[2].equals(4l);
-                assert three[3].equals(7l);
-                assert three[4].equals(10l);
-
-                Object[] four = result.get(3);
-                assert four[0].equals(3l);
-                assert four[1].equals(13l);
-                assert four[2].equals(5l);
-                assert four[3].equals(6l);
-                assert four[4].equals(10l);
-
-                Object[] five = result.get(4);
-                assert five[0].equals(1l);
-                assert five[1].equals(14l);
-                assert five[2].equals(1l);
-                assert five[3].equals(4l);
-                assert five[4].equals(14l);
-
-                Object[] six = result.get(5);
-                assert six[0].equals(2l);
-                assert six[1].equals(15l);
-                assert six[2].equals(2l);
-                assert six[3].equals(3l);
-                assert six[4].equals(14l);
-
-                Object[] seven = result.get(6);
-                assert seven[0].equals(1l);
-                assert seven[1].equals(newComment.getId());
-                assert seven[2].equals(1l);
-                assert seven[3].equals(2l);
-                assert seven[4].equals(newComment.getId());
-
             }
         }.run();
     }
@@ -212,23 +117,12 @@
                                 .setParameter("id", 13l)
                                 .getSingleResult();
                 assert comment.getSubject().equals("Four");
-                assert comment.getParentDocument().getId().equals(6l);
+                assert comment.getParent().getId().equals(6l);
+                assertEquals(comment.getPermURL(".lace"), "6.lace#comment13");
+                assertEquals(comment.getWikiURL(), "CCC/One#comment13");
             }
         }.run();
     }
 
-    private List<Object[]> queryComments(WikiDocument doc, EntityManager em) {
-        String query =
-            "select count(c1.id) as nslevel, c1.id, c1.nodeInfo.nsLeft, c1.nodeInfo.nsRight, c1.nodeInfo.nsThread " +
-            " from WikiComment c1, WikiComment c2 " +
-            " where c1.nodeInfo.nsThread = c2.nodeInfo.nsThread" +
-            " and c2.nodeInfo.nsThread in (select c3.nodeInfo.nsThread from WikiComment c3 where c3.parent = :doc)" +
-            " and c1.nodeInfo.nsLeft between c2.nodeInfo.nsLeft and c2.nodeInfo.nsRight" +
-            " group by c1.id, c1.nodeInfo.nsLeft, c1.nodeInfo.nsRight, c1.nodeInfo.nsThread" +
-            " order by c1.nodeInfo.nsThread asc, c1.nodeInfo.nsLeft asc";
-        return em.createQuery(query)
-                .setParameter("doc", doc)
-                .getResultList();
-    }
 
 }
\ No newline at end of file

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/DirectoryTests.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/DirectoryTests.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/DirectoryTests.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -11,8 +11,10 @@
 import org.jboss.seam.wiki.core.model.WikiDirectory;
 import org.jboss.seam.mock.DBUnitSeamTest;
 import org.testng.annotations.Test;
+import org.testng.Assert;
 
 import javax.persistence.EntityManager;
+import java.util.List;
 
 public class DirectoryTests extends DBUnitSeamTest {
 
@@ -33,8 +35,6 @@
                                 .setParameter("id", 1l)
                                 .getSingleResult();
                 assert d.getName().equals("AAA");
-                assert d.getNodeInfo().getNsLeft().equals(1l);
-                assert d.getNodeInfo().getNsRight().equals(999l);
             }
         }.run();
     }
@@ -77,8 +77,6 @@
                                 .setParameter("id", 1l)
                                 .getSingleResult();
                 assert d.getName().equals("AAA2");
-                assert d.getNodeInfo().getNsLeft().equals(1l);
-                assert d.getNodeInfo().getNsRight().equals(999l);
             }
         }.run();
     }
@@ -222,8 +220,6 @@
                                 .setParameter("id", 1l)
                                 .getSingleResult();
                 assert d.getName().equals("AAA");
-                assert d.getNodeInfo().getNsLeft().equals(1l);
-                assert d.getNodeInfo().getNsRight().equals(1001l);
 
                 em.clear();
                 d = (WikiDirectory)
@@ -231,8 +227,6 @@
                                 .setParameter("id", 3l)
                                 .getSingleResult();
                 assert d.getName().equals("CCC");
-                assert d.getNodeInfo().getNsLeft().equals(4l);
-                assert d.getNodeInfo().getNsRight().equals(11l);
 
                 em.clear();
                 d = (WikiDirectory)
@@ -240,12 +234,45 @@
                                 .setParameter("id", newDir.getId())
                                 .getSingleResult();
                 assert d.getName().equals("FFF");
-                assert d.getNodeInfo().getNsLeft().equals(9l);
-                assert d.getNodeInfo().getNsRight().equals(10l);
             }
         }.run();
     }
 
+    @Test
+    public void findParents() throws Exception {
+        new FacesRequest() {
 
+            protected void invokeApplication() throws Exception {
+                EntityManager em = (EntityManager) getInstance("restrictedEntityManager");
+                WikiDirectory d = (WikiDirectory)
+                        em.createQuery("select d from WikiDirectory d where d.id = :id")
+                                .setParameter("id", 4l)
+                                .getSingleResult();
 
+                List<WikiDirectory> parents = d.getParentsRecursive();
+
+                Assert.assertEquals(parents.size(), 2);
+                Assert.assertEquals(parents.get(0).getId(), new Long(3));
+                Assert.assertEquals(parents.get(1).getId(), new Long(1));
+            }
+        }.run();
+
+        new FacesRequest() {
+
+            protected void invokeApplication() throws Exception {
+                EntityManager em = (EntityManager) getInstance("restrictedEntityManager");
+                WikiDirectory d = (WikiDirectory)
+                        em.createQuery("select d from WikiDirectory d where d.id = :id")
+                                .setParameter("id", 3l)
+                                .getSingleResult();
+
+                List<WikiDirectory> parents = d.getParentsRecursive();
+
+                Assert.assertEquals(parents.size(), 1);
+                Assert.assertEquals(parents.get(0).getId(), new Long(1));
+            }
+        }.run();
+    }
+
+
 }

Deleted: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/MenuTests.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/MenuTests.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/model/MenuTests.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,192 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.seam.wiki.test.model;
-
-import org.dbunit.operation.DatabaseOperation;
-import org.jboss.seam.wiki.core.model.WikiDirectory;
-import org.jboss.seam.wiki.core.model.WikiMenuItem;
-import org.jboss.seam.mock.DBUnitSeamTest;
-import org.testng.annotations.Test;
-
-import javax.persistence.EntityManager;
-import java.util.List;
-
-public class MenuTests extends DBUnitSeamTest {
-
-    protected void prepareDBUnitOperations() {
-        beforeTestOperations.add(
-                new DataSetOperation("org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml", DatabaseOperation.CLEAN_INSERT)
-        );
-    }
-
-    @Test
-    public void findAllMenuItems() throws Exception {
-        new FacesRequest() {
-
-            protected void invokeApplication() throws Exception {
-
-                EntityManager em = (EntityManager) getInstance("restrictedEntityManager");
-
-                WikiDirectory root = (WikiDirectory)
-                        em.createQuery("select d from WikiDirectory d where d.id = :id")
-                                .setParameter("id", 1l)
-                                .getSingleResult();
-
-                List<Object[]> result = queryMenuItems(root, em);
-
-                assert result.size() == 3;
-
-                Object[] one = result.get(0);
-                assert one[0].equals(2l);
-                assert one[1].equals(2l);
-                assert one[2].equals(0l);
-
-                Object[] two = result.get(1);
-                assert two[0].equals(2l);
-                assert two[1].equals(3l);
-                assert two[2].equals(1l);
-
-                Object[] three = result.get(2);
-                assert three[0].equals(3l);
-                assert three[1].equals(4l);
-                assert three[2].equals(0l);
-
-            }
-        }.run();
-    }
-
-
-    @Test
-    public void removeMenuItem() throws Exception {
-        new FacesRequest() {
-
-            protected void invokeApplication() throws Exception {
-
-                EntityManager em = (EntityManager) getInstance("restrictedEntityManager");
-
-                WikiDirectory d = (WikiDirectory)
-                        em.createQuery("select d from WikiDirectory d where d.id = :id")
-                                .setParameter("id", 1l)
-                                .getSingleResult();
-
-                List<WikiMenuItem> menuItems =
-                        em.createQuery("select m from WikiMenuItem m where m.id in (select d.id from WikiDirectory d where d.parent = :parent)")
-                        .setParameter("parent", d).getResultList();
-
-                assert menuItems.size() == 2;
-
-                WikiMenuItem removedItem = menuItems.remove(0);
-                em.remove(removedItem);
-                for (int i = 0; i<menuItems.size(); i++) {
-                    WikiMenuItem itm = menuItems.get(i);
-                    itm.setDisplayPosition(i);
-                }
-
-                em.flush();
-                em.clear();
-
-                List<Object[]> result = queryMenuItems(d, em);
-
-                assert result.size() == 2;
-
-                Object[] one = result.get(0);
-                assert one[0].equals(2l);
-                assert one[1].equals(3l);
-                assert one[2].equals(0l);
-
-                Object[] two = result.get(1);
-                assert two[0].equals(3l);
-                assert two[1].equals(4l);
-                assert two[2].equals(0l);
-
-            }
-        }.run();
-    }
-
-
-    @Test
-    public void addMenuItem() throws Exception {
-        new FacesRequest() {
-
-            protected void invokeApplication() throws Exception {
-
-                EntityManager em = (EntityManager) getInstance("restrictedEntityManager");
-
-                WikiDirectory root = (WikiDirectory)
-                          em.createQuery("select d from WikiDirectory d where d.id = :id")
-                                  .setParameter("id", 1l)
-                                  .getSingleResult();
-
-                WikiDirectory d = (WikiDirectory)
-                        em.createQuery("select d from WikiDirectory d where d.id = :id")
-                                .setParameter("id", 5l)
-                                .getSingleResult();
-
-                List<WikiMenuItem> menuItems =
-                        em.createQuery("select m from WikiMenuItem m where m.id in (select d.id from WikiDirectory d where d.parent = :parent)")
-                        .setParameter("parent", d.getParent()).getResultList();
-
-                WikiMenuItem newMenuItem = new WikiMenuItem(d);
-                menuItems.add(newMenuItem);
-
-                assert menuItems.size() == 2;
-
-                for (int i = 0; i<menuItems.size(); i++) {
-                    WikiMenuItem itm = menuItems.get(i);
-                    itm.setDisplayPosition(i);
-                }
-
-                em.persist(newMenuItem);
-
-                em.flush();
-                em.clear();
-
-                List<Object[]> result = queryMenuItems(root, em);
-
-                assert result.size() == 4;
-
-                Object[] one = result.get(0);
-                assert one[0].equals(2l);
-                assert one[1].equals(2l);
-                assert one[2].equals(0l);
-
-                Object[] two = result.get(1);
-                assert two[0].equals(2l);
-                assert two[1].equals(3l);
-                assert two[2].equals(1l);
-
-                Object[] three = result.get(2);
-                assert three[0].equals(3l);
-                assert three[1].equals(4l);
-                assert three[2].equals(0l);
-
-                Object[] four = result.get(3);
-                assert four[0].equals(3l);
-                assert four[1].equals(5l);
-                assert four[2].equals(1l);
-
-            }
-        }.run();
-    }
-
-    private List<Object[]> queryMenuItems(WikiDirectory start, EntityManager em) {
-        String query =
-            "select count(d1.id), d1.id, m.displayPosition" +
-            " from WikiDirectory d1, WikiDirectory d2, WikiMenuItem m" +
-            " where d1.nodeInfo.nsThread = :thread and d2.nodeInfo.nsThread = d1.nodeInfo.nsThread" +
-            " and d1.nodeInfo.nsLeft between d2.nodeInfo.nsLeft and d2.nodeInfo.nsRight" +
-            " and d2.nodeInfo.nsLeft >= :left and d2.nodeInfo.nsRight <= :right" +
-            " and m.id = d1.id" +
-            " group by d1.id, m.displayPosition";
-        return em.createQuery(query)
-                .setParameter("thread", start.getNodeInfo().getNsThread())
-                .setParameter("left", start.getNodeInfo().getNsLeft())
-                .setParameter("right", start.getNodeInfo().getNsRight())
-                .getResultList();
-    }
-
-}

Modified: branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/plugin/TopicHomeTests.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/plugin/TopicHomeTests.java	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/src/test/org/jboss/seam/wiki/test/plugin/TopicHomeTests.java	2010-01-27 17:13:25 UTC (rev 11995)
@@ -67,9 +67,7 @@
                 home.getTextEditor().setValue("This is a new topic.");
 
                 assert invokeMethod("#{topicHome.persist}") == null;
-            }
 
-            protected void renderResponse() throws Exception {
                 Long newId = (Long)getValue("#{topicHome.instance.id}");
 
                 WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
@@ -135,9 +133,7 @@
                 home.setSticky(true);
 
                 assert invokeMethod("#{topicHome.persist}") == null;
-            }
-
-            protected void renderResponse() throws Exception {
+                
                 Long newId = (Long)getValue("#{topicHome.instance.id}");
 
                 WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
@@ -201,9 +197,7 @@
                 home.getInstance().setEnableComments(false);
 
                 assert invokeMethod("#{topicHome.persist}") == null;
-            }
 
-            protected void renderResponse() throws Exception {
                 Long newId = (Long)getValue("#{topicHome.instance.id}");
 
                 WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class);

Modified: branches/community/Seam_2_2/examples/wiki/view/dirDisplay_d.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/dirDisplay_d.xhtml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/view/dirDisplay_d.xhtml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -43,6 +43,7 @@
                         <h:outputText escape="false" value="#{messages['lacewiki.label.template.RegularWikiDocument']}"/>
                         <f:param name="documentId" value=""/>
                         <f:param name="parentDirectoryId" value="#{directoryBrowser.instance.id}"/>
+                        <f:param name="templateType" value=""/>
                     </s:link>
                 </li>
                 <ui:repeat var="templateType" value="#{templateRegistry.templateTypes}">
@@ -101,11 +102,18 @@
 
 <s:div styleClass="box directoryBrowser" id="directoryBrowser">
 
+<!--
     <ui:include src="includes/directoryBrowserPath.xhtml">
         <ui:param name="renderOnSelect" value="control, directoryBrowser, messageBoxContainer"/>
     </ui:include>
+-->
 
     <h:panelGrid id="directoryBrowserMainPanel" styleClass="directoryBrowserMainPanel"
+                 columnClasses="directoryBrowserContentPanel"
+                 columns="2" cellpadding="0" cellspacing="0" border="0">
+
+<!--
+    <h:panelGrid id="directoryBrowserMainPanel" styleClass="directoryBrowserMainPanel"
                  columnClasses="directoryBrowserTreePanel #{directoryBrowserSettings.treeVisible ? 'open':'closed'}, directoryBrowserContentPanel"
                  columns="2" cellpadding="0" cellspacing="0" border="0">
 
@@ -114,6 +122,7 @@
                 <ui:param name="renderOnSelect" value="control, directoryBrowser, messageBoxContainer"/>
             </ui:include>
         </s:fragment>
+-->
 
         <s:div id="directoryBrowserContentPanel">
         <h:form>
@@ -260,6 +269,8 @@
                                         <li>
                                             <s:link view="/docEdit_#{skin}.xhtml" propagation="none">
                                                 <f:param name="documentId" value="#{node.id}"/>
+                                                <f:param name="parentDirectoryId" value="#{directoryBrowser.instance.id}"/>
+                                                <f:param name="templateType" value=""/>
                                                 <h:outputText value="#{messages['lacewiki.button.dirDisplay.Edit']}"/>
                                             </s:link>
                                         </li>

Modified: branches/community/Seam_2_2/examples/wiki/view/docDisplay_d.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/docDisplay_d.xhtml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/view/docDisplay_d.xhtml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -42,6 +42,7 @@
                         <h:outputText escape="false" value="#{messages['lacewiki.label.template.RegularWikiDocument']}"/>
                         <f:param name="documentId" value=""/>
                         <f:param name="parentDirectoryId" value="#{documentHome.instance.parent.id}"/>
+                        <f:param name="templateType" value=""/>
                     </s:link>
                 </li>
                 <ui:repeat var="templateType" value="#{templateRegistry.templateTypes}">

Modified: branches/community/Seam_2_2/examples/wiki/view/includes/commentsDisplay.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/includes/commentsDisplay.xhtml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/view/includes/commentsDisplay.xhtml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -38,9 +38,13 @@
         </f:facet>
         <c:forEach var="c" items="#{commentQuery.comments}">
 
+<!--
             <s:div style="margin-left:#{c.level > 1 ? c.level : ''}0px;"
                    styleClass="commentBox #{c.level > 1 ? 'commentLevel' : 'commentFirstLevel'}">
+-->
 
+            <s:div styleClass="commentBox commentFirstLevel">
+
                 <h:panelGrid columns="3" styleClass="commentHeader"
                              columnClasses="commentSubject, commentAuthorInfo smallFont, commentAuthorPortrait"
                              cellpadding="0" cellspacing="0" border="0">

Modified: branches/community/Seam_2_2/examples/wiki/view/includes/directoryBrowserPath.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/includes/directoryBrowserPath.xhtml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/view/includes/directoryBrowserPath.xhtml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -10,6 +10,12 @@
     <h:form id="directoryBrowserPathForm" style="margin:0;padding:0;border:0">
         <h:panelGrid columns="2"
                      styleClass="directoryBrowserPathPanel"
+                     columnClasses="path"
+                     cellpadding="0" cellspacing="0" border="0">
+
+<!--
+        <h:panelGrid columns="2"
+                     styleClass="directoryBrowserPathPanel"
                      columnClasses="#{directoryBrowserSettings.treeVisible ? 'treeSwitchOpen':'treeSwitchClosed'}, path"
                      cellpadding="0" cellspacing="0" border="0">
 
@@ -29,6 +35,7 @@
                     </a:commandLink>
 
             </s:fragment>
+-->
 
             <s:fragment>
                 <h:panelGroup>

Modified: branches/community/Seam_2_2/examples/wiki/view/includes/directoryBrowserTree.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/includes/directoryBrowserTree.xhtml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/view/includes/directoryBrowserTree.xhtml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -9,6 +9,8 @@
      xmlns:rich="http://richfaces.ajax4jsf.org/rich"
      xmlns:s="http://jboss.com/products/seam/taglib">
 
+    <!-- Outdated, we do not have nested sets anymore and this needs to be completely rewritten... -->
+
     <h:form id="directoryTreeForm" rendered="#{directoryBrowserSettings.treeVisible}">
         <rich:tree switchType="ajax"
                    ajaxSubmitSelection="true"

Modified: branches/community/Seam_2_2/examples/wiki/view/includes/mainMenu.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/includes/mainMenu.xhtml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/view/includes/mainMenu.xhtml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -3,6 +3,7 @@
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
+     xmlns:c="http://java.sun.com/jstl/core"
      xmlns:wiki="http://jboss.com/products/seam/wiki"
      xmlns:rich="http://richfaces.ajax4jsf.org/rich"
      xmlns:s="http://jboss.com/products/seam/taglib">
@@ -11,11 +12,19 @@
 
         <div class="mainMenuHeader"><ui:insert name="mainMenuHeader">&#160;</ui:insert></div>
 
-        <s:cache region="#{menu.cacheRegion}" key="#{menu.cacheKey}">
-            <ui:include src="mainMenuItem.xhtml">
-                <ui:param name="node" value="#{menu.root}"/>
-            </ui:include>
-        </s:cache>
+        <div class="mainMenuBody">
+            <s:cache region="#{menu.cacheRegion}" key="#{menu.cacheKey}">
+                <c:forEach items="#{menu.tree}" var="tn">
+                    <s:div styleClass="level#{tn.level}">
+                        <h:outputText styleClass="level#{tn.level}Marker level#{tn.level}MarkerDot" value="&#183;"/>
+                        <h:outputText styleClass="level#{tn.level}Marker level#{tn.level}MarkerGreaterThan" value=">"/>
+                        <h:outputText styleClass="level#{tn.level}Marker level#{tn.level}MarkerSlash" value="&#47;"/>
+                        <h:outputText styleClass="level#{tn.level}Marker level#{tn.level}MarkerSpace" value="&#160;"/>
+                        <h:outputLink styleClass="level#{tn.level}Link" value="#{wikiURLRenderer.renderURL(tn.node)}">#{tn.node.name}</h:outputLink>
+                    </s:div>
+                </c:forEach>
+            </s:cache>
+        </div>
 
         <div class="mainMenuFooter"><ui:insert name="mainMenuFooter">&#160;</ui:insert></div>
 

Deleted: branches/community/Seam_2_2/examples/wiki/view/includes/mainMenuItem.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/includes/mainMenuItem.xhtml	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/view/includes/mainMenuItem.xhtml	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,28 +0,0 @@
-<ui:composition
-        xmlns="http://www.w3.org/1999/xhtml"
-        xmlns:ui="http://java.sun.com/jsf/facelets"
-        xmlns:h="http://java.sun.com/jsf/html"
-        xmlns:f="http://java.sun.com/jsf/core"
-        xmlns:wiki="http://jboss.com/products/seam/wiki"
-        xmlns:c="http://java.sun.com/jstl/core"
-        xmlns:s="http://jboss.com/products/seam/taglib">
-
-<c:forEach var="childWrapper" items="#{node.wrappedChildrenSorted}">
-    <s:div styleClass="level#{childWrapper.level}">
-        <s:div styleClass="level#{childWrapper.level}Body">
-            <h:outputText styleClass="level#{childWrapper.level}Marker level#{childWrapper.level}MarkerDot" value="&#183;"/>
-            <h:outputText styleClass="level#{childWrapper.level}Marker level#{childWrapper.level}MarkerGreaterThan" value=">"/>
-            <h:outputText styleClass="level#{childWrapper.level}Marker level#{childWrapper.level}MarkerSlash" value="&#47;"/>
-            <h:outputText styleClass="level#{childWrapper.level}Marker level#{childWrapper.level}MarkerSpace" value="&#160;"/>
-            <h:outputLink styleClass="level#{childWrapper.level}Link"
-                          value="#{wikiURLRenderer.renderURL(childWrapper.wrappedNode)}">#{childWrapper.wrappedNode.name}</h:outputLink>
-        </s:div>
-        <s:div styleClass="level#{childWrapper.level}Children" style="padding-left: #{childWrapper.level*7}px;">
-            <ui:include src="mainMenuItem.xhtml">
-                <ui:param name="node" value="#{childWrapper}"/>
-            </ui:include>
-        </s:div>
-    </s:div>
-</c:forEach>
-
-</ui:composition>

Modified: branches/community/Seam_2_2/examples/wiki/view/themes/default/css/mainMenu.css
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/themes/default/css/mainMenu.css	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/view/themes/default/css/mainMenu.css	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1,10 +1,11 @@
+.mainMenuBody {
+    background-color: #3e3532;
+}
+
 #mainMenu .level1 {
     background: #3e3532 url(../img/menu.bg.gif) 0 0 repeat-x;
-}
-
-#mainMenu .level1Body {
     padding-top: 3px;
-    padding-bottom: 3px;
+    padding-bottom: 5px;
 }
 
 #mainMenu .level1Marker {
@@ -16,18 +17,13 @@
     font-size: 100%;
     color: #fff;
     text-decoration: none;
-    margin-left: 10px;
+    margin-left: 7px;
 }
 
 #mainMenu .level1Link:hover {color: #ccc}
 
-#mainMenu .level1Children {
-    background-color: #3e3532;
+#mainMenu .level2 {
     border-style: none;
-    margin-left: 10px;
-}
-
-#mainMenu .level2 {
     padding-top: 2px;
     padding-bottom: 2px;
 }
@@ -42,11 +38,16 @@
     color: #fff;
     text-decoration: none;
     white-space: nowrap;
+    margin-left: 14px;
 }
 
 #mainMenu .level2Link:hover {color: #ccc}
 
-#mainMenu .level3 {}
+#mainMenu .level3 {
+    border-style: none;
+    padding-top: 2px;
+    padding-bottom: 2px;
+}
 
 #mainMenu .level3Marker {
     display: none;
@@ -64,6 +65,7 @@
     color: #fff;
     text-decoration: none;
     white-space: nowrap;
+    margin-left: 21px;
 }
 
 #mainMenu .level3Link:hover {color: #ccc}

Modified: branches/community/Seam_2_2/examples/wiki/view/themes/inrelationto/css/inrelationto.css
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/themes/inrelationto/css/inrelationto.css	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/view/themes/inrelationto/css/inrelationto.css	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1847,16 +1847,12 @@
 .mainMenuFooter {
     background: #d6d5c8 url(../img/th.bg.gif) 0 0 repeat-x;
     height: 35px;
-    margin-top: 5px;
 }
 
 #mainMenu .level1 {
-}
-
-#mainMenu .level1Body {
+    padding-left: 9px;
     padding-top: 3px;
     padding-bottom: 3px;
-    padding-left: 10px;
 }
 
 #mainMenu .level1Marker {
@@ -1872,13 +1868,10 @@
 
 #mainMenu .level1Link:hover {color: #666}
 
-#mainMenu .level1Children {
-    margin-left: 10px;
-}
-
 #mainMenu .level2 {
-    padding-top: 2px;
-    padding-bottom: 2px;
+    padding-top: 1px;
+    padding-bottom: 1px;
+    padding-left: 18px;
 }
 
 #mainMenu .level2Marker {

Modified: branches/community/Seam_2_2/examples/wiki/view/themes/sfwkorg/css/sfwk.css
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/themes/sfwkorg/css/sfwk.css	2010-01-27 16:30:34 UTC (rev 11994)
+++ branches/community/Seam_2_2/examples/wiki/view/themes/sfwkorg/css/sfwk.css	2010-01-27 17:13:25 UTC (rev 11995)
@@ -1804,18 +1804,15 @@
 }
 
 #mainMenu .mainMenuHeader {
-    border-bottom: 1px solid #433930;
 }
 
 #mainMenu .level1 {
+    background-color:#32332B;
+    border-top:1px solid #433930;
+    padding-bottom:3px;
+    padding-top:3px;
 }
 
-#mainMenu .level1Body {
-    padding-top: 3px;
-    padding-bottom: 3px;
-    background-color:#32332b;
-}
-
 #mainMenu .level1Marker {
     display: none;
 }
@@ -1828,13 +1825,8 @@
 
 #mainMenu .level1Link:hover { color: #ffaf64; }
 
-#mainMenu .level1Children {
-    background-color:#2A2B24;
-    border-bottom: 1px solid #433930;
-}
-
 #mainMenu .level2 {
-    padding-left: 10px;
+    padding-left: 15px;
     background-color:#2A2B24;
     padding-top: 3px;
     padding-bottom: 3px;
@@ -1859,10 +1851,6 @@
 
 #mainMenu .level2Link:hover {color: #ffaf64}
 
-#mainMenu .level2Children {
-    background-color: #2A2B24;
-}
-
 #mainMenu .level3 {
     padding-top: 2px;
     padding-bottom: 2px;



More information about the seam-commits mailing list