[seam-commits] Seam SVN: r8148 - in trunk/examples/wiki: src and 130 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Fri May 9 22:37:44 EDT 2008


Author: christian.bauer at jboss.com
Date: 2008-05-09 22:37:42 -0400 (Fri, 09 May 2008)
New Revision: 8148

Added:
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiTextMacro.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/PluginCacheManager.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/PluginRegistry.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/WikiPluginMacro.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/PluginBinder.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginBinder.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginDeploymentHandler.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginI18NBinder.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginI18NDeploymentHandler.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/Plugin.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/PluginInfo.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/module/
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/module/MacroPluginModule.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/module/PluginModule.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/plugin-1.0.xsd
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/MacroComponentHandler.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIMacro.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiFaceletsResourceResolver.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiPluginThemeResource.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiRedirect.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/AnnotationDeploymentHelper.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/PatternDeploymentHandler.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiResourceLoader.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/XmlDeploymentHandler.java
   trunk/examples/wiki/src/plugin/
   trunk/examples/wiki/src/plugin/org/
   trunk/examples/wiki/src/plugin/org/jboss/
   trunk/examples/wiki/src/plugin/org/jboss/seam/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/Basic.plugin.xml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenu.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenuPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocQuery.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DocPager.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DocPagerPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/Flash.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/FlashPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/LastModifiedDocuments.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/LastModifiedDocumentsPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/TagsAggregator.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/TagsPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/i18n/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/i18n/messages_basic_en.properties
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/clearBackground.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenu.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenuItem.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirToc.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/docPager.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/flash.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/lastModifiedDocuments.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/tags.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/userProfile.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirMenu.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirToc.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/docPager.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/lastModifiedDocuments.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirMenu.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirToc.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/docPager.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/lastModifiedDocuments.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/userProfile.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirMenu.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirToc.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/docPager.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/lastModifiedDocuments.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/Blog.plugin.xml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDAO.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDirectory.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntry.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntryCount.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntryDefaults.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/i18n/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/i18n/messages_blog_en.properties
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogArchive.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogDirectory.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogRecentEntries.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogArchive.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogDirectory.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogRecentEntries.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogArchive.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogDirectory.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogRecentEntries.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogArchive.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogDirectory.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogRecentEntries.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowser.plugin.xml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/i18n/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/i18n/messages_faqBrowser_en.properties
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqBrowser.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqControls.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqQuestionForm.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/default/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/default/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/default/css/faqBrowser.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/inrelationto/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/inrelationto/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/inrelationto/css/faqBrowser.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/sfwkorg/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/sfwkorg/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/sfwkorg/css/faqBrowser.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/Feed.plugin.xml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedAggregator.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedAggregatorPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasers.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasersFeedPreferenceValueTemplate.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasersPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/i18n/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/i18n/messages_feed_en.properties
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedAggregator.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedTeasers.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/default/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/default/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/default/css/feedAggregator.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/default/css/feedTeasers.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/inrelationto/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/inrelationto/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/inrelationto/css/feedAggregator.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/inrelationto/css/feedTeasers.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/sfwkorg/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/sfwkorg/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/sfwkorg/css/feedAggregator.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/sfwkorg/css/feedTeasers.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/Forum.plugin.xml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/i18n/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/i18n/messages_forumTopPosters_en.properties
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/i18n/messages_forum_en.properties
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumForm.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumList.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumListControls.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumListTable.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumPosting.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumPostingHeader.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumReplies.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumStickyPosting.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumTopPosters.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumTopics.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/lastTopicPost.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/replyForm.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicControls.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicForm.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicPager.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicTable.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumList.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumPosting.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumReplies.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumStickyPosting.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumTopics.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_goto.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_locked.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_locked_unread.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_sticky.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_sticky_unread.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_unread.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumList.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumPosting.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumReplies.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumStickyPosting.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumTopics.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_goto.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_locked.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_locked_unread.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_sticky.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_sticky_unread.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_unread.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumList.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumPosting.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumReplies.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumStickyPosting.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumTopics.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_goto.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_locked.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_locked_unread.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_sticky.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_sticky_unread.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_unread.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorld.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorld.plugin.xml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorldPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/i18n/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/i18n/messages_helloWorld_en.properties
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/templates/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/templates/helloWorld.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/templates/justAnotherTemplate.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/css/anotherOne.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/css/helloWorld.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/img/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/img/background.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/img/example.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/Jira.plugin.xml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/i18n/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/i18n/messages_jiraIssueList_en.properties
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/templates/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/templates/jiraIssueList.xhtml
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/css/jiraIssueList.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.blocker.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.critical.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.major.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.minor.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.optional.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.trivial.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/css/jiraIssueList.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.blocker.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.critical.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.major.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.minor.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.optional.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.trivial.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/css/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/css/jiraIssueList.css
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.blocker.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.critical.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.major.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.minor.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.optional.gif
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.trivial.gif
   trunk/examples/wiki/view/includes/admin/
   trunk/examples/wiki/view/includes/admin/pluginDetailsMacroPluginModule.xhtml
   trunk/examples/wiki/view/includes/admin/pluginEditor.xhtml
Removed:
   trunk/examples/wiki/src/etc/i18n/messages_blogDirectory_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_dirMenu_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_dirToc_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_docPager_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_faqBrowser_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_feedAggregator_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_feedTeasers_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_flash_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_forumTopPosters_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_forum_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_jiraIssueList_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_lastModifiedDocuments_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_tags_en.properties
   trunk/examples/wiki/src/etc/i18n/messages_userProfile_en.properties
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiMacro.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/PluginComponentHandler.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIPlugin.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/
   trunk/examples/wiki/view/plugins/
   trunk/examples/wiki/view/themes/default/css/blogArchive.css
   trunk/examples/wiki/view/themes/default/css/blogDirectory.css
   trunk/examples/wiki/view/themes/default/css/blogRecentEntries.css
   trunk/examples/wiki/view/themes/default/css/dirMenu.css
   trunk/examples/wiki/view/themes/default/css/dirToc.css
   trunk/examples/wiki/view/themes/default/css/docPager.css
   trunk/examples/wiki/view/themes/default/css/faqBrowser.css
   trunk/examples/wiki/view/themes/default/css/feedAggregator.css
   trunk/examples/wiki/view/themes/default/css/feedTeasers.css
   trunk/examples/wiki/view/themes/default/css/forumList.css
   trunk/examples/wiki/view/themes/default/css/forumPosting.css
   trunk/examples/wiki/view/themes/default/css/forumReplies.css
   trunk/examples/wiki/view/themes/default/css/forumStickyPosting.css
   trunk/examples/wiki/view/themes/default/css/forumTopics.css
   trunk/examples/wiki/view/themes/default/css/jiraIssueList.css
   trunk/examples/wiki/view/themes/default/css/lastModifiedDocuments.css
   trunk/examples/wiki/view/themes/default/img/icon.posting.gif
   trunk/examples/wiki/view/themes/default/img/icon.posting_goto.gif
   trunk/examples/wiki/view/themes/default/img/icon.posting_locked.gif
   trunk/examples/wiki/view/themes/default/img/icon.posting_locked_unread.gif
   trunk/examples/wiki/view/themes/default/img/icon.posting_sticky.gif
   trunk/examples/wiki/view/themes/default/img/icon.posting_sticky_unread.gif
   trunk/examples/wiki/view/themes/default/img/icon.posting_unread.gif
   trunk/examples/wiki/view/themes/default/img/icon.priority.blocker.gif
   trunk/examples/wiki/view/themes/default/img/icon.priority.critical.gif
   trunk/examples/wiki/view/themes/default/img/icon.priority.major.gif
   trunk/examples/wiki/view/themes/default/img/icon.priority.minor.gif
   trunk/examples/wiki/view/themes/default/img/icon.priority.optional.gif
   trunk/examples/wiki/view/themes/default/img/icon.priority.trivial.gif
   trunk/examples/wiki/view/themes/inrelationto/css/blogArchive.css
   trunk/examples/wiki/view/themes/inrelationto/css/blogDirectory.css
   trunk/examples/wiki/view/themes/inrelationto/css/blogRecentEntries.css
   trunk/examples/wiki/view/themes/inrelationto/css/dirMenu.css
   trunk/examples/wiki/view/themes/inrelationto/css/dirToc.css
   trunk/examples/wiki/view/themes/inrelationto/css/docPager.css
   trunk/examples/wiki/view/themes/inrelationto/css/faqBrowser.css
   trunk/examples/wiki/view/themes/inrelationto/css/feedAggregator.css
   trunk/examples/wiki/view/themes/inrelationto/css/feedTeasers.css
   trunk/examples/wiki/view/themes/inrelationto/css/forumList.css
   trunk/examples/wiki/view/themes/inrelationto/css/forumPosting.css
   trunk/examples/wiki/view/themes/inrelationto/css/forumReplies.css
   trunk/examples/wiki/view/themes/inrelationto/css/forumStickyPosting.css
   trunk/examples/wiki/view/themes/inrelationto/css/forumTopics.css
   trunk/examples/wiki/view/themes/inrelationto/css/jiraIssueList.css
   trunk/examples/wiki/view/themes/inrelationto/css/lastModifiedDocuments.css
   trunk/examples/wiki/view/themes/inrelationto/css/userProfile.css
   trunk/examples/wiki/view/themes/inrelationto/img/icon.posting.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_goto.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_locked.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_locked_unread.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_sticky.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_sticky_unread.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_unread.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.blocker.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.critical.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.major.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.minor.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.optional.gif
   trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.trivial.gif
   trunk/examples/wiki/view/themes/sfwkorg/css/blogArchive.css
   trunk/examples/wiki/view/themes/sfwkorg/css/blogDirectory.css
   trunk/examples/wiki/view/themes/sfwkorg/css/blogRecentEntries.css
   trunk/examples/wiki/view/themes/sfwkorg/css/dirMenu.css
   trunk/examples/wiki/view/themes/sfwkorg/css/dirToc.css
   trunk/examples/wiki/view/themes/sfwkorg/css/docPager.css
   trunk/examples/wiki/view/themes/sfwkorg/css/faqBrowser.css
   trunk/examples/wiki/view/themes/sfwkorg/css/feedAggregator.css
   trunk/examples/wiki/view/themes/sfwkorg/css/feedTeasers.css
   trunk/examples/wiki/view/themes/sfwkorg/css/forumList.css
   trunk/examples/wiki/view/themes/sfwkorg/css/forumPosting.css
   trunk/examples/wiki/view/themes/sfwkorg/css/forumReplies.css
   trunk/examples/wiki/view/themes/sfwkorg/css/forumStickyPosting.css
   trunk/examples/wiki/view/themes/sfwkorg/css/forumTopics.css
   trunk/examples/wiki/view/themes/sfwkorg/css/jiraIssueList.css
   trunk/examples/wiki/view/themes/sfwkorg/css/lastModifiedDocuments.css
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_goto.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_locked.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_locked_unread.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_sticky.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_sticky_unread.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_unread.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.blocker.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.critical.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.major.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.minor.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.optional.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.trivial.gif
Modified:
   trunk/examples/wiki/build.xml
   trunk/examples/wiki/src/etc/META-INF/components-dev.xml
   trunk/examples/wiki/src/etc/META-INF/components-prod.xml
   trunk/examples/wiki/src/etc/META-INF/components-test.xml
   trunk/examples/wiki/src/etc/META-INF/seam-deployment.properties
   trunk/examples/wiki/src/etc/META-INF/wiki.taglib.xml
   trunk/examples/wiki/src/etc/WEB-INF/components.xml
   trunk/examples/wiki/src/etc/WEB-INF/faces-config.xml
   trunk/examples/wiki/src/etc/WEB-INF/pages.xml
   trunk/examples/wiki/src/etc/WEB-INF/web.xml
   trunk/examples/wiki/src/etc/ehcache.xml
   trunk/examples/wiki/src/etc/i18n/messages_en.properties
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/WikiInit.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/AdminHome.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Breadcrumb.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryBrowser.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DocumentHome.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserHome.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserPasswordReset.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/cache/PageFragmentCache.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserRoleAccessFactory.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextParser.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextRenderer.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/FeedEntryManager.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiCommentFeedEntryManager.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiDocumentFeedEntryManager.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocument.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentDefaults.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceProvider.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/DefaultWikiTextRenderer.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/MacroWikiTextRenderer.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/NullWikiTextRenderer.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/WikiURLRenderer.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/search/metamodel/SearchRegistry.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/template/TemplateRegistry.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/FeedServlet.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIWikiFormattedText.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiFormattedTextHandler.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiPageFragmentCacheRenderer.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiTextEditor.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/upload/importers/metamodel/ImporterRegistry.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/Preferences.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/annotations/PreferenceProperty.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/annotations/Preferences.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/metamodel/PreferenceEntity.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/metamodel/PreferenceRegistry.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionDefaults.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionHome.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumQuery.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumTopPostersPreferences.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ReplyHome.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/TopicHome.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/JiraIssueList.java
   trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/JiraIssueListPreferences.java
   trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml
   trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/EditMacros.java
   trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/model/DocumentMacroTests.java
   trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/plugin/TopicHomeTests.java
   trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/InstancePreferencesTests.java
   trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/SystemPreferencesTests.java
   trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/UserPreferencesTests.java
   trunk/examples/wiki/view/adminHome_d.xhtml
   trunk/examples/wiki/view/dirDisplay_d.xhtml
   trunk/examples/wiki/view/dirDisplay_m.xhtml
   trunk/examples/wiki/view/dirEdit_d.xhtml
   trunk/examples/wiki/view/docDisplay_d.xhtml
   trunk/examples/wiki/view/docDisplay_m.xhtml
   trunk/examples/wiki/view/docEdit_d.xhtml
   trunk/examples/wiki/view/docHistory_d.xhtml
   trunk/examples/wiki/view/docHistory_m.xhtml
   trunk/examples/wiki/view/includes/attachmentDisplay.xhtml
   trunk/examples/wiki/view/includes/breadcrumb.xhtml
   trunk/examples/wiki/view/includes/captchaEntry.xhtml
   trunk/examples/wiki/view/includes/commentForm.xhtml
   trunk/examples/wiki/view/includes/commentsDisplay.xhtml
   trunk/examples/wiki/view/includes/directoryBrowserControl.xhtml
   trunk/examples/wiki/view/includes/directoryBrowserIconMenu.xhtml
   trunk/examples/wiki/view/includes/directoryBrowserPath.xhtml
   trunk/examples/wiki/view/includes/directoryBrowserTree.xhtml
   trunk/examples/wiki/view/includes/formFieldDecorate.xhtml
   trunk/examples/wiki/view/includes/helpPopup.xhtml
   trunk/examples/wiki/view/includes/mainMenu.xhtml
   trunk/examples/wiki/view/includes/ownerSelector.xhtml
   trunk/examples/wiki/view/includes/pager.xhtml
   trunk/examples/wiki/view/includes/pluginPreferencesForm.xhtml
   trunk/examples/wiki/view/includes/preferences/editor.xhtml
   trunk/examples/wiki/view/includes/sortableHeader.xhtml
   trunk/examples/wiki/view/includes/userInfo.xhtml
   trunk/examples/wiki/view/includes/wikiTextEditor.xhtml
   trunk/examples/wiki/view/includes/wikiTextPreview.xhtml
   trunk/examples/wiki/view/includes/wikiUploadImageEditor.xhtml
   trunk/examples/wiki/view/search_d.xhtml
   trunk/examples/wiki/view/search_m.xhtml
   trunk/examples/wiki/view/tagDisplay_d.xhtml
   trunk/examples/wiki/view/themes/default/css/template.css
   trunk/examples/wiki/view/themes/default/m/template.xhtml
   trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyReply.xhtml
   trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyReplyToList.xhtml
   trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyTopicToList.xhtml
   trunk/examples/wiki/view/themes/default/template.xhtml
   trunk/examples/wiki/view/themes/inrelationto/m/template.xhtml
   trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyReply.xhtml
   trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyReplyToList.xhtml
   trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyTopicToList.xhtml
   trunk/examples/wiki/view/themes/inrelationto/template.xhtml
   trunk/examples/wiki/view/themes/sfwkorg/css/sfwk.css
   trunk/examples/wiki/view/themes/sfwkorg/m/template.xhtml
   trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyReply.xhtml
   trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyReplyToList.xhtml
   trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyTopicToList.xhtml
   trunk/examples/wiki/view/themes/sfwkorg/template.xhtml
   trunk/examples/wiki/view/userList_d.xhtml
Log:
JBSEAM-2722, JBSEAM-2723 - New plugin metadata system and extended page fragment caching

Modified: trunk/examples/wiki/build.xml
===================================================================
--- trunk/examples/wiki/build.xml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/build.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -17,12 +17,13 @@
     <!-- set global properties for this build -->
     <property name="project.name" value="wiki"/>
 
-    <property name="src.java.dir" value="src/main"/>
+    <property name="src.java.dir"   value="src/main"/>
+    <property name="src.plugin.dir" value="src/plugin"/>
     <property name="src.test.dir" value="src/test"/>
     <property name="src.etc.dir"  value="src/etc"/>
     <property name="view.dir"     value="view"/>
 
-    <property name="classes.dir"        value="${tmp.dir}/classes"/>
+    <property name="classes.dir"         value="${tmp.dir}/classes"/>
     <property name="testclasses.dir"    value="${tmp.dir}/testclasses"/>
     <property name="test.output.dir"    value="${tmp.dir}/test-output"/>
     <property name="exploded.dir"       value="${tmp.dir}/exploded"/>
@@ -96,6 +97,14 @@
         <include name="**/*.sql"/>
         <include name="**/*.drl"/>
         <include name="**/*.MF"/>
+        <include name="**/*.dtd"/>
+        <include name="**/*.xsd"/>
+        <include name="**/*.gif"/>
+        <include name="**/*.jpg"/>
+        <include name="**/*.jpeg"/>
+        <include name="**/*.png"/>
+        <include name="**/*.css"/>
+        <include name="**/*.xhtml"/>
     </patternset>
 
     <!-- ################## SETUP ####################### -->
@@ -152,6 +161,7 @@
                 deprecation="${javac.deprecation}"
                      nowarn="${javac.nowarn}">
             <src path="${src.java.dir}"/>
+            <src path="${src.plugin.dir}"/>
         </javac>
 
         <!-- Copy resources (mapping files, properties, etc.) to classes -->
@@ -159,6 +169,9 @@
             <fileset dir="${src.java.dir}">
                 <patternset refid="meta.files"/>
             </fileset>
+            <fileset dir="${src.plugin.dir}">
+                <patternset refid="meta.files"/>
+            </fileset>
         </copy>
 
         <taskdef name="instrument" classname="org.hibernate.tool.instrument.javassist.InstrumentTask">

Modified: trunk/examples/wiki/src/etc/META-INF/components-dev.xml
===================================================================
--- trunk/examples/wiki/src/etc/META-INF/components-dev.xml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/META-INF/components-dev.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -47,27 +47,6 @@
                                         persistence-unit-name="wiki"
                                         startupDepends="ehCacheManager"/>
 
-    <!-- Wiki page fragment cache, relies on cache manager backend -->
-    <component name="pageFragmentCache"
-               class="org.jboss.seam.wiki.core.cache.PageFragmentCache"
-               startup="true" startupDepends="ehCacheManager"
-               scope="APPLICATION"/>
-
-    <!-- Wiki cache manager backend -->
-    <component name="ehCacheManager"
-               class="org.jboss.seam.wiki.core.cache.EHCacheManager"
-               startup="true"
-               scope="APPLICATION"/>
-
-    <!-- Base path for links includes port number -->
-    <factory name="basePath" scope="CONVERSATION"  auto-create="true"
-             value="#{facesContext.externalContext.request.scheme}://#{facesContext.externalContext.request.serverName
-                     }:#{facesContext.externalContext.request.serverPort}#{facesContext.externalContext.request.contextPath}"/>
-
-    <factory name="themePathGetRequest" scope="CONVERSATION"  auto-create="true"
-             value="#{servletContexts.request.scheme}://#{servletContexts.request.serverName
-                     }:#{servletContexts.request.serverPort}#{servletContexts.request.contextPath}/themes/#{preferences.get('Wiki').themeName}"/>
-
     <!-- Some DBUnit datasets we use in unit testing - let's also use them in dev mode when the app is deployed -->
     <component name="dbunitImporter" class="org.jboss.seam.wiki.util.DBUnitImporter" scope="APPLICATION" auto-create="true">
         <property name="database">mysql</property>

Modified: trunk/examples/wiki/src/etc/META-INF/components-prod.xml
===================================================================
--- trunk/examples/wiki/src/etc/META-INF/components-prod.xml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/META-INF/components-prod.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -47,25 +47,4 @@
                                         persistence-unit-name="wiki"
                                         startupDepends="ehCacheManager"/>
 
-    <!-- Wiki page fragment cache, relies on cache manager backend -->
-    <component name="pageFragmentCache"
-               class="org.jboss.seam.wiki.core.cache.PageFragmentCache"
-               startup="true" startupDepends="ehCacheManager"
-               scope="APPLICATION"/>
-
-    <!-- Wiki cache manager backend -->
-    <component name="ehCacheManager"
-               class="org.jboss.seam.wiki.core.cache.EHCacheManager"
-               startup="true"
-               scope="APPLICATION"/>
-
-    <!-- Base path for links includes port number -->
-    <factory name="basePath" scope="CONVERSATION"  auto-create="true"
-             value="#{facesContext.externalContext.request.scheme}://#{facesContext.externalContext.request.serverName
-                     }:#{facesContext.externalContext.request.serverPort}#{facesContext.externalContext.request.contextPath}"/>
-
-    <factory name="themePathGetRequest" scope="CONVERSATION"  auto-create="true"
-             value="#{servletContexts.request.scheme}://#{servletContexts.request.serverName
-                     }:#{servletContexts.request.serverPort}#{servletContexts.request.contextPath}/themes/#{preferences.get('Wiki').themeName}"/>
-
 </components>

Modified: trunk/examples/wiki/src/etc/META-INF/components-test.xml
===================================================================
--- trunk/examples/wiki/src/etc/META-INF/components-test.xml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/META-INF/components-test.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -44,13 +44,4 @@
     <core:init debug="false" jndi-pattern="#{ejbName}/local"/>
     <transaction:ejb-transaction/>
 
-    <!-- Base path for links includes port number -->
-    <factory name="basePath" scope="CONVERSATION"  auto-create="true"
-             value="#{facesContext.externalContext.request.scheme}://#{facesContext.externalContext.request.serverName
-                     }:#{facesContext.externalContext.request.serverPort}#{facesContext.externalContext.request.contextPath}"/>
-
-    <factory name="themePathGetRequest" scope="CONVERSATION"  auto-create="true"
-             value="#{servletContexts.request.scheme}://#{servletContexts.request.serverName
-                     }:#{servletContexts.request.serverPort}#{servletContexts.request.contextPath}/themes/#{preferences.get('Wiki').themeName}"/>
-
 </components>

Modified: trunk/examples/wiki/src/etc/META-INF/seam-deployment.properties
===================================================================
--- trunk/examples/wiki/src/etc/META-INF/seam-deployment.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/META-INF/seam-deployment.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1 +1,2 @@
-org.jboss.seam.deployment.annotationTypes=org.jboss.seam.wiki.preferences.annotations.Preferences:org.jboss.seam.wiki.core.template.WikiDocumentTemplate
\ No newline at end of file
+org.jboss.seam.deployment.annotationTypes=org.jboss.seam.wiki.preferences.annotations.Preferences:org.jboss.seam.wiki.core.template.WikiDocumentTemplate
+org.jboss.seam.deployment.deploymentHandlers=org.jboss.seam.wiki.core.plugin.binding.lacewiki.PluginDeploymentHandler:org.jboss.seam.wiki.core.plugin.binding.lacewiki.PluginI18NDeploymentHandler
\ No newline at end of file

Modified: trunk/examples/wiki/src/etc/META-INF/wiki.taglib.xml
===================================================================
--- trunk/examples/wiki/src/etc/META-INF/wiki.taglib.xml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/META-INF/wiki.taglib.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -154,12 +154,20 @@
         <tag-name>formattedText</tag-name>
 		<handler-class>org.jboss.seam.wiki.core.ui.WikiFormattedTextHandler</handler-class> 
     </tag>
-    
+
     <tag>
+        <tag-name>loadStyle</tag-name>
+        <component>
+            <component-type>org.ajax4jsf.component.html.HtmlLoadStyle</component-type>
+        </component>
+    </tag>
+
+    <!-- Map it to a <wiki:plugin> tag because <wiki:macro> sounds too complicated... -->
+    <tag>
     	<tag-name>plugin</tag-name>
     	<component>
-    		<component-type>org.jboss.seam.wiki.core.ui.UIPlugin</component-type>
-    		<handler-class>org.jboss.seam.wiki.core.ui.PluginComponentHandler</handler-class> 
+    		<component-type>org.jboss.seam.wiki.core.ui.UIMacro</component-type>
+    		<handler-class>org.jboss.seam.wiki.core.ui.MacroComponentHandler</handler-class>
     	</component>
     </tag>
 

Modified: trunk/examples/wiki/src/etc/WEB-INF/components.xml
===================================================================
--- trunk/examples/wiki/src/etc/WEB-INF/components.xml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/WEB-INF/components.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -6,6 +6,7 @@
             xmlns:web="http://jboss.com/products/seam/web"
             xmlns:mail="http://jboss.com/products/seam/mail"
             xmlns:transaction="http://jboss.com/products/seam/transaction"
+            xmlns:ui="http://jboss.com/products/seam/ui"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation=
                 "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.1.xsd
@@ -21,6 +22,8 @@
                   conversation-timeout="1200000"
                   conversation-id-parameter="cid"/>
 
+    <!-- Persistence stuff -->
+
     <persistence:filter name="accessLevelFilter">
         <persistence:name>accessLevelFilter</persistence:name>
         <persistence:parameters>
@@ -54,6 +57,7 @@
                                       persistence-unit-jndi-name="java:/entityManagerFactories/wiki">
     </persistence:managed-persistence-context>
 
+    <!--
     <component name="restrictedEntityConverter" scope="CONVERSATION" precedence="20"
                class="org.jboss.seam.ui.converter.EntityConverter">
         <property name="entityManager">#{restrictedEntityManager}</property>
@@ -68,40 +72,42 @@
                class="org.jboss.seam.wiki.core.nestedset.ui.NestedSetNodeWrapperEntityConverter">
         <property name="entityManager">#{restrictedEntityManager}</property>
     </component>
+    -->
 
+    <ui:entity-converter name="entityConverter"
+                         scope="CONVERSATION" precedence="20" entity-loader="#{regularEntityLoader}"/>
+    <ui:entity-loader name="regularEntityLoader" entity-manager="#{entityManager}"/>
+
+    <ui:entity-converter name="restrictedEntityConverter"
+                         scope="CONVERSATION" precedence="20" entity-loader="#{restrictedEntityLoader}"/>
+    <ui:entity-loader name="restrictedEntityLoader" entity-manager="#{restrictedEntityManager}"/>
+
+    <ui:entity-converter name="nestedSetNodeWrapperRestrictedEntityConverter" 
+                         class="org.jboss.seam.wiki.core.nestedset.ui.NestedSetNodeWrapperEntityConverter"
+                         scope="CONVERSATION" precedence="20" entity-loader="#{restrictedEntityLoader}"/>
+
     <!-- Login and security -->
 
     <security:identity authenticate-method="#{authenticator.authenticate}"
                        remember-me="false"/>
 
-    <!-- Plugin i18n resources
-        TODO: This could be made dynamic with a custom ResourceLoader?
-    -->
+    <!-- Caching -->
 
-    <core:resource-loader>
-        <core:bundle-names>
-            <value>i18n.messages</value>
-            <value>i18n.messages_blogDirectory</value>
-            <value>i18n.messages_blogArchive</value>
-            <value>i18n.messages_blogRecentEntries</value>
-            <value>i18n.messages_dirMenu</value>
-            <value>i18n.messages_feedTeasers</value>
-            <value>i18n.messages_lastModifiedDocuments</value>
-            <value>i18n.messages_tags</value>
-            <value>i18n.messages_userProfile</value>
-            <value>i18n.messages_forum</value>
-            <value>i18n.messages_flash</value>
-            <value>i18n.messages_docPager</value>
-            <value>i18n.messages_faqBrowser</value>
-            <value>i18n.messages_jiraIssueList</value>
-            <value>i18n.messages_jiraConnector</value>
-            <value>i18n.messages_feedAggregator</value>
-            <value>i18n.messages_feedConnector</value>
-            <value>i18n.messages_forumTopPosters</value>
-            <value>i18n.messages_dirToc</value>
-        </core:bundle-names>
-    </core:resource-loader>
+    <component name="ehCacheManager"
+               class="org.jboss.seam.wiki.core.cache.EHCacheManager"
+               startup="true"
+               scope="APPLICATION"/>
 
+    <component name="pageFragmentCache"
+               class="org.jboss.seam.wiki.core.cache.PageFragmentCache"
+               startup="true" startupDepends="ehCacheManager pluginRegistry"
+               scope="APPLICATION">
+        <property name="cacheRegions">
+            <value>wiki.MainMenu</value>
+            <value>wiki.Breadcrumb</value>
+        </property>
+    </component>
+
     <!-- Misc Settings -->
 
     <web:context-filter regex-url-pattern="/(service|servlets)/.+"/>
@@ -124,8 +130,23 @@
         </property>
     </component>
 
-    <factory name="themePath" scope="CONVERSATION" value="#{basePath}/themes/#{preferences.get('Wiki').themeName}"/>
+    <!-- Some convenience value factories -->
 
+    <factory name="contextPath" scope="CONVERSATION"  auto-create="true"
+             value="#{facesContext.externalContext.request.contextPath}"/>
+
+    <factory name="themePathGetRequest" scope="CONVERSATION"  auto-create="true"
+             value="#{servletContexts.request.contextPath}/themes/#{currentTheme}"/>
+
+    <factory name="themePath" scope="CONVERSATION" auto-create="true"
+             value="#{facesContext.externalContext.request.contextPath}/themes/#{currentTheme}"/>
+
+    <factory name="imagePath" scope="CONVERSATION" auto-create="true"
+             value="/themes/#{currentTheme}/img"/>
+
+    <factory name="currentTheme" scope="CONVERSATION" auto-create="true"
+             value="#{preferences.get('Wiki').themeName}"/>
+
     <factory name="skin" scope="SESSION" value="d"/>
 
     <factory name="sessionTimeoutSeconds" scope="SESSION"

Modified: trunk/examples/wiki/src/etc/WEB-INF/faces-config.xml
===================================================================
--- trunk/examples/wiki/src/etc/WEB-INF/faces-config.xml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/WEB-INF/faces-config.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -10,10 +10,16 @@
 
     <!-- Needed because WikiFormattedTextHandler instantiates these, asking the JSF infrastructure -->
     <component>
-        <component-type>org.jboss.seam.wiki.core.ui.UIPlugin</component-type>
-        <component-class>org.jboss.seam.wiki.core.ui.UIPlugin</component-class>
+        <component-type>org.jboss.seam.wiki.core.ui.UIMacro</component-type>
+        <component-class>org.jboss.seam.wiki.core.ui.UIMacro</component-class>
     </component>
 
+    <!-- We map this to <wiki:loadStyle src="..."/> in Facelets -->
+    <component>
+        <component-type>org.ajax4jsf.component.html.HtmlLoadStyle</component-type>
+        <component-class>org.ajax4jsf.component.html.HtmlLoadStyle</component-class>
+    </component>
+
     <!-- Custom renderer implementation for s:cache page fragment caching -->
     <render-kit>
         <render-kit-id>HTML_BASIC</render-kit-id>

Modified: trunk/examples/wiki/src/etc/WEB-INF/pages.xml
===================================================================
--- trunk/examples/wiki/src/etc/WEB-INF/pages.xml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/WEB-INF/pages.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -21,19 +21,6 @@
 
     <page view-id="/docDisplay*">
         <param name="documentId" value="#{documentHome.nodeId}"/>
-        <navigation>
-            <rule if-outcome="redirectToDocument">
-                <redirect view-id="/wiki.xhtml">
-                    <param name="nodeId" value="#{documentHome.instance.id}"/>
-                </redirect>
-            </rule>
-            <rule if-outcome="redirectToDocumentNoConversation">
-                <redirect url="#{wikiURLRenderer.renderURL(documentHome.instance)}"/>
-            </rule>
-            <rule if-outcome="redirectToComment">
-                <redirect url="#{wikiURLRenderer.renderURL(documentHome.instance)}#comment#{commentHome.instance.id}"/>
-            </rule>
-        </navigation>
     </page>
 
     <page view-id="/docHistory*" no-conversation-view-id="/wiki.xhtml">
@@ -351,7 +338,7 @@
 
     <exception class="org.jboss.seam.security.AuthorizationException">
         <end-conversation/>
-        <redirect view-id="/wiki.xhtml">
+        <redirect view-id="/message.xhtml">
             <message severity="WARN">#{messages['lacewiki.msg.AccessDenied']}: #{org.jboss.seam.handledException.message}</message>
         </redirect>
     </exception>

Modified: trunk/examples/wiki/src/etc/WEB-INF/web.xml
===================================================================
--- trunk/examples/wiki/src/etc/WEB-INF/web.xml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/WEB-INF/web.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -55,6 +55,11 @@
         <param-value>true</param-value>
     </context-param>
 
+    <context-param>
+        <param-name>facelets.RESOURCE_RESOLVER</param-name>
+        <param-value>org.jboss.seam.wiki.core.ui.WikiFaceletsResourceResolver</param-value>
+    </context-param>
+
     <!-- JSF -->
 
     <context-param>
@@ -62,6 +67,21 @@
        <param-value>.xhtml</param-value>
     </context-param>
 
+    <context-param>
+        <param-name>com.sun.faces.numberOfViewsInSession</param-name>
+        <param-value>3</param-value>
+    </context-param>
+
+    <context-param>
+        <param-name>com.sun.faces.numberOfLogicalViews</param-name>
+        <param-value>3</param-value>
+    </context-param>
+
+    <context-param>
+        <param-name>com.sun.faces.responseBufferSize</param-name>
+        <param-value>32768</param-value>
+    </context-param>
+
     <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

Modified: trunk/examples/wiki/src/etc/ehcache.xml
===================================================================
--- trunk/examples/wiki/src/etc/ehcache.xml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/ehcache.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -79,8 +79,8 @@
     <defaultCache
             maxElementsInMemory="10000"
             eternal="false"
-            timeToIdleSeconds="120"
-            timeToLiveSeconds="120"
+            timeToIdleSeconds="600"
+            timeToLiveSeconds="600"
             overflowToDisk="false"
             memoryStoreEvictionPolicy="LRU"
             />

Deleted: trunk/examples/wiki/src/etc/i18n/messages_blogDirectory_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_blogDirectory_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_blogDirectory_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,21 +0,0 @@
-blog.preferences.Name=Plugin: Blog
-blog.preferences.PageSize=Number of blog entries per page
-blog.preferences.ArchiveSubscribeIcon=Show feed subscribe icon on archive
-blog.preferences.RecentEntriesItems=Number of recent entries shown
-blog.preferences.RecentEntriesTruncateTitle=Truncate recent entries title after characters
-blog.preferences.RecentEntriesSubscribeIcon=Show feed subscribe icon on recent entries
-
-blogDirectory.label.Attachment=attachment
-blogDirectory.label.Attachments=attachments
-blogDirectory.label.Showing=Showing
-blogDirectory.label.To=to
-blogDirectory.label.Of=of
-blogDirectory.label.BlogEntries=blog entries
-blogDirectory.label.In=in
-blogDirectory.label.Tagged=tagged
-blogDirectory.label.NoBlogEntriesFound=No blog entries found.
-blogDirectory.label.Tag=Tag
-blogDirectory.label.Tags=Tags
-
-blogDirectory.label.template.BlogEntry=Weblog Entry
-blogDirectory.label.template.NewBlogEntryTitle=My weblog entry title...

Deleted: trunk/examples/wiki/src/etc/i18n/messages_dirMenu_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_dirMenu_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_dirMenu_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,9 +0,0 @@
-dirMenu.preferences.Name=Plugin: Directory Menu
-
-dirMenu.preferences.Title=Default menu title
-dirMenu.preferences.MenuLevels=Flatten display of menu tree to levels
-dirMenu.preferences.MenuDepth=Maximum depth of menu items
-dirMenu.preferences.ShowSubscribeIcon=Show 'Subscribe' icon
-dirMenu.preferences.OnlyMenuItems=Display only menu items
-
-dirMenu.label.Subscribe=Subscribe

Deleted: trunk/examples/wiki/src/etc/i18n/messages_dirToc_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_dirToc_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_dirToc_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,8 +0,0 @@
-dirToc.preferences.Name=Plugin: Directory TOC
-dirToc.preferences.ShowRootDocuments=Show documents of root directory
-dirToc.preferences.ShowDefaultDocuments=Show default documents of all directories
-dirToc.preferences.ShowLastUpdatedTimestamp=Show 'Last Updated' timestamp
-dirToc.preferences.WithHeaderMacro=Only show documents with macro in header
-dirToc.preferences.RootDocumentLink=Wiki link to root document of TOC
-
-dirToc.label.LastUpdated=Last Updated

Deleted: trunk/examples/wiki/src/etc/i18n/messages_docPager_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_docPager_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_docPager_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,3 +0,0 @@
-docPager.preferences.Name=Plugin: Doc Pager
-docPager.preferences.ByProperty=Property used to search previous/next doc
-docPager.preferences.ShowNames=Show names of previous/next document

Modified: trunk/examples/wiki/src/etc/i18n/messages_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -344,6 +344,8 @@
 lacewiki.button.adminHome.SystemStatistics.accesskey=Y
 lacewiki.button.adminHome.RolesPermissions=R<u>o</u>les &amp; Permissions
 lacewiki.button.adminHome.RolesPermissions.accesskey=O
+lacewiki.button.adminHome.Plugins=Pl<u>u</u>gins
+lacewiki.button.adminHome.Plugins.accesskey=U
 lacewiki.button.adminHome.LinkProtocols=<u>L</u>ink Protocols
 lacewiki.button.adminHome.LinkProtocols.accesskey=L
 lacewiki.button.adminHome.Preferences=P<u>r</u>eferences
@@ -359,7 +361,30 @@
 lacewiki.label.adminHome.TargetLink=Target Link
 lacewiki.label.adminHome.TargetWithPlaceHolder=Target with [[link]] placeholder
 lacewiki.label.adminHome.NotAvailableForSkin=Administration is not available with this skin.
+lacewiki.label.adminHome.plugins.InstalledPlugins=Installed Plugins
+lacewiki.label.adminHome.plugins.NoPluginsInstalled=No plugins installed.
+lacewiki.label.adminHome.plugins.PleaseSelectInstalledPlugin=Please select an installed plugin for more information.
+lacewiki.label.adminHome.plugins.PluginName=Plugin name
+lacewiki.label.adminHome.plugins.Description=Description
+lacewiki.label.adminHome.plugins.Version=Version
+lacewiki.label.adminHome.plugins.Vendor=Vendor
+lacewiki.label.adminHome.plugins.Module=Module
+lacewiki.label.adminHome.plugins.ModuleType=Type
+lacewiki.label.adminHome.plugins.ModuleName=Name
+lacewiki.label.adminHome.plugins.ModuleDescription=Description
+lacewiki.label.adminHome.plugins.ModuleDetails=Plugin module details
+lacewiki.label.adminHome.plugins.Modules=module(s)...
+lacewiki.label.adminHome.plugins.FragmentCacheRegions=Fragment cache regions
+lacewiki.label.adminHome.plugins.macro.Name=Macro
+lacewiki.label.adminHome.plugins.macro.Skins=Available in skins
+lacewiki.label.adminHome.plugins.macro.ApplicableToArea=Applicable to area
+lacewiki.label.adminHome.plugins.macro.RenderOptions=Render options
+lacewiki.label.adminHome.plugins.macro.RenderDependencies=Render dependencies
 
+
+
+
+
 # User Home
 
 lacewiki.label.userHome.MemberAccount=Member Account

Deleted: trunk/examples/wiki/src/etc/i18n/messages_faqBrowser_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_faqBrowser_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_faqBrowser_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,20 +0,0 @@
-faqBrowser.label.Category=FAQ Category
-faqBrowser.label.Question=Question
-faqBrowser.label.Updated=Updated
-faqBrowser.label.NoQuestionsInCategory=No questions in this category.
-faqBrowser.button.NewQuestion=New <u>Q</u>uestion
-faqBrowser.button.NewQuestion.accesskey=Q
-
-faqBrowser.label.NewFaqQuestion=New question in category
-faqBrowser.label.NewQuestionTitle=Your question?
-faqBrowser.label.QuestionTitle=Question
-faqBrowser.label.QuestionText=Text
-faqBrowser.button.SaveNoKey=Save
-faqBrowser.button.CancelNoKey=Cancel
-
-faqBrowser.msg.Question.Persist=Question '{0}' has been saved.
-faqBrowser.msg.Question.Update=Question '{0}' has been updated.
-faqBrowser.msg.Question.Delete=Question '{0}' has been deleted.
-
-faqBrowser.msg.TreeNotFound=Could not find FAQ tree, please create a default document with [<=faqBrowser] header!
-faqBrowser.msg.TreeEmpty=No FAQ categories found, create subdirectories in the current directory.
\ No newline at end of file

Deleted: trunk/examples/wiki/src/etc/i18n/messages_feedAggregator_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_feedAggregator_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_feedAggregator_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,17 +0,0 @@
-feedAggregator.preferences.Name=Plugin: Feed Aggregator
-feedAggregator.preferences.Title=Title of aggregator box
-feedAggregator.preferences.Urls=URLs of feeds to aggregate, space separated
-feedAggregator.preferences.NumberOfFeedEntries=Number of feed entries
-feedAggregator.preferences.TruncateDescription=Truncate description text after characters
-feedAggregator.preferences.HideDate=Hide date display
-feedAggregator.preferences.HideAuthor=Hide author display
-feedAggregator.preferences.HideFeedInfo=Hide link to feed
-feedAggregator.preferences.HideDescription=Hide feed entry text
-feedAggregator.preferences.HideTitle=Hide feed entry title
-feedAggregator.preferences.AggregateId=Identifier for aggregate (enables subscription)
-
-feedAggregator.label.More=more...
-feedAggregator.label.By=by
-feedAggregator.label.On=on
-feedAggregator.label.Subscribe=Subscribe
-feedAggregator.label.NoEntriesFound=No feed entries found.
\ No newline at end of file

Deleted: trunk/examples/wiki/src/etc/i18n/messages_feedTeasers_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_feedTeasers_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_feedTeasers_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,9 +0,0 @@
-feedTeasers.preferences.Name=Plugin: Feed Teasers
-feedTeasers.preferences.Title=Title of teaser box
-feedTeasers.preferences.Feed=Feed
-feedTeasers.preferences.NumberOfTeasers=Number of feed entries
-feedTeasers.preferences.TruncateDescription=Truncate teaser text after characters
-feedTeasers.preferences.ShowAuthor=Show author name
-
-feedTeasers.label.More=more...
-feedTeasers.label.By=by

Deleted: trunk/examples/wiki/src/etc/i18n/messages_flash_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_flash_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_flash_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,8 +0,0 @@
-flash.preferences.Name=Plugin: Flash
-flash.preferences.FlashURL=URL of flash movie
-flash.preferences.Width=Width in pixels
-flash.preferences.Height=Height in pixels
-flash.preferences.AllowedDomains=Comma-separated list of allowed domain names
-
-flash.msg.URLNotSupplied=[Flash Macro: Add 'url' macro parameter to embed flash movie.]
-flash.msg.URLNotAllowed=[Flash Macro: The flash URL you supplied is not in the list of valid domains, please ask the system administrator to add it.]

Deleted: trunk/examples/wiki/src/etc/i18n/messages_forumTopPosters_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_forumTopPosters_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_forumTopPosters_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,12 +0,0 @@
-forumTopPosters.preferences.Name=Plugin: Forum Top Posters
-forumTopPosters.preferences.Title=Title of box
-forumTopPosters.preferences.NumberOfPosters=Number of posters in list
-forumTopPosters.preferences.ForumLink=Wiki link to forum start page (topic list)
-forumTopPosters.preferences.ExcludeRoles=Exclude users with role name (space separated)
-
-forumTopPosters.label.Position=Position
-forumTopPosters.label.User=User
-forumTopPosters.label.JoinedOn=Joined On
-forumTopPosters.label.RatingPoints=Rating Points
-
-forumTopPosters.label.NoPostersFound=No posters with rating points found.

Deleted: trunk/examples/wiki/src/etc/i18n/messages_forum_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_forum_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_forum_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,103 +0,0 @@
-forum.preferences.Name=Plugin: Forum
-forum.preferences.TopicsPerPage=Number of topics per page
-forum.preferences.NotifyMeOfReplies=Enable e-mail reply notification switch by default
-forum.preferences.NotificationMailingList=Send all topics/replies to this e-mail address (empty to disable)
-
-forum.label.Showing=Showing
-forum.label.To=to
-forum.label.Of=of
-forum.label.Topics=topics
-forum.label.Joined=Joined On
-
-forum.label.Forum=Forum
-forum.label.TopicCount=Topics
-forum.label.PostCount=Posts
-forum.label.NewestTopic=Newest Topic
-forum.label.LatestPost=Last Post
-forum.label.Feed=Feed
-forum.label.EnableFeed=Enable syndication feed (disabling invalidates subcriber link)
-
-forum.label.EditForum=Edit Forum
-forum.label.NewForum=New Forum
-
-forum.label.NewTopic=New Topic
-forum.label.Subject=Subject
-forum.label.Message=Message
-forum.label.Options=Options
-forum.label.OpenTopicAllowReplies=Open topic, allow replies
-forum.label.StickyPosting=Sticky posting
-forum.label.NotifyMeOfReplies=Notify me via e-mail of any replies
-
-forum.label.Reply=Reply
-forum.label.NewReply=New Reply
-forum.label.Replies=Replies
-
-forum.label.ForumName=Forum Name
-forum.label.ForumDescription=Description
-
-forum.msg.NoForumsFound=No forums found.
-
-forum.button.NewForum=<u>N</u>ew Forum
-forum.button.NewForum.accesskey=N
-forum.button.ManageForums=Mana<u>g</u>e Forums
-forum.button.ManageForums.accesskey=G
-
-forum.button.Edit=Edit
-forum.button.ResetFeed=Clear Feed
-forum.button.MoveUp=Move Up
-forum.button.MoveDown=Move Down
-forum.button.SaveNoKey=Save
-forum.button.Save=<u>S</u>ave
-forum.button.Save.accesskey=S
-forum.button.Update=<u>U</u>pdate
-forum.button.Update.accesskey=U
-forum.button.Remove=<u>D</u>elete
-forum.button.Remove.accesskey=Delete
-forum.button.CancelNoKey=Cancel
-forum.button.Cancel=<u>C</u>ancel
-forum.button.Cancel.accesskey=C
-forum.button.Exit=<u>E</u>xit
-forum.button.Exit.accesskey=E
-forum.button.NewTopic=<u>N</u>ew Topic
-forum.button.NewTopic.accesskey=N
-forum.button.ForumList=F<u>o</u>rum List
-forum.button.ForumList.accesskey=O
-forum.button.TopicList=<u>T</u>opic List
-forum.button.TopicList.accesskey=T
-forum.button.Reply=R<u>e</u>ply
-forum.button.Reply.accesskey=E
-forum.button.Reply.nokey=Reply
-forum.button.Quote=<u>Q</u>uote
-forum.button.Quote.accesskey=Q
-forum.button.Quote.nokey=Quote
-forum.button.RemoveReply=Remove
-forum.button.PreviousPosting=Pre<u>v</u>ious
-forum.button.PreviousPosting.accesskey=V
-forum.button.NextPosting=Ne<u>x</u>t
-forum.button.NextPosting.accesskey=X
-
-forum.label.replyForm.Name=Name
-forum.label.replyForm.Email=E-mail address (optional)
-forum.label.replyForm.Homepage=Homepage URL (optional)
-forum.label.replyForm.Subject=Subject
-forum.label.replyForm.Message=Message
-
-forum.label.WroteOn=wrote on
-forum.label.reply.FeedEntryTitlePrefix=Re:
-
-forum.msg.Feed.Create=Created syndication feed for this forum.
-forum.msg.Feed.Remove=Removed syndication feed of this forum.
-forum.msg.Feed.Reset=Queued removal of all feed entries from the syndication feed of this directory, please update to finalize.
-
-forum.msg.Forum.Persist=Forum '{0}' has been saved.
-forum.msg.Forum.Update=Forum '{0}' has been updated.
-forum.msg.Forum.Delete=Forum '{0}' has been deleted.
-
-forum.msg.Topic.Persist=Topic '{0}' has been saved.
-forum.msg.Topic.Update=Topic '{0}' has been updated.
-forum.msg.Topic.Delete=Topic '{0}' has been deleted.
-
-forum.msg.Reply.Persist=Reply '{0}' has been saved.
-forum.msg.Reply.Update=Reply '{0}' has been updated.
-forum.msg.Reply.Delete=Reply '{0}' has been deleted.
-

Deleted: trunk/examples/wiki/src/etc/i18n/messages_jiraIssueList_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_jiraIssueList_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_jiraIssueList_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,10 +0,0 @@
-jiraIssueList.preferences.Name=Plugin: JIRA Issue List
-jiraIssueList.preferences.Title=Title of isse list box
-jiraIssueList.preferences.Url=URL of JIRA website
-jiraIssueList.preferences.Username=JIRA XML-RPC remote username
-jiraIssueList.preferences.Password=JIRA XML-RPC remote password
-jiraIssueList.preferences.FilterId=ID of JIRA filter for remote request
-jiraIssueList.preferences.NumberOfIssues=Number of issues shown in list
-jiraIssueList.preferences.TruncateSummary=Truncate summary after characters
-
-jiraIssueList.label.NoIssuesFound=No issues found.

Deleted: trunk/examples/wiki/src/etc/i18n/messages_lastModifiedDocuments_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_lastModifiedDocuments_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_lastModifiedDocuments_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,6 +0,0 @@
-lastModifiedDocuments.preferences.Name=Plugin: Last Modified Documents
-lastModifiedDocuments.preferences.Title=Title of plugin box
-lastModifiedDocuments.preferences.NumberOfItems=Number of items shown in list
-lastModifiedDocuments.preferences.ShowUsernames=Show user names
-lastModifiedDocuments.preferences.DocumentTitleLength=Truncate document titles after characters
-

Deleted: trunk/examples/wiki/src/etc/i18n/messages_tags_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_tags_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_tags_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,8 +0,0 @@
-tags.preferences.Name=Plugin: Tags
-tags.preferences.LinkToCurrentDocument=Link to current (aggregator) document
-tags.preferences.MaxNumberOfTags=Maximum number of tags displayed
-tags.preferences.MinimumCount=Minimum number of occurences of a tag
-tags.preferences.Cloud=Display tags as cloud (not list)
-
-tags.label.Tags=Tags
-tags.label.All=All...

Deleted: trunk/examples/wiki/src/etc/i18n/messages_userProfile_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/i18n/messages_userProfile_en.properties	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/etc/i18n/messages_userProfile_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1 +0,0 @@
-userProfile.label.NoProfile=If you are #{currentDocument.createdBy.fullname}, please login and edit your profile.

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/WikiInit.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/WikiInit.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/WikiInit.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -21,7 +21,7 @@
 import java.util.Properties;
 
 /**
- * Doesn't do much useful stuff except printing a log message and firing the "Wiki.started" event.
+ * Doesn't do much useful stuff except printing a log message and firing the "Wiki.startup" event.
  *
  * @author Christian Bauer
  */
@@ -59,7 +59,7 @@
             ManagementFactory.getPlatformMBeanServer().registerMBean(mBean, hibernateMBeanName);
         }
         
-        Events.instance().raiseEvent("Wiki.started");
+        Events.instance().raiseEvent("Wiki.startup");
 
         log.info("Started LaceWiki for application '"+appname+"'...");
 
@@ -74,6 +74,7 @@
             log.info("unregistering Hibernate statistics MBean");
             ManagementFactory.getPlatformMBeanServer().unregisterMBean(hibernateMBeanName);
         }
+
         log.info("Stopped LaceWiki for application '"+appname+"'...");
     }
 

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/AdminHome.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/AdminHome.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/AdminHome.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -24,6 +24,8 @@
 import org.jboss.seam.wiki.core.search.IndexManager;
 import org.jboss.seam.wiki.core.search.metamodel.SearchRegistry;
 import org.jboss.seam.wiki.core.search.metamodel.SearchableEntity;
+import org.jboss.seam.wiki.core.plugin.PluginRegistry;
+import org.jboss.seam.wiki.core.plugin.metamodel.Plugin;
 import org.jboss.seam.wiki.preferences.metamodel.PreferenceEntity;
 import org.jboss.seam.wiki.preferences.PreferenceVisibility;
 import org.jboss.seam.wiki.util.Progress;
@@ -198,4 +200,24 @@
         if (indexingProgressMonitors != null) indexingProgressMonitors.remove(className);
     }
 
+    // ####################### PLUGINS ##################################
+
+    @In
+    private PluginRegistry pluginRegistry;
+
+    private List<Plugin> installedPlugins;
+    private Plugin selectedInstalledPlugin;
+
+    public List<Plugin> getInstalledPlugins() {
+        if (installedPlugins == null) installedPlugins = pluginRegistry.getPlugins();
+        return installedPlugins;
+    }
+
+    public void selectInstalledPlugin(Plugin selectedPlugin) {
+        selectedInstalledPlugin = selectedPlugin;
+    }
+
+    public Plugin getSelectedInstalledPlugin() {
+        return selectedInstalledPlugin;
+    }
 }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -7,10 +7,8 @@
 package org.jboss.seam.wiki.core.action;
 
 import org.jboss.seam.Component;
-import org.jboss.seam.annotations.Factory;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Logger;
-import org.jboss.seam.annotations.Name;
+import org.jboss.seam.web.ServletContexts;
+import org.jboss.seam.annotations.*;
 import org.jboss.seam.contexts.Contexts;
 import org.jboss.seam.core.Events;
 import org.jboss.seam.log.Log;
@@ -22,6 +20,7 @@
 import org.jboss.seam.wiki.core.renderer.MacroWikiTextRenderer;
 import org.jboss.seam.wiki.core.renderer.WikiURLRenderer;
 import org.jboss.seam.wiki.core.model.*;
+import org.jboss.seam.wiki.core.model.Role;
 import org.jboss.seam.wiki.util.Hash;
 import org.jboss.seam.wiki.util.WikiUtil;
 
@@ -196,4 +195,13 @@
         Contexts.getSessionContext().set("currentAccessLevel", Role.GUESTROLE_ACCESSLEVEL);
     }
 
+    @Observer("org.jboss.seam.security.loginSuccessful")
+    public void extendSessionTime() {
+        //ServletContexts.getInstance().getRequest().getSession().setMaxInactiveInterval(LONG_SESSION_TIME);
+    }
+
+    @Observer("org.jboss.seam.security.loggedOut")
+    public void resetSessionTime() {
+        //ServletContexts.getInstance().getRequest().getSession().setMaxInactiveInterval(STD_SESSION_TIME);
+    }
 }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Breadcrumb.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Breadcrumb.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Breadcrumb.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -7,6 +7,7 @@
 import org.jboss.seam.security.Identity;
 import org.jboss.seam.wiki.core.model.WikiDirectory;
 import org.jboss.seam.wiki.core.model.WikiNode;
+import org.jboss.seam.wiki.core.cache.PageFragmentCache;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -17,6 +18,9 @@
 @Scope(ScopeType.PAGE)
 public class Breadcrumb implements Serializable {
 
+    public static final String CACHE_REGION = "wiki.Breadcrumb";
+    public static final String CACHE_KEY = "BreadcrumbOfNodeId";
+
     @Logger
     Log log;
 
@@ -50,4 +54,24 @@
         return (node.isInstance(WikiDirectory.class) && node.getId().equals(((WikiDirectory) Component.getInstance("wikiRoot")).getId()));
     }
 
+    public boolean isCacheEnabled() {
+        return false;
+        // TODO: Cache disabled, needs to consider year/month/day and tag request parameters in cache key
+        //return currentLocation != null;
+    }
+
+    public String getCacheKey() {
+        return currentLocation != null ? CACHE_KEY + currentLocation.getId().toString() : null;
+    }
+
+    public String getCacheRegion() {
+        return CACHE_REGION;
+    }
+
+    @Observer(value = { "Node.updated"})
+    public void invalidateCache(WikiNode node) {
+        log.debug("invalidating cached item: " + CACHE_KEY +node.getId());
+        PageFragmentCache.instance().remove(CACHE_REGION, CACHE_KEY +node.getId());
+    }
+
 }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -21,6 +21,7 @@
 import org.jboss.seam.wiki.core.model.*;
 import org.jboss.seam.wiki.core.action.prefs.CommentsPreferences;
 import org.jboss.seam.wiki.core.exception.InvalidWikiRequestException;
+import org.jboss.seam.wiki.core.ui.WikiRedirect;
 import org.jboss.seam.wiki.util.WikiUtil;
 
 import static javax.faces.application.FacesMessage.SEVERITY_INFO;
@@ -128,9 +129,14 @@
 
             Events.instance().raiseEvent("Comment.persisted");
             endConversation();
-            return "redirectToComment";
+            WikiRedirect.instance()
+                    .setWikiDocument(documentHome.getInstance())
+                    .setPropagateConversation(false)
+                    .setFragment("comment" + getInstance().getId())
+                    .execute();
         }
-        return null; // Prevent navigation
+
+        return null; // No navigation
     }
 
     public String remove(Long commentId) {
@@ -273,36 +279,42 @@
     }
 
     @Begin(flushMode = FlushModeType.MANUAL, join = true)
-    public String newComment() {
+    public void newComment() {
         initEditor(false);
         showForm = true;
-        return "redirectToDocument";
     }
 
     @Begin(flushMode = FlushModeType.MANUAL, join = true)
-    public String replyTo() {
+    public void replyTo() {
+        prepareReply();
+        WikiRedirect.instance()
+                .setWikiDocument(documentHome.getInstance())
+                .setPropagateConversation(true)
+                .execute();
+    }
+
+    @Begin(flushMode = FlushModeType.MANUAL, join = true)
+    public void quote() {
+        prepareReply();
+        setQuotedContent((WikiComment)getParentNode());
+        WikiRedirect.instance()
+                .setWikiDocument(documentHome.getInstance())
+                .setPropagateConversation(true)
+                .execute();
+    }
+
+    private void prepareReply() {
         if (parentCommentId == null || parentCommentId.equals(0l))
             throw new InvalidWikiRequestException("Missing parentCommentId request parameter");
 
         getLog().debug("reply to comment id: " + parentCommentId);
-        String outcome = newComment();
+        newComment();
 
         setParentNodeId(parentCommentId);
         getInstance(); // Init the parent
         setReplySubject((WikiComment)getParentNode());
-
-        return outcome;
     }
 
-    @Begin(flushMode = FlushModeType.MANUAL, join = true)
-    public String quote() {
-
-        String outcome = replyTo();
-        setQuotedContent((WikiComment)getParentNode());
-
-        return outcome;
-    }
-
     public void rate(Long commentId, int rating) {
 
         getLog().debug("rating comment with id: " + commentId + " as " + rating);
@@ -328,12 +340,16 @@
             }
 
             getInstance().setRating(rating);
+            Events.instance().raiseEvent("Comment.rated");
         }
     }
 
-    public String cancel() {
+    public void cancel() {
         endConversation();
-        return "redirectToDocumentNoConversation";
+        WikiRedirect.instance()
+                .setWikiDocument(documentHome.getInstance())
+                .setPropagateConversation(false)
+                .execute();
     }
 
     @RequestParameter("showCommentForm")

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryBrowser.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryBrowser.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryBrowser.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -205,13 +205,13 @@
         refreshChildNodes();
     }
 
-    @Observer(value = {"PersistenceContext.filterReset", "Node.refreshList"}, create = false)
+    @Observer(value = {"PersistenceContext.filterReset", "Node.removed"}, create = false)
     public void loadTree() {
         WikiDirectory wikiRoot = (WikiDirectory) Component.getInstance("wikiRoot");
         treeRoot = wikiNodeDAO.findWikiDirectoryTree(wikiRoot);
     }
 
-    @Observer(value = {"PersistenceContext.filterReset", "Node.refreshList", "Pager.pageChanged"}, create = false)
+    @Observer(value = {"PersistenceContext.filterReset", "Node.removed", "Pager.pageChanged"}, create = false)
     public void refreshChildNodes() {
 
         log.debug("refreshing child nodes of current directory: " + getInstance());

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DocumentHome.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DocumentHome.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DocumentHome.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -121,7 +121,7 @@
 
         tagEditor.setTags(doc.getTags());
 
-        doc.setEnableComments( Preferences.getInstance(CommentsPreferences.class).getEnableByDefault() );
+        doc.setEnableComments( Preferences.instance().get(CommentsPreferences.class).getEnableByDefault() );
 
         return doc;
     }
@@ -222,7 +222,7 @@
         // Feeds should not be removed by a maintenance thread: If there
         // is no activity on the site, feeds shouldn't be empty but show the last updates.
         Calendar oldestDate = GregorianCalendar.getInstance();
-        oldestDate.add(Calendar.DAY_OF_YEAR, -Preferences.getInstance(WikiPreferences.class).getPurgeFeedEntriesAfterDays().intValue());
+        oldestDate.add(Calendar.DAY_OF_YEAR, -Preferences.instance().get(WikiPreferences.class).getPurgeFeedEntriesAfterDays().intValue());
         feedDAO.purgeOldFeedEntries(oldestDate.getTime());
 
         // Write history log and prepare a new copy for further modification
@@ -239,7 +239,7 @@
             historicalCopy.flatCopy(getInstance(), true);
 
             // Reset form
-            setMinorRevision( Preferences.getInstance(DocumentEditorPreferences.class).getMinorRevisionEnabled() );
+            setMinorRevision( Preferences.instance().get(DocumentEditorPreferences.class).getMinorRevisionEnabled() );
         }
 
         return true;
@@ -385,7 +385,7 @@
     public boolean isMinorRevision() {
         // Lazily initalize preferences
         if (minorRevision == null)
-            minorRevision = Preferences.getInstance(DocumentEditorPreferences.class).getMinorRevisionEnabled();
+            minorRevision = Preferences.instance().get(DocumentEditorPreferences.class).getMinorRevisionEnabled();
         return minorRevision;
     }
     public void setMinorRevision(boolean minorRevision) { this.minorRevision = minorRevision; }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -13,6 +13,7 @@
 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.cache.PageFragmentCache;
 
 import java.io.Serializable;
 
@@ -27,6 +28,9 @@
 @Scope(ScopeType.SESSION)
 public class Menu implements Serializable {
 
+    public static final String CACHE_REGION = "wiki.MainMenu";
+    public static final String CACHE_KEY = "MainMenuForAccessLevel";
+
     @Logger
     Log log;
 
@@ -39,6 +43,9 @@
     @In("#{preferences.get('Wiki')}")
     WikiPreferences wikiPreferences;
 
+    @In
+    Integer currentAccessLevel;
+
     NestedSetNodeWrapper<WikiDirectory> root;
     public NestedSetNodeWrapper<WikiDirectory> getRoot() {
         if (root == null) {
@@ -57,4 +64,18 @@
                 wikiPreferences.isMainMenuShowAdminOnly()
         );
     }
+
+    public String getCacheRegion() {
+        return CACHE_REGION;
+    }
+
+    public String getCacheKey() {
+        return CACHE_KEY + currentAccessLevel;
+    }
+
+    @Observer(value = { "Node.updated", "Node.removed"})
+    public void invalidateCache() {
+        PageFragmentCache.instance().removeAll(CACHE_REGION);
+    }
+
 }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -92,7 +92,7 @@
         if (visibleWorkspace) {
             // Set workspace description of the current conversation
             String desc = getEditorWorkspaceDescription(getNodeId() == null);
-            WikiPreferences prefs = Preferences.getInstance(WikiPreferences.class);
+            WikiPreferences prefs = Preferences.instance().get(WikiPreferences.class);
             if (desc != null && desc.length() > prefs.getWorkspaceSwitcherDescriptionLength()) {
                 desc = desc.substring(0, prefs.getWorkspaceSwitcherDescriptionLength().intValue()) + "...";
             }
@@ -236,6 +236,7 @@
         String outcome = super.persist();
         if (outcome != null) {
             Events.instance().raiseEvent("PreferenceEditor.flushAll");
+            Events.instance().raiseEvent("Node.persisted", getInstance());
         }
         return outcome;
     }
@@ -261,7 +262,7 @@
         String outcome = super.update();
         if (outcome != null) {
             Events.instance().raiseEvent("PreferenceEditor.flushAll");
-            Events.instance().raiseEvent("Node.updated");
+            Events.instance().raiseEvent("Node.updated", getInstance());
         }
         return outcome;
     }
@@ -283,7 +284,7 @@
         getNodeRemover().removeDependencies(getInstance());
         String outcome = super.remove();
         if (outcome != null) {
-            Events.instance().raiseEvent("Node.removed");
+            Events.instance().raiseEvent("Node.removed", getInstance());
         }
         return outcome;
     }
@@ -294,7 +295,7 @@
         initEditor(false);
         String outcome = remove();
         if (outcome != null) {
-            Events.instance().raiseEvent("Node.refreshList");
+            Events.instance().raiseEvent("Node.removed", getInstance());
         }
         return outcome;
     }
@@ -310,7 +311,7 @@
         getEntityManager().flush();
         trashedMessage();
 
-        Events.instance().raiseEvent("Node.removed");
+        Events.instance().raiseEvent("Node.removed", getInstance());
         return "removed";
     }
 

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserHome.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserHome.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserHome.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -159,7 +159,11 @@
         if (Identity.instance().hasPermission("User", "isAdmin", Component.getInstance("currentUser"))) {
             // Current user is admin and creating a new account, the new account is active automatically
             getInstance().setActivated(true);
-            return super.persist();
+            String outcome = super.persist();
+            if (outcome != null) {
+                org.jboss.seam.core.Events.instance().raiseEvent("User.persisted", getInstance());
+            }
+            return outcome;
         } else {
 
             // Set activation code (unique user in time)
@@ -173,7 +177,7 @@
 
                     // Send confirmation email
                     renderer.render("/themes/"
-                            + Preferences.getInstance(WikiPreferences.class).getThemeName()
+                            + Preferences.instance().get(WikiPreferences.class).getThemeName()
                             + "/mailtemplates/confirmationRegistration.xhtml");
 
                     /* For debugging
@@ -187,6 +191,8 @@
                     facesMessages.add(FacesMessage.SEVERITY_ERROR, "Couldn't send confirmation email: " + ex.getMessage());
                     return "error";
                 }
+
+                org.jboss.seam.core.Events.instance().raiseEvent("User.persisted", getInstance());
             }
             return outcome;
         }
@@ -272,6 +278,8 @@
         String outcome = super.update();
         if (outcome != null) {
 
+            org.jboss.seam.core.Events.instance().raiseEvent("User.updated", getInstance());
+
             User currentUser = (User)Component.getInstance("currentUser");
             if (getInstance().getId().equals(currentUser.getId())) {
                 // Updated profile of currently logged-in user
@@ -301,7 +309,11 @@
         prefProvider.deleteUserPreferenceValues(getInstance());
         prefProvider.flush();
 
-        return super.remove();
+        String outcome = super.remove();
+        if (outcome != null) {
+            org.jboss.seam.core.Events.instance().raiseEvent("User.removed", getInstance());
+        }
+        return outcome;
     }
 
     @Restrict("#{s:hasPermission('User', 'edit', userHome.instance)}")

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserPasswordReset.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserPasswordReset.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserPasswordReset.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -124,7 +124,7 @@
 
             // Send confirmation email
             renderer.render("/themes/"
-                    + Preferences.getInstance(WikiPreferences.class).getThemeName()
+                    + Preferences.instance().get(WikiPreferences.class).getThemeName()
                     + "/mailtemplates/resetPassword.xhtml");
 
             facesMessages.addFromResourceBundleOrDefault(

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/cache/PageFragmentCache.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/cache/PageFragmentCache.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/cache/PageFragmentCache.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -11,6 +11,9 @@
 import net.sf.ehcache.Element;
 import org.jboss.seam.Component;
 import org.jboss.seam.ScopeType;
+import org.jboss.seam.wiki.core.plugin.PluginRegistry;
+import org.jboss.seam.wiki.core.plugin.metamodel.Plugin;
+import org.jboss.seam.wiki.core.plugin.metamodel.module.PluginModule;
 import org.jboss.seam.annotations.Create;
 import org.jboss.seam.annotations.intercept.BypassInterceptors;
 import org.jboss.seam.contexts.Contexts;
@@ -18,61 +21,102 @@
 import org.jboss.seam.log.Logging;
 
 import java.io.Serializable;
+import java.util.*;
 
 /**
  * Override Seam built-in pojoCache component with EHCache implementation.
+ * <p>
+ * This component creates cache regions on startup. The regions are obtained from the
+ * <tt>pluginRegistry</tt> and each plugin module. If desired, individual 
+ * </p>
  *
  * @author Christian Bauer
  */
-
 @BypassInterceptors
 public class PageFragmentCache {
 
     private static final LogProvider log = Logging.getLogProvider(PageFragmentCache.class);
 
-    public static final String CACHE_REGION_NAME = "WikiPageFragmentCache";
-
     // This is threadsafe
-    Cache cache;
+    Map<String, Cache> caches = new HashMap<String, Cache>();
 
+    List<String> cacheRegions;
+
+    public List<String> getCacheRegions() {
+        return cacheRegions;
+    }
+
+    public void setCacheRegions(List<String> cacheRegions) {
+        this.cacheRegions = cacheRegions;
+    }
+
     @Create
-    public void start() throws Exception {
+    public void startup() throws Exception {
 
-        log.info("starting wiki page fragment cache region");
+        log.info("starting wiki page fragment cache regions");
         try {
             CacheManager manager = EHCacheManager.instance();
 
-            cache = EHCacheManager.instance().getCache(CACHE_REGION_NAME);
-            if (cache == null) {
-                log.warn("Could not find configuration [" + CACHE_REGION_NAME + "]; using defaults.");
-                manager.addCache(CACHE_REGION_NAME);
-                cache = manager.getCache(CACHE_REGION_NAME);
-                log.debug("started EHCache region: " + CACHE_REGION_NAME);
+            Set<String> requiredCacheRegions = new HashSet<String>();
+
+            if (cacheRegions != null) {
+                requiredCacheRegions.addAll(cacheRegions);
             }
 
+            PluginRegistry pluginRegistry = PluginRegistry.instance();
+            for (Plugin plugin : pluginRegistry.getPlugins()) {
+                for (PluginModule pluginModule : plugin.getModules()) {
+                    if (pluginModule.getFragmentCacheRegions() != null)
+                        requiredCacheRegions.addAll(pluginModule.getFragmentCacheRegions());
+                }
+            }
+
+            for (String cacheRegion : requiredCacheRegions) {
+                Cache cache = EHCacheManager.instance().getCache(cacheRegion);
+                if (cache == null) {
+                    log.info("could not find configuration for region '" + cacheRegion + "', using defaults");
+                    manager.addCache(cacheRegion);
+                    cache = manager.getCache(cacheRegion);
+                    log.debug("started EHCache region: " + cacheRegion);
+                }
+                caches.put(cacheRegion, cache);
+            }
+
         } catch (Exception ex) {
             throw new RuntimeException(ex);
         }
     }
 
-    public void put(Serializable key, String content) {
-        cache.put(new Element(key, content));
+    public void put(String region, Serializable key, String content) {
+        if (!caches.containsKey(region))
+            throw new IllegalStateException("can't put into uninitialized cache region: " + region);
+        caches.get(region).put(new Element(key, content));
     }
 
-    public String get(Serializable key) {
-        Element result = cache.get(key);
+    public String get(String region, Serializable key) {
+        if (!caches.containsKey(region))
+            throw new IllegalStateException("can't get from uninitialized cache region: " + region);
+        Element result = caches.get(region).get(key);
         return result != null ? (String)result.getValue() : null;
     }
 
-    public void remove(Serializable key) {
-        cache.remove(key);
+    public void remove(String region, Serializable key) {
+        if (!caches.containsKey(region))
+            throw new IllegalStateException("can't remove from uninitialized cache region: " + region);
+        caches.get(region).remove(key);
     }
 
+    public void removeAll(String region) {
+        if (!caches.containsKey(region))
+            throw new IllegalStateException("can't remove all from uninitialized cache region: " + region);
+        caches.get(region).removeAll();
+    }
+
     public static PageFragmentCache instance() {
         if (!Contexts.isApplicationContextActive()) {
             throw new IllegalStateException("No active application scope");
         }
-        return (PageFragmentCache) Component.getInstance(PageFragmentCache.class, ScopeType.APPLICATION);
+        return (PageFragmentCache) Component.getInstance("pageFragmentCache", ScopeType.APPLICATION);
     }
 
 }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserRoleAccessFactory.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserRoleAccessFactory.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserRoleAccessFactory.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -86,7 +86,7 @@
 
     @Factory(value = "newUserDefaultRole", scope = ScopeType.SESSION)
     public Role getDefaultRole() {
-        UserManagementPreferences userPrefs = Preferences.getInstance(UserManagementPreferences.class);
+        UserManagementPreferences userPrefs = Preferences.instance().get(UserManagementPreferences.class);
         try {
             return (Role) entityManager
                     .createQuery("select r from Role r where r.name = '"+userPrefs.getNewUserInRole()+"'")

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -33,7 +33,7 @@
     @Logger
     Log log;
 
-    @Observer("Wiki.started")
+    @Observer("Wiki.startup")
     public void checkPreferences() {
         
         log.info("checking wiki preferences...");
@@ -77,7 +77,7 @@
         try {
             return (WikiDocument) em
                     .createQuery("select d from WikiDocument d where d.id = :id")
-                    .setParameter("id", Preferences.getInstance(WikiPreferences.class).getDefaultDocumentId())
+                    .setParameter("id", Preferences.instance().get(WikiPreferences.class).getDefaultDocumentId())
                     .setHint("org.hibernate.comment", "Loading wikiStart")
                     .setHint("org.hibernate.cacheable", false)
                     .getSingleResult();
@@ -87,7 +87,7 @@
 
         // TODO: Message instead!
         throw new RuntimeException("Couldn't find wiki default start document with id '"
-                + Preferences.getInstance(WikiPreferences.class).getDefaultDocumentId() +"'");
+                + Preferences.instance().get(WikiPreferences.class).getDefaultDocumentId() +"'");
     }
 
     // Loads the same instance into a different persistence context
@@ -112,7 +112,7 @@
     public WikiDirectory loadMemberArea() {
         log.debug("loading member area");
         EntityManager em = (EntityManager)Component.getInstance("entityManager");
-        String memberAreaName = Preferences.getInstance(WikiPreferences.class).getMemberArea();
+        String memberAreaName = Preferences.instance().get(WikiPreferences.class).getMemberArea();
         try {
             return (WikiDirectory) em
                     .createQuery("select d from WikiDirectory d left join fetch d.feed where d.wikiname = :name and d.parent.parent is null")
@@ -135,7 +135,7 @@
     public WikiDirectory loadTrashArea() {
         log.debug("loading trash area");
         EntityManager em = (EntityManager)Component.getInstance("entityManager");
-        String trashAreaName = Preferences.getInstance(WikiPreferences.class).getTrashArea();
+        String trashAreaName = Preferences.instance().get(WikiPreferences.class).getTrashArea();
         try {
             return (WikiDirectory) em
                     .createQuery("select d from WikiDirectory d left join fetch d.feed where d.wikiname = :name and d.parent.parent is null")
@@ -158,7 +158,7 @@
     public WikiDirectory loadHelpArea() {
         log.debug("loading help area");
         EntityManager em = (EntityManager)Component.getInstance("entityManager");
-        String helpAreaName = Preferences.getInstance(WikiPreferences.class).getHelpArea();
+        String helpAreaName = Preferences.instance().get(WikiPreferences.class).getHelpArea();
         try {
             return (WikiDirectory) em
                     .createQuery("select d from WikiDirectory d left join fetch d.feed where d.wikiname = :name and d.parent.parent is null")

Deleted: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiMacro.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiMacro.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiMacro.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,97 +0,0 @@
-package org.jboss.seam.wiki.core.engine;
-
-import java.io.Serializable;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-public class WikiMacro implements Serializable {
-
-    /* TODO: Extract metadata and build macro framework
-    protected String[] skins = {"d", "m"}
-    protected long accessLevel = 0;
-
-    protected boolean documentDiscriminator = false;
-
-    protected boolean reentrant = true;
-    protected boolean renderedOnce = false;
-    protected boolean affectsRenderingOnly = true;
-
-    protected boolean appliesToHeader = false;
-    protected boolean appliesToContent = true;
-    protected boolean appliesToFooter = false;
-
-    protected boolean displayedInPreview = true;
-
-    createMethodBuildTime
-    createMethodRenderTime
-    */
-
-    private Integer position;
-    private String clientId;
-    private String name;
-    private SortedMap<String,String> params = new TreeMap<String,String>();
-
-    public WikiMacro(String name) {
-        this.name = name;
-    }
-
-    public WikiMacro(Integer position, String name) {
-        this.position = position;
-        this.name = name;
-    }
-
-    public Integer getPosition() {
-        return position;
-    }
-
-    public void setPosition(Integer position) {
-        this.position = position;
-    }
-
-    public String getClientId() {
-        return clientId;
-    }
-
-    public void setClientId(String clientId) {
-        this.clientId = clientId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public SortedMap<String, String> getParams() {
-        return params;
-    }
-
-    public void setParams(SortedMap<String, String> params) {
-        this.params = params;
-    }
-
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        WikiMacro wikiMacro = (WikiMacro) o;
-
-        if (!name.equals(wikiMacro.name)) return false;
-        if (position != null ? !position.equals(wikiMacro.position) : wikiMacro.position != null) return false;
-
-        return true;
-    }
-
-    public int hashCode() {
-        int result;
-        result = (position != null ? position.hashCode() : 0);
-        result = 31 * result + name.hashCode();
-        return result;
-    }
-
-    public String toString() {
-        return "WikiMacro (" + getPosition() + "): " + getName() + " Params: " + getParams().size();
-    }
-}

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextParser.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextParser.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextParser.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -204,11 +204,10 @@
         if ( (macroNames.contains(macro.name) && renderDuplicateMacros) || !macroNames.contains(macro.name)) {
             macroNames.add(macro.name);
 
-            WikiMacro wikiMacro = new WikiMacro(macro.name);
-            wikiMacro.setParams(macro.params);
-            wikiMacro.setPosition(macroPosition++);
+            WikiTextMacro wikiTextMacro = new WikiTextMacro(macro.name, macroPosition++);
+            wikiTextMacro.setParams(macro.params);
 
-            return renderer.renderMacro(wikiMacro);
+            return renderer.renderMacro(wikiTextMacro);
         } else {
             macroPosition++;
             return "[Can't use the same macro twice!]";

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextRenderer.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextRenderer.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextRenderer.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,5 +1,7 @@
 package org.jboss.seam.wiki.core.engine;
 
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
+
 import java.util.List;
 
 /**
@@ -15,7 +17,7 @@
     public String renderExternalLink(WikiLink externalLink);
     public String renderThumbnailImageLink(WikiLink link);
     public String renderFileAttachmentLink(int attachmentNumber, WikiLink attachmentLink);
-    public String renderMacro(WikiMacro macro);
+    public String renderMacro(WikiTextMacro macro);
 
     public String renderParagraphOpenTag();
     public String renderPreformattedOpenTag();

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/FeedEntryManager.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/FeedEntryManager.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/FeedEntryManager.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -6,19 +6,22 @@
  */
 package org.jboss.seam.wiki.core.feeds;
 
-import org.jboss.seam.wiki.core.model.FeedEntry;
-import org.jboss.seam.wiki.core.engine.*;
-import org.jboss.seam.wiki.core.renderer.DefaultWikiTextRenderer;
-import org.jboss.seam.wiki.core.renderer.WikiURLRenderer;
-import org.jboss.seam.ui.validator.FormattedTextValidator;
+import antlr.ANTLRException;
+import antlr.RecognitionException;
 import org.jboss.seam.Component;
 import org.jboss.seam.ScopeType;
-import org.jboss.seam.log.Log;
+import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Logger;
 import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.In;
-import antlr.ANTLRException;
-import antlr.RecognitionException;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.ui.validator.FormattedTextValidator;
+import org.jboss.seam.wiki.core.engine.WikiLink;
+import org.jboss.seam.wiki.core.engine.WikiLinkResolver;
+import org.jboss.seam.wiki.core.engine.WikiTextParser;
+import org.jboss.seam.wiki.core.model.FeedEntry;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
+import org.jboss.seam.wiki.core.renderer.DefaultWikiTextRenderer;
+import org.jboss.seam.wiki.core.renderer.WikiURLRenderer;
 
 /**
  * @author Christian Bauer
@@ -43,6 +46,7 @@
         parser.setResolver((WikiLinkResolver) Component.getInstance("wikiLinkResolver"));
 
         class FeedRenderer extends DefaultWikiTextRenderer {
+            @Override
             public String renderInternalLink(WikiLink internalLink) {
                 return !internalLink.isBroken() ?
                         "<a href=\""
@@ -53,7 +57,8 @@
             }
 
             // Remove all macros
-            public String renderMacro(WikiMacro macro) {
+            @Override
+            public String renderMacro(WikiTextMacro macro) {
                 return "";
             }
         }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiCommentFeedEntryManager.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiCommentFeedEntryManager.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiCommentFeedEntryManager.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -7,6 +7,7 @@
 package org.jboss.seam.wiki.core.feeds;
 
 import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.RaiseEvent;
 import org.jboss.seam.international.Messages;
 import org.jboss.seam.wiki.core.model.WikiComment;
 import org.jboss.seam.wiki.core.model.WikiCommentFeedEntry;
@@ -14,6 +15,7 @@
 @Name("wikiCommentFeedEntryManager")
 public class WikiCommentFeedEntryManager extends FeedEntryManager<WikiComment, WikiCommentFeedEntry> {
 
+    @RaiseEvent("FeedEntry.created")
     public WikiCommentFeedEntry createFeedEntry(WikiComment comment) {
 
         WikiCommentFeedEntry fe = new WikiCommentFeedEntry();
@@ -32,6 +34,7 @@
         return fe;
     }
 
+    @RaiseEvent("FeedEntry.updated")
     public void updateFeedEntry(WikiCommentFeedEntry fe, WikiComment comment) {
 
         fe.setLink(wikiURLRenderer.renderURL(comment, true));

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiDocumentFeedEntryManager.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiDocumentFeedEntryManager.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/feeds/WikiDocumentFeedEntryManager.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -7,12 +7,14 @@
 package org.jboss.seam.wiki.core.feeds;
 
 import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.RaiseEvent;
 import org.jboss.seam.wiki.core.model.WikiDocument;
 import org.jboss.seam.wiki.core.model.WikiDocumentFeedEntry;
 
 @Name("wikiDocumentFeedEntryManager")
 public class WikiDocumentFeedEntryManager extends FeedEntryManager<WikiDocument, WikiDocumentFeedEntry> {
 
+    @RaiseEvent("FeedEntry.created")
     public WikiDocumentFeedEntry createFeedEntry(WikiDocument document) {
 
         WikiDocumentFeedEntry fe = new WikiDocumentFeedEntry();
@@ -31,6 +33,7 @@
         return fe;
     }
 
+    @RaiseEvent("FeedEntry.updated")
     public void updateFeedEntry(WikiDocumentFeedEntry fe, WikiDocument document) {
 
         fe.setLink(wikiURLRenderer.renderURL(document, true));

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocument.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocument.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocument.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -2,7 +2,6 @@
 
 import org.hibernate.validator.Length;
 import org.jboss.seam.wiki.core.search.annotations.Searchable;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
 
 import javax.persistence.*;
 import java.io.Serializable;
@@ -170,47 +169,47 @@
      */
 
     @Transient
-    private Collection<WikiMacro> headerMacros = new LinkedHashSet<WikiMacro>();
-    public Collection<WikiMacro> getHeaderMacros() { return headerMacros; }
-    public void setHeaderMacros(Collection<WikiMacro> headerMacros) {
+    private Collection<WikiTextMacro> headerMacros = new LinkedHashSet<WikiTextMacro>();
+    public Collection<WikiTextMacro> getHeaderMacros() { return headerMacros; }
+    public void setHeaderMacros(Collection<WikiTextMacro> headerMacros) {
         this.headerMacros = headerMacros;
         setHeaderMacrosString(getMacrosAsString(headerMacros));
         setHeader(getMacrosAsWikiText(headerMacros) + getWikiTextWithoutMacros(getHeader()) ); // Text after macros
     }
 
     @Transient
-    private Collection<WikiMacro> contentMacros = new LinkedHashSet<WikiMacro>();
-    public Collection<WikiMacro> getContentMacros() { return contentMacros; }
-    public void setContentMacros(Collection<WikiMacro> contentMacros) {
+    private Collection<WikiTextMacro> contentMacros = new LinkedHashSet<WikiTextMacro>();
+    public Collection<WikiTextMacro> getContentMacros() { return contentMacros; }
+    public void setContentMacros(Collection<WikiTextMacro> contentMacros) {
         this.contentMacros = contentMacros;
         setContentMacrosString(getMacrosAsString(contentMacros));
     }
 
     @Transient
-    private Collection<WikiMacro> footerMacros = new LinkedHashSet<WikiMacro>();
-    public Collection<WikiMacro> getFooterMacros() { return footerMacros; }
-    public void setFooterMacros(Collection<WikiMacro> footerMacros) {
+    private Collection<WikiTextMacro> footerMacros = new LinkedHashSet<WikiTextMacro>();
+    public Collection<WikiTextMacro> getFooterMacros() { return footerMacros; }
+    public void setFooterMacros(Collection<WikiTextMacro> footerMacros) {
         this.footerMacros = footerMacros;
         setFooterMacrosString(getMacrosAsString(footerMacros));
         setFooter(getWikiTextWithoutMacros(getFooter()) + getMacrosAsWikiText(footerMacros)); // Text before macros
     }
 
-    public void addHeaderMacro(WikiMacro... macro) {
+    public void addHeaderMacro(WikiTextMacro... macro) {
         headerMacros.addAll(Arrays.asList(macro));
         setHeaderMacros(headerMacros);
     }
 
-    public void addFooterMacro(WikiMacro... macro) {
+    public void addFooterMacro(WikiTextMacro... macro) {
         footerMacros.addAll(Arrays.asList(macro));
         setFooterMacros(footerMacros);
     }
 
-    public void removeHeaderMacro(WikiMacro... macro) {
+    public void removeHeaderMacro(WikiTextMacro... macro) {
         headerMacros.removeAll(Arrays.asList(macro));
         setHeaderMacros(headerMacros);
     }
 
-    public void removeFooterMacro(WikiMacro... macro) {
+    public void removeFooterMacro(WikiTextMacro... macro) {
         footerMacros.removeAll(Arrays.asList(macro));
         setFooterMacros(footerMacros);
     }
@@ -226,23 +225,23 @@
     }
 
     public boolean macroPresent(String macroName) {
-        for (WikiMacro headerMacro : headerMacros) {
+        for (WikiTextMacro headerMacro : headerMacros) {
             if (headerMacro.getName().equals(macroName)) return true;
         }
-        for (WikiMacro contentMacro : contentMacros) {
+        for (WikiTextMacro contentMacro : contentMacros) {
             if (contentMacro.getName().equals(macroName)) return true;
         }
-        for (WikiMacro footerMacro : footerMacros) {
+        for (WikiTextMacro footerMacro : footerMacros) {
             if (footerMacro.getName().equals(macroName)) return true;
         }
         return false;
     }
 
-    private void removeMacrosFromCollection(Collection<WikiMacro> macros, String macroName) {
-        Iterator<WikiMacro> it = macros.iterator();
+    private void removeMacrosFromCollection(Collection<WikiTextMacro> macros, String macroName) {
+        Iterator<WikiTextMacro> it = macros.iterator();
         while (it.hasNext()) {
-            WikiMacro wikiMacro = it.next();
-            if (wikiMacro.getName().equals(macroName)) it.remove();
+            WikiTextMacro WikiTextMacro = it.next();
+            if (WikiTextMacro.getName().equals(macroName)) it.remove();
         }
     }
 
@@ -259,19 +258,19 @@
         return textWithoutMacro.toString();
     }
 
-    private String getMacrosAsString(Collection<WikiMacro> macros) {
+    private String getMacrosAsString(Collection<WikiTextMacro> macros) {
         if (macros.size() == 0) return "";
         StringBuilder macrosString = new StringBuilder();
-        for (WikiMacro m : macros) {
+        for (WikiTextMacro m : macros) {
             macrosString.append(m.getName()).append(" ");
         }
         return macrosString.substring(0, macrosString.length() - 1);
     }
 
-    private String getMacrosAsWikiText(Collection<WikiMacro> macros) {
+    private String getMacrosAsWikiText(Collection<WikiTextMacro> macros) {
         if (macros.size() == 0) return "";
         StringBuilder macrosString = new StringBuilder();
-        for (WikiMacro m : macros) {
+        for (WikiTextMacro m : macros) {
             macrosString.append("[<=").append(m.getName());
             for (Map.Entry<String, String> param : m.getParams().entrySet()) {
                 macrosString.append("[").append(param.getKey()).append("=").append(param.getValue()).append("]");
@@ -282,15 +281,16 @@
     }
 
     private void setMacroFieldsFromDefaults(WikiDocumentDefaults defaults) {
+
         if (defaults.getContentMacros() != null) {
             setContentMacros(defaults.getContentMacros());
             setContentMacrosString(getMacrosAsString(defaults.getContentMacros()));
             content = getMacrosAsWikiText(defaults.getContentMacros()) + "\n" + content;
         } else {
-            Collection<WikiMacro> macros = new ArrayList<WikiMacro>();
+            Collection<WikiTextMacro> macros = new ArrayList<WikiTextMacro>();
             int i = 0;
             for (String m : defaults.getContentMacrosAsString()) {
-                macros.add(new WikiMacro(i++, m));
+                macros.add(new WikiTextMacro(m, i++));
             }
             setContentMacros(macros);
             setContentMacrosString(getMacrosAsString(macros));
@@ -302,7 +302,7 @@
         } else {
             int i = 0;
             for (String m : defaults.getHeaderMacrosAsString()) {
-                addHeaderMacro(new WikiMacro(i++, m));
+                addHeaderMacro(new WikiTextMacro(m, i++));
             }
         }
 
@@ -311,7 +311,7 @@
         } else {
             int i = 0;
             for (String m : defaults.getFooterMacrosAsString()) {
-                addFooterMacro(new WikiMacro(i++, m));
+                addFooterMacro(new WikiTextMacro(m, i++));
             }
         }
     }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentDefaults.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentDefaults.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiDocumentDefaults.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,7 +1,5 @@
 package org.jboss.seam.wiki.core.model;
 
-import org.jboss.seam.wiki.core.engine.WikiMacro;
-
 import java.util.List;
 
 public class WikiDocumentDefaults {
@@ -31,9 +29,9 @@
     }
 
     /**
-     * @return a list of <tt>WikiMacro</tt> instances or null if <tt>getHeaderMacrosAsString()</tt> should be called.
+     * @return a list of <tt>WikiTextMacro</tt> instances or null if <tt>getHeaderMacrosAsString()</tt> should be called.
      */
-    public List<WikiMacro> getContentMacros() {
+    public List<WikiTextMacro> getContentMacros() {
         return null;
     }
 
@@ -46,9 +44,9 @@
     }
 
     /**
-     * @return a list of <tt>WikiMacro</tt> instances or null if <tt>getHeaderMacrosAsString()</tt> should be called.
+     * @return a list of <tt>WikiTextMacro</tt> instances or null if <tt>getHeaderMacrosAsString()</tt> should be called.
      */
-    public List<WikiMacro> getHeaderMacros() {
+    public List<WikiTextMacro> getHeaderMacros() {
         return null;
     }
 
@@ -61,9 +59,9 @@
     }
 
     /**
-     * @return a list of <tt>WikiMacro</tt> instances or null if <tt>getHeaderMacrosAsString()</tt> should be called.
+     * @return a list of <tt>WikiTextMacro</tt> instances or null if <tt>getHeaderMacrosAsString()</tt> should be called.
      */
-    public List<WikiMacro> getFooterMacros() {
+    public List<WikiTextMacro> getFooterMacros() {
         return null;
     }
 

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiTextMacro.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiTextMacro.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiTextMacro.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,96 @@
+/*
+ * 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 java.util.TreeMap;
+import java.util.SortedMap;
+import java.io.Serializable;
+
+/**
+ * A dependency-free, pure domain model representation of a macro in wiki text.
+ * <p>
+ * An instance that only has a name has not been produced by parsing wiki text. Then
+ * it would also have a position (every macro found during wiki text parsing is
+ * numbered). Note that equality and hashcode is based on either name comparison,
+ * or if a position is available, on name and position.
+ * </p>
+ *
+ * @author Christian Bauer
+ */
+public class WikiTextMacro implements Serializable {
+
+    private Integer position;
+    private String name;
+    private SortedMap<String,String> params = new TreeMap<String,String>();
+
+    public WikiTextMacro(String name) {
+        this.name = name;
+    }
+
+    public WikiTextMacro(String name, Integer position) {
+        this.name = name;
+        this.position = position;
+    }
+
+    public WikiTextMacro(String name, Integer position, SortedMap<String,String> params) {
+        this.name = name;
+        this.position = position;
+        this.params = params;
+    }
+
+    public WikiTextMacro(WikiTextMacro that) {
+        this(that.getName(), that.getPosition(), that.getParams());
+    }
+
+    public Integer getPosition() {
+        return position;
+    }
+
+    public void setPosition(Integer position) {
+        this.position = position;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public SortedMap<String, String> getParams() {
+        return params;
+    }
+
+    public void setParams(SortedMap<String, String> params) {
+        this.params = params;
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        WikiTextMacro wikiMacro = (WikiTextMacro) o;
+
+        if (!name.equals(wikiMacro.name)) return false;
+        if (position != null ? !position.equals(wikiMacro.position) : wikiMacro.position != null) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        int result;
+        result = (position != null ? position.hashCode() : 0);
+        result = 31 * result + name.hashCode();
+        return result;
+    }
+
+    public String toString() {
+        return "WikiTextMacro (" + getPosition() + "): " + getName() + " Params: " + getParams().size();
+    }
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/PluginCacheManager.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/PluginCacheManager.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/PluginCacheManager.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,43 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.wiki.core.cache.PageFragmentCache;
+import org.jboss.seam.core.Events;
+import org.jboss.seam.log.Log;
+
+/**
+ * Cleans the right cache region when an event occurs.
+ *
+ * @author Christian Bauer
+ */
+ at Name("pluginCacheManager")
+ at AutoCreate
+public class PluginCacheManager {
+
+    @Logger
+    Log log;
+
+    @In
+    PageFragmentCache pageFragmentCache;
+
+    public void invalidateCacheRegion(String region) {
+        log.debug("removing all elements from page fragment cache region: " + region);
+        pageFragmentCache.removeAll(region);
+
+    }
+
+    public static void registerBinding(String eventType, String region) {
+        String binding = "#{pluginCacheManager.invalidateCacheRegion('"+region+"')}";
+        Events.instance().addListener(eventType, binding, String.class);
+    }
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/PluginRegistry.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/PluginRegistry.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/PluginRegistry.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,104 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Startup;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.log.LogProvider;
+import org.jboss.seam.log.Logging;
+import org.jboss.seam.wiki.core.plugin.metamodel.Plugin;
+import org.jboss.seam.wiki.core.plugin.metamodel.module.MacroPluginModule;
+import org.jboss.seam.wiki.core.plugin.binding.PluginBinder;
+import org.jboss.seam.wiki.core.exception.InvalidWikiConfigurationException;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
+
+import java.util.*;
+
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("pluginRegistry")
+ at Scope(ScopeType.APPLICATION)
+ at Startup(depends = "preferenceRegistry")
+ at BypassInterceptors
+public class PluginRegistry {
+
+    public static final Class[] PLUGIN_BINDERS = {
+        org.jboss.seam.wiki.core.plugin.binding.lacewiki.PluginBinder.class
+    };
+
+    private static final LogProvider log = Logging.getLogProvider(PluginRegistry.class);
+
+    private SortedMap<String, Plugin> plugins = new TreeMap<String, Plugin>();
+    private SortedMap<String, MacroPluginModule> macroPluginModulesByKey = new TreeMap<String, MacroPluginModule>();
+    private SortedMap<String, MacroPluginModule> macroPluginModulesByMacroName = new TreeMap<String, MacroPluginModule>();
+
+    public void addPlugin(String key, Plugin p) {
+        if (plugins.containsKey(key)) {
+            throw new InvalidWikiConfigurationException("Duplicate plugin key: " + key);
+        }
+        plugins.put(key, p);
+    }
+
+    public Plugin removePlugin(String key) {
+        return plugins.remove(key);
+    }
+
+    public Plugin getPlugin(String key) {
+        return plugins.get(key);
+    }
+
+    public List<Plugin> getPlugins() {
+        return Collections.unmodifiableList(new ArrayList(plugins.values()));
+    }
+
+    public SortedMap<String, Plugin> getPluginsByKey() {
+        return Collections.unmodifiableSortedMap(plugins);
+    }
+
+    public SortedMap<String, MacroPluginModule> getMacroPluginModulesByKey() {
+        return macroPluginModulesByKey;
+    }
+
+    public SortedMap<String, MacroPluginModule> getMacroPluginModulesByMacroName() {
+        return macroPluginModulesByMacroName;
+    }
+
+    public WikiPluginMacro createWikiPluginMacro(WikiTextMacro wikiTextMacro) {
+        if (getMacroPluginModulesByMacroName().containsKey(wikiTextMacro.getName())) {
+            log.debug("binding WikiTextMacro metadata to create WikiPluginMacro instance");
+            return new WikiPluginMacro( getMacroPluginModulesByMacroName().get(wikiTextMacro.getName()), wikiTextMacro );
+        } else {
+            return null;
+        }
+    }
+
+    @Create
+    public void startup() {
+        log.info("initializing plugin registry");
+
+        for (Class pluginBinderClass : PLUGIN_BINDERS) {
+            log.debug("calling plugin binder: " + pluginBinderClass.getName());
+            PluginBinder pluginBinder = (PluginBinder)Component.getInstance(pluginBinderClass);
+            pluginBinder.installPlugins(this);
+        }
+
+        log.info("registered plugins: " + plugins.size());
+    }
+
+    public static PluginRegistry instance() {
+        return (PluginRegistry) Component.getInstance(PluginRegistry.class);
+    }
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/WikiPluginMacro.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/WikiPluginMacro.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/WikiPluginMacro.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,195 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.web.ServletContexts;
+import org.jboss.seam.international.Messages;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.log.Logging;
+import org.jboss.seam.wiki.core.model.WikiDocument;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
+import org.jboss.seam.wiki.core.plugin.metamodel.module.MacroPluginModule;
+import org.jboss.seam.wiki.util.Hash;
+
+import java.io.Serializable;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * An instance of a macro in wiki text that has an XHTML include/template.
+ * <p>
+ * Internally it ties the wiki text parsing engine to the plugin and
+ * preferences functionality, as well as template/UI rendering. It is also
+ * the primary API for plugin developers, it's the 'currentMacro' that is
+ * available at all times when writing plugin templates, plugin classes, or
+ * interpolated plugin resources (CSS that contains EL expressions, etc.).
+ * </p>
+ * <p>
+ * It extends a <tt>WikiTextMacro</tt> with additional features that are only
+ * relevant for rendering the macro and its template.
+ * </p>
+ * <p>
+ * A new instance of this class is created for <i>every</i> rendering of wiki
+ * text in the wiki user interface (the visible GUI). You can use the
+ * <tt>attributes</tt> map of this instance to store values that you want to
+ * retrieve again during such rendering. This is especially useful if you
+ * want to avoid generating or loading a value again and again during rendering
+ * of a single piece of wiki text, which can occur if a JSF value binding method
+ * (a getter) is generating/loading a value based on the macro instance.
+ * </p>
+ * <p>
+ * An instance of this class can only be created by the <tt>PluginRegistry</tt>.
+ *
+ * @see PluginRegistry
+ * 
+ * @author Christian Bauer
+ */
+public class WikiPluginMacro extends WikiTextMacro implements Serializable {
+
+    private Log log = Logging.getLog(WikiPluginMacro.class);
+
+    public static final String CURRENT_MACRO_EL_VARIABLE = "currentMacro";
+    public static final String PAGE_VARIABLE_PREFIX = "macro";
+    public static final String PAGE_VARIABLE_SEPARATOR = "_";
+    public static final String EVENT_PREFIX = "Macro.";
+
+    public static enum CallbackEvent {
+        VIEW_BUILD(".callback.viewBuild"),
+        BEFORE_VIEW_RENDER(".callback.beforeViewRender"),
+        AFTER_VIEW_RENDER(".callback.afterViewRender");
+        private String name;
+        CallbackEvent(String name) {
+            this.name = name;
+        }
+        public String getName() {
+            return name;
+        }
+    }
+
+    private String clientId;
+    private MacroPluginModule metadata;
+    private Map attributes = new HashMap();
+
+    WikiPluginMacro(MacroPluginModule metadata, WikiTextMacro wikiTextMacro) {
+        super(wikiTextMacro);
+        this.metadata = metadata;
+    }
+
+    public String getClientId() {
+        return clientId;
+    }
+
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
+    public MacroPluginModule getMetadata() {
+        return metadata;
+    }
+
+    public void setMetadata(MacroPluginModule metadata) {
+        this.metadata = metadata;
+    }
+
+    public Map getAttributes() {
+        return attributes;
+    }
+
+    public void setAttributes(Map attributes) {
+        this.attributes = attributes;
+    }
+
+    // Some convenience methods that generate Strings used all over the place
+
+    public String getPageVariableName() {
+        return PAGE_VARIABLE_PREFIX + getPosition() + PAGE_VARIABLE_SEPARATOR + getName();
+    }
+
+    public String getCallbackEventName(CallbackEvent event) {
+        return EVENT_PREFIX+getName()+event.getName();
+    }
+
+    public String getRequestImagePath() {
+        return getRequestPathPrefix() + getMetadata().getRequestImagePath();
+    }
+
+    public String getRequestCSSPath() {
+        return getRequestPathPrefix() + getMetadata().getRequestCSSPath();
+    }
+
+    private String getRequestPathPrefix() {
+        if (getClientId() == null) {
+            // We need to prefix any request with the currenct web context name if this
+            // is not a JSF request. That means, at this time, simple resource (img, css)
+            // GET requests that use EL which in turn uses instances of this class.
+            return ServletContexts.instance().getRequest().getContextPath();
+        }
+        return "";
+    }
+    
+    public String getCacheRegion(String name) {
+        return getMetadata().getQualifiedCacheRegionName(name);
+    }
+
+    public String getMessage(String message) {
+        return Messages.instance().get(getMetadata().getPlugin().getKey() + "." + message);
+    }
+
+    /*
+        Cache keys for macros are unique hashes:
+
+        - unique in all wiki areas: the id of the current document
+        - unique in a particular document: the hashcode of the macro, which includes its name and position in the document
+        - unique with changing macro parameters: the hashcode of any macro parameters
+        - unique for a particular user access level: the current users access level
+        - unique considering the hashCode() of any additional objects passed to the method
+
+     */
+    public String getCacheKey() {
+        return getCacheKey(new Object[]{});
+    }
+
+    public String getCacheKey(Object o) {
+        return getCacheKey(new Object[]{o});
+    }
+
+    public String getCacheKey(Object... objects) {
+        WikiDocument currentDocument = (WikiDocument)Component.getInstance("currentDocument");
+        Integer accessLevel = (Integer) Component.getInstance("currentAccessLevel");
+        Hash hash = (Hash)Component.getInstance(Hash.class);
+
+        log.debug("generating cache key for document: " + currentDocument + " and macro: " + this + " and access level: " + accessLevel);
+        StringBuilder builder = new StringBuilder();
+        if (log.isDebugEnabled()) log.debug("including id of document: " + currentDocument.getId());
+        builder.append( currentDocument.getId() );
+        if (log.isDebugEnabled()) log.debug("including hashCode of this macro: " + Math.abs(hashCode()));
+        builder.append( Math.abs(hashCode()) );
+        if (log.isDebugEnabled()) log.debug("including hashCode of macro params: " + Math.abs(getParams().hashCode()));
+        builder.append( Math.abs(getParams().hashCode()) );
+        if (log.isDebugEnabled()) log.debug("including accessLevel: " + accessLevel);
+        builder.append( accessLevel );
+
+        // This needs to be empty-String safe (the additional objects might be some of the
+        // JSF "oh let's map a non-existant request parameter to an empty string" genius behavior...
+        if (objects != null && objects.length > 0) {
+            for (Object o : objects) {
+                if (Math.abs(o.hashCode()) != 0) {
+                    log.debug("including hashCode of object: " + Math.abs(o.hashCode()));
+                    builder.append( Math.abs(o.hashCode()) );
+                }
+            }
+        }
+        return hash.hash(builder.toString());
+    }
+
+    public String toString() {
+        return "WikiPluginMacro ClientId '" + getClientId() + "' (" + getPosition() + "): "
+                + getName() + " Params: " + getParams().size();
+    }
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/PluginBinder.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/PluginBinder.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/PluginBinder.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,37 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin.binding;
+
+import org.jboss.seam.wiki.core.plugin.PluginRegistry;
+
+/**
+ * Abstract plugin binding contract.
+ * <p>
+ * Implementations are responsible for reading plugin metadata (XML files,
+ * annotations, whatever) and registering metamodel data on the registry.
+ * </p>
+ * <p>
+ * Plugins are first bound, then validated. Subclasses must implement the
+ * binding procedure and can extend the validation procedure.
+ * </p>
+ *
+ * @author Christian Bauer
+ */
+public abstract class PluginBinder {
+
+    public void installPlugins(PluginRegistry registry) {
+        bindPlugins(registry);
+        validatePlugins(registry);
+    }
+
+    protected abstract void bindPlugins(PluginRegistry registry);
+
+    protected void validatePlugins(PluginRegistry registry) {
+        // TODO: Validate min/max applicationVersions
+    }
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginBinder.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginBinder.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginBinder.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,267 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin.binding.lacewiki;
+
+import org.dom4j.Element;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.*;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.wiki.core.exception.InvalidWikiConfigurationException;
+import org.jboss.seam.wiki.core.plugin.PluginRegistry;
+import org.jboss.seam.wiki.core.plugin.PluginCacheManager;
+import org.jboss.seam.wiki.core.plugin.metamodel.Plugin;
+import org.jboss.seam.wiki.core.plugin.metamodel.PluginInfo;
+import org.jboss.seam.wiki.core.plugin.metamodel.module.MacroPluginModule;
+import org.jboss.seam.wiki.core.plugin.metamodel.module.PluginModule;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+import org.jboss.seam.wiki.preferences.metamodel.PreferenceEntity;
+import org.jboss.seam.wiki.preferences.metamodel.PreferenceRegistry;
+
+import java.util.*;
+
+/**
+ * Parses and binds plugin.xml metadata to plugin metamodel.
+ *
+ * @author Christian Bauer
+ */
+ at Name("pluginBinder")
+ at Scope(ScopeType.APPLICATION)
+ at Startup
+public class PluginBinder extends org.jboss.seam.wiki.core.plugin.binding.PluginBinder {
+
+    @Logger
+    Log log;
+
+    @In
+    PreferenceRegistry preferenceRegistry;
+
+    @In
+    Map<String,String> messages;
+
+    @Create
+    public void readDescriptors() {
+        log.debug("reading deployment descriptors as XML...");
+        descriptors = PluginDeploymentHandler.instance().getDescriptorsAsXmlElements();
+    }
+
+    Map<String, Element> descriptors = new HashMap<String, Element>();
+
+    public void bindPlugins(PluginRegistry registry) {
+        log.debug("installing plugins from XML descriptors: " + descriptors.size());
+
+        for (Map.Entry<String, Element> descriptor : descriptors.entrySet()) {
+            log.debug("installing deployment descriptor: " + descriptor.getKey());
+            Element root = descriptor.getValue();
+
+            String pluginKey = root.attributeValue("key");
+
+            log.debug("binding plugin: " + descriptor.getKey());
+            Plugin plugin = new Plugin(descriptor.getKey(), pluginKey);
+            log.debug("plugin descriptor package path: " + plugin.getDescriptorPackagePath());
+            registry.addPlugin(pluginKey, plugin);
+
+            String pluginLabel = root.attributeValue("label");
+            if (pluginLabel == null) pluginLabel = getMessage(plugin.getKey()+".label");
+            plugin.setLabel(pluginLabel);
+
+            bindPluginInfo(root, plugin);
+            bindMacroPluginsModules(registry, root, plugin);
+        }
+
+        bindMacroParameters(registry);
+    }
+
+    private void bindPluginInfo(Element root, Plugin plugin) {
+        List<Element> pluginInfos = root.elements("plugin-info");
+        if (pluginInfos.size() == 1) {
+            PluginInfo pluginInfo = new PluginInfo();
+
+            pluginInfo.setVersion(pluginInfos.get(0).attributeValue("version"));
+
+            String description = pluginInfos.get(0).attributeValue("description");
+            if (description == null) description = getMessage(plugin.getKey()+".description");
+            pluginInfo.setDescription(description);
+
+            List<Element> applicationVersions = pluginInfos.get(0).elements("application-version");
+            if (applicationVersions.size() == 1) {
+                pluginInfo.setApplicationVersion(
+                    applicationVersions.get(0).attributeValue("min"),
+                    applicationVersions.get(0).attributeValue("max")
+                );
+            }
+
+            List<Element> vendors = pluginInfos.get(0).elements("vendor");
+            if (vendors.size() == 1) {
+                pluginInfo.setVendor(
+                    vendors.get(0).attributeValue("name"),
+                    vendors.get(0).attributeValue("url")
+                );
+            }
+            
+            plugin.setPluginInfo(pluginInfo);
+        }
+    }
+
+    private void bindMacroPluginsModules(PluginRegistry registry, Element root, Plugin plugin) {
+
+        // Iterate through the XML descriptor and bind every <macro> to corresponding metamodel instances
+        List<Element> macroPlugins = root.elements("macro");
+        for (Element macroPluginModuleDescriptor : macroPlugins) {
+
+            String moduleKey = macroPluginModuleDescriptor.attributeValue("key");
+            MacroPluginModule macroPluginModule = new MacroPluginModule(plugin, moduleKey);
+
+            log.debug("binding macro plugin module: " + macroPluginModule.getFullyQualifiedKey());
+
+
+            String macroName = macroPluginModuleDescriptor.attributeValue("name");
+            if (registry.getMacroPluginModulesByMacroName().containsKey(macroName)) {
+                throw new InvalidWikiConfigurationException("Duplicate macro name, needs to be globally unique: " + macroName);
+            }
+            macroPluginModule.setName(macroName);
+
+            String label = macroPluginModuleDescriptor.attributeValue("label");
+            if (label == null) label = getMessage(plugin.getKey() + "." + moduleKey + ".label");
+            macroPluginModule.setLabel(label);
+            String description = macroPluginModuleDescriptor.attributeValue("description");
+            if (description == null) description = getMessage(plugin.getKey() + "." + moduleKey + ".description");
+            macroPluginModule.setDescription(description);
+
+            bindMacroApplicableTo(macroPluginModuleDescriptor, macroPluginModule);
+            bindMacroRenderOptions(macroPluginModuleDescriptor, macroPluginModule);
+
+            Element skins = macroPluginModuleDescriptor.element("skins");
+            if (skins != null) {
+                bindMacroSkins(skins, macroPluginModule);
+            }
+
+            Element cacheRegions = macroPluginModuleDescriptor.element("cache-regions");
+            if (cacheRegions != null) {
+                bindFragmentCacheRegions(cacheRegions, macroPluginModule);
+            }
+
+            // Finally, bind it
+            plugin.getModules().add(macroPluginModule);
+            registry.getMacroPluginModulesByKey().put(macroPluginModule.getFullyQualifiedKey(), macroPluginModule);
+            registry.getMacroPluginModulesByMacroName().put(macroPluginModule.getName(), macroPluginModule);
+        }
+
+    }
+
+    private void bindFragmentCacheRegions(Element moduleDescriptor, PluginModule module) {
+
+        List<Element> cacheRegions = moduleDescriptor.elements("cache-region");
+        if (cacheRegions.size() > 0) {
+            for (Element cacheRegion : cacheRegions) {
+
+                String unqualifiedCacheRegionName = cacheRegion.attributeValue("name");
+                module.addFragmentCacheRegion(unqualifiedCacheRegionName);
+
+                List<Element> invalidationEvents = cacheRegion.elements("invalidation-event");
+                if (invalidationEvents != null) {
+                    for (Element invalidationEvent : invalidationEvents) {
+                        String eventName = invalidationEvent.attributeValue("name");
+                        PluginCacheManager.registerBinding(
+                                eventName,
+                                module.getQualifiedCacheRegionName(unqualifiedCacheRegionName)
+                        );
+                    }
+                }
+
+            }
+        }
+    }
+
+    private void bindMacroSkins(Element moduleDescriptor, MacroPluginModule module) {
+        List<Element> skins = moduleDescriptor.elements("skin");
+        if (skins.size() > 0) {
+            String[] skinNames = new String[skins.size()];
+            for (int i = 0; i < skins.size(); i++)
+                skinNames[i] = skins.get(i).attributeValue("name");
+            module.setSkins(skinNames);
+        }
+    }
+
+    private void bindMacroApplicableTo(Element moduleDescriptor, MacroPluginModule module) {
+        Element applicableTo = moduleDescriptor.element("applicable-to");
+        if (applicableTo != null) {
+            boolean header = Boolean.parseBoolean(applicableTo.attributeValue("header"));
+            boolean content = Boolean.parseBoolean(applicableTo.attributeValue("content"));
+            boolean footer = Boolean.parseBoolean(applicableTo.attributeValue("footer"));
+            List<MacroPluginModule.DocumentArea> applicableList = new ArrayList<MacroPluginModule.DocumentArea>();
+            if (header) applicableList.add(MacroPluginModule.DocumentArea.HEADER);
+            if (content) applicableList.add(MacroPluginModule.DocumentArea.CONTENT);
+            if (footer) applicableList.add(MacroPluginModule.DocumentArea.FOOTER);
+            MacroPluginModule.DocumentArea[] applicableArray = new MacroPluginModule.DocumentArea[applicableList.size()];
+            module.setApplicableTo(applicableList.toArray(applicableArray));
+        }
+    }
+
+    private void bindMacroRenderOptions(Element moduleDescriptor, MacroPluginModule module) {
+        Element renderOptions = moduleDescriptor.element("render-options");
+        if (renderOptions != null) {
+            List<MacroPluginModule.RenderOption> renderOptionList =
+                        new ArrayList<MacroPluginModule.RenderOption>();
+            List<Element> options = renderOptions.elements();
+            for (Element option : options) {
+                if (option.getName().equals("singleton"))
+                    renderOptionList.add(MacroPluginModule.RenderOption.SINGLETON);
+            }
+            MacroPluginModule.RenderOption[] renderOptionArray =
+                    new MacroPluginModule.RenderOption[renderOptionList.size()];
+            module.setRenderOptions(renderOptionList.toArray(renderOptionArray));
+        }
+
+    }
+
+    private void bindMacroParameters(PluginRegistry registry) {
+        // Iterate through all @Preference entities, look for instanceType() values (which are fully qualified macro keys)
+        Set<PreferenceEntity> entitiesWithInstanceProperties =
+                preferenceRegistry.getPreferenceEntities(PreferenceVisibility.INSTANCE);
+        for (PreferenceEntity entity : entitiesWithInstanceProperties) {
+            if (entity.getMappedTo() != null && entity.getMappedTo().length() > 0) {
+                // All INSTANCE properties of this entity are for one macro, ignore whatever is configured on the properties
+                String macroPluginKey = entity.getMappedTo();
+                MacroPluginModule macroPluginModule = registry.getMacroPluginModulesByKey().get(macroPluginKey);
+                if (macroPluginModule != null) {
+                    log.debug("binding all INSTANCE properties as parameters of macro '" + macroPluginModule.getName() +"': " + entity);
+                    macroPluginModule.setPreferenceEntity(entity);
+                } else {
+                    throw new InvalidWikiConfigurationException(
+                        "Configured mapping to macro module '"+macroPluginKey+"' not found for " + entity
+                    );
+                }
+            } else {
+                // Some INSTANCE properties are for one macro, others for other macros, so we need to mix and match
+                for (PreferenceEntity.Property property : entity.getPropertiesInstanceVisible()) {
+                    if (property.getMappedTo() == null || property.getMappedTo().length() == 0) continue;
+                    
+                    String macroPluginKey = property.getMappedTo();
+                    MacroPluginModule macroPluginModule = registry.getMacroPluginModulesByKey().get(macroPluginKey);
+                    if (macroPluginModule != null) {
+                        log.debug("binding INSTANCE property as parameter of macro '" + macroPluginModule.getName() +"': " + property);
+                        macroPluginModule.setPreferenceEntity(entity);
+                        macroPluginModule.getParameters().add(property);
+                    } else {
+                        throw new InvalidWikiConfigurationException(
+                            "Configured mapping to macro module  '"+macroPluginKey+"' not found for " + property + " in " + entity
+                        );
+                    }
+                }
+            }
+        }
+    }
+
+    private String getMessage(String key) {
+        String message = messages.get(key);
+        if (message.equals(key)) {
+            throw new InvalidWikiConfigurationException("Could not find message key for label/description: " + key);
+        }
+        return message;
+    }
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginDeploymentHandler.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginDeploymentHandler.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginDeploymentHandler.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,39 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin.binding.lacewiki;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.wiki.util.XmlDeploymentHandler;
+import org.jboss.seam.deployment.DeploymentStrategy;
+
+/**
+ * Detects all *.plugin.xml files and offers Dom4J elements.
+ *
+ * @author Christian Bauer
+ */
+public class PluginDeploymentHandler extends XmlDeploymentHandler {
+
+    public static final String NAME = "pluginDeploymentHandler";
+
+    public String getExtension() {
+        return ".plugin.xml";
+    }
+
+    public String getName() {
+        return NAME;
+    }
+
+    public boolean isSchemaValidating() {
+        return true;
+    }
+
+    public static PluginDeploymentHandler instance() {
+        DeploymentStrategy deployment = (DeploymentStrategy) Component.getInstance("deploymentStrategy");
+        return (PluginDeploymentHandler) deployment.getDeploymentHandlers().get(NAME);
+    }
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginI18NBinder.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginI18NBinder.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginI18NBinder.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin.binding.lacewiki;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.*;
+import org.jboss.seam.log.Log;
+
+import java.util.List;
+
+/**
+ * A factory for <tt>pluginMessageBundleNames</tt> using the
+ * LaceWiki deployment layout. The job of this component is
+ * to transport the names of all found/deployed message bundles
+ * from the deployment scanner/handler into an application-scoped
+ * variable, which we can then access when resources have to be loaded.
+ *
+ * @see PluginI18NDeploymentHandler
+ * 
+ * @author Christian Bauer
+ */
+ at Name("pluginI18NBinder")
+ at Scope(ScopeType.APPLICATION)
+ at Startup
+public class PluginI18NBinder {
+
+    @Logger
+    Log log;
+
+    private List<String> pluginMessageBundleNames;
+
+    @Create
+    public void registerResourceBundleNames() {
+        log.debug("registering plugin i18n property files as bundle names");
+        pluginMessageBundleNames = PluginI18NDeploymentHandler.instance().getMessageBundleNames();
+        if (log.isDebugEnabled()) {
+            for (String s : pluginMessageBundleNames) {
+                log.debug("registered bundle name: " + s);
+            }
+        }
+    }
+
+    @Factory(value = "pluginMessageBundleNames", autoCreate = true)
+    public List<String> getPluginMessageBundleNames() {
+        return pluginMessageBundleNames;
+    }
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginI18NDeploymentHandler.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginI18NDeploymentHandler.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/binding/lacewiki/PluginI18NDeploymentHandler.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,70 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin.binding.lacewiki;
+
+import org.jboss.seam.wiki.util.PatternDeploymentHandler;
+import org.jboss.seam.wiki.core.plugin.metamodel.Plugin;
+import org.jboss.seam.wiki.core.exception.InvalidWikiConfigurationException;
+import org.jboss.seam.core.ResourceLoader;
+import org.jboss.seam.deployment.DeploymentStrategy;
+import org.jboss.seam.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Finds (during startup scanning) all plugin messages files, using the pattern
+ * <tt>[package]/[specialPluginI18Npackagename]/messages_[pluginKey]_[locale].properties</tt>.
+ * Any found file name is converted into a resource bundle name and added to an internal
+ * list. Other components can then read this list by getting an instance of this deployment
+ * handler, during startup.
+ *
+ * @see PluginI18NBinder
+ *
+ * @author Christian Bauer
+ */
+public class PluginI18NDeploymentHandler extends PatternDeploymentHandler {
+
+    public static final String NAME = "pluginI18NDeploymentHandler";
+    public static final String MESSAGES_PATTERN =
+        "^([a-zA-Z0-9/]+)"+Plugin.PACKAGE_I18N_MESSAGES+"_("+Plugin.KEY_PATTERN+")_([a-zA-Z_]+)\\.properties$";
+
+    public String getPattern() {
+        return MESSAGES_PATTERN;
+    }
+
+    public void handleMatch(String s, ClassLoader classLoader, String... matchedGroups) {
+        if (matchedGroups == null || matchedGroups.length != 3) {
+            throw new InvalidWikiConfigurationException("Deployment of i18n properties failed");
+        }
+
+        String packageName = matchedGroups[0];
+        String pluginKey = matchedGroups[1];
+        String locale = matchedGroups[2]; // Don't really need it here
+
+        if (packageName.endsWith(Plugin.PACKAGE_I18N+"/")) {
+            String bundleName = packageName.replaceAll("/", ".") + "messages_" + pluginKey;
+            getMessageBundleNames().add(bundleName);
+        }
+    }
+
+    public String getName() {
+        return NAME;
+    }
+    
+    private List<String> messageBundleNames = new ArrayList<String>();
+
+    public List<String> getMessageBundleNames() {
+        return messageBundleNames;
+    }
+
+    public static PluginI18NDeploymentHandler instance() {
+        DeploymentStrategy deployment = (DeploymentStrategy) Component.getInstance("deploymentStrategy");
+        return (PluginI18NDeploymentHandler) deployment.getDeploymentHandlers().get(NAME);
+    }
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/Plugin.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/Plugin.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/Plugin.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,117 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin.metamodel;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.wiki.core.exception.InvalidWikiConfigurationException;
+import org.jboss.seam.wiki.core.plugin.metamodel.module.PluginModule;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Plugin metadata.
+ *
+ * @author Christian Bauer
+ */
+public class Plugin {
+
+    // Some constants that represent the sub-package layout of a plugin package
+    public static final String PACKAGE_I18N = "i18n";
+    public static final String PACKAGE_I18N_MESSAGES = "messages";
+    public static final String PACKAGE_TEMPLATES = "templates";
+    public static final String PACKAGE_THEMES = "themes";
+    public static final String PACKAGE_THEMES_CSS = "css";
+    public static final String PACKAGE_THEMES_IMG = "img";
+
+    public static final String KEY_PATTERN = "[a-zA-Z0-9]+";
+
+    // Web request paths for resource loading, one for generating URIs, the other for parsing requests
+    public static final String GENERATE_RESOURCE_PATH_THEME = "/seam/resource/wikiPluginTheme";
+    public static final String REGISTER_SEAM_RESOURCE_THEME = "/wikiPluginTheme";
+
+    private String descriptorPath;
+    private String descriptorPackagePath;
+    private String key;
+    private String label;
+    private PluginInfo pluginInfo;
+    private List<PluginModule> modules = new ArrayList<PluginModule>();
+
+    public Plugin(String descriptorPath, String key) {
+        if (!key.matches(KEY_PATTERN))
+            throw new InvalidWikiConfigurationException("Key doesn't match pattern '"+KEY_PATTERN+"': " + key);
+
+        this.descriptorPath = descriptorPath; // '/foo/bar/Baz.plugin.xhtml'
+        this.descriptorPackagePath =
+                descriptorPath.substring(0, descriptorPath.lastIndexOf("/")); // '/foo/bar'
+        this.key = key;
+    }
+
+    public String getDescriptorPath() {
+        return descriptorPath;
+    }
+
+    public String getDescriptorPackagePath() {
+        return descriptorPackagePath;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+    public PluginInfo getPluginInfo() {
+        return pluginInfo;
+    }
+
+    public void setPluginInfo(PluginInfo pluginInfo) {
+        this.pluginInfo = pluginInfo;
+    }
+
+    public List<PluginModule> getModules() {
+        return modules;
+    }
+
+    public PluginModule getModuleByKey(String key) {
+        for (PluginModule pluginModule : getModules()) {
+            if (pluginModule.getKey().equals(key)) return pluginModule;
+        }
+        return null;
+    }
+
+    public void setModules(List<PluginModule> modules) {
+        this.modules = modules;
+    }
+
+    public String getPackageCSSPath() {
+        return getPackageThemePath() + "/" + Plugin.PACKAGE_THEMES_CSS;
+    }
+
+    public String getPackageThemePath() {
+        String currentTheme = (String) Component.getInstance("currentTheme");
+        return getDescriptorPackagePath()
+                + "/" + Plugin.PACKAGE_THEMES
+                + "/" + currentTheme;
+    }
+
+    public String getPackageDefaultTemplatePath(String macroName) {
+        return getDescriptorPackagePath()
+                + "/" + Plugin.PACKAGE_TEMPLATES
+                + "/" + macroName + ".xhtml";
+    }
+
+    public String getPackageI18NPath() {
+        return getDescriptorPackagePath() + "/" + Plugin.PACKAGE_I18N;
+    }
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/PluginInfo.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/PluginInfo.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/PluginInfo.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,94 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin.metamodel;
+
+/**
+ * @author Christian Bauer
+ */
+public class PluginInfo {
+
+    private String description;
+    private String version;
+    private ApplicationVersion applicationVersion;
+    private Vendor vendor;
+
+    public class ApplicationVersion {
+        private String min;
+        private String max;
+
+        public ApplicationVersion(String min, String max) {
+            this.min = min;
+            this.max = max;
+        }
+
+        public String getMin() {
+            return min;
+        }
+
+        public String getMax() {
+            return max;
+        }
+    }
+
+    public class Vendor {
+        private String name;
+        private String url;
+
+        public Vendor(String name, String url) {
+            this.name = name;
+            this.url = url;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getUrl() {
+            return url;
+        }
+    }
+
+    public void setApplicationVersion(String min, String max) {
+        this.applicationVersion = new ApplicationVersion(min, max);
+    }
+
+    public void setVendor(String name, String url) {
+        this.vendor = new Vendor(name, url);
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public ApplicationVersion getApplicationVersion() {
+        return applicationVersion;
+    }
+
+    public void setApplicationVersion(ApplicationVersion applicationVersion) {
+        this.applicationVersion = applicationVersion;
+    }
+
+    public Vendor getVendor() {
+        return vendor;
+    }
+
+    public void setVendor(Vendor vendor) {
+        this.vendor = vendor;
+    }
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/module/MacroPluginModule.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/module/MacroPluginModule.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/module/MacroPluginModule.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,163 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin.metamodel.module;
+
+import org.jboss.seam.wiki.core.plugin.metamodel.Plugin;
+import org.jboss.seam.wiki.preferences.metamodel.PreferenceEntity;
+
+import java.util.*;
+
+/**
+ * @author Christian Bauer
+ */
+public class MacroPluginModule extends PluginModule {
+
+    private String name;
+    private String[] skins = {"d"};
+    private DocumentArea[] applicableTo = {DocumentArea.CONTENT};
+    private RenderOption[] renderOptions;
+    private RenderDependency[] renderDependencies;
+    private PreferenceEntity preferenceEntity;
+    private SortedSet<PreferenceEntity.Property> parameters = new TreeSet<PreferenceEntity.Property>();
+
+    public MacroPluginModule(Plugin plugin, String key) {
+        super(plugin, key);
+    }
+
+    // TODO: This is currently not used at all, implement it in metadata/xsd/renderer
+    public static enum DocumentArea {
+        HEADER, CONTENT, FOOTER
+    }
+
+    public static enum RenderOption {
+        SINGLETON
+    }
+
+    // TODO: This is currently not used at all, implement it in metadata/xsd/renderer
+    public static class RenderDependency {
+
+        private String onMacro;
+        private Type type = Type.REQUIRED;
+
+        public RenderDependency(String onMacro, Type type) {
+            this.onMacro = onMacro;
+            this.type = type;
+        }
+
+        public String getOnMacro() {
+            return onMacro;
+        }
+
+        public Type getType() {
+            return type;
+        }
+
+        public enum Type {
+            REQUIRED, INCOMPATIBLE
+        }
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String[] getSkins() {
+        return skins;
+    }
+
+    public void setSkins(String[] skins) {
+        this.skins = skins;
+    }
+
+    public boolean isAvailableForSkin(String skin) {
+        for (String s : skins) {
+            if (skin.equals(s)) return true;
+        }
+        return false;
+    }
+
+    public DocumentArea[] getApplicableTo() {
+        return applicableTo;
+    }
+
+    public void setApplicableTo(DocumentArea[] applicableTo) {
+        this.applicableTo = applicableTo;
+    }
+
+    public boolean isApplicableTo(DocumentArea area) {
+        for (DocumentArea documentArea : getApplicableTo()) {
+            if (area.equals(documentArea)) return true;
+        }
+        return false;
+    }
+
+    public RenderOption[] getRenderOptions() {
+        return renderOptions;
+    }
+
+    public void setRenderOptions(RenderOption[] renderOptions) {
+        this.renderOptions = renderOptions;
+    }
+
+    public boolean isRenderOptionSet(RenderOption renderOption) {
+        if (getRenderOptions() == null) return false;
+        for (RenderOption option : getRenderOptions()) {
+            if (renderOption.equals(option)) return true;
+        }
+        return false;
+    }
+
+    public RenderDependency[] getRenderDependencies() {
+        return renderDependencies;
+    }
+
+    public void setRenderDependencies(RenderDependency[] renderDependencies) {
+        this.renderDependencies = renderDependencies;
+    }
+
+    public PreferenceEntity getPreferenceEntity() {
+        return preferenceEntity;
+    }
+
+    public void setPreferenceEntity(PreferenceEntity preferenceEntity) {
+        this.preferenceEntity = preferenceEntity;
+        for (PreferenceEntity.Property property : preferenceEntity.getPropertiesInstanceVisible()) {
+            parameters.add(property);
+        }
+    }
+
+    public SortedSet<PreferenceEntity.Property> getParameters() {
+        return parameters;
+    }
+
+    public List<PreferenceEntity.Property> getParametersAsList() {
+        return Collections.unmodifiableList(new ArrayList(parameters));
+    }
+
+    public String getRequestImagePath() {
+        return Plugin.GENERATE_RESOURCE_PATH_THEME
+                + "/" + getPlugin().getKey()
+                + "/" + getKey()
+                + "/" + Plugin.PACKAGE_THEMES_IMG;
+    }
+
+    public String getRequestCSSPath() {
+        return Plugin.GENERATE_RESOURCE_PATH_THEME
+                + "/" + getPlugin().getKey()
+                + "/" + getKey() 
+                + "/" + Plugin.PACKAGE_THEMES_CSS;
+    }
+
+    // TODO: This is only used in the Administration UI
+    public String getModuleTypeLabel() {
+        return "Macro";
+    }
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/module/PluginModule.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/module/PluginModule.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/metamodel/module/PluginModule.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,96 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.plugin.metamodel.module;
+
+import org.jboss.seam.wiki.core.plugin.metamodel.Plugin;
+import org.jboss.seam.wiki.core.exception.InvalidWikiConfigurationException;
+
+import java.util.*;
+
+/**
+ * @author Christian Bauer
+ */
+public abstract class PluginModule {
+
+    private Plugin plugin;
+    private String key;
+    private String label;
+    private String description;
+    private String className;
+    private SortedSet<String> fragmentCacheRegions = new TreeSet<String>();
+
+    protected PluginModule(Plugin plugin, String key) {
+        if (!key.matches(Plugin.KEY_PATTERN))
+            throw new InvalidWikiConfigurationException("Key doesn't match pattern '"+Plugin.KEY_PATTERN+"': " + key);
+
+        this.plugin = plugin;
+        this.key = key;
+    }
+
+    public Plugin getPlugin() {
+        return plugin;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
+    public SortedSet<String> getFragmentCacheRegions() {
+        return fragmentCacheRegions;
+    }
+
+    public List<String> getFragmentCacheRegionsAsList() {
+        return Collections.unmodifiableList(new ArrayList<String>(getFragmentCacheRegions()));
+    }
+
+    public void setFragmentCacheRegions(SortedSet<String> fragmentCacheRegions) {
+        this.fragmentCacheRegions = fragmentCacheRegions;
+    }
+
+    public void addFragmentCacheRegion(String name) {
+        getFragmentCacheRegions().add(getQualifiedCacheRegionName(name));
+    }
+
+    public String getFullyQualifiedKey() {
+        return getPlugin().getKey() + "." + getKey();
+    }
+
+    public String getQualifiedCacheRegionName(String name) {
+        return getFullyQualifiedKey() + "." + name;
+    }
+
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/plugin-1.0.xsd
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/plugin-1.0.xsd	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/plugin/plugin-1.0.xsd	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
+    targetNamespace="http://jboss.com/products/seam/wiki/plugin"
+    xmlns:plugin="http://jboss.com/products/seam/wiki/plugin">
+
+    <xs:element name="plugin">
+        <xs:annotation>
+            <xs:documentation>Wiki plugin.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element minOccurs="1" maxOccurs="1" ref="plugin:plugin-info"/>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="plugin:macro"/>
+            </xs:sequence>
+            <xs:attribute name="key" type="xs:string" use="required">
+                <xs:annotation>
+                    <xs:documentation>Unique key of this plugin</xs:documentation>
+                </xs:annotation>
+            </xs:attribute>
+            <xs:attribute name="label" type="xs:string">
+                <xs:annotation>
+                    <xs:documentation>
+                        Plain text description of plugin, used in menus.
+                        If empty, the key is looked up in the message bundles.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:attribute>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="plugin-info">
+        <xs:annotation>
+            <xs:documentation>
+                Vendor and dependency information of this plugin.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:all>
+                <xs:element ref="plugin:application-version"/>
+                <xs:element ref="plugin:vendor"/>
+            </xs:all>
+            <xs:attribute name="description" type="xs:string">
+                <xs:annotation>
+                    <xs:documentation>
+                        Short English description/documentation of the plugin.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:attribute>
+            <xs:attribute name="version" type="xs:string" use="required"/>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="application-version">
+        <xs:complexType>
+            <xs:attribute name="min" type="xs:string" use="required"/>
+            <xs:attribute name="max" type="xs:string" use="required"/>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="vendor">
+        <xs:complexType>
+            <xs:attribute name="name" type="xs:string" use="required"/>
+            <xs:attribute name="url" type="xs:string" use="required"/>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="macro">
+        <xs:annotation>
+            <xs:documentation>
+                Plugin module for wiki text macros.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:all>
+                <xs:element name="skins">
+                    <xs:complexType>
+                        <xs:sequence maxOccurs="unbounded">
+                            <xs:element name="skin">
+                                <xs:complexType>
+                                    <xs:attribute name="name" type="xs:string" use="required">
+                                        <xs:annotation>
+                                            <xs:documentation>
+                                                Wiki skins this macro is available in, e.g. "d" for desktop and "m" for mobile skins.
+                                            </xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+
+                                </xs:complexType>
+                            </xs:element>
+                        </xs:sequence>
+                    </xs:complexType>
+                </xs:element>
+                <xs:element name="applicable-to">
+                    <xs:annotation>
+                        <xs:documentation>
+                            Areas of a wiki document this macro can be used in.
+                        </xs:documentation>
+                    </xs:annotation>
+                    <xs:complexType>
+                        <xs:attribute name="header" default="false" type="xs:boolean"/>
+                        <xs:attribute name="content" default="false" type="xs:boolean"/>
+                        <xs:attribute name="footer" default="false" type="xs:boolean"/>
+                    </xs:complexType>
+                </xs:element>
+                <xs:element name="render-options" minOccurs="0">
+                    <xs:annotation>
+                        <xs:documentation>
+                            Macro rendering options.
+                        </xs:documentation>
+                    </xs:annotation>
+                    <xs:complexType>
+                        <xs:choice minOccurs="1" maxOccurs="1">
+                            <xs:element name="singleton">
+                                <xs:annotation>
+                                    <xs:documentation>
+                                        This macro can only be used once in a particular applicable area of a wiki document.
+                                    </xs:documentation>
+                                </xs:annotation>
+                            </xs:element>
+                        </xs:choice>
+                    </xs:complexType>
+                </xs:element>
+                <xs:element minOccurs="0" ref="plugin:cache-regions"/>
+            </xs:all>
+            <xs:attribute name="key" type="xs:string" use="required">
+                <xs:annotation>
+                    <xs:documentation>
+                        Plugin module key, unique within the plugin.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:attribute>
+            <xs:attribute name="label" type="xs:string">
+                <xs:annotation>
+                    <xs:documentation>
+                        Plain text description of plugin module, used in menus.
+                        If empty, the key is looked up in the message bundles.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:attribute>
+            <xs:attribute name="name" type="xs:string" use="required">
+                <xs:annotation>
+                    <xs:documentation>
+                        The name of the wiki text macro.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:attribute>
+            <xs:attribute name="description" type="xs:string">
+                <xs:annotation>
+                    <xs:documentation>
+                        Short English description/documentation of the plugin.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:attribute>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="cache-regions">
+        <xs:complexType>
+            <xs:sequence maxOccurs="unbounded">
+                <xs:element name="cache-region">
+                    <xs:complexType>
+                        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+                            <xs:element name="invalidation-event">
+                                <xs:complexType>
+                                    <xs:attribute name="name" type="xs:string" use="required">
+                                        <xs:annotation>
+                                            <xs:documentation>
+                                                Name of Seam event that triggers invalidation of all elements in this cache region.
+                                            </xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                </xs:complexType>
+                            </xs:element>
+                        </xs:sequence>
+                        <xs:attribute name="name" type="xs:string" use="required">
+                            <xs:annotation>
+                                <xs:documentation>
+                                    Cache region maintained for this plugin module, at runtime prefixed with plugin key and
+                                    module key, all separated with underscore.
+                                </xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                    </xs:complexType>
+                </xs:element>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+
+</xs:schema>
\ No newline at end of file

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceProvider.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceProvider.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceProvider.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -4,7 +4,7 @@
 import org.jboss.seam.annotations.*;
 import org.jboss.seam.log.Log;
 import org.jboss.seam.wiki.core.model.User;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
 import org.jboss.seam.wiki.preferences.PreferenceProvider;
 import org.jboss.seam.wiki.preferences.PreferenceValue;
 import org.jboss.seam.wiki.preferences.PreferenceVisibility;
@@ -38,7 +38,7 @@
 @Name("preferenceProvider")
 @AutoCreate
 @Scope(ScopeType.CONVERSATION)
-public class WikiPreferenceProvider implements PreferenceProvider<User, WikiMacro>, Serializable {
+public class WikiPreferenceProvider implements PreferenceProvider<User, WikiPluginMacro>, Serializable {
 
     @Logger Log log;
 
@@ -52,7 +52,7 @@
     List<PreferenceValue> newValueHolders = new ArrayList<PreferenceValue>();
 
     public Set<PreferenceValue> loadValues(String preferenceEntityName,
-                                           User user, WikiMacro instance,
+                                           User user, WikiPluginMacro instance,
                                            List<PreferenceVisibility> visibilities) {
 
         log.debug("assembling preference values for '"
@@ -137,7 +137,7 @@
         return valueHolders;
     }
 
-    public void storeValues(Set<PreferenceValue> valueHolders, User user, WikiMacro instance) {
+    public void storeValues(Set<PreferenceValue> valueHolders, User user, WikiPluginMacro instance) {
         // TODO: We don't care about the arguments, maybe instance later on when we marshall stuff into WikiMacro params
 
         // The new ones need to be checked if they are dirty and manually persisted
@@ -202,29 +202,33 @@
         return new HashSet(values);
     }
 
-    private Set<PreferenceValue> loadInstanceValues(String entityName, WikiMacro instance) {
+    private Set<PreferenceValue> loadInstanceValues(String entityName, WikiPluginMacro instance) {
         Set<PreferenceValue> valueHolders = new HashSet<PreferenceValue>();
         PreferenceEntity preferenceEntity = preferenceRegistry.getPreferenceEntitiesByName().get(entityName);
         for (Map.Entry<String, String> entry : instance.getParams().entrySet()) {
-            log.trace("converting WikiMacro argument into WikiPreferenceValue: " + entry.getKey());
+            log.trace("converting WikiMacro parameter into WikiPreferenceValue: " + entry.getKey());
 
             // TODO: Maybe we should log the following as DEBUG level, these occur when the user edits macro parameters
 
             PreferenceEntity.Property property = preferenceEntity.getPropertiesByName().get(entry.getKey());
             if (property == null) {
-                log.info("can't convert unknown property as WikiMacro argument: " + entry.getKey());
+                log.info("can't convert unknown property as WikiMacro parameter: " + entry.getKey());
                 continue;
             }
             if (!property.getVisibility().contains(PreferenceVisibility.INSTANCE)) {
-                log.info("can't convert WikiMacro argument, not overridable at INSTANCE level: " + entry.getKey());
+                log.info("can't convert WikiMacro parameter, not overridable at INSTANCE level: " + entry.getKey());
                 continue;
             }
+            if (!instance.getMetadata().getParameters().contains(property)) {
+                log.info("can't convert WikiMacro parameter, property is not configured: " + entry.getKey());
+                continue;
+            }
             WikiPreferenceValue value = new WikiPreferenceValue(property, entry.getValue());
             if (value.getValue() != null) {
-                log.trace("converted WikiMacro argument value into WikiPreferenceValue: " + value.getValue());
+                log.trace("converted WikiMacro parameter value into WikiPreferenceValue: " + value.getValue());
                 valueHolders.add(value);
             } else {
-                log.info("could not convert WikiMacro argument value into WikiPreferenceValue: " + entry.getKey());
+                log.info("could not convert WikiMacro parameter value into WikiPreferenceValue: " + entry.getKey());
             }
         }
         return valueHolders;

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/DefaultWikiTextRenderer.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/DefaultWikiTextRenderer.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/DefaultWikiTextRenderer.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -2,7 +2,7 @@
 
 import org.jboss.seam.wiki.core.engine.WikiTextRenderer;
 import org.jboss.seam.wiki.core.engine.WikiLink;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
 import org.jboss.seam.Component;
 
 import java.util.List;
@@ -17,7 +17,7 @@
     protected WikiURLRenderer wikiURLRenderer = (WikiURLRenderer) Component.getInstance(WikiURLRenderer.class);
 
     public static enum Headline {
-        H1, H2, H3, H4;
+        H1, H2, H3, H4
     }
 
     public String renderInternalLink(WikiLink internalLink) {
@@ -45,7 +45,7 @@
         return "[Embedded Image]";
     }
 
-    public String renderMacro(WikiMacro macro) {
+    public String renderMacro(WikiTextMacro macro) {
         return "[Macro]";
     }
 

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/MacroWikiTextRenderer.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/MacroWikiTextRenderer.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/MacroWikiTextRenderer.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -5,19 +5,20 @@
 
 import antlr.RecognitionException;
 import antlr.ANTLRException;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
 import org.jboss.seam.wiki.core.engine.WikiTextParser;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
 
 public class MacroWikiTextRenderer extends NullWikiTextRenderer {
 
-    private Set<WikiMacro> macros = new LinkedHashSet<WikiMacro>();
+    private Set<WikiTextMacro> macros = new LinkedHashSet<WikiTextMacro>();
 
-    public String renderMacro(WikiMacro macro) {
+    @Override
+    public String renderMacro(WikiTextMacro macro) {
         macros.add(macro);
         return null;
     }
 
-    public Set<WikiMacro> getMacros() {
+    public Set<WikiTextMacro> getMacros() {
         return macros;
     }
 

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/NullWikiTextRenderer.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/NullWikiTextRenderer.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/NullWikiTextRenderer.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -2,7 +2,7 @@
 
 import org.jboss.seam.wiki.core.engine.WikiTextRenderer;
 import org.jboss.seam.wiki.core.engine.WikiLink;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
 
 import java.util.List;
 
@@ -19,7 +19,7 @@
     public String renderThumbnailImageLink(WikiLink link) { return null; }
     public void setAttachmentLinks(List<WikiLink> attachmentLinks) {}
     public void setExternalLinks(List<WikiLink> externalLinks) {}
-    public String renderMacro(WikiMacro macro) { return null; }
+    public String renderMacro(WikiTextMacro macro) { return null; }
     public String renderParagraphOpenTag() { return "<p>\n"; }
     public String renderPreformattedOpenTag() { return "<pre>\n"; }
     public String renderBlockquoteOpenTag() { return "<blockquote>\n"; }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/WikiURLRenderer.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/WikiURLRenderer.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/renderer/WikiURLRenderer.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -24,7 +24,7 @@
 /**
  * Renders outgoing URLs in a unified fashion, see urlrewrite.xml for incoming URL GET request rewriting.
  * <p>
- * Note that some of the rendering is delegated into the domain model for subclasses of <tt>Node</tt>.
+ * Note that some of the rendering is delegated into the domain model for subclasses of <tt>WikiNode</tt>.
  * </p>
  *
  * @author Christian Bauer
@@ -36,7 +36,7 @@
 public class WikiURLRenderer implements Serializable {
 
     @In
-    String basePath;
+    String contextPath;
 
     @In("#{preferences.get('Wiki')}")
     WikiPreferences prefs;
@@ -49,7 +49,7 @@
         if (search == null || search.length() == 0) return "";
         StringBuilder url = new StringBuilder();
         String skin = Component.getInstance("skin") != null ? (String)Component.getInstance("skin") : "d";
-        url.append(usePrefsPath ? prefs.getBaseUrl() : basePath);
+        url.append(usePrefsPath ? prefs.getBaseUrl() : contextPath);
         url.append("/search_").append(skin).append(".seam?query=").append(encodeURL(search));
         return url.toString();
     }
@@ -61,7 +61,7 @@
     public String renderTagURL(String tag, boolean usePrefsPath) {
         if (tag == null || tag.length() == 0) return "";
         StringBuilder url = new StringBuilder();
-        url.append(usePrefsPath ? prefs.getBaseUrl() : basePath);
+        url.append(usePrefsPath ? prefs.getBaseUrl() : contextPath);
         url.append("/tag/").append(encodeURL(tag));
         return url.toString();
     }
@@ -73,20 +73,19 @@
     public String renderUserInfoURL(User user, boolean usePrefsPath) {
         if (user == null || user.getUsername() == null) return "";
         StringBuilder url = new StringBuilder();
-        url.append(usePrefsPath ? prefs.getBaseUrl() : basePath);
+        url.append(usePrefsPath ? prefs.getBaseUrl() : contextPath);
         url.append("/user/").append(user.getUsername());
         return url.toString();
     }
 
     public String renderAggregateFeedURL(String aggregateId) {
         return renderAggregateFeedURL(aggregateId, false);
-
     }
 
     public String renderAggregateFeedURL(String aggregateId, boolean usePrefsPath) {
         if (aggregateId == null) return "";
         StringBuilder url = new StringBuilder();
-        url.append(usePrefsPath ? prefs.getBaseUrl() : basePath);
+        url.append(usePrefsPath ? prefs.getBaseUrl() : contextPath);
         url.append("/service/Feed/atom/Aggregate/").append(aggregateId);
         return url.toString();
     }
@@ -98,7 +97,7 @@
     public String renderFeedURL(Feed feed, String tag, String comments, boolean usePrefsPath) {
         if (feed == null || feed.getId() == null) return "";
         StringBuilder url = new StringBuilder();
-        url.append(usePrefsPath ? prefs.getBaseUrl() : basePath);
+        url.append(usePrefsPath ? prefs.getBaseUrl() : contextPath);
         url.append("/service/Feed/atom").append(feed.getURL());
         if (comments != null && comments.length() >0) {
             url.append("/Comments/").append(FeedServlet.Comments.valueOf(comments));
@@ -124,7 +123,7 @@
 
     public String renderPermURL(WikiNode node, boolean usePrefsPath) {
         if (node == null || node.getId() == null) return "";
-        return (usePrefsPath ? prefs.getBaseUrl() : basePath) + "/" + node.getPermURL(prefs.getPermlinkSuffix());
+        return (usePrefsPath ? prefs.getBaseUrl() : contextPath) + "/" + node.getPermURL(prefs.getPermlinkSuffix());
     }
 
     public String renderWikiURL(WikiNode node) {
@@ -133,11 +132,17 @@
 
     public String renderWikiURL(WikiNode node, boolean usePrefsPath) {
         if (node == null || node.getId() == null) return "";
-        return (usePrefsPath ? prefs.getBaseUrl() : basePath) + "/" + node.getWikiURL();
+        return (usePrefsPath ? prefs.getBaseUrl() : contextPath) + "/" + node.getWikiURL();
     }
 
+    // TODO: We need more methods here, rendering year/month/day/tag/etc. on WikiURL (not perm url)
+
     private String encodeURL(String s) {
         return WikiUtil.encodeURL(s);
     }
 
+    public static WikiURLRenderer instance() {
+        return (WikiURLRenderer) Component.getInstance(WikiURLRenderer.class);
+    }
+
 }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/search/metamodel/SearchRegistry.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/search/metamodel/SearchRegistry.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/search/metamodel/SearchRegistry.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -34,7 +34,7 @@
     Map<String, SearchableEntity> searchableEntitiesByName = new HashMap<String, SearchableEntity>();
     List<SearchableEntity> searchableEntities = new ArrayList<SearchableEntity>();
 
-    @Observer("Wiki.started")
+    @Observer("Wiki.startup")
     public void scanForSearchSupportComponents() {
 
         log.debug("initializing search registry");

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/template/TemplateRegistry.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/template/TemplateRegistry.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/template/TemplateRegistry.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -36,7 +36,7 @@
     Map<Class, String> templates = new HashMap<Class, String>();
     List<Class> templateTypes = new ArrayList<Class>();
 
-    @Observer("Wiki.started")
+    @Observer("Wiki.startup")
     public void create() {
         log.debug("initializing template registry");
 

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/FeedServlet.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/FeedServlet.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/FeedServlet.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -146,7 +146,7 @@
                     feed.setTitle(Messages.instance().get("lacewiki.msg.AutomaticallyGeneratedFeed") + ": " + aggregateParam);
                     feed.setPublishedDate(new Date());
                     // We are lying here, we don't really have an alternate representation link for this resource
-                    feed.setLink( Preferences.getInstance(WikiPreferences.class).getBaseUrl() );
+                    feed.setLink( Preferences.instance().get(WikiPreferences.class).getBaseUrl() );
                     for (FeedEntryDTO feedEntryDTO : result) {
                         feed.getFeedEntries().add(feedEntryDTO.getFeedEntry());
                     }
@@ -307,7 +307,7 @@
                                    Comments comments,
                                    String aggregateParam) {
 
-        WikiPreferences prefs = Preferences.getInstance(WikiPreferences.class);
+        WikiPreferences prefs = Preferences.instance().get(WikiPreferences.class);
 
         // Create feed
         SyndFeed syndFeed = new SyndFeedImpl();

Copied: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/MacroComponentHandler.java (from rev 7883, trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/PluginComponentHandler.java)
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/MacroComponentHandler.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/MacroComponentHandler.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,26 @@
+package org.jboss.seam.wiki.core.ui;
+
+import javax.faces.component.UIComponent;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.jsf.ComponentConfig;
+import com.sun.facelets.tag.jsf.ComponentHandler;
+
+/**
+ * Chaining up the macros. Still a bit of a riddle, what Pete did here.
+ *
+ * @author Pete Muir
+ */
+public class MacroComponentHandler extends ComponentHandler {
+
+    public MacroComponentHandler(ComponentConfig config) {
+        super(config);
+    }
+
+    @Override
+    protected void onComponentCreated(FaceletContext ctx, UIComponent c, UIComponent parent) {
+        super.onComponentCreated(ctx, c, parent);
+        parent.getAttributes().put(UIMacro.NEXT_MACRO, c.getClientId(ctx.getFacesContext()));
+    }
+
+}


Property changes on: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/MacroComponentHandler.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Deleted: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/PluginComponentHandler.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/PluginComponentHandler.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/PluginComponentHandler.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,24 +0,0 @@
-package org.jboss.seam.wiki.core.ui;
-
-import javax.faces.component.UIComponent;
-
-import com.sun.facelets.FaceletContext;
-import com.sun.facelets.tag.jsf.ComponentConfig;
-import com.sun.facelets.tag.jsf.ComponentHandler;
-
-public class PluginComponentHandler extends ComponentHandler
-{
-
-   public PluginComponentHandler(ComponentConfig config)
-   {
-      super(config);
-   }
-   
-   @Override
-   protected void onComponentCreated(FaceletContext ctx, UIComponent c, UIComponent parent)
-   {
-      super.onComponentCreated(ctx, c, parent);
-      parent.getAttributes().put(UIPlugin.NEXT_PLUGIN, c.getClientId(ctx.getFacesContext()));
-   }
-
-}

Copied: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIMacro.java (from rev 7883, trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIPlugin.java)
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIMacro.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIMacro.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,35 @@
+package org.jboss.seam.wiki.core.ui;
+
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+
+import javax.faces.component.UINamingContainer;
+
+/**
+ * A wrapper component that applies to macro includes.
+ * <p>
+ * A macro XHTML template must have a <tt>&lt;wiki:macro&gt;</tt> root element.
+ * </p>
+ *
+ * @author Pete Muir
+ */
+public class UIMacro extends UINamingContainer {
+
+    public static final String COMPONENT_FAMILY = "org.jboss.seam.wiki.core.ui.UIMacro";
+
+    public static final String NEXT_MACRO = "org.jboss.seam.wiki.core.ui.UIMacro.nextMacro";
+
+    @Override
+    public String getFamily() {
+        return COMPONENT_FAMILY;
+    }
+
+    private WikiPluginMacro wikiPluginMacro;
+
+    public WikiPluginMacro getWikiMacro() {
+        return wikiPluginMacro;
+    }
+
+    public void setWikiMacro(WikiPluginMacro wikiPluginMacro) {
+        this.wikiPluginMacro = wikiPluginMacro;
+    }
+}


Property changes on: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIMacro.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Deleted: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIPlugin.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIPlugin.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIPlugin.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,18 +0,0 @@
-package org.jboss.seam.wiki.core.ui;
-
-import javax.faces.component.UINamingContainer;
-
-public class UIPlugin extends UINamingContainer
-{
-   
-   public static final String COMPONENT_FAMILY = "org.jboss.seam.wiki.core.ui.UIPlugin";
-   
-   public static final String NEXT_PLUGIN = "org.jboss.seam.wiki.core.ui.UIPlugin.nextPlugin";
-
-   @Override
-   public String getFamily()
-   {
-      return COMPONENT_FAMILY;
-   }
-   
-}

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIWikiFormattedText.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIWikiFormattedText.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/UIWikiFormattedText.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -18,8 +18,10 @@
 import org.jboss.seam.wiki.core.engine.*;
 import org.jboss.seam.wiki.core.model.WikiFile;
 import org.jboss.seam.wiki.core.model.WikiUploadImage;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
 import org.jboss.seam.wiki.core.renderer.DefaultWikiTextRenderer;
 import org.jboss.seam.wiki.util.WikiUtil;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
 
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIOutput;
@@ -43,9 +45,6 @@
 
     Log log = Logging.getLog(UIWikiFormattedText.class);
 
-    public static final String CURRENT_MACRO_EVENT_VARIABLE         = "currentMacro";
-    public static final String CURRENT_MACRO_EVENT_VARIABLE_SET     = "Macro.render.";
-
     public static final String ATTR_LINK_STYLE_CLASS                = "linkStyleClass";
     public static final String ATTR_BROKEN_LINK_STYLE_CLASS         = "brokenLinkStyleClass";
     public static final String ATTR_ATTACHMENT_LINK_STYLE_CLASS     = "attachmentLinkStyleClass";
@@ -54,9 +53,10 @@
     public static final String ATTR_EXTERNAL_TARGET_FRAME           = "externalTargetFrame";
     public static final String ATTR_LINK_BASE_FILE                  = "linkBaseFile";
     public static final String ATTR_CURRENT_AREA_NUMBER             = "currentAreaNumber";
-    public static final String ATTR_ENABLE_PLUGINS                  = "enablePlugins";
+    public static final String ATTR_ENABLE_MACRO_RENDERING          = "enableMacroRendering";
+    public static final String ATTR_ENABLE_TRANSIENT_MACROS         = "enableTransientMacros";
 
-    private Map<Integer, WikiMacro> pluginMacros;
+    private Map<Integer, WikiPluginMacro> macrosWithTemplateByPosition;
 
     public static final String COMPONENT_FAMILY = "org.jboss.seam.wiki.core.ui.UIWikiFormattedText";
 
@@ -64,7 +64,7 @@
 
     public UIWikiFormattedText() {
         super();
-        pluginMacros = new HashMap<Integer, WikiMacro>();
+        macrosWithTemplateByPosition = new HashMap<Integer, WikiPluginMacro>();
     }
 
     @Override
@@ -99,6 +99,7 @@
         // Set a customized renderer for parser macro callbacks
         class WikiFormattedTextRenderer extends DefaultWikiTextRenderer {
 
+            @Override
             public String renderInternalLink(WikiLink internalLink) {
                 return "<a href=\""
                         + (
@@ -119,6 +120,7 @@
                         + internalLink.getDescription() + "</a>";
             }
 
+            @Override
             public String renderExternalLink(WikiLink externalLink) {
                 return "<a href=\""
                         + WikiUtil.escapeEmailURL(externalLink.getUrl())
@@ -130,6 +132,7 @@
                         + WikiUtil.escapeEmailURL(externalLink.getDescription()) + "</a>";
             }
 
+            @Override
             public String renderFileAttachmentLink(int attachmentNumber, WikiLink attachmentLink) {
                 return "<a href=\""
                         + wikiURLRenderer.renderURL(baseFile)
@@ -141,6 +144,7 @@
                         + attachmentLink.getDescription() + "[" + attachmentNumber + "]" + "</a>";
             }
 
+            @Override
             public String renderThumbnailImageLink(WikiLink link) {
 
                 // TODO: This is not typesafe and clean, need different rendering strategy for WikiUpload subclasses
@@ -170,16 +174,23 @@
                 }
             }
 
-            public String renderMacro(WikiMacro macro) {
+            @Override
+            public String renderMacro(WikiTextMacro macro) {
 
-                WikiMacro pluginMacro = pluginMacros.get(macro.getPosition());
-                if (pluginMacro == null) {
-                    log.debug("macro is not a plugin, skipping: " + macro);
+                WikiPluginMacro pluginMacroWithTemplate = macrosWithTemplateByPosition.get(macro.getPosition());
+                if (pluginMacroWithTemplate == null) {
+                    log.debug("macro does not have an XHTML template/include, skipping: " + macro);
                     return "";
                 }
 
-                log.debug("preparing plugin rendering for macro: " + macro);
-                UIComponent child = findComponent( pluginMacros.get(macro.getPosition()).getClientId() );
+                log.debug("firing BEFORE_VIEW_RENDER macro event");
+                Events.instance().raiseEvent(
+                    pluginMacroWithTemplate.getCallbackEventName(WikiPluginMacro.CallbackEvent.BEFORE_VIEW_RENDER),
+                        pluginMacroWithTemplate
+                );
+
+                log.debug("preparing include rendering for macro: " + pluginMacroWithTemplate);
+                UIComponent child = findComponent( pluginMacroWithTemplate.getClientId() );
                 log.debug("JSF child client identifier: " + child.getClientId(getFacesContext()));
                 ResponseWriter originalResponseWriter = getFacesContext().getResponseWriter();
                 StringWriter stringWriter = new StringWriter();
@@ -187,28 +198,31 @@
                         .cloneWithWriter(stringWriter);
                 getFacesContext().setResponseWriter(tempResponseWriter);
 
-                log.debug("setting current macro in EVENT context");
-                Contexts.getEventContext().set(CURRENT_MACRO_EVENT_VARIABLE, macro);
-                Events.instance().raiseEvent(CURRENT_MACRO_EVENT_VARIABLE_SET+macro.getName());
-
                 try {
-                    log.debug("rendering plugin macro: " + macro);
+                    log.debug("rendering template of macro: " + pluginMacroWithTemplate);
                     JSF.renderChild(getFacesContext(), child);
+
+                    log.debug("firing AFTER_VIEW_RENDER macro event");
+                    Events.instance().raiseEvent(
+                        pluginMacroWithTemplate.getCallbackEventName(WikiPluginMacro.CallbackEvent.AFTER_VIEW_RENDER),
+                        pluginMacroWithTemplate
+                    );
                 }
                 catch (Exception ex) {
                     throw new RuntimeException(ex);
-                }
-                finally {
+                } finally {
                     getFacesContext().setResponseWriter(originalResponseWriter);
                 }
                 return stringWriter.getBuffer().toString();
             }
 
+            @Override
             public void setAttachmentLinks(List<WikiLink> attachmentLinks) {
                 // Put attachments (wiki links...) into the event context for later rendering
                 setLinks("wikiTextAttachments", attachmentLinks);
             }
 
+            @Override
             public void setExternalLinks(List<WikiLink> externalLinks) {
                 // Put external links (to targets not on this wiki) into the event context for later rendering
                 setLinks("wikiTextExternalLinks", externalLinks);
@@ -234,12 +248,14 @@
                 */
             }
 
+            @Override
             protected String getHeadlineId(Headline h, String headline) {
                 // HTML id attribute has restrictions on valid values... so the easiest way is to make this a WikiLink
                 return HEADLINE_ID_PREFIX+WikiUtil.convertToWikiName(headline);
                 // We also need to access it correctly, see WikiLink.java and getHeadLineLink()
             }
 
+            @Override
             protected String getHeadlineLink(Headline h, String headline) {
                 return "<a href=\""+ wikiURLRenderer.renderURL(baseFile)+"#"+WikiTextRenderer.HEADLINE_ID_PREFIX+WikiUtil.convertToWikiName(headline)+"\">"
                         + headline
@@ -265,8 +281,8 @@
 
     }
 
-    protected void addPluginMacro(Integer position, WikiMacro macro) {
-        pluginMacros.put(position, macro);
+    protected void addMacroWithTemplate(WikiPluginMacro pluginMacro) {
+        macrosWithTemplateByPosition.put(pluginMacro.getPosition(), pluginMacro);
     }
 
 }

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiFaceletsResourceResolver.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiFaceletsResourceResolver.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiFaceletsResourceResolver.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,28 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.ui;
+
+import com.sun.facelets.impl.DefaultResourceResolver;
+
+import java.net.URL;
+
+/**
+ * Utitility to load Facelets XHTML files as a resource from the classapth.
+ *
+ * @author Christian Bauer
+ */
+public class WikiFaceletsResourceResolver extends DefaultResourceResolver {
+
+    public URL resolveUrl(String path) {
+        // First try the regular resolver
+        URL url = super.resolveUrl(path);
+        if (url != null) return url;
+        // Only if we can't find it check in the classpath
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        return loader.getResource(path.startsWith("/") ? path.substring(1) : path);
+    }
+}

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiFormattedTextHandler.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiFormattedTextHandler.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiFormattedTextHandler.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -15,16 +15,20 @@
 import com.sun.facelets.tag.TagAttribute;
 import com.sun.facelets.tag.TagConfig;
 import com.sun.facelets.tag.jsf.ComponentSupport;
+import org.jboss.seam.Component;
 import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.core.Events;
+import org.jboss.seam.core.Expressions;
 import org.jboss.seam.faces.ResourceLoader;
 import org.jboss.seam.log.Log;
 import org.jboss.seam.log.Logging;
-import org.jboss.seam.ui.component.UILoadStyle;
-import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
+import org.jboss.seam.wiki.core.engine.WikiTextParser;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.core.plugin.PluginRegistry;
+import org.jboss.seam.wiki.core.plugin.metamodel.module.MacroPluginModule;
 import org.jboss.seam.wiki.core.renderer.NullWikiTextRenderer;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
-import org.jboss.seam.wiki.core.engine.WikiTextParser;
-import org.jboss.seam.wiki.preferences.Preferences;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
+import org.ajax4jsf.component.html.HtmlLoadStyle;
 
 import javax.el.ELException;
 import javax.el.VariableMapper;
@@ -32,21 +36,27 @@
 import javax.faces.component.UIComponent;
 import java.io.IOException;
 import java.net.URL;
+import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Set;
+import java.util.Stack;
 
 /**
- * Creates a UIWikiText JSF component and substitutes macro names in wiki
- * text with real plugin includes/JSF components in the tree.
+ * Creates a <tt>UIWikiFormattedText</tt> JSF component and substitutes macro names in wiki
+ * text with real macro components in the tree. These <tt>UIMacro</tt> components are
+ * build from XHTML fragments/includes. Interacts closely with the state of the
+ * <tt>UIWikiFormattedText</tt> component to split component tree creation and rendering duties.
  *
  * @author Peter Muir
  * @author Christian Bauer
  */
 public class WikiFormattedTextHandler extends MetaTagHandler {
 
-    Log log = Logging.getLog(WikiFormattedTextHandler.class);
+    public static final String MACRO_STACK_PAGE_VARIABLE = "macroStack";
 
+    private Log log = Logging.getLog(WikiFormattedTextHandler.class);
+
     private static final String MARK = "org.jboss.seam.wiki.core.ui.WikiFormattedTextHandler";
-
     private TagAttribute valueAttribute;
 
     public WikiFormattedTextHandler(TagConfig config) {
@@ -65,10 +75,9 @@
             cmp = createComponent(ctx);
             cmp.getAttributes().put(MARK, id);
         }
-        log.debug("::: invoking nextHandler for child id: " + cmp.getClientId(ctx.getFacesContext()) );
         this.nextHandler.apply(ctx, cmp);
         parent.getChildren().add(cmp);
-        createPlugins(ctx, cmp);
+        createMacroComponents(ctx, cmp);
         log.debug("<<< completed building wiki text components for child of: " + parent.getClientId(ctx.getFacesContext()));
     }
 
@@ -80,7 +89,7 @@
 
     /*
     * Have to manually wire the component as the Facelets magic wirer
-    * is a package scoped class
+    * is a package scoped class.
     */
     @Override
     protected void setAttributes(FaceletContext ctx, Object instance) {
@@ -93,99 +102,218 @@
         setAttribute(ctx, cmp, UIWikiFormattedText.ATTR_EXTERNAL_TARGET_FRAME);
         setAttribute(ctx, cmp, UIWikiFormattedText.ATTR_LINK_BASE_FILE);
         setAttribute(ctx, cmp, UIWikiFormattedText.ATTR_CURRENT_AREA_NUMBER);
-        setAttribute(ctx, cmp, UIWikiFormattedText.ATTR_ENABLE_PLUGINS);
+        setAttribute(ctx, cmp, UIWikiFormattedText.ATTR_ENABLE_MACRO_RENDERING, false);
+        setAttribute(ctx, cmp, UIWikiFormattedText.ATTR_ENABLE_TRANSIENT_MACROS, false);
     }
 
-    private void setAttribute(FaceletContext ctx, UIComponent cmp, String name) {
-        TagAttribute attribute = this.getAttribute(name);
-        if (attribute != null) {
-            Object o = attribute.getObject(ctx);
-            if (o == null) throw new IllegalArgumentException("Attribute '" + name + "' resolved to null");
-            cmp.getAttributes().put(name, o);
-        }
-    }
-
     @Override
     protected MetaRuleset createMetaRuleset(Class type) {
         return super.createMetaRuleset(type).ignoreAll();
     }
 
     /**
-     * We create the plugins as first-class components here.
+     * We create the included macro template components as first-class components here.
      * <p/>
-     * The plugins need to be rendered in the correct place in the
-     * rendered wikitext.  The plugin name is replaced with a placeholder.
-     * <p/>
-     * To allow multiple use of the same plugin
-     * we replace the plugin name with a reference to the component.
-     * The clientId of the component is used as the reference.  To
-     * prevent parse errors in the wikitext the clientId is stored in
-     * a list on the parent UIWikiFormattedText component and it's
-     * position is used as the placeholder.
+     * This routine parses the wiki text and for each encountered wiki macro, it tries to
+     * include an XHTML template. If no template is found, we do nothing. If a template is
+     * found, we also include its CSS into the document header, then add it to the parent
+     * component, the <tt>UIWikiFormattedText</tt> we are handling. This parent component
+     * keeps a map of <tt>WikiMacro</tt> instances, keyed by position in the rendered
+     * wiki text.
+     * </p>
+     * <p>
+     * Macros are never reentrant, that means a macro can not render itself. To avoid this,
+     * we push a macro onto a stack before including it in the component tree, after checking if
+     * it is already present on the stack. If it is already present, we log a warning and don't do
+     * anything. After rendering, we pop the stack. The stack is held in the PAGE context.
+     * </p>
      * @param ctx FaceletContext
      * @param parent Parent component
      */
-    private void createPlugins(final FaceletContext ctx, final UIComponent parent) {
+    private void createMacroComponents(final FaceletContext ctx, final UIComponent parent) {
         if (!(parent instanceof UIWikiFormattedText)) return;
-        final UIWikiFormattedText wikiFormattedText = (UIWikiFormattedText) parent;
+        final UIWikiFormattedText wikiFormattedTextComponent = (UIWikiFormattedText) parent;
 
         String unparsed = valueAttribute.getValue(ctx);
 
-        // Don't forget this, transporting the value to the handled component
-        wikiFormattedText.setValue(unparsed);
+        // Don't forget this, transporting the value to the handled component, we need to render it (again) later
+        wikiFormattedTextComponent.setValue(unparsed);
 
-        log.debug("trying to create plugin children for component");
-
-        if (Contexts.getEventContext().get(UIWikiFormattedText.CURRENT_MACRO_EVENT_VARIABLE) != null) {
-            log.debug("disabling plugin rendering, we are trying to create plugins inside a plugin - not possible!");
+        if (getAttribute(UIWikiFormattedText.ATTR_ENABLE_MACRO_RENDERING) == null ||
+            !getAttribute(UIWikiFormattedText.ATTR_ENABLE_MACRO_RENDERING).getBoolean(ctx)) {
+            log.debug("macro rendering disabled");
             return;
         }
 
-        if (getAttribute(UIWikiFormattedText.ATTR_ENABLE_PLUGINS) == null ||
-            !getAttribute(UIWikiFormattedText.ATTR_ENABLE_PLUGINS).getBoolean(ctx)) {
-            log.debug("plugin rendering disabled");
-            return;
-        }
-
-        log.debug("creating plugin components from wiki text macros");
-
+        // We need to parse the wiki text once (later again for rendering) to find all macros in the text
+        log.debug("creating macro components from wiki text macros");
         WikiTextParser parser = new WikiTextParser(unparsed, true, false);
         parser.setRenderer(
             new NullWikiTextRenderer() {
-                public String renderMacro(WikiMacro macro) {
-                    log.debug("found macro: " + macro);
 
-                    URL faceletURL = getPluginURL(macro.getName(), ctx);
-                    if (faceletURL == null) {
-                        log.debug("macro has no plugin facelets file: " + macro.getName());
+                // A collection of all macros (whether they have templates or not) that we found in this piece of wiki text
+                final Set<String> macrosFoundInWikiText = new HashSet<String>();
+
+                @Override
+                public String renderMacro(WikiTextMacro wikiTextMacro) {
+                    log.debug("=== found macro in wiki text: " + wikiTextMacro);
+
+                    // Check reentrancy
+                    if (!isMacroOnPageStack(wikiTextMacro)) {
+                        log.debug("adding macro to page macro stack");
+                        getPageMacroStack().push(wikiTextMacro);
+                    } else {
+                        log.warn("macros are not reentrant, duplicate macro on page stack: " + wikiTextMacro);
                         return null;
                     }
 
-                    log.debug("setting current macro in EVENT context before including facelets file");
-                    Contexts.getEventContext().set(UIWikiFormattedText.CURRENT_MACRO_EVENT_VARIABLE, macro);
+                    // Check if the wikiTextMacro actually is registered, we don't build unknown macros
+                    WikiPluginMacro pluginMacro = PluginRegistry.instance().createWikiPluginMacro(wikiTextMacro);
+                    if (pluginMacro == null) {
+                        log.warn("macro is not bound in plugin registry: " + wikiTextMacro);
+                        getPageMacroStack().pop();
+                        return null;
+                    }
 
-                    includePluginCSS(macro.getName(), parent);
-                    includePluginFacelet(faceletURL, ctx, parent);
+                    // Check if we can find the template to include for this wikiTextMacro
+                    String macroIncludePath = getMacroIncludePath(pluginMacro);
+                    if (macroIncludePath == null) {
+                        getPageMacroStack().pop();
+                        return null;
+                    }
 
-                    // TODO: Need to understand this magic from Pete if we want to make sub-clientIds for plugins
-                    Object nextPluginId = parent.getAttributes().get(UIPlugin.NEXT_PLUGIN);
-                    if (nextPluginId != null) {
-                        macro.setClientId(nextPluginId.toString());
-                        wikiFormattedText.addPluginMacro(macro.getPosition(), macro);
-                        parent.getAttributes().remove(UIPlugin.NEXT_PLUGIN);
+                    // Before we build the nested components, set the WikiMacro instance in the PAGE context under a
+                    // unique name, so we can use a VariableMapper later and alias this as 'currentMacro'
+                    String macroPageVariableName = pluginMacro.getPageVariableName();
+                    log.debug("setting WikiMacro instance in PAGE context as variable named: " + macroPageVariableName);
+                    Contexts.getPageContext().set(macroPageVariableName, pluginMacro);
+
+                    // Whoever wants to do something before we finally build the XHTML template
+                    log.debug("firing VIEW_BUILD macro event");
+                    Events.instance().raiseEvent(pluginMacro.getCallbackEventName(WikiPluginMacro.CallbackEvent.VIEW_BUILD), pluginMacro);
+
+                    // This is where the magic happens... the UIWikiFormattedText component should have one child after that, a UIMacro
+                    includeMacroFacelet(pluginMacro, macroIncludePath, ctx, wikiFormattedTextComponent);
+
+                    // Now get the identifier of the newly created UIMacro instance and set it for future use
+                    Object macroId = wikiFormattedTextComponent.getAttributes().get(UIMacro.NEXT_MACRO);
+                    if (macroId != null) {
+                        pluginMacro.setClientId(macroId.toString());
+                        wikiFormattedTextComponent.getAttributes().remove(UIMacro.NEXT_MACRO);
                     } else {
-                        // Best guess based plugin renderer
-                        String pluginId =
-                            parent.getChildren().get( parent.getChildCount()-1 )
-                                   .getClientId( ctx.getFacesContext() );
-                        macro.setClientId(pluginId);
-                        wikiFormattedText.addPluginMacro(macro.getPosition(), macro);
+                        // Best guess based wikiTextMacro renderer, needed during reRendering when we don't build the child
+                        // - only then is NEXT_MACRO set by the MacroComponentHandler
+                        macroId =
+                            wikiFormattedTextComponent.getChildren().get(
+                                wikiFormattedTextComponent.getChildCount()-1
+                            ).getClientId( ctx.getFacesContext() );
+                        pluginMacro.setClientId(macroId.toString());
                     }
 
-                    log.debug("unsetting current macro in EVENT context");
-                    Contexts.getEventContext().remove(UIWikiFormattedText.CURRENT_MACRO_EVENT_VARIABLE);
+                    // Put an optional CSS include in the header of the wiki document we are rendering in.
+                    // (This needs to happen after the clientId is set, as CSS resource path rendering needs to
+                    // know if it occurs in a JSF request (clientId present) or not.
+                    includeMacroCSS(pluginMacro, wikiFormattedTextComponent);
+
+                    // We need to make the UIMacro child transient if we run in the wiki text editor preview. The reason
+                    // is complicated: If we don't make it transient, all value expressions inside the wikiTextMacro templates that
+                    // use 'currentMacro' will refer to the "old" saved ValueExpression and then of course to the "old"
+                    // VariableMapper. In other words: We need to make sure that the subtree is completely fresh every
+                    // time the wiki text preview is reRendered, otherwise we never get a 'currentMacro' binding updated.
+                    // This also means that VariableMapper is a completely useless construct, because it is basically an
+                    // alias that is evaluated just once.
+                    // Note: This means we can't click on form elements of any plugin/wikiTextMacro template in the preview. This
+                    // should be solved by not showing/ghosting any form elements during preview.
+                    if (getAttribute(UIWikiFormattedText.ATTR_ENABLE_TRANSIENT_MACROS) != null &&
+                        getAttribute(UIWikiFormattedText.ATTR_ENABLE_TRANSIENT_MACROS).getBoolean(ctx)) {
+                        log.debug("setting macro to transient rendering, not storing its state between renderings: " + pluginMacro);
+                        UIMacro uiMacro = (UIMacro)ComponentSupport.findChild(wikiFormattedTextComponent, macroId.toString());
+                        uiMacro.setTransient(true);
+                    }
+
+                    // Finally, pop the wikiTextMacro stack of the page, then transport the finished WikiMacro instance into
+                    // the UIWikiFormattedText component for rendering - we are done building the component tree at this
+                    // point.
+                    getPageMacroStack().pop();
+                    wikiFormattedTextComponent.addMacroWithTemplate(pluginMacro);
+
+                    // Well, we don't render anything here...
                     return null;
                 }
+
+                private String getMacroIncludePath(WikiPluginMacro pluginMacro) {
+
+                    // Check singleton configuration
+                    if (pluginMacro.getMetadata().isRenderOptionSet(MacroPluginModule.RenderOption.SINGLETON) &&
+                        macrosFoundInWikiText.contains(pluginMacro.getName())) {
+                        log.warn("macro is a SINGLETON, can not be used twice in the same document area: " + pluginMacro);
+                        return null;
+                    } else {
+                        macrosFoundInWikiText.add(pluginMacro.getName());
+                    }
+
+                    // Check skin configuration
+                    String currentSkin = (String)Component.getInstance("skin");
+                    if (!pluginMacro.getMetadata().isAvailableForSkin(currentSkin)) {
+                        log.warn("macro is not available for skin '"+currentSkin+"': " + pluginMacro);
+                        return null;
+                    }
+
+                    // Try to get an XHTML template, our source for building nested components
+                    // Fun with slashes: For some reason, Facelets really needs a slash at the start, otherwise
+                    // it doesn't use my custom ResourceResolver...
+                    String includePath = "/"+ pluginMacro.getMetadata().getPlugin().getPackageDefaultTemplatePath(pluginMacro.getName());
+                    URL faceletURL = ResourceLoader.instance().getResource(includePath);
+                    if (faceletURL == null) {
+                        log.debug("macro has no default include file, not building any components: " + pluginMacro);
+                        return null;
+                    } else {
+                        log.debug("using default template include as a resource from package: " + includePath);
+                    }
+
+                    return includePath;
+                }
+
+                private void includeMacroFacelet(WikiPluginMacro pluginMacro, String includePath, FaceletContext ctx, UIComponent parent) {
+                    VariableMapper orig = ctx.getVariableMapper();
+                    try {
+                        log.debug("setting 'currentMacro' as an EL variable, resolves dynamically to WikiMacro instance in PAGE context");
+                        ctx.setVariableMapper(new VariableMapperWrapper(orig));
+                        ctx.getVariableMapper().setVariable(
+                            WikiPluginMacro.CURRENT_MACRO_EL_VARIABLE,
+                            Expressions.instance().createValueExpression("#{"+ pluginMacro.getPageVariableName()+"}").toUnifiedValueExpression()
+                        );
+
+                        log.debug("including macro facelets file from path: " + includePath);
+                        ctx.includeFacelet(parent, includePath);
+
+                    } catch (IOException e) {
+                        throw new RuntimeException(e);
+                    } finally {
+                        ctx.setVariableMapper(orig);
+                    }
+                }
+
+
+                private void includeMacroCSS(WikiPluginMacro pluginMacro, UIComponent cmp) {
+
+                    String cssPath = "/"+ pluginMacro.getMetadata().getPlugin().getPackageCSSPath()+"/"+ pluginMacro.getName()+".css";
+                    log.debug("trying to load CSS resource from classpath: " + cssPath);
+                    if (ResourceLoader.instance().getResource(cssPath) != null) {
+                        String cssRequestURIPath = pluginMacro.getRequestCSSPath()+"/"+ pluginMacro.getName()+".css";
+                        log.debug("including macro CSS file, rendering URI for document head: " + cssRequestURIPath);
+
+                        // Use Ajax4JSF loader, it can do what we want - add a CSS to the HTML <head>
+                        HtmlLoadStyle style = new HtmlLoadStyle();
+                        style.setSrc(cssRequestURIPath);
+                        
+                        cmp.getChildren().add(style);
+                        // Clear these out in the next build phase
+                        ComponentSupport.markForDeletion(style);
+                    } else {
+                        log.debug("no CSS resource found for macro");
+                    }
+                }
             }
         );
 
@@ -199,57 +327,8 @@
         }
     }
 
-    private URL getPluginURL(String macroName, FaceletContext ctx) {
-        //if (macroName == null || macroName.length() == 0 || includedMacros.contains(macroName)) return null;
-        if (macroName == null || macroName.length() == 0) return null;
+    // Some utilities...
 
-        String includeView = "/plugins/" + macroName + "/plugin.xhtml";
-
-        // View can't include itself
-        String currentViewId = ctx.getFacesContext().getViewRoot().getViewId();
-        if (currentViewId.equals(includeView)) return null;
-
-        // Try to get the XHTML document
-        return ResourceLoader.instance().getResource(includeView);
-    }
-
-    private void includePluginFacelet(URL faceletURL, FaceletContext ctx, UIComponent parent) {
-        // Cribbed from facelets
-        VariableMapper orig = ctx.getVariableMapper();
-        try {
-            log.debug("including plugin facelets file from URL: " + faceletURL);
-            ctx.setVariableMapper(new VariableMapperWrapper(orig));
-            ctx.includeFacelet(parent, faceletURL);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        } finally {
-            ctx.setVariableMapper(orig);
-        }
-
-    }
-
-    /*
-    * Add a CSS resource to the document head
-    */
-    private void includePluginCSS(String macroName, UIComponent cmp) {
-        // Try to get the CSS for it
-        WikiPreferences wikiPrefs = Preferences.getInstance(WikiPreferences.class);
-        String css = "/themes/" + wikiPrefs.getThemeName() + "/css/" + macroName + ".css";
-        if (ResourceLoader.instance().getResource(css) != null) {
-            log.debug("including plugin CSS file from resource: " + css);
-            // TODO: For Pete to fix, UILoadStyle doesn't load the CSS anymore
-            UILoadStyle style = UILoadStyle.newInstance();
-            style.setSrc(css);
-            cmp.getChildren().add(style);
-            // Clear these out in the next build phase
-            ComponentSupport.markForDeletion(style);
-        }
-    }
-
-    /*
-    * Support method to find the UIWikiFormattedText component created by
-    * this tag on a previous tree build
-    */
     private static UIComponent findChildByTagId(UIComponent parent, String id) {
         Iterator itr = parent.getFacetsAndChildren();
         while (itr.hasNext()) {
@@ -262,4 +341,38 @@
         return null;
     }
 
+    private void setAttribute(FaceletContext ctx, UIComponent cmp, String name) {
+        setAttribute(ctx, cmp, name, null);
+    }
+
+    private void setAttribute(FaceletContext ctx, UIComponent cmp, String name, Object defaultValue) {
+        TagAttribute attribute = this.getAttribute(name);
+        if (attribute != null) {
+            Object o = attribute.getObject(ctx);
+            if (o == null && defaultValue == null) {
+                throw new IllegalArgumentException("Attribute '" + name + "' resolved to null and no default value specified");
+            } else if (o == null) {
+                cmp.getAttributes().put(name, defaultValue);
+            } else {
+                cmp.getAttributes().put(name, o);
+            }
+        }
+    }
+
+    private Stack<WikiTextMacro> getPageMacroStack() {
+        if (Contexts.getPageContext().get(MACRO_STACK_PAGE_VARIABLE) == null) {
+            log.debug("macro page stack is null, creating new stack for this page");
+            Contexts.getPageContext().set(MACRO_STACK_PAGE_VARIABLE, new Stack<WikiTextMacro>());
+        }
+        return (Stack<WikiTextMacro>)Contexts.getPageContext().get(MACRO_STACK_PAGE_VARIABLE);
+    }
+
+    private boolean isMacroOnPageStack(WikiTextMacro macro) {
+        Stack<WikiTextMacro> macroStack = getPageMacroStack();
+        for (WikiTextMacro macroOnPageStack : macroStack) {
+            if (macroOnPageStack.getName().equals(macro.getName())) return true;
+        }
+        return false;
+    }
+
 }
\ No newline at end of file

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiPageFragmentCacheRenderer.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiPageFragmentCacheRenderer.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiPageFragmentCacheRenderer.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -17,7 +17,6 @@
 import javax.faces.context.ResponseWriter;
 import java.io.IOException;
 import java.io.StringWriter;
-import java.io.Serializable;
 
 /**
  * Implementation of <tt>&lt;s:cache&gt;</tt> renderer based on EHCache.
@@ -34,11 +33,25 @@
     }
 
     @Override
+    public boolean getRendersChildren() {
+        return true;
+    }
+
+    @Override
     protected void doEncodeChildren(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException {
         UICache cache = (UICache) component;
+        log.debug("ui cache is enabled: " + cache.isEnabled());
         if (cache.isEnabled()) {
+            String region = cache.getRegion();
+            if (region == null) {
+                throw new RuntimeException("required region attribute missing on <s:cache>");
+            }
             String key = cache.getKey();
-            String cachedContent = getFromCache(key);
+            if (key == null) {
+                throw new RuntimeException("required key attribute missing on <s:cache>");
+            }
+            log.debug("attempting to obtain from cache region '" + region +"' using key: " + key);
+            String cachedContent = PageFragmentCache.instance().get(region, key);
             if (cachedContent == null) {
                 log.debug("rendering from scratch: " + key);
                 StringWriter stringWriter = new StringWriter();
@@ -48,7 +61,8 @@
                 context.setResponseWriter(writer);
                 String output = stringWriter.getBuffer().toString();
                 writer.write(output);
-                putInCache(key, output);
+                log.debug("caching rendered content in region '" + region +"' using key: " + key);
+                PageFragmentCache.instance().put(region, key, output);
             } else {
                 log.debug("rendering from cache: " + key);
                 writer.write(cachedContent);
@@ -59,18 +73,4 @@
         }
     }
 
-
-    @Override
-    public boolean getRendersChildren() {
-        return true;
-    }
-
-    public static void putInCache(Serializable key, String content) {
-        PageFragmentCache.instance().put(key, content);
-    }
-
-    public static String getFromCache(Serializable key) {
-        return PageFragmentCache.instance().get(key);
-    }
-
 }

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiPluginThemeResource.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiPluginThemeResource.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiPluginThemeResource.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,221 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.ui;
+
+import static org.jboss.seam.ScopeType.APPLICATION;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.log.Logging;
+import org.jboss.seam.servlet.ContextualHttpServletRequest;
+import org.jboss.seam.util.Resources;
+import org.jboss.seam.web.AbstractResource;
+import org.jboss.seam.wiki.core.plugin.PluginRegistry;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.core.plugin.metamodel.Plugin;
+import org.jboss.seam.wiki.core.plugin.metamodel.module.MacroPluginModule;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
+import org.jboss.seam.core.Expressions;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Serves files from the classpath, from a Plugin theme package.
+ * <p>
+ * This means that any web request can get any file out of that package. So don't put
+ * anything into a plugins theme directory that you don't want people to GET.
+ * <p>
+ * <p>
+ * It is primarily used for serving up plugin CSS and image files. It can also interpolate
+ * EL expressions in certain resources, configured with <tt>interpolatedResourcesExtensions</tt>.
+ * The default is to parse resources with <tt>css</tt> extension. A temporary
+ * <tt>WikiPluginMacro</tt> instance is available in these expressions, you can utilize this
+ * to access the metadata (e.g. paths) of the plugin.
+ * </p>
+ *
+ * @author Christian Bauer
+ */
+ at Scope(APPLICATION)
+ at Name("wikiPluginThemeResource")
+ at BypassInterceptors
+public class WikiPluginThemeResource extends AbstractResource {
+
+    private Log log = Logging.getLog(WikiPluginThemeResource.class);
+
+    private static final Pattern EL_PATTERN = Pattern.compile("#" + Pattern.quote("{") + "(.*)" + Pattern.quote("}"));
+
+    // Resources URIs end with /<pluginKey/<pluginMacroModuleKey>/<themeResourceName>.<themeResourceExtension>
+    public static Pattern PLUGIN_RESOURCE_PATTERN =
+            Pattern.compile("^/(" + Plugin.KEY_PATTERN + ")/(" + Plugin.KEY_PATTERN + ")/(.+?)\\.([a-z]+)$");
+
+    // Resources that are interpolated, i.e. which are text files that contain EL expressions
+    private String[] interpolatedResourcesExtensions = new String[]{"css"};
+
+    @Override
+    public String getResourcePath() {
+        return Plugin.REGISTER_SEAM_RESOURCE_THEME;
+    }
+
+    @Override
+    public void getResource(final HttpServletRequest request, final HttpServletResponse response)
+            throws ServletException, IOException {
+
+        // Wrap this, we need an ApplicationContext
+        new ContextualHttpServletRequest(request) {
+            @Override
+            public void process() throws IOException {
+                doWork(request, response);
+            }
+        }.run();
+
+    }
+
+    public String[] getInterpolatedResourcesExtensions() {
+        return interpolatedResourcesExtensions;
+    }
+
+    public void setInterpolatedResourcesExtensions(String[] interpolatedResourcesExtensions) {
+        this.interpolatedResourcesExtensions = interpolatedResourcesExtensions;
+    }
+
+    public void doWork(HttpServletRequest request, HttpServletResponse response)
+            throws IOException {
+
+        String pathInfo = request.getPathInfo().substring(getResourcePath().length());
+
+        String pluginKey = null;
+        String pluginMacroModuleKey = null;
+        String themeResourceName = null;
+        String themeResourceExtension = null;
+
+        Matcher matcher = PLUGIN_RESOURCE_PATTERN.matcher(pathInfo);
+        if (matcher.find()) {
+            pluginKey = matcher.group(1);
+            pluginMacroModuleKey = matcher.group(2);
+            themeResourceName = matcher.group(3);
+            themeResourceExtension = matcher.group(4);
+            log.debug("request for resource,"
+                    + " plugin key '" + pluginKey + "'"
+                    + " plugin macro module key '" + pluginMacroModuleKey + "'"
+                    + " theme resource name '" + themeResourceName + "'"
+                    + " theme resource ext '" + themeResourceExtension + "'"
+            );
+        }
+        if (pluginKey == null) {
+            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Plugin key not found");
+            return;
+        }
+        if (pluginMacroModuleKey == null) {
+            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Plugin macro module key not found");
+            return;
+        }
+        if (themeResourceName == null) {
+            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Resource name not found");
+            return;
+        }
+
+        PluginRegistry registry = PluginRegistry.instance();
+        Plugin plugin = registry.getPlugin(pluginKey);
+        if (plugin == null) {
+            response.sendError(HttpServletResponse.SC_NOT_FOUND, "Plugin key not found in registry: " + pluginKey);
+            return;
+        }
+
+        // First, check the registry if we have the fully qualified name as a macro plugin module
+        MacroPluginModule macroPluginModule =
+                registry.getMacroPluginModulesByKey().get(plugin.getKey() + "." + pluginMacroModuleKey);
+
+        // Then also check if it's a module of the given plugin
+        if (macroPluginModule == null || plugin.getModuleByKey(pluginMacroModuleKey) == null) {
+            response.sendError(
+                HttpServletResponse.SC_NOT_FOUND,
+                "Plugin macro module key not found in registry or not available for plugin: " + pluginMacroModuleKey
+            );
+            return;
+        }
+
+        // Create a new WikiPluginMacro instance which will be available during interpolation as 'currentMacro'
+        WikiPluginMacro pluginMacro = registry.createWikiPluginMacro(
+                new WikiTextMacro(macroPluginModule.getName())
+        );
+        org.jboss.seam.contexts.Contexts.getEventContext().set(WikiPluginMacro.CURRENT_MACRO_EL_VARIABLE, pluginMacro);
+
+        String resourcePath = plugin.getPackageThemePath() + "/" + themeResourceName + "." + themeResourceExtension;
+        InputStream in = Resources.getResourceAsStream(resourcePath, getServletContext());
+
+        if (in != null) {
+
+            boolean isInterpolated = false;
+            for (String interpolatedResourcesExtension : interpolatedResourcesExtensions) {
+                if (interpolatedResourcesExtension.equals(themeResourceExtension)) isInterpolated = true;
+            }
+
+            if (isInterpolated) {
+                log.debug("serving interpolated resource: " + resourcePath);
+                CharSequence textFile = readFile(in);
+                textFile = parseEL(textFile);
+                response.getWriter().write(textFile.toString());
+                response.getWriter().flush();
+            } else {
+                log.debug("serving resource: " + resourcePath);
+                byte[] buffer = new byte[1024];
+                int read = in.read(buffer);
+                while (read != -1) {
+                    response.getOutputStream().write(buffer, 0, read);
+                    read = in.read(buffer);
+                }
+                response.getOutputStream().flush();
+            }
+        } else {
+            response.sendError(HttpServletResponse.SC_NOT_FOUND, resourcePath);
+        }
+
+    }
+
+    private CharSequence readFile(InputStream inputStream) throws IOException {
+        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
+        StringBuilder css = new StringBuilder();
+        String line;
+        while ((line = reader.readLine()) != null) {
+            css.append(line);
+            css.append("\n");
+        }
+        inputStream.close();
+        return css;
+    }
+
+    // Resolve any EL value binding expression present in text resource
+    // This should be Interpolator.interpolate, but it seems to break on CSS
+    private CharSequence parseEL(CharSequence string) {
+        StringBuffer parsed = new StringBuffer(string.length());
+        Matcher matcher =
+                EL_PATTERN.matcher(string);
+
+        while (matcher.find()) {
+            String result = Expressions.instance().createValueExpression(
+                "#{" + matcher.group(1) + "}", String.class
+            ).getValue();
+            if (result != null) {
+                matcher.appendReplacement(parsed, result);
+            } else {
+                matcher.appendReplacement(parsed, "");
+            }
+        }
+        matcher.appendTail(parsed);
+        return parsed;
+    }
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiRedirect.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiRedirect.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiRedirect.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,109 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.core.ui;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.Component;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.faces.RedirectException;
+import org.jboss.seam.wiki.core.model.WikiDocument;
+import org.jboss.seam.wiki.core.renderer.WikiURLRenderer;
+
+import javax.faces.context.FacesContext;
+import javax.faces.context.ExternalContext;
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("wikiRedirect")
+ at Scope(ScopeType.CONVERSATION)
+public class WikiRedirect implements Serializable {
+
+    @Logger
+    Log log;
+
+    private WikiDocument wikiDocument;
+    private boolean forcePermURL = false;
+    private String fragment;
+    private boolean propagateConversation = false;
+
+    /* TODO: That would be nice, we should add these when !forcePermURL
+    private String year;
+    private String month;
+    private String day;
+    private String page;
+    private String tag;
+    private String category;
+    */
+
+    public WikiDocument getWikiDocument() {
+        return wikiDocument;
+    }
+
+    public WikiRedirect setWikiDocument(WikiDocument wikiDocument) {
+        this.wikiDocument = wikiDocument;
+        return this;
+    }
+
+    public boolean isForcePermURL() {
+        return forcePermURL;
+    }
+
+    public WikiRedirect setForcePermURL(boolean forcePermURL) {
+        this.forcePermURL = forcePermURL;
+        return this;
+    }
+
+    public String getFragment() {
+        return fragment;
+    }
+
+    public WikiRedirect setFragment(String fragment) {
+        this.fragment = fragment;
+        return this;
+    }
+
+    public boolean isPropagateConversation() {
+        return propagateConversation;
+    }
+
+    public WikiRedirect setPropagateConversation(boolean propagateConversation) {
+        this.propagateConversation = propagateConversation;
+        return this;
+    }
+
+    public void execute() {
+
+        WikiURLRenderer urlRenderer = WikiURLRenderer.instance();
+        String url = forcePermURL
+                ? urlRenderer.renderPermURL(getWikiDocument())
+                : urlRenderer.renderURL(getWikiDocument());
+
+        // TODO: Fragile?
+        if (propagateConversation)  url = url + "?cid=" + org.jboss.seam.core.Conversation.instance().getId();
+
+        if (getFragment() != null) url = url + "#" + fragment;
+        
+        ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
+        try {
+            log.debug("redirecting to URL: " + url);
+            ctx.redirect(ctx.encodeResourceURL(url));
+        } catch (IOException ioe) {
+            throw new RedirectException(ioe);
+        }
+        FacesContext.getCurrentInstance().responseComplete();
+    }
+
+    public static WikiRedirect instance() {
+        return (WikiRedirect) Component.getInstance(WikiRedirect.class);
+    }
+}

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiTextEditor.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiTextEditor.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiTextEditor.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -2,7 +2,9 @@
 
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Logger;
 import org.jboss.seam.ScopeType;
+import org.jboss.seam.log.Log;
 import org.jboss.seam.faces.FacesMessages;
 import org.jboss.seam.ui.validator.FormattedTextValidator;
 
@@ -21,12 +23,17 @@
 @Scope(ScopeType.CONVERSATION)
 public class WikiTextEditor implements Serializable {
 
+    @Logger
+    Log log;
+
     public void validate(String textEditorId, String value) {
         if (value == null) return;
+        log.debug("validating value of text editor: " + textEditorId);
         FormattedTextValidator validator = new FormattedTextValidator();
         try {
             validator.validate(null, null, value);
         } catch (ValidatorException e) {
+            log.debug("exception during validation: " + e.getFacesMessage().getSummary());
             // TODO: Needs to use resource bundle, how?
             FacesMessages.instance().addToControl(
                 textEditorId + "TextArea",
@@ -34,6 +41,7 @@
                 e.getFacesMessage().getSummary()
             );
         }
+        log.debug("completed validation of text editor value");
 
     }
 }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/upload/importers/metamodel/ImporterRegistry.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/upload/importers/metamodel/ImporterRegistry.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/upload/importers/metamodel/ImporterRegistry.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -22,7 +22,7 @@
     List<Importer> importers = new ArrayList<Importer>();
 
     // TODO: Fix importers
-    //@Observer("Wiki.started")
+    //@Observer("Wiki.startup")
     public void scanForFileImporters() {
 
         log.debug("initializing file importer registry");

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/Preferences.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/Preferences.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/Preferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,8 +1,8 @@
 package org.jboss.seam.wiki.preferences;
 
 import org.jboss.seam.ScopeType;
+import org.jboss.seam.Component;
 import org.jboss.seam.annotations.*;
-import org.jboss.seam.core.Expressions;
 import org.jboss.seam.log.Log;
 import org.jboss.seam.wiki.preferences.metamodel.PreferenceRegistry;
 
@@ -35,6 +35,7 @@
     @In(required = false) @Out(required = false, scope = ScopeType.EVENT)
     private Map<CacheKey, Object> eventPreferencesCache;
 
+    // Not typesafe
     public Object get(String preferenceEntityName) {
         return get(preferenceEntityName, null);
     }
@@ -92,23 +93,22 @@
         return preferenceEntityInstance;
     }
 
-    public static Object getInstance(String preferenceEntityName, String instanceName) {
-        return Expressions.instance().createValueExpression("#{preferences.get('" + preferenceEntityName + "', "+instanceName+")}").getValue();
+    // Typesafe (more or less)
+    public <P> P get(Class<P> clazz) {
+        Preferences prefs = (Preferences)Component.getInstance(Preferences.class);
+        return (P) prefs.get(getPreferenceEntityName(clazz));
     }
 
-    public static Object getInstance(String preferenceEntityName) {
-        return Expressions.instance().createValueExpression("#{preferences.get('" + preferenceEntityName + "')}").getValue();
+    public <P> P get(Class<P> clazz, Object instance) {
+        Preferences prefs = (Preferences)Component.getInstance(Preferences.class);
+        return (P) prefs.get(getPreferenceEntityName(clazz), instance);
     }
 
-    public static <P> P getInstance(Class<P> clazz, String instanceName) {
-        return (P)getInstance(getPreferenceEntityName(clazz), instanceName);
+    public static Preferences instance() {
+        return (Preferences)Component.getInstance(Preferences.class);
     }
 
-    public static <P> P getInstance(Class<P> clazz) {
-        return (P)getInstance(getPreferenceEntityName(clazz));
-    }
-
-    private static String getPreferenceEntityName(Class<?> clazz) {
+    private String getPreferenceEntityName(Class<?> clazz) {
         org.jboss.seam.wiki.preferences.annotations.Preferences
                 p = clazz.getAnnotation(org.jboss.seam.wiki.preferences.annotations.Preferences.class);
          if (p.name() != null) {

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/annotations/PreferenceProperty.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/annotations/PreferenceProperty.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/annotations/PreferenceProperty.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -15,4 +15,5 @@
     PreferenceVisibility[] visibility() default PreferenceVisibility.SYSTEM;
     String editorIncludeName() default "";
     String templateComponentName() default "";
+    String mappedTo() default "";
 }
\ No newline at end of file

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/annotations/Preferences.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/annotations/Preferences.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/annotations/Preferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -11,4 +11,5 @@
 public @interface Preferences {
     String description();
     String name() default "";
+    String mappedTo() default "";
 }
\ No newline at end of file

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/metamodel/PreferenceEntity.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/metamodel/PreferenceEntity.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/metamodel/PreferenceEntity.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -27,6 +27,7 @@
     private Class clazz;
     private String description;
     private String entityName;
+    private String mappedTo;
     private SortedSet<Property> properties = new TreeSet<Property>();
     private Map<String, Property> propertiesByName = new HashMap<String,Property>();
     private SortedSet<Property> propertiesSystemVisible = new TreeSet<Property>();
@@ -41,6 +42,7 @@
         this.clazz = entityClass;
         this.description = interpolate(entityClass.getAnnotation(Preferences.class).description());
         this.entityName = entityClass.getAnnotation(Preferences.class).name();
+        this.mappedTo = entityClass.getAnnotation(Preferences.class).mappedTo();
         if (this.entityName != null && this.entityName.length() == 0) this.entityName = clazz.getSimpleName();
 
         // @PreferenceProperty fields
@@ -54,7 +56,8 @@
                                  interpolate(field.getAnnotation(PreferenceProperty.class).description()),
                                  field.getAnnotation(PreferenceProperty.class).visibility(),
                                  field.getAnnotation(PreferenceProperty.class).editorIncludeName(),
-                                 field.getAnnotation(PreferenceProperty.class).templateComponentName()
+                                 field.getAnnotation(PreferenceProperty.class).templateComponentName(),
+                                 field.getAnnotation(PreferenceProperty.class).mappedTo()
                     );
 
                 if (property.isSystemVisible()) propertiesSystemVisible.add(property);
@@ -78,6 +81,10 @@
         return entityName;
     }
 
+    public String getMappedTo() {
+        return mappedTo;
+    }
+
     public SortedSet<Property> getProperties() {
         return properties;
     }
@@ -195,9 +202,11 @@
         private List<PreferenceVisibility> visibility;
         private String editorIncludeName;
         private String templateComponentName;
+        private String mappedTo;
 
         public Property(String fieldName, Class fieldType, String description,
-                        PreferenceVisibility[] visibility, String editorIncludeName, String templateComponentName) {
+                        PreferenceVisibility[] visibility,
+                        String editorIncludeName, String templateComponentName, String mappedTo) {
             this.field = Reflections.getField(getClazz(), fieldName);
             this.fieldName = fieldName;
             this.fieldType = fieldType;
@@ -205,7 +214,7 @@
             this.visibility = Arrays.asList(visibility);
             this.editorIncludeName = editorIncludeName;
             this.templateComponentName = templateComponentName;
-
+            this.mappedTo = mappedTo;
         }
 
         public Field getField() {
@@ -240,6 +249,10 @@
             return templateComponentName;
         }
 
+        public String getMappedTo() {
+            return mappedTo;
+        }
+
         public boolean isSystemVisible() {
             return getVisibility().contains(PreferenceVisibility.SYSTEM);
         }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/metamodel/PreferenceRegistry.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/metamodel/PreferenceRegistry.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/preferences/metamodel/PreferenceRegistry.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,26 +1,28 @@
 package org.jboss.seam.wiki.preferences.metamodel;
 
+import org.jboss.seam.Component;
 import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.*;
-import org.jboss.seam.annotations.Observer;
-import org.jboss.seam.log.Log;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Startup;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.log.LogProvider;
+import org.jboss.seam.log.Logging;
 import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+import org.jboss.seam.wiki.preferences.annotations.Preferences;
+import org.jboss.seam.wiki.util.AnnotationDeploymentHelper;
 
 import java.util.*;
 
 @Name("preferenceRegistry")
 @Scope(ScopeType.APPLICATION)
+ at Startup(depends = "pluginI18NBinder")
+ at BypassInterceptors
 public class PreferenceRegistry {
 
-    @Logger
-    static Log log;
+    private static final LogProvider log = Logging.getLogProvider(PreferenceRegistry.class);
 
-    @In(
-        value="#{deploymentStrategy.annotatedClasses['org.jboss.seam.wiki.preferences.annotations.Preferences']}",
-        required = false
-    )
-    Set<Class> preferencesClasses;
-
     Set<PreferenceEntity> preferenceEntities = new HashSet<PreferenceEntity>();
     Map<String, PreferenceEntity> preferenceEntitiesByName = new HashMap<String, PreferenceEntity>();
 
@@ -28,12 +30,14 @@
     Set<PreferenceEntity> preferenceEntitiesUser = new HashSet<PreferenceEntity>();
     Set<PreferenceEntity> preferenceEntitiesInstance = new HashSet<PreferenceEntity>();
 
-    @Observer("Wiki.started")
-    public void create() {
+    @Create
+    public void startup() {
         log.debug("initializing preferences registry");
 
+        Set<Class<Object>> preferencesClasses = AnnotationDeploymentHelper.getAnnotatedClasses(Preferences.class);
+
         if (preferencesClasses == null)
-            throw new RuntimeException("Add @Preferences annotation to META-INF/seam-deployment.properties");
+            throw new RuntimeException("No preference entities found, add @Preferences annotation to META-INF/seam-deployment.properties");
 
         for (Class preferencesClass : preferencesClasses) {
             PreferenceEntity preferenceEntity = new PreferenceEntity(preferencesClass);
@@ -55,6 +59,7 @@
                 preferenceEntitiesInstance.add(preferenceEntity);
         }
 
+        log.info("registered preference entities: " + preferenceEntities.size());
 
     }
 
@@ -78,7 +83,8 @@
         return preferenceEntitiesInstance;
     }
 
-    public SortedSet<PreferenceEntity> getPreferenceEntities(PreferenceVisibility[] visibilities) {
+    public SortedSet<PreferenceEntity> getPreferenceEntities(PreferenceVisibility... visibilities) {
+        if (visibilities == null) return null;
         SortedSet<PreferenceEntity> entities = new TreeSet<PreferenceEntity>();
         List<PreferenceVisibility> visibilityList = Arrays.asList(visibilities);
         if (visibilityList.contains(PreferenceVisibility.SYSTEM)) entities.addAll(getPreferenceEntitiesSystem());
@@ -86,4 +92,9 @@
         if (visibilityList.contains(PreferenceVisibility.INSTANCE)) entities.addAll(getPreferenceEntitiesInstance());
         return entities;
     }
+
+    public static PreferenceRegistry instance() {
+        return (PreferenceRegistry) Component.getInstance(PreferenceRegistry.class);
+    }
+
 }
\ No newline at end of file

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/AnnotationDeploymentHelper.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/AnnotationDeploymentHelper.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/AnnotationDeploymentHelper.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,36 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.util;
+
+import org.jboss.seam.deployment.AnnotationDeploymentHandler;
+import org.jboss.seam.deployment.DeploymentStrategy;
+import org.jboss.seam.Component;
+
+import java.util.Set;
+
+/**
+ * A convenience class that allows us to access Seam deployment handlers without @In'jecting them.
+ * <p>
+ * This is useful because we can optimize things such as registries with @BypassInterceptors.
+ * </p>
+ *
+ * @author Christian Bauer
+ */
+public class AnnotationDeploymentHelper {
+
+    public static Set<Class<Object>> getAnnotatedClasses(String annotationFQN) {
+        DeploymentStrategy deployment = (DeploymentStrategy) Component.getInstance("deploymentStrategy");
+        AnnotationDeploymentHandler handler =
+                (AnnotationDeploymentHandler)deployment.getDeploymentHandlers().get(AnnotationDeploymentHandler.NAME);
+        return handler.getClasses().get(annotationFQN);
+    }
+
+    public static Set<Class<Object>> getAnnotatedClasses(Class annotationType) {
+        return getAnnotatedClasses(annotationType.getName());
+    }
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/PatternDeploymentHandler.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/PatternDeploymentHandler.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/PatternDeploymentHandler.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,40 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.util;
+
+import org.jboss.seam.deployment.DeploymentHandler;
+
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+/**
+ * @author Christian Bauer
+ */
+public abstract class PatternDeploymentHandler implements DeploymentHandler {
+
+    protected Pattern compiledPattern;
+
+    protected PatternDeploymentHandler() {
+        compiledPattern = Pattern.compile(getPattern());
+    }
+
+    public void handle(String s, ClassLoader classLoader) {
+        Matcher matcher = compiledPattern.matcher(s);
+        if (matcher.matches()) {
+            String[] groups = new String[matcher.groupCount()];
+            for (int i = 0; i < groups.length; i++) {
+                groups[i] = matcher.group(i+1);
+            }
+            handleMatch(s, classLoader, groups);
+        }
+    }
+
+    public abstract String getPattern();
+
+    public abstract void handleMatch(String s, ClassLoader classLoader, String... matchedGroups);
+
+}

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiResourceLoader.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiResourceLoader.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiResourceLoader.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,43 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.util;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Install;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.Component;
+import org.jboss.seam.core.ResourceLoader;
+
+import java.util.List;
+import java.util.Arrays;
+
+/**
+ * Override the stateless built-in Seam component and provide a custom
+ * list of bundle names to load, using the <tt>pluginMessageBundleNames</tt>
+ * and a static list of core bundles.
+ *
+ * @author Christian Bauer
+ */
+ at Scope(ScopeType.STATELESS)
+ at BypassInterceptors
+ at Install(precedence=Install.APPLICATION)
+ at Name("org.jboss.seam.core.resourceLoader")
+public class WikiResourceLoader extends ResourceLoader {
+
+    protected String[] CORE_BUNDLE_NAMES = new String[] {
+        "i18n.messages", "i18n.messages_feedConnector", "i18n_messags_jiraConnector"
+    };
+
+    public String[] getBundleNames() {
+        List<String> bundleNames = (List<String>) Component.getInstance("pluginMessageBundleNames");
+        bundleNames.addAll(Arrays.asList(CORE_BUNDLE_NAMES));
+        String[] bundles = new String[bundleNames.size()];
+        return bundleNames.toArray(bundles);
+    }
+}

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -10,7 +10,6 @@
 import org.jboss.seam.security.Identity;
 import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
 import org.jboss.seam.wiki.core.model.*;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
 import org.jboss.seam.wiki.preferences.Preferences;
 
 import javax.faces.context.FacesContext;
@@ -122,11 +121,11 @@
 
     public static boolean showEmailAddress() {
         Integer accessLevel = (Integer)Component.getInstance("currentAccessLevel");
-        if (Preferences.getInstance(WikiPreferences.class).isShowEmailToLoggedInOnly()
+        if (Preferences.instance().get(WikiPreferences.class).isShowEmailToLoggedInOnly()
                 && Identity.instance().isLoggedIn()
                 && accessLevel == Role.ADMINROLE_ACCESSLEVEL) {
             return true;
-        } else if (!Preferences.getInstance(WikiPreferences.class).isShowEmailToLoggedInOnly()) {
+        } else if (!Preferences.instance().get(WikiPreferences.class).isShowEmailToLoggedInOnly()) {
             return true;
         }
         return false;
@@ -167,12 +166,12 @@
 
     public static String escapeEmailURL(String string) {
         return string.length() >= 7 && string.substring(0, 7).equals("mailto:")
-                ? string.replaceAll("@", Preferences.getInstance(WikiPreferences.class).getAtSymbolReplacement())
+                ? string.replaceAll("@", Preferences.instance().get(WikiPreferences.class).getAtSymbolReplacement())
                 : string;
     }
 
     public static String escapeAtSymbol(String string) {
-        return string.replaceAll("@", Preferences.getInstance(WikiPreferences.class).getAtSymbolReplacement());
+        return string.replaceAll("@", Preferences.instance().get(WikiPreferences.class).getAtSymbolReplacement());
     }
 
     public static String escapeHtml(String string, boolean convertNewlines) {
@@ -327,7 +326,7 @@
      */
     public static String calculateMessageId(Long id, String s) {
 
-        WikiPreferences prefs = Preferences.getInstance(WikiPreferences.class);
+        WikiPreferences prefs = Preferences.instance().get(WikiPreferences.class);
         Hash hash = (Hash)Component.getInstance(Hash.class);
         String domain;
         try {
@@ -341,12 +340,4 @@
         return msgId.toString();
     }
 
-    public static String macroCacheKey(WikiDocument currentDocument, WikiMacro macro) {
-        Hash hash = (Hash)Component.getInstance(Hash.class);
-
-        StringBuilder builder = new StringBuilder();
-        builder.append(currentDocument.getId()).append(macro.hashCode()).append(macro.getParams().hashCode());
-        return macro.getName() + "-" + hash.hash(builder.toString());
-    }
-
 }

Added: trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/XmlDeploymentHandler.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/XmlDeploymentHandler.java	                        (rev 0)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/XmlDeploymentHandler.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,91 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.util;
+
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.jboss.seam.deployment.DeploymentHandler;
+import org.jboss.seam.util.DTDEntityResolver;
+
+import java.io.InputStream;
+import java.io.FileNotFoundException;
+import java.util.HashMap;
+import java.util.Map;
+import java.net.UnknownHostException;
+
+/**
+ * Seam deployment handler, can be configured in seam-deployment.properties.
+ * <p>
+ * Supports scanning of files with <tt>getExtension()</tt>, returns them as dom4j
+ * <tt>Element</tt> (the root element of each XML file). Override the
+ * <tt>isSchemaValidating()</tt> method to force DTD/schema validation.
+ * </p>
+ *
+ * @author Christian Bauer
+ */
+public abstract class XmlDeploymentHandler implements DeploymentHandler {
+
+    Map<String, InputStream> files = new HashMap<String, InputStream>();
+    Map<String, Element> elements;
+
+    public void handle(String s, ClassLoader classLoader) {
+        if (s.endsWith(getExtension())) {
+            files.put(s, classLoader.getResourceAsStream(s));
+        }
+    }
+
+    public abstract String getExtension();
+
+    public boolean isSchemaValidating() {
+        return false;
+    }
+
+    public Map<String, Element> getDescriptorsAsXmlElements() {
+        // Lazy access to streams
+        if (elements == null) {
+            elements = new HashMap<String, Element>();
+            for (Map.Entry<String, InputStream> fileInputStream : files.entrySet()) {
+                try {
+                    SAXReader saxReader = new SAXReader();
+                    saxReader.setMergeAdjacentText(true);
+
+                    if (isSchemaValidating()) {
+                        saxReader.setEntityResolver(new DTDEntityResolver());
+                        saxReader.setValidation(true);
+                        saxReader.setFeature("http://apache.org/xml/features/validation/schema",true);
+                    }
+
+                    elements.put(fileInputStream.getKey(), saxReader.read(fileInputStream.getValue()).getRootElement());
+
+                } catch (DocumentException dex) {
+                    Throwable nested = dex.getNestedException();
+                    if (nested != null) {
+                        if (nested instanceof FileNotFoundException) {
+                            throw new RuntimeException(
+                                "Can't find schema/DTD reference for file: "
+                                + fileInputStream.getKey() + "':  "
+                                + nested.getMessage(), dex
+                            );
+                        } else if (nested instanceof UnknownHostException) {
+                            throw new RuntimeException(
+                                "Cannot connect to host from schema/DTD reference: "
+                                + nested.getMessage()
+                                + " - check that your schema/DTD reference is current", dex
+                            );
+                        }
+                    }
+                    throw new RuntimeException("Could not parse XML file: " + fileInputStream.getKey() ,dex);
+                } catch (Exception ex) {
+                    throw new RuntimeException("Could not parse XML file: " + fileInputStream.getKey() ,ex);
+                }
+            }
+        }
+        return elements;
+    }
+
+}

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/Basic.plugin.xml
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/Basic.plugin.xml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/Basic.plugin.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin key="basic"
+        xmlns="http://jboss.com/products/seam/wiki/plugin"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://jboss.com/products/seam/wiki/plugin
+                            classpath://org/jboss/seam/wiki/core/plugin/plugin-1.0.xsd">
+
+    <plugin-info version="1.0">
+        <application-version min="1.0" max="1.0"/>
+        <vendor name="Red Hat Inc." url="http://www.seamframework.org/"/>
+    </plugin-info>
+
+    <macro key="clearBackground" name="clearBackground">
+        <skins>
+            <skin name="d"/>
+        </skins>
+        <applicable-to content="true" header="true"/>
+    </macro>
+
+    <macro key="hideControls" name="hideControls">
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <applicable-to content="true" header="true" footer="true"/>
+    </macro>
+
+    <macro key="hideComments" name="hideComments">
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <applicable-to content="true" header="true" footer="true"/>
+    </macro>
+
+    <macro key="hideTags" name="hideTags">
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <applicable-to content="true" header="true" footer="true"/>
+    </macro>
+
+    <macro key="hideCreatorHistory" name="hideCreatorHistory">
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <applicable-to content="true" header="true" footer="true"/>
+    </macro>
+
+    <macro key="disableContentMacros" name="disableContentMacros">
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <applicable-to header="true"/>
+    </macro>
+
+    <macro key="dirMenu" name="dirMenu">
+        <skins>
+            <skin name="d"/>
+        </skins>
+        <applicable-to content="true"/>
+        <cache-regions>
+            <cache-region name="DirMenuList">
+                <invalidation-event name="Node.removed"/>
+                <invalidation-event name="Node.updated"/>
+                <invalidation-event name="Node.persisted"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+    <macro key="dirToc" name="dirToc">
+        <skins>
+            <skin name="d"/>
+        </skins>
+        <applicable-to content="true"/>
+        <cache-regions>
+            <cache-region name="DirectoryToc">
+                <invalidation-event name="Node.persisted"/>
+                <invalidation-event name="Node.removed"/>
+                <invalidation-event name="Node.updated"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+    <macro key="docPager" name="docPager">
+        <skins>
+            <skin name="m"/>
+            <skin name="d"/>
+        </skins>
+        <applicable-to content="true" header="true" footer="true"/>
+        <cache-regions>
+            <cache-region name="DocPager">
+                <invalidation-event name="Node.persisted"/>
+                <invalidation-event name="Node.removed"/>
+                <invalidation-event name="Node.updated"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+    <macro key="lastModifiedDocuments" name="lastModifiedDocuments">
+        <applicable-to content="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <cache-regions>
+            <cache-region name="LastModifiedDocumentList">
+                <invalidation-event name="Node.removed"/>
+                <invalidation-event name="Node.updated"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+    <macro key="flash" name="flash">
+        <applicable-to content="true"/>
+        <skins>
+            <skin name="d"/>
+        </skins>
+    </macro>
+
+    <macro key="tags" name="tags">
+        <applicable-to content="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <cache-regions>
+            <cache-region name="Tags">
+                <invalidation-event name="Node.persisted"/>
+                <invalidation-event name="Node.removed"/>
+                <invalidation-event name="Node.updated"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+    <macro key="userProfile" name="userProfile">
+        <applicable-to content="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <cache-regions>
+            <cache-region name="UserProfile">
+                <invalidation-event name="User.updated"/>
+                <invalidation-event name="User.removed"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+</plugin>
+

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenu.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/dirMenu/DirMenu.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenu.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenu.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,53 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+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.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.preferences.Preferences;
+
+import java.io.Serializable;
+
+/**
+ * Menu tree, base is the current directory.
+ *
+ * @author Christian Bauer
+ */
+ at Name("dirMenu")
+ at Scope(ScopeType.PAGE)
+public class DirMenu implements Serializable {
+
+    public static final String MACRO_ATTR_ROOT = "dirMenuRoot";
+
+    @In
+    WikiDirectory currentDirectory;
+
+    @In
+    WikiNodeDAO wikiNodeDAO;
+
+    public NestedSetNodeWrapper<WikiDirectory> getRoot(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;
+            DirMenuPreferences prefs  = Preferences.instance().get(DirMenuPreferences.class, macro);
+            if (prefs.getOnlyMenuItems() != null && prefs.getOnlyMenuItems()) {
+                root = wikiNodeDAO.findMenuItemTree(currentDirectory, 3l, 3l, false);
+            } else {
+                root = wikiNodeDAO.findWikiDirectoryTree(currentDirectory, 3l, 3l, false);
+            }
+            macro.getAttributes().put(MACRO_ATTR_ROOT, root);
+        }
+        return (NestedSetNodeWrapper<WikiDirectory>)macro.getAttributes().get(MACRO_ATTR_ROOT);
+    }
+
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenu.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenuPreferences.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/dirMenu/DirMenuPreferences.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenuPreferences.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenuPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,84 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Range;
+import org.hibernate.validator.Length;
+import org.jboss.seam.wiki.preferences.annotations.Preferences;
+import org.jboss.seam.wiki.preferences.annotations.PreferenceProperty;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+
+import java.io.Serializable;
+
+ at Preferences(
+    name = "DirMenu",
+    description = "#{messages['basic.dirMenu.preferences.description']}",
+    mappedTo = "basic.dirMenu"
+)
+public class DirMenuPreferences implements Serializable {
+
+    @PreferenceProperty(
+        description = "#{messages['basic.dirMenu.preferences.property.title']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "AdaptiveTextInput"
+    )
+    @Length(min = 0, max = 255)
+    @NotNull
+    private String title;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.dirMenu.preferences.property.menuLevels']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange"
+    )
+    @Range(min = 1l, max = 10l)
+    @NotNull
+    private Long menuLevels;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.dirMenu.preferences.property.menuDepth']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange"
+
+    )
+    @Range(min = 1l, max = 100l)
+    @NotNull
+    private Long menuDepth;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.dirMenu.preferences.property.showSubscribeIcon']}",
+        visibility = PreferenceVisibility.INSTANCE
+    )
+    private Boolean showSubscribeIcon;
+
+    @PreferenceProperty(
+            description = "#{messages['basic.dirMenu.preferences.property.onlyMenuItems']}",
+        visibility = PreferenceVisibility.INSTANCE
+    )
+    private Boolean onlyMenuItems;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public Long getMenuLevels() {
+        return menuLevels;
+    }
+
+    public Long getMenuDepth() {
+        return menuDepth;
+    }
+
+    public Boolean getShowSubscribeIcon() {
+        return showSubscribeIcon;
+    }
+
+    public Boolean getOnlyMenuItems() {
+        return onlyMenuItems;
+    }
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirMenuPreferences.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocPreferences.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/dirToc/DirTocPreferences.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocPreferences.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,77 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.jboss.seam.wiki.preferences.annotations.Preferences;
+import org.jboss.seam.wiki.preferences.annotations.PreferenceProperty;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+import org.hibernate.validator.Length;
+
+/**
+ * @author Christian Bauer
+ */
+ at Preferences(
+    name = "DirToc",
+    description = "#{messages['basic.dirToc.preferences.description']}",
+    mappedTo = "basic.dirToc"
+)
+public class DirTocPreferences {
+
+    @PreferenceProperty(
+        description = "#{messages['basic.dirToc.preferences.property.showRootDocuments']}",
+        visibility = {PreferenceVisibility.INSTANCE}
+    )
+    private Boolean showRootDocuments;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.dirToc.preferences.property.showDefaultDocuments']}",
+        visibility = {PreferenceVisibility.INSTANCE}
+    )
+    private Boolean showDefaultDocuments;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.dirToc.preferences.property.showLastUpdatedTimestamp']}",
+        visibility = {PreferenceVisibility.INSTANCE}
+    )
+    private Boolean showLastUpdatedTimestamp;
+
+    @PreferenceProperty(
+        description = "#{messages['dirToc.preferences.property.withHeaderMacro']}",
+        visibility = {PreferenceVisibility.INSTANCE},
+        editorIncludeName = "AdaptiveTextInput"
+    )
+    @Length(min = 0, max = 255)
+    private String withHeaderMacro;
+
+    @PreferenceProperty(
+        description = "#{messages['dirToc.preferences.property.rootDocumentLink']}",
+        visibility = {PreferenceVisibility.INSTANCE},
+        editorIncludeName = "AdaptiveTextInput"
+    )
+    @Length(min = 0, max = 255)
+    private String rootDocumentLink;
+
+    public Boolean getShowRootDocuments() {
+        return showRootDocuments;
+    }
+
+    public Boolean getShowDefaultDocuments() {
+        return showDefaultDocuments;
+    }
+
+    public Boolean getShowLastUpdatedTimestamp() {
+        return showLastUpdatedTimestamp;
+    }
+
+    public String getWithHeaderMacro() {
+        return withHeaderMacro;
+    }
+
+    public String getRootDocumentLink() {
+        return rootDocumentLink;
+    }
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocQuery.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/dirToc/DirTocQuery.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocQuery.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DirTocQuery.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,125 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
+import org.jboss.seam.wiki.core.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.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.preferences.Preferences;
+import org.richfaces.component.UITree;
+
+import javax.persistence.EntityManager;
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("dirTocQuery")
+ at Scope(ScopeType.CONVERSATION)
+public class DirTocQuery implements Serializable {
+
+    public static final String MACRO_ATTR_TOCROOT = "dirTocRoot";
+
+    @In
+    EntityManager restrictedEntityManager;
+
+    @In
+    Integer currentAccessLevel;
+
+    @In
+    WikiDirectory currentDirectory;
+
+    @In
+    WikiNodeDAO wikiNodeDAO;
+
+
+    public NestedSetNodeWrapper<WikiDirectory> getTocRoot(WikiPluginMacro macro) {
+
+        NestedSetNodeWrapper<WikiDirectory> tocRoot =
+                (NestedSetNodeWrapper<WikiDirectory>)macro.getAttributes().get(MACRO_ATTR_TOCROOT);
+        if (tocRoot == null) {
+            DirTocPreferences prefs = Preferences.instance().get(DirTocPreferences.class, macro);
+
+            if (prefs.getRootDocumentLink() != null) {
+                Long id = ((WikiLinkResolver)Component.getInstance("wikiLinkResolver"))
+                            .resolveWikiDirectoryId(currentDirectory.getAreaNumber(), prefs.getRootDocumentLink());
+                WikiDirectory foundDir = wikiNodeDAO.findWikiDirectory(id);
+                if (foundDir != null)
+                    currentDirectory = foundDir;
+            }
+
+            // Query the directory tree
+            tocRoot = wikiNodeDAO.findWikiDirectoryTree(currentDirectory);
+
+            Set<Long> directoryIds = new HashSet<Long>(tocRoot.getFlatTree().keySet());
+            if (prefs.getShowRootDocuments() != null && prefs.getShowRootDocuments()) {
+                directoryIds.add(tocRoot.getWrappedNode().getId());
+            }
+            if (directoryIds.size() == 0) return null; // Early exit
+
+            // Now query the documents for the directories in the tree
+            StringBuilder queryString = new StringBuilder();
+            queryString.append("select d from WikiDocument d ");
+            // TODO: Rewrite this query to use a subselect nested set query, this has limits
+            queryString.append("where d.parent.id in (:directories) ");
+            if (prefs.getWithHeaderMacro() != null)
+                queryString.append("and d.headerMacrosString like :headerMacro").append(" ");
+            queryString.append("order by d.createdOn asc");
+
+            Query query = getSession().createQuery(queryString.toString());
+            query.setParameterList("directories", directoryIds);
+            if (prefs.getWithHeaderMacro() != null)
+                query.setParameter("headerMacro", "%"+prefs.getWithHeaderMacro()+"%");
+            query.setComment("retrieving documents for toc directory tree");
+
+            List<WikiDocument> flatDocs = query.list();
+
+            // Now attach the documents as payloads to the directories in the tree
+            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);
+                }
+
+                if (dirWrapper.getPayload() == null)
+                    dirWrapper.setPayload(new ArrayList<WikiDocument>());
+
+                ((Collection)dirWrapper.getPayload()).add(flatDoc);
+            }
+
+            macro.getAttributes().put(MACRO_ATTR_TOCROOT, tocRoot);
+        }
+
+        return tocRoot;
+    }
+
+    public boolean expandTocTree(UITree tree) {
+        return true; // Expand all nodes by default;
+    }
+
+    private Session getSession() {
+        return ((Session)((org.jboss.seam.persistence.EntityManagerProxy) restrictedEntityManager).getDelegate());
+    }
+
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DocPager.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/docPager/DocPager.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DocPager.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DocPager.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,65 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.jboss.seam.annotations.*;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
+import org.jboss.seam.wiki.core.model.WikiDocument;
+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;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("docPager")
+ at Scope(ScopeType.PAGE)
+public class DocPager implements Serializable {
+
+    public static final String MACRO_ATTR_PAGER_PREVIOUS = "docPagerPrevious";
+    public static final String MACRO_ATTR_PAGER_NEXT    = "docPagerNext";
+
+    @In
+    WikiNodeDAO wikiNodeDAO;
+
+    @In
+    WikiDocument currentDocument;
+
+    public WikiDocument getPrevious(WikiPluginMacro macro) {
+        WikiDocument previous = (WikiDocument) macro.getAttributes().get(MACRO_ATTR_PAGER_PREVIOUS);
+        if (previous == null) {
+            previous = wikiNodeDAO.findSiblingWikiDocumentInDirectory(currentDocument, getSortingProperty(macro), true);
+            macro.getAttributes().put(MACRO_ATTR_PAGER_PREVIOUS, previous);
+        }
+        return previous;
+    }
+
+    public WikiDocument getNext(WikiPluginMacro macro) {
+        WikiDocument next = (WikiDocument) macro.getAttributes().get(MACRO_ATTR_PAGER_NEXT);
+        if (next == null) {
+            next = wikiNodeDAO.findSiblingWikiDocumentInDirectory(currentDocument, getSortingProperty(macro), false);
+            macro.getAttributes().put(MACRO_ATTR_PAGER_NEXT, next);
+        }
+        return next;
+    }
+
+    private WikiNode.SortableProperty getSortingProperty(WikiPluginMacro macro) {
+        DocPagerPreferences prefs = Preferences.instance().get(DocPagerPreferences.class, macro);
+        // By default, previous/next documents are searched by creation date
+        WikiNode.SortableProperty byProperty = WikiNode.SortableProperty.createdOn;
+        if (prefs.getByProperty() != null) {
+            try {
+                byProperty = WikiNode.SortableProperty.valueOf(prefs.getByProperty());
+            } catch (IllegalArgumentException ex) {}
+        }
+        return byProperty;
+    }
+
+}
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DocPager.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DocPagerPreferences.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/docPager/DocPagerPreferences.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DocPagerPreferences.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DocPagerPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,49 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+import org.jboss.seam.wiki.preferences.annotations.PreferenceProperty;
+import org.jboss.seam.wiki.preferences.annotations.Preferences;
+import org.hibernate.validator.Length;
+import org.hibernate.validator.NotNull;
+
+import java.io.Serializable;
+
+/**
+ * @author Christian Bauer
+ */
+ at Preferences(
+    name = "DocPager",
+    description = "#{messages['basic.docPager.preferences.description']}",
+    mappedTo = "basic.docPager"
+)
+public class DocPagerPreferences implements Serializable {
+
+    @PreferenceProperty(
+        description = "#{messages['basic.docPager.preferences.property.byProperty']}",
+        visibility = {PreferenceVisibility.INSTANCE},
+        editorIncludeName = "AdaptiveTextInput"
+    )
+    @Length(min = 0, max = 255)
+    private String byProperty;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.docPager.preferences.property.showNames']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE}
+    )
+    @NotNull
+    private Boolean showNames;
+
+    public String getByProperty() {
+        return byProperty;
+    }
+
+    public Boolean getShowNames() {
+        return showNames;
+    }
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/DocPagerPreferences.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/Flash.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/flash/Flash.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/Flash.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/Flash.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,41 @@
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.log.Log;
+
+import java.io.Serializable;
+import java.net.URI;
+import java.util.Arrays;
+
+ at Name("flash")
+ at Scope(ScopeType.PAGE)
+public class Flash implements Serializable {
+
+    @Logger
+    Log log;
+
+    public boolean isValidURL(FlashPreferences prefs) {
+
+        String allowedDomains = prefs.getAllowedDomains();
+        if (allowedDomains == null || allowedDomains.length() == 0) return false;
+
+        String desiredDomainName;
+        try {
+            URI uri = new URI(prefs.getUrl());
+            desiredDomainName = uri.getHost();
+        } catch (Exception ex) {
+            log.debug("Exception parsing flash movie URL into URI: " + ex.getMessage());
+            return false;
+        }
+        allowedDomains = allowedDomains.replaceAll("\\s", ""); // Remove spaces
+        String[] allowedDomainNames = allowedDomains.split(",");
+        if (desiredDomainName == null || desiredDomainName.length() == 0) return true;
+
+        Arrays.sort(allowedDomainNames);
+        return Arrays.binarySearch(allowedDomainNames, desiredDomainName) >= 0;
+    }
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/Flash.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/FlashPreferences.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/flash/FlashPreferences.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/FlashPreferences.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/FlashPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,61 @@
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.hibernate.validator.Length;
+import org.hibernate.validator.Range;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+import org.jboss.seam.wiki.preferences.annotations.PreferenceProperty;
+import org.jboss.seam.wiki.preferences.annotations.Preferences;
+
+import java.io.Serializable;
+
+ at Preferences(
+    name = "Flash",
+    description = "#{messages['basic.flash.preferences.description']}",
+    mappedTo = "basic.flash"
+)
+public class FlashPreferences implements Serializable {
+
+    @PreferenceProperty(
+        description = "#{messages['basic.flash.preferences.property.flashURL']}",
+        visibility = PreferenceVisibility.INSTANCE
+    )
+    @Length(min = 0, max = 1024)
+    private String url;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.flash.preferences.property.width']}",
+        visibility = PreferenceVisibility.INSTANCE
+    )
+    @Range(min = 1l, max = 2000l)
+    private Long width;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.flash.preferences.property.height']}",
+        visibility = PreferenceVisibility.INSTANCE
+    )
+    @Range(min = 1l, max = 2000l)
+    private Long height;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.flash.preferences.property.allowedDomains']}",
+        visibility = PreferenceVisibility.SYSTEM
+    )
+    @Length(min = 3, max = 1024)
+    private String allowedDomains;
+
+    public String getUrl() {
+        return url;
+    }
+
+    public Long getWidth() {
+        return width;
+    }
+
+    public Long getHeight() {
+        return height;
+    }
+
+    public String getAllowedDomains() {
+        return allowedDomains;
+    }
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/FlashPreferences.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/LastModifiedDocuments.java
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/LastModifiedDocuments.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/LastModifiedDocuments.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,36 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
+import org.jboss.seam.wiki.core.model.WikiDocument;
+import org.jboss.seam.wiki.core.model.WikiNode;
+
+import java.io.Serializable;
+import java.util.List;
+
+ at Name("lastModifiedDocuments")
+ at Scope(ScopeType.PAGE)
+public class LastModifiedDocuments implements Serializable {
+
+    @In
+    WikiNodeDAO wikiNodeDAO;
+
+    public List<WikiDocument> getListOfDocuments(LastModifiedDocumentsPreferences prefs) {
+        return
+            wikiNodeDAO.findWikiDocuments(
+                Long.valueOf(prefs.getNumberOfItems()).intValue(),
+                WikiNode.SortableProperty.lastModifiedOn,
+                false
+            );
+    }
+
+}

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/LastModifiedDocumentsPreferences.java
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/LastModifiedDocumentsPreferences.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/LastModifiedDocumentsPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,68 @@
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Range;
+import org.hibernate.validator.Length;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+import org.jboss.seam.wiki.preferences.annotations.PreferenceProperty;
+import org.jboss.seam.wiki.preferences.annotations.Preferences;
+
+import java.io.Serializable;
+
+ at Preferences(
+    name = "LastModifiedDocuments",
+    description = "#{messages['basic.lastModifiedDocuments.preferences.description']}",
+    mappedTo = "basic.lastModifiedDocuments"
+)
+public class LastModifiedDocumentsPreferences implements Serializable {
+
+    @PreferenceProperty(
+        description = "#{messages['basic.lastModifiedDocuments.preferences.property.title']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "AdaptiveTextInput"
+    )
+    @Length(min = 0, max = 255)
+    @NotNull
+    private String title;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.lastModifiedDocuments.preferences.property.numberOfItems']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange"
+    )
+    @Range(min = 3l, max = 25l)
+    @NotNull
+    private Long numberOfItems;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.lastModifiedDocuments.preferences.property.showUsernames']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE}
+    )
+    @NotNull
+    private Boolean showUsernames;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.lastModifiedDocuments.preferences.property.documentTitleLength']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange"
+    )
+    @Range(min = 5l, max = 100l)
+    @NotNull
+    private Long documentTitleLength;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public Long getNumberOfItems() {
+        return numberOfItems;
+    }
+
+    public Boolean getShowUsernames() {
+        return showUsernames;
+    }
+
+    public Long getDocumentTitleLength() {
+        return documentTitleLength;
+    }
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/TagsAggregator.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/tags/TagsAggregator.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/TagsAggregator.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/TagsAggregator.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,67 @@
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.jboss.seam.annotations.*;
+import org.jboss.seam.annotations.Observer;
+import org.jboss.seam.annotations.datamodel.DataModel;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.wiki.core.model.WikiDirectory;
+import org.jboss.seam.wiki.core.model.WikiDocument;
+import org.jboss.seam.wiki.core.model.DisplayTagCount;
+import org.jboss.seam.wiki.core.dao.TagDAO;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.preferences.Preferences;
+
+import java.util.*;
+import java.io.Serializable;
+
+ at Name("tagsAggregator")
+ at Scope(ScopeType.PAGE)
+public class TagsAggregator implements Serializable {
+
+    public static final String MACRO_ATTR_AGGREGATED_TAGS = "aggregatedTags";
+    public static final String MACRO_ATTR_HIGHEST_TAG_COUNT = "highestTagCount";
+
+    @In
+    TagDAO tagDAO;
+
+    @In
+    WikiDirectory currentDirectory;
+
+    @In
+    WikiDocument currentDocument;
+
+    public List<DisplayTagCount> getTagsSortedByCount(WikiPluginMacro macro) {
+
+        List<DisplayTagCount> tagsSortedByCount = (List<DisplayTagCount>) macro.getAttributes().get(MACRO_ATTR_AGGREGATED_TAGS);
+        if (tagsSortedByCount == null) {
+
+            TagsPreferences prefs = Preferences.instance().get(TagsPreferences.class, macro);
+            tagsSortedByCount =
+                    tagDAO.findTagCounts(
+                            currentDirectory,
+                            currentDocument,
+                            prefs.getMaxNumberOfTags() != null ? prefs.getMaxNumberOfTags().intValue() : 0,
+                            prefs.getMinimumCount() != null ? prefs.getMinimumCount() : 1l
+                    );
+
+            macro.getAttributes().put(MACRO_ATTR_AGGREGATED_TAGS, tagsSortedByCount);
+        }
+
+        return tagsSortedByCount;
+    }
+
+    public Long getHighestTagCount(WikiPluginMacro macro) {
+        Long highestTagCount = (Long)macro.getAttributes().get(MACRO_ATTR_HIGHEST_TAG_COUNT);
+        if (highestTagCount == null) {
+            highestTagCount = 0l;
+            List<DisplayTagCount> tagsSortedByCount = getTagsSortedByCount(macro);
+            for (DisplayTagCount tagCount : tagsSortedByCount) {
+                if (tagCount.getCount() > highestTagCount) highestTagCount= tagCount.getCount();
+            }
+            macro.getAttributes().put(MACRO_ATTR_HIGHEST_TAG_COUNT, highestTagCount);
+        }
+        return highestTagCount;
+    }
+
+
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/TagsAggregator.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/TagsPreferences.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/tags/TagsPreferences.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/TagsPreferences.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/TagsPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,69 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.basic;
+
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Range;
+import org.jboss.seam.wiki.preferences.annotations.Preferences;
+import org.jboss.seam.wiki.preferences.annotations.PreferenceProperty;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+
+/**
+ * @author Christian Bauer
+ */
+ at Preferences(
+    name = "Tags",
+    description = "#{messages['basic.tags.preferences.description']}",
+    mappedTo = "basic.tags"
+)
+public class TagsPreferences {
+
+    @PreferenceProperty(
+        description = "#{messages['basic.tags.preferences.property.linkToCurrentDocument']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE}
+    )
+    @NotNull
+    private Boolean linkToCurrentDocument;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.tags.preferences.property.maxNumberOfTags']}",
+        visibility = {PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange"
+    )
+    @Range(min = 1l, max = 99l)
+    private Long maxNumberOfTags;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.tags.preferences.property.minimumCount']}",
+        visibility = {PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange"
+    )
+    @Range(min = 1l, max = 99l)
+    private Long minimumCount;
+
+    @PreferenceProperty(
+        description = "#{messages['basic.tags.preferences.property.cloud']}",
+        visibility = {PreferenceVisibility.INSTANCE}
+    )
+    private Boolean cloud;
+
+    public Boolean getLinkToCurrentDocument() {
+        return linkToCurrentDocument;
+    }
+
+    public Long getMaxNumberOfTags() {
+        return maxNumberOfTags;
+    }
+
+    public Long getMinimumCount() {
+        return minimumCount;
+    }
+
+    public Boolean getCloud() {
+        return cloud;
+    }
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/TagsPreferences.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/i18n/messages_basic_en.properties
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/i18n/messages_basic_en.properties	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/i18n/messages_basic_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,77 @@
+basic.label=Basic Wiki Macros
+basic.description=Built-in and basic macros
+
+basic.clearBackground.label=Clear Background
+basic.clearBackground.description=Clear the background of the rendered document
+
+basic.hideControls.label=Hide Controls
+basic.hideControls.description=Do not display page controls
+
+basic.hideComments.label=Hide Comments
+basic.hideComments.description=Do not display comments of document (even if comments are enabled)
+
+basic.hideTags.label=Hide Tags
+basic.hideTags.description=Do not display tags of document
+
+basic.hideCreatorHistory.label=Hide Creator/History
+basic.hideCreatorHistory.description=Do not display creator and history of document
+
+basic.disableContentMacros.label=Disable Content Macros
+basic.disableContentMacros.description=Disable execution of macros in document content area
+
+basic.dirMenu.label=Directory Menu
+basic.dirMenu.description=Shows a list of subdirectories of the current directory
+basic.dirMenu.preferences.description=Plugin: Directory Menu
+basic.dirMenu.preferences.property.title=Default menu title
+basic.dirMenu.preferences.property.menuLevels=Flatten display of menu tree to levels
+basic.dirMenu.preferences.property.menuDepth=Maximum depth of menu items
+basic.dirMenu.preferences.property.showSubscribeIcon=Show 'Subscribe' icon
+basic.dirMenu.preferences.property.onlyMenuItems=Display only menu items
+basic.dirMenu.label.Subscribe=Subscribe
+
+basic.lastModifiedDocuments.label=Last Modified Documents
+basic.lastModifiedDocuments.description=Displays list of recently updated wiki documents
+basic.lastModifiedDocuments.preferences.description=Plugin: Last Modified Documents
+basic.lastModifiedDocuments.preferences.property.title=Title of plugin box
+basic.lastModifiedDocuments.preferences.property.numberOfItems=Number of items shown in list
+basic.lastModifiedDocuments.preferences.property.showUsernames=Show user names
+basic.lastModifiedDocuments.preferences.property.documentTitleLength=Truncate document titles after characters
+
+basic.flash.label=Flash Object
+basic.flash.description=Embedding of Flash objects
+basic.flash.preferences.description=Plugin: Flash
+basic.flash.preferences.property.flashURL=URL of flash movie
+basic.flash.preferences.property.width=Width in pixels
+basic.flash.preferences.property.height=Height in pixels
+basic.flash.preferences.property.allowedDomains=Comma-separated list of allowed domain names
+basic.flash.msg.URLNotSupplied=[Flash Macro: Add 'url' macro parameter to embed flash movie.]
+basic.flash.msg.URLNotAllowed=[Flash Macro: The flash URL you supplied is not in the list of valid domains, please ask the system administrator to add it.]
+
+basic.dirToc.label=Directory TableOfContents
+basic.dirToc.description=Display a tree of subdirectories/documents as a ToC
+basic.dirToc.preferences.decription=Plugin: Directory TOC
+basic.dirToc.preferences.property.showRootDocuments=Show documents of root directory
+basic.dirToc.preferences.property.showDefaultDocuments=Show default documents of all directories
+basic.dirToc.preferences.property.showLastUpdatedTimestamp=Show 'Last Updated' timestamp
+basic.dirToc.preferences.property.sithHeaderMacro=Only show documents with macro in header
+basic.dirToc.preferences.property.rootDocumentLink=Wiki link to root document of TOC
+basic.dirToc.label.LastUpdated=Last Updated
+
+basic.docPager.label=Document Pager
+basic.docPager.description=Displays a previous/next document pager
+basic.docPager.preferences.description=Plugin: Doc Pager
+basic.docPager.preferences.property.byProperty=Property used to search previous/next doc
+basic.docPager.preferences.property.showNames=Show names of previous/next document
+
+basic.tags.label=Tags
+basic.tags.description=Displays tag lists or clouds
+basic.tags.preferences.description=Plugin: Tags
+basic.tags.preferences.property.linkToCurrentDocument=Link to current (aggregator) document
+basic.tags.preferences.property.maxNumberOfTags=Maximum number of tags displayed
+basic.tags.preferences.property.minimumCount=Minimum number of occurences of a tag
+basic.tags.preferences.property.cloud=Display tags as cloud (not list)
+basic.tags.label.Tags=Tags
+basic.tags.label.All=All...
+
+basic.userProfile.label=User Profile
+basic.userProfile.description=Display the profile of the current document owner/creator

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/clearBackground.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/clearBackground/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/clearBackground.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/clearBackground.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,14 @@
+<wiki:plugin
+        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:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <script type="text/javascript">jQuery(function() {
+        clearDocumentBackground();
+    });</script>
+    
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/clearBackground.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenu.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/dirMenu/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenu.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenu.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,50 @@
+<wiki:plugin 
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:div styleClass="box dirMenu">
+
+        <s:div styleClass="boxHeader" rendered="#{not preferences.get('DirMenu', currentMacro).showSubscribeIcon}">
+            <h:outputText value="#{preferences.get('DirMenu', currentMacro).title}"/>
+        </s:div>
+
+        <h:panelGrid rendered="#{preferences.get('DirMenu', currentMacro).showSubscribeIcon}"
+                     columns="2" cellpadding="0" cellspacing="0" border="0"
+                     styleClass="boxHeader fullWidth">
+
+            <h:panelGrid rendered="#{not empty currentDirectory.feed}" columns="2" cellpadding="0" cellspacing="0" border="0">
+                <h:outputLink  target="_top"
+                               value="#{wikiURLRenderer.renderFeedURL(currentDirectory.feed, null, null)}">
+                    <h:graphicImage value="#{imagePath}/icon.atom.ongrey.gif" width="18" height="18" alt="Atom"/>
+                </h:outputLink>
+                <h:outputLink  target="_top"
+                               value="#{wikiURLRenderer.renderFeedURL(currentDirectory.feed, null, null)}">
+                    <h:outputText value="#{currentMacro.getMessage('label.Subscribe')}"/>
+                </h:outputLink>
+            </h:panelGrid>
+
+            <h:outputText value="#{preferences.get('DirMenu', currentMacro).title}"/>
+
+        </h:panelGrid>
+
+        <div class="boxContent">
+
+            <s:cache region="#{currentMacro.getCacheRegion('DirMenuList')}"
+                     key="#{currentMacro.cacheKey}">
+                <ui:include src="dirMenuItem.xhtml">
+                    <ui:param name="node" value="#{dirMenu.getRoot(currentMacro)}"/>
+                </ui:include>
+            </s:cache>
+        </div>
+
+        <s:div styleClass="boxFooter"/>
+
+    </s:div>
+
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenu.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenuItem.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/dirMenu/dirMenuItem.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenuItem.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenuItem.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,35 @@
+<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>


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirMenuItem.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirToc.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/dirToc/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirToc.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/dirToc.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,78 @@
+<wiki:plugin
+        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:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        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}">
+
+        <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>
+
+        <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

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/docPager.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/docPager/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/docPager.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/docPager.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,45 @@
+<wiki:plugin
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:cache region="#{currentMacro.getCacheRegion('DocPager')}"
+             key="#{currentMacro.cacheKey}">
+
+    <h:panelGrid columns="2" styleClass="docPager" columnClasses="docPagerPrevious, docPagerNext"
+                 cellpadding="0" cellspacing="0" border="0">
+        <s:div styleClass="undecoratedLink">
+            <s:fragment rendered="#{not empty docPager.getPrevious(currentMacro)}">
+                <h:outputLink value="#{wikiURLRenderer.renderURL(docPager.getPrevious(currentMacro))}">
+                    <h:graphicImage styleClass="docPagerButton" value="#{imagePath}/left.gif" width="18" height="18"/>
+                    <h:outputText styleClass="docPagerLabel"
+                                  rendered="#{not preferences.get('DocPager', currentMacro).showNames}"
+                                  value="#{messages['lacewiki.label.Previous']}"/>
+                    <h:outputText styleClass="docPagerLabel"
+                                  rendered="#{preferences.get('DocPager', currentMacro).showNames}"
+                                  value="#{wiki:truncateString(docPager.getPrevious(currentMacro).name, 35, '...')}"/>
+                </h:outputLink>
+            </s:fragment>
+        </s:div>
+        <s:div styleClass="undecoratedLink">
+            <s:fragment rendered="#{not empty docPager.getNext(currentMacro)}">
+                <h:outputLink value="#{wikiURLRenderer.renderURL(docPager.getNext(currentMacro))}">
+                    <h:outputText styleClass="docPagerLabel" 
+                                  rendered="#{not preferences.get('DocPager', currentMacro).showNames}"
+                                  value="#{messages['lacewiki.label.Next']}"/>
+                    <h:outputText styleClass="docPagerLabel"
+                                  rendered="#{preferences.get('DocPager', currentMacro).showNames}"
+                                  value="#{wiki:truncateString(docPager.getNext(currentMacro).name, 35, '...')}"/>
+                    <h:graphicImage styleClass="docPagerButton" value="#{imagePath}/right.gif" width="18" height="18"/>
+                </h:outputLink>
+            </s:fragment>
+        </s:div>
+    </h:panelGrid>
+
+    </s:cache>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/docPager.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/flash.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/flash/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/flash.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/flash.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,38 @@
+<wiki:plugin
+	 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:s="http://jboss.com/products/seam/taglib">
+
+<s:div id="flashPluginDiv">
+
+    <s:div rendered="#{not empty preferences.get('Flash', currentMacro).url and flash.isValidURL(preferences.get('Flash', currentMacro))}">
+        <object width="#{preferences.get('Flash', currentMacro).width}"
+                height="#{preferences.get('Flash', currentMacro).height}">
+            <param name="movie" value="#{preferences.get('Flash', currentMacro).url}"></param>
+            <param name="wmode" value="transparent"></param>
+            <embed src="#{preferences.get('Flash', currentMacro).url}"
+                   type="application/x-shockwave-flash"
+                   wmode="transparent"
+                   width="#{preferences.get('Flash', currentMacro).width}"
+                   height="#{preferences.get('Flash', currentMacro).height}">
+           </embed>
+        </object>
+    </s:div>
+
+    <s:div rendered="#{empty preferences.get('Flash', currentMacro).url}"
+           styleClass="flashURLNotSupplied">
+        <h:outputText value="#{messages['basic.flash.msg.URLNotSupplied']}"/>
+    </s:div>
+
+    <s:div rendered="#{not empty preferences.get('Flash', currentMacro).url and
+                       not flash.isValidURL(preferences.get('Flash', currentMacro))}"
+           styleClass="flashURLNotAllowed">
+        <h:outputText value="#{messages['basic.flash.msg.URLNotAllowed']}"/>
+    </s:div>
+
+</s:div>
+
+</wiki:plugin>


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/flash.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/lastModifiedDocuments.xhtml
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/lastModifiedDocuments.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/lastModifiedDocuments.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,70 @@
+<wiki:plugin
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:f="http://java.sun.com/jsf/core"
+       xmlns:wiki="http://jboss.com/products/seam/wiki"
+       xmlns:s="http://jboss.com/products/seam/taglib">
+
+<s:cache region="#{currentMacro.getCacheRegion('LastModifiedDocumentList')}"
+         key="#{currentMacro.cacheKey}">
+
+    <s:div styleClass="box lastModifiedDocuments">
+
+        <s:div styleClass="boxHeader">
+            <h:outputText value="#{preferences.get('LastModifiedDocuments', currentMacro).title}"/>
+        </s:div>
+
+        <div class="boxContent">
+
+            <h:dataTable value="#{lastModifiedDocuments.getListOfDocuments(preferences.get('LastModifiedDocuments', currentMacro))}"
+                         var="doc"
+                         styleClass="datatable lastModifiedDocumentsTable"
+                         columnClasses="defaultColumn alignLeft lastModifiedColumn"
+                         rowClasses="rowOdd,rowEven"
+                         cellpadding="0" cellspacing="0" border="0">
+                <h:column>
+                    
+                    <s:div styleClass="lastModifiedAuthorDate smallFont">
+
+                        <s:fragment rendered="#{preferences.get('LastModifiedDocuments', currentMacro).showUsernames}">
+
+                            (<s:span styleClass="undecoratedLink" rendered="#{wiki:isRegularUser(doc.lastModifiedBy)}">
+                                <h:outputLink value="#{wikiURLRenderer.renderUserInfoURL(doc.lastModifiedBy)}">
+                                    <h:outputText value="#{doc.lastModifiedBy.username}"/>
+                                </h:outputLink>
+                            </s:span>
+                            <s:span rendered="#{not wiki:isRegularUser(doc.lastModifiedBy)}">
+                                <h:outputText value="#{doc.lastModifiedBy.username}"/>
+                            </s:span>)
+
+                            <h:outputText value="&#160;"/>
+                        </s:fragment>
+
+                        <h:outputText value="#{doc.lastModifiedOn}"
+                                      rendered="#{!empty 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}"/>
+
+                    </s:div>
+
+                    <s:div styleClass="lastModifiedTitle wrapWhitespace">
+                        <h:outputLink target="_top" value="#{wikiURLRenderer.renderURL(doc)}" styleClass="lastModifiedLink">
+                            <h:outputText value="#{wiki:truncateString(doc.name, preferences.get('LastModifiedDocuments', currentMacro).documentTitleLength, '...')}"/>
+                        </h:outputLink>
+                    </s:div>
+
+                </h:column>
+            </h:dataTable>
+
+        </div>
+        
+        <div class="boxFooter"/>
+
+    </s:div>
+
+</s:cache>
+
+</wiki:plugin>

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/tags.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/tags/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/tags.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/tags.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,83 @@
+<wiki:plugin
+        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:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:cache region="#{currentMacro.getCacheRegion('Tags')}"
+             key="#{currentMacro.cacheKey}">
+
+    <s:div styleClass="box">
+
+        <s:div styleClass="boxHeader">
+            <h:outputText value="#{messages['basic.tags.label.Tags']}"/>
+        </s:div>
+
+        <div class="boxContent" style="padding: 5px;">
+
+            <s:fragment rendered="#{not preferences.get('Tags', currentMacro).cloud}">
+
+                <h:dataTable value="#{tagsAggregator.getTagsSortedByCount(currentMacro)}" var="tagCount"
+                             rendered="#{not preferences.get('Tags', currentMacro).cloud}"
+                             columnClasses="defaultColumn, onePercentColumn"
+                             cellpadding="0" cellspacing="0" border="0">
+                    <h:column>
+                        <s:span rendered="#{param.tag != tagCount.tag and preferences.get('Tags', currentMacro).linkToCurrentDocument}" styleClass="undecoratedLink">
+                            <h:outputLink value="#{wikiURLRenderer.renderURL(currentDocument)}/Tag/#{wiki:encodeURL(tagCount.tag)}">#{tagCount.tag}</h:outputLink>
+                        </s:span>
+                        <s:span rendered="#{param.tag != tagCount.tag and not preferences.get('Tags', currentMacro).linkToCurrentDocument}" styleClass="undecoratedLink">
+                            <h:outputLink value="#{wikiURLRenderer.renderTagURL(tagCount.tag)}">
+                                <h:outputText value="#{tagCount.tag}"/>
+                            </h:outputLink>
+                        </s:span>
+                        <s:span rendered="#{param.tag == tagCount.tag}">
+                            <h:outputText value="&gt;&#160;#{tagCount.tag}&#160;&lt;"/>
+                        </s:span>
+                    </h:column>
+                    <h:column>
+                        <h:outputText value="(#{tagCount.count})"/>
+                    </h:column>
+                </h:dataTable>
+
+            </s:fragment>
+
+            <s:fragment rendered="#{preferences.get('Tags', currentMacro).cloud}">
+
+                <ui:repeat var="tagCount" value="#{tagsAggregator.getTagsSortedByCount(currentMacro)}">
+                    <s:span styleClass="tagCloudItem noWrapWhitespace" style="font-size: #{70+(100/tagsAggregator.getHighestTagCount(currentMacro)*tagCount.count)}%;">
+                        <s:span rendered="#{param.tag != tagCount.tag and preferences.get('Tags', currentMacro).linkToCurrentDocument}" styleClass="undecoratedLink">
+                            <h:outputLink value="#{wikiURLRenderer.renderURL(currentDocument)}/Tag/#{wiki:encodeURL(tagCount.tag)}">#{tagCount.tag}</h:outputLink>
+                        </s:span>
+                        <s:span rendered="#{param.tag != tagCount.tag and not preferences.get('Tags', currentMacro).linkToCurrentDocument}" styleClass="undecoratedLink">
+                            <h:outputLink value="#{wikiURLRenderer.renderTagURL(tagCount.tag)}">
+                                <h:outputText value="#{tagCount.tag}"/>
+                            </h:outputLink>
+                        </s:span>
+                        <s:span rendered="#{param.tag == tagCount.tag}">
+                            <h:outputText value="&gt;&#160;#{tagCount.tag}&#160;&lt;"/>
+                        </s:span>
+                    </s:span>
+                    <h:outputText value="&#160;&#160; "/>
+                </ui:repeat>
+
+            </s:fragment>
+
+            <s:span styleClass="undecoratedLink defaultColumn"
+                    rendered="#{preferences.get('Tags', currentMacro).linkToCurrentDocument and not empty param.tag}">
+                <h:outputLink value="#{wikiURLRenderer.renderURL(currentDocument)}">
+                    <h:outputText value="#{messages['basic.tags.label.All']}"/>
+                </h:outputLink>
+            </s:span>
+
+        </div>
+
+        <div class="boxFooter"/>
+
+    </s:div>
+
+    </s:cache>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/tags.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/userProfile.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/userProfile/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/userProfile.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/userProfile.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,17 @@
+<wiki:plugin
+        rendered="#{currentDocument.ownedByRegularUser}"
+        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:s="http://jboss.com/products/seam/taglib">
+
+    <s:cache region="#{currentMacro.getCacheRegion('UserProfile')}"
+             key="#{currentMacro.getCacheKey(currentDocument.createdBy.id)}">
+        <ui:include src="/includes/userInfo.xhtml">
+            <ui:param name="user" value="#{currentDocument.createdBy}"/>
+        </ui:include>
+    </s:cache>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/templates/userProfile.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirMenu.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/dirMenu.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirMenu.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirMenu.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,59 @@
+.dirMenu .level1 {
+}
+
+.dirMenu .level1Body {
+    background-color: white;
+}
+
+.dirMenu .level1Marker {
+    display: none;
+}
+
+.dirMenu .level1Link {
+    color: #962325;
+    font-size: 95%;
+    text-decoration: none;
+}
+
+.dirMenu .level1Link:hover {color: #666}
+
+.dirMenu .level1Children {
+    background-color: white;
+}
+
+.dirMenu .level2 {
+}
+
+.dirMenu .level2Marker {
+    padding-left: 2px;
+    padding-right: 2px;
+    font-size: 80%;
+    color: #962325;
+}
+
+.dirMenu .level2Link {
+    font-size: 80%;
+    color: #962325;
+    text-decoration: none;
+    white-space: nowrap;
+}
+
+.dirMenu .level2Link:hover {color: #666}
+
+.dirMenu .level3 {}
+
+.dirMenu .level3Marker {
+    padding-left: 2px;
+    padding-right: 2px;
+    font-size: 80%;
+    color: #962325;
+}
+
+.dirMenu .level3Link {
+    font-size: 80%;
+    color: #962325;
+    text-decoration: none;
+    white-space: nowrap;
+}
+
+.dirMenu .level3Link:hover {color: #666}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirMenu.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirToc.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/dirToc.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirToc.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/dirToc.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,20 @@
+.dirToc {
+}
+
+.tocDirectoryLabel {
+    font-weight: bold;
+}
+
+.tocDirectoryLabel {
+    cursor: pointer;
+}
+
+.tocDocumentLabel {
+    margin-left: 5px;
+    cursor: pointer;
+}
+
+.rich-tree-node-highlighted .tocDirectoryLabel,
+.rich-tree-node-highlighted .tocDocumentLabel {
+    color: black;
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/docPager.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/docPager.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/docPager.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/docPager.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,22 @@
+.docPager {
+    width: 100%;
+    background: #f5f5f5;
+}
+
+.docPagerPrevious {
+    text-align: left;
+}
+
+.docPagerNext {
+    text-align: right;
+}
+
+.docPagerButton {
+    vertical-align: text-bottom;
+}
+
+.docPagerLabel {
+    margin-left: 10px;
+    margin-right: 10px;
+}
+


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/docPager.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/lastModifiedDocuments.css
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/lastModifiedDocuments.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/default/css/lastModifiedDocuments.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,17 @@
+.lastModifiedDocuments {}
+
+.lastModifiedLink {
+}
+
+.lastModifiedColumn {
+    padding-bottom: 5px;
+}
+
+.lastModifiedAuthorDate {
+    text-align: right;
+}
+
+.lastModifiedLink:link {color: #962325}
+.lastModifiedLink:visited {color: #962325}
+.lastModifiedLink:hover {color: #000}
+.lastModifiedLink:active {color: #aaa}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirMenu.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/dirMenu.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirMenu.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirMenu.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,59 @@
+.dirMenu .level1 {
+}
+
+.dirMenu .level1Body {
+    background-color: white;
+}
+
+.dirMenu .level1Marker {
+    display: none;
+}
+
+.dirMenu .level1Link {
+    color: #d75525;
+    font-size: 95%;
+    text-decoration: none;
+}
+
+.dirMenu .level1Link:hover {color: #666}
+
+.dirMenu .level1Children {
+    background-color: white;
+}
+
+.dirMenu .level2 {
+}
+
+.dirMenu .level2Marker {
+    color: #d75525;
+    padding-left: 2px;
+    padding-right: 2px;
+    font-size: 80%;
+}
+
+.dirMenu .level2Link {
+    color: #d75525;
+    font-size: 80%;
+    text-decoration: none;
+    white-space: nowrap;
+}
+
+.dirMenu .level2Link:hover {color: #666}
+
+.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}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirToc.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/dirToc.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirToc.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/dirToc.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,20 @@
+.dirToc {
+}
+
+.tocDirectoryLabel {
+    font-weight: bold;
+}
+
+.tocDirectoryLabel {
+    cursor: pointer;
+}
+
+.tocDocumentLabel {
+    margin-left: 5px;
+    cursor: pointer;
+}
+
+.rich-tree-node-highlighted .tocDirectoryLabel,
+.rich-tree-node-highlighted .tocDocumentLabel {
+    color: black;
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/docPager.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/docPager.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/docPager.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/docPager.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,22 @@
+.docPager {
+    width: 100%;
+    background: #f5f5f5;
+}
+
+.docPagerPrevious {
+    text-align: left;
+}
+
+.docPagerNext {
+    text-align: right;
+}
+
+.docPagerButton {
+    vertical-align: text-bottom;
+}
+
+.docPagerLabel {
+    margin-left: 10px;
+    margin-right: 10px;
+}
+

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/lastModifiedDocuments.css
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/lastModifiedDocuments.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/lastModifiedDocuments.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,17 @@
+.lastModifiedDocuments {}
+
+.lastModifiedLink {
+}
+
+.lastModifiedColumn {
+    padding-bottom: 5px;
+}
+
+.lastModifiedAuthorDate {
+    text-align: right;
+}
+
+.lastModifiedLink:link {color: #d75525}
+.lastModifiedLink:visited {color: #d75525}
+.lastModifiedLink:hover {color: #000}
+.lastModifiedLink:active {color: #aaa}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/userProfile.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/userProfile.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/userProfile.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/inrelationto/css/userProfile.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,43 @@
+.userProfilePortrait {
+    margin-left: 10px;
+    margin-right: 10px;
+    margin-top: 3px;
+    margin-bottom: 5px;
+    float: left;
+}
+
+.userProfilePortraitImage {
+    border: 1px solid #87786e;
+}
+
+.userProfileBio{
+    font-size: 75%;
+    margin-right: 10px;
+    margin-left: 10px;
+    color: #000;
+    text-align: justify;
+    line-height: 130%;
+}
+
+.userProfileEntry {
+    clear: both;
+    margin-bottom: 5px;
+    margin-left: 10px;
+    margin-right: 10px;
+    font-size: 75%;
+    color: #000;
+    line-height: 140%;
+}
+
+.userProfileEntryLabel {
+    font-weight: bold;
+}
+
+.userProfileEntryText {
+}
+
+.userProfileEntryLink {
+    color: #d75525;
+}
+
+.userProfileEntryLink:hover {color: #666}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirMenu.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/dirMenu.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirMenu.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirMenu.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,42 @@
+.dirMenu .level1 {
+}
+
+.dirMenu .level1Body {
+    background-color: white;
+}
+
+.dirMenu .level1Marker {
+    display: none;
+}
+
+.dirMenu .level1Link {
+}
+
+
+.dirMenu .level1Children {
+    background-color: white;
+}
+
+.dirMenu .level2 {
+}
+
+.dirMenu .level2Marker {
+    padding-left: 2px;
+    padding-right: 2px;
+}
+
+.dirMenu .level2Link {
+    white-space: nowrap;
+}
+
+.dirMenu .level3 {}
+
+.dirMenu .level3Marker {
+    padding-left: 2px;
+    padding-right: 2px;
+}
+
+.dirMenu .level3Link {
+    white-space: nowrap;
+}
+


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirMenu.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirToc.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/dirToc.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirToc.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/dirToc.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,21 @@
+.dirToc {
+}
+
+.tocDirectoryPanel {
+    margin-top: 5px;
+}
+
+.tocDirectoryLabel {
+    font-weight: bold;
+    cursor: pointer;
+}
+
+.tocDocumentLabel {
+    margin-left: 5px;
+    cursor: pointer;
+}
+
+.rich-tree-node-highlighted .tocDirectoryLabel,
+.rich-tree-node-highlighted .tocDocumentLabel {
+    color: black;
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/docPager.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/docPager.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/docPager.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/docPager.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,22 @@
+.docPager {
+    width: 100%;
+    background: #f5f5f5;
+}
+
+.docPagerPrevious {
+    text-align: left;
+}
+
+.docPagerNext {
+    text-align: right;
+}
+
+.docPagerButton {
+    vertical-align: text-bottom;
+}
+
+.docPagerLabel {
+    margin-left: 10px;
+    margin-right: 10px;
+}
+


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/docPager.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/lastModifiedDocuments.css
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/lastModifiedDocuments.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/basic/themes/sfwkorg/css/lastModifiedDocuments.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,17 @@
+.lastModifiedDocuments {}
+
+.lastModifiedLink {
+}
+
+.lastModifiedColumn {
+    padding-bottom: 5px;
+}
+
+.lastModifiedAuthorDate {
+    text-align: right;
+}
+
+.lastModifiedLink:link {color: #576c74}
+.lastModifiedLink:visited {color: #576c74}
+.lastModifiedLink:hover {color: #000}
+.lastModifiedLink:active {color: #000}

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/Blog.plugin.xml
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/Blog.plugin.xml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/Blog.plugin.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin key="blog"
+        xmlns="http://jboss.com/products/seam/wiki/plugin"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://jboss.com/products/seam/wiki/plugin
+                            classpath://org/jboss/seam/wiki/core/plugin/plugin-1.0.xsd">
+
+    <plugin-info version="1.0">
+        <application-version min="1.0" max="1.0"/>
+        <vendor name="Red Hat Inc." url="http://www.seamframework.org/"/>
+    </plugin-info>
+
+    <macro key="directory" name="blogDirectory">
+        <applicable-to content="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <render-options>
+            <singleton/>
+        </render-options>
+    </macro>
+
+    <macro key="archive" name="blogArchive">
+        <applicable-to content="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <cache-regions>
+            <cache-region name="BlogArchiveList">
+                <invalidation-event name="Node.persisted"/>
+                <invalidation-event name="Node.updated"/>
+                <invalidation-event name="Node.removed"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+    <macro key="recentEntries" name="blogRecentEntries">
+        <applicable-to content="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <cache-regions>
+            <cache-region name="BlogRecentEntriesList">
+                <invalidation-event name="Node.persisted"/>
+                <invalidation-event name="Node.updated"/>
+                <invalidation-event name="Node.removed"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+</plugin>
+

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDAO.java
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDAO.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDAO.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,255 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+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.transform.ResultTransformer;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+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.action.Pager;
+import org.jboss.seam.ScopeType;
+
+import javax.persistence.EntityManager;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import java.io.Serializable;
+import java.math.BigInteger;
+
+/**
+ * Queries and database operations related to blog entries (mostly aggregation queries).
+ *
+ * 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.
+ *
+ * @author Christian Bauer
+ */
+ at Name("blogDAO")
+ at Scope(ScopeType.CONVERSATION)
+ at AutoCreate
+public class BlogDAO implements Serializable {
+
+    @In
+    EntityManager restrictedEntityManager;
+
+    @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
+    private String[] getWikiDocumentSQLColumnNames() {
+        return new String[]{
+            "doc2.NODE_ID",
+            "doc2.OBJ_VERSION", "doc2.PARENT_NODE_ID", "doc2.RATING",
+            "doc2.AREA_NR", "doc2.NAME", "doc2.WIKINAME", "doc2.CREATED_BY_USER_ID", "doc2.CREATED_ON", "doc2.WRITE_PROTECTED",
+            "doc2.LAST_MODIFIED_BY_USER_ID", "doc2.LAST_MODIFIED_ON", "doc2.READ_ACCESS_LEVEL", "doc2.WRITE_ACCESS_LEVEL",
+            "doc1.FILE_REVISION",
+            "doc.NAME_AS_TITLE", "doc.ENABLE_COMMENTS", "doc.ENABLE_COMMENT_FORM", "doc.ENABLE_COMMENTS_ON_FEEDS",
+            "doc.HEADER", "doc.HEADER_MACROS", "doc.CONTENT", "doc.CONTENT_MACROS", "doc.FOOTER", "doc.FOOTER_MACROS"
+        };
+    }
+
+    private String getblogEntryFromClause(String tag) {
+        StringBuilder clause = new StringBuilder();
+        clause.append("from WIKI_DOCUMENT doc").append(" ");
+        clause.append("inner join WIKI_FILE doc1 on doc.NODE_ID=doc1.NODE_ID").append(" ");
+        clause.append("inner join WIKI_NODE doc2 on doc.NODE_ID=doc2.NODE_ID").append(" ");
+        if (tag != null && tag.length() > 0) clause.append("inner join WIKI_TAG t on t.FILE_ID = doc1.NODE_ID").append(" ");
+        return clause.toString();
+    }
+
+    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("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(" ");
+        if (tag != null && tag.length()>0)                  clause.append("and t.TAG = :tag").append(" ");
+        if (year != null)   clause.append("and year(doc2.CREATED_ON) = :limitYear").append(" ");
+        if (month != null)  clause.append("and month(doc2.CREATED_ON) = :limitMonth").append(" ");
+        if (day != null)    clause.append("and day(doc2.CREATED_ON) = :limitDay").append(" ");
+        return clause.toString();
+    }
+
+    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.setParameter("currentAccessLevel", currentAccessLevel);
+
+        if (ignoreDoc != null && ignoreDoc.getId() != null) query.setParameter("ignoreDoc", ignoreDoc);
+        if (tag != null && tag.length()>0)                  query.setParameter("tag", tag);
+        if (year != null)   query.setParameter("limitYear", year);
+        if (month != null)  query.setParameter("limitMonth", month);
+        if (day != null)    query.setParameter("limitDay", day);
+    }
+
+    public List<BlogEntry> findBlogEntriesInDirectory(WikiDirectory startDir,
+                                                      WikiDocument ignoreDoc,
+                                                      Pager pager,
+                                                      Integer year,
+                                                      Integer month,
+                                                      Integer day,
+                                                      String tag,
+                                                      boolean countComments) {
+
+        final Map<Long, BlogEntry> blogEntryMap = new HashMap<Long, BlogEntry>();
+
+        StringBuilder queryString = new StringBuilder();
+        queryString.append("select").append(" ");
+        for (int i = 0; i < getWikiDocumentSQLColumnNames().length; i++) {
+            queryString.append(getWikiDocumentSQLColumnNames()[i]);
+            if (i != getWikiDocumentSQLColumnNames().length-1) queryString.append(", ");
+        }
+        queryString.append(", '0' as COMMENT_COUNT").append(" ");
+        queryString.append(getblogEntryFromClause(tag));
+        queryString.append(getBlogEntryWhereClause(ignoreDoc, year, month, day, tag));
+
+        queryString.append(" ");
+        queryString.append("order by doc2.CREATED_ON desc");
+
+        SQLQuery query = getSession().createSQLQuery(queryString.toString());
+
+        bindBlogEntryWhereClause(query, startDir, ignoreDoc, year, month, day, tag);
+
+        query.setComment("Finding all blogEntry documents recursively in dir: " + startDir.getName());
+        query.addEntity(WikiDocument.class);
+        query.addScalar("COMMENT_COUNT", Hibernate.LONG);
+        query.setFirstResult( pager.getQueryFirstResult() );
+        query.setMaxResults( pager.getQueryMaxResults() );
+
+        query.setResultTransformer(
+            new ResultTransformer() {
+                public Object transformTuple(Object[] result, String[] aliases) {
+                    BlogEntry be = new BlogEntry();
+                    be.setEntryDocument( (WikiDocument)result[0]);
+                    blogEntryMap.put(be.getEntryDocument().getId(), be); // Put in map so we can attach comment count later
+                    return be;
+                }
+                public List transformList(List list) { return list; }
+            }
+        );
+
+        List<BlogEntry> result = (List<BlogEntry>)query.list();
+
+        if (countComments) {
+            // 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("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");
+
+            SQLQuery commentQuery = getSession().createSQLQuery(commentQueryString.toString());
+            commentQuery.setComment("Finding comment count for blog entries");
+            commentQuery.addScalar("DOC_ID");
+            commentQuery.addScalar("COMMENT_COUNT");
+            commentQuery.setParameterList("blogEntriesIds", blogEntryMap.keySet());
+
+            commentQuery.setResultTransformer(
+              new ResultTransformer() {
+                  public Object transformTuple(Object[] result, String[] aliases) {
+                      BlogEntry be = blogEntryMap.get( ((BigInteger)result[0]).longValue() );
+                      be.setCommentCount( ((BigInteger)result[1]).longValue() );
+                      return null;
+                  }
+                  public List transformList(List list) { return list; }
+              }
+            );
+            commentQuery.list();
+        }
+
+        return result;
+    }
+
+    public Long countBlogEntries(WikiDirectory startDir, WikiDocument ignoreDoc, Integer year, Integer month, Integer day, String tag) {
+        return countBlogEntries(startDir, ignoreDoc, false, false, false, year, month, day, tag).get(0).getNumOfEntries();
+    }
+
+    public List<BlogEntryCount> countAllBlogEntriesGroupByYearMonth(WikiDirectory startDir, WikiDocument ignoreDoc, String tag) {
+        return countBlogEntries(startDir, ignoreDoc, true, true, false, null, null, null, tag);
+    }
+
+    private List<BlogEntryCount> countBlogEntries(WikiDirectory startDir, WikiDocument ignoreDoc,
+                                                 final boolean projectYear, final boolean projectMonth, final boolean projectDay,
+                                                 Integer limitYear, Integer limitMonth, Integer limitDay,
+                                                 String tag) {
+
+        // Sanity input check
+        if (projectDay && (!projectMonth || !projectYear))
+            throw new IllegalArgumentException("Can't project on day without months or year");
+        if (projectMonth && !projectYear)
+            throw new IllegalArgumentException("Can't project on month without year");
+
+        StringBuilder queryString = new StringBuilder();
+
+        queryString.append("select count(doc.NODE_ID) as NUM_OF_ENTRIES").append(" ");
+        if (projectYear) queryString.append(", ").append("year(doc2.CREATED_ON) as YEAR");
+        if (projectMonth) queryString.append(", ").append("month(doc2.CREATED_ON) as MONTH");
+        if (projectDay) queryString.append(", ").append("day(doc2.CREATED_ON) as DAY");
+        queryString.append(" ");
+
+        queryString.append(getblogEntryFromClause(tag));
+        queryString.append(getBlogEntryWhereClause(ignoreDoc, limitYear, limitMonth, limitDay, tag));
+
+        if (projectYear || projectMonth || projectDay) queryString.append("group by").append(" ");
+        if (projectYear)    queryString.append("year(doc2.CREATED_ON)");
+        if (projectMonth)   queryString.append(", month(doc2.CREATED_ON)");
+        if (projectDay)     queryString.append(", day(doc2.CREATED_ON)");
+
+        if (projectYear || projectMonth || projectDay) queryString.append("order by").append(" ");
+        if (projectYear)    queryString.append("YEAR desc");
+        if (projectMonth)   queryString.append(", MONTH desc");
+        if (projectDay)     queryString.append(", DAY desc");
+
+        SQLQuery query = getSession().createSQLQuery(queryString.toString());
+
+        bindBlogEntryWhereClause(query, startDir, ignoreDoc, limitYear, limitMonth, limitDay, tag);
+
+        query.setComment("Finding blogEntry counts");
+        query.addScalar("NUM_OF_ENTRIES", Hibernate.LONG);
+        if (projectYear)    query.addScalar("YEAR", Hibernate.INTEGER);
+        if (projectMonth)   query.addScalar("MONTH", Hibernate.INTEGER);
+        if (projectDay)     query.addScalar("DAY", Hibernate.INTEGER);
+
+        query.setResultTransformer(
+            new ResultTransformer() {
+                public Object transformTuple(Object[] result, String[] aliases) {
+                    BlogEntryCount beCount = new BlogEntryCount();
+                    beCount.setNumOfEntries( (Long)result[0] );
+                    if (projectYear)    beCount.setYear( (Integer)result[1] );
+                    if (projectMonth)   beCount.setMonth( (Integer)result[2] );
+                    if (projectDay)     beCount.setDay( (Integer)result[3] );
+                    return beCount;
+                }
+                public List transformList(List list) { return list; }
+            }
+        );
+
+        return (List<BlogEntryCount>) query.list();
+    }
+
+    private Session getSession() {
+        return ((Session)((org.jboss.seam.persistence.EntityManagerProxy) restrictedEntityManager).getDelegate());
+    }
+
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDirectory.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogDirectory.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDirectory.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDirectory.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,211 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.blog;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.*;
+import org.jboss.seam.annotations.Observer;
+import org.jboss.seam.annotations.web.RequestParameter;
+import org.jboss.seam.annotations.datamodel.DataModel;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
+import org.jboss.seam.wiki.core.model.WikiDirectory;
+import org.jboss.seam.wiki.core.model.WikiDocument;
+import org.jboss.seam.wiki.core.action.Pager;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.util.WikiUtil;
+import org.jboss.seam.wiki.preferences.Preferences;
+import org.jboss.seam.wiki.util.Hash;
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("blogDirectory")
+ at Scope(ScopeType.CONVERSATION)
+public class BlogDirectory implements Serializable {
+
+    @Logger
+    Log log;
+
+    @In
+    WikiNodeDAO wikiNodeDAO;
+
+    @In
+    BlogDAO blogDAO;
+
+    @In
+    WikiDirectory currentDirectory;
+
+    @In
+    WikiDocument currentDocument;
+
+    private Pager pager;
+    private Integer page;
+    private Integer year;
+    private Integer month;
+    private Integer day;
+    private String tag;
+    private Long numberOfEntriesForCurrentTag;
+
+    @RequestParameter
+    public void setPage(Integer page) {
+        this.page = page;
+    }
+
+    @RequestParameter
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+    @RequestParameter
+    public void setMonth(Integer month) {
+        this.month = month;
+    }
+    @RequestParameter
+    public void setDay(Integer day) {
+        this.day = day;
+    }
+    @RequestParameter
+    public void setTag(String tag) {
+        this.tag = tag;
+    }
+
+    /* ############################### BLOG ENTRIES ############################### */
+
+    private List<BlogEntry> blogEntries;
+
+    public List<BlogEntry> getBlogEntries(WikiPluginMacro macro) {
+        BlogPreferences prefs = Preferences.instance().get(BlogPreferences.class, macro);
+
+        if (pager == null) {
+            log.debug("creating new pager with page size from macro preferences: " + prefs.getPageSize());
+            pager = new Pager(prefs.getPageSize());
+            pager.setPage(page);
+        }
+
+        if (blogEntries == null || !pager.getPageSize().equals(prefs.getPageSize())) {
+            log.debug("blog entries list is null or pager is outdated, loading blog entries");
+            pager.setPageSize(prefs.getPageSize());
+            loadBlogEntries();
+        }
+        return blogEntries;
+    }
+
+    @Observer(value = {"PersistenceContext.filterReset"}, create = false)
+    public void loadBlogEntries() {
+        if (pager == null) throw new IllegalStateException("Need to call getBlogEntries(currentMacro) first!");
+
+        log.debug("loading blog entries with existing: " + pager);
+
+        pager.setNumOfRecords(
+            blogDAO.countBlogEntries(currentDirectory, currentDocument, year, month, day, tag)
+        );
+
+        // Don't do the expensive query if we got no records
+        if (pager.getNumOfRecords() == 0) {
+            blogEntries = Collections.EMPTY_LIST;
+            return;
+        }
+
+        blogEntries =
+            blogDAO.findBlogEntriesInDirectory(
+                    currentDirectory, currentDocument,
+                    pager, year, month, day, tag,
+                    true
+            );
+    }
+
+    public Pager getPager() {
+        return pager;
+    }
+
+    public Long getNumberOfEntriesForCurrentTag() {
+        if (numberOfEntriesForCurrentTag == null) {
+            numberOfEntriesForCurrentTag = blogDAO.countBlogEntries(currentDirectory, currentDocument, null, null, null, tag);
+        }
+        return numberOfEntriesForCurrentTag;
+    }
+
+    /* ################################ BLOG ARCHIVE ############################################ */
+
+    private List<BlogEntryCount> archivedEntries;
+
+    public List<BlogEntryCount> getArchivedEntries() {
+        if (archivedEntries == null) loadArchivedEntries();
+        return archivedEntries;
+    }
+
+    @Observer(value = {"PersistenceContext.filterReset"}, create = false)
+    public void loadArchivedEntries() {
+        log.debug("loading blog entries and counting/aggregating them by year and month");
+        archivedEntries =
+                blogDAO.countAllBlogEntriesGroupByYearMonth(currentDirectory, currentDocument, tag);
+        log.debug("archived entries: " + archivedEntries.size());
+    }
+
+    public String getArchiveCacheKeyAppendix() {
+        StringBuilder builder = new StringBuilder();
+        if (tag != null && Math.abs(tag.hashCode()) != 0) builder.append(Math.abs(tag.hashCode()));
+        builder.append(WikiUtil.dateAsString(year, month, day));
+        Hash hash = (Hash)Component.getInstance(Hash.class);
+        return hash.hash(builder.toString());
+    }
+
+    /* ################################ BLOG RECENT ENTRIES ############################################ */
+
+    // Need to expose this as a datamodel so Seam can convert our map to a collection of Map.Entry objects
+    @DataModel
+    private Map<Date, List<BlogEntry>> recentBlogEntries;
+
+    @Factory(value = "recentBlogEntries")
+    @Observer(value = {"PersistenceContext.filterReset"}, create = false)
+    public void loadRecentBlogEntries() {
+        // TODO: This is supposed to use the currentMacro parameter to get the INSTANCE prefs value... how?
+        BlogPreferences prefs = Preferences.instance().get(BlogPreferences.class);
+        List<BlogEntry> recentBlogEntriesNonAggregated =
+            blogDAO.findBlogEntriesInDirectory(
+                    currentDirectory,
+                    currentDocument,
+                    new Pager(prefs.getRecentEntriesItems()),
+                    null, null, null,
+                    null, false
+            );
+
+        // Now aggregate by day
+        recentBlogEntries = new LinkedHashMap<Date, List<BlogEntry>>();
+        for (BlogEntry blogEntry : recentBlogEntriesNonAggregated) {
+
+            // Find the day (ignore the hours, minutes, etc.)
+            Calendar createdOn = new GregorianCalendar();
+            createdOn.setTime(blogEntry.getEntryDocument().getCreatedOn());
+            GregorianCalendar createdOnDay = new GregorianCalendar(
+                createdOn.get(Calendar.YEAR), createdOn.get(Calendar.MONTH), createdOn.get(Calendar.DAY_OF_MONTH)
+            );
+            Date createdOnDate = createdOnDay.getTime(); // Jesus, this API is just bad...
+
+            // Aggregate by day
+            List<BlogEntry> entriesForDay =
+                recentBlogEntries.containsKey(createdOnDate)
+                ? recentBlogEntries.get(createdOnDate)
+                : new ArrayList<BlogEntry>();
+
+            entriesForDay.add(blogEntry);
+            recentBlogEntries.put(createdOnDate, entriesForDay);
+        }
+    }
+
+    public String getDateUrl() {
+        return WikiUtil.dateAsString(year, month, day);
+    }
+
+    public String getTagUrl() {
+        return tag != null && tag.length()>0 ? "/Tag/" + WikiUtil.encodeURL(tag) : "";
+    }
+
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogDirectory.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntry.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogEntry.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntry.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntry.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,59 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.blog;
+
+import org.jboss.seam.wiki.core.model.WikiDocument;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author Christian Bauer
+ */
+public class BlogEntry implements Serializable {
+
+    WikiDocument entryDocument;
+    Long commentCount;
+    List<String> tags;
+
+    public BlogEntry() {}
+
+    public BlogEntry(WikiDocument entryDocument) {
+        this.entryDocument = entryDocument;
+    }
+
+    public BlogEntry(WikiDocument entryDocument, Long commentCount) {
+        this.entryDocument = entryDocument;
+        this.commentCount = commentCount;
+    }
+
+    public WikiDocument getEntryDocument() {
+        return entryDocument;
+    }
+
+    public void setEntryDocument(WikiDocument entryDocument) {
+        this.entryDocument = entryDocument;
+    }
+
+    public Long getCommentCount() {
+        return commentCount;
+    }
+
+    public void setCommentCount(Long commentCount) {
+        this.commentCount = commentCount;
+    }
+
+    public List<String> getTagsAsList() {
+        if (tags == null) tags = new ArrayList<String>(entryDocument.getTags());
+        return tags;
+    }
+
+    public String toString() {
+        return "BlogEntry: " + entryDocument + " Comments: " + commentCount;
+    }
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntry.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntryCount.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogEntryCount.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntryCount.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntryCount.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,63 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.blog;
+
+import org.jboss.seam.wiki.util.WikiUtil;
+
+/**
+ * @author Christian Bauer
+ */
+public class BlogEntryCount {
+
+    Long numOfEntries;
+    Integer year;
+    Integer month;
+    Integer day;
+
+    public BlogEntryCount() {}
+
+    public Long getNumOfEntries() {
+        return numOfEntries;
+    }
+
+    public void setNumOfEntries(Long numOfEntries) {
+        this.numOfEntries = numOfEntries;
+    }
+
+    public Integer getYear() {
+        return year;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
+    public Integer getMonth() {
+        return month;
+    }
+
+    public void setMonth(Integer month) {
+        this.month = month;
+    }
+
+    public Integer getDay() {
+        return day;
+    }
+
+    public void setDay(Integer day) {
+        this.day = day;
+    }
+
+    public String getAsString() {
+        return WikiUtil.dateAsString(year, month, day);
+    }
+
+    public String toString() {
+        return "NumOfEntries: " + getNumOfEntries() + " Year: " + getYear() + " Month: " + getMonth() + " Day: " + getDay();
+    }
+
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntryCount.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntryDefaults.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogEntryDefaults.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntryDefaults.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogEntryDefaults.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.blog;
+
+import org.jboss.seam.wiki.core.template.WikiDocumentTemplate;
+import org.jboss.seam.wiki.core.template.WikiDocumentEditorDefaults;
+import org.jboss.seam.wiki.core.model.WikiDocumentDefaults;
+import org.jboss.seam.wiki.core.action.DocumentHome;
+import org.jboss.seam.international.Messages;
+
+/**
+ * @author Christian Bauer
+ */
+ at WikiDocumentTemplate("#{messages['blog.directory.label.template.BlogEntry']}")
+public class BlogEntryDefaults extends WikiDocumentDefaults implements WikiDocumentEditorDefaults {
+
+    @Override
+    public String getName() {
+        return Messages.instance().get("blog.directory.label.template.NewBlogEntryTitle");
+    }
+
+    @Override
+    public String[] getHeaderMacrosAsString() {
+        return new String[]{ "blogEntry" };
+    }
+
+    public void setEditorDefaults(DocumentHome editor) {
+        editor.setPushOnFeeds(true);
+        editor.setPushOnSiteFeed(true);
+    }
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogPreferences.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogPreferences.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogPreferences.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,91 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.blog;
+
+import org.jboss.seam.wiki.preferences.annotations.Preferences;
+import org.jboss.seam.wiki.preferences.annotations.PreferenceProperty;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+import org.hibernate.validator.Range;
+import org.hibernate.validator.NotNull;
+
+import java.io.Serializable;
+
+/**
+ * @author Christian Bauer
+ */
+ at Preferences(
+    name = "Blog",
+    description = "#{messages['blog.preferences.description']}"
+)
+public class BlogPreferences implements Serializable {
+
+    @PreferenceProperty(
+        description = "#{messages['blog.directory.preferences.property.pageSize']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange",
+        mappedTo = "blog.directory"
+    )
+    @Range(min = 3l, max = 25l)
+    @NotNull
+    private Long pageSize;
+
+    @PreferenceProperty(
+        description = "#{messages['blog.archive.preferences.property.archiveSubscribeIcon']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        mappedTo = "blog.archive"
+    )
+    @NotNull
+    private Boolean archiveSubscribeIcon;
+
+    @PreferenceProperty(
+        description = "#{messages['blog.recentEntries.preferences.property.recentEntriesItems']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange",
+        mappedTo = "blog.recentEntries"
+    )
+    @Range(min = 3l, max = 100l)
+    @NotNull
+    private Long recentEntriesItems;
+
+    @PreferenceProperty(
+        description = "#{messages['blog.recentEntries.preferences.property.recentEntriesTruncateTitle']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange",
+        mappedTo = "blog.recentEntries"
+    )
+    @Range(min = 3l, max = 100l)
+    @NotNull
+    private Long recentEntriesTruncateTitle;
+
+    @PreferenceProperty(
+        description = "#{messages['blog.recentEntries.preferences.property.recentEntriesSubscribeIcon']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        mappedTo = "blog.recentEntries"
+    )
+    @NotNull
+    private Boolean recentEntriesSubscribeIcon;
+
+    public Long getPageSize() {
+        return pageSize;
+    }
+
+    public Boolean getArchiveSubscribeIcon() {
+        return archiveSubscribeIcon;
+    }
+
+    public Long getRecentEntriesItems() {
+        return recentEntriesItems;
+    }
+
+    public Long getRecentEntriesTruncateTitle() {
+        return recentEntriesTruncateTitle;
+    }
+
+    public Boolean getRecentEntriesSubscribeIcon() {
+        return recentEntriesSubscribeIcon;
+    }
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/BlogPreferences.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/i18n/messages_blog_en.properties
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/i18n/messages_blog_en.properties	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/i18n/messages_blog_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,37 @@
+blog.label=Weblog
+blog.description=Macros for building a weblog
+
+blog.preferences.description=Plugin: Weblog
+
+blog.directory.label=Blog Directory
+blog.directory.description=Displays all documents in the current directory as blog entries
+blog.directory.preferences.property.pageSize=Number of blog entries per page
+blog.directory.label.Attachment=attachment
+blog.directory.label.Attachments=attachments
+blog.directory.label.Showing=Showing
+blog.directory.label.To=to
+blog.directory.label.Of=of
+blog.directory.label.BlogEntries=blog entries
+blog.directory.label.In=in
+blog.directory.label.Tagged=tagged
+blog.directory.label.NoBlogEntriesFound=No blog entries found.
+blog.directory.label.Tag=Tag
+blog.directory.label.Tags=Tags
+blog.directory.label.template.BlogEntry=Weblog Entry
+blog.directory.label.template.NewBlogEntryTitle=My weblog entry title...
+
+blog.archive.label=Blog Archive
+blog.archive.description=Displays all blog entries in combo box (tag filtered)
+blog.archive.preferences.property.archiveSubscribeIcon=Show feed subscribe icon on archive
+blog.archive.label.Archive=Archive
+blog.archive.label.Subscribe=Subscribe
+blog.archive.label.AllEntries=All Entries
+
+blog.recentEntries.label=Recent Entries
+blog.recentEntries.description=Displays all recent entries
+blog.recentEntries.label.RecentEntries=Recent Entries
+blog.recentEntries.label.Subscribe=Subscribe
+blog.recentEntries.preferences.property.recentEntriesItems=Number of recent entries shown
+blog.recentEntries.preferences.property.recentEntriesTruncateTitle=Truncate recent entries title after characters
+blog.recentEntries.preferences.property.recentEntriesSubscribeIcon=Show feed subscribe icon on recent entries
+

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogArchive.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/blogArchive/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogArchive.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogArchive.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,69 @@
+<wiki:plugin
+        rendered="#{skin == 'd'}"
+        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:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:cache region="#{currentMacro.getCacheRegion('BlogArchiveList')}"
+             key="#{currentMacro.getCacheKey(blogDirectory.archiveCacheKeyAppendix)}">
+
+    <s:div styleClass="blogArchive box">
+
+        <s:div styleClass="blogArchive">
+
+            <s:div styleClass="boxHeader" rendered="#{not preferences.get('Blog', currentMacro).archiveSubscribeIcon}">
+                <h:outputText rendered="#{empty param.tag}" value="#{messages['blog.archive.label.Archive']}"/>
+                <h:outputText rendered="#{not empty param.tag}" value="#{messages['blog.archive.label.Archive']} '#{param.tag}'"/>
+            </s:div>
+
+            <h:panelGrid rendered="#{preferences.get('Blog', currentMacro).archiveSubscribeIcon}"
+                         columns="2" cellpadding="0" cellspacing="0" border="0"
+                         styleClass="boxHeader fullWidth">
+
+                <h:panelGrid styleClass="smallFont" rendered="#{not empty currentDirectory.feed}" columns="2"
+                             cellpadding="2" cellspacing="0" border="0">
+                    <h:outputLink value="#{wikiURLRenderer.renderFeedURL(currentDirectory.feed, null, null)}">
+                        <h:graphicImage value="#{imagePath}/icon.atom.ongrey.gif" width="18" height="18" alt="Atom"/>
+                    </h:outputLink>
+                    <h:outputLink value="#{wikiURLRenderer.renderFeedURL(currentDirectory.feed, null, null)}">
+                        <h:outputText value="#{messages['blog.archive.label.Subscribe']}"/>
+                    </h:outputLink>
+                </h:panelGrid>
+
+                <h:outputText rendered="#{empty param.tag}" value="#{messages['blog.archive.label.Archive']}"/>
+                <h:outputText rendered="#{not empty param.tag}" value="#{messages['blog.archive.label.Archive']} '#{param.tag}'"/>
+
+            </h:panelGrid>
+
+            <div class="blogArchiveSelector boxContent">
+                <select id="blogArchiveCombo" class="blogArchiveCombo"
+                        onchange="top.location.href = jQuery('#blogArchiveCombo')[0].options[jQuery('#blogArchiveCombo')[0].selectedIndex].value;">
+                    <option value="#{wikiURLRenderer.renderURL(currentDocument)}#{blogDirectory.tagUrl}">#{messages['blog.archive.label.AllEntries']} (#{blogDirectory.numberOfEntriesForCurrentTag})</option>
+                    <ui:repeat var="beCount" value="#{blogDirectory.archivedEntries}">
+                        <s:fragment rendered="#{blogDirectory.dateUrl != beCount.asString}">
+                            <option value="#{wikiURLRenderer.renderURL(currentDocument)}#{beCount.asString}#{blogDirectory.tagUrl}">
+                                #{messages[wiki:concat('lacewiki.label.', converters.monthNames[beCount.month])]}&#160;#{beCount.year}&#160;(#{beCount.numOfEntries})
+                            </option>
+                        </s:fragment>
+                        <s:fragment rendered="#{blogDirectory.dateUrl == beCount.asString}">
+                            <option value="#{wikiURLRenderer.renderURL(currentDocument)}#{beCount.asString}#{blogDirectory.tagUrl}" selected="true">
+                                #{messages[wiki:concat('lacewiki.label.', converters.monthNames[beCount.month])]}&#160;#{beCount.year}&#160;(#{beCount.numOfEntries})
+                            </option>
+                        </s:fragment>
+                    </ui:repeat>
+                </select>
+            </div>
+
+            <div class="boxFooter"/>
+
+        </s:div>
+
+    </s:div>
+
+    </s:cache>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogArchive.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogDirectory.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/blogDirectory/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogDirectory.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogDirectory.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,190 @@
+<wiki:plugin id="blogDirectoryPlugin"
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:div styleClass="blogDirectory">
+
+        <s:div id="blogEntries">
+        <s:div rendered="#{!empty blogDirectory.getBlogEntries(currentMacro)}">
+
+            <c:forEach var="blogEntry" items="#{blogDirectory.getBlogEntries(currentMacro)}">
+
+                <div class="box blogEntryContainer">
+
+                    <div class="boxHeader blogEntryHeader">
+
+                        <div class="title">
+                            <h:outputText value="#{blogEntry.entryDocument.name}"/>
+                        </div>
+
+                        <div class="dateAuthor smallFont">
+                            <h:outputText value="#{blogEntry.entryDocument.createdOn}">
+                                <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=",&#160;by&#160;"/>
+                            <s:span styleClass="undecoratedLink">
+                                <h:outputLink value="#{wikiURLRenderer.renderURL(blogEntry.entryDocument.createdBy.memberHome)}" target="_top"
+                                              rendered="#{!empty blogEntry.entryDocument.createdBy.memberHome}">
+                                    <h:outputText value="#{blogEntry.entryDocument.createdBy.fullname}"/>
+                                </h:outputLink>
+                                <h:outputLink value="#{wikiURLRenderer.renderUserInfoURL(blogEntry.entryDocument.createdBy)}" target="_top"
+                                              rendered="#{empty blogEntry.entryDocument.createdBy.memberHome}">
+                                    <h:outputText value="#{blogEntry.entryDocument.createdBy.fullname}"/>
+                                </h:outputLink>
+                            </s:span>
+                        </div>
+
+                    </div>
+
+                    <div class="boxContent blogEntryContent">
+                        <wiki:formattedText value="#{blogEntry.entryDocument.content}"
+                                            linkStyleClass="regularLink"
+                                            brokenLinkStyleClass="brokenLink"
+                                            attachmentLinkStyleClass="attachmentLink"
+                                            thumbnailLinkStyleClass="regularLink"
+                                            updateResolvedLinks="false"
+                                            internalTargetFrame="_top"
+                                            externalTargetFrame="_top"
+                                            linkBaseFile="#{blogEntry.entryDocument}"
+                                            currentAreaNumber="#{currentDirectory.areaNumber}"
+                                            enableMacroRendering="true"/>
+
+                        <s:div rendered="#{preferences.get('Wiki').showTags and not blogEntry.entryDocument.macroPresent('hideTags') and not empty blogEntry.entryDocument.tags}"
+                               styleClass="documentTags undecoratedLink">
+                            <s:div>
+                                <h:outputText rendered="#{blogEntry.entryDocument.tags.size()==1}" value="#{messages['blog.directory.label.Tag']}:&#160;"/>
+                                <h:outputText rendered="#{blogEntry.entryDocument.tags.size()>1}" value="#{messages['blog.directory.label.Tags']}:&#160;"/>
+                                <ui:repeat var="tag" value="#{blogEntry.entryDocument.tagsAsList}">
+                                    <h:outputLink value="#{wikiURLRenderer.renderTagURL(tag)}">
+                                        <h:outputText value="#{tag}"/>
+                                    </h:outputLink>
+                                    <h:outputText rendered="#{not wiki:isLastItemInList(blogEntry.entryDocument.tagsAsList, tag)}" value="&#160;|&#160;"/>
+                                </ui:repeat>
+                            </s:div>
+                        </s:div>
+
+                    </div>
+
+                    <div class="boxFooter blogEntryFooter">
+                        <h:panelGrid styleClass="blogEntryFooterTable" columns="5" cellpadding="0" cellspacing="0" border="0">
+                            <s:div styleClass="blogEntryCommentCount undecoratedLink"
+                                   rendered="#{blogEntry.commentCount > 0 and blogEntry.entryDocument.enableComments}">
+                                <h:outputLink value="#{wikiURLRenderer.renderPermURL(blogEntry.entryDocument)}#comments" target="_top">
+                                    <span class="blogEntryCommentCountText">
+                                        <h:outputText value="#{blogEntry.commentCount}&#160;"/>
+                                        <h:outputText value="#{blogEntry.commentCount>1
+                                                             ? messages['lacewiki.label.commentsDisplay.Comments']
+                                                             : messages['lacewiki.label.commentsDisplay.Comment']}"/>
+                                    </span>
+                                </h:outputLink>
+                            </s:div>
+                            <s:div styleClass="blogEntryCommentLink undecoratedLink"
+                                   rendered="#{blogEntry.entryDocument.enableComments and blogEntry.entryDocument.enableCommentForm}">
+                                <h:outputLink target="_top" value="#{wikiURLRenderer.renderURL(blogEntry.entryDocument)}?showCommentForm=true#commentForm">
+                                    <h:outputText styleClass="blogEntryCommentLinkText" value="#{messages['lacewiki.label.commentForm.PostComment']}"/>
+                                </h:outputLink>
+                            </s:div>
+                            <s:div styleClass="blogEntryAttachmentsLink undecoratedLink"
+                                    rendered="#{wiki:sizeOf(wikiTextAttachments) > 0}">
+                                <h:outputLink value="#{wikiURLRenderer.renderPermURL(blogEntry.entryDocument)}#attachments" target="_top">
+                                    <span class="blogEntryAttachmentsLinkText">
+                                        <h:outputText value="#{wiki:sizeOf(wikiTextAttachments)}&#160;"/>
+                                        <h:outputText value="#{wiki:sizeOf(wikiTextAttachments)>1
+                                                             ? messages['blog.directory.label.Attachments']
+                                                             : messages['blog.directory.label.Attachment']}"/>
+                                    </span>
+                                </h:outputLink>
+                            </s:div>
+                            <s:div styleClass="blogEntryPermLink undecoratedLink">
+                                <h:outputLink value="#{wikiURLRenderer.renderPermURL(blogEntry.entryDocument)}" target="_top">
+                                    <h:outputText styleClass="blogEntryPermLinkText" value="#{messages['lacewiki.label.PermLink']}"/>
+                                </h:outputLink>
+                            </s:div>
+                            <s:div styleClass="blogEntryWikiLink undecoratedLink">
+                                <h:outputLink value="#{wikiURLRenderer.renderWikiURL(blogEntry.entryDocument)}" target="_top">
+                                    <h:outputText styleClass="blogEntryWikiLinkText" value="#{messages['lacewiki.label.WikiLink']}"/>
+                                </h:outputLink>
+                            </s:div>
+                        </h:panelGrid>
+                    </div>
+
+                </div>
+
+                <div class="blogEntrySeparator"/>
+
+            </c:forEach>
+
+        </s:div>
+
+        <h:panelGrid columns="5" rendered="#{blogDirectory.pager.numOfRecords > blogDirectory.pager.pageSize}"
+                     styleClass="blogPagerTable"
+                     columnClasses="blogPagerColumn, blogPagerColumn, blogPagerTextColumn, blogPagerColumn, blogPagerColumn, "
+                     cellpadding="0" cellspacing="0" border="0">
+
+            <h:outputLink rendered="#{blogDirectory.pager.previousPageAvailable}" target="_top"
+                          value="#{wikiURLRenderer.renderURL(currentDocument)}#{blogDirectory.dateUrl}#{blogDirectory.tagUrl}">
+                <div style="width:30px;">
+                <h:graphicImage value="#{imagePath}/page.first.gif" width="13" height="11"/>
+                </div>
+            </h:outputLink>
+            <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
+                            rendered="#{!blogDirectory.pager.previousPageAvailable}"/>
+
+            <h:outputLink rendered="#{blogDirectory.pager.previousPageAvailable}" target="_top"
+                          value="#{wikiURLRenderer.renderURL(currentDocument)}#{blogDirectory.dateUrl}/Page/#{blogDirectory.pager.previousPage}#{blogDirectory.tagUrl}">
+                <div style="width:30px;">
+                <h:graphicImage value="#{imagePath}/page.previous.gif" width="13" height="11"/>
+                </div>
+            </h:outputLink>
+            <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
+                            rendered="#{!blogDirectory.pager.previousPageAvailable}"/>
+
+            <s:span>
+                <h:outputText value="#{messages['blog.directory.label.Showing']}
+                                        #{blogDirectory.pager.firstRecord} #{messages['blog.directory.label.To']}
+                                        #{blogDirectory.pager.lastRecord} #{messages['blog.directory.label.Of']}
+                                        #{blogDirectory.pager.numOfRecords} #{messages['blog.directory.label.BlogEntries']}"/>
+
+                <h:outputText rendered="#{!empty param.day || !empty param.month || !empty param.year}"
+                              value="&#160;#{messages['blog.directory.label.In']}"/>
+                <h:outputText rendered="#{!empty param.day}" value="&#160;#{param.day}."/>
+                <h:outputText rendered="#{!empty param.month}" value="&#160;#{messages[wiki:concat('lacewiki.label.', converters.monthNames[param.month])]}"/>
+                <h:outputText rendered="#{!empty param.year}" value="&#160;#{param.year}"/>
+                <h:outputText rendered="#{!empty param.tag}" value="&#160;#{messages['blog.directory.label.Tagged']} '#{param.tag}'"/>
+            </s:span>
+
+            <h:outputLink rendered="#{blogDirectory.pager.nextPageAvailable}" target="_top"
+                          value="#{wikiURLRenderer.renderURL(currentDocument)}#{blogDirectory.dateUrl}/Page/#{blogDirectory.pager.nextPage}#{blogDirectory.tagUrl}">
+                <div style="width:30px;">
+                <h:graphicImage value="#{imagePath}/page.next.gif" width="13" height="11"/>
+                </div>
+            </h:outputLink>
+            <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
+                            rendered="#{!blogDirectory.pager.nextPageAvailable}"/>
+
+            <h:outputLink rendered="#{blogDirectory.pager.nextPageAvailable}" target="_top"
+                          value="#{wikiURLRenderer.renderURL(currentDocument)}#{blogDirectory.dateUrl}/Page/#{blogDirectory.pager.lastPage}#{blogDirectory.tagUrl}">
+                <div style="width:30px;">
+                <h:graphicImage value="#{imagePath}/page.last.gif" width="13" height="11"/>
+                </div>
+            </h:outputLink>
+            <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
+                            rendered="#{!blogDirectory.pager.nextPageAvailable}"/>
+
+        </h:panelGrid>
+
+        </s:div>
+
+        <s:div id="noBlogEntriesContainer" rendered="#{empty blogDirectory.getBlogEntries(currentMacro)}">
+            <h:outputText value="#{messages['blog.directory.label.NoBlogEntriesFound']}"/>
+        </s:div>
+
+    </s:div>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogDirectory.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogRecentEntries.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/blogRecentEntries/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogRecentEntries.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogRecentEntries.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,78 @@
+<wiki:plugin
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:cache region="#{currentMacro.getCacheRegion('BlogRecentEntriesList')}"
+             key="#{currentMacro.cacheKey}">
+
+    <s:div styleClass="blogRecentEntries box">
+
+        <s:div styleClass="blogRecentEntries">
+
+            <s:div styleClass="boxHeader" rendered="#{not preferences.get('Blog', currentMacro).recentEntriesSubscribeIcon}">
+                <h:outputText value="#{messages['blog.recentEntries.label.RecentEntries']}"/>
+            </s:div>
+
+            <h:panelGrid rendered="#{preferences.get('Blog', currentMacro).recentEntriesSubscribeIcon}"
+                         columns="2" cellpadding="0" cellspacing="0" border="0"
+                         styleClass="boxHeader fullWidth">
+
+                <h:panelGrid styleClass="undecoratedLink smallFont" rendered="#{not empty currentDirectory.feed}" columns="2"
+                             cellpadding="2" cellspacing="0" border="0">
+                    <h:outputLink
+                            target="_top"
+                            value="#{wikiURLRenderer.renderFeedURL(currentDirectory.feed, null, null)}">
+                        <h:graphicImage value="#{imagePath}/icon.atom.ongrey.gif" width="18" height="18" alt="Atom"/>
+                    </h:outputLink>
+                    <h:outputLink
+                            target="_top"
+                            value="#{wikiURLRenderer.renderFeedURL(currentDirectory.feed, null, null)}">
+                        <h:outputText value="#{messages['blog.recentEntries.label.Subscribe']}"/>
+                    </h:outputLink>
+                </h:panelGrid>
+
+                <h:outputText value="#{messages['blog.recentEntries.label.RecentEntries']}"/>
+
+            </h:panelGrid>
+
+            <h:dataTable value="#{recentBlogEntries}" var="dayMap"
+                         rendered="#{recentBlogEntries.rowCount > 0}"
+                         styleClass="datatable boxContent"
+                         columnClasses="defaultColumn"
+                         cellpadding="0" cellspacing="0" border="0">
+                <h:column>
+                    <div class="blogRecentEntriesDay smallFont">
+                        <h:outputText value="#{dayMap.key}">
+                            <f:convertDateTime pattern="dd. MMM yyyy" timeZone="#{preferences.get('Wiki').timeZone}"/>
+                        </h:outputText>
+                    </div>
+
+                    <h:dataTable value="#{dayMap.value}" var="be"
+                                 columnClasses="blogRecentEntriesItem smallFont"
+                                 cellpadding="0" cellspacing="0" border="0">
+                        <h:column>
+                            <h:outputLink styleClass="blogRecentEntriesItemLink" target="_top" value="#{wikiURLRenderer.renderURL(be.entryDocument)}">
+                                <h:outputText styleClass="blogRecentEntriesItemLinkText"
+                                              value="#{wiki:truncateString(be.entryDocument.name, preferences.get('Blog', currentMacro).recentEntriesTruncateTitle, '...')}"/>
+                            </h:outputLink>
+                        </h:column>
+                    </h:dataTable>
+
+                </h:column>
+            </h:dataTable>
+
+            <div class="boxFooter"/>
+
+        </s:div>
+
+    </s:div>
+
+    </s:cache>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogRecentEntries.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogArchive.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/blogArchive.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogArchive.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogArchive.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,9 @@
+.blogArchiveSelector {
+    text-align: center;
+}
+.blogArchiveCombo {
+    border: 0;
+    margin: 10px;
+    color: #000;
+    font-weight: normal;
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogArchive.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogDirectory.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/blogDirectory.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogDirectory.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogDirectory.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,84 @@
+.blogEntryHeader {
+}
+
+.blogEntryHeader .title {
+    text-align: left;
+    line-height: 200%;
+    font-size: 115%;
+}
+
+.blogEntryHeader .dateAuthor {
+    text-align: right;
+    white-space: nowrap;
+    font-weight: normal;
+    line-height: 100%;
+}
+
+.blogEntryContent {
+    padding-left: 15px;
+    padding-right: 15px;
+    line-height: 150%;
+    text-align: justify;
+}
+
+.blogEntryContent .wikiHeadline1 a,
+.blogEntryContent .wikiHeadline2 a,
+.blogEntryContent .wikiHeadline3 a,
+.blogEntryContent .wikiHeadline4 a {
+    color: black;
+}
+
+.blogEntryFooter {
+}
+
+.blogEntryFooterTable {}
+
+.blogEntryCommentCount,
+.blogEntryCommentLink,
+.blogEntryAttachmentsLink,
+.blogEntryPermLink,
+.blogEntryWikiLink {
+    padding-right: 25px;
+    text-align:left;
+}
+.blogEntryCommentCountText,
+.blogEntryCommentLinkText,
+.blogEntryAttachmentsLinkText,
+.blogEntryPermLinkText,
+.blogEntryWikiLinkText {
+    color: #962325;
+}
+.blogEntryCommentCountText:hover,
+.blogEntryCommentLinkText:hover,
+.blogEntryAttachmentsLinkText:hover,
+.blogEntryPermLinkText:hover,
+.blogEntryWikiLinkText:hover {
+    color: #962325;
+}
+
+.blogEntrySeparator {
+    height: 25px;
+}
+
+.blogPagerTable {
+    width: 100%;
+    font-weight: bold;
+    padding: 0;
+    margin: 0;
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    text-align: center;
+}
+
+.blogPagerColumn {
+    width: 10%;
+}
+.blogPagerTextColumn {
+    width: 60%;
+}
+
+.documentTags {
+    margin-left: 10px;
+    margin-right: 10px;
+}
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogDirectory.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogRecentEntries.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/blogRecentEntries.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogRecentEntries.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogRecentEntries.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,7 @@
+.blogRecentEntriesDay {
+    font-weight: bold;
+}
+
+.blogRecentEntriesItem {
+    padding-left: 10px;
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/default/css/blogRecentEntries.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogArchive.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/blogArchive.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogArchive.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogArchive.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,10 @@
+.blogArchiveSelector {
+    text-align: center;
+}
+.blogArchiveCombo {
+    border: 0;
+    color: #000;
+    font-size: 91%;
+    font-weight: normal;
+    font-family: "Lucida Sans", Arial, Helvetica, sans-serif;
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogDirectory.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/blogDirectory.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogDirectory.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogDirectory.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,102 @@
+#blogDirectoryPlugin\:blogEntries .boxheader {
+    padding-bottom: 0;
+}
+
+#blogDirectoryPlugin\:blogEntries .boxContent {
+    padding-top: 0;
+    padding-bottom: 0;
+}
+
+#blogDirectoryPlugin\:blogEntries .boxContent .wikiPara:first-child {
+    padding-top: 5px;
+    margin-top: 0;
+}
+
+.blogEntryHeader .title {
+    text-align: left;
+    line-height: 200%;
+    font-size: 120%;
+}
+
+.blogEntryHeader .dateAuthor {
+    text-align: right;
+    white-space: nowrap;
+    font-weight: normal;
+    line-height: 100%;
+}
+
+.blogEntryContent {
+    padding-left: 15px;
+    padding-right: 15px;
+    line-height: 150%;
+    text-align: justify;
+}
+
+.blogEntryContent .documentTags {
+    padding-top: 5px;
+    padding-bottom: 5px;
+    padding-left: 0;
+    padding-right: 0;
+    margin: 0;
+    font-size: 85%;
+}
+
+.blogEntryContent .wikiHeadline1 a,
+.blogEntryContent .wikiHeadline2 a,
+.blogEntryContent .wikiHeadline3 a,
+.blogEntryContent .wikiHeadline4 a {
+    color: black;
+}
+
+.blogEntryFooter {
+    font-size: 85%;
+}
+
+.blogEntryFooterTable {
+    margin-right: auto;
+}
+
+.blogEntryCommentCount,
+.blogEntryCommentLink,
+.blogEntryAttachmentsLink,
+.blogEntryPermLink,
+.blogEntryWikiLink {
+    padding-right: 25px;
+    text-align:left;
+}
+.blogEntryCommentCountText,
+.blogEntryCommentLinkText,
+.blogEntryAttachmentsLinkText,
+.blogEntryPermLinkText,
+.blogEntryWikiLinkText {
+    color: #d75525;
+}
+.blogEntryCommentCountText:hover,
+.blogEntryCommentLinkText:hover,
+.blogEntryAttachmentsLinkText:hover,
+.blogEntryPermLinkText:hover,
+.blogEntryWikiLinkText:hover {
+    color: #666;
+}
+
+.blogEntrySeparator {
+    height: 25px;
+}
+
+.blogPagerTable {
+    width: 100%;
+    font-weight: bold;
+    padding: 0;
+    margin: 0;
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    text-align: center;
+}
+
+.blogPagerColumn {
+    width: 10%;
+}
+.blogPagerTextColumn {
+    width: 60%;
+}
\ No newline at end of file

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogRecentEntries.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/blogRecentEntries.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogRecentEntries.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogRecentEntries.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,7 @@
+.blogRecentEntriesDay {
+    font-weight: bold;
+}
+
+.blogRecentEntriesItem {
+    padding-left: 10px;
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogArchive.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/blogArchive.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogArchive.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogArchive.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,18 @@
+.blogArchiveSelector {
+    text-align: center;
+}
+.blogArchiveCombo {
+    border: 0;
+    color: #000;
+    font-weight: normal;
+}
+
+.blogArchiveFooter {
+    background: #ede8db url(#{themePathGetRequest}/img/th.bg.gif) 0 0 repeat-x;
+    padding-top: 5px;
+    padding-bottom: 10px;
+    padding-left: 15px;
+    padding-right: 15px;
+    font-weight: normal;
+    color: #962325;
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogArchive.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogDirectory.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/blogDirectory.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogDirectory.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogDirectory.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,89 @@
+
+.blogEntryHeader {
+}
+
+.blogEntryHeader .title {
+    text-align: left;
+    line-height: 200%;
+    font-size: 115%;
+}
+
+.blogEntryHeader .dateAuthor {
+    text-align: right;
+    white-space: nowrap;
+    font-weight: normal;
+    line-height: 100%;
+}
+
+.blogEntryContent {
+    padding-left: 15px;
+    padding-right: 15px;
+    line-height: 150%;
+    text-align: justify;
+}
+
+.blogEntryContent .wikiPara {
+    margin-top: 0;
+}
+
+.blogEntryContent .wikiHeadline1 a,
+.blogEntryContent .wikiHeadline2 a,
+.blogEntryContent .wikiHeadline3 a,
+.blogEntryContent .wikiHeadline4 a {
+    color: black;
+}
+
+.blogEntryFooter {
+}
+
+.blogEntryFooterTable {
+}
+
+.blogEntryCommentCount,
+.blogEntryCommentLink,
+.blogEntryAttachmentsLink,
+.blogEntryPermLink,
+.blogEntryWikiLink {
+    padding-right: 25px;
+    text-align:left;
+}
+.blogEntryCommentCountText,
+.blogEntryCommentLinkText,
+.blogEntryAttachmentsLinkText,
+.blogEntryPermLinkText,
+.blogEntryWikiLinkText {
+    color: #576c74;
+}
+.blogEntryCommentCountText:hover,
+.blogEntryCommentLinkText:hover,
+.blogEntryAttachmentsLinkText:hover,
+.blogEntryPermLinkText:hover,
+.blogEntryWikiLinkText:hover {
+    color: #000;
+}
+
+.blogEntrySeparator {
+    height: 25px;
+}
+
+.blogPagerTable {
+    width: 100%;
+    font-weight: bold;
+    padding: 0;
+    margin: 0;
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    text-align: center;
+}
+
+.blogPagerColumn {
+    width: 10%;
+}
+.blogPagerTextColumn {
+    width: 60%;
+}
+
+.documentTags {
+    margin-top: 10px;
+}
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogDirectory.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogRecentEntries.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/blogRecentEntries.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogRecentEntries.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogRecentEntries.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,12 @@
+.blogRecentEntriesDay {
+    font-weight: bold;
+}
+
+.blogRecentEntriesItem {
+    padding-left: 10px;
+    padding-top: 2px;
+    padding-bottom: 2px;
+}
+
+.blogRecentEntriesItemLink {
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/sfwkorg/css/blogRecentEntries.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/faqBrowser)

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowser.plugin.xml
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowser.plugin.xml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowser.plugin.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin key="fb"
+        xmlns="http://jboss.com/products/seam/wiki/plugin"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://jboss.com/products/seam/wiki/plugin
+                            classpath://org/jboss/seam/wiki/core/plugin/plugin-1.0.xsd">
+
+    <plugin-info version="1.0">
+        <application-version min="1.0" max="1.0"/>
+        <vendor name="Red Hat Inc." url="http://www.seamframework.org/"/>
+    </plugin-info>
+
+    <macro key="faqBrowser" name="faqBrowser">
+        <skins>
+            <skin name="d"/>
+        </skins>
+        <applicable-to header="true"/>
+        <render-options>
+            <singleton/>
+        </render-options>
+    </macro>
+
+</plugin>
+

Modified: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionDefaults.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionDefaults.java	2008-05-07 12:21:20 UTC (rev 8123)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionDefaults.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -22,7 +22,7 @@
 
     @Override
     public String getName() {
-        return Messages.instance().get("faqBrowser.label.NewQuestionTitle");
+        return Messages.instance().get("fb.faqBrowser.label.NewQuestionTitle");
     }
 
     @Override

Modified: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionHome.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionHome.java	2008-05-07 12:21:20 UTC (rev 8123)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionHome.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -69,7 +69,7 @@
     protected void createdMessage() {
         getFacesMessages().addFromResourceBundleOrDefault(
                 SEVERITY_INFO,
-                "faqBrowser.msg.Question.Persist",
+                "fb.faqBrowser.msg.Question.Persist",
                 "Question '{0}' has been saved.",
                 getInstance().getName()
         );
@@ -78,7 +78,7 @@
     protected void updatedMessage() {
         getFacesMessages().addFromResourceBundleOrDefault(
                 SEVERITY_INFO,
-                "faqBrowser.msg.Question.Update",
+                "fb.faqBrowser.msg.Question.Update",
                 "Question '{0}' has been updated.",
                 getInstance().getName()
         );
@@ -87,7 +87,7 @@
     protected void deletedMessage() {
         getFacesMessages().addFromResourceBundleOrDefault(
                 SEVERITY_INFO,
-                "faqBrowser.msg.Question.Delete",
+                "fb.faqBrowser.msg.Question.Delete",
                 "Question '{0}' has been deleted.",
                 getInstance().getName()
         );

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/i18n/messages_faqBrowser_en.properties (from rev 8123, trunk/examples/wiki/src/etc/i18n/messages_faqBrowser_en.properties)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/i18n/messages_faqBrowser_en.properties	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/i18n/messages_faqBrowser_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,26 @@
+fb.label=FAQ Browser
+fb.description=FAQ browser and editor
+
+fb.faqBrowser.label=FAQ Browser
+fb.faqBrowser.description=Shows the FAQ browser/editor above the document
+
+fb.faqBrowser.label.Category=FAQ Category
+fb.faqBrowser.label.Question=Question
+fb.faqBrowser.label.Updated=Updated
+fb.faqBrowser.label.NoQuestionsInCategory=No questions in this category.
+fb.faqBrowser.button.NewQuestion=New <u>Q</u>uestion
+fb.faqBrowser.button.NewQuestion.accesskey=Q
+
+fb.faqBrowser.label.NewFaqQuestion=New question in category
+fb.faqBrowser.label.NewQuestionTitle=Your question?
+fb.faqBrowser.label.QuestionTitle=Question
+fb.faqBrowser.label.QuestionText=Text
+fb.faqBrowser.button.SaveNoKey=Save
+fb.faqBrowser.button.CancelNoKey=Cancel
+
+fb.faqBrowser.msg.Question.Persist=Question '{0}' has been saved.
+fb.faqBrowser.msg.Question.Update=Question '{0}' has been updated.
+fb.faqBrowser.msg.Question.Delete=Question '{0}' has been deleted.
+
+fb.faqBrowser.msg.TreeNotFound=Could not find FAQ tree, please create a default document with [<=faqBrowser] header!
+fb.faqBrowser.msg.TreeEmpty=No FAQ categories found, create subdirectories in the current directory.
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/i18n/messages_faqBrowser_en.properties
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqBrowser.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/faqBrowser/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqBrowser.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqBrowser.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,20 @@
+<wiki:plugin id="faqBrowserPlugin"
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:div id="faqBrowserPluginContainer">
+
+        <ui:include src="faqControls.xhtml"/>
+
+        <ui:include src="faqQuestionForm.xhtml"/>
+
+    </s:div>
+
+</wiki:plugin>
+


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqBrowser.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqControls.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/faqBrowser/faqControls.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqControls.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqControls.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,121 @@
+<s:div id="faqControlsContainer"
+       styleClass="faqControlsContainer"
+       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:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:s="http://jboss.com/products/seam/taglib"
+       rendered="#{not faqQuestionHome.showForm}">
+
+    <h:form id="faqsSelectorForm">
+
+        <s:div styleClass="faqBrowserPanel">
+
+        <h:panelGrid columns="4"
+                     columnClasses="categoryLabel, categoryMenu, questionsControl, categoryLink, status"
+                     cellpadding="0" cellspacing="0" border="0">
+
+            <s:span>
+                <h:outputText value="#{messages['fb.faqBrowser.label.Category']}:"/>
+            </s:span>
+
+            <s:span>
+                <h:selectOneMenu value="#{faqBrowser.selectedDir}"
+                                 rendered="#{not empty faqBrowser.tree and faqBrowser.tree.wrappedChildren.size() > 0}"
+                                 converter="#{nestedSetNodeWrapperRestrictedEntityConverter}"
+                                 styleClass="ajaxSupport" tabindex="1">
+                    <s:selectItems value="#{faqBrowser.tree.wrappedChildren}"
+                                   var="faqsDir"
+                                   label="#{wiki:repeatString('&#160;&#183;&#160;',faqsDir.level-1)}#{wiki:truncateString(faqsDir.wrappedNode.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}">
+                    <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}">
+                    <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:outputText value="Link"/>
+                    </h:outputLink>
+                </s:fragment>
+            </s:span>
+
+        </h:panelGrid>
+        </s:div>
+
+        <s:div id="faqQuestions">
+            <s:div styleClass="faqQuestionPanel" rendered="#{faqBrowser.directorySelected}">
+
+                <h:panelGrid columns="2" styleClass="header" columnClasses="categoryDescription, newQuestionButton"
+                             cellpadding="0" cellspacing="0" border="0">
+
+                    <h:outputText value="#{faqBrowser.selectedDir.wrappedNode.description}"/>
+
+                    <s:fragment rendered="#{s:hasPermission('Node', 'create', faqBrowser.selectedDir.wrappedNode)}">
+                        <a:commandLink action="#{faqQuestionHome.newQuestion()}"
+                                       reRender="faqBrowserPluginContainer, messageBoxContainer"
+                                       status="globalStatus"
+                                       accesskey="#{messages['fb.faqBrowser.button.NewQuestion.accesskey']}"
+                                       tabindex="1" styleClass="buttonNonpersistent">
+                            <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['fb.faqBrowser.button.NewQuestion']}"/>
+                        </a:commandLink>
+                    </s:fragment>
+
+                </h:panelGrid>
+
+                <h:dataTable value="#{faqBrowser.questions}" var="q" rendered="#{not empty faqBrowser.questions}"
+                             styleClass="faqQuestionList"
+                             columnClasses="defaultColumn alignLeft minorPadding wrapWhitespace, twentyPercentColumn alignLeft minorPadding smallFont"
+                             rowClasses="rowOdd, rowEven"
+                             cellpadding="0" cellspacing="0" border="0">
+                    <h:column>
+                        <h:outputLink value="#{wikiURLRenderer.renderURL(q)}">
+                            <h:outputText value="#{q.name}"/>
+                        </h:outputLink>
+                    </h:column>
+
+                    <h:column>
+                        <s:fragment rendered="#{!empty q.lastModifiedOn and !empty q.lastModifiedBy}">
+                            <h:outputText value="#{messages['fb.faqBrowser.label.Updated']}:&#160;"/>
+                            <h:outputText value="#{q.lastModifiedOn}">
+                                <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
+                            </h:outputText>
+                            (<s:span styleClass="undecoratedLink">
+                                <h:outputLink value="#{wikiURLRenderer.renderUserInfoURL(q.lastModifiedBy)}">
+                                    <h:outputText value="#{q.lastModifiedBy.username}"/>
+                                </h:outputLink>
+                            </s:span>)
+                        </s:fragment>
+                    </h:column>
+
+                </h:dataTable>
+
+                <s:div styleClass="noQuestions" rendered="#{empty faqBrowser.questions}">
+                    <h:outputText value="#{messages['fb.faqBrowser.label.NoQuestionsInCategory']}"/>
+                </s:div>
+            </s:div>
+        </s:div>
+
+    </h:form>
+
+</s:div>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqControls.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqQuestionForm.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/faqBrowser/faqQuestionForm.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqQuestionForm.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqQuestionForm.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,86 @@
+<s:div id="faqQuestionFormContainer"
+       styleClass="faqQuestionFormContainer"
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:s="http://jboss.com/products/seam/taglib"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:f="http://java.sun.com/jsf/core"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:c="http://java.sun.com/jstl/core"
+       xmlns:wiki="http://jboss.com/products/seam/wiki">
+
+<c:if test="#{faqQuestionHome.showForm}">
+
+    <div class="box">
+
+    <h:form id="faqQuestionForm">
+        <div class="form">
+
+            <div class="formHead">
+                <h:outputText value="#{messages['fb.faqBrowser.label.NewFaqQuestion']}: #{faqQuestionHome.parentNode.name}"/>
+            </div>
+
+            <s:div styleClass="formFields formBorder">
+
+                <s:decorate id="nameDecorate" template="/includes/formFieldDecorate.xhtml">
+                    <ui:define name="label">#{messages['fb.faqBrowser.label.QuestionTitle']}</ui:define>
+                    <h:inputText id="faqQuestionName" tabindex="1" size="60" maxlength="255" required="true" value="#{faqQuestionHome.instance.name}"/>
+                </s:decorate>
+
+                <ui:include src="/includes/wikiTextEditor.xhtml">
+                    <ui:param name="textEditorId" value="faqQuestion"/>
+                    <ui:param name="textPreviewId" value="faqQuestionPreview"/>
+                    <ui:param name="namingContainer" value="faqBrowserPlugin\\\\:faqQuestionForm"/>
+                    <ui:param name="label" value="#{messages['fb.faqBrowser.label.QuestionText']}"/>
+                    <ui:param name="valueBinding" value="#{faqQuestionHome.formContent}"/>
+                    <ui:param name="valueMaxLength" value="32767"/>
+                    <ui:param name="valueRequired" value="true"/>
+                    <ui:param name="textEditorColumns" value="60"/>
+                    <ui:param name="textEditorRows" value="20"/>
+                </ui:include>
+
+                <s:div styleClass="marginLeft">
+                    <ui:include src="/includes/wikiTextPreview.xhtml">
+                        <ui:param name="textPreviewId" value="faqQuestionPreview"/>
+                        <ui:param name="valueBinding" value="#{faqQuestionHome.instance.content}"/>
+                        <ui:param name="baseDocument" value="#{faqQuestionHome.instance}"/>
+                        <ui:param name="baseDirectory" value="#{currentDirectory}"/>
+                    </ui:include>
+                </s:div>
+
+            </s:div>
+
+            <div class="formControls">
+                <div class="entry">
+                    <div class="label">&#160;</div>
+                    <div class="input">
+
+                        <a:commandLink id="save" action="#{faqQuestionHome.persist}"
+                                       eventsQueue="ajaxEventQueue"
+                                       reRender="faqBrowserPluginContainer, messageBoxContainer"
+                                       status="globalStatus"
+                                       tabindex="1"
+                                       styleClass="button saveButton sessionEventTrigger">
+                            <h:outputText styleClass="buttonLabel" value="#{messages['fb.faqBrowser.button.SaveNoKey']}"/>
+                        </a:commandLink>
+
+                        <a:commandLink action="#{faqQuestionHome.cancel}"
+                                       reRender="faqBrowserPluginContainer, messageBoxContainer"
+                                       immediate="true"
+                                       status="globalStatus"
+                                       eventsQueue="ajaxEventQueue"
+                                       tabindex="1" styleClass="buttonNonpersistent sessionEventTrigger">
+                            <h:outputText styleClass="buttonLabel" value="#{messages['fb.faqBrowser.button.CancelNoKey']}"/>
+                        </a:commandLink>
+
+                    </div>
+                </div>
+            </div>
+
+        </div>
+    </h:form>
+
+    </div>
+
+</c:if>
+</s:div>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/templates/faqQuestionForm.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/default/css/faqBrowser.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/faqBrowser.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/default/css/faqBrowser.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/default/css/faqBrowser.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,72 @@
+.faqControlsContainer {
+    margin-bottom: 10px;
+}
+
+.faqBrowserPanel {
+    border: 1px solid #C3BBB6;
+    background: white url(#{themePathGetRequest}/img/th.bg.gif) 0 0 repeat-x;
+    padding: 2px;
+    padding-left: 5px;
+    padding-right: 5px;
+    line-height: 250%;
+}
+
+.faqBrowserPanel .categoryLabel {
+    padding-left: 5px;
+    white-space:nowrap;
+}
+
+.faqBrowserPanel .categoryMenu {
+    padding-left: 10px;
+    padding-right: 10px;
+    white-space:nowrap;
+}
+
+.faqBrowserPanel .questionsControl {
+    white-space:nowrap;
+}
+
+.faqBrowserPanel .categoryLink {
+    padding-left: 10px;
+    padding-right: 10px;
+    white-space:nowrap;
+}
+
+.faqQuestionPanel {
+    border-left: 1px solid #C3BBB6;
+    border-right: 1px solid #C3BBB6;
+    border-bottom: 1px solid #C3BBB6;
+    background: white url(#{themePathGetRequest}/img/th.bg.inverse.gif) 0 0 repeat-x;
+}
+
+.faqQuestionPanel .header {
+    white-space:nowrap;
+    width: 100%;
+}
+
+.faqQuestionPanel .header .categoryDescription {
+    padding-left: 10px;
+    line-height: 250%;
+    font-weight: bold;
+}
+
+.faqQuestionPanel .header .newQuestionButton {
+    text-align:right;
+}
+
+.faqQuestionPanel .noQuestions {
+    padding-left: 10px;
+    line-height: 250%;
+}
+
+.faqQuestionList {
+    width: 100%;
+}
+
+.faqQuestionList .rowOdd {
+    background-color: #fff;
+}
+
+.faqQuestionList .rowEven {
+    background-color: #eae8e5;
+}
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/default/css/faqBrowser.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/inrelationto/css/faqBrowser.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/faqBrowser.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/inrelationto/css/faqBrowser.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/inrelationto/css/faqBrowser.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,78 @@
+#faqBrowserPlugin\:faqQuestionForm {
+    border: 1px solid #C3BBB6;
+}
+
+#faqBrowserPlugin\:faqQuestionForm .form {
+    margin:0;
+}
+
+.faqControlsContainer {
+    margin-bottom: 10px;
+}
+
+.faqBrowserPanel {
+    border: 1px solid #C3BBB6;
+    background: #d6d5c8 url(#{themePathGetRequest}/img/th.bg.gif) 0 0 repeat-x;
+    padding: 2px;
+    padding-left: 5px;
+    padding-right: 5px;
+}
+
+.faqBrowserPanel .categoryLabel {
+    padding-left: 5px;
+    white-space:nowrap;
+}
+
+.faqBrowserPanel .categoryMenu {
+    padding-left: 10px;
+    padding-right: 10px;
+    white-space:nowrap;
+}
+
+.faqBrowserPanel .questionsControl {
+    white-space:nowrap;
+}
+
+.faqBrowserPanel .categoryLink {
+    padding-left: 10px;
+    padding-right: 10px;
+    white-space:nowrap;
+}
+
+.faqQuestionPanel {
+    border-left: 1px solid #C3BBB6;
+    border-right: 1px solid #C3BBB6;
+    border-bottom: 1px solid #C3BBB6;
+    background: white url(#{themePathGetRequest}/img/th.bg.inverse.gif) 0 0 repeat-x;
+}
+
+.faqQuestionPanel .header {
+    white-space:nowrap;
+    width: 100%;
+}
+
+.faqQuestionPanel .header .categoryDescription {
+    padding-left: 10px;
+    line-height: 250%;
+    font-weight: bold;
+}
+
+.faqQuestionPanel .header .newQuestionButton {
+    text-align:right;
+}
+
+.faqQuestionPanel .noQuestions {
+    padding-left: 10px;
+    line-height: 250%;
+}
+
+.faqQuestionList {
+}
+
+.faqQuestionList .rowOdd {
+    background-color: #fff;
+}
+
+.faqQuestionList .rowEven {
+    background-color: #eae8e5;
+}
\ No newline at end of file

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/sfwkorg/css/faqBrowser.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/faqBrowser.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/sfwkorg/css/faqBrowser.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/sfwkorg/css/faqBrowser.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,73 @@
+.faqControlsContainer {
+    margin-bottom: 10px;
+}
+
+.faqBrowserPanel {
+    border: 1px solid #d3d2d1;
+    background: #ede8db url(#{themePathGetRequest}/img/th.bg.gif) 0 0 repeat-x;
+    padding-left: 5px;
+    padding-right: 5px;
+    padding-top: 5px;
+    line-height: 250%;
+}
+
+.faqBrowserPanel .categoryLabel {
+    padding-left: 5px;
+    white-space:nowrap;
+}
+
+.faqBrowserPanel .categoryMenu {
+    padding-left: 10px;
+    padding-right: 10px;
+    white-space:nowrap;
+}
+
+.faqBrowserPanel .questionsControl {
+    white-space:nowrap;
+}
+
+.faqBrowserPanel .categoryLink {
+    padding-left: 10px;
+    padding-right: 10px;
+    white-space:nowrap;
+}
+
+.faqQuestionPanel {
+    border-left: 1px solid #d3d2d1;
+    border-right: 1px solid #d3d2d1;
+    border-bottom: 1px solid #d3d2d1;
+    background: white url(#{themePathGetRequest}/img/th.bg.inverse.gif) 0 0 repeat-x;
+}
+
+.faqQuestionPanel .header {
+    white-space:nowrap;
+    width: 100%;
+}
+
+.faqQuestionPanel .header .categoryDescription {
+    padding-left: 10px;
+    line-height: 250%;
+    font-weight: bold;
+}
+
+.faqQuestionPanel .header .newQuestionButton {
+    text-align:right;
+}
+
+.faqQuestionPanel .noQuestions {
+    padding-left: 10px;
+    line-height: 250%;
+}
+
+.faqQuestionList {
+    border-right: 1px solid #d3d2d1;
+    width: 100%;
+}
+
+.faqQuestionList .rowOdd {
+    background-color: #fff;
+}
+
+.faqQuestionList .rowEven {
+    background-color: #f5f5f5;
+}
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/faqBrowser/themes/sfwkorg/css/faqBrowser.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/Feed.plugin.xml
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/Feed.plugin.xml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/Feed.plugin.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin key="feed"
+        xmlns="http://jboss.com/products/seam/wiki/plugin"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://jboss.com/products/seam/wiki/plugin
+                            classpath://org/jboss/seam/wiki/core/plugin/plugin-1.0.xsd">
+
+    <plugin-info version="1.0">
+        <application-version min="1.0" max="1.0"/>
+        <vendor name="Red Hat Inc." url="http://www.seamframework.org/"/>
+    </plugin-info>
+
+    <macro key="teasers" name="feedTeasers">
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <applicable-to content="true"/>
+        <cache-regions>
+            <cache-region name="TeaserList">
+                <invalidation-event name="FeedEntry.created"/>
+                <invalidation-event name="FeedEntry.updated"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+    <macro key="aggregator" name="feedAggregator">
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <applicable-to content="true"/>
+    </macro>
+
+</plugin>
+

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedAggregator.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/feedAggregator/FeedAggregator.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedAggregator.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedAggregator.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,94 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.feed;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.*;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.wiki.connectors.feed.FeedAggregatorDAO;
+import org.jboss.seam.wiki.connectors.feed.FeedEntryDTO;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.preferences.Preferences;
+
+import java.io.Serializable;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("feedAggregator")
+ at Scope(ScopeType.PAGE)
+public class FeedAggregator implements Serializable {
+
+    public static final String MACRO_ATTR_FEEDENTRYLIST = "feedEntryList";
+
+    @Logger
+    Log log;
+
+    @In
+    FeedAggregatorDAO feedAggregatorDAO;
+
+    public List<FeedEntryDTO> getFeedEntries(WikiPluginMacro macro) {
+        List<FeedEntryDTO> feedEntries = (List<FeedEntryDTO>)macro.getAttributes().get(MACRO_ATTR_FEEDENTRYLIST);
+        if (feedEntries == null) {
+            FeedAggregatorPreferences prefs = Preferences.instance().get(FeedAggregatorPreferences.class, macro);
+            if (prefs.getUrls() == null || prefs.getUrls().length() < 8) return null;
+
+            List<URL> validURLs = getValidURLs(prefs.getUrls());
+            log.debug("aggregating feeds: " + validURLs.size());
+
+            String aggregateId =
+                    prefs.getAggregateId() != null && prefs.getAggregateId().length() > 0
+                        ? prefs.getAggregateId()
+                        : null;
+
+            if (aggregateId != null) {
+                log.debug("aggregating under subscribable identifier: "+ aggregateId);
+            }
+
+            int numberOfEntries =
+                    prefs.getNumberOfFeedEntries() != null ? prefs.getNumberOfFeedEntries().intValue() : 10;
+
+            feedEntries =
+                feedAggregatorDAO.getLatestFeedEntries(
+                    numberOfEntries,
+                    validURLs.toArray(new URL[validURLs.size()]),
+                    aggregateId
+                );
+            macro.getAttributes().put(MACRO_ATTR_FEEDENTRYLIST, feedEntries);
+
+        }
+        return feedEntries;
+    }
+
+    private List<URL> getValidURLs(String spaceSeparatedURLs) {
+
+        // Split the URLs by space
+        String[] urls = spaceSeparatedURLs.split(" ");
+
+        // First check if the URLs are valid, if not we might as well just skip it...
+        List<URL> validUrls = new ArrayList<URL>();
+        for (String url : urls) {
+            try {
+                URL u = new URL(url);
+                if (!u.getProtocol().equals("http")) {
+                    log.debug("skipping URL with unsupported protocol: " + url);
+                    continue;
+                }
+                validUrls.add(u);
+            } catch (MalformedURLException e) {
+                log.debug("skipping invalid URL: " + url);
+                continue;
+            }
+        }
+        return validUrls;
+    }
+
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedAggregatorPreferences.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/feedAggregator/FeedAggregatorPreferences.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedAggregatorPreferences.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedAggregatorPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,140 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.feed;
+
+import org.jboss.seam.wiki.preferences.annotations.PreferenceProperty;
+import org.jboss.seam.wiki.preferences.annotations.Preferences;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+import org.hibernate.validator.Length;
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Range;
+import org.hibernate.validator.Pattern;
+
+/**
+ * @author Christian Bauer
+ */
+ at Preferences(
+    name = "FeedAggregator",
+    description = "#{messages['feed.aggregator.preferences.property.description']}",
+    mappedTo = "feed.aggregator"
+)
+public class FeedAggregatorPreferences {
+
+    @PreferenceProperty(
+        description = "#{messages['feed.aggregator.preferences.property.title']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "AdaptiveTextInput"
+    )
+    @Length(min = 0, max = 255)
+    @NotNull
+    private String title;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.aggregator.preferences.property.urls']}",
+        visibility = {PreferenceVisibility.INSTANCE},
+        editorIncludeName = "AdaptiveTextInput"
+    )
+    @Length(min = 0, max = 4096)
+    private String urls;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.aggregator.preferences.property.numberOfFeedEntries']}",
+        visibility = {PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange"
+    )
+    @Range(min = 3l, max = 99l)
+    @NotNull
+    private Long numberOfFeedEntries;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.aggregator.preferences.property.truncateDescription']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange"
+    )
+    @Range(min = 10l, max = 1000l)
+    @NotNull
+    private Long truncateDescription;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.aggregator.preferences.property.aggregateId']}",
+        visibility = {PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange"
+    )
+    @Pattern(regex="^[a-zA-Z0-9]+[a-zA-Z0-9\\s]*")
+    @Length(min = 0, max = 255)
+    private String aggregateId;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.aggregator.preferences.property.hideDate']}",
+        visibility = {PreferenceVisibility.INSTANCE}
+    )
+    private Boolean hideDate;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.aggregator.preferences.property.hideAuthor']}",
+        visibility = {PreferenceVisibility.INSTANCE}
+    )
+    private Boolean hideAuthor;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.aggregator.preferences.property.hideFeedInfo']}",
+        visibility = {PreferenceVisibility.INSTANCE}
+    )
+    private Boolean hideFeedInfo;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.aggregator.preferences.property.hideDescription']}",
+        visibility = {PreferenceVisibility.INSTANCE}
+    )
+    private Boolean hideDescription;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.aggregator.preferences.property.hideTitle']}",
+        visibility = {PreferenceVisibility.INSTANCE}
+    )
+    private Boolean hideTitle;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public String getUrls() {
+        return urls;
+    }
+
+    public Long getNumberOfFeedEntries() {
+        return numberOfFeedEntries;
+    }
+
+    public Long getTruncateDescription() {
+        return truncateDescription;
+    }
+
+    public String getAggregateId() {
+        return aggregateId;
+    }
+
+    public Boolean getHideDate() {
+        return hideDate;
+    }
+
+    public Boolean getHideAuthor() {
+        return hideAuthor;
+    }
+
+    public Boolean getHideFeedInfo() {
+        return hideFeedInfo;
+    }
+
+    public Boolean getHideDescription() {
+        return hideDescription;
+    }
+
+    public Boolean getHideTitle() {
+        return hideTitle;
+    }
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasers.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/feedTeasers/FeedTeasers.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasers.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasers.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,38 @@
+package org.jboss.seam.wiki.plugin.feed;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.wiki.core.feeds.FeedDAO;
+import org.jboss.seam.wiki.core.model.FeedEntry;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.preferences.Preferences;
+import org.jboss.seam.ScopeType;
+
+import java.io.Serializable;
+import java.util.List;
+
+ at Name("feedTeasers")
+ at Scope(ScopeType.PAGE)
+public class FeedTeasers implements Serializable {
+
+    public static final String MACRO_ATTR_TEASERLIST = "feedTeaserList";
+
+    @In
+    FeedDAO feedDAO;
+
+    public List<FeedEntry> getTeasers(WikiPluginMacro macro) {
+        List<FeedEntry> teaserList = (List<FeedEntry>)macro.getAttributes().get(MACRO_ATTR_TEASERLIST);
+        if (teaserList == null) {
+            FeedTeasersPreferences prefs = Preferences.instance().get(FeedTeasersPreferences.class, macro);
+            teaserList =
+                    feedDAO.findLastFeedEntries(
+                        prefs.getFeed(),
+                        prefs.getNumberOfTeasers().intValue()
+                    );
+            macro.getAttributes().put(MACRO_ATTR_TEASERLIST, teaserList);
+        }
+        return teaserList;
+    }
+
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasers.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasersFeedPreferenceValueTemplate.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/feedTeasers/FeedTeasersFeedPreferenceValueTemplate.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasersFeedPreferenceValueTemplate.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasersFeedPreferenceValueTemplate.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.feed;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.wiki.core.feeds.FeedDAO;
+import org.jboss.seam.wiki.core.model.Feed;
+import org.jboss.seam.wiki.preferences.PreferenceValueTemplate;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("feedTeasersFeedPreferenceValueTemplate")
+ at Scope(ScopeType.CONVERSATION)
+public class FeedTeasersFeedPreferenceValueTemplate implements PreferenceValueTemplate, Serializable {
+
+    @In
+    FeedDAO feedDAO;
+
+    List<String> feedIdentifiers;
+
+    public List<String> getTemplateValues() {
+        if (feedIdentifiers == null) {
+            List<Feed> feeds = feedDAO.findAllFeeds();
+            for (Feed feed : feeds) {
+                feedIdentifiers.add(feed.getId().toString());
+            }
+        }
+        return feedIdentifiers;
+    }
+
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasersFeedPreferenceValueTemplate.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasersPreferences.java (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/feedTeasers/FeedTeasersPreferences.java)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasersPreferences.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasersPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,80 @@
+package org.jboss.seam.wiki.plugin.feed;
+
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Range;
+import org.hibernate.validator.Length;
+import org.jboss.seam.wiki.preferences.annotations.Preferences;
+import org.jboss.seam.wiki.preferences.annotations.PreferenceProperty;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+
+import java.io.Serializable;
+
+ at Preferences(
+    name = "FeedTeasers",
+    description = "#{messages['feed.teasers.preferences.description']}",
+    mappedTo = "feed.teasers"
+)
+public class FeedTeasersPreferences implements Serializable {
+
+    @PreferenceProperty(
+        description = "#{messages['feed.teasers.preferences.property.Title']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "AdaptiveTextInput"
+    )
+    @Length(min = 0, max = 255)
+    @NotNull
+    private String title;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.teasers.preferences.property.feed']}",
+        visibility = {PreferenceVisibility.INSTANCE},
+        editorIncludeName = "SelectOne",
+        templateComponentName = "feedTeasersFeedPreferenceValueTemplate"
+    )
+    private Long feed;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.teasers.preferences.property.numberOfTeasers']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange"
+    )
+    @Range(min = 3l, max = 25l)
+    @NotNull
+    private Long numberOfTeasers;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.teasers.preferences.property.truncateDescription']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
+        editorIncludeName = "NumberRange"
+    )
+    @Range(min = 10l, max = 5000l)
+    @NotNull
+    private Long truncateDescription;
+
+    @PreferenceProperty(
+        description = "#{messages['feed.teasers.preferences.property.showAuthor']}",
+        visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE}
+    )
+    @NotNull
+    private Boolean showAuthor;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public Long getFeed() {
+        return feed;
+    }
+
+    public Long getNumberOfTeasers() {
+        return numberOfTeasers;
+    }
+
+    public Long getTruncateDescription() {
+        return truncateDescription;
+    }
+
+    public Boolean getShowAuthor() {
+        return showAuthor;
+    }
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/FeedTeasersPreferences.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/i18n/messages_feed_en.properties (from rev 8123, trunk/examples/wiki/src/etc/i18n/messages_feedTeasers_en.properties)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/i18n/messages_feed_en.properties	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/i18n/messages_feed_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,32 @@
+feed.label=Atom Feeds
+feed.description=Display internal and aggregate external Atom feeds
+
+feed.teasers.label=Feed Teasers
+feed.teasers.description=Display internal feeds (from the local datastore)
+feed.teasers.preferences.description=Plugin: Feed Teasers
+feed.teasers.preferences.property.title=Title of teaser box
+feed.teasers.preferences.property.feed=Feed
+feed.teasers.preferences.property.numberOfTeasers=Number of feed entries
+feed.teasers.preferences.property.truncateDescription=Truncate teaser text after characters
+feed.teasers.preferences.property.showAuthor=Show author name
+feed.teasers.label.More=more...
+feed.teasers.label.By=by
+
+feed.aggregator.label=Feed Aggregator
+feed.aggregator.description=Display external feeds (from given URIs)
+feed.aggregator.preferences.description=Plugin: Feed Aggregator
+feed.aggregator.preferences.property.title=Title of aggregator box
+feed.aggregator.preferences.property.urls=URLs of feeds to aggregate, space separated
+feed.aggregator.preferences.property.numberOfFeedEntries=Number of feed entries
+feed.aggregator.preferences.property.truncateDescription=Truncate description text after characters
+feed.aggregator.preferences.property.hideDate=Hide date display
+feed.aggregator.preferences.property.hideAuthor=Hide author display
+feed.aggregator.preferences.property.hideFeedInfo=Hide link to feed
+feed.aggregator.preferences.property.hideDescription=Hide feed entry text
+feed.aggregator.preferences.property.hideTitle=Hide feed entry title
+feed.aggregator.preferences.property.aggregateId=Identifier for aggregate (enables subscription)
+feed.aggregator.label.More=more...
+feed.aggregator.label.By=by
+feed.aggregator.label.On=on
+feed.aggregator.label.Subscribe=Subscribe
+feed.aggregator.label.NoEntriesFound=No feed entries found.
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/i18n/messages_feed_en.properties
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedAggregator.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/feedAggregator/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedAggregator.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedAggregator.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,109 @@
+<wiki:plugin
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:f="http://java.sun.com/jsf/core"
+       xmlns:wiki="http://jboss.com/products/seam/wiki"
+       xmlns:stringutils="http://org.apache.commons.lang/StringUtils"
+       xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:div styleClass="feedAggregator box">
+
+        <s:div styleClass="boxHeader">
+
+            <h:panelGrid columns="2" cellpadding="0" cellspacing="0" border="0"
+                         styleClass="feedAggregatorTitle">
+
+                <h:outputLink value="#{wikiURLRenderer.renderAggregateFeedURL(preferences.get('FeedAggregator', currentMacro).aggregateId)}"
+                              rendered="#{not empty preferences.get('FeedAggregator', currentMacro).aggregateId}"
+                              style="margin-right:10px;">
+                    <h:graphicImage value="#{imagePath}/icon.atom.ongrey.gif" width="18" height="18" alt="Atom"
+                                    />
+                </h:outputLink>
+
+                <h:outputText value="#{preferences.get('FeedAggregator', currentMacro).title}"/>
+
+            </h:panelGrid>
+
+        </s:div>
+    
+
+        <div class="boxContent">
+            <h:dataTable value="#{feedAggregator.getFeedEntries(currentMacro)}" var="feDTO"
+                         rendered="#{not empty feedAggregator.getFeedEntries(currentMacro) and feedAggregator.getFeedEntries(currentMacro).size() > 0}"
+                         styleClass="datatable feedAggregatorTable"
+                         columnClasses="feedEntryColumn"
+                         rowClasses="rowOdd, rowEven"
+                         cellpadding="0" cellspacing="0" border="0">
+
+                <h:column>
+                    <s:div styleClass="feedEntryInfo smallFont">
+
+                        <s:span rendered="#{not preferences.get('FeedAggregator', currentMacro).hideDate}" styleClass="noWrapWhitespace">
+                            <h:outputText value="#{feDTO.feedEntry.publishedDate}" rendered="#{empty feDTO.feedEntry.updatedDate}">
+                                <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
+                            </h:outputText>
+                            <h:outputText value="#{feDTO.feedEntry.updatedDate}" rendered="#{not empty feDTO.feedEntry.updatedDate}">
+                                <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
+                            </h:outputText>
+                            <h:outputText value="&#160;#{preferences.get('Wiki').timeZone}"/>
+                        </s:span>
+
+                        <s:span styleClass="undecoratedLink noWrapWhitespace"
+                                rendered="#{not preferences.get('FeedAggregator', currentMacro).hideAuthor}">
+                            <h:outputText value=",&#160;#{messages['feed.aggregator.label.By']}&#160;"/>
+                            <h:outputText styleClass="feedEntryAuthor" value="#{wiki:escapeAtSymbol(feDTO.feedEntry.author)}"/>
+                        </s:span>
+
+                        <s:span styleClass="undecoratedLink noWrapWhitespace"
+                                rendered="#{not preferences.get('FeedAggregator', currentMacro).hideFeedInfo}">
+                            <h:outputText value="&#160;#{messages['feed.aggregator.label.On']}&#160;"/>
+                            <h:outputLink value="#{feDTO.feed.link}">
+                                <h:outputText value="#{feDTO.feed.title}"/>
+                            </h:outputLink>
+                        </s:span>
+
+                    </s:div>
+
+                    <s:div styleClass="feedEntryTitle undecoratedLink"
+                           rendered="#{not preferences.get('FeedAggregator', currentMacro).hideTitle}">
+                        <h:outputLink target="_top" value="#{feDTO.feedEntry.link}">
+                            <h:outputText value="#{wiki:escapeAtSymbol(wiki:removeHtml(stringutils:unescapeHtml(feDTO.feedEntry.title)))}"/>
+                        </h:outputLink>
+                    </s:div>
+
+                    <s:div styleClass="feedEntryBody" rendered="#{not preferences.get('FeedAggregator', currentMacro).hideDescription}">
+                        <h:outputText value="#{wiki:truncateStringOnWordBoundary(
+                                                wiki:escapeAtSymbol(
+                                                    wiki:removeHtml(
+                                                        stringutils:unescapeHtml(feDTO.feedEntry.descriptionValue)
+                                                    )
+                                                ),
+                                                preferences.get('FeedAggregator', currentMacro).truncateDescription)}"/>
+
+                        <h:outputLink target="_top" styleClass="feedEntryBodyMoreLink"
+                                      value="#{feDTO.feedEntry.link}"
+                                      rendered="#{wiki:length(wiki:removeHtml(stringutils:unescapeHtml(feDTO.feedEntry.descriptionValue)))
+                                                  > preferences.get('FeedAggregator', currentMacro).truncateDescription}">
+                            &#160;#{messages['feed.aggregator.label.More']}
+                        </h:outputLink>
+                    </s:div>
+
+                </h:column>
+
+            </h:dataTable>
+
+        </div>
+
+        <s:div styleClass="feedAggregatorEmpty"
+               rendered="#{empty feedAggregator.getFeedEntries(currentMacro) or
+                                 feedAggregator.getFeedEntries(currentMacro).size() == 0}">
+            <h:outputText value="#{messages['feed.aggregator.label.NoEntriesFound']}"/>
+        </s:div>
+
+        <div class="boxFooter"/>
+
+    </s:div>
+
+</wiki:plugin>
\ No newline at end of file

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedTeasers.xhtml (from rev 8108, trunk/examples/wiki/view/plugins/feedTeasers/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedTeasers.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedTeasers.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,73 @@
+<wiki:plugin
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:f="http://java.sun.com/jsf/core"
+       xmlns:wiki="http://jboss.com/products/seam/wiki"
+       xmlns:s="http://jboss.com/products/seam/taglib">
+
+<s:cache region="#{currentMacro.getCacheRegion('TeaserList')}"
+         key="#{currentMacro.cacheKey}">
+
+    <s:div styleClass="feedTeasers box">
+
+        <s:div styleClass="boxHeader">
+            <h:outputText value="#{preferences.get('FeedTeasers', currentMacro).title}"/>
+        </s:div>
+
+        <div class="boxContent">
+
+            <h:dataTable value="#{feedTeasers.getTeasers(currentMacro)}"
+                         var="fe"
+                         styleClass="datatable feedTeaserTable"
+                         columnClasses="teaserColumn"
+                         rowClasses="rowOdd, rowEven"
+                         cellpadding="0" cellspacing="0" border="0">
+                <h:column>
+                    <div class="teaserAuthorDate smallFont">
+                        <s:span styleClass="teaserDate">
+                            <h:outputText value="#{fe.updatedDate}">
+                                <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
+                            </h:outputText>
+                            <h:outputText value="&#160;#{preferences.get('Wiki').timeZone}"/>
+                        </s:span>
+                        <s:span styleClass="undecoratedLink"
+                                rendered="#{preferences.get('FeedTeasers', currentMacro).showAuthor}">
+                            <h:outputText value=",&#160;#{messages['feed.teasers.label.By']}&#160;"/>
+                            <h:outputText styleClass="teaserAuthor" value="#{fe.author}"/>
+                        </s:span>
+
+                    </div>
+
+                    <div class="teaserTitle undecoratedLink">
+                        <h:outputLink target="_top" value="#{fe.link}">
+                            <h:outputText value="#{wiki:removeHtml(fe.title)}"/>
+                        </h:outputLink>
+                    </div>
+
+                    <h:outputText styleClass="teaserBody"
+                                  value="#{wiki:truncateStringOnWordBoundary(
+                                            wiki:removeHtml(fe.descriptionValue),
+                                            preferences.get('FeedTeasers', currentMacro).truncateDescription
+                                          )}"/>
+
+                    <h:outputLink target="_top" styleClass="teaserBody"
+                                  value="#{fe.link}"
+                                  rendered="#{wiki:length(wiki:removeHtml(fe.descriptionValue))
+                                              > preferences.get('FeedTeasers', currentMacro).truncateDescription}">
+                        <h:outputText value="&#160;#{messages['feed.teasers.label.More']}"/>
+                    </h:outputLink>
+
+                </h:column>
+            </h:dataTable>
+
+        </div>
+
+        <div class="boxFooter"/>
+
+    </s:div>
+
+</s:cache>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedTeasers.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/default/css/feedAggregator.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/feedAggregator.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/default/css/feedAggregator.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/default/css/feedAggregator.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,22 @@
+.feedAggregatorTitle {
+    margin-left: auto;
+}
+
+.feedEntryColumn {
+    padding: 10px;
+}
+
+.feedEntryTitle {
+    font-weight: bold;
+    padding-top: 15px;
+    padding-bottom: 15px;
+}
+
+.feedEntryInfo {
+    text-align: right;
+}
+
+.feedEntryBody {
+    line-height: 150%;
+    text-align:justify;
+}
\ No newline at end of file

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/default/css/feedTeasers.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/feedTeasers.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/default/css/feedTeasers.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/default/css/feedTeasers.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,28 @@
+.teaserColumn {
+    padding: 10px;
+}
+
+.teaserTitle {
+    margin-bottom: 5px;
+    font-weight: bold;
+}
+
+.teaserAuthorDate {
+    text-align: right;
+}
+
+.teaserAuthor {
+}
+
+.teaserAuthorLink {
+    color: #962325;
+    text-decoration: none;
+}
+
+.teaserDate {
+}
+
+.teaserBody {
+    line-height: 150%;
+    text-align:justify;
+}
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/default/css/feedTeasers.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/inrelationto/css/feedAggregator.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/feedAggregator.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/inrelationto/css/feedAggregator.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/inrelationto/css/feedAggregator.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,22 @@
+.feedAggregatorTitle {
+    margin-left: auto;
+}
+
+.feedEntryColumn {
+    padding: 10px;
+}
+
+.feedEntryTitle {
+    font-weight: bold;
+    padding-top: 15px;
+    padding-bottom: 15px;
+}
+
+.feedEntryInfo {
+    text-align: right;
+}
+
+.feedEntryBody {
+    line-height: 150%;
+    text-align:justify;
+}
\ No newline at end of file

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/inrelationto/css/feedTeasers.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/feedTeasers.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/inrelationto/css/feedTeasers.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/inrelationto/css/feedTeasers.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,28 @@
+.teaserColumn {
+    padding: 10px;
+}
+
+.teaserTitle {
+    margin-bottom: 5px;
+    font-weight: bold;
+}
+
+.teaserAuthorDate {
+    text-align: right;
+}
+
+.teaserAuthor {
+}
+
+.teaserAuthorLink {
+    color: #d75525;
+    text-decoration: none;
+}
+
+.teaserDate {
+}
+
+.teaserBody {
+    line-height: 150%;
+    text-align:justify;
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/sfwkorg/css/feedAggregator.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/feedAggregator.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/sfwkorg/css/feedAggregator.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/sfwkorg/css/feedAggregator.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,20 @@
+.feedAggregatorTitle {
+    margin-left:auto;
+}
+
+.feedEntryColumn {
+    padding: 10px;
+}
+
+.feedEntryTitle {
+    margin-bottom: 5px;
+    font-weight: bold;
+}
+
+.feedEntryInfo {
+    text-align: right;
+}
+
+.feedEntryBody {
+    line-height: 130%;
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/sfwkorg/css/feedTeasers.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/feedTeasers.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/sfwkorg/css/feedTeasers.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/sfwkorg/css/feedTeasers.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,22 @@
+.teaserColumn {
+    padding: 10px;
+}
+
+.teaserTitle {
+    margin-bottom: 5px;
+    font-weight: bold;
+}
+
+.teaserAuthorDate {
+    text-align: right;
+}
+
+.teaserAuthor {
+}
+
+.teaserDate {
+}
+
+.teaserBody {
+    line-height: 130%;
+}
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/themes/sfwkorg/css/feedTeasers.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/forum)

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/Forum.plugin.xml
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/Forum.plugin.xml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/Forum.plugin.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin key="forum"
+        xmlns="http://jboss.com/products/seam/wiki/plugin"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://jboss.com/products/seam/wiki/plugin
+                            classpath://org/jboss/seam/wiki/core/plugin/plugin-1.0.xsd">
+
+    <plugin-info version="1.0">
+        <application-version min="1.0" max="1.0"/>
+        <vendor name="Red Hat Inc." url="http://www.seamframework.org/"/>
+    </plugin-info>
+
+    <macro key="list" name="forumList">
+        <applicable-to content="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <render-options>
+            <singleton/>
+        </render-options>
+        <cache-regions>
+            <cache-region name="ForumList">
+                <invalidation-event name="Node.persisted"/>
+                <invalidation-event name="Node.updated"/>
+                <invalidation-event name="Node.removed"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+    <macro key="topics" name="forumTopics">
+        <applicable-to content="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <render-options>
+            <singleton/>
+        </render-options>
+        <cache-regions>
+            <cache-region name="TopicList">
+                <invalidation-event name="Node.persisted"/>
+                <invalidation-event name="Node.updated"/>
+                <invalidation-event name="Node.removed"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+    <macro key="posting" name="forumPosting">
+        <applicable-to header="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <render-options>
+            <singleton/>
+        </render-options>
+    </macro>
+
+    <macro key="stickyPosting" name="forumStickyPosting">
+        <applicable-to header="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <render-options>
+            <singleton/>
+        </render-options>
+    </macro>
+
+    <macro key="replies" name="forumReplies">
+        <applicable-to footer="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <render-options>
+            <singleton/>
+        </render-options>
+    </macro>
+
+    <macro key="topPosters" name="forumTopPosters">
+        <applicable-to content="true"/>
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <cache-regions>
+            <cache-region name="TopPostersList">
+                <invalidation-event name="Node.removed"/>
+                <invalidation-event name="User.removed"/>
+                <invalidation-event name="User.updated"/>
+                <invalidation-event name="Comment.rated"/>
+            </cache-region>
+        </cache-regions>
+    </macro>
+
+</plugin>
+

Modified: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumPreferences.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/forum/ForumPreferences.java	2008-05-07 12:21:20 UTC (rev 8123)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -10,11 +10,14 @@
 
 import java.io.Serializable;
 
- at Preferences(name = "Forum", description = "#{messages['forum.preferences.Name']}")
+ at Preferences(
+    name = "Forum",
+    description = "#{messages['forum.preferences.description']}"
+)
 public class ForumPreferences implements Serializable {
 
     @PreferenceProperty(
-        description = "#{messages['forum.preferences.TopicsPerPage']}",
+        description = "#{messages['forum.preferences.property.topicsPerPage']}",
         visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.USER},
         editorIncludeName = "NumberRange"
     )
@@ -23,7 +26,7 @@
     private Long topicsPerPage;
 
     @PreferenceProperty(
-        description = "#{messages['forum.preferences.NotificationMailingList']}",
+        description = "#{messages['forum.preferences.property.notificationMailingList']}",
         visibility = {PreferenceVisibility.SYSTEM},
         editorIncludeName = "AdaptiveTextInput"
     )
@@ -32,7 +35,7 @@
     private String notificationMailingList;
 
     @PreferenceProperty(
-        description = "#{messages['forum.preferences.NotifyMeOfReplies']}",
+        description = "#{messages['forum.preferences.property.notifyMeOfReplies']}",
         visibility = PreferenceVisibility.USER
     )
     private Boolean notifyMeOfReplies;

Modified: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumQuery.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/forum/ForumQuery.java	2008-05-07 12:21:20 UTC (rev 8123)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumQuery.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -12,6 +12,8 @@
 import org.jboss.seam.wiki.core.engine.WikiLinkResolver;
 import org.jboss.seam.wiki.core.model.User;
 import org.jboss.seam.wiki.core.model.WikiDirectory;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.preferences.Preferences;
 
 import java.io.Serializable;
 import java.util.*;
@@ -30,9 +32,6 @@
     @In("#{preferences.get('Forum')}")
     ForumPreferences forumPrefs;
 
-    @In("#{preferences.get('ForumTopPosters', currentMacro)}")
-    ForumTopPostersPreferences forumTopPostersPrefs;
-
     @RequestParameter
     public void setPage(Integer page) {
         if (pager == null) pager = new Pager(forumPrefs.getTopicsPerPage());
@@ -135,41 +134,41 @@
 
     /* ####################### POSTERS ########################## */
 
-    private Map<Long, List<User>> forumsTopPosters = new HashMap<Long, List<User>>();
+    public static final String MACRO_ATTR_TOPPOSTERS            = "forumTopPostersList";
 
-    public List<User> getTopPosters() {
-        Long forumId = resolveForumId(forumTopPostersPrefs.getForumLink());
-        return forumId != null ? forumsTopPosters.get(forumId) : null;
-    }
+    public List<User> getTopPosters(WikiPluginMacro macro) {
 
-    @Observer(value = "Macro.render.forumTopPosters", create = true)
-    public void loadForumTopPosters() {
-        log.debug("loading top posters of forum: " + forumTopPostersPrefs.getForumLink());
+        ForumTopPostersPreferences forumTopPostersPrefs =
+                Preferences.instance().get(ForumTopPostersPreferences.class, macro);
 
-        Long forumId = resolveForumId(forumTopPostersPrefs.getForumLink());
-        if (forumId == null) {
-            log.debug("could not resolve forum id for forum start page link: " + forumTopPostersPrefs.getForumLink());
-            return;
-        }
+        // Cache the list in the macro, this getter is called a thousand times during datatable rendering
+        List<User> forumTopPosters =
+                (List<User>)macro.getAttributes().get(MACRO_ATTR_TOPPOSTERS + forumTopPostersPrefs.getForumLink());
+        if (forumTopPosters == null) {
 
-        log.debug("resolved forum id: " + forumId);
+            Long forumId = resolveForumId(forumTopPostersPrefs.getForumLink());
+            if (forumId == null) {
+                log.debug("could not resolve forum id for forum start page link: " + forumTopPostersPrefs.getForumLink());
+                return null;
+            }
 
-        List<String> excludeRoles = new ArrayList<String>();
-        if (forumTopPostersPrefs.getExcludeRoles() != null &&
-            forumTopPostersPrefs.getExcludeRoles().length() > 0) {
-            log.debug("excluding posters with roles: " + forumTopPostersPrefs.getExcludeRoles());
-            excludeRoles = Arrays.asList(forumTopPostersPrefs.getExcludeRoles().split(" "));
-        }
+            List<String> excludeRoles = new ArrayList<String>();
+            if (forumTopPostersPrefs.getExcludeRoles() != null &&
+                forumTopPostersPrefs.getExcludeRoles().length() > 0) {
+                log.debug("excluding posters with roles: " + forumTopPostersPrefs.getExcludeRoles());
+                excludeRoles = Arrays.asList(forumTopPostersPrefs.getExcludeRoles().split(" "));
+            }
 
-        log.debug("loading top " + forumTopPostersPrefs.getNumberOfPosters() + " posters of forum id: " + forumId);
-        List<User> topPosters =
-            forumDAO.findPostersAndRatingPoints(
-                forumId,
-                forumTopPostersPrefs.getNumberOfPosters().intValue(),
-                excludeRoles
-            );
-        log.debug("found top posters: " + topPosters.size());
-        forumsTopPosters.put(forumId, topPosters);
+            log.debug("loading top " + forumTopPostersPrefs.getNumberOfPosters() + " posters of forum id: " + forumId);
+            forumTopPosters =
+                forumDAO.findPostersAndRatingPoints(
+                    forumId,
+                    forumTopPostersPrefs.getNumberOfPosters().intValue(),
+                    excludeRoles
+                );
+            macro.getAttributes().put(MACRO_ATTR_TOPPOSTERS+forumTopPostersPrefs.getForumLink(), forumTopPosters);
+        }
+        return forumTopPosters;
     }
 
     private Long resolveForumId(String forumLink) {

Modified: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumTopPostersPreferences.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/forum/ForumTopPostersPreferences.java	2008-05-07 12:21:20 UTC (rev 8123)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumTopPostersPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -16,11 +16,15 @@
 /**
  * @author Christian Bauer
  */
- at Preferences(name = "ForumTopPosters", description = "#{messages['forumTopPosters.preferences.Name']}")
+ at Preferences(
+    name = "ForumTopPosters",
+    description = "#{messages['forum.topPosters.preferences.description']}",
+    mappedTo = "forum.topPosters"
+)
 public class ForumTopPostersPreferences {
 
     @PreferenceProperty(
-        description = "#{messages['forumTopPosters.preferences.Title']}",
+        description = "#{messages['forum.topPosters.preferences.property.title']}",
         visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
         editorIncludeName = "AdaptiveTextInput"
     )
@@ -29,7 +33,7 @@
     private String title;
 
     @PreferenceProperty(
-        description = "#{messages['forumTopPosters.preferences.NumberOfPosters']}",
+        description = "#{messages['forum.topPosters.preferences.property.numberOfPosters']}",
         visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
         editorIncludeName = "NumberRange"
     )
@@ -38,7 +42,7 @@
     private Long numberOfPosters;
 
     @PreferenceProperty(
-        description = "#{messages['forumTopPosters.preferences.ForumLink']}",
+        description = "#{messages['forum.topPosters.preferences.property.forumLink']}",
         visibility = PreferenceVisibility.INSTANCE,
         editorIncludeName = "AdaptiveTextInput"
     )
@@ -46,7 +50,7 @@
     private String forumLink;
 
     @PreferenceProperty(
-        description = "#{messages['forumTopPosters.preferences.ExcludeRoles']}",
+        description = "#{messages['forum.topPosters.preferences.property.excludeRoles']}",
         visibility = PreferenceVisibility.INSTANCE,
         editorIncludeName = "AdaptiveTextInput"
     )

Modified: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ReplyHome.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/forum/ReplyHome.java	2008-05-07 12:21:20 UTC (rev 8123)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ReplyHome.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -9,6 +9,8 @@
 import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
 import org.jboss.seam.wiki.core.model.WikiComment;
 import org.jboss.seam.wiki.core.model.WikiNode;
+import org.jboss.seam.wiki.core.model.WikiDocument;
+import org.jboss.seam.wiki.core.ui.WikiRedirect;
 import org.jboss.seam.wiki.preferences.Preferences;
 
 import static javax.faces.application.FacesMessage.SEVERITY_INFO;
@@ -32,11 +34,11 @@
 
         // Notify forum mailing list
         String notificationMailingList =
-                Preferences.getInstance(ForumPreferences.class).getNotificationMailingList();
+                Preferences.instance().get(ForumPreferences.class).getNotificationMailingList();
         if (notificationMailingList != null) {
             getLog().debug("sending reply notification e-mail to forum list");
             renderer.render("/themes/"
-                    + Preferences.getInstance(WikiPreferences.class).getThemeName()
+                    + Preferences.instance().get(WikiPreferences.class).getThemeName()
                     + "/mailtemplates/forumNotifyReplyToList.xhtml");
         }
 
@@ -47,13 +49,13 @@
                 )) {
             getLog().debug("sending reply notification e-mail to original poster");
             renderer.render("/themes/"
-                    + Preferences.getInstance(WikiPreferences.class).getThemeName()
+                    + Preferences.instance().get(WikiPreferences.class).getThemeName()
                     + "/mailtemplates/forumNotifyReply.xhtml");
         }
     }
 
     @Begin(flushMode = FlushModeType.MANUAL, join = true)
-    public String replyToDocument() {
+    public void replyToDocument() {
 
         getLog().debug("reply to document id: " + getParentNodeId());
         newComment();
@@ -61,20 +63,31 @@
 
         getInstance().setSubject(REPLY_PREFIX + getParentNode().getName());
 
-        return "redirectToDocument";
+        WikiRedirect.instance()
+                .setWikiDocument(documentHome.getInstance())
+                .setPropagateConversation(true)
+                .execute();
     }
 
     @Begin(flushMode = FlushModeType.MANUAL, join = true)
-    public String quoteDocument() {
-        replyToDocument();
+    public void quoteDocument() {
 
+        getLog().debug("quote to document id: " + getParentNodeId());
+        newComment();
+        initEditor(false);
+
+        getInstance().setSubject(REPLY_PREFIX + getParentNode().getName());
+
         getInstance().setContent(quote(
             documentHome.getInstance().getContent(),
             documentHome.getInstance().getCreatedOn(),
             documentHome.getInstance().getCreatedBy().getFullname()
         ));
 
-        return "redirectToDocument";
+        WikiRedirect.instance()
+                .setWikiDocument(documentHome.getInstance())
+                .setPropagateConversation(true)
+                .execute();
     }
 
     @Override

Modified: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/TopicHome.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/forum/TopicHome.java	2008-05-07 12:21:20 UTC (rev 8123)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/TopicHome.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -9,9 +9,10 @@
 import org.jboss.seam.ui.validator.FormattedTextValidator;
 import org.jboss.seam.wiki.core.action.DocumentHome;
 import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
 import org.jboss.seam.wiki.core.model.WikiDirectory;
 import org.jboss.seam.wiki.core.model.WikiDocument;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
+import org.jboss.seam.wiki.core.ui.WikiRedirect;
 import org.jboss.seam.wiki.preferences.Preferences;
 
 import javax.faces.application.FacesMessage;
@@ -27,6 +28,9 @@
     @In
     WikiDirectory currentDirectory;
 
+    @In
+    WikiDocument currentDocument;
+
     @In(create = true)
     private Renderer renderer;
 
@@ -51,7 +55,7 @@
         super.create();
         setParentNodeId(currentDirectory.getId());
 
-        Boolean preferencesNotifyReplies = Preferences.getInstance(ForumPreferences.class).getNotifyMeOfReplies();
+        Boolean preferencesNotifyReplies = Preferences.instance().get(ForumPreferences.class).getNotifyMeOfReplies();
         notifyReplies = preferencesNotifyReplies != null && preferencesNotifyReplies;
     }
 
@@ -85,10 +89,10 @@
         // TODO: Use macro parameters for "sticky" and "notify" options instead of additional macros
         if (isSticky()) {
             getInstance().removeHeaderMacros("forumPosting");
-            getInstance().addHeaderMacro(new WikiMacro("forumStickyPosting"));
+            getInstance().addHeaderMacro(new WikiTextMacro("forumStickyPosting"));
         }
         if (isNotifyReplies()) {
-            getInstance().addHeaderMacro(new WikiMacro(TOPIC_NOTIFY_ME_MACRO));
+            getInstance().addHeaderMacro(new WikiTextMacro(TOPIC_NOTIFY_ME_MACRO));
         }
         return super.beforePersist();
     }
@@ -103,15 +107,17 @@
 
             // Notify forum mailing list
             String notificationMailingList =
-                    Preferences.getInstance(ForumPreferences.class).getNotificationMailingList();
+                    Preferences.instance().get(ForumPreferences.class).getNotificationMailingList();
             if (notificationMailingList != null) {
                 getLog().debug("sending topic notification e-mail to forum list");
                 renderer.render("/themes/"
-                        + Preferences.getInstance(WikiPreferences.class).getThemeName()
+                        + Preferences.instance().get(WikiPreferences.class).getThemeName()
                         + "/mailtemplates/forumNotifyTopicToList.xhtml");
             }
 
             endConversation();
+
+            // TODO: We should redirect here to the posted topic with WikiRedirect, see cancel()
         }
         return null; // Prevent navigation
     }
@@ -211,6 +217,9 @@
 
     public void cancel() {
         endConversation();
+
+        // Redirect to topic list
+        WikiRedirect.instance().setWikiDocument(currentDocument).execute();
     }
 
     @RequestParameter("showTopicForm")

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/i18n/messages_forumTopPosters_en.properties (from rev 8123, trunk/examples/wiki/src/etc/i18n/messages_forumTopPosters_en.properties)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/i18n/messages_forumTopPosters_en.properties	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/i18n/messages_forumTopPosters_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,14 @@
+forum.topPosters.label=Forum Top Posters
+forum.topPosters.description=Shows a list of best rated forum posters
+
+forum.topPosters.preferences.description=Plugin: Forum Top Posters
+forum.topPosters.preferences.property.title=Title of box
+forum.topPosters.preferences.property.numberOfPosters=Number of posters in list
+forum.topPosters.preferences.property.forumLink=Wiki link to forum start page (topic list)
+forum.topPosters.preferences.property.excludeRoles=Exclude users with role name (space separated)
+
+forum.topPosters.label.Position=Position
+forum.topPosters.label.User=User
+forum.topPosters.label.JoinedOn=Joined On
+forum.topPosters.label.RatingPoints=Rating Points
+forum.topPosters.label.NoPostersFound=No posters with rating points found.

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/i18n/messages_forum_en.properties (from rev 8123, trunk/examples/wiki/src/etc/i18n/messages_forum_en.properties)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/i18n/messages_forum_en.properties	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/i18n/messages_forum_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,121 @@
+forum.label=Forum
+forum.description=Discussion Forums/Bulletin Boards
+
+forum.preferences.description=Plugin: Forum
+forum.preferences.property.topicsPerPage=Number of topics per page
+forum.preferences.property.notificationMailingList=Send all topics/replies to this e-mail address (empty to disable)
+forum.preferences.property.notifyMeOfReplies=Enable e-mail reply notification switch by default
+
+forum.list.label=Forum List
+forum.list.description=List of all forum subdirectories
+
+forum.topics.label=Forum Topics
+forum.topics.description=List of all topics in a forum directory
+
+forum.posting.label=Forum Posting
+forum.posting.description=Turns a WikiDocument into a regular forum posting
+
+forum.stickyPosting.label=Forum Sticky Posting
+forum.stickyPosting.description=Turns a WikiDocument into a sticky forum posting
+
+forum.replies.label=Forum Replies
+forum.replies.description=Shows wiki comments as posting replies thread
+
+forum.label.Showing=Showing
+forum.label.To=to
+forum.label.Of=of
+forum.label.Topics=topics
+forum.label.Joined=Joined On
+
+forum.label.Forum=Forum
+forum.label.TopicCount=Topics
+forum.label.PostCount=Posts
+forum.label.NewestTopic=Newest Topic
+forum.label.LatestPost=Last Post
+forum.label.Feed=Feed
+forum.label.EnableFeed=Enable syndication feed (disabling invalidates subcriber link)
+
+forum.label.EditForum=Edit Forum
+forum.label.NewForum=New Forum
+
+forum.label.NewTopic=New Topic
+forum.label.Subject=Subject
+forum.label.Message=Message
+forum.label.Options=Options
+forum.label.OpenTopicAllowReplies=Open topic, allow replies
+forum.label.StickyPosting=Sticky posting
+forum.label.NotifyMeOfReplies=Notify me via e-mail of any replies
+
+forum.label.Reply=Reply
+forum.label.NewReply=New Reply
+forum.label.Replies=Replies
+
+forum.label.ForumName=Forum Name
+forum.label.ForumDescription=Description
+
+forum.msg.NoForumsFound=No forums found.
+
+forum.button.NewForum=<u>N</u>ew Forum
+forum.button.NewForum.accesskey=N
+forum.button.ManageForums=Mana<u>g</u>e Forums
+forum.button.ManageForums.accesskey=G
+
+forum.button.Edit=Edit
+forum.button.ResetFeed=Clear Feed
+forum.button.MoveUp=Move Up
+forum.button.MoveDown=Move Down
+forum.button.SaveNoKey=Save
+forum.button.Save=<u>S</u>ave
+forum.button.Save.accesskey=S
+forum.button.Update=<u>U</u>pdate
+forum.button.Update.accesskey=U
+forum.button.Remove=<u>D</u>elete
+forum.button.Remove.accesskey=Delete
+forum.button.CancelNoKey=Cancel
+forum.button.Cancel=<u>C</u>ancel
+forum.button.Cancel.accesskey=C
+forum.button.Exit=<u>E</u>xit
+forum.button.Exit.accesskey=E
+forum.button.NewTopic=<u>N</u>ew Topic
+forum.button.NewTopic.accesskey=N
+forum.button.ForumList=F<u>o</u>rum List
+forum.button.ForumList.accesskey=O
+forum.button.TopicList=<u>T</u>opic List
+forum.button.TopicList.accesskey=T
+forum.button.Reply=R<u>e</u>ply
+forum.button.Reply.accesskey=E
+forum.button.Reply.nokey=Reply
+forum.button.Quote=<u>Q</u>uote
+forum.button.Quote.accesskey=Q
+forum.button.Quote.nokey=Quote
+forum.button.RemoveReply=Remove
+forum.button.PreviousPosting=Pre<u>v</u>ious
+forum.button.PreviousPosting.accesskey=V
+forum.button.NextPosting=Ne<u>x</u>t
+forum.button.NextPosting.accesskey=X
+
+forum.label.replyForm.Name=Name
+forum.label.replyForm.Email=E-mail address (optional)
+forum.label.replyForm.Homepage=Homepage URL (optional)
+forum.label.replyForm.Subject=Subject
+forum.label.replyForm.Message=Message
+
+forum.label.WroteOn=wrote on
+forum.label.reply.FeedEntryTitlePrefix=Re:
+
+forum.msg.Feed.Create=Created syndication feed for this forum.
+forum.msg.Feed.Remove=Removed syndication feed of this forum.
+forum.msg.Feed.Reset=Queued removal of all feed entries from the syndication feed of this directory, please update to finalize.
+
+forum.msg.Forum.Persist=Forum '{0}' has been saved.
+forum.msg.Forum.Update=Forum '{0}' has been updated.
+forum.msg.Forum.Delete=Forum '{0}' has been deleted.
+
+forum.msg.Topic.Persist=Topic '{0}' has been saved.
+forum.msg.Topic.Update=Topic '{0}' has been updated.
+forum.msg.Topic.Delete=Topic '{0}' has been deleted.
+
+forum.msg.Reply.Persist=Reply '{0}' has been saved.
+forum.msg.Reply.Update=Reply '{0}' has been updated.
+forum.msg.Reply.Delete=Reply '{0}' has been deleted.
+


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/i18n/messages_forum_en.properties
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumForm.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/forumList/forumForm.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumForm.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumForm.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,123 @@
+<s:div id="forumFormContainer"
+       styleClass="forumFormContainer"
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:s="http://jboss.com/products/seam/taglib"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:f="http://java.sun.com/jsf/core"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:wiki="http://jboss.com/products/seam/wiki">
+
+<s:fragment rendered="#{forumHome.showForm}">
+
+<div class="box">
+
+<h:form id="forumForm">
+
+    <div class="form">
+
+        <div class="formHead">
+            <h:outputText value="#{forumHome.managed ? messages['forum.label.EditForum'] : messages['forum.label.NewForum']}"/>
+        </div>
+
+        <s:div styleClass="formFields formBorder">
+
+            <s:decorate id="nameDecorate" template="/includes/formFieldDecorate.xhtml">
+                <ui:define name="label">#{messages['forum.label.ForumName']}</ui:define>
+                <h:inputText styleClass="ajaxSupport" size="40" maxlength="255" required="true" tabindex="1" value="#{forumHome.instance.name}">
+                    <a:support event="onchange" status="globalStatus" reRender="nameDecorate"/>
+                </h:inputText>
+            </s:decorate>
+
+            <s:decorate id="descriptionDecorate" template="/includes/formFieldDecorate.xhtml">
+                <ui:define name="label">#{messages['forum.label.ForumDescription']}</ui:define>
+                <h:inputText styleClass="ajaxSupport" size="70" maxlength="512" required="false" tabindex="1" value="#{forumHome.instance.description}">
+                    <a:support event="onchange" status="globalStatus" reRender="descriptionDecorate"/>
+                </h:inputText>
+            </s:decorate>
+
+            <ui:include src="/includes/accessLevelSelector.xhtml">
+                <ui:param name="home" value="#{forumHome}"/>
+            </ui:include>
+
+            <s:div styleClass="entry">
+                <div class="label">&#160;</div>
+                <div class="input">
+                    <h:selectBooleanCheckbox value="#{forumHome.hasFeed}" tabindex="1"/>
+                    <h:outputText value="#{messages['forum.label.EnableFeed']}"/>
+                    <a:commandLink id="resetFeed" reRender="messageBoxContainer"
+                                   action="#{forumHome.resetFeed}"
+                                   status="globalStatus"
+                                   rendered="#{!empty forumHome.instance.feed}"
+                                   styleClass="buttonNonpersistent sessionEventTrigger">
+                        <h:outputText  styleClass="buttonLabel" value="#{messages['forum.button.ResetFeed']}"/>
+                    </a:commandLink>
+                </div>
+            </s:div>
+
+        </s:div>
+
+        <div class="formControls">
+            <div class="entry">
+                <div class="label">&#160;</div>
+                <div class="input">
+
+                    <a:commandLink action="#{forumHome.update}" rendered="#{forumHome.managed}"
+                                   reRender="forumListPluginContainer, messageBoxContainer"
+                                   status="globalStatus"
+                                   tabindex="1" accesskey="#{messages['forum.button.Update.accesskey']}"
+                                   styleClass="button saveButton sessionEventTrigger">
+                        <h:outputText escape="false" styleClass="buttonLabel" value="#{messages['forum.button.Update']}"/>
+                    </a:commandLink>
+
+
+                    <s:fragment rendered="#{forumHome.removable}">
+                        <ui:decorate template="/includes/confirmationAction.xhtml">
+                            <ui:param name="label" value="#{messages['forum.button.Remove']}"/>
+                            <ui:param name="accesskey" value="#{messages['forum.button.Remove.accesskey']}"/>
+                            <ui:param name="tabindex" value="1"/>
+                            <ui:param name="linkClass" value="button sessionEventTrigger saveButton"/>
+                            <ui:param name="escapeLabel" value="false"/>
+                            <ui:param name="jsFunctionName" value="deleteForum"/>
+                            <ui:param name="message" value="#{messages['lacewiki.label.AreYouSureYouWantToDelete']
+                                                                .concat(': \'').concat(forumHome.instance.name).concat('\'?')}"/>
+                            <ui:define name="jsFunction">
+                                <a:jsFunction name="#{jsFunctionName}"
+                                              reRender="forumListPluginContainer, messageBoxContainer"
+                                              action="#{forumHome.remove}"
+                                              status="globalStatus"/>
+                            </ui:define>
+                        </ui:decorate>
+                    </s:fragment>
+
+                    <a:commandLink action="#{forumHome.persist}" rendered="#{!forumHome.managed}"
+                                   reRender="forumListPluginContainer, messageBoxContainer"
+                                   status="globalStatus"
+                                   tabindex="1" accesskey="#{messages['forum.button.Save.accesskey']}"
+                                   styleClass="button saveButton sessionEventTrigger">
+                        <h:outputText escape="false" styleClass="buttonLabel" value="#{messages['forum.button.Save']}"/>
+                    </a:commandLink>
+
+                    <a:region>
+                        <a:commandLink action="#{forumHome.cancel}"
+                                       immediate="true"
+                                       status="globalStatus"
+                                       reRender="forumListPluginContainer, messageBoxContainer"
+                                       tabindex="1" styleClass="buttonNonpersistent sessionEventTrigger"
+                                       accesskey="#{messages['forum.button.Cancel.accesskey']}">
+                            <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.Cancel']}"/>
+                        </a:commandLink>
+                    </a:region>
+
+                </div>
+            </div>
+        </div>
+
+    </div>
+
+</h:form>
+
+</div>
+</s:fragment>
+
+</s:div>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumForm.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumList.xhtml (from rev 7883, trunk/examples/wiki/view/plugins/forumList/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumList.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumList.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,21 @@
+<wiki:plugin id="forumListPlugin"
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:span id="forumListPluginContainer">
+
+        <ui:include src="forumListControls.xhtml"/>
+
+        <ui:include src="forumForm.xhtml"/>
+
+        <ui:include src="forumListTable.xhtml"/>
+
+    </s:span>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumList.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumListControls.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/forumList/forumListControls.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumListControls.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumListControls.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,68 @@
+<s:div id="forumListControlsContainer"
+       styleClass="forumListControlsContainer"
+       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:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:s="http://jboss.com/products/seam/taglib">
+    
+<s:fragment rendered="#{not forumListHome.managed}">
+
+    <s:div styleClass="forumsFeedLink undecoratedLink" rendered="#{not empty currentDirectory.feed}">
+        <h:outputLink value="#{wikiURLRenderer.renderFeedURL(currentDirectory.feed, null, null)}"
+                      tabindex="1">
+            <h:graphicImage value="#{imagePath}/icon.atom.gif" width="18" height="18"/>
+            <h:outputText value="#{currentDocument.name}&#160;#{messages['forum.label.Feed']}"/>
+        </h:outputLink>
+    </s:div>
+
+</s:fragment>
+
+<h:form rendered="#{s:hasPermission('User', 'isAdmin', currentUser)}">
+<s:fragment rendered="#{not forumListHome.managed}">
+
+    <script type="text/javascript">stopSessionTimeoutCheck();</script>
+
+    <h:panelGroup>
+
+        <a:commandLink action="#{forumListHome.manage()}"
+                       reRender="forumListPluginContainer, messageBoxContainer"
+                       accesskey="#{messages['forum.button.ManageForums.accesskey']}"
+                       tabindex="1" styleClass="buttonNonpersistent">
+            <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.ManageForums']}"/>
+        </a:commandLink>
+
+    </h:panelGroup>
+
+</s:fragment>
+
+<s:fragment rendered="#{forumListHome.managed}">
+    <script type="text/javascript">startSessionTimeoutCheck();</script>
+</s:fragment>
+
+<s:fragment rendered="#{forumListHome.managed and not forumHome.showForm}">
+
+    <h:panelGroup>
+
+        <a:commandLink action="#{forumHome.newForum()}"
+                       reRender="forumListPluginContainer, messageBoxContainer"
+                       accesskey="#{messages['forum.button.NewForum.accesskey']}"
+                       tabindex="1" styleClass="buttonNonpersistent sessionEventTrigger">
+            <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.NewForum']}"/>
+        </a:commandLink>
+
+        <h:outputLink value="#{wikiURLRenderer.renderURL(currentDirectory)}"
+                      accesskey="#{messages['forum.button.Exit.accesskey']}"
+                      tabindex="1" styleClass="buttonNonpersistent sessionEventTrigger">
+           <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.Exit']}"/>
+        </h:outputLink>
+
+    </h:panelGroup>
+
+</s:fragment>
+
+</h:form>
+
+</s:div>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumListControls.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumListTable.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/forumList/forumListTable.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumListTable.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumListTable.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,149 @@
+<s:div id="forumListTableContainer"
+       styleClass="forumListTableContainer"
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:s="http://jboss.com/products/seam/taglib"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:f="http://java.sun.com/jsf/core"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:wiki="http://jboss.com/products/seam/wiki">
+
+<s:cache enabled="#{not forumListHome.managed and not identity.loggedIn}"
+         region="#{currentMacro.getCacheRegion('ForumList')}"
+         key="#{currentMacro.cacheKey}">
+
+<div class="box">
+<h:form id="forumListTableForm" rendered="#{not empty forumQuery.forums}">
+
+<h:dataTable id="forumListTable"
+             var="f"
+             value="#{forumQuery.forums}"
+             styleClass="datatable topBorder leftBorder"
+             headerClass="regularHeader rightBorder alignCenter smallFont"
+             columnClasses="onePercentColumn rightBorder bottomBorder alignCenter smallFont,
+                            defaultColumn rightBorder bottomBorder alignLeft wrapWhitespace,
+                            fivePercentColumn rightBorder bottomBorder alignCenter smallFont,
+                            fivePercentColumn rightBorder bottomBorder alignCenter smallFont,
+                            tenPercentColumn rightBorder bottomBorder alignCenter smallFont,
+                            tenPercentColumn rightBorder bottomBorder alignCenter smallFont"
+             rowClasses="forumListRow"
+             cellpadding="0" cellspacing="0" border="0">
+
+    <h:column>
+        <f:facet name="header">&#160;</f:facet>
+        <h:panelGroup>
+
+            <h:outputLink styleClass="undecoratedLink" value="#{wikiURLRenderer.renderURL(f.forum)}" tabindex="1">
+                <h:graphicImage value="#{currentMacro.requestImagePath}/icon.posting_unread.gif" width="22" height="26"
+                                rendered="#{f.unreadPostings}"/>
+
+                <h:graphicImage value="#{currentMacro.requestImagePath}/icon.posting.gif" width="22" height="26"
+                                rendered="#{not f.unreadPostings}"/>
+            </h:outputLink>
+
+            <s:span styleClass="forumFeedLink undecoratedLink" rendered="#{not empty f.forum.feed}">
+                <h:outputLink value="#{wikiURLRenderer.renderFeedURL(f.forum.feed, null, null)}"
+                              tabindex="1">
+                    <h:graphicImage value="#{imagePath}/icon.atom.gif" width="18" height="18"/>
+                </h:outputLink>
+            </s:span>
+
+            <s:span styleClass="forumFeedLink" rendered="#{empty f.forum.feed}">
+                <h:graphicImage rendered="#{empty f.forum.feed}"
+                                value="#{imagePath}/blank.gif" width="18" height="18"/>
+            </s:span>
+
+        </h:panelGroup>
+    </h:column>
+
+    <h:column>
+        <f:facet name="header">#{messages['forum.label.Forum']}</f:facet>
+        <s:div styleClass="undecoratedLink forumTitle extraLargeFont">
+            <h:outputLink styleClass="undecoratedLink" value="#{wikiURLRenderer.renderURL(f.forum)}" tabindex="1">
+                <h:outputText value="#{f.forum.name}"/>
+            </h:outputLink>
+        </s:div>
+        <s:div styleClass="forumDescription smallFont" rendered="#{not empty f.forum.description}">
+            <h:outputText value="#{f.forum.description}"/>
+        </s:div>
+    </h:column>
+
+    <h:column rendered="#{not forumListHome.managed}">
+        <f:facet name="header">#{messages['forum.label.TopicCount']}</f:facet>
+        <h:outputText value="#{f.totalNumOfTopics}"
+                      rendered="#{not empty f.totalNumOfTopics}"/>
+        <h:outputText value="-" rendered="#{empty f.totalNumOfTopics}"/>
+    </h:column>
+
+    <h:column rendered="#{not forumListHome.managed}">
+        <f:facet name="header">#{messages['forum.label.PostCount']}</f:facet>
+        <h:outputText value="#{f.totalNumOfPosts}"
+                      rendered="#{not empty f.totalNumOfPosts}"/>
+        <h:outputText value="-" rendered="#{empty f.totalNumOfPosts}"/>
+    </h:column>
+
+    <h:column rendered="#{not forumListHome.managed}">
+        <f:facet name="header">#{messages['forum.label.NewestTopic']}</f:facet>
+        <s:fragment rendered="#{not empty f.lastTopic}">
+            <ui:include src="lastTopicPost.xhtml">
+                <ui:param name="link"        value="#{wikiURLRenderer.renderURL(f.lastTopic)}"/>
+                <ui:param name="name"        value="#{f.lastTopic.name}"/>
+                <ui:param name="createdOn"   value="#{f.lastTopic.createdOn}"/>
+                <ui:param name="createdBy"   value="#{f.lastTopic.createdBy}"/>
+                <ui:param name="popupId"     value="lastTopic#{f.lastTopic.id}"/>
+                <ui:param name="rightOffset" value="12%"/>
+            </ui:include>
+        </s:fragment>
+        <s:fragment rendered="#{empty f.lastTopic}">
+            -
+        </s:fragment>
+    </h:column>
+
+    <h:column rendered="#{not forumListHome.managed}">
+        <f:facet name="header">#{messages['forum.label.LatestPost']}</f:facet>
+        <s:fragment rendered="#{f.lastPostLastTopic}">
+            <ui:include src="lastTopicPost.xhtml">
+                <ui:param name="link"        value="#{wikiURLRenderer.renderURL(f.lastTopic)}"/>
+                <ui:param name="name"        value="#{f.lastTopic.name}"/>
+                <ui:param name="createdOn"   value="#{f.lastTopic.createdOn}"/>
+                <ui:param name="createdBy"   value="#{f.lastTopic.createdBy}"/>
+                <ui:param name="popupId"     value="latestPost#{f.lastTopic.id}"/>
+                <ui:param name="rightOffset" value="1%"/>
+            </ui:include>
+        </s:fragment>
+        <s:fragment rendered="#{not empty f.lastComment and not f.lastPostLastTopic}">
+            <ui:include src="lastTopicPost.xhtml">
+                <ui:param name="link"        value="#{wikiURLRenderer.renderURL(f.lastComment)}"/>
+                <ui:param name="name"        value="#{f.lastComment.subject}"/>
+                <ui:param name="createdOn"   value="#{f.lastComment.createdOn}"/>
+                <ui:param name="createdBy"   value="#{f.lastComment.createdBy}"/>
+                <ui:param name="popupId"     value="latestPost#{f.lastComment.id}"/>
+                <ui:param name="rightOffset" value="1%"/>
+            </ui:include>
+        </s:fragment>
+        <s:fragment rendered="#{empty f.lastComment and not f.lastPostLastTopic}">
+            -
+        </s:fragment>
+    </h:column>
+
+    <h:column rendered="#{forumListHome.managed and not forumHome.showForm}">
+
+        <a:commandLink action="#{forumHome.edit(f.forum.id)}"
+                       reRender="forumListControlsContainer, forumListTable, forumFormContainer, messageBoxContainer"
+                       tabindex="1" styleClass="buttonNonpersistent sessionEventTrigger">
+            <h:outputText styleClass="buttonLabel" value="#{messages['forum.button.Edit']}"/>
+        </a:commandLink>
+
+    </h:column>
+
+</h:dataTable>
+</h:form>
+</div>
+
+<s:div rendered="#{empty forumQuery.forums}" styleClass="box">
+    <h:outputText value="#{messages['forum.msg.NoForumsFound']}"/>
+</s:div>
+
+</s:cache>
+
+</s:div>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumListTable.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumPosting.xhtml (from rev 7883, trunk/examples/wiki/view/plugins/forumPosting/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumPosting.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumPosting.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,18 @@
+<wiki:plugin id="forumPostingPlugin"
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <ui:decorate template="forumPostingHeader.xhtml">
+        <ui:define name="subjectIcon">
+            <h:graphicImage value="#{currentMacro.requestImagePath}/icon.posting.gif"
+                            width="22" height="26"/>
+        </ui:define>
+    </ui:decorate>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumPosting.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumPostingHeader.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/forumPosting/forumPostingHeader.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumPostingHeader.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumPostingHeader.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,132 @@
+<s:fragment
+        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:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <h:panelGrid columns="2" styleClass="forumPostingHeaderInfoControls" columnClasses="forumPostingHeaderInfo, forumPostingHeaderControls"
+                 cellpadding="0" cellspacing="0" border="0">
+
+        <h:outputLink value="#{wikiURLRenderer.renderURL(currentDirectory.defaultFile)}" styleClass="extraExtraLargeFont">
+            <h:outputText value="#{messages['forum.label.Forum']}:&#160;#{currentDirectory.name}"/>
+        </h:outputLink>
+
+        <h:panelGroup>
+
+            <h:outputLink value="#{wikiURLRenderer.renderURL(currentDirectory.parent)}"
+                          accesskey="#{messages['forum.button.ForumList.accesskey']}"
+                          tabindex="1" styleClass="buttonNonpersistent">
+                <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.ForumList']}"/>
+            </h:outputLink>
+
+            <s:fragment rendered="#{empty topicPage or topicPage == 0}">
+                <h:outputLink value="#{wikiURLRenderer.renderURL(currentDirectory.defaultFile)}"
+                              accesskey="#{messages['forum.button.TopicList.accesskey']}"
+                              tabindex="1" styleClass="buttonNonpersistent">
+                    <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.TopicList']}"/>
+                </h:outputLink>
+            </s:fragment>
+            <s:fragment rendered="#{topicPage > 0}">
+                <h:outputLink value="#{wikiURLRenderer.renderURL(currentDirectory.defaultFile)}/Page/#{topicPage}"
+                              accesskey="#{messages['forum.button.TopicList.accesskey']}"
+                              tabindex="1" styleClass="buttonNonpersistent">
+                    <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.TopicList']}"/>
+                </h:outputLink>
+            </s:fragment>
+
+            <s:fragment rendered="#{s:hasPermission('Node', 'create', currentDirectory) and not replyHome.showForm}">
+                <h:outputLink value="#{wikiURLRenderer.renderURL(currentDirectory.defaultFile)}?showTopicForm=true"
+                              accesskey="#{messages['forum.button.NewTopic.accesskey']}"
+                              tabindex="1" styleClass="buttonNonpersistent">
+                    <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.NewTopic']}"/>
+                </h:outputLink>
+            </s:fragment>
+
+            <!-- TODO: Fix these http://jira.jboss.com/jira/browse/JBSEAM-2633
+            <h:outputLink value="#{wikiURLRenderer.renderURL(docPager.previous)}"
+                          rendered="#{not empty docPager.previous and docPager.previous.id != currentDirectory.defaultFile.id}"
+                          accesskey="#{messages['forum.button.PreviousPosting.accesskey']}"
+                          tabindex="1" styleClass="buttonNonpersistent">
+                <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.PreviousPosting']}"/>
+            </h:outputLink>
+
+            <h:outputLink value="#{wikiURLRenderer.renderURL(docPager.next)}"
+                          rendered="#{not empty docPager.next and docPager.next.id != currentDirectory.defaultFile.id}"
+                          accesskey="#{messages['forum.button.NextPosting.accesskey']}"
+                          tabindex="1" styleClass="buttonNonpersistent">
+                <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.NextPosting']}"/>
+            </h:outputLink>
+            -->
+
+        </h:panelGroup>
+
+    </h:panelGrid>
+
+    <h:outputText escape="false"
+                  value="&lt;div class='box forumPostingDocumentWrapper #{empty commentQuery.comments or not currentDocument.enableComments? 'noComments' : ''}'>"/>
+
+        <h:panelGrid columns="4" styleClass="commentHeader"
+                     columnClasses="commentSubjectIcon, commentSubject, commentAuthorInfo smallFont, commentAuthorPortrait"
+                     cellpadding="0" cellspacing="0" border="0">
+
+            <s:fragment>
+                <ui:insert name="subjectIcon"/>
+            </s:fragment>
+
+            <s:div styleClass="undecoratedLink largeFont" rendered="#{currentDocument.name != c.subject}">
+                <h:outputLink styleClass="subjectLink" value="#{wikiURLRenderer.renderURL(currentDocument)}">
+                    <h:outputText value="#{currentDocument.name}"/>
+                </h:outputLink>
+            </s:div>
+
+            <s:fragment>
+                <s:div>
+                    <s:span styleClass="commentDate">
+                        <h:outputText value="#{currentDocument.createdOn}">
+                            <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
+                        </h:outputText>
+                        <h:outputText value="&#160;#{preferences.get('Wiki').timeZone}"/>
+                    </s:span>
+                    <h:outputText value="&#160;|&#160;"/>
+                    <s:span styleClass="commentLink undecoratedLink">
+                        <h:outputLink value="#{wikiURLRenderer.renderURL(c)}">
+                            <h:outputText value="#{messages['lacewiki.label.Link']}"/>
+                        </h:outputLink>
+                    </s:span>
+                </s:div>
+                <s:div rendered="#{currentDocument.ownedByRegularUser}">
+                    <s:span styleClass="undecoratedLink">
+                        <h:outputLink value="#{wikiURLRenderer.renderUserInfoURL(currentDocument.createdBy)}">
+                            <h:outputText value="#{currentDocument.createdBy.fullname}"/>
+                        </h:outputLink>
+                    </s:span>
+                    <s:fragment rendered="#{wiki:showEmailAddress()}">
+                        <h:outputText value="&#160;|&#160;"/>
+                        <h:outputLink value="#{wiki:escapeEmailURL(wiki:concat('mailto:', currentDocument.createdBy.email))}">
+                            <h:outputText value="#{wiki:escapeAtSymbol(currentDocument.createdBy.email)}"/>
+                        </h:outputLink>
+                    </s:fragment>
+                </s:div>
+                <s:div rendered="#{not currentDocument.ownedByRegularUser}">
+                    <h:outputText value="#{currentDocument.createdBy.fullname}"/>
+                </s:div>
+            </s:fragment>
+
+            <s:fragment rendered="#{currentDocument.ownedByRegularUser and !empty currentDocument.createdBy.profile.imageContentType}">
+                <s:span styleClass="undecoratedLink">
+                    <h:outputLink value="#{wikiURLRenderer.renderUserInfoURL(currentDocument.createdBy)}">
+                        <s:graphicImage styleClass="commentAuthorPortraitImage" value="#{currentDocument.createdBy.profile.image}">
+                            <s:transformImageSize width="30" maintainRatio="true"/>
+                        </s:graphicImage>
+                    </h:outputLink>
+                </s:span>
+            </s:fragment>
+
+        </h:panelGrid>
+
+    <!-- The forumPostingDocumentWrapper <div> stays open! -->
+
+</s:fragment>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumPostingHeader.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumReplies.xhtml (from rev 7884, trunk/examples/wiki/view/plugins/forumReplies/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumReplies.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumReplies.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,176 @@
+<wiki:plugin id="forumRepliesPlugin"
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+
+    <!-- The forumPostingDocumentWrapper <div> is open! -->
+
+        <s:div styleClass="commentSignature"
+               rendered="#{not empty currentDocument.createdBy.profile.signature and not empty currentDocument.areaNumber}">
+            <s:div styleClass="commentSignatureSeparator">
+                <h:outputText value="&#160;"/>
+            </s:div>
+            <wiki:formattedText value="#{currentDocument.createdBy.profile.signature}"
+                                linkStyleClass="regularLink"
+                                brokenLinkStyleClass="brokenLink"
+                                attachmentLinkStyleClass="regularLink"
+                                thumbnailLinkStyleClass="regularLink"
+                                linkBaseFile="#{currentDocument}"
+                                currentAreaNumber="#{currentDocument.areaNumber}"
+                                enableMacroRendering="false"/>
+        </s:div>
+
+        <s:div rendered="#{not empty currentDocument.tags}"
+               styleClass="documentTags undecoratedLink smallFont">
+            <s:div>
+                #{messages['lacewiki.label.docDisplay.Tags']}:&#160;
+                <ui:repeat var="tag" value="#{currentDocument.tagsAsList}">
+                    <h:outputLink value="#{wikiURLRenderer.renderTagURL(tag)}">
+                        <h:outputText value="#{tag}"/>
+                    </h:outputLink>
+                    <h:outputText rendered="#{not wiki:isLastItemInList(currentDocument.tagsAsList, tag)}" value="&#160;|&#160;"/>
+                </ui:repeat>
+            </s:div>
+        </s:div>
+
+        <s:div id="forumPostingControls" styleClass="forumPostingControls">
+
+            <h:panelGroup rendered="#{not replyHome.showForm and replyHome.isPersistAllowed(null,null)}">
+
+                <s:link tabindex="1" propagation="none"
+                        action="#{replyHome.replyToDocument()}"
+                        accesskey="#{messages['forum.button.Reply.accesskey']}"
+                        styleClass="buttonNonpersistent">
+                    <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.Reply']}"/>
+                 </s:link>
+
+                <s:link tabindex="1" propagation="none"
+                        action="#{replyHome.quoteDocument()}"
+                        styleClass="buttonNonpersistent"
+                        accesskey="#{messages['forum.button.Quote.accesskey']}">
+                     <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.Quote']}"/>
+                 </s:link>
+
+            </h:panelGroup>
+
+        </s:div>
+
+    <!-- The forumPostingDocumentWrapper <div> is closed here! -->
+    <h:outputText escape="false" value="&lt;/div>"/>
+
+    <s:div id="forumRepliesContainer">
+
+        <s:fragment rendered="#{currentDocument.enableComments}">
+
+            <ui:decorate template="/includes/commentsDisplay.xhtml">
+                <ui:param name="titleSingular" value="#{messages['forum.label.Reply']}"/>
+                <ui:param name="titlePlural" value="#{messages['forum.label.Replies']}"/>
+                <ui:define name="controls">
+
+                    <h:panelGrid columns="2" styleClass="forumReplyControls"
+                                 columnClasses="forumReplyRating, forumReplyControl"
+                                 cellpadding="0" cellspacing="0" border="0">
+
+                        <s:fragment>
+
+                            <s:fragment rendered="#{not replyHome.showForm
+                                                    and c.rating == 0
+                                                    and not currentUser.guest
+                                                    and c.createdBy.id != currentUser.id
+                                                    and currentDocument.createdBy.id == currentUser.id}">
+                                
+                                <h:panelGrid columns="7" styleClass="commentRatingChooser"
+                                             columnClasses="label, star, star, star, star, star, star"
+                                             border="0" cellpadding="0" cellspacing="0">
+                                    <h:outputText styleClass="smallFont" value="#{messages['lacewiki.label.comment.RateThisPosting']}:&#160;"/>
+                                    <c:forEach begin="1" var="r" end="5">
+                                        <a:commandLink action="#{replyHome.rate(c.id, r)}"
+                                                       reRender="comments, messageBoxContainer"
+                                                       status="globalStatus">
+                                            <h:graphicImage styleClass="item#{c.id}-rate#{r}"
+                                                            onmouseover="highlightStars('#{c.id}', '5', '#{r}')"
+                                                            onmouseout="highlightStars('#{c.id}', '5', '0')"
+                                                            value="#{imagePath}/star_grey.gif"
+                                                            alt="*"
+                                                            width="16" height="16"/>
+                                        </a:commandLink>
+                                    </c:forEach>
+                                </h:panelGrid>
+                            </s:fragment>
+
+                            <s:fragment rendered="#{c.rating > 0}">
+                                <h:panelGrid columns="#{c.rating + 1}" styleClass="commentRating"
+                                             columnClasses="label, star, star, star, star, star, star"
+                                             border="0" cellpadding="0" cellspacing="0">
+                                    <h:outputText styleClass="smallFont" value="#{messages['lacewiki.label.comment.Rating']}:&#160;"/>
+                                    <c:forEach begin="1" var="r" end="#{c.rating}">
+                                        <h:graphicImage value="#{imagePath}/star.gif"
+                                                        width="16" height="16" alt="*"/>
+                                    </c:forEach>
+                                </h:panelGrid>
+                            </s:fragment>
+
+                        </s:fragment>
+
+                        <s:fragment>
+
+                            <s:fragment rendered="#{not replyHome.showForm and replyHome.isPersistAllowed(null,null)}">
+
+                                <s:link tabindex="102" propagation="none"
+                                        action="#{replyHome.replyTo()}"
+                                        styleClass="buttonNonpersistent">
+                                    <f:param name="parentCommentId" value="#{c.id}"/>
+                                    <h:outputText styleClass="buttonLabel" value="#{messages['lacewiki.button.commentsDisplay.ReplyTo']}"/>
+                                </s:link>
+
+                                <s:link tabindex="102" propagation="none"
+                                        action="#{replyHome.quote()}"
+                                        styleClass="buttonNonpersistent">
+                                    <f:param name="parentCommentId" value="#{c.id}"/>
+                                    <h:outputText styleClass="buttonLabel" value="#{messages['lacewiki.button.commentsDisplay.Quote']}"/>
+                                </s:link>
+
+                            </s:fragment>
+
+                             <s:fragment rendered="#{s:hasPermission('Comment', 'delete', currentDocument) and not replyHome.showForm}">
+                                 <ui:decorate template="/includes/confirmationAction.xhtml">
+                                     <ui:param name="label" value="#{messages['lacewiki.button.commentsDisplay.RemoveComment']}"/>
+                                     <ui:param name="jsFunctionName" value="deleteReplyId#{c.id}"/>
+                                     <ui:param name="message" value="#{messages['lacewiki.label.AreYouSureYouWantToDelete']
+                                                                         .concat(' ')
+                                                                         .concat(messages['lacewiki.label.commentsDisplay.CommentThread'])
+                                                                         .concat(': \'')
+                                                                         .concat(c.subject)
+                                                                         .concat('\'?')}"/>
+                                     <ui:define name="jsFunction">
+                                         <a:jsFunction name="#{jsFunctionName}"
+                                                       reRender="forumRepliesContainer, messageBoxContainer"
+                                                       action="#{replyHome.remove(c.id)}"
+                                                       oncomplete="onAjaxRequestComplete()"
+                                                       status="globalStatus"/>
+                                     </ui:define>
+                                 </ui:decorate>
+                            </s:fragment>
+
+                        </s:fragment>
+
+                    </h:panelGrid>
+
+                </ui:define>
+            </ui:decorate>
+
+            <ui:include src="replyForm.xhtml">
+                <ui:param name="home" value="#{replyHome}"/>
+            </ui:include>
+
+        </s:fragment>
+
+    </s:div>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumReplies.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumStickyPosting.xhtml (from rev 7883, trunk/examples/wiki/view/plugins/forumStickyPosting/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumStickyPosting.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumStickyPosting.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,18 @@
+<wiki:plugin id="forumStickyPostingPlugin"
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <ui:decorate template="forumPostingHeader.xhtml">
+        <ui:define name="subjectIcon">
+            <h:graphicImage value="#{currentMacro.requestImagePath}/icon.posting_sticky.gif"
+                            width="22" height="26"/>
+        </ui:define>
+    </ui:decorate>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumStickyPosting.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumTopPosters.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/forumTopPosters/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumTopPosters.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumTopPosters.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,83 @@
+<wiki:plugin
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+<s:cache key="#{currentMacro.cacheKey}"
+         region="#{currentMacro.getCacheRegion('TopPostersList')}">
+
+    <s:div styleClass="forumTopPosters box">
+
+        <s:div styleClass="boxHeader">
+            <h:outputText value="#{preferences.get('ForumTopPosters', currentMacro).title}"/>
+        </s:div>
+
+        <div class="boxContent">
+
+            <h:dataTable value="#{forumQuery.getTopPosters(currentMacro)}" var="p"
+                         rendered="#{not empty forumQuery.getTopPosters(currentMacro) and forumQuery.getTopPosters(currentMacro).size() > 0}"
+                         styleClass="datatable forumTopPostersTable"
+                         headerClass="alignCenter"
+                         columnClasses="fifteenPercentColumn alignCenter indexColumn,
+                                        defaultColumn alignCenter nameColumn,
+                                        twentyPercentColumn alignCenter joinedOnColumn,
+                                        twentyPercentColumn alignCenter ratingPointsColumn"
+                         rowClasses="rowOdd, rowEven"
+                         cellpadding="0" cellspacing="0" border="0">
+
+                <h:column>
+                    <f:facet name="header">
+                        <h:outputText value="#{messages['forum.topPosters.label.Position']}"/>
+                    </f:facet>
+                    <h:outputText value="#{forumQuery.getTopPosters(currentMacro).indexOf(p)+1}."/>
+                </h:column>
+
+                <h:column>
+                    <f:facet name="header">
+                        <h:outputText value="#{messages['forum.topPosters.label.User']}"/>
+                    </f:facet>
+                    <ui:include src="/includes/userInfoLink.xhtml">
+                        <ui:param name="user" value="#{p}"/>
+                    </ui:include>
+                </h:column>
+
+                <h:column>
+                    <f:facet name="header">
+                        <h:outputText value="#{messages['forum.topPosters.label.JoinedOn']}"/>
+                    </f:facet>
+                    <h:outputText value="#{p.createdOn}">
+                        <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
+                    </h:outputText>
+                    <h:outputText value="&#160;#{preferences.get('Wiki').timeZone}"/>
+                </h:column>
+
+                <h:column>
+                    <f:facet name="header">
+                        <h:outputText value="#{messages['forum.topPosters.label.RatingPoints']}"/>
+                    </f:facet>
+                    <h:outputText value="#{p.ratingPoints}"/>
+                </h:column>
+
+            </h:dataTable>
+
+        </div>
+
+        <s:div styleClass="forumTopPostersEmpty"
+               rendered="#{empty forumQuery.getTopPosters(currentMacro) or forumQuery.getTopPosters(currentMacro).size() == 0}">
+            <h:outputText value="#{messages['forum.topPosterslabel.NoPostersFound']}"/>
+        </s:div>
+
+        <div class="boxFooter"/>
+
+    </s:div>
+
+</s:cache>
+
+</wiki:plugin>
+
+

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumTopics.xhtml (from rev 7883, trunk/examples/wiki/view/plugins/forumTopics/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumTopics.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumTopics.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,20 @@
+<wiki:plugin id="forumTopicsPlugin"
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:span id="forumTopicsPluginContainer">
+
+        <ui:include src="topicControls.xhtml"/>
+
+        <ui:include src="topicForm.xhtml"/>
+
+        <ui:include src="topicTable.xhtml"/>
+
+    </s:span>
+
+</wiki:plugin>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/forumTopics.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/lastTopicPost.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/forumList/lastTopicPost.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/lastTopicPost.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/lastTopicPost.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,28 @@
+<s:fragment
+        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:c="http://java.sun.com/jstl/core"
+        xmlns:wiki="http://jboss.com/products/seam/wiki"
+        xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+        xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:div>
+        <h:outputLink value="#{link}" tabindex="1">
+            <h:outputText value="#{wiki:truncateString(name, 15, '...')}"/>
+            <h:graphicImage styleClass="topicGotoIcon" value="#{currentMacro.requestImagePath}/icon.posting_goto.gif" width="18" height="9"/>
+        </h:outputLink>
+    </s:div>
+
+    <s:div>
+        <h:outputText value="#{createdOn}">
+            <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
+        </h:outputText>
+    </s:div>
+
+    <ui:include src="/includes/userInfoLink.xhtml">
+        <ui:param name="user" value="#{createdBy}"/>
+    </ui:include>
+
+</s:fragment>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/lastTopicPost.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/replyForm.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/forumReplies/replyForm.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/replyForm.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/replyForm.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,141 @@
+<s:div id="replyFormContainer"
+       styleClass="replyFormContainer"
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:s="http://jboss.com/products/seam/taglib"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:f="http://java.sun.com/jsf/core"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:wiki="http://jboss.com/products/seam/wiki">
+
+<script type="text/javascript">
+    function scrollToCommentForm() {
+        window.scrollTo(0, jQuery('#forumRepliesPlugin\\:replyForm').offset().top)
+        jQuery("#forumRepliesPlugin\\:replyForm\\:replyTextArea").focus();
+    }
+</script>
+
+<s:fragment rendered="#{replyHome.showForm}">
+    <script type="text/javascript">jQuery(function () {scrollToCommentForm(); })</script>
+    <script type="text/javascript">startSessionTimeoutCheck();</script>
+</s:fragment>
+
+<s:fragment rendered="#{not replyHome.showForm}">
+    <script type="text/javascript">stopSessionTimeoutCheck();</script>
+</s:fragment>
+
+<s:fragment rendered="#{s:hasPermission('Node', 'create', currentDirectory) and replyHome.showForm}">
+
+    <div class="box">
+
+        <h:form id="replyForm">
+        <div class="form">
+
+            <div class="formHead bottomBorder">
+                <h:outputText value="#{messages['forum.label.NewReply']}"/>
+            </div>
+
+            <a:region>
+                <s:div rendered="#{replyHome.showForm}"
+                       styleClass="formFields formBorder #{replyHome.instance.ownedByRegularUser ? '' : 'wideLabels'}">
+
+                    <s:fragment rendered="#{not replyHome.instance.ownedByRegularUser}">
+                        <a:region>
+                            <s:decorate id="userNameDecorate" template="/includes/formFieldDecorate.xhtml">
+                                <ui:define name="label">#{messages['forum.label.replyForm.Name']}</ui:define>
+                                <h:inputText styleClass="ajaxSupport" tabindex="1" size="40" maxlength="100" required="true"
+                                             id="userName" value="#{replyHome.instance.fromUserName}">
+                                    <a:support status="globalStatus" event="onchange" reRender="userNameDecorate" oncomplete="onAjaxRequestComplete()"/>
+                                </h:inputText>
+                            </s:decorate>
+                        </a:region>
+
+                        <s:decorate id="userEmailDecorate" template="/includes/formFieldDecorate.xhtml">
+                            <ui:define name="label">#{messages['forum.label.replyForm.Email']}</ui:define>
+                            <h:inputText tabindex="1" size="40" maxlength="255" required="false"
+                                         id="userEmail" value="#{replyHome.instance.fromUserEmail}">
+                            </h:inputText>
+                        </s:decorate>
+
+                        <s:decorate id="userHomepageDecorate" template="/includes/formFieldDecorate.xhtml">
+                            <ui:define name="label">#{messages['forum.label.replyForm.Homepage']}</ui:define>
+                            <h:inputText tabindex="1" size="40" maxlength="1000" required="false"
+                                         id="userHomepage" value="#{replyHome.instance.fromUserHomepage}">
+                            </h:inputText>
+                        </s:decorate>
+                    </s:fragment>
+
+                    <s:decorate id="subjectDecorate" template="/includes/formFieldDecorate.xhtml">
+                        <ui:define name="label">#{messages['forum.label.replyForm.Subject']}</ui:define>
+                        <h:inputText styleClass="ajaxSupport" tabindex="1" size="40" maxlength="255" required="true"
+                                     id="subject" value="#{replyHome.instance.subject}">
+                            <a:support status="globalStatus" event="onchange" reRender="subjectDecorate" oncomplete="onAjaxRequestComplete()"/>
+                        </h:inputText>
+                    </s:decorate>
+
+                    <a:region>
+                        <ui:include src="/includes/wikiTextEditor.xhtml">
+                            <ui:param name="textEditorId" value="reply"/>
+                            <ui:param name="textPreviewId" value="replyPreview"/>
+                            <ui:param name="namingContainer" value="forumRepliesPlugin\\\\:replyForm"/>
+                            <ui:param name="label" value="#{messages['forum.label.replyForm.Message']}"/>
+                            <ui:param name="valueBinding" value="#{replyHome.instance.content}"/>
+                            <ui:param name="valueMaxLength" value="32767"/>
+                            <ui:param name="valueRequired" value="true"/>
+                            <ui:param name="textEditorColumns" value="#{replyHome.instance.ownedByRegularUser ? '65' : '55'}"/>
+                            <ui:param name="textEditorRows" value="20"/>
+                        </ui:include>
+
+                        <ui:include src="/includes/wikiTextPreview.xhtml">
+                            <ui:param name="textPreviewId" value="replyPreview"/>
+                            <ui:param name="valueBinding" value="#{replyHome.instance.content}"/>
+                            <ui:param name="baseDocument" value="#{currentDocument}"/>
+                            <ui:param name="baseDirectory" value="#{currentDocument.parent}"/>
+                        </ui:include>
+                    </a:region>
+
+                    <s:decorate id="verifyCaptchaEntry" template="/includes/captchaEntry.xhtml">
+                        <ui:param name="rendered" value="#{!identity.loggedIn}"/>
+                    </s:decorate>
+
+                </s:div>
+
+                <s:div rendered="#{replyHome.showForm}"
+                       styleClass="formControls #{replyHome.instance.ownedByRegularUser ? '' : 'wideLabels'}">
+                    <div class="entry">
+                        <div class="label">&#160;</div>
+                        <div class="input">
+
+                            <a:commandLink id="post"
+                                           action="#{replyHome.persist}" tabindex="1"
+                                           reRender="documentDisplay"
+                                           status="globalStatus"
+                                           eventsQueue="ajaxEventQueue"
+                                           oncomplete="onAjaxRequestComplete()"
+                                           styleClass="button sessionEventTrigger">
+                                <h:outputText styleClass="buttonLabel" value="#{messages['forum.button.SaveNoKey']}"/>
+                            </a:commandLink>
+
+                            <a:commandLink action="#{replyHome.cancel}" tabindex="1"
+                                           reRender="documentDisplay"
+                                           immediate="true"
+                                           status="globalStatus"
+                                           eventsQueue="ajaxEventQueue"
+                                           oncomplete="onAjaxRequestComplete()"
+                                           styleClass="buttonNonpersistent sessionEventTrigger">
+                                <h:outputText styleClass="buttonLabel" value="#{messages['forum.button.CancelNoKey']}"/>
+                            </a:commandLink>
+
+                        </div>
+                    </div>
+                </s:div>
+
+            </a:region>
+
+        </div>
+        </h:form>
+
+    </div>
+
+</s:fragment>
+</s:div>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/replyForm.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicControls.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/forumTopics/topicControls.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicControls.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicControls.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,57 @@
+<s:div id="topicControlsContainer"
+       styleClass="topicControlsContainer"
+       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:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:s="http://jboss.com/products/seam/taglib">
+
+<s:fragment rendered="#{topicHome.showForm}">
+    <script type="text/javascript">startSessionTimeoutCheck();</script>
+</s:fragment>
+
+<s:fragment rendered="#{not topicHome.showForm}">
+
+    <script type="text/javascript">stopSessionTimeoutCheck();</script>
+
+    <s:div styleClass="forumsFeedLink undecoratedLink" rendered="#{not empty currentDirectory.feed}">
+        <h:outputLink value="#{wikiURLRenderer.renderFeedURL(currentDirectory.feed, null, null)}"
+                      tabindex="1">
+            <h:graphicImage value="#{imagePath}/icon.atom.gif" width="18" height="18"/>
+            <h:outputText value="#{currentDocument.name}&#160;#{messages['forum.label.Feed']}"/>
+        </h:outputLink>
+    </s:div>
+
+    <h:panelGrid columns="2" styleClass="forumDescriptionTopicControls"
+                 columnClasses="forumDescription, topicControls"
+                 cellpadding="0" cellspacing="0" border="0">
+
+        <h:outputText value="#{currentDirectory.description}"/>
+
+        <h:form>
+        <h:panelGroup>
+
+            <h:outputLink value="#{wikiURLRenderer.renderURL(currentDirectory.parent)}"
+                          accesskey="#{messages['forum.button.ForumList.accesskey']}"
+                          tabindex="1" styleClass="buttonNonpersistent">
+                <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.ForumList']}"/>
+            </h:outputLink>
+
+            <s:fragment rendered="#{s:hasPermission('Node', 'create', currentDirectory)}">
+                <h:outputLink value="#{wikiURLRenderer.renderURL(currentDocument)}?showTopicForm=true"
+                              accesskey="#{messages['forum.button.NewTopic.accesskey']}"
+                              tabindex="1" styleClass="buttonNonpersistent">
+                    <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.NewTopic']}"/>
+                </h:outputLink>
+            </s:fragment>
+
+        </h:panelGroup>
+        </h:form>
+
+    </h:panelGrid>
+
+</s:fragment>
+
+</s:div>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicControls.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicForm.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/forumTopics/topicForm.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicForm.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicForm.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,125 @@
+<s:div id="topicFormContainer"
+       styleClass="topicFormContainer"
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:s="http://jboss.com/products/seam/taglib"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:f="http://java.sun.com/jsf/core"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:wiki="http://jboss.com/products/seam/wiki">
+
+<s:fragment rendered="#{s:hasPermission('Node', 'create', currentDirectory) and topicHome.showForm}">
+
+    <div class="box">
+
+    <h:form id="topicForm">
+        <div class="form">
+
+            <div class="formHead">
+                <h:outputText value="#{messages['forum.label.NewTopic']}"/>
+            </div>
+
+            <a:region>
+                <s:div styleClass="formFields formBorder">
+
+                    <s:decorate id="nameDecorate" template="/includes/formFieldDecorate.xhtml">
+                        <ui:define name="label">#{messages['forum.label.Subject']}</ui:define>
+                        <h:inputText id="topicName" tabindex="1" size="60" maxlength="255" required="true" value="#{topicHome.instance.name}"/>
+                    </s:decorate>
+
+                    <a:region>
+                        <ui:include src="/includes/wikiTextEditor.xhtml">
+                            <ui:param name="textEditorId" value="topic"/>
+                            <ui:param name="textPreviewId" value="topicPreview"/>
+                            <ui:param name="namingContainer" value="forumTopicsPlugin\\\\:topicForm"/>
+                            <ui:param name="label" value="#{messages['forum.label.Message']}"/>
+                            <ui:param name="valueBinding" value="#{topicHome.formContent}"/>
+                            <ui:param name="valueMaxLength" value="32767"/>
+                            <ui:param name="valueRequired" value="true"/>
+                            <ui:param name="textEditorColumns" value="60"/>
+                            <ui:param name="textEditorRows" value="20"/>
+                        </ui:include>
+
+                        <s:div styleClass="marginLeft">
+                            <ui:include src="/includes/wikiTextPreview.xhtml">
+                                <ui:param name="textPreviewId" value="topicPreview"/>
+                                <ui:param name="valueBinding" value="#{topicHome.instance.content}"/>
+                                <ui:param name="baseDocument" value="#{topicHome.instance}"/>
+                                <ui:param name="baseDirectory" value="#{currentDirectory}"/>
+                            </ui:include>
+                        </s:div>
+                    </a:region>
+
+                    <s:fragment rendered="#{s:hasPermission('User', 'isAdmin', currentUser)}">
+                        <s:div styleClass="entry">
+                            <div class="label">
+                                <div class="label">&#160;</div>
+                            </div>
+                            <div class="input">
+                                <h:selectBooleanCheckbox value="#{topicHome.sticky}" tabindex="1"/>
+                                <h:outputText value="#{messages['forum.label.StickyPosting']}"/>
+                            </div>
+                        </s:div>
+
+                        <s:div styleClass="entry">
+                            <div class="label">&#160;</div>
+                            <div class="input">
+                                <h:selectBooleanCheckbox value="#{topicHome.instance.enableCommentForm}" tabindex="1"/>
+                                <h:outputText value="#{messages['forum.label.OpenTopicAllowReplies']}"/>
+                            </div>
+                        </s:div>
+                    </s:fragment>
+
+                    <s:div styleClass="entry" rendered="#{not currentUser.guest and not currentUser.admin}">
+                        <div class="label">&#160;</div>
+                        <div class="input">
+                            <h:selectBooleanCheckbox value="#{topicHome.notifyReplies}" tabindex="1"/>
+                            <h:outputText value="#{messages['forum.label.NotifyMeOfReplies']}"/>
+                        </div>
+                    </s:div>
+
+                    <ui:include src="/includes/tagEditor.xhtml">
+                        <ui:param name="editor" value="#{topicHome.tagEditor}"/>
+                    </ui:include>
+
+                    <s:decorate id="verifyCaptchaEntry" template="/includes/captchaEntry.xhtml">
+                        <ui:param name="rendered" value="#{!identity.loggedIn}"/>
+                    </s:decorate>
+
+                </s:div>
+
+                <div class="formControls">
+                    <div class="entry">
+                        <div class="label">&#160;</div>
+                        <div class="input">
+
+                            <a:commandLink id="save" action="#{topicHome.persist}"
+                                           eventsQueue="ajaxEventQueue"
+                                           reRender="forumTopicsPluginContainer, messageBoxContainer"
+                                           status="globalStatus"
+                                           tabindex="1"
+                                           styleClass="button saveButton sessionEventTrigger">
+                                <h:outputText styleClass="buttonLabel" value="#{messages['forum.button.SaveNoKey']}"/>
+                            </a:commandLink>
+
+                            <a:commandLink action="#{topicHome.cancel}"
+                                           immediate="true"
+                                           status="globalStatus"
+                                           eventsQueue="ajaxEventQueue"
+                                           tabindex="1" styleClass="buttonNonpersistent sessionEventTrigger">
+                                <h:outputText styleClass="buttonLabel" value="#{messages['forum.button.CancelNoKey']}"/>
+                            </a:commandLink>
+
+                        </div>
+                    </div>
+                </div>
+
+            </a:region>
+
+        </div>
+    </h:form>
+
+    </div>
+
+</s:fragment>
+</s:div>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicForm.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicPager.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/forumTopics/topicPager.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicPager.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicPager.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,51 @@
+<s:fragment
+        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:s="http://jboss.com/products/seam/taglib">
+
+    <h:panelGrid columns="5" rendered="#{not empty forumQuery.topics}"
+                 styleClass="topicPagerTable"
+                 columnClasses="topicPagerColumn, topicPagerColumn, topicPagerTextColumn, topicPagerColumn, topicPagerColumn, "
+                 cellpadding="0" cellspacing="0" border="0">
+
+        <h:outputLink rendered="#{forumQuery.pager.previousPageAvailable}" target="_top"
+                      value="#{wikiURLRenderer.renderURL(currentDocument)}">
+                <h:graphicImage value="#{imagePath}/page.first.gif" width="13" height="11"/>
+        </h:outputLink>
+        <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
+                        rendered="#{!forumQuery.pager.previousPageAvailable}"/>
+
+        <h:outputLink rendered="#{forumQuery.pager.previousPageAvailable}" target="_top"
+                      value="#{wikiURLRenderer.renderURL(currentDocument)}/Page/#{forumQuery.pager.previousPage}">
+            <h:graphicImage value="#{imagePath}/page.previous.gif" width="13" height="11"/>
+        </h:outputLink>
+        <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
+                        rendered="#{!forumQuery.pager.previousPageAvailable}"/>
+
+        <s:span>
+            <h:outputText value="#{messages['forum.label.Showing']}
+                                    #{forumQuery.pager.firstRecord} #{messages['forum.label.To']}
+                                    #{forumQuery.pager.lastRecord} #{messages['forum.label.Of']}
+                                    #{forumQuery.pager.numOfRecords} #{messages['forum.label.Topics']}"/>
+        </s:span>
+
+        <h:outputLink rendered="#{forumQuery.pager.nextPageAvailable}" target="_top"
+                      value="#{wikiURLRenderer.renderURL(currentDocument)}/Page/#{forumQuery.pager.nextPage}">
+            <h:graphicImage value="#{imagePath}/page.next.gif" width="13" height="11"/>
+        </h:outputLink>
+        <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
+                        rendered="#{!forumQuery.pager.nextPageAvailable}"/>
+
+        <h:outputLink rendered="#{forumQuery.pager.nextPageAvailable}" target="_top"
+                      value="#{wikiURLRenderer.renderURL(currentDocument)}/Page/#{forumQuery.pager.lastPage}">
+            <h:graphicImage value="#{imagePath}/page.last.gif" width="13" height="11"/>
+        </h:outputLink>
+        <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
+                        rendered="#{!forumQuery.pager.nextPageAvailable}"/>
+
+    </h:panelGrid>
+    
+</s:fragment>
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicPager.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicTable.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/forumTopics/topicTable.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicTable.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicTable.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,105 @@
+<s:div id="topicTableContainer"
+       styleClass="topicFormContainer"
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:s="http://jboss.com/products/seam/taglib"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:f="http://java.sun.com/jsf/core"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:wiki="http://jboss.com/products/seam/wiki">
+
+<s:cache rendered="#{not topicHome.showForm}"
+         enabled="#{not identity.loggedIn}"
+         region="#{currentMacro.getCacheRegion('TopicList')}"
+         key="#{currentMacro.getCacheKey(param.page)}">
+
+    <ui:include src="topicPager.xhtml"/>
+
+    <div class="box">
+
+    <h:dataTable id="topicTable"
+                 var="t"
+                 value="#{forumQuery.topics}"
+                 rendered="#{not empty forumQuery.topics}"
+                 styleClass="datatable topLeftBottomBorder topicTable"
+                 headerClass="regularHeader rightBorder alignCenter smallFont"
+                 columnClasses="onePercentColumn rightBorder alignCenter smallFont, defaultColumn rightBorder alignLeft wrapWhitespace,
+                                onePercentColumn rightBorder alignCenter smallFont, fivePercentColumn rightBorder alignCenter smallFont,
+                                tenPercentColumn rightBorder alignCenter smallFont"
+                 rowClasses="rowOdd,rowEven"
+                 cellpadding="0" cellspacing="0" border="0">
+
+        <h:column>
+            <f:facet name="header">&#160;</f:facet>
+            <h:graphicImage value="#{currentMacro.requestImagePath}/icon.#{t.iconName}.gif" width="22" height="26"/>
+        </h:column>
+
+        <h:column>
+            <f:facet name="header">Topic</f:facet>
+
+            <h:outputLink value="#{wikiURLRenderer.renderURL(t.topic)}" tabindex="1">
+                <h:outputText value="#{wiki:truncateString(t.topic.name, 60, '...')}"/>
+            </h:outputLink>
+
+        </h:column>
+
+        <h:column>
+            <f:facet name="header">Replies</f:facet>
+            <h:outputText value="#{t.numOfReplies}" rendered="#{t.numOfReplies != 0}"/>
+            <h:outputText value="-" rendered="#{t.numOfReplies == 0}"/>
+        </h:column>
+
+        <h:column>
+            <f:facet name="header">Author</f:facet>
+
+            <ui:include src="/includes/userInfoLink.xhtml">
+                <ui:param name="user" value="#{t.topic.createdBy}"/>
+            </ui:include>
+
+        </h:column>
+
+        <h:column>
+            <f:facet name="header">Last Post</f:facet>
+
+            <s:fragment rendered="#{not empty t.lastComment}">
+                <h:outputLink value="#{wikiURLRenderer.renderURL(t.lastComment)}" tabindex="1">
+                    <h:outputText value="#{t.lastComment.createdOn}">
+                        <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
+                    </h:outputText>
+                    <h:graphicImage styleClass="topicGotoIcon" value="#{currentMacro.requestImagePath}/icon.posting_goto.gif" width="18" height="9"/>
+                </h:outputLink>
+
+                <ui:include src="/includes/userInfoLink.xhtml">
+                    <ui:param name="user" value="#{t.lastComment.createdBy}"/>
+                </ui:include>
+
+            </s:fragment>
+
+            <s:fragment rendered="#{empty t.lastComment}">
+                <h:outputLink value="#{wikiURLRenderer.renderURL(t.topic)}" tabindex="1">
+                    <h:outputText value="#{t.topic.createdOn}">
+                        <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
+                    </h:outputText>
+                    <h:graphicImage styleClass="topicGotoIcon" value="#{currentMacro.requestImagePath}/icon.posting_goto.gif" width="18" height="9"/>
+                </h:outputLink>
+
+                <ui:include src="/includes/userInfoLink.xhtml">
+                    <ui:param name="user" value="#{t.topic.createdBy}"/>
+                </ui:include>
+
+            </s:fragment>
+        </h:column>
+
+    </h:dataTable>
+
+    </div>
+
+    <s:div rendered="#{empty forumQuery.topics}" styleClass="box">
+        No topics in this forum.
+    </s:div>
+
+    <ui:include src="topicPager.xhtml"/>
+
+</s:cache>
+
+</s:div>


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/templates/topicTable.xhtml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumList.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/forumList.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumList.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,47 @@
+.forumListControlsContainer {
+    text-align: right;
+    white-space: nowrap;
+    margin-bottom: 15px;
+}
+
+.forumListTableContainer {
+}
+
+.forumFormContainer {
+    margin-bottom: 20px;
+}
+
+.forumTitle {
+    font-weight: normal;
+    line-height: 160%;
+}
+
+.forumDescription {
+    white-space: normal;    
+}
+
+.topicGotoIcon {
+    margin-left: 5px;
+    margin-right: 5px;
+}
+
+.forumsFeedLink {
+    margin: 10px;
+    float: right;
+    margin-top: -30px;
+}
+
+.forumsFeedLink img {
+    vertical-align: middle;
+    margin-right: 5px;
+}
+
+.forumFeedLink {
+
+}
+
+.forumFeedLink img {
+    margin-left: 8px;
+    margin-right: 8px;
+    margin-bottom: 2px;
+}


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumList.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumPosting.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/forumPosting.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumPosting.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,40 @@
+.forumPostingHeaderInfoControls {
+    width: 100%;
+    margin-bottom: 10px;
+}
+
+.forumPostingHeaderInfo {
+    text-align: left;
+}
+
+.forumPostingHeaderControls {
+    text-align: right;
+    white-space: nowrap;
+}
+
+.forumPostingControls {
+    text-align: right;
+    white-space: nowrap;
+}
+    
+.forumPostingDocumentWrapper {
+    border-left: 1px solid #C3BBB6;
+    border-right: 1px solid #C3BBB6;
+    border-top: 1px solid #C3BBB6;
+    padding: 5px;
+}
+
+.forumPostingDocumentWrapper .subjectLink {
+    margin-left: 10px;
+    font-weight: normal;
+    line-height: 100%;
+}
+
+.forumPostingDocumentWrapper .subjectIcon {
+    vertical-align: text-top;
+}
+
+.noComments {
+    border-bottom: 1px solid #C3BBB6;
+}
+


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumPosting.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumReplies.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/forumReplies.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumReplies.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumReplies.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,16 @@
+.forumReplyControls {
+    width: 100%;
+}
+
+.forumReplyRating {
+    text-align: left;
+}
+
+.forumReplyStatus {
+    text-align: right;
+}
+
+.forumReplyControl {
+    text-align: right;
+    width: 200px;
+}
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumReplies.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumStickyPosting.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/forumStickyPosting.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumStickyPosting.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumStickyPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,40 @@
+.forumPostingHeaderInfoControls {
+    width: 100%;
+    margin-bottom: 10px;
+}
+
+.forumPostingHeaderInfo {
+    text-align: left;
+}
+
+.forumPostingHeaderControls {
+    text-align: right;
+    white-space: nowrap;
+}
+
+.forumPostingControls {
+    text-align: right;
+    white-space: nowrap;
+}
+
+.forumPostingDocumentWrapper {
+    border-left: 1px solid #C3BBB6;
+    border-right: 1px solid #C3BBB6;
+    border-top: 1px solid #C3BBB6;
+    padding: 5px;
+}
+
+.forumPostingDocumentWrapper .subjectLink {
+    margin-left: 10px;
+    font-weight: normal;
+    line-height: 100%;
+}
+
+.forumPostingDocumentWrapper .subjectIcon {
+    vertical-align: text-top;
+}
+
+.noComments {
+    border-bottom: 1px solid #C3BBB6;
+}
+


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumStickyPosting.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumTopics.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/forumTopics.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumTopics.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumTopics.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,60 @@
+.forumDescriptionTopicControls {
+    width: 100%;
+}
+
+.forumDescription {
+}
+
+.topicControls {
+    text-align: right;
+    white-space: nowrap;
+    padding-left: 10px;
+}
+
+.topicFormContainer {
+}
+
+.topicTableContainer {
+}
+
+.topicPager {
+    width: 100%;
+}
+
+.topicPagerTable {
+    width: 100%;
+    font-weight: bold;
+    padding: 0;
+    margin: 0;
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    text-align: center;
+}
+
+.topicPagerColumn {
+    width: 10%;
+}
+.topicPagerTextColumn {
+    width: 60%;
+}
+
+.topicGotoIcon {
+    margin-left: 5px;
+    margin-right: 5px;
+}
+
+.forumsFeedLink {
+    margin: 10px;
+    float: right;
+    margin-top: -30px;
+}
+
+.forumsFeedLink img {
+    vertical-align: middle;
+    margin-right: 5px;
+}
+
+.forumDescription {
+    text-align: left;
+}
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/css/forumTopics.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.posting.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_goto.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.posting_goto.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_goto.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_locked.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.posting_locked.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_locked.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_locked_unread.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.posting_locked_unread.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_locked_unread.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_sticky.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.posting_sticky.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_sticky.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_sticky_unread.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.posting_sticky_unread.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_sticky_unread.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_unread.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.posting_unread.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/default/img/icon.posting_unread.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumList.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/forumList.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumList.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,55 @@
+.forumListControlsContainer {
+    text-align: right;
+    white-space: nowrap;
+    margin-bottom: 15px;
+}
+
+.forumListTableContainer {
+}
+
+.forumListRow td {
+    padding-top: 10px;
+    padding-bottom: 10px;
+}
+
+.forumFormContainer {
+    margin-bottom: 20px;
+}
+
+.forumTitle {
+    font-weight: bold;
+}
+
+.forumDescription {
+    white-space: normal;    
+}
+
+.topicGotoIcon {
+    margin-left: 5px;
+    margin-right: 5px;
+}
+
+.forumsFeedLink {
+    margin: 10px;
+    float: right;
+    margin-top: -35px;
+}
+
+.forumsFeedLink img {
+    vertical-align: middle;
+    margin-right: 5px;
+}
+
+.forumFeedLink {
+
+}
+
+.forumFeedLink img {
+    margin-left: 8px;
+    margin-right: 8px;
+    margin-bottom: 2px;
+}
+
+.userInfoPopupContainer {
+    text-align: left;
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumPosting.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/forumPosting.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumPosting.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,37 @@
+.forumPostingHeaderInfoControls {
+    width: 100%;
+    margin-bottom: 10px;
+}
+
+.forumPostingHeaderInfo {
+    text-align: left;
+}
+
+.forumPostingHeaderControls {
+    text-align: right;
+    white-space: nowrap;
+}
+
+.forumPostingControls {
+    text-align: right;
+    white-space: nowrap;
+}
+
+.forumPostingDocumentWrapper {
+    padding: 5px;
+}
+
+.forumPostingDocumentWrapper .subjectLink {
+    margin-left: 10px;
+    font-weight: normal;
+    line-height: 100%;
+}
+
+.forumPostingDocumentWrapper .subjectIcon {
+    vertical-align: text-top;
+}
+
+.noComments {
+    border-bottom: 1px solid #C3BBB6;
+}
+

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumReplies.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/forumReplies.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumReplies.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumReplies.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,24 @@
+#forumRepliesPlugin\:forumRepliesContainer .commentsDisplay {
+    margin-top: 15px;
+}
+
+#forumRepliesPlugin\:forumRepliesContainer .commentsDisplay .boxShadowed {
+    padding-bottom: 15px;
+}
+
+.forumReplyControls {
+    width: 100%;
+}
+
+.forumReplyRating {
+    text-align: left;
+}
+
+.forumReplyStatus {
+    text-align: right;
+}
+
+.forumReplyControl {
+    text-align: right;
+    width: 200px;
+}
\ No newline at end of file

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumStickyPosting.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/forumStickyPosting.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumStickyPosting.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumStickyPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,37 @@
+.forumPostingHeaderInfoControls {
+    width: 100%;
+    margin-bottom: 10px;
+}
+
+.forumPostingHeaderInfo {
+    text-align: left;
+}
+
+.forumPostingHeaderControls {
+    text-align: right;
+    white-space: nowrap;
+}
+
+.forumPostingControls {
+    text-align: right;
+    white-space: nowrap;
+}
+
+.forumPostingDocumentWrapper {
+    padding: 5px;
+}
+
+.forumPostingDocumentWrapper .subjectLink {
+    margin-left: 10px;
+    font-weight: normal;
+    line-height: 100%;
+}
+
+.forumPostingDocumentWrapper .subjectIcon {
+    vertical-align: text-top;
+}
+
+.noComments {
+    border-bottom: 1px solid #C3BBB6;
+}
+

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumTopics.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/forumTopics.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumTopics.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/css/forumTopics.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,61 @@
+.forumDescriptionTopicControls {
+    width: 100%;
+}
+
+.forumDescription {
+}
+
+.topicControls {
+    text-align: right;
+    white-space: nowrap;
+    padding-left: 10px;
+}
+
+.topicFormContainer {
+}
+
+.topicTableContainer {
+}
+
+.topicPager {
+    width: 100%;
+}
+
+.topicPagerTable {
+    width: 100%;
+    font-weight: bold;
+    padding: 0;
+    margin: 0;
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    text-align: center;
+}
+
+.topicPagerColumn {
+    width: 10%;
+}
+.topicPagerTextColumn {
+    width: 60%;
+}
+
+.topicGotoIcon {
+    margin-left: 5px;
+    margin-right: 5px;
+}
+
+.forumsFeedLink {
+    margin: 10px;
+    float: right;
+    margin-top: -35px;
+    
+}
+
+.forumsFeedLink img {
+    vertical-align: middle;
+    margin-right: 5px;
+}
+
+.forumDescription {
+    text-align: left;
+}

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.posting.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_goto.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_goto.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_goto.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_locked.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_locked.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_locked.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_locked_unread.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_locked_unread.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_locked_unread.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_sticky.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_sticky.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_sticky.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_sticky_unread.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_sticky_unread.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_sticky_unread.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_unread.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_unread.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/inrelationto/img/icon.posting_unread.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumList.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/forumList.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumList.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,48 @@
+.forumListControlsContainer {
+    text-align: right;
+    white-space: nowrap;
+    margin-bottom: 15px;
+}
+
+.forumListTableContainer {
+}
+
+.forumFormContainer {
+    margin-bottom: 20px;
+}
+
+.forumTitle {
+    font-weight: normal;
+    line-height: 180%;
+}
+
+.forumDescription {
+    white-space: normal;
+    line-height: 130%;
+}
+
+.topicGotoIcon {
+    margin-left: 5px;
+    margin-right: 5px;
+}
+
+.forumsFeedLink {
+    margin: 10px;
+    float: right;
+    margin-top: -40px;
+}
+
+.forumsFeedLink img {
+    vertical-align: middle;
+    margin-right: 5px;
+}
+
+.forumFeedLink {
+
+}
+
+.forumFeedLink img {
+    margin-left: 5px;
+    margin-bottom: 3px;
+}
+


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumList.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumPosting.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/forumPosting.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumPosting.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,33 @@
+.forumPostingHeaderInfoControls {
+    width: 100%;
+    margin-bottom: 10px;
+}
+
+.forumPostingHeaderInfo {
+    text-align: left;
+    color:#576c74;
+    font-weight: bold;
+}
+
+.forumPostingHeaderControls {
+    text-align: right;
+    white-space: nowrap;
+}
+
+.forumPostingControls {
+    text-align: right;
+    white-space: nowrap;
+    margin-bottom: 10px;
+}
+
+.forumPostingDocumentWrapper {
+    border-left: 1px solid #d3d2d1;
+    border-right: 1px solid #d3d2d1;
+    border-top: 1px solid #d3d2d1;
+    padding: 5px;
+}
+
+.noComments {
+    border-bottom: 1px solid #C3BBB6;
+}
+


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumPosting.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumReplies.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/forumReplies.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumReplies.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumReplies.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,16 @@
+.forumReplyControls {
+    width: 100%;
+}
+
+.forumReplyRating {
+    text-align: left;
+}
+
+.forumReplyStatus {
+    text-align: right;
+}
+
+.forumReplyControl {
+    text-align: right;
+    width: 200px;
+}
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumReplies.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumStickyPosting.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/forumStickyPosting.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumStickyPosting.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumStickyPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,33 @@
+.forumPostingHeaderInfoControls {
+    width: 100%;
+    margin-bottom: 10px;
+}
+
+.forumPostingHeaderInfo {
+    text-align: left;
+    color:#576c74;
+    font-weight: bold;
+}
+
+.forumPostingHeaderControls {
+    text-align: right;
+    white-space: nowrap;
+}
+
+.forumPostingControls {
+    text-align: right;
+    white-space: nowrap;
+    margin-bottom: 10px;
+}
+
+.forumPostingDocumentWrapper {
+    border-left: 1px solid #d3d2d1;
+    border-right: 1px solid #d3d2d1;
+    border-top: 1px solid #d3d2d1;
+    padding: 5px;
+}
+
+.noComments {
+    border-bottom: 1px solid #C3BBB6;
+}
+


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumStickyPosting.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumTopics.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/forumTopics.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumTopics.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumTopics.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,60 @@
+.forumDescriptionTopicControls {
+    width: 100%;
+}
+
+.forumDescription {
+}
+
+.topicControls {
+    text-align: right;
+    white-space: nowrap;
+    padding-left: 10px;
+}
+
+.topicFormContainer {
+}
+
+.topicTableContainer {
+}
+
+.topicPager {
+    width: 100%;
+}
+
+.topicPagerTable {
+    width: 100%;
+    font-weight: bold;
+    padding: 0;
+    margin: 0;
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    text-align: center;
+}
+
+.topicPagerColumn {
+    width: 10%;
+}
+.topicPagerTextColumn {
+    width: 60%;
+}
+
+.topicGotoIcon {
+    margin-left: 5px;
+    margin-right: 5px;
+}
+
+.forumsFeedLink {
+    margin: 10px;
+    float: right;
+    margin-top: -35px;
+}
+
+.forumsFeedLink img {
+    vertical-align: middle;
+    margin-right: 5px;
+}
+
+.forumDescription {
+    text-align: left;
+}
\ No newline at end of file


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/css/forumTopics.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_goto.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_goto.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_goto.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_locked.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_locked.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_locked.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_locked_unread.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_locked_unread.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_locked_unread.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_sticky.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_sticky.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_sticky.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_sticky_unread.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_sticky_unread.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_sticky_unread.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_unread.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_unread.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/img/icon.posting_unread.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorld.java
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorld.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorld.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,69 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.helloWorld;
+
+import org.jboss.seam.annotations.*;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.preferences.Preferences;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("helloWorld")
+ at Scope(ScopeType.PAGE)
+public class HelloWorld implements Serializable {
+
+    @Logger
+    Log log;
+
+    @In
+    Preferences preferences;
+
+    @In
+    Map<String,String> messages;
+
+    String greeting;
+
+    public String getHello(WikiPluginMacro pluginMacro) {
+        HelloWorldPreferences prefs = preferences.get(HelloWorldPreferences.class, pluginMacro);
+        return getGreeting() + " '" + prefs.getMessage() + "'";
+    }
+
+    public String getGreeting() {
+        if (greeting == null) return messages.get("hw.defaultMessage");
+        return greeting;
+    }
+
+    public void setGreeting(String greeting) {
+        this.greeting = greeting;
+    }
+
+    public void printAMessage() {
+        log.info("### This is just a log message");
+    }
+
+    @Observer("Macro.helloWorld.callback.viewBuild")
+    public void onViewBuild(WikiPluginMacro pluginMacro) {
+        log.info("### View build event triggered: " + pluginMacro);
+    }
+
+    @Observer("Macro.helloWorld.callback.beforeViewRender")
+    public void onBeforeViewRender(WikiPluginMacro pluginMacro) {
+        log.info("### Before render event triggered" + pluginMacro);
+    }
+
+    @Observer("Macro.helloWorld.callback.afterViewRender")
+    public void onAfterViewRender(WikiPluginMacro pluginMacro) {
+        log.info("### After render event triggered" + pluginMacro);
+    }
+
+}

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorld.plugin.xml
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorld.plugin.xml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorld.plugin.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin key="hw"
+        xmlns="http://jboss.com/products/seam/wiki/plugin"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://jboss.com/products/seam/wiki/plugin
+                            classpath://org/jboss/seam/wiki/core/plugin/plugin-1.0.xsd">
+
+    <plugin-info version="1.0">
+        <application-version min="1.0" max="1.0"/>
+        <vendor name="Red Hat Inc." url="http://www.seamframework.org/"/>
+    </plugin-info>
+
+    <macro key="helloWorld" name="helloWorld">
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <applicable-to content="true"/>
+    </macro>
+
+</plugin>
+

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorldPreferences.java
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorldPreferences.java	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/HelloWorldPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.seam.wiki.plugin.helloWorld;
+
+import org.hibernate.validator.Length;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+import org.jboss.seam.wiki.preferences.annotations.PreferenceProperty;
+import org.jboss.seam.wiki.preferences.annotations.Preferences;
+
+/**
+ * @author Christian Bauer
+ */
+ at Preferences(
+    name = "HelloWorld",
+    description = "#{messages['hw.preferences.Description']}",
+    mappedTo = "hw.helloWorld"
+)
+public class HelloWorldPreferences {
+
+    @PreferenceProperty(
+        description = "#{messages['hw.preferences.property.Message']}",
+        visibility = {PreferenceVisibility.INSTANCE},
+        editorIncludeName = "AdaptiveTextInput"
+    )
+    @Length(min = 0, max = 255)
+    private String message;
+
+    public String getMessage() {
+        return message;
+    }
+}

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/i18n/messages_helloWorld_en.properties
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/i18n/messages_helloWorld_en.properties	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/i18n/messages_helloWorld_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,11 @@
+hw.label=Hello World
+hw.description=A minimal Hello World example
+hw.helloWorld.label=Hello World Macro
+hw.helloWorld.description=Shows a message and some example forms
+
+hw.preferences.description=Plugin: Hello World
+hw.preferences.property.message=Greeting message
+
+hw.defaultMessage=Hello World, the message is:
+hw.justAMessage=Hello World!
+hw.button.UpdateGreeting=Update Greeting
\ No newline at end of file

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/templates/helloWorld.xhtml
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/templates/helloWorld.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/templates/helloWorld.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,68 @@
+<wiki:plugin
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:f="http://java.sun.com/jsf/core"
+       xmlns:wiki="http://jboss.com/products/seam/wiki"
+       xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <h:panelGrid columns="2" styleClass="justABox">
+
+        <h:outputText value="The backing bean says: "/>
+        <h:panelGrid id="helloWorldOutput" columns="2" styleClass="someBackground">
+            <h:graphicImage value="#{currentMacro.requestImagePath}/example.gif"/>
+            <s:span styleClass="justAMessage">
+                <h:outputText value="#{helloWorld.getHello(currentMacro)}"/>
+            </s:span>
+        </h:panelGrid>
+
+        <h:outputText value="Regular JSF form:"/>
+        <s:div id="theRegularForm">
+            <h:form>
+                <h:inputText value="#{helloWorld.greeting}" size="30"/>
+                <h:commandLink styleClass="buttonNonpersistent">
+                    <h:outputText styleClass="buttonLabel" value="#{currentMacro.getMessage('button.UpdateGreeting')}"/>
+                </h:commandLink>
+            </h:form>
+        </s:div>
+
+        <h:outputText value="AJAX form with partial re-render:"/>
+        <s:div id="theFirstAjaxForm">
+            <h:form>
+                <h:inputText value="#{helloWorld.greeting}" size="30"/>
+                <a:commandLink styleClass="buttonNonpersistent"
+                               reRender="helloWorldOutput, theRegularForm, theFirstAjaxForm, theSecondAjaxForm"
+                               status="globalStatus">
+                    <h:outputText styleClass="buttonLabel" value="#{currentMacro.getMessage('button.UpdateGreeting')}"/>
+                </a:commandLink>
+            </h:form>
+        </s:div>
+
+        <h:outputText value="AJAX form with automatic re-render:"/>
+        <s:div id="theSecondAjaxForm">
+            <h:form>
+                <h:inputText value="#{helloWorld.greeting}" size="30">
+                    <a:support action="#{helloWorld.printAMessage()}"
+                               event="onkeyup"
+                               requestDelay="3000"
+                               ignoreDupResponses="true"
+                               ajaxSingle="true"
+                               eventsQueue="ajaxEventQueue"
+                               reRender="helloWorldOutput, theRegularForm, theFirstAjaxForm"
+                               status="globalStatus"/>
+                </h:inputText>
+            </h:form>
+        </s:div>
+
+        <h:outputText value="Message in preferences: "/>
+        <h:outputText value="#{preferences.get('HelloWorld', currentMacro).message}"/>
+
+        <h:outputText value="The other template says: "/>
+        <ui:include src="justAnotherTemplate.xhtml"/>
+
+    </h:panelGrid>
+
+    <wiki:loadStyle src="#{currentMacro.requestCSSPath}/anotherOne.css"/>
+
+</wiki:plugin>
\ No newline at end of file

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/templates/justAnotherTemplate.xhtml
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/templates/justAnotherTemplate.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/templates/justAnotherTemplate.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,9 @@
+<s:fragment
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <h:outputText value="#{currentMacro.getMessage('justAMessage')}"/>
+
+</s:fragment>
\ No newline at end of file

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/css/anotherOne.css
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/css/anotherOne.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/css/anotherOne.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,3 @@
+.someBackground {
+    background-color: lightgreen;
+}
\ No newline at end of file

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/css/helloWorld.css
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/css/helloWorld.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/css/helloWorld.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,9 @@
+.justABox {
+    background: #fff url(#{currentMacro.requestImagePath}/background.gif) 0 0 repeat-x;
+    border: 1px solid green;
+    margin: 20px;
+}
+
+.justAMessage {
+    color: green;
+}
\ No newline at end of file

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/img/background.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/th.bg.inverse.gif)
===================================================================
(Binary files differ)

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/img/example.gif
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/helloWorld/themes/default/img/example.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira (from rev 8123, trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/jiraIssueList)

Added: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/Jira.plugin.xml
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/Jira.plugin.xml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/Jira.plugin.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin key="jira"
+        xmlns="http://jboss.com/products/seam/wiki/plugin"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://jboss.com/products/seam/wiki/plugin
+                            classpath://org/jboss/seam/wiki/core/plugin/plugin-1.0.xsd">
+
+    <plugin-info version="1.0">
+        <application-version min="1.0" max="1.0"/>
+        <vendor name="Red Hat Inc." url="http://www.seamframework.org/"/>
+    </plugin-info>
+
+    <macro key="issueList" name="jiraIssueList">
+        <skins>
+            <skin name="d"/>
+            <skin name="m"/>
+        </skins>
+        <applicable-to content="true"/>
+    </macro>
+
+</plugin>
+

Modified: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/JiraIssueList.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/jiraIssueList/JiraIssueList.java	2008-05-07 12:21:20 UTC (rev 8123)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/JiraIssueList.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -4,18 +4,20 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package org.jboss.seam.wiki.plugin.jiraIssueList;
+package org.jboss.seam.wiki.plugin.jira;
 
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Observer;
-import org.jboss.seam.ScopeType;
+import org.jboss.seam.wiki.connectors.jira.JiraDAO;
 import org.jboss.seam.wiki.connectors.jira.JiraIssue;
-import org.jboss.seam.wiki.connectors.jira.JiraDAO;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.preferences.Preferences;
 
+import java.io.Serializable;
+import java.util.Collections;
 import java.util.List;
-import java.io.Serializable;
 
 /**
  * @author Christian Bauer
@@ -24,32 +26,32 @@
 @Scope(ScopeType.PAGE)
 public class JiraIssueList implements Serializable {
 
-    @In("#{preferences.get('JiraIssueList', currentMacro)}")
-    JiraIssueListPreferences prefs;
+    public static final String MACRO_ATTR_ISSUELIST = "jiraIssueList";
 
     @In
     JiraDAO jiraDAO;
 
-    private List<JiraIssue> issues;
+    public List<JiraIssue> getIssues(WikiPluginMacro macro) {
+        List<JiraIssue> issueList = (List<JiraIssue>)macro.getAttributes().get(MACRO_ATTR_ISSUELIST);
+        if (issueList == null) {
 
-    public List<JiraIssue> getIssues() {
-        if (issues == null) loadIssues();
-        return issues;
-    }
+            JiraIssueListPreferences prefs = Preferences.instance().get(JiraIssueListPreferences.class, macro);
 
-    @Observer(value = "Macro.render.jiraIssueList", create = false)
-    public void loadIssues() {
+            if (prefs.getUrl() != null && prefs.getUrl().length() > 0
+                && prefs.getFilterId() != null && prefs.getFilterId().length() > 0) {
 
-        if (prefs.getUrl() != null && prefs.getUrl().length() > 0
-            && prefs.getFilterId() != null && prefs.getFilterId().length() > 0) {
+                Integer maxResults = Integer.MAX_VALUE;
+                if (prefs.getNumberOfIssues() != null) {
+                    maxResults = prefs.getNumberOfIssues().intValue();
+                }
 
-            Integer maxResults = Integer.MAX_VALUE;
-            if (prefs.getNumberOfIssues() != null) {
-                maxResults = prefs.getNumberOfIssues().intValue();
+                issueList = jiraDAO.getJiraIssues(prefs.getUrl(), prefs.getUsername(), prefs.getPassword(), prefs.getFilterId(), maxResults);
+                macro.getAttributes().put(MACRO_ATTR_ISSUELIST, issueList);
+            } else {
+                macro.getAttributes().put(MACRO_ATTR_ISSUELIST, Collections.EMPTY_LIST);
             }
-
-            issues = jiraDAO.getJiraIssues(prefs.getUrl(), prefs.getUsername(), prefs.getPassword(), prefs.getFilterId(), maxResults);
         }
-
+        return (List<JiraIssue>)macro.getAttributes().get(MACRO_ATTR_ISSUELIST);
     }
+    
 }

Modified: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/JiraIssueListPreferences.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/jiraIssueList/JiraIssueListPreferences.java	2008-05-07 12:21:20 UTC (rev 8123)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/JiraIssueListPreferences.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -4,7 +4,7 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package org.jboss.seam.wiki.plugin.jiraIssueList;
+package org.jboss.seam.wiki.plugin.jira;
 
 import org.jboss.seam.wiki.preferences.annotations.Preferences;
 import org.jboss.seam.wiki.preferences.annotations.PreferenceProperty;
@@ -18,11 +18,15 @@
 /**
  * @author Christian Bauer
  */
- at Preferences(name = "JiraIssueList", description = "#{messages['jiraIssueList.preferences.Name']}")
+ at Preferences(
+    name = "JiraIssueList",
+    description = "#{messages['jira.issueList.preferences.description']}",
+    mappedTo = "jira.issueList"
+)
 public class JiraIssueListPreferences implements Serializable {
 
     @PreferenceProperty(
-        description = "#{messages['jiraIssueList.preferences.Title']}",
+        description = "#{messages['jira.issueList.preferences.property.title']}",
         visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
         editorIncludeName = "AdaptiveTextInput"
     )
@@ -31,7 +35,7 @@
     private String title;
 
     @PreferenceProperty(
-        description = "#{messages['jiraIssueList.preferences.Url']}",
+        description = "#{messages['jira.issueList.preferences.property.url']}",
         visibility = {PreferenceVisibility.INSTANCE},
         editorIncludeName = "AdaptiveTextInput"
     )
@@ -39,7 +43,7 @@
     private String url;
 
     @PreferenceProperty(
-        description = "#{messages['jiraIssueList.preferences.Username']}",
+        description = "#{messages['jira.issueList.preferences.property.username']}",
         visibility = {PreferenceVisibility.INSTANCE},
         editorIncludeName = "AdaptiveTextInput"
     )
@@ -47,7 +51,7 @@
     private String username;
 
     @PreferenceProperty(
-        description = "#{messages['jiraIssueList.preferences.FilterId']}",
+        description = "#{messages['jira.issueList.preferences.property.filterId']}",
         visibility = {PreferenceVisibility.INSTANCE},
         editorIncludeName = "AdaptiveTextInput"
     )
@@ -55,7 +59,7 @@
     private String password;
 
     @PreferenceProperty(
-        description = "#{messages['jiraIssueList.preferences.Password']}",
+        description = "#{messages['jira.issueList.preferences.property.password']}",
         visibility = {PreferenceVisibility.INSTANCE},
         editorIncludeName = "AdaptiveTextInput"
     )
@@ -63,7 +67,7 @@
     private String filterId;
 
     @PreferenceProperty(
-        description = "#{messages['jiraIssueList.preferences.NumberOfIssues']}",
+        description = "#{messages['jira.issueList.preferences.property.numberOfIssues']}",
         visibility = {PreferenceVisibility.INSTANCE},
         editorIncludeName = "NumberRange"
     )
@@ -72,7 +76,7 @@
     private Long numberOfIssues;
 
     @PreferenceProperty(
-        description = "#{messages['jiraIssueList.preferences.TruncateSummary']}",
+        description = "#{messages['jira.issueList.preferences.property.truncateSummary']}",
         visibility = {PreferenceVisibility.SYSTEM, PreferenceVisibility.INSTANCE},
         editorIncludeName = "NumberRange"
     )

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/i18n/messages_jiraIssueList_en.properties (from rev 8123, trunk/examples/wiki/src/etc/i18n/messages_jiraIssueList_en.properties)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/i18n/messages_jiraIssueList_en.properties	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/i18n/messages_jiraIssueList_en.properties	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,16 @@
+jira.label=JIRA
+jira.description=Remote access to a JIRA issue tracking system
+
+jira.issueList.label=JIRA Issue List
+jira.issueList.description=Display a list of (filtered) JIRA issues
+
+jira.issueList.preferences.description=Plugin: JIRA Issue List
+jira.issueList.preferences.property.title=Title of isse list box
+jira.issueList.preferences.property.url=URL of JIRA website
+jira.issueList.preferences.property.username=JIRA XML-RPC remote username
+jira.issueList.preferences.property.password=JIRA XML-RPC remote password
+jira.issueList.preferences.property.filterId=ID of JIRA filter for remote request
+jira.issueList.preferences.property.numberOfIssues=Number of issues shown in list
+jira.issueList.preferences.property.truncateSummary=Truncate summary after characters
+
+jira.issueList.label.NoIssuesFound=No issues found.

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/templates/jiraIssueList.xhtml (from rev 8123, trunk/examples/wiki/view/plugins/jiraIssueList/plugin.xhtml)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/templates/jiraIssueList.xhtml	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/templates/jiraIssueList.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,63 @@
+<wiki:plugin
+       xmlns="http://www.w3.org/1999/xhtml"
+       xmlns:ui="http://java.sun.com/jsf/facelets"
+       xmlns:h="http://java.sun.com/jsf/html"
+       xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+       xmlns:f="http://java.sun.com/jsf/core"
+       xmlns:wiki="http://jboss.com/products/seam/wiki"
+       xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <s:div styleClass="jiraIssueList box">
+
+        <s:div styleClass="boxHeader">
+            <h:outputText value="#{preferences.get('JiraIssueList', currentMacro).title}"/>
+        </s:div>
+
+        <div class="boxContent">
+
+            <h:dataTable value="#{jiraIssueList.getIssues(currentMacro)}" var="i"
+                         rendered="#{not empty jiraIssueList.getIssues(currentMacro) and
+                                    jiraIssueList.getIssues(currentMacro).size() > 0}"
+                         styleClass="datatable jiraIssueListTable"
+                         columnClasses="onePercentColumn alignCenter priorityColumn,
+                                        defaultColumn alignLeft summaryColumn wrapWhitespace"
+                         rowClasses="rowOdd, rowEven"
+                         cellpadding="0" cellspacing="0" border="0">
+
+                <h:column>
+                    <h:graphicImage value="#{imagePath}/icon.priority.#{i.priorityIcon}.gif" width="18" height="18"/>
+                </h:column>
+
+                <h:column>
+
+                    <s:div styleClass="jiraIssueComponents smallFont">
+                        <ui:repeat var="comp" value="#{i.componentNames}">
+                            <h:outputText value="#{comp}"/>
+                            <h:outputText rendered="#{i.componentNames.indexOf(comp) &lt; i.componentNames.size()-1}"
+                                          value=",&#160; "/>
+                        </ui:repeat>
+                        <h:outputText value="&#160;" rendered="#{empty i.componentNames}"/>
+                    </s:div>
+
+                    <h:outputLink value="#{preferences.get('JiraIssueList', currentMacro).url}/browse/#{i.key}">
+                        <h:outputText
+                                value="(#{i.key})&#160; #{wiki:truncateString(i.summary, preferences.get('JiraIssueList', currentMacro).truncateSummary, '...')}"/>
+                    </h:outputLink>
+
+                </h:column>
+
+            </h:dataTable>
+
+        </div>
+
+        <s:div styleClass="jiraIssueListEmpty"
+               rendered="#{empty jiraIssueList.getIssues(currentMacro) or
+                                 jiraIssueList.getIssues(currentMacro).size() == 0}">
+            <h:outputText value="#{messages['jira.issueList.label.NoIssuesFound']}"/>
+        </s:div>
+
+        <div class="boxFooter"/>
+
+    </s:div>
+
+</wiki:plugin>
\ No newline at end of file

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/css/jiraIssueList.css (from rev 8123, trunk/examples/wiki/view/themes/default/css/jiraIssueList.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/css/jiraIssueList.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/css/jiraIssueList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,17 @@
+.jiraIssueList {}
+
+.jiraIssueListTable {}
+
+.jiraIssueListTable .priorityColumn {}
+
+.jiraIssueListTable .summaryColumn {}
+
+.jiraIssueListTable .jiraIssueComponents {
+    text-align: right;
+}
+
+.jiraIssueListEmpty {
+    padding: 5px;
+}
+
+

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.blocker.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.priority.blocker.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.blocker.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.critical.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.priority.critical.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.critical.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.major.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.priority.major.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.major.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.minor.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.priority.minor.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.minor.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.optional.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.priority.optional.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.optional.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.trivial.gif (from rev 8123, trunk/examples/wiki/view/themes/default/img/icon.priority.trivial.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/default/img/icon.priority.trivial.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/css/jiraIssueList.css (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/css/jiraIssueList.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/css/jiraIssueList.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/css/jiraIssueList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,17 @@
+.jiraIssueList {}
+
+.jiraIssueListTable {}
+
+.jiraIssueListTable .priorityColumn {}
+
+.jiraIssueListTable .summaryColumn {}
+
+.jiraIssueListTable .jiraIssueComponents {
+    text-align: right;
+}
+
+.jiraIssueListEmpty {
+    padding: 5px;
+}
+
+

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.blocker.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.blocker.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.blocker.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.critical.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.critical.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.critical.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.major.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.major.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.major.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.minor.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.minor.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.minor.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.optional.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.optional.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.optional.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.trivial.gif (from rev 8123, trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.trivial.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/inrelationto/img/icon.priority.trivial.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/css/jiraIssueList.css (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/css/jiraIssueList.css)
===================================================================
--- trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/css/jiraIssueList.css	                        (rev 0)
+++ trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/css/jiraIssueList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,19 @@
+.jiraIssueList {}
+
+.jiraIssueListTable {}
+
+.jiraIssueListTable .priorityColumn {}
+
+.jiraIssueListTable .summaryColumn {}
+
+.jiraIssueListTable .jiraIssueComponents {
+    text-align: right;
+}
+
+.jiraIssueListEmpty {
+    border-left: 1px solid #d3d2d1;
+    border-right: 1px solid #d3d2d1;
+    padding: 5px;
+}
+
+

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.blocker.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.blocker.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.blocker.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.critical.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.critical.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.critical.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.major.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.major.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.major.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.minor.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.minor.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.minor.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.optional.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.optional.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.optional.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Copied: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.trivial.gif (from rev 8123, trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.trivial.gif)
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/jira/themes/sfwkorg/img/icon.priority.trivial.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml
===================================================================
--- trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -283,13 +283,12 @@
     <WIKI_FILE
         NODE_ID="9" FILE_REVISION="0"/>
     <WIKI_DOCUMENT
-        NODE_ID="9" CONTENT="Testdocument Four&#xA;&#xA;[&lt;=jiraIssueList[url=http://jira.jboss.com/jira][username=myusername][password=mypassword][filterId=12311591][numberOfIssues=10]]&#xA;&#xA;[&lt;=forumTopPosters[forumLink=Forums|Seam Users Forum]]&#xA;"
+        NODE_ID="9" CONTENT="Testdocument Four&#xA;&#xA;[&lt;=helloWorld[message=Foo]]&#xA;&#xA;[&lt;=jiraIssueList[url=http://jira.jboss.com/jira][username=myusername][password=mypassword][filterId=12311591][numberOfIssues=10]]&#xA;&#xA;[&lt;=forumTopPosters[forumLink=Forums|Seam Users Forum]]&#xA;"
         HEADER="[NULL]" FOOTER="[NULL]"
-        HEADER_MACROS="[NULL]" CONTENT_MACROS="jiraIssueList forumTopPosters" FOOTER_MACROS="[NULL]"
+        HEADER_MACROS="[NULL]" CONTENT_MACROS="helloWorld jiraIssueList forumTopPosters" FOOTER_MACROS="[NULL]"
         NAME_AS_TITLE="true" ENABLE_COMMENTS="true" ENABLE_COMMENT_FORM="true" ENABLE_COMMENTS_ON_FEEDS="true"/>
 
 
-
     <WIKI_NODE
         NODE_ID="10" OBJ_VERSION="0" RATING="0" PARENT_NODE_ID="6"
         AREA_NR="3" NAME="One.Comment11967298211870" WIKINAME="OneComment11967298211870"

Modified: trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/EditMacros.java
===================================================================
--- trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/EditMacros.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/EditMacros.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -9,7 +9,7 @@
 import org.dbunit.operation.DatabaseOperation;
 import org.jboss.seam.core.Conversation;
 import org.jboss.seam.wiki.core.action.DocumentHome;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
 import org.jboss.seam.wiki.test.util.DBUnitSeamTest;
 import org.testng.annotations.Test;
 
@@ -47,7 +47,7 @@
                 assert docHome.getInstance().getFooterMacros().size() == 2;
 
                 boolean macroFound = false;
-                for (WikiMacro wikiMacro : docHome.getInstance().getContentMacros()) {
+                for (WikiTextMacro wikiMacro : docHome.getInstance().getContentMacros()) {
                     if (wikiMacro.getName().equals("lastModifiedDocuments")) {
                         assert wikiMacro.getParams().size()==2;
                         assert wikiMacro.getParams().get("documentTitleLength").equals("60");
@@ -91,11 +91,11 @@
                 assert docHome.getInstance().getFooterMacros().size() == 2;
 
                 // Check WikiMacro.equals() as well
-                WikiMacro macro = new WikiMacro("contentMacro");
+                WikiTextMacro macro = new WikiTextMacro("contentMacro");
                 macro.setPosition(0);
 
                 boolean macroFound = false;
-                for (WikiMacro wikiMacro : docHome.getInstance().getContentMacros()) {
+                for (WikiTextMacro wikiMacro : docHome.getInstance().getContentMacros()) {
                     if (wikiMacro.equals(macro)) {
                         assert wikiMacro.getParams().size()==1;
                         assert wikiMacro.getParams().get("param").equals("value");

Modified: trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/model/DocumentMacroTests.java
===================================================================
--- trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/model/DocumentMacroTests.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/model/DocumentMacroTests.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -10,12 +10,12 @@
 import org.jboss.seam.wiki.core.action.DocumentHome;
 import org.jboss.seam.wiki.core.model.WikiDocument;
 import org.jboss.seam.wiki.core.model.WikiDocumentDefaults;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
 import org.jboss.seam.wiki.test.util.DBUnitSeamTest;
 import org.testng.annotations.Test;
 
+import java.util.ArrayList;
 import java.util.List;
-import java.util.ArrayList;
 
 /**
  * @author Christian Bauer
@@ -53,7 +53,7 @@
                 assert doc.getHeader().indexOf("foo") == doc.getHeader().length()-3;
 
                 doc.removeHeaderMacros("testMacro1");
-                WikiMacro replacement = new WikiMacro("testMacro3");
+                WikiTextMacro replacement = new WikiTextMacro("testMacro3");
                 replacement.getParams().put("p1", "value1");
                 replacement.getParams().put("p2", "value2");
                 doc.addHeaderMacro(replacement);
@@ -130,10 +130,10 @@
 
         WikiDocumentDefaults defaults = new WikiDocumentDefaults() {
             @Override
-            public List<WikiMacro> getContentMacros() {
-                return new ArrayList<WikiMacro>() {{
-                   add(new WikiMacro(0, "contentMacro1"));
-                   add(new WikiMacro(1, "contentMacro2"));
+            public List<WikiTextMacro> getContentMacros() {
+                return new ArrayList<WikiTextMacro>() {{
+                   add(new WikiTextMacro("contentMacro1", 0));
+                   add(new WikiTextMacro("contentMacro2", 1));
                 }};
             }
             @Override
@@ -141,10 +141,10 @@
                 return "foo";
             }
             @Override
-            public List<WikiMacro> getHeaderMacros() {
-                return new ArrayList<WikiMacro>() {{
-                   add(new WikiMacro(0, "headerMacro1"));
-                   add(new WikiMacro(1, "headerMacro2"));
+            public List<WikiTextMacro> getHeaderMacros() {
+                return new ArrayList<WikiTextMacro>() {{
+                   add(new WikiTextMacro("headerMacro1", 0));
+                   add(new WikiTextMacro("headerMacro2", 1));
                 }};
             }
             @Override
@@ -152,10 +152,10 @@
                 return "bar";
             }
             @Override
-            public List<WikiMacro> getFooterMacros() {
-                return new ArrayList<WikiMacro>() {{
-                   add(new WikiMacro(0, "footerMacro1"));
-                   add(new WikiMacro(1, "footerMacro2"));
+            public List<WikiTextMacro> getFooterMacros() {
+                return new ArrayList<WikiTextMacro>() {{
+                   add(new WikiTextMacro("footerMacro1", 0));
+                   add(new WikiTextMacro("footerMacro2", 1));
                 }};
             }
             @Override

Modified: trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/plugin/TopicHomeTests.java
===================================================================
--- trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/plugin/TopicHomeTests.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/plugin/TopicHomeTests.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -38,6 +38,7 @@
                 WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
                 WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l);
                 Contexts.getPageContext().set("currentDirectory", forumDir);
+                Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile());
             }
 
             protected void invokeApplication() throws Exception {
@@ -56,6 +57,7 @@
                 WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
                 WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l);
                 Contexts.getPageContext().set("currentDirectory", forumDir);
+                Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile());
             }
 
             protected void invokeApplication() throws Exception {
@@ -103,6 +105,7 @@
                 WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
                 WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l);
                 Contexts.getPageContext().set("currentDirectory", forumDir);
+                Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile());
             }
 
             protected void invokeApplication() throws Exception {
@@ -121,6 +124,7 @@
                 WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
                 WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l);
                 Contexts.getPageContext().set("currentDirectory", forumDir);
+                Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile());
             }
 
             protected void invokeApplication() throws Exception {
@@ -167,6 +171,7 @@
                 WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
                 WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l);
                 Contexts.getPageContext().set("currentDirectory", forumDir);
+                Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile());
             }
 
             protected void invokeApplication() throws Exception {
@@ -185,6 +190,7 @@
                 WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
                 WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l);
                 Contexts.getPageContext().set("currentDirectory", forumDir);
+                Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile());
             }
 
             protected void invokeApplication() throws Exception {

Modified: trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/InstancePreferencesTests.java
===================================================================
--- trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/InstancePreferencesTests.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/InstancePreferencesTests.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -7,16 +7,16 @@
 package org.jboss.seam.wiki.test.preferences;
 
 import org.dbunit.operation.DatabaseOperation;
+import org.jboss.seam.core.Conversation;
 import org.jboss.seam.wiki.core.action.DocumentHome;
 import org.jboss.seam.wiki.core.engine.WikiTextParser;
+import org.jboss.seam.wiki.core.model.WikiTextMacro;
+import org.jboss.seam.wiki.core.plugin.WikiPluginMacro;
+import org.jboss.seam.wiki.core.plugin.PluginRegistry;
 import org.jboss.seam.wiki.core.renderer.NullWikiTextRenderer;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
-import org.jboss.seam.wiki.core.ui.UIWikiFormattedText;
+import org.jboss.seam.wiki.plugin.basic.LastModifiedDocumentsPreferences;
 import org.jboss.seam.wiki.preferences.Preferences;
 import org.jboss.seam.wiki.test.util.DBUnitSeamTest;
-import org.jboss.seam.wiki.plugin.lastmodified.LastModifiedDocumentsPreferences;
-import org.jboss.seam.core.Conversation;
-import org.jboss.seam.contexts.Contexts;
 import org.testng.annotations.Test;
 
 /**
@@ -46,12 +46,13 @@
 
                 WikiTextParser parser = new WikiTextParser(docHome.getInstance().getContent(), true, false);
                 parser.setRenderer(new NullWikiTextRenderer() {
-                    public String renderMacro(WikiMacro macro) {
-                        Contexts.getEventContext().set(UIWikiFormattedText.CURRENT_MACRO_EVENT_VARIABLE, macro);
+                    @Override
+                    public String renderMacro(WikiTextMacro macro) {
 
                         if (macro.getName().equals("lastModifiedDocuments")) {
+                            WikiPluginMacro pluginMacro = PluginRegistry.instance().createWikiPluginMacro(macro);
                             LastModifiedDocumentsPreferences lmdPrefs =
-                                    Preferences.getInstance(LastModifiedDocumentsPreferences.class, "currentMacro");
+                                    Preferences.instance().get(LastModifiedDocumentsPreferences.class, pluginMacro);
                             assert lmdPrefs.getDocumentTitleLength().equals(60l);
                         }
 
@@ -106,12 +107,13 @@
 
                 WikiTextParser parser = new WikiTextParser(docHome.getInstance().getContent(), true, false);
                 parser.setRenderer(new NullWikiTextRenderer() {
-                    public String renderMacro(WikiMacro macro) {
-                        Contexts.getEventContext().set(UIWikiFormattedText.CURRENT_MACRO_EVENT_VARIABLE, macro);
+                    @Override
+                    public String renderMacro(WikiTextMacro macro) {
 
                         if (macro.getName().equals("lastModifiedDocuments")) {
+                            WikiPluginMacro pluginMacro = PluginRegistry.instance().createWikiPluginMacro(macro);
                             LastModifiedDocumentsPreferences lmdPrefs =
-                                    Preferences.getInstance(LastModifiedDocumentsPreferences.class, "currentMacro");
+                                    Preferences.instance().get(LastModifiedDocumentsPreferences.class, pluginMacro);
                             assert lmdPrefs.getDocumentTitleLength().equals(66l);
                         }
 

Modified: trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/SystemPreferencesTests.java
===================================================================
--- trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/SystemPreferencesTests.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/SystemPreferencesTests.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -38,7 +38,7 @@
             }
 
             protected void renderResponse() throws Exception {
-                WikiPreferences wikiPrefs = Preferences.getInstance(WikiPreferences.class);
+                WikiPreferences wikiPrefs = Preferences.instance().get(WikiPreferences.class);
                 assert wikiPrefs.getShowDocumentCreatorHistory();
                 assert wikiPrefs.getShowTags();
                 assert wikiPrefs.getDefaultDocumentId().equals(6l);
@@ -101,7 +101,7 @@
             }
 
             protected void renderResponse() throws Exception {
-                WikiPreferences wikiPrefs = Preferences.getInstance(WikiPreferences.class);
+                WikiPreferences wikiPrefs = Preferences.instance().get(WikiPreferences.class);
                 assert wikiPrefs.getPermlinkSuffix().equals(".newsuffix");
             }
 

Modified: trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/UserPreferencesTests.java
===================================================================
--- trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/UserPreferencesTests.java	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/preferences/UserPreferencesTests.java	2008-05-10 02:37:42 UTC (rev 8148)
@@ -88,7 +88,7 @@
             }
 
             protected void renderResponse() throws Exception {
-                DocumentEditorPreferences docEditorPrefs = Preferences.getInstance(DocumentEditorPreferences.class);
+                DocumentEditorPreferences docEditorPrefs = Preferences.instance().get(DocumentEditorPreferences.class);
                 assert !docEditorPrefs.getMinorRevisionEnabled();
             }
 
@@ -105,7 +105,7 @@
             }
 
             protected void renderResponse() throws Exception {
-                DocumentEditorPreferences docEditorPrefs = Preferences.getInstance(DocumentEditorPreferences.class);
+                DocumentEditorPreferences docEditorPrefs = Preferences.instance().get(DocumentEditorPreferences.class);
                 assert docEditorPrefs.getMinorRevisionEnabled();
             }
 

Modified: trunk/examples/wiki/view/adminHome_d.xhtml
===================================================================
--- trunk/examples/wiki/view/adminHome_d.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/adminHome_d.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -75,6 +75,10 @@
                                             accesskey="#{messages['lacewiki.button.adminHome.RolesPermissions.accesskey']}">
                 <h:outputText escape="false" value="#{messages['lacewiki.button.adminHome.RolesPermissions']}"/>
             </a></li>
+            <li id="pluginsTab"><a href="#plugins"
+                                            accesskey="#{messages['lacewiki.button.adminHome.Plugins.accesskey']}">
+                <h:outputText escape="false" value="#{messages['lacewiki.button.adminHome.Plugins']}"/>
+            </a></li>
             <li id="linkProtocolsTab"><a href="#linkProtocols"
                                          accesskey="#{messages['lacewiki.button.adminHome.LinkProtocols.accesskey']}">
                 <h:outputText escape="false" value="#{messages['lacewiki.button.adminHome.LinkProtocols']}"/>
@@ -155,6 +159,10 @@
             Not Implemented
         </div>
 
+        <div id="plugins">
+            <ui:include src="includes/admin/pluginEditor.xhtml"/>
+        </div>
+
         <div id="linkProtocols">
             <s:div id="linkProtocolsRegion" styleClass="formFields" style="padding: 20px;">
             <a:region>

Modified: trunk/examples/wiki/view/dirDisplay_d.xhtml
===================================================================
--- trunk/examples/wiki/view/dirDisplay_d.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/dirDisplay_d.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -91,7 +91,7 @@
 
     <h:outputLink value="#{wikiURLRenderer.renderFeedURL(directoryBrowser.instance.feed, null, null)}"
                   styleClass="linkNavigation" rendered="#{not empty directoryBrowser.instance.feed}">
-        <h:graphicImage styleClass="feedIcon" value="#{themePath}/img/icon.atom.gif" width="18" height="18"/>
+        <h:graphicImage styleClass="feedIcon" value="#{imagePath}/icon.atom.gif" width="18" height="18"/>
         <h:outputText value="#{messages['lacewiki.button.DirectoryFeed']}"/>
     </h:outputLink>
 
@@ -135,7 +135,7 @@
                                status="globalStatus"
                                reRender="control, directoryBrowser, messageBoxContainer"
                                rendered="#{!empty directoryBrowser.instance.parent and s:hasPermission('Node','read',directoryBrowser.instance.parent)}">
-                    <h:graphicImage styleClass="icon" value="#{themePath}/img/icon.dirup.gif" width="18" height="20"/>
+                    <h:graphicImage styleClass="icon" value="#{imagePath}/icon.dirup.gif" width="18" height="20"/>
                     <h:outputText styleClass="text" value=".."/>
                 </a:commandLink>
             </s:div>
@@ -171,7 +171,7 @@
                                                  rendered="#{node.isInstance('WikiUpload')}"/>
                     </s:fragment>
                     <s:fragment rendered="#{clipboard.isCut(node.id)}">
-                        <h:graphicImage value="#{themePath}/img/icon.cut.gif" width="18" height="20"/>
+                        <h:graphicImage value="#{imagePath}/icon.cut.gif" width="18" height="20"/>
                     </s:fragment>
                 </h:column>
 
@@ -182,13 +182,13 @@
                                        status="globalStatus"
                                        reRender="control, directoryBrowser, messageBoxContainer"
                                        rendered="#{!empty directoryBrowser.instance.parent and s:hasPermission('Node','read',directoryBrowser.instance.parent)}">
-                            <h:graphicImage value="#{themePath}/img/icon.dirup.gif" width="18" height="20"/>
+                            <h:graphicImage value="#{imagePath}/icon.dirup.gif" width="18" height="20"/>
                         </a:commandLink>
                     </f:facet>
 
                     <s:fragment rendered="#{node.isInstance('WikiDirectory')}">
                         <ui:decorate template="includes/directoryBrowserIconMenu.xhtml">
-                            <ui:param name="icon" value="#{themePath}/img/#{wikiDirectoryIconHandler.getIconName(node)}"/>
+                            <ui:param name="icon" value="#{wikiDirectoryIconHandler.getIconName(node)}"/>
                             <ui:define name="menu">
                                 <ul class="contextMenuItems">
                                     <li>
@@ -222,7 +222,7 @@
 
                     <s:fragment rendered="#{node.isInstance('WikiDocument')}">
                         <ui:decorate template="includes/directoryBrowserIconMenu.xhtml">
-                            <ui:param name="icon" value="#{themePath}/img/#{wikiDocumentIconHandler.getIconName(node)}"/>
+                            <ui:param name="icon" value="#{wikiDocumentIconHandler.getIconName(node)}"/>
                             <ui:define name="menu">
                                 <ul class="contextMenuItems">
                                     <li>
@@ -271,7 +271,7 @@
 
                     <s:fragment rendered="#{node.isInstance('WikiUpload')}">
                         <ui:decorate template="includes/directoryBrowserIconMenu.xhtml">
-                            <ui:param name="icon" value="#{themePath}/img/#{wikiUploadIconHandler.getIconName(node)}"/>
+                            <ui:param name="icon" value="#{wikiUploadIconHandler.getIconName(node)}"/>
                             <ui:define name="menu">
                                 <ul class="contextMenuItems">
                                     <li>

Modified: trunk/examples/wiki/view/dirDisplay_m.xhtml
===================================================================
--- trunk/examples/wiki/view/dirDisplay_m.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/dirDisplay_m.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -97,7 +97,7 @@
                 rendered="#{!empty directoryBrowser.instance.parent and s:hasPermission('Node','read', directoryBrowser.instance.parent)}">
             <f:param name="directoryId" value="#{directoryBrowser.instance.parent.id}"/>
             <h:panelGrid columns="2">
-                <h:graphicImage value="#{themePath}/img/icon.dirup.gif" width="18" height="20"/>
+                <h:graphicImage value="#{imagePath}/icon.dirup.gif" width="18" height="20"/>
                 <h:outputText value=".."/>
             </h:panelGrid>
         </s:link>
@@ -122,19 +122,19 @@
             <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" accesskey="." propagation="none"
                     rendered="#{!empty directoryBrowser.instance.parent and s:hasPermission('Node','read',directoryBrowser.instance.parent)}">
                 <f:param name="directoryId" value="#{directoryBrowser.instance.parent.id}"/>
-                <h:graphicImage value="#{themePath}/img/icon.dirup.gif" width="18" height="20"/>
+                <h:graphicImage value="#{imagePath}/icon.dirup.gif" width="18" height="20"/>
             </s:link>
         </f:facet>
 
-        <h:graphicImage value="#{themePath}/img/#{wikiDirectoryIconHandler.getIconName(node)}"
+        <h:graphicImage value="#{imagePath}/#{wikiDirectoryIconHandler.getIconName(node)}"
                         width="18" height="20"
                         rendered="#{node.isInstance('WikiDirectory')}"/>
 
-        <h:graphicImage value="#{themePath}/img/#{wikiDocumentIconHandler.getIconName(node)}"
+        <h:graphicImage value="#{imagePath}/#{wikiDocumentIconHandler.getIconName(node)}"
                         width="18" height="20"
                         rendered="#{node.isInstance('WikiDocument')}"/>
 
-        <h:graphicImage value="#{themePath}/img/#{wikiUploadIconHandler.getIconName(node)}"
+        <h:graphicImage value="#{imagePath}/#{wikiUploadIconHandler.getIconName(node)}"
                         width="18" height="20"
                         rendered="#{node.isInstance('WikiUpload')}"/>
     </h:column>

Modified: trunk/examples/wiki/view/dirEdit_d.xhtml
===================================================================
--- trunk/examples/wiki/view/dirEdit_d.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/dirEdit_d.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -148,7 +148,7 @@
 
                         <h:column>
                             <a:outputPanel>
-                                <h:graphicImage value="#{themePath}/img/icon.dir.gif" width="18" height="20"/>
+                                <h:graphicImage value="#{imagePath}/icon.dir.gif" width="18" height="20"/>
                             </a:outputPanel>
                         </h:column>
 
@@ -175,7 +175,7 @@
                                            oncomplete="onAjaxRequestComplete()"
                                            styleClass="sessionEventTrigger" tabindex="1"
                                            reRender="menuEditor">
-                                <h:graphicImage value="#{themePath}/img/up.gif" width="18" height="18"/>
+                                <h:graphicImage value="#{imagePath}/up.gif" width="18" height="18"/>
                             </a:commandLink>
                         </h:column>
                         <h:column>
@@ -185,7 +185,7 @@
                                            oncomplete="onAjaxRequestComplete()"
                                            styleClass="sessionEventTrigger" tabindex="1"
                                            reRender="menuEditor">
-                                <h:graphicImage value="#{themePath}/img/down.gif" width="18" height="18"/>
+                                <h:graphicImage value="#{imagePath}/down.gif" width="18" height="18"/>
                             </a:commandLink>
                         </h:column>
 

Modified: trunk/examples/wiki/view/docDisplay_d.xhtml
===================================================================
--- trunk/examples/wiki/view/docDisplay_d.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/docDisplay_d.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -106,7 +106,7 @@
                                     thumbnailLinkStyleClass="regularLink"
                                     linkBaseFile="#{documentHome.instance}"
                                     currentAreaNumber="#{documentHome.instance.areaNumber}"
-                                    enablePlugins="true"/>
+                                    enableMacroRendering="true"/>
 
                 <s:div rendered="#{documentHome.instance.nameAsTitle}">
                     <h1 class="documentTitle">
@@ -123,7 +123,7 @@
                                     thumbnailLinkStyleClass="regularLink"
                                     linkBaseFile="#{documentHome.instance}"
                                     currentAreaNumber="#{documentHome.instance.areaNumber}"
-                                    enablePlugins="#{not documentHome.instance.macroPresent('disableContentMacros')}"/>
+                                    enableMacroRendering="#{not documentHome.instance.macroPresent('disableContentMacros')}"/>
 
                 <wiki:formattedText value="#{documentHome.instance.footer}"
                                     linkStyleClass="regularLink"
@@ -132,7 +132,7 @@
                                     thumbnailLinkStyleClass="regularLink"
                                     linkBaseFile="#{documentHome.instance}"
                                     currentAreaNumber="#{documentHome.instance.areaNumber}"
-                                    enablePlugins="true"/>
+                                    enableMacroRendering="true"/>
             </c:if>
 
         </s:div>

Modified: trunk/examples/wiki/view/docDisplay_m.xhtml
===================================================================
--- trunk/examples/wiki/view/docDisplay_m.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/docDisplay_m.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -114,7 +114,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{documentHome.instance}"
                                 currentAreaNumber="#{documentHome.instance.areaNumber}"
-                                enablePlugins="true"/>
+                                enableMacroRendering="true"/>
 
             <s:div rendered="#{documentHome.instance.nameAsTitle}">
                 <h:outputLink value="#{wikiURLRenderer.renderURL(currentDocument)}">
@@ -129,7 +129,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{documentHome.instance}"
                                 currentAreaNumber="#{documentHome.instance.areaNumber}"
-                                enablePlugins="#{not documentHome.instance.macroPresent('disableContentMacros')}"/>
+                                enableMacroRendering="#{not documentHome.instance.macroPresent('disableContentMacros')}"/>
 
             <wiki:formattedText value="#{documentHome.instance.footer}"
                                 linkStyleClass="regularLink"
@@ -138,7 +138,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{documentHome.instance}"
                                 currentAreaNumber="#{documentHome.instance.areaNumber}"
-                                enablePlugins="true"/>
+                                enableMacroRendering="true"/>
         </c:if>
 
     </s:div>
@@ -156,9 +156,9 @@
                 <h:panelGrid columns="3">
                     <s:span><a name="attachment#{uiComponent['attachmentTable'].rowIndex + 1}"/></s:span>
                     <h:outputText value="#&#160;#{uiComponent['attachmentTable'].rowIndex + 1}"/>
-                    <h:graphicImage value="#{themePath}/img/#{uploadTypes[link.file.contentType].displayIcon}"
+                    <h:graphicImage value="#{imagePath}/#{uploadTypes[link.file.contentType].displayIcon}"
                                     rendered="#{not empty uploadTypes[link.file.contentType]}" width="18" height="20"/>
-                    <h:graphicImage value="#{themePath}/img/#{uploadTypes['generic'].displayIcon}"
+                    <h:graphicImage value="#{imagePath}/#{uploadTypes['generic'].displayIcon}"
                                     rendered="#{empty uploadTypes[link.file.contentType]}" width="18" height="20"/>
                 </h:panelGrid>
             </h:column>
@@ -261,7 +261,7 @@
                                                     thumbnailLinkStyleClass="regularLink"
                                                     linkBaseFile="#{currentDocument}"
                                                     currentAreaNumber="#{currentDocument.areaNumber}"
-                                                    enablePlugins="false"/>
+                                                    enableMacroRendering="false"/>
                             </s:div>
                             <s:div rendered="#{not c.useWikiText and currentDocument.name != c.subject}" style="margin-top:15px;">
                                 <h:outputText value="#{wiki:escapeHTML(c.content, true)}" escape="false"/>
@@ -282,7 +282,7 @@
                                                     thumbnailLinkStyleClass="regularLink"
                                                     linkBaseFile="#{currentDocument}"
                                                     currentAreaNumber="#{currentDocument.areaNumber}"
-                                                    enablePlugins="false"/>
+                                                    enableMacroRendering="false"/>
                             </s:div>
 
                             <h:form>

Modified: trunk/examples/wiki/view/docEdit_d.xhtml
===================================================================
--- trunk/examples/wiki/view/docEdit_d.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/docEdit_d.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -386,7 +386,8 @@
                                         thumbnailLinkStyleClass="regularLink"
                                         linkBaseFile="#{documentHome.instance}"
                                         currentAreaNumber="#{documentHome.parentNode.areaNumber}"
-                                        enablePlugins="true"/>
+                                        enableTransientMacros="true"
+                                        enableMacroRendering="true"/>
                 </s:div>
             </s:div>
 

Modified: trunk/examples/wiki/view/docHistory_d.xhtml
===================================================================
--- trunk/examples/wiki/view/docHistory_d.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/docHistory_d.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -175,7 +175,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{documentHistory.currentFile}"
                                 currentAreaNumber="#{documentHistory.currentFile.parent.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
         </s:div>
     </s:div>
 </s:div>

Modified: trunk/examples/wiki/view/docHistory_m.xhtml
===================================================================
--- trunk/examples/wiki/view/docHistory_m.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/docHistory_m.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -88,7 +88,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{documentHistory.currentFile}"
                                 currentAreaNumber="#{documentHistory.currentFile.parent.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
         </s:div>
     </s:div>
 </s:div>

Added: trunk/examples/wiki/view/includes/admin/pluginDetailsMacroPluginModule.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/admin/pluginDetailsMacroPluginModule.xhtml	                        (rev 0)
+++ trunk/examples/wiki/view/includes/admin/pluginDetailsMacroPluginModule.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,53 @@
+<s:fragment rendered="#{module.class.simpleName == 'MacroPluginModule'}"
+	 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:a="https://ajax4jsf.dev.java.net/ajax"
+     xmlns:s="http://jboss.com/products/seam/taglib">
+
+    <div class="entry">
+        <div class="label"><h:outputText value="#{messages['lacewiki.label.adminHome.plugins.macro.Name']}:"/></div>
+        <div class="output">
+            <h:outputText value="#{module.name}"/>
+        </div>
+    </div>
+    <div class="entry">
+        <div class="label"><h:outputText value="#{messages['lacewiki.label.adminHome.plugins.macro.Skins']}:"/></div>
+        <div class="output">
+            <ui:repeat var="skin" value="#{module.skins}">
+                <h:outputText value="#{skin}&#160;&#160;"/>
+            </ui:repeat>
+        </div>
+    </div>
+    <div class="entry">
+        <div class="label"><h:outputText value="#{messages['lacewiki.label.adminHome.plugins.macro.ApplicableToArea']}:"/></div>
+        <div class="output">
+            <ui:repeat var="applicableArea" value="#{module.applicableTo}">
+                <h:outputText value="#{applicableArea.name()}&#160;&#160;"/>
+            </ui:repeat>
+        </div>
+    </div>
+    <s:fragment rendered="#{not empty module.renderOptions}">
+        <div class="entry">
+            <div class="label"><h:outputText value="#{messages['lacewiki.label.adminHome.plugins.macro.RenderOptions']}:"/></div>
+            <div class="output">
+                <ui:repeat var="renderOption" value="#{module.renderOptions}">
+                    <h:outputText value="#{renderOption.name()}&#160;&#160;"/>
+                </ui:repeat>
+            </div>
+        </div>
+    </s:fragment>
+    <s:fragment rendered="#{not empty module.renderDependencies}">
+        <div class="entry">
+            <div class="label"><h:outputText value="#{messages['lacewiki.label.adminHome.plugins.macro.RenderDependencies']}:"/></div>
+            <div class="output">
+                <ui:repeat var="renderDependency" value="#{module.renderDependencies}">
+                    <h:outputText value="#{renderDependency.type.name()}:&#160;#{renderDependency.onMacro}&#160;&#160;"/>
+                </ui:repeat>
+            </div>
+        </div>
+    </s:fragment>
+
+</s:fragment>
\ No newline at end of file

Added: trunk/examples/wiki/view/includes/admin/pluginEditor.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/admin/pluginEditor.xhtml	                        (rev 0)
+++ trunk/examples/wiki/view/includes/admin/pluginEditor.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -0,0 +1,127 @@
+<s:fragment
+	 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:a="https://ajax4jsf.dev.java.net/ajax"
+     xmlns:c="http://java.sun.com/jstl/core"
+     xmlns:rich="http://richfaces.ajax4jsf.org/rich"
+     xmlns:s="http://jboss.com/products/seam/taglib">
+
+<a:region>
+<h:panelGrid id="pluginDisplay" columns="2" columnClasses="formListGridColumn fifteenPercentColumn, formListGridColumn">
+
+    <s:div rendered="#{empty adminHome.installedPlugins}">
+        <h:outputText value="#{messages['lacewiki.label.adminHome.plugins.NoPluginsInstalled']}"/>
+    </s:div>
+
+    <h:dataTable id="installedPluginList"
+                 var="plugin" value="#{adminHome.installedPlugins}"
+                 rendered="#{adminHome.installedPlugins.size>0}"
+                 styleClass="datatable formListTable"
+                 headerClass="regularHeader smallFont minorPadding"
+                 cellpadding="0" cellspacing="0" border="0">
+
+        <h:column>
+            <f:facet name="header">
+                <h:outputText value="#{messages['lacewiki.label.adminHome.plugins.InstalledPlugins']}"/>
+            </f:facet>
+            <s:div styleClass="#{plugin == adminHome.selectedInstalledPlugin ? 'formListSelectedItem' : 'formListItem'}">
+                <a:commandLink reRender="pluginDisplay" action="#{adminHome.selectInstalledPlugin(plugin)}"
+                               status="globalStatus" oncomplete="onAjaxRequestComplete()" tabindex="1">
+                    <h:outputText value="#{plugin.label}"/>
+                </a:commandLink>
+            </s:div>
+        </h:column>
+
+    </h:dataTable>
+
+    <s:div rendered="#{empty adminHome.selectedInstalledPlugin}">
+        <h:outputText value="#{messages['lacewiki.label.adminHome.plugins.PleaseSelectInstalledPlugin']}"/>
+    </s:div>
+
+    <s:div id="pluginDetailsDisplay" rendered="#{not empty adminHome.selectedInstalledPlugin}">
+
+        <s:div id="pluginInfoDisplay" styleClass="formFields">
+
+            <div class="entry">
+                <div class="label"><h:outputText value="#{messages['lacewiki.label.adminHome.plugins.PluginName']}:"/></div>
+                <div class="output">
+                    <h:outputText value="#{adminHome.selectedInstalledPlugin.label}"/>
+                </div>
+            </div>
+            <div class="entry">
+                <div class="label"><h:outputText value="#{messages['lacewiki.label.adminHome.plugins.Description']}:"/></div>
+                <div class="output">
+                    <h:outputText value="#{adminHome.selectedInstalledPlugin.pluginInfo.description}"/>
+                </div>
+            </div>
+            <div class="entry">
+                <div class="label"><h:outputText value="#{messages['lacewiki.label.adminHome.plugins.Version']}:"/></div>
+                <div class="output">
+                    <h:outputText value="#{adminHome.selectedInstalledPlugin.pluginInfo.version}"/>
+                </div>
+            </div>
+            <div class="entry">
+                <div class="label"><h:outputText value="#{messages['lacewiki.label.adminHome.plugins.Vendor']}:"/></div>
+                <div class="output undecoratedLink">
+                    <h:outputLink value="#{adminHome.selectedInstalledPlugin.pluginInfo.vendor.url}">
+                        <h:outputText value="#{adminHome.selectedInstalledPlugin.pluginInfo.vendor.name}"/>
+                    </h:outputLink>
+                </div>
+            </div>
+
+        </s:div>
+
+        <rich:simpleTogglePanel switchType="client" opened="false"
+                                label="#{messages['lacewiki.label.adminHome.plugins.ModuleDetails']},
+                                       #{adminHome.selectedInstalledPlugin.modules.size()}
+                                       #{messages['lacewiki.label.adminHome.plugins.Modules']}">
+            <h:dataTable var="module" value="#{adminHome.selectedInstalledPlugin.modules}"
+                         rendered="#{not empty adminHome.selectedInstalledPlugin.modules}"
+                         styleClass="datatable leftBorder bottomBorder"
+                         headerClass="regularHeader alignCenter rightBorder smallFont"
+                         columnClasses="tenPercentColumn rightBorder alignCenter, defaultColumn rightBorder alignLeft"
+                         rowClasses="rowOdd,rowEven"
+                         cellpadding="0" cellspacing="0" border="0">
+
+                <h:column>
+                    <f:facet name="header">
+                        <h:outputText value="#{messages['lacewiki.label.adminHome.plugins.ModuleType']}"/>
+                    </f:facet>
+                    <h:outputText value="#{module.moduleTypeLabel}"/>
+                </h:column>
+                <h:column>
+                    <f:facet name="header">
+                        <h:outputText value="#{messages['lacewiki.label.adminHome.plugins.Module']}"/>
+                    </f:facet>
+
+                    <s:div styleClass="minorPadding">
+                        <h:outputText value="#{module.label} (#{module.description})"/>
+                    </s:div>
+                    <s:fragment rendered="#{not empty module.fragmentCacheRegionsAsList}">
+                        <div class="entry">
+                            <div class="label"><h:outputText value="#{messages['lacewiki.label.adminHome.plugins.FragmentCacheRegions']}:"/></div>
+                            <div class="output">
+                                <ui:repeat var="cacheRegion" value="#{module.fragmentCacheRegionsAsList}">
+                                    <h:outputText value="#{cacheRegion}&#160;&#160;"/>
+                                </ui:repeat>
+                            </div>
+                        </div>
+                    </s:fragment>
+
+                    <ui:include src="pluginDetailsMacroPluginModule.xhtml"/>
+
+                </h:column>
+
+            </h:dataTable>
+        </rich:simpleTogglePanel>
+
+    </s:div>
+
+
+</h:panelGrid>
+</a:region>
+
+</s:fragment>
\ No newline at end of file

Modified: trunk/examples/wiki/view/includes/attachmentDisplay.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/attachmentDisplay.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/attachmentDisplay.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -21,10 +21,10 @@
                 <s:span><a name="attachment#{uiComponent['attachmentTable'].rowIndex + 1}"/></s:span>
                 <h:outputText value="#&#160;#{uiComponent['attachmentTable'].rowIndex + 1}"/>
 
-                <h:graphicImage value="#{themePath}/img/#{uploadTypes[link.file.contentType].displayIcon}"
+                <h:graphicImage value="#{imagePath}/#{uploadTypes[link.file.contentType].displayIcon}"
                                 rendered="#{not empty uploadTypes[link.file.contentType]}" width="18" height="20"/>
 
-                <h:graphicImage value="#{themePath}/img/#{uploadTypes['generic'].displayIcon}"
+                <h:graphicImage value="#{imagePath}/#{uploadTypes['generic'].displayIcon}"
                                 rendered="#{empty uploadTypes[link.file.contentType]}" width="18" height="20"/>
             </h:panelGrid>
         </h:column>

Modified: trunk/examples/wiki/view/includes/breadcrumb.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/breadcrumb.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/breadcrumb.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -7,6 +7,10 @@
      xmlns:wiki="http://jboss.com/products/seam/wiki"
      xmlns:s="http://jboss.com/products/seam/taglib">
 
+    <s:cache enabled="#{breadcrumbFactory.cacheEnabled}"
+             region="#{breadcrumbFactory.cacheRegion}"
+             key="#{breadcrumbFactory.cacheKey}">
+
     <h:panelGroup styleClass="breadcrumbPanel">
 
         <h:outputLink value="#{wikiURLRenderer.renderURL(wikiRoot)}" styleClass="itemLink breadcrumbRoot">
@@ -41,4 +45,6 @@
         </ui:repeat>
     </h:panelGroup>
 
+    </s:cache>
+
 </s:div>
\ No newline at end of file

Modified: trunk/examples/wiki/view/includes/captchaEntry.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/captchaEntry.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/captchaEntry.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -10,7 +10,7 @@
 
             <s:div styleClass="errorMessage" rendered="#{invalid}">
                 <h:panelGrid columns="2" cellpadding="0" cellspacing="0" border="0">
-                    <h:graphicImage value="#{themePath}/img/attention.gif"
+                    <h:graphicImage value="#{imagePath}/attention.gif"
                                     width="18" height="18"
                                     styleClass="attentionImage"/>
                     <s:span styleClass="attentionMessage">&#160;<s:message/></s:span>

Modified: trunk/examples/wiki/view/includes/commentForm.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/commentForm.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/commentForm.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -96,7 +96,6 @@
                     <ui:include src="wikiTextPreview.xhtml">
                         <ui:param name="textPreviewId" value="commentPreview"/>
                         <ui:param name="valueBinding" value="#{commentHome.instance.content}"/>
-                        <ui:param name="enablePlugins" value="false"/>
                         <ui:param name="baseDocument" value="#{currentDocument}"/>
                         <ui:param name="baseDirectory" value="#{currentDocument.parent}"/>
                     </ui:include>

Modified: trunk/examples/wiki/view/includes/commentsDisplay.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/commentsDisplay.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/commentsDisplay.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -104,7 +104,7 @@
                                         thumbnailLinkStyleClass="regularLink"
                                         linkBaseFile="#{currentDocument}"
                                         currentAreaNumber="#{currentDocument.areaNumber}"
-                                        enablePlugins="false"/>
+                                        enableMacroRendering="false"/>
                 </s:div>
                 <s:div styleClass="commentText" rendered="#{not c.useWikiText and currentDocument.name != c.subject}" style="margin-top:15px;">
                     <h:outputText value="#{wiki:escapeHTML(c.content, true)}" escape="false"/>
@@ -125,7 +125,7 @@
                                         thumbnailLinkStyleClass="regularLink"
                                         linkBaseFile="#{currentDocument}"
                                         currentAreaNumber="#{currentDocument.areaNumber}"
-                                        enablePlugins="false"/>
+                                        enableMacroRendering="false"/>
                 </s:div>
 
                 <div class="commentControls">

Modified: trunk/examples/wiki/view/includes/directoryBrowserControl.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/directoryBrowserControl.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/directoryBrowserControl.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -116,7 +116,7 @@
     <s:fragment>
         <h:panelGroup
                 rendered="#{directoryBrowser.instance.id == trashArea.id and s:hasPermission('Trash', 'empty', directoryBrowser.instance)}">
-            <h:graphicImage value="#{themePath}/img/icon.trash.gif"
+            <h:graphicImage value="#{imagePath}/icon.trash.gif"
                             width="18" height="20" style="vertical-align:middle;"/>
             <a:commandLink action="#{directoryBrowser.emptyTrash()}"
                            status="globalStatus"

Modified: trunk/examples/wiki/view/includes/directoryBrowserIconMenu.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/directoryBrowserIconMenu.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/directoryBrowserIconMenu.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -7,8 +7,8 @@
     <h:outputLink value="javascript://no-op" tabindex="1"
               onmouseover="jQuery(this).children('.dirItemIcon').attr('src','#{themePath}/img/menu_down.gif').toggleClass('mouseOver');
                            jQuery(this).parent('.contextMenu').menu(); jQuery(this).children('.contextMenuItems').show();"
-              onmouseout="jQuery(this).children('.dirItemIcon').attr('src','#{icon}').toggleClass('mouseOver')">
-        <h:graphicImage value="#{icon}" styleClass="dirItemIcon"/>
+              onmouseout="jQuery(this).children('.dirItemIcon').attr('src','#{themePath}/img/#{icon}').toggleClass('mouseOver')">
+        <h:graphicImage value="#{imagePath}/#{icon}" styleClass="dirItemIcon"/>
     </h:outputLink>
 
     <ui:insert name="menu"/>

Modified: trunk/examples/wiki/view/includes/directoryBrowserPath.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/directoryBrowserPath.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/directoryBrowserPath.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -19,13 +19,13 @@
                                    reRender="#{renderOnSelect}"
                                    rendered="#{not directoryBrowserSettings.treeVisible}"
                                    status="globalStatus">
-                        <h:graphicImage value="#{themePath}/img/menu_right.gif" width="18" height="18"/>
+                        <h:graphicImage value="#{imagePath}/menu_right.gif" width="18" height="18"/>
                     </a:commandLink>
                     <a:commandLink action="#{directoryBrowser.hideTree}" tabindex="1"
                                    reRender="#{renderOnSelect}"
                                    rendered="#{directoryBrowserSettings.treeVisible}"
                                    status="globalStatus">
-                        <h:graphicImage value="#{themePath}/img/menu_left.gif" width="18" height="18"/>
+                        <h:graphicImage value="#{imagePath}/menu_left.gif" width="18" height="18"/>
                     </a:commandLink>
 
             </s:fragment>

Modified: trunk/examples/wiki/view/includes/directoryBrowserTree.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/directoryBrowserTree.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/directoryBrowserTree.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -27,10 +27,10 @@
 
                 <rich:treeNode>
                     <f:facet name="icon">
-                        <h:graphicImage value="#{themePath}/img/icon.dir.gif" width="18" height="20"/>
+                        <h:graphicImage value="#{imagePath}/icon.dir.gif" width="18" height="20"/>
                     </f:facet>
                     <f:facet name="iconLeaf">
-                        <h:graphicImage value="#{themePath}/img/icon.dir.gif" width="18" height="20"/>
+                        <h:graphicImage value="#{imagePath}/icon.dir.gif" width="18" height="20"/>
                     </f:facet>
 
                     <s:div styleClass="directoryTreeLabel">

Modified: trunk/examples/wiki/view/includes/formFieldDecorate.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/formFieldDecorate.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/formFieldDecorate.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -21,7 +21,7 @@
 
         <s:div styleClass="errorMessage" rendered="#{invalid}">
             <h:panelGrid columns="2" cellpadding="0" cellspacing="0" border="0">
-                <h:graphicImage value="#{themePath}/img/attention.gif"
+                <h:graphicImage value="#{imagePath}/attention.gif"
                                 width="18" height="18"
                                 styleClass="attentionImage"/>
                 <s:span styleClass="attentionMessage">&#160;<s:message/></s:span>

Modified: trunk/examples/wiki/view/includes/helpPopup.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/helpPopup.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/helpPopup.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -46,7 +46,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{help.selectedHelpDoc}"
                                 currentAreaNumber="#{help.selectedHelpDoc.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
         </c:if>
 
     </ui:define>

Modified: trunk/examples/wiki/view/includes/mainMenu.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/mainMenu.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/mainMenu.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -11,12 +11,15 @@
 
         <div class="mainMenuHeader"><ui:insert name="mainMenuHeader">&#160;</ui:insert></div>
 
-        <ui:include src="mainMenuItem.xhtml">
-            <ui:param name="node" value="#{menu.root}"/>
-        </ui:include>
+        <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="mainMenuFooter"><ui:insert name="mainMenuFooter">&#160;</ui:insert></div>
 
     </div></s:div>
 
+
 </div>

Modified: trunk/examples/wiki/view/includes/ownerSelector.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/ownerSelector.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/ownerSelector.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -76,17 +76,17 @@
                 <a:commandLink action="#{userSearch.firstPage()}" rendered="#{userSearch.previousPageAvailable}" tabindex="20"
                                oncomplete="jQuery('#dialogOwnerSelection').jqmAddClose('.closeDialog'); onAjaxRequestComplete()"
                                reRender="dialogOwnerSelectionContent" styleClass="sessionEventTrigger">
-                    <h:graphicImage value="#{themePath}/img/page.first.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.first.gif" width="13" height="11"/>
                 </a:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!userSearch.previousPageAvailable}"/>
 
                 <a:commandLink action="#{userSearch.previousPage()}" rendered="#{userSearch.previousPageAvailable}" tabindex="20"
                                oncomplete="jQuery('#dialogOwnerSelection').jqmAddClose('.closeDialog'); onAjaxRequestComplete()"
                                reRender="dialogOwnerSelectionContent" styleClass="sessionEventTrigger">
-                    <h:graphicImage value="#{themePath}/img/page.previous.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.previous.gif" width="13" height="11"/>
                 </a:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!userSearch.previousPageAvailable}"/>
 
                 <h:outputText value="#{messages['lacewiki.label.userList.Found']} #{userSearch.rowCount} #{messages['lacewiki.label.userList.Members']}"/>
@@ -94,17 +94,17 @@
                 <a:commandLink action="#{userSearch.nextPage()}" rendered="#{userSearch.nextPageAvailable}" tabindex="20"
                                oncomplete="jQuery('#dialogOwnerSelection').jqmAddClose('.closeDialog'); onAjaxRequestComplete()"
                                reRender="dialogOwnerSelectionContent" styleClass="sessionEventTrigger">
-                    <h:graphicImage value="#{themePath}/img/page.next.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.next.gif" width="13" height="11"/>
                 </a:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!userSearch.nextPageAvailable}"/>
 
                 <a:commandLink action="#{userSearch.lastPage()}" rendered="#{userSearch.nextPageAvailable}" tabindex="20"
                                oncomplete="jQuery('#dialogOwnerSelection').jqmAddClose('.closeDialog'); onAjaxRequestComplete()"
                                reRender="dialogOwnerSelectionContent" styleClass="sessionEventTrigger">
-                    <h:graphicImage value="#{themePath}/img/page.last.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.last.gif" width="13" height="11"/>
                 </a:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!userSearch.nextPageAvailable}"/>
 
             </h:panelGrid>
@@ -129,9 +129,9 @@
                         <a:commandLink action="#{userSearch.sortBy('username')}" tabindex="20" reRender="dialogOwnerSelectionContent"
                                        oncomplete="jQuery('#dialogOwnerSelection').jqmAddClose('.closeDialog'); onAjaxRequestComplete()"
                                        styleClass="sessionEventTrigger">
-                            <h:graphicImage value="#{themePath}/img/sortindicator.up.gif" width="8" height="8"
+                            <h:graphicImage value="#{imagePath}/sortindicator.up.gif" width="8" height="8"
                                             rendered="#{!userSearch.orderDescending and userSearch.orderByProperty == 'username'}"/>
-                            <h:graphicImage value="#{themePath}/img/sortindicator.down.gif" width="8" height="8"
+                            <h:graphicImage value="#{imagePath}/sortindicator.down.gif" width="8" height="8"
                                             rendered="#{userSearch.orderDescending and userSearch.orderByProperty == 'username'}"/>
                             <h:outputText value="#{messages['lacewiki.label.userList.Username']}"/>
                         </a:commandLink>
@@ -145,9 +145,9 @@
                         <a:commandLink action="#{userSearch.sortBy('firstname')}" tabindex="20" reRender="dialogOwnerSelectionContent"
                                        oncomplete="jQuery('#dialogOwnerSelection').jqmAddClose('.closeDialog'); onAjaxRequestComplete()"
                                        styleClass="sessionEventTrigger">
-                            <h:graphicImage value="#{themePath}/img/sortindicator.up.gif" width="8" height="8"
+                            <h:graphicImage value="#{imagePath}/sortindicator.up.gif" width="8" height="8"
                                             rendered="#{!userSearch.orderDescending and userSearch.orderByProperty == 'firstname'}"/>
-                            <h:graphicImage value="#{themePath}/img/sortindicator.down.gif" width="8" height="8"
+                            <h:graphicImage value="#{imagePath}/sortindicator.down.gif" width="8" height="8"
                                             rendered="#{userSearch.orderDescending and userSearch.orderByProperty == 'firstname'}"/>
                             <h:outputText value="#{messages['lacewiki.label.userList.FirstName']}"/>
                         </a:commandLink>
@@ -160,9 +160,9 @@
                         <a:commandLink action="#{userSearch.sortBy('lastname')}" tabindex="20" reRender="dialogOwnerSelectionContent"
                                        oncomplete="jQuery('#dialogOwnerSelection').jqmAddClose('.closeDialog'); onAjaxRequestComplete()"
                                        styleClass="sessionEventTrigger">
-                            <h:graphicImage value="#{themePath}/img/sortindicator.up.gif" width="8" height="8"
+                            <h:graphicImage value="#{imagePath}/sortindicator.up.gif" width="8" height="8"
                                             rendered="#{!userSearch.orderDescending and userSearch.orderByProperty == 'lastname'}"/>
-                            <h:graphicImage value="#{themePath}/img/sortindicator.down.gif" width="8" height="8"
+                            <h:graphicImage value="#{imagePath}/sortindicator.down.gif" width="8" height="8"
                                             rendered="#{userSearch.orderDescending and userSearch.orderByProperty == 'lastname'}"/>
                             <h:outputText value="#{messages['lacewiki.label.userList.LastName']}"/>
                         </a:commandLink>
@@ -175,9 +175,9 @@
                         <a:commandLink action="#{userSearch.sortBy('email')}" tabindex="20" reRender="dialogOwnerSelectionContent"
                                        oncomplete="jQuery('#dialogOwnerSelection').jqmAddClose('.closeDialog'); onAjaxRequestComplete()"
                                        styleClass="sessionEventTrigger">
-                            <h:graphicImage value="#{themePath}/img/sortindicator.up.gif" width="8" height="8"
+                            <h:graphicImage value="#{imagePath}/sortindicator.up.gif" width="8" height="8"
                                             rendered="#{!userSearch.orderDescending and userSearch.orderByProperty == 'email'}"/>
-                            <h:graphicImage value="#{themePath}/img/sortindicator.down.gif" width="8" height="8"
+                            <h:graphicImage value="#{imagePath}/sortindicator.down.gif" width="8" height="8"
                                             rendered="#{userSearch.orderDescending and userSearch.orderByProperty == 'email'}"/>
                             <h:outputText value="#{messages['lacewiki.label.userList.Email']}"/>
                         </a:commandLink>

Modified: trunk/examples/wiki/view/includes/pager.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/pager.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/pager.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -18,15 +18,15 @@
                     rendered="#{pager.previousPageAvailable and not useAjax}">
                 <f:param name="page" value="0"/>
                 <f:param name="pageSize" value="#{pager.pageSize}"/>
-                <h:graphicImage value="#{themePath}/img/page.first.gif" width="13" height="11"/>
+                <h:graphicImage value="#{imagePath}/page.first.gif" width="13" height="11"/>
             </s:link>
             <a:commandLink action="#{pager.setFirstPage}" tabindex="1"
                            rendered="#{pager.previousPageAvailable and useAjax}"
                            status="globalStatus"
                            reRender="#{renderOnSelect}">
-                <h:graphicImage value="#{themePath}/img/page.first.gif" width="13" height="11"/>
+                <h:graphicImage value="#{imagePath}/page.first.gif" width="13" height="11"/>
             </a:commandLink>
-            <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+            <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                             rendered="#{!pager.previousPageAvailable}"/>
         </s:fragment>
 
@@ -35,15 +35,15 @@
                     rendered="#{pager.previousPageAvailable and not useAjax}">
                 <f:param name="page" value="#{pager.previousPage}"/>
                 <f:param name="pageSize" value="#{pager.pageSize}"/>
-                <h:graphicImage value="#{themePath}/img/page.previous.gif" width="13" height="11"/>
+                <h:graphicImage value="#{imagePath}/page.previous.gif" width="13" height="11"/>
             </s:link>
             <a:commandLink action="#{pager.setPreviousPage}" tabindex="1"
                            rendered="#{pager.previousPageAvailable and useAjax}"
                            status="globalStatus"
                            reRender="#{renderOnSelect}">
-                <h:graphicImage value="#{themePath}/img/page.previous.gif" width="13" height="11"/>
+                <h:graphicImage value="#{imagePath}/page.previous.gif" width="13" height="11"/>
             </a:commandLink>
-            <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+            <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                             rendered="#{!pager.previousPageAvailable}"/>
         </s:fragment>
 
@@ -59,15 +59,15 @@
                     rendered="#{pager.nextPageAvailable and not useAjax}">
                 <f:param name="page" value="#{pager.nextPage}"/>
                 <f:param name="pageSize" value="#{pager.pageSize}"/>
-                <h:graphicImage value="#{themePath}/img/page.next.gif" width="13" height="11"/>
+                <h:graphicImage value="#{imagePath}/page.next.gif" width="13" height="11"/>
             </s:link>
             <a:commandLink action="#{pager.setNextPage}" tabindex="1"
                            rendered="#{pager.nextPageAvailable and useAjax}"
                            status="globalStatus"
                            reRender="#{renderOnSelect}">
-                <h:graphicImage value="#{themePath}/img/page.next.gif" width="13" height="11"/>
+                <h:graphicImage value="#{imagePath}/page.next.gif" width="13" height="11"/>
             </a:commandLink>
-            <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+            <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                             rendered="#{!pager.nextPageAvailable}"/>
         </s:fragment>
 
@@ -76,15 +76,15 @@
                     rendered="#{pager.nextPageAvailable and not useAjax}">
                 <f:param name="page" value="#{pager.lastPage}"/>
                 <f:param name="pageSize" value="#{pager.pageSize}"/>
-                <h:graphicImage value="#{themePath}/img/page.last.gif" width="13" height="11"/>
+                <h:graphicImage value="#{imagePath}/page.last.gif" width="13" height="11"/>
             </s:link>
             <a:commandLink action="#{pager.setLastPage}" tabindex="1"
                            rendered="#{pager.nextPageAvailable and useAjax}"
                            status="globalStatus"
                            reRender="#{renderOnSelect}">
-                <h:graphicImage value="#{themePath}/img/page.last.gif" width="13" height="11"/>
+                <h:graphicImage value="#{imagePath}/page.last.gif" width="13" height="11"/>
             </a:commandLink>
-            <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+            <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                             rendered="#{!pager.nextPageAvailable}"/>
         </s:fragment>
 

Modified: trunk/examples/wiki/view/includes/pluginPreferencesForm.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/pluginPreferencesForm.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/pluginPreferencesForm.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -64,7 +64,7 @@
                         </h:inputText>
                         <s:selectDate for="dt" dateFormat="dd. MMM yyyy, HH:mm">
                             <h:graphicImage style="vertical-align:bottom;margin-bottom:2px;"
-                                            value="#{themePath}/img/icon.calendar.gif" width="16"
+                                            value="#{imagePath}/icon.calendar.gif" width="16"
                                             height="16"/>
                         </s:selectDate>
                     </s:div>

Modified: trunk/examples/wiki/view/includes/preferences/editor.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/preferences/editor.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/preferences/editor.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -41,7 +41,7 @@
         </h:inputText>
         <s:selectDate for="dt" dateFormat="dd. MMM yyyy, HH:mm">
             <h:graphicImage style="vertical-align:bottom;margin-bottom:2px;"
-                            value="#{themePath}/img/icon.calendar.gif"
+                            value="#{imagePath}/icon.calendar.gif"
                             width="16" height="16"/>
         </s:selectDate>
     </s:div>

Modified: trunk/examples/wiki/view/includes/sortableHeader.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/sortableHeader.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/sortableHeader.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -10,9 +10,9 @@
     <a:commandLink action="#{sortAction.sortBy(sortProperty)}" tabindex="1"
                    status="globalStatus"
                    reRender="#{renderOnSelect}">
-        <h:graphicImage value="#{themePath}/img/sortindicator.up.gif" styleClass="sortIndicator"
+        <h:graphicImage value="#{imagePath}/sortindicator.up.gif" styleClass="sortIndicator"
                         rendered="#{!sortStatus.orderDescending and sortStatus.orderByProperty.toString() == sortProperty}"/>
-        <h:graphicImage value="#{themePath}/img/sortindicator.down.gif" styleClass="sortIndicator"
+        <h:graphicImage value="#{imagePath}/sortindicator.down.gif" styleClass="sortIndicator"
                         rendered="#{sortStatus.orderDescending and sortStatus.orderByProperty.toString() == sortProperty}"/>
         <h:outputText value="#{label}"/>
     </a:commandLink>

Modified: trunk/examples/wiki/view/includes/userInfo.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/userInfo.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/userInfo.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -39,7 +39,7 @@
                                     currentAreaNumber="#{wikiStart.areaNumber}"
                                     internalTargetFrame="_top"
                                     externalTargetFrame="_top"
-                                    enablePlugins="false"/>
+                                    enableMacroRendering="false"/>
             </s:span>
 
             <s:div rendered="#{!empty user.profile.website}" styleClass="userInfoEntry">

Modified: trunk/examples/wiki/view/includes/wikiTextEditor.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/wikiTextEditor.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/wikiTextEditor.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -44,7 +44,7 @@
 
         <s:div styleClass="errorMessage" rendered="#{wiki:hasMessage(namingContainer, wiki:concat(textEditorId, 'TextArea'))}">
             <h:panelGrid columns="2" cellpadding="0" cellspacing="0" border="0">
-                <h:graphicImage value="#{themePath}/img/attention.gif"
+                <h:graphicImage value="#{imagePath}/attention.gif"
                                 width="18" height="18"
                                 styleClass="attentionImage"/>
                 <s:span styleClass="attentionMessage">&#160;<span id="#{textEditorId}MessageText"><h:message for="#{textEditorId}TextArea"/></span></s:span>

Modified: trunk/examples/wiki/view/includes/wikiTextPreview.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/wikiTextPreview.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/wikiTextPreview.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -15,7 +15,7 @@
                             thumbnailLinkStyleClass="regularLink"
                             linkBaseFilet="#{baseDocument}"
                             currentAreaNumber="#{baseDirectory.areaNumber}"
-                            enablePlugins="false"/>
+                            enableMacroRendering="false"/>
     </s:div>
 </s:div>
 

Modified: trunk/examples/wiki/view/includes/wikiUploadImageEditor.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/wikiUploadImageEditor.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/includes/wikiUploadImageEditor.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -22,17 +22,17 @@
                         <a:commandLink status="globalStatus" id="zoomOut" tabindex="2" action="#{editor.zoomPreviewOut}"
                                        reRender="imagePreview, messageBoxContainer" oncomplete="onAjaxRequestComplete()"
                                        styleClass="sessionEventTrigger">
-                            <h:graphicImage value="#{themePath}/img/minus.gif" width="18" height="18"/>
+                            <h:graphicImage value="#{imagePath}/minus.gif" width="18" height="18"/>
                         </a:commandLink>
                         <a:commandLink status="globalStatus" id="actualSize" tabindex="2" action="#{editor.zoomActualSize}"
                                        reRender="imagePreview, messageBoxContainer" oncomplete="onAjaxRequestComplete()"
                                        styleClass="sessionEventTrigger">
-                            <h:graphicImage value="#{themePath}/img/equals.gif" width="18" height="18"/>
+                            <h:graphicImage value="#{imagePath}/equals.gif" width="18" height="18"/>
                         </a:commandLink>
                         <a:commandLink status="globalStatus" id="zoomIn" tabindex="2" action="#{editor.zoomPreviewIn}"
                                        reRender="imagePreview, messageBoxContainer" oncomplete="onAjaxRequestComplete()"
                                        styleClass="sessionEventTrigger">
-                            <h:graphicImage value="#{themePath}/img/plus.gif" width="18" height="18"/>
+                            <h:graphicImage value="#{imagePath}/plus.gif" width="18" height="18"/>
                         </a:commandLink>
                     </a:region>
                 </h:panelGroup>

Modified: trunk/examples/wiki/view/search_d.xhtml
===================================================================
--- trunk/examples/wiki/view/search_d.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/search_d.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -147,16 +147,16 @@
 
                 <h:commandLink action="#{wikiSearch.firstPage()}" styleClass="sessionEventTrigger"
                                rendered="#{wikiSearch.previousPageAvailable}" tabindex="7">
-                    <h:graphicImage value="#{themePath}/img/page.first.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.first.gif" width="13" height="11"/>
                 </h:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!wikiSearch.previousPageAvailable}"/>
 
                 <h:commandLink action="#{wikiSearch.previousPage()}" styleClass="sessionEventTrigger"
                                rendered="#{wikiSearch.previousPageAvailable}" tabindex="7">
-                    <h:graphicImage value="#{themePath}/img/page.previous.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.previous.gif" width="13" height="11"/>
                 </h:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!wikiSearch.previousPageAvailable}"/>
 
                 <h:outputText value="#{wikiSearch.firstRow} #{messages['lacewiki.label.search.To']}
@@ -165,16 +165,16 @@
 
                 <h:commandLink action="#{wikiSearch.nextPage()}" styleClass="sessionEventTrigger"
                                rendered="#{wikiSearch.nextPageAvailable}" tabindex="7">
-                    <h:graphicImage value="#{themePath}/img/page.next.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.next.gif" width="13" height="11"/>
                 </h:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!wikiSearch.nextPageAvailable}"/>
 
                 <h:commandLink action="#{wikiSearch.lastPage()}" styleClass="sessionEventTrigger"
                                rendered="#{wikiSearch.nextPageAvailable}" tabindex="7">
-                    <h:graphicImage value="#{themePath}/img/page.last.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.last.gif" width="13" height="11"/>
                 </h:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!wikiSearch.nextPageAvailable}"/>
 
             </h:panelGrid>
@@ -193,7 +193,7 @@
                 <h:column>
 
                     <h:panelGrid columns="2">
-                        <h:graphicImage value="#{themePath}/img/#{hit.icon}" width="18" height="20"/>
+                        <h:graphicImage value="#{imagePath}/#{hit.icon}" width="18" height="20"/>
                         <h:outputLink value="#{hit.link}" tabindex="1"><h:outputText escape="false" value="#{hit.title}"/></h:outputLink>
                     </h:panelGrid>
                     <h:outputText styleClass="smallFont" escape="false" value="#{hit.fragment}"/>

Modified: trunk/examples/wiki/view/search_m.xhtml
===================================================================
--- trunk/examples/wiki/view/search_m.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/search_m.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -62,7 +62,7 @@
 
             <h:column>
                 <h:panelGrid columns="2">
-                    <h:graphicImage value="#{themePath}/img/#{hit.icon}" width="18" height="20"/>
+                    <h:graphicImage value="#{imagePath}/#{hit.icon}" width="18" height="20"/>
                     <h:outputLink value="#{hit.link}" tabindex="1"><h:outputText escape="false" value="#{hit.title}"/></h:outputLink>
                 </h:panelGrid>
                 <h:outputText escape="false" value="#{hit.fragment}"/>

Modified: trunk/examples/wiki/view/tagDisplay_d.xhtml
===================================================================
--- trunk/examples/wiki/view/tagDisplay_d.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/tagDisplay_d.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -33,13 +33,13 @@
                 <h:outputText value="#{messages['lacewiki.label.tagDisplay.Tag']}: #{tagQuery.tag}"/>
             </f:facet>
 
-            <h:graphicImage value="#{themePath}/img/icon.doc.gif"
+            <h:graphicImage value="#{imagePath}/icon.doc.gif"
                             width="18" height="20" style="vertical-align:middle;margin-right: 5px;"
                             rendered="#{file.isInstance('WikiDocument')}"/>
-            <h:graphicImage value="#{themePath}/img/#{uploadTypes[file.contentType].displayIcon}"
+            <h:graphicImage value="#{imagePath}/#{uploadTypes[file.contentType].displayIcon}"
                             width="18" height="20" style="vertical-align:middle;margin-right: 5px;"
                             rendered="#{file.isInstance('WikiUpload') and !empty uploadTypes[file.contentType]}"/>
-            <h:graphicImage value="#{themePath}/img/#{uploadTypes['generic'].displayIcon}"
+            <h:graphicImage value="#{imagePath}/#{uploadTypes['generic'].displayIcon}"
                             width="18" height="20" style="vertical-align:middle;margin-right: 5px;"
                             rendered="#{file.isInstance('WikiUpload') and empty uploadTypes[file.contentType]}"/>
 
@@ -71,7 +71,7 @@
                 <h:outputText value="#{messages['lacewiki.label.tagDisplay.InDirectory']}"/>
             </f:facet>
             <s:fragment rendered="#{s:hasPermission('Node','read',file.parent)}">
-                <h:graphicImage value="#{themePath}/img/icon.dir.gif"
+                <h:graphicImage value="#{imagePath}/icon.dir.gif"
                                 width="18" height="20" style="vertical-align: middle; margin-right: 5px;"/>
                 <h:outputLink value="#{wikiURLRenderer.renderURL(file.parent)}" tabindex="1">
                     <h:outputText value="#{wiki:truncateString(file.parent.name, 20, '...')}"/>

Deleted: trunk/examples/wiki/view/themes/default/css/blogArchive.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/blogArchive.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/blogArchive.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,9 +0,0 @@
-.blogArchiveSelector {
-    text-align: center;
-}
-.blogArchiveCombo {
-    border: 0;
-    margin: 10px;
-    color: #000;
-    font-weight: normal;
-}

Deleted: trunk/examples/wiki/view/themes/default/css/blogDirectory.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/blogDirectory.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/blogDirectory.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,84 +0,0 @@
-.blogEntryHeader {
-}
-
-.blogEntryHeader .title {
-    text-align: left;
-    line-height: 200%;
-    font-size: 115%;
-}
-
-.blogEntryHeader .dateAuthor {
-    text-align: right;
-    white-space: nowrap;
-    font-weight: normal;
-    line-height: 100%;
-}
-
-.blogEntryContent {
-    padding-left: 15px;
-    padding-right: 15px;
-    line-height: 150%;
-    text-align: justify;
-}
-
-.blogEntryContent .wikiHeadline1 a,
-.blogEntryContent .wikiHeadline2 a,
-.blogEntryContent .wikiHeadline3 a,
-.blogEntryContent .wikiHeadline4 a {
-    color: black;
-}
-
-.blogEntryFooter {
-}
-
-.blogEntryFooterTable {}
-
-.blogEntryCommentCount,
-.blogEntryCommentLink,
-.blogEntryAttachmentsLink,
-.blogEntryPermLink,
-.blogEntryWikiLink {
-    padding-right: 25px;
-    text-align:left;
-}
-.blogEntryCommentCountText,
-.blogEntryCommentLinkText,
-.blogEntryAttachmentsLinkText,
-.blogEntryPermLinkText,
-.blogEntryWikiLinkText {
-    color: #962325;
-}
-.blogEntryCommentCountText:hover,
-.blogEntryCommentLinkText:hover,
-.blogEntryAttachmentsLinkText:hover,
-.blogEntryPermLinkText:hover,
-.blogEntryWikiLinkText:hover {
-    color: #962325;
-}
-
-.blogEntrySeparator {
-    height: 25px;
-}
-
-.blogPagerTable {
-    width: 100%;
-    font-weight: bold;
-    padding: 0;
-    margin: 0;
-    margin-top: 10px;
-    margin-bottom: 10px;
-    border: 0;
-    text-align: center;
-}
-
-.blogPagerColumn {
-    width: 10%;
-}
-.blogPagerTextColumn {
-    width: 60%;
-}
-
-.documentTags {
-    margin-left: 10px;
-    margin-right: 10px;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/default/css/blogRecentEntries.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/blogRecentEntries.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/blogRecentEntries.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,7 +0,0 @@
-.blogRecentEntriesDay {
-    font-weight: bold;
-}
-
-.blogRecentEntriesItem {
-    padding-left: 10px;
-}

Deleted: trunk/examples/wiki/view/themes/default/css/dirMenu.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/dirMenu.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/dirMenu.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,59 +0,0 @@
-.dirMenu .level1 {
-}
-
-.dirMenu .level1Body {
-    background-color: white;
-}
-
-.dirMenu .level1Marker {
-    display: none;
-}
-
-.dirMenu .level1Link {
-    color: #962325;
-    font-size: 95%;
-    text-decoration: none;
-}
-
-.dirMenu .level1Link:hover {color: #666}
-
-.dirMenu .level1Children {
-    background-color: white;
-}
-
-.dirMenu .level2 {
-}
-
-.dirMenu .level2Marker {
-    padding-left: 2px;
-    padding-right: 2px;
-    font-size: 80%;
-    color: #962325;
-}
-
-.dirMenu .level2Link {
-    font-size: 80%;
-    color: #962325;
-    text-decoration: none;
-    white-space: nowrap;
-}
-
-.dirMenu .level2Link:hover {color: #666}
-
-.dirMenu .level3 {}
-
-.dirMenu .level3Marker {
-    padding-left: 2px;
-    padding-right: 2px;
-    font-size: 80%;
-    color: #962325;
-}
-
-.dirMenu .level3Link {
-    font-size: 80%;
-    color: #962325;
-    text-decoration: none;
-    white-space: nowrap;
-}
-
-.dirMenu .level3Link:hover {color: #666}

Deleted: trunk/examples/wiki/view/themes/default/css/dirToc.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/dirToc.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/dirToc.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,20 +0,0 @@
-.dirToc {
-}
-
-.tocDirectoryLabel {
-    font-weight: bold;
-}
-
-.tocDirectoryLabel {
-    cursor: pointer;
-}
-
-.tocDocumentLabel {
-    margin-left: 5px;
-    cursor: pointer;
-}
-
-.rich-tree-node-highlighted .tocDirectoryLabel,
-.rich-tree-node-highlighted .tocDocumentLabel {
-    color: black;
-}

Deleted: trunk/examples/wiki/view/themes/default/css/docPager.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/docPager.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/docPager.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,22 +0,0 @@
-.docPager {
-    width: 100%;
-    background: #f5f5f5;
-}
-
-.docPagerPrevious {
-    text-align: left;
-}
-
-.docPagerNext {
-    text-align: right;
-}
-
-.docPagerButton {
-    vertical-align: text-bottom;
-}
-
-.docPagerLabel {
-    margin-left: 10px;
-    margin-right: 10px;
-}
-

Deleted: trunk/examples/wiki/view/themes/default/css/faqBrowser.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/faqBrowser.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/faqBrowser.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,72 +0,0 @@
-.faqControlsContainer {
-    margin-bottom: 10px;
-}
-
-.faqBrowserPanel {
-    border: 1px solid #C3BBB6;
-    background: white url(#{themePathGetRequest}/img/th.bg.gif) 0 0 repeat-x;
-    padding: 2px;
-    padding-left: 5px;
-    padding-right: 5px;
-    line-height: 250%;
-}
-
-.faqBrowserPanel .categoryLabel {
-    padding-left: 5px;
-    white-space:nowrap;
-}
-
-.faqBrowserPanel .categoryMenu {
-    padding-left: 10px;
-    padding-right: 10px;
-    white-space:nowrap;
-}
-
-.faqBrowserPanel .questionsControl {
-    white-space:nowrap;
-}
-
-.faqBrowserPanel .categoryLink {
-    padding-left: 10px;
-    padding-right: 10px;
-    white-space:nowrap;
-}
-
-.faqQuestionPanel {
-    border-left: 1px solid #C3BBB6;
-    border-right: 1px solid #C3BBB6;
-    border-bottom: 1px solid #C3BBB6;
-    background: white url(#{themePathGetRequest}/img/th.bg.inverse.gif) 0 0 repeat-x;
-}
-
-.faqQuestionPanel .header {
-    white-space:nowrap;
-    width: 100%;
-}
-
-.faqQuestionPanel .header .categoryDescription {
-    padding-left: 10px;
-    line-height: 250%;
-    font-weight: bold;
-}
-
-.faqQuestionPanel .header .newQuestionButton {
-    text-align:right;
-}
-
-.faqQuestionPanel .noQuestions {
-    padding-left: 10px;
-    line-height: 250%;
-}
-
-.faqQuestionList {
-    width: 100%;
-}
-
-.faqQuestionList .rowOdd {
-    background-color: #fff;
-}
-
-.faqQuestionList .rowEven {
-    background-color: #eae8e5;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/default/css/feedAggregator.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/feedAggregator.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/feedAggregator.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,22 +0,0 @@
-.feedAggregatorTitle {
-    margin-left: auto;
-}
-
-.feedEntryColumn {
-    padding: 10px;
-}
-
-.feedEntryTitle {
-    font-weight: bold;
-    padding-top: 15px;
-    padding-bottom: 15px;
-}
-
-.feedEntryInfo {
-    text-align: right;
-}
-
-.feedEntryBody {
-    line-height: 150%;
-    text-align:justify;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/default/css/feedTeasers.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/feedTeasers.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/feedTeasers.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,28 +0,0 @@
-.teaserColumn {
-    padding: 10px;
-}
-
-.teaserTitle {
-    margin-bottom: 5px;
-    font-weight: bold;
-}
-
-.teaserAuthorDate {
-    text-align: right;
-}
-
-.teaserAuthor {
-}
-
-.teaserAuthorLink {
-    color: #962325;
-    text-decoration: none;
-}
-
-.teaserDate {
-}
-
-.teaserBody {
-    line-height: 150%;
-    text-align:justify;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/default/css/forumList.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/forumList.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/forumList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,47 +0,0 @@
-.forumListControlsContainer {
-    text-align: right;
-    white-space: nowrap;
-    margin-bottom: 15px;
-}
-
-.forumListTableContainer {
-}
-
-.forumFormContainer {
-    margin-bottom: 20px;
-}
-
-.forumTitle {
-    font-weight: normal;
-    line-height: 160%;
-}
-
-.forumDescription {
-    white-space: normal;    
-}
-
-.topicGotoIcon {
-    margin-left: 5px;
-    margin-right: 5px;
-}
-
-.forumsFeedLink {
-    margin: 10px;
-    float: right;
-    margin-top: -30px;
-}
-
-.forumsFeedLink img {
-    vertical-align: middle;
-    margin-right: 5px;
-}
-
-.forumFeedLink {
-
-}
-
-.forumFeedLink img {
-    margin-left: 8px;
-    margin-right: 8px;
-    margin-bottom: 2px;
-}

Deleted: trunk/examples/wiki/view/themes/default/css/forumPosting.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/forumPosting.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/forumPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,40 +0,0 @@
-.forumPostingHeaderInfoControls {
-    width: 100%;
-    margin-bottom: 10px;
-}
-
-.forumPostingHeaderInfo {
-    text-align: left;
-}
-
-.forumPostingHeaderControls {
-    text-align: right;
-    white-space: nowrap;
-}
-
-.forumPostingControls {
-    text-align: right;
-    white-space: nowrap;
-}
-    
-.forumPostingDocumentWrapper {
-    border-left: 1px solid #C3BBB6;
-    border-right: 1px solid #C3BBB6;
-    border-top: 1px solid #C3BBB6;
-    padding: 5px;
-}
-
-.forumPostingDocumentWrapper .subjectLink {
-    margin-left: 10px;
-    font-weight: normal;
-    line-height: 100%;
-}
-
-.forumPostingDocumentWrapper .subjectIcon {
-    vertical-align: text-top;
-}
-
-.noComments {
-    border-bottom: 1px solid #C3BBB6;
-}
-

Deleted: trunk/examples/wiki/view/themes/default/css/forumReplies.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/forumReplies.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/forumReplies.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,16 +0,0 @@
-.forumReplyControls {
-    width: 100%;
-}
-
-.forumReplyRating {
-    text-align: left;
-}
-
-.forumReplyStatus {
-    text-align: right;
-}
-
-.forumReplyControl {
-    text-align: right;
-    width: 200px;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/default/css/forumStickyPosting.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/forumStickyPosting.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/forumStickyPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,40 +0,0 @@
-.forumPostingHeaderInfoControls {
-    width: 100%;
-    margin-bottom: 10px;
-}
-
-.forumPostingHeaderInfo {
-    text-align: left;
-}
-
-.forumPostingHeaderControls {
-    text-align: right;
-    white-space: nowrap;
-}
-
-.forumPostingControls {
-    text-align: right;
-    white-space: nowrap;
-}
-
-.forumPostingDocumentWrapper {
-    border-left: 1px solid #C3BBB6;
-    border-right: 1px solid #C3BBB6;
-    border-top: 1px solid #C3BBB6;
-    padding: 5px;
-}
-
-.forumPostingDocumentWrapper .subjectLink {
-    margin-left: 10px;
-    font-weight: normal;
-    line-height: 100%;
-}
-
-.forumPostingDocumentWrapper .subjectIcon {
-    vertical-align: text-top;
-}
-
-.noComments {
-    border-bottom: 1px solid #C3BBB6;
-}
-

Deleted: trunk/examples/wiki/view/themes/default/css/forumTopics.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/forumTopics.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/forumTopics.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,60 +0,0 @@
-.forumDescriptionTopicControls {
-    width: 100%;
-}
-
-.forumDescription {
-}
-
-.topicControls {
-    text-align: right;
-    white-space: nowrap;
-    padding-left: 10px;
-}
-
-.topicFormContainer {
-}
-
-.topicTableContainer {
-}
-
-.topicPager {
-    width: 100%;
-}
-
-.topicPagerTable {
-    width: 100%;
-    font-weight: bold;
-    padding: 0;
-    margin: 0;
-    margin-top: 10px;
-    margin-bottom: 10px;
-    border: 0;
-    text-align: center;
-}
-
-.topicPagerColumn {
-    width: 10%;
-}
-.topicPagerTextColumn {
-    width: 60%;
-}
-
-.topicGotoIcon {
-    margin-left: 5px;
-    margin-right: 5px;
-}
-
-.forumsFeedLink {
-    margin: 10px;
-    float: right;
-    margin-top: -30px;
-}
-
-.forumsFeedLink img {
-    vertical-align: middle;
-    margin-right: 5px;
-}
-
-.forumDescription {
-    text-align: left;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/default/css/jiraIssueList.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/jiraIssueList.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/jiraIssueList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,17 +0,0 @@
-.jiraIssueList {}
-
-.jiraIssueListTable {}
-
-.jiraIssueListTable .priorityColumn {}
-
-.jiraIssueListTable .summaryColumn {}
-
-.jiraIssueListTable .jiraIssueComponents {
-    text-align: right;
-}
-
-.jiraIssueListEmpty {
-    padding: 5px;
-}
-
-

Deleted: trunk/examples/wiki/view/themes/default/css/lastModifiedDocuments.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/lastModifiedDocuments.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/lastModifiedDocuments.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,17 +0,0 @@
-.lastModifiedDocuments {}
-
-.lastModifiedLink {
-}
-
-.lastModifiedColumn {
-    padding-bottom: 5px;
-}
-
-.lastModifiedAuthorDate {
-    text-align: right;
-}
-
-.lastModifiedLink:link {color: #962325}
-.lastModifiedLink:visited {color: #962325}
-.lastModifiedLink:hover {color: #000}
-.lastModifiedLink:active {color: #aaa}

Modified: trunk/examples/wiki/view/themes/default/css/template.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/template.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/css/template.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1577,7 +1577,7 @@
 }
 
 
-/* Trees
+/* Trees (undo the Richfaces default damage)
 ----------------------------------------------- */
 
 .rich-tree-node {
@@ -1604,3 +1604,28 @@
     padding-top: 2px;
     cursor: pointer;
 }
+
+
+/* Toggle Panels (undo the Richfaces default damage)
+----------------------------------------------- */
+
+.rich-stglpanel {
+    border-style: none;
+    font-size: 100%;
+    font-family: Verdana, Arial, Helvetica, sans-serif;
+}
+
+.rich-stglpanel-header {
+    background: #ede8db url(../img/th.bg.gif ) 0 0 repeat-x;
+    border: 1px solid #C3BBB6;
+    font-family: Verdana, Arial, Helvetica, sans-serif;
+    font-size: 85%;
+}
+
+.rich-stglpanel-body {
+    border-style: none;
+    background: #fff;
+    padding: 0;
+    font-size: 100%;
+    font-family: Verdana, Arial, Helvetica, sans-serif;
+}

Deleted: trunk/examples/wiki/view/themes/default/img/icon.posting.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.posting_goto.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.posting_locked.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.posting_locked_unread.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.posting_sticky.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.posting_sticky_unread.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.posting_unread.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.priority.blocker.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.priority.critical.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.priority.major.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.priority.minor.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.priority.optional.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/default/img/icon.priority.trivial.gif
===================================================================
(Binary files differ)

Modified: trunk/examples/wiki/view/themes/default/m/template.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/default/m/template.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/m/template.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -30,7 +30,7 @@
     <s:div rendered="#{!empty facesMessages.currentGlobalMessages}">
         <ui:repeat var="message" value="#{facesMessages.currentGlobalMessages}">
             <h:panelGrid columns="2" cellpadding="0" cellspacing="0" border="0" columnClasses="messageBoxCell">
-                <h:graphicImage value="#{themePath}/img/info.gif"
+                <h:graphicImage value="#{imagePath}/info.gif"
                                 width="18" height="18"
                                 styleClass="infoImage"/>
                 <h:outputText styleClass="infoMessage" value="#{message.summary}"/>

Modified: trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyReply.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyReply.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyReply.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -28,7 +28,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{currentDocument}"
                                 currentAreaNumber="#{currentDocument.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
 
             <hr/>
             <h:outputLink value="#{wikiURLRenderer.renderURL(replyHome.instance)}">Click here</h:outputLink> to reply...

Modified: trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyReplyToList.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyReplyToList.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyReplyToList.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -35,7 +35,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{currentDocument}"
                                 currentAreaNumber="#{currentDocument.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
 
             <hr/>
             <h:outputLink value="#{wikiURLRenderer.renderURL(replyHome.instance)}">Click here</h:outputLink> to reply...

Modified: trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyTopicToList.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyTopicToList.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/mailtemplates/forumNotifyTopicToList.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -30,7 +30,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{currentDocument}"
                                 currentAreaNumber="#{currentDocument.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
 
             <hr/>
             <h:outputLink value="#{wikiURLRenderer.renderURL(topicHome.instance)}">Click here</h:outputLink> to reply...

Modified: trunk/examples/wiki/view/themes/default/template.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/default/template.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/default/template.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -20,8 +20,8 @@
     <link href="#{themePath}/css/mainMenu.css" rel="stylesheet" type="text/css"/>
     <ui:insert name="includeHeaders"/>
 
-    <script type="text/javascript" src="#{basePath}/seam/resource/remoting/resource/remote.js"></script>
-    <script type="text/javascript" src="#{basePath}/seam/resource/remoting/interface.js?httpSessionChecker"></script>
+    <script type="text/javascript" src="#{contextPath}/seam/resource/remoting/resource/remote.js"></script>
+    <script type="text/javascript" src="#{contextPath}/seam/resource/remoting/interface.js?httpSessionChecker"></script>
     <script type="text/javascript" src="#{themePath}/js/jquery.js"></script>
     <script type="text/javascript" src="#{themePath}/js/interface.js"></script>
     <script type="text/javascript" src="#{themePath}/js/jqModal.js"></script>
@@ -258,7 +258,7 @@
             <ui:define name="mainMenuFooter">
                 <s:div styleClass="feeds" rendered="#{preferences.get('Wiki').showSiteFeedInMenu}">
                     <h:outputLink value="#{wikiURLRenderer.renderFeedURL(wikiRoot.feed, null, null)}">
-                        <h:graphicImage value="#{themePath}/img/icon.atom.gif" width="18" height="18"/>
+                        <h:graphicImage value="#{imagePath}/icon.atom.gif" width="18" height="18"/>
                         <span class="feedText">#{messages['lacewiki.button.SiteFeed']}</span>
                     </h:outputLink>
                 </s:div>
@@ -285,7 +285,7 @@
 
                     <h:panelGrid styleClass="messageBoxTable" columns="2" cellpadding="0" cellspacing="0" border="0"
                                  rendered="#{message.severity.ordinal == 0}">
-                            <h:graphicImage value="#{themePath}/img/info.gif"
+                            <h:graphicImage value="#{imagePath}/info.gif"
                                             width="18" height="18"
                                             styleClass="infoImage"/>
                             <h:outputText styleClass="infoMessage" value="#{message.summary}"/>
@@ -293,7 +293,7 @@
 
                     <h:panelGrid styleClass="messageBoxTable" columns="2" cellpadding="0" cellspacing="0" border="0"
                                  rendered="#{message.severity.ordinal > 0}">
-                        <h:graphicImage value="#{themePath}/img/attention.gif"
+                        <h:graphicImage value="#{imagePath}/attention.gif"
                                         rendered="#{message.severity.ordinal > 0}"
                                         width="18" height="18"
                                         styleClass="attentionImage"/>
@@ -341,12 +341,12 @@
     <a:status id="globalStatus" forceId="true">
         <f:facet name="start">
             <s:div styleClass="statusStart">
-                <h:graphicImage value="#{themePath}/img/statusindicator.gif" width="20" height="25"/>
+                <h:graphicImage value="#{imagePath}/statusindicator.gif" width="20" height="25"/>
             </s:div>
         </f:facet>
         <f:facet name="stop">
             <s:div styleClass="statusStop">
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="20" height="25"/>
+                <h:graphicImage value="#{imagePath}/blank.gif" width="20" height="25"/>
             </s:div>
         </f:facet>
     </a:status>

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/blogArchive.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/blogArchive.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/blogArchive.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,10 +0,0 @@
-.blogArchiveSelector {
-    text-align: center;
-}
-.blogArchiveCombo {
-    border: 0;
-    color: #000;
-    font-size: 91%;
-    font-weight: normal;
-    font-family: "Lucida Sans", Arial, Helvetica, sans-serif;
-}

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/blogDirectory.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/blogDirectory.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/blogDirectory.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,102 +0,0 @@
-#blogDirectoryPlugin\:blogEntries .boxheader {
-    padding-bottom: 0;
-}
-
-#blogDirectoryPlugin\:blogEntries .boxContent {
-    padding-top: 0;
-    padding-bottom: 0;
-}
-
-#blogDirectoryPlugin\:blogEntries .boxContent .wikiPara:first-child {
-    padding-top: 5px;
-    margin-top: 0;
-}
-
-.blogEntryHeader .title {
-    text-align: left;
-    line-height: 200%;
-    font-size: 120%;
-}
-
-.blogEntryHeader .dateAuthor {
-    text-align: right;
-    white-space: nowrap;
-    font-weight: normal;
-    line-height: 100%;
-}
-
-.blogEntryContent {
-    padding-left: 15px;
-    padding-right: 15px;
-    line-height: 150%;
-    text-align: justify;
-}
-
-.blogEntryContent .documentTags {
-    padding-top: 5px;
-    padding-bottom: 5px;
-    padding-left: 0;
-    padding-right: 0;
-    margin: 0;
-    font-size: 85%;
-}
-
-.blogEntryContent .wikiHeadline1 a,
-.blogEntryContent .wikiHeadline2 a,
-.blogEntryContent .wikiHeadline3 a,
-.blogEntryContent .wikiHeadline4 a {
-    color: black;
-}
-
-.blogEntryFooter {
-    font-size: 85%;
-}
-
-.blogEntryFooterTable {
-    margin-right: auto;
-}
-
-.blogEntryCommentCount,
-.blogEntryCommentLink,
-.blogEntryAttachmentsLink,
-.blogEntryPermLink,
-.blogEntryWikiLink {
-    padding-right: 25px;
-    text-align:left;
-}
-.blogEntryCommentCountText,
-.blogEntryCommentLinkText,
-.blogEntryAttachmentsLinkText,
-.blogEntryPermLinkText,
-.blogEntryWikiLinkText {
-    color: #d75525;
-}
-.blogEntryCommentCountText:hover,
-.blogEntryCommentLinkText:hover,
-.blogEntryAttachmentsLinkText:hover,
-.blogEntryPermLinkText:hover,
-.blogEntryWikiLinkText:hover {
-    color: #666;
-}
-
-.blogEntrySeparator {
-    height: 25px;
-}
-
-.blogPagerTable {
-    width: 100%;
-    font-weight: bold;
-    padding: 0;
-    margin: 0;
-    margin-top: 10px;
-    margin-bottom: 10px;
-    border: 0;
-    text-align: center;
-}
-
-.blogPagerColumn {
-    width: 10%;
-}
-.blogPagerTextColumn {
-    width: 60%;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/blogRecentEntries.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/blogRecentEntries.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/blogRecentEntries.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,7 +0,0 @@
-.blogRecentEntriesDay {
-    font-weight: bold;
-}
-
-.blogRecentEntriesItem {
-    padding-left: 10px;
-}

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/dirMenu.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/dirMenu.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/dirMenu.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,59 +0,0 @@
-.dirMenu .level1 {
-}
-
-.dirMenu .level1Body {
-    background-color: white;
-}
-
-.dirMenu .level1Marker {
-    display: none;
-}
-
-.dirMenu .level1Link {
-    color: #d75525;
-    font-size: 95%;
-    text-decoration: none;
-}
-
-.dirMenu .level1Link:hover {color: #666}
-
-.dirMenu .level1Children {
-    background-color: white;
-}
-
-.dirMenu .level2 {
-}
-
-.dirMenu .level2Marker {
-    color: #d75525;
-    padding-left: 2px;
-    padding-right: 2px;
-    font-size: 80%;
-}
-
-.dirMenu .level2Link {
-    color: #d75525;
-    font-size: 80%;
-    text-decoration: none;
-    white-space: nowrap;
-}
-
-.dirMenu .level2Link:hover {color: #666}
-
-.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}

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/dirToc.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/dirToc.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/dirToc.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,20 +0,0 @@
-.dirToc {
-}
-
-.tocDirectoryLabel {
-    font-weight: bold;
-}
-
-.tocDirectoryLabel {
-    cursor: pointer;
-}
-
-.tocDocumentLabel {
-    margin-left: 5px;
-    cursor: pointer;
-}
-
-.rich-tree-node-highlighted .tocDirectoryLabel,
-.rich-tree-node-highlighted .tocDocumentLabel {
-    color: black;
-}

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/docPager.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/docPager.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/docPager.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,22 +0,0 @@
-.docPager {
-    width: 100%;
-    background: #f5f5f5;
-}
-
-.docPagerPrevious {
-    text-align: left;
-}
-
-.docPagerNext {
-    text-align: right;
-}
-
-.docPagerButton {
-    vertical-align: text-bottom;
-}
-
-.docPagerLabel {
-    margin-left: 10px;
-    margin-right: 10px;
-}
-

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/faqBrowser.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/faqBrowser.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/faqBrowser.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,78 +0,0 @@
-#faqBrowserPlugin\:faqQuestionForm {
-    border: 1px solid #C3BBB6;
-}
-
-#faqBrowserPlugin\:faqQuestionForm .form {
-    margin:0;
-}
-
-.faqControlsContainer {
-    margin-bottom: 10px;
-}
-
-.faqBrowserPanel {
-    border: 1px solid #C3BBB6;
-    background: #d6d5c8 url(#{themePathGetRequest}/img/th.bg.gif) 0 0 repeat-x;
-    padding: 2px;
-    padding-left: 5px;
-    padding-right: 5px;
-}
-
-.faqBrowserPanel .categoryLabel {
-    padding-left: 5px;
-    white-space:nowrap;
-}
-
-.faqBrowserPanel .categoryMenu {
-    padding-left: 10px;
-    padding-right: 10px;
-    white-space:nowrap;
-}
-
-.faqBrowserPanel .questionsControl {
-    white-space:nowrap;
-}
-
-.faqBrowserPanel .categoryLink {
-    padding-left: 10px;
-    padding-right: 10px;
-    white-space:nowrap;
-}
-
-.faqQuestionPanel {
-    border-left: 1px solid #C3BBB6;
-    border-right: 1px solid #C3BBB6;
-    border-bottom: 1px solid #C3BBB6;
-    background: white url(#{themePathGetRequest}/img/th.bg.inverse.gif) 0 0 repeat-x;
-}
-
-.faqQuestionPanel .header {
-    white-space:nowrap;
-    width: 100%;
-}
-
-.faqQuestionPanel .header .categoryDescription {
-    padding-left: 10px;
-    line-height: 250%;
-    font-weight: bold;
-}
-
-.faqQuestionPanel .header .newQuestionButton {
-    text-align:right;
-}
-
-.faqQuestionPanel .noQuestions {
-    padding-left: 10px;
-    line-height: 250%;
-}
-
-.faqQuestionList {
-}
-
-.faqQuestionList .rowOdd {
-    background-color: #fff;
-}
-
-.faqQuestionList .rowEven {
-    background-color: #eae8e5;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/feedAggregator.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/feedAggregator.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/feedAggregator.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,22 +0,0 @@
-.feedAggregatorTitle {
-    margin-left: auto;
-}
-
-.feedEntryColumn {
-    padding: 10px;
-}
-
-.feedEntryTitle {
-    font-weight: bold;
-    padding-top: 15px;
-    padding-bottom: 15px;
-}
-
-.feedEntryInfo {
-    text-align: right;
-}
-
-.feedEntryBody {
-    line-height: 150%;
-    text-align:justify;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/feedTeasers.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/feedTeasers.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/feedTeasers.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,28 +0,0 @@
-.teaserColumn {
-    padding: 10px;
-}
-
-.teaserTitle {
-    margin-bottom: 5px;
-    font-weight: bold;
-}
-
-.teaserAuthorDate {
-    text-align: right;
-}
-
-.teaserAuthor {
-}
-
-.teaserAuthorLink {
-    color: #d75525;
-    text-decoration: none;
-}
-
-.teaserDate {
-}
-
-.teaserBody {
-    line-height: 150%;
-    text-align:justify;
-}

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/forumList.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/forumList.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/forumList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,55 +0,0 @@
-.forumListControlsContainer {
-    text-align: right;
-    white-space: nowrap;
-    margin-bottom: 15px;
-}
-
-.forumListTableContainer {
-}
-
-.forumListRow td {
-    padding-top: 10px;
-    padding-bottom: 10px;
-}
-
-.forumFormContainer {
-    margin-bottom: 20px;
-}
-
-.forumTitle {
-    font-weight: bold;
-}
-
-.forumDescription {
-    white-space: normal;    
-}
-
-.topicGotoIcon {
-    margin-left: 5px;
-    margin-right: 5px;
-}
-
-.forumsFeedLink {
-    margin: 10px;
-    float: right;
-    margin-top: -35px;
-}
-
-.forumsFeedLink img {
-    vertical-align: middle;
-    margin-right: 5px;
-}
-
-.forumFeedLink {
-
-}
-
-.forumFeedLink img {
-    margin-left: 8px;
-    margin-right: 8px;
-    margin-bottom: 2px;
-}
-
-.userInfoPopupContainer {
-    text-align: left;
-}

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/forumPosting.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/forumPosting.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/forumPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,37 +0,0 @@
-.forumPostingHeaderInfoControls {
-    width: 100%;
-    margin-bottom: 10px;
-}
-
-.forumPostingHeaderInfo {
-    text-align: left;
-}
-
-.forumPostingHeaderControls {
-    text-align: right;
-    white-space: nowrap;
-}
-
-.forumPostingControls {
-    text-align: right;
-    white-space: nowrap;
-}
-
-.forumPostingDocumentWrapper {
-    padding: 5px;
-}
-
-.forumPostingDocumentWrapper .subjectLink {
-    margin-left: 10px;
-    font-weight: normal;
-    line-height: 100%;
-}
-
-.forumPostingDocumentWrapper .subjectIcon {
-    vertical-align: text-top;
-}
-
-.noComments {
-    border-bottom: 1px solid #C3BBB6;
-}
-

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/forumReplies.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/forumReplies.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/forumReplies.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,24 +0,0 @@
-#forumRepliesPlugin\:forumRepliesContainer .commentsDisplay {
-    margin-top: 15px;
-}
-
-#forumRepliesPlugin\:forumRepliesContainer .commentsDisplay .boxShadowed {
-    padding-bottom: 15px;
-}
-
-.forumReplyControls {
-    width: 100%;
-}
-
-.forumReplyRating {
-    text-align: left;
-}
-
-.forumReplyStatus {
-    text-align: right;
-}
-
-.forumReplyControl {
-    text-align: right;
-    width: 200px;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/forumStickyPosting.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/forumStickyPosting.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/forumStickyPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,37 +0,0 @@
-.forumPostingHeaderInfoControls {
-    width: 100%;
-    margin-bottom: 10px;
-}
-
-.forumPostingHeaderInfo {
-    text-align: left;
-}
-
-.forumPostingHeaderControls {
-    text-align: right;
-    white-space: nowrap;
-}
-
-.forumPostingControls {
-    text-align: right;
-    white-space: nowrap;
-}
-
-.forumPostingDocumentWrapper {
-    padding: 5px;
-}
-
-.forumPostingDocumentWrapper .subjectLink {
-    margin-left: 10px;
-    font-weight: normal;
-    line-height: 100%;
-}
-
-.forumPostingDocumentWrapper .subjectIcon {
-    vertical-align: text-top;
-}
-
-.noComments {
-    border-bottom: 1px solid #C3BBB6;
-}
-

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/forumTopics.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/forumTopics.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/forumTopics.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,61 +0,0 @@
-.forumDescriptionTopicControls {
-    width: 100%;
-}
-
-.forumDescription {
-}
-
-.topicControls {
-    text-align: right;
-    white-space: nowrap;
-    padding-left: 10px;
-}
-
-.topicFormContainer {
-}
-
-.topicTableContainer {
-}
-
-.topicPager {
-    width: 100%;
-}
-
-.topicPagerTable {
-    width: 100%;
-    font-weight: bold;
-    padding: 0;
-    margin: 0;
-    margin-top: 10px;
-    margin-bottom: 10px;
-    border: 0;
-    text-align: center;
-}
-
-.topicPagerColumn {
-    width: 10%;
-}
-.topicPagerTextColumn {
-    width: 60%;
-}
-
-.topicGotoIcon {
-    margin-left: 5px;
-    margin-right: 5px;
-}
-
-.forumsFeedLink {
-    margin: 10px;
-    float: right;
-    margin-top: -35px;
-    
-}
-
-.forumsFeedLink img {
-    vertical-align: middle;
-    margin-right: 5px;
-}
-
-.forumDescription {
-    text-align: left;
-}

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/jiraIssueList.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/jiraIssueList.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/jiraIssueList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,17 +0,0 @@
-.jiraIssueList {}
-
-.jiraIssueListTable {}
-
-.jiraIssueListTable .priorityColumn {}
-
-.jiraIssueListTable .summaryColumn {}
-
-.jiraIssueListTable .jiraIssueComponents {
-    text-align: right;
-}
-
-.jiraIssueListEmpty {
-    padding: 5px;
-}
-
-

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/lastModifiedDocuments.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/lastModifiedDocuments.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/lastModifiedDocuments.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,17 +0,0 @@
-.lastModifiedDocuments {}
-
-.lastModifiedLink {
-}
-
-.lastModifiedColumn {
-    padding-bottom: 5px;
-}
-
-.lastModifiedAuthorDate {
-    text-align: right;
-}
-
-.lastModifiedLink:link {color: #d75525}
-.lastModifiedLink:visited {color: #d75525}
-.lastModifiedLink:hover {color: #000}
-.lastModifiedLink:active {color: #aaa}

Deleted: trunk/examples/wiki/view/themes/inrelationto/css/userProfile.css
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/css/userProfile.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/css/userProfile.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,43 +0,0 @@
-.userProfilePortrait {
-    margin-left: 10px;
-    margin-right: 10px;
-    margin-top: 3px;
-    margin-bottom: 5px;
-    float: left;
-}
-
-.userProfilePortraitImage {
-    border: 1px solid #87786e;
-}
-
-.userProfileBio{
-    font-size: 75%;
-    margin-right: 10px;
-    margin-left: 10px;
-    color: #000;
-    text-align: justify;
-    line-height: 130%;
-}
-
-.userProfileEntry {
-    clear: both;
-    margin-bottom: 5px;
-    margin-left: 10px;
-    margin-right: 10px;
-    font-size: 75%;
-    color: #000;
-    line-height: 140%;
-}
-
-.userProfileEntryLabel {
-    font-weight: bold;
-}
-
-.userProfileEntryText {
-}
-
-.userProfileEntryLink {
-    color: #d75525;
-}
-
-.userProfileEntryLink:hover {color: #666}

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.posting.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_goto.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_locked.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_locked_unread.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_sticky.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_sticky_unread.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.posting_unread.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.blocker.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.critical.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.major.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.minor.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.optional.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/inrelationto/img/icon.priority.trivial.gif
===================================================================
(Binary files differ)

Modified: trunk/examples/wiki/view/themes/inrelationto/m/template.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/m/template.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/m/template.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -31,7 +31,7 @@
     <s:div rendered="#{!empty facesMessages.currentGlobalMessages}">
         <ui:repeat var="message" value="#{facesMessages.currentGlobalMessages}">
             <h:panelGrid columns="2" cellpadding="0" cellspacing="0" border="0" columnClasses="messageBoxCell">
-                <h:graphicImage value="#{themePath}/img/info.gif"
+                <h:graphicImage value="#{imagePath}/info.gif"
                                 width="18" height="18"
                                 styleClass="infoImage"/>
                 <h:outputText styleClass="infoMessage" value="#{message.summary}"/>

Modified: trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyReply.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyReply.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyReply.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -28,7 +28,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{currentDocument}"
                                 currentAreaNumber="#{currentDocument.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
 
             <hr/>
             <h:outputLink value="#{wikiURLRenderer.renderURL(replyHome.instance)}">Click here</h:outputLink> to reply...

Modified: trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyReplyToList.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyReplyToList.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyReplyToList.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -35,7 +35,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{currentDocument}"
                                 currentAreaNumber="#{currentDocument.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
 
             <hr/>
             <h:outputLink value="#{wikiURLRenderer.renderURL(replyHome.instance)}">Click here</h:outputLink> to reply...

Modified: trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyTopicToList.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyTopicToList.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/mailtemplates/forumNotifyTopicToList.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -30,7 +30,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{currentDocument}"
                                 currentAreaNumber="#{currentDocument.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
 
             <hr/>
             <h:outputLink value="#{wikiURLRenderer.renderURL(topicHome.instance)}">Click here</h:outputLink> to reply...

Modified: trunk/examples/wiki/view/themes/inrelationto/template.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/inrelationto/template.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/inrelationto/template.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -17,8 +17,8 @@
 
     <ui:insert name="includeHeaders"/>
 
-    <script type="text/javascript" src="#{basePath}/seam/resource/remoting/resource/remote.js"></script>
-    <script type="text/javascript" src="#{basePath}/seam/resource/remoting/interface.js?httpSessionChecker"></script>
+    <script type="text/javascript" src="#{contextPath}/seam/resource/remoting/resource/remote.js"></script>
+    <script type="text/javascript" src="#{contextPath}/seam/resource/remoting/interface.js?httpSessionChecker"></script>
     <script type="text/javascript" src="#{themePath}/js/jquery.js"></script>
     <script type="text/javascript" src="#{themePath}/js/jqueryPlugins.js"></script>
     <script type="text/javascript" src="#{themePath}/js/lacewiki.js"></script>
@@ -225,7 +225,7 @@
         <s:div id="headerTopTwo">
             <s:div styleClass="sitename">
                 <h:outputLink value="#{preferences.get('Wiki').baseUrl}" styleClass="sitenameLink">
-                    <h:graphicImage value="#{themePath}/img/inrelationto.gif" width="214" height="25"/>
+                    <h:graphicImage value="#{imagePath}/inrelationto.gif" width="214" height="25"/>
                 </h:outputLink>
             </s:div>
             <ui:include src="../../includes/userControl.xhtml"/>
@@ -268,7 +268,7 @@
             <ui:define name="mainMenuHeader">
                 <s:div styleClass="feeds" rendered="#{preferences.get('Wiki').showSiteFeedInMenu}">
                     <h:outputLink value="#{wikiURLRenderer.renderFeedURL(wikiRoot.feed, null, null)}">
-                        <h:graphicImage value="#{themePath}/img/icon.atom.gif" width="18" height="18"/>
+                        <h:graphicImage value="#{imagePath}/icon.atom.gif" width="18" height="18"/>
                         <span class="feedText">#{messages['lacewiki.button.SiteFeed']}</span>
                     </h:outputLink>
                 </s:div>
@@ -289,7 +289,7 @@
 
                     <h:panelGrid styleClass="messageBoxTable" columns="2" cellpadding="0" cellspacing="0" border="0"
                                  rendered="#{message.severity.ordinal == 0}">
-                            <h:graphicImage value="#{themePath}/img/info.gif"
+                            <h:graphicImage value="#{imagePath}/info.gif"
                                             width="18" height="18"
                                             styleClass="messageBoxImage infoImage"/>
                             <h:outputText styleClass="infoMessage" value="#{message.summary}"/>
@@ -297,7 +297,7 @@
 
                     <h:panelGrid styleClass="messageBoxTable" columns="2" cellpadding="0" cellspacing="0" border="0"
                                  rendered="#{message.severity.ordinal > 0}">
-                        <h:graphicImage value="#{themePath}/img/attention.gif"
+                        <h:graphicImage value="#{imagePath}/attention.gif"
                                         rendered="#{message.severity.ordinal > 0}"
                                         width="18" height="18"
                                         styleClass="messageBoxImage attentionImage"/>
@@ -342,12 +342,12 @@
     <a:status id="globalStatus" forceId="true">
         <f:facet name="start">
             <s:div styleClass="statusStart">
-                <h:graphicImage value="#{themePath}/img/statusindicator.gif" width="20" height="25"/>
+                <h:graphicImage value="#{imagePath}/statusindicator.gif" width="20" height="25"/>
             </s:div>
         </f:facet>
         <f:facet name="stop">
             <s:div styleClass="statusStop">
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="20" height="25"/>
+                <h:graphicImage value="#{imagePath}/blank.gif" width="20" height="25"/>
             </s:div>
         </f:facet>
     </a:status>

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/blogArchive.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/blogArchive.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/blogArchive.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,18 +0,0 @@
-.blogArchiveSelector {
-    text-align: center;
-}
-.blogArchiveCombo {
-    border: 0;
-    color: #000;
-    font-weight: normal;
-}
-
-.blogArchiveFooter {
-    background: #ede8db url(#{themePath}/img/th.bg.gif) 0 0 repeat-x;
-    padding-top: 5px;
-    padding-bottom: 10px;
-    padding-left: 15px;
-    padding-right: 15px;
-    font-weight: normal;
-    color: #962325;
-}

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/blogDirectory.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/blogDirectory.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/blogDirectory.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,89 +0,0 @@
-
-.blogEntryHeader {
-}
-
-.blogEntryHeader .title {
-    text-align: left;
-    line-height: 200%;
-    font-size: 115%;
-}
-
-.blogEntryHeader .dateAuthor {
-    text-align: right;
-    white-space: nowrap;
-    font-weight: normal;
-    line-height: 100%;
-}
-
-.blogEntryContent {
-    padding-left: 15px;
-    padding-right: 15px;
-    line-height: 150%;
-    text-align: justify;
-}
-
-.blogEntryContent .wikiPara {
-    margin-top: 0;
-}
-
-.blogEntryContent .wikiHeadline1 a,
-.blogEntryContent .wikiHeadline2 a,
-.blogEntryContent .wikiHeadline3 a,
-.blogEntryContent .wikiHeadline4 a {
-    color: black;
-}
-
-.blogEntryFooter {
-}
-
-.blogEntryFooterTable {
-}
-
-.blogEntryCommentCount,
-.blogEntryCommentLink,
-.blogEntryAttachmentsLink,
-.blogEntryPermLink,
-.blogEntryWikiLink {
-    padding-right: 25px;
-    text-align:left;
-}
-.blogEntryCommentCountText,
-.blogEntryCommentLinkText,
-.blogEntryAttachmentsLinkText,
-.blogEntryPermLinkText,
-.blogEntryWikiLinkText {
-    color: #576c74;
-}
-.blogEntryCommentCountText:hover,
-.blogEntryCommentLinkText:hover,
-.blogEntryAttachmentsLinkText:hover,
-.blogEntryPermLinkText:hover,
-.blogEntryWikiLinkText:hover {
-    color: #000;
-}
-
-.blogEntrySeparator {
-    height: 25px;
-}
-
-.blogPagerTable {
-    width: 100%;
-    font-weight: bold;
-    padding: 0;
-    margin: 0;
-    margin-top: 10px;
-    margin-bottom: 10px;
-    border: 0;
-    text-align: center;
-}
-
-.blogPagerColumn {
-    width: 10%;
-}
-.blogPagerTextColumn {
-    width: 60%;
-}
-
-.documentTags {
-    margin-top: 10px;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/blogRecentEntries.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/blogRecentEntries.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/blogRecentEntries.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,12 +0,0 @@
-.blogRecentEntriesDay {
-    font-weight: bold;
-}
-
-.blogRecentEntriesItem {
-    padding-left: 10px;
-    padding-top: 2px;
-    padding-bottom: 2px;
-}
-
-.blogRecentEntriesItemLink {
-}

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/dirMenu.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/dirMenu.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/dirMenu.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,42 +0,0 @@
-.dirMenu .level1 {
-}
-
-.dirMenu .level1Body {
-    background-color: white;
-}
-
-.dirMenu .level1Marker {
-    display: none;
-}
-
-.dirMenu .level1Link {
-}
-
-
-.dirMenu .level1Children {
-    background-color: white;
-}
-
-.dirMenu .level2 {
-}
-
-.dirMenu .level2Marker {
-    padding-left: 2px;
-    padding-right: 2px;
-}
-
-.dirMenu .level2Link {
-    white-space: nowrap;
-}
-
-.dirMenu .level3 {}
-
-.dirMenu .level3Marker {
-    padding-left: 2px;
-    padding-right: 2px;
-}
-
-.dirMenu .level3Link {
-    white-space: nowrap;
-}
-

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/dirToc.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/dirToc.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/dirToc.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,21 +0,0 @@
-.dirToc {
-}
-
-.tocDirectoryPanel {
-    margin-top: 5px;
-}
-
-.tocDirectoryLabel {
-    font-weight: bold;
-    cursor: pointer;
-}
-
-.tocDocumentLabel {
-    margin-left: 5px;
-    cursor: pointer;
-}
-
-.rich-tree-node-highlighted .tocDirectoryLabel,
-.rich-tree-node-highlighted .tocDocumentLabel {
-    color: black;
-}

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/docPager.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/docPager.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/docPager.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,22 +0,0 @@
-.docPager {
-    width: 100%;
-    background: #f5f5f5;
-}
-
-.docPagerPrevious {
-    text-align: left;
-}
-
-.docPagerNext {
-    text-align: right;
-}
-
-.docPagerButton {
-    vertical-align: text-bottom;
-}
-
-.docPagerLabel {
-    margin-left: 10px;
-    margin-right: 10px;
-}
-

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/faqBrowser.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/faqBrowser.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/faqBrowser.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,73 +0,0 @@
-.faqControlsContainer {
-    margin-bottom: 10px;
-}
-
-.faqBrowserPanel {
-    border: 1px solid #d3d2d1;
-    background: #ede8db url(#{themePathGetRequest}/img/th.bg.gif) 0 0 repeat-x;
-    padding-left: 5px;
-    padding-right: 5px;
-    padding-top: 5px;
-    line-height: 250%;
-}
-
-.faqBrowserPanel .categoryLabel {
-    padding-left: 5px;
-    white-space:nowrap;
-}
-
-.faqBrowserPanel .categoryMenu {
-    padding-left: 10px;
-    padding-right: 10px;
-    white-space:nowrap;
-}
-
-.faqBrowserPanel .questionsControl {
-    white-space:nowrap;
-}
-
-.faqBrowserPanel .categoryLink {
-    padding-left: 10px;
-    padding-right: 10px;
-    white-space:nowrap;
-}
-
-.faqQuestionPanel {
-    border-left: 1px solid #d3d2d1;
-    border-right: 1px solid #d3d2d1;
-    border-bottom: 1px solid #d3d2d1;
-    background: white url(#{themePathGetRequest}/img/th.bg.inverse.gif) 0 0 repeat-x;
-}
-
-.faqQuestionPanel .header {
-    white-space:nowrap;
-    width: 100%;
-}
-
-.faqQuestionPanel .header .categoryDescription {
-    padding-left: 10px;
-    line-height: 250%;
-    font-weight: bold;
-}
-
-.faqQuestionPanel .header .newQuestionButton {
-    text-align:right;
-}
-
-.faqQuestionPanel .noQuestions {
-    padding-left: 10px;
-    line-height: 250%;
-}
-
-.faqQuestionList {
-    border-right: 1px solid #d3d2d1;
-    width: 100%;
-}
-
-.faqQuestionList .rowOdd {
-    background-color: #fff;
-}
-
-.faqQuestionList .rowEven {
-    background-color: #f5f5f5;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/feedAggregator.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/feedAggregator.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/feedAggregator.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,20 +0,0 @@
-.feedAggregatorTitle {
-    margin-left:auto;
-}
-
-.feedEntryColumn {
-    padding: 10px;
-}
-
-.feedEntryTitle {
-    margin-bottom: 5px;
-    font-weight: bold;
-}
-
-.feedEntryInfo {
-    text-align: right;
-}
-
-.feedEntryBody {
-    line-height: 130%;
-}

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/feedTeasers.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/feedTeasers.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/feedTeasers.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,22 +0,0 @@
-.teaserColumn {
-    padding: 10px;
-}
-
-.teaserTitle {
-    margin-bottom: 5px;
-    font-weight: bold;
-}
-
-.teaserAuthorDate {
-    text-align: right;
-}
-
-.teaserAuthor {
-}
-
-.teaserDate {
-}
-
-.teaserBody {
-    line-height: 130%;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/forumList.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/forumList.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/forumList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,48 +0,0 @@
-.forumListControlsContainer {
-    text-align: right;
-    white-space: nowrap;
-    margin-bottom: 15px;
-}
-
-.forumListTableContainer {
-}
-
-.forumFormContainer {
-    margin-bottom: 20px;
-}
-
-.forumTitle {
-    font-weight: normal;
-    line-height: 180%;
-}
-
-.forumDescription {
-    white-space: normal;
-    line-height: 130%;
-}
-
-.topicGotoIcon {
-    margin-left: 5px;
-    margin-right: 5px;
-}
-
-.forumsFeedLink {
-    margin: 10px;
-    float: right;
-    margin-top: -40px;
-}
-
-.forumsFeedLink img {
-    vertical-align: middle;
-    margin-right: 5px;
-}
-
-.forumFeedLink {
-
-}
-
-.forumFeedLink img {
-    margin-left: 5px;
-    margin-bottom: 3px;
-}
-

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/forumPosting.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/forumPosting.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/forumPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,33 +0,0 @@
-.forumPostingHeaderInfoControls {
-    width: 100%;
-    margin-bottom: 10px;
-}
-
-.forumPostingHeaderInfo {
-    text-align: left;
-    color:#576c74;
-    font-weight: bold;
-}
-
-.forumPostingHeaderControls {
-    text-align: right;
-    white-space: nowrap;
-}
-
-.forumPostingControls {
-    text-align: right;
-    white-space: nowrap;
-    margin-bottom: 10px;
-}
-
-.forumPostingDocumentWrapper {
-    border-left: 1px solid #d3d2d1;
-    border-right: 1px solid #d3d2d1;
-    border-top: 1px solid #d3d2d1;
-    padding: 5px;
-}
-
-.noComments {
-    border-bottom: 1px solid #C3BBB6;
-}
-

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/forumReplies.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/forumReplies.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/forumReplies.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,16 +0,0 @@
-.forumReplyControls {
-    width: 100%;
-}
-
-.forumReplyRating {
-    text-align: left;
-}
-
-.forumReplyStatus {
-    text-align: right;
-}
-
-.forumReplyControl {
-    text-align: right;
-    width: 200px;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/forumStickyPosting.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/forumStickyPosting.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/forumStickyPosting.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,33 +0,0 @@
-.forumPostingHeaderInfoControls {
-    width: 100%;
-    margin-bottom: 10px;
-}
-
-.forumPostingHeaderInfo {
-    text-align: left;
-    color:#576c74;
-    font-weight: bold;
-}
-
-.forumPostingHeaderControls {
-    text-align: right;
-    white-space: nowrap;
-}
-
-.forumPostingControls {
-    text-align: right;
-    white-space: nowrap;
-    margin-bottom: 10px;
-}
-
-.forumPostingDocumentWrapper {
-    border-left: 1px solid #d3d2d1;
-    border-right: 1px solid #d3d2d1;
-    border-top: 1px solid #d3d2d1;
-    padding: 5px;
-}
-
-.noComments {
-    border-bottom: 1px solid #C3BBB6;
-}
-

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/forumTopics.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/forumTopics.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/forumTopics.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,60 +0,0 @@
-.forumDescriptionTopicControls {
-    width: 100%;
-}
-
-.forumDescription {
-}
-
-.topicControls {
-    text-align: right;
-    white-space: nowrap;
-    padding-left: 10px;
-}
-
-.topicFormContainer {
-}
-
-.topicTableContainer {
-}
-
-.topicPager {
-    width: 100%;
-}
-
-.topicPagerTable {
-    width: 100%;
-    font-weight: bold;
-    padding: 0;
-    margin: 0;
-    margin-top: 10px;
-    margin-bottom: 10px;
-    border: 0;
-    text-align: center;
-}
-
-.topicPagerColumn {
-    width: 10%;
-}
-.topicPagerTextColumn {
-    width: 60%;
-}
-
-.topicGotoIcon {
-    margin-left: 5px;
-    margin-right: 5px;
-}
-
-.forumsFeedLink {
-    margin: 10px;
-    float: right;
-    margin-top: -35px;
-}
-
-.forumsFeedLink img {
-    vertical-align: middle;
-    margin-right: 5px;
-}
-
-.forumDescription {
-    text-align: left;
-}
\ No newline at end of file

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/jiraIssueList.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/jiraIssueList.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/jiraIssueList.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,19 +0,0 @@
-.jiraIssueList {}
-
-.jiraIssueListTable {}
-
-.jiraIssueListTable .priorityColumn {}
-
-.jiraIssueListTable .summaryColumn {}
-
-.jiraIssueListTable .jiraIssueComponents {
-    text-align: right;
-}
-
-.jiraIssueListEmpty {
-    border-left: 1px solid #d3d2d1;
-    border-right: 1px solid #d3d2d1;
-    padding: 5px;
-}
-
-

Deleted: trunk/examples/wiki/view/themes/sfwkorg/css/lastModifiedDocuments.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/lastModifiedDocuments.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/lastModifiedDocuments.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1,17 +0,0 @@
-.lastModifiedDocuments {}
-
-.lastModifiedLink {
-}
-
-.lastModifiedColumn {
-    padding-bottom: 5px;
-}
-
-.lastModifiedAuthorDate {
-    text-align: right;
-}
-
-.lastModifiedLink:link {color: #576c74}
-.lastModifiedLink:visited {color: #576c74}
-.lastModifiedLink:hover {color: #000}
-.lastModifiedLink:active {color: #000}

Modified: trunk/examples/wiki/view/themes/sfwkorg/css/sfwk.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/sfwk.css	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/sfwk.css	2008-05-10 02:37:42 UTC (rev 8148)
@@ -1530,7 +1530,7 @@
 }
 
 
-/* Trees
+/* Trees (undo the Richfaces default damage)
 ----------------------------------------------- */
 
 .rich-tree-node {
@@ -1557,6 +1557,31 @@
 }
 
 
+/* Toggle Panels (undo the Richfaces default damage)
+----------------------------------------------- */
+
+.rich-stglpanel {
+    border-style: none;
+    font-size: 100%;
+    font-family:  'Lucida Grande', Geneva, Verdana, Arial, sans-serif;
+}
+
+.rich-stglpanel-header {
+    background: #ede8db url(../img/th.bg.gif ) 0 0 repeat-x;
+    border: 1px solid #d3d2d1;
+    font-family:  'Lucida Grande', Geneva, Verdana, Arial, sans-serif;
+    font-size: 85%;
+}
+
+.rich-stglpanel-body {
+    border-style: none;
+    background: #fff;
+    padding: 0;
+    font-size: 100%;
+    font-family:  'Lucida Grande', Geneva, Verdana, Arial, sans-serif;
+}
+
+
 /* User Control
 ----------------------------------------------- */
 

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_goto.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_locked.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_locked_unread.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_sticky.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_sticky_unread.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.posting_unread.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.blocker.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.critical.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.major.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.minor.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.optional.gif
===================================================================
(Binary files differ)

Deleted: trunk/examples/wiki/view/themes/sfwkorg/img/icon.priority.trivial.gif
===================================================================
(Binary files differ)

Modified: trunk/examples/wiki/view/themes/sfwkorg/m/template.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/m/template.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/m/template.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -26,7 +26,7 @@
     <s:div rendered="#{!empty facesMessages.currentGlobalMessages}">
         <ui:repeat var="message" value="#{facesMessages.currentGlobalMessages}">
             <h:panelGrid columns="2" cellpadding="0" cellspacing="0" border="0" columnClasses="messageBoxCell">
-                <h:graphicImage value="#{themePath}/img/info.gif"
+                <h:graphicImage value="#{imagePath}/info.gif"
                                 width="18" height="18"
                                 styleClass="infoImage"/>
                 <h:outputText styleClass="infoMessage" value="#{message.summary}"/>

Modified: trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyReply.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyReply.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyReply.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -28,7 +28,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{currentDocument}"
                                 currentAreaNumber="#{currentDocument.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
 
             <hr/>
             <h:outputLink value="#{wikiURLRenderer.renderURL(replyHome.instance)}">Click here</h:outputLink> to reply...

Modified: trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyReplyToList.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyReplyToList.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyReplyToList.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -34,7 +34,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{currentDocument}"
                                 currentAreaNumber="#{currentDocument.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
 
             <hr/>
             <h:outputLink value="#{wikiURLRenderer.renderURL(replyHome.instance)}">Click here</h:outputLink> to reply...

Modified: trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyTopicToList.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyTopicToList.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/mailtemplates/forumNotifyTopicToList.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -30,7 +30,7 @@
                                 thumbnailLinkStyleClass="regularLink"
                                 linkBaseFile="#{currentDocument}"
                                 currentAreaNumber="#{currentDocument.areaNumber}"
-                                enablePlugins="false"/>
+                                enableMacroRendering="false"/>
 
             <hr/>
             <h:outputLink value="#{wikiURLRenderer.renderURL(topicHome.instance)}">Click here</h:outputLink> to reply...

Modified: trunk/examples/wiki/view/themes/sfwkorg/template.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/template.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/themes/sfwkorg/template.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -18,8 +18,8 @@
 
     <ui:insert name="includeHeaders"/>
 
-    <script type="text/javascript" src="#{basePath}/seam/resource/remoting/resource/remote.js"></script>
-    <script type="text/javascript" src="#{basePath}/seam/resource/remoting/interface.js?httpSessionChecker"></script>
+    <script type="text/javascript" src="#{contextPath}/seam/resource/remoting/resource/remote.js"></script>
+    <script type="text/javascript" src="#{contextPath}/seam/resource/remoting/interface.js?httpSessionChecker"></script>
     <script type="text/javascript" src="#{themePath}/js/jquery.js"></script>
     <script type="text/javascript" src="#{themePath}/js/jqueryPlugins.js"></script>
     <script type="text/javascript" src="#{themePath}/js/lacewiki.js"></script>
@@ -227,7 +227,7 @@
 
       <div>
           <h:outputLink value="#{preferences.get('Wiki').baseUrl}">
-            <h:graphicImage value="#{themePath}/img/blank.gif" width="210" height="98"/>
+            <h:graphicImage value="#{imagePath}/blank.gif" width="210" height="98"/>
           </h:outputLink>
       </div>
 
@@ -245,7 +245,7 @@
                 <h:panelGrid columns="2" cellpadding="0" cellspacing="0" border="0" styleClass="feeds"
                              rendered="#{preferences.get('Wiki').showSiteFeedInMenu}">
                     <h:outputLink styleClass="feedLink" value="#{wikiURLRenderer.renderFeedURL(wikiRoot.feed, null, null)}">
-                        <h:graphicImage styleClass="feedIcon" value="#{themePath}/img/icon.atom.onbrown.gif" width="18" height="18"/>
+                        <h:graphicImage styleClass="feedIcon" value="#{imagePath}/icon.atom.onbrown.gif" width="18" height="18"/>
                     </h:outputLink>
                     <h:outputLink styleClass="feedLink" value="#{wikiURLRenderer.renderFeedURL(wikiRoot.feed, null, null)}">
                         <span class="feedText">#{messages['lacewiki.button.SiteFeed']}</span>
@@ -320,7 +320,7 @@
             </p>
             <div style="text-align:center;">
                 <h:outputLink value="http://www.seamframework.org/Community/GetASeamIcon">
-                    <h:graphicImage value="#{themePath}/img/runningon_seamlogo_beige.gif"
+                    <h:graphicImage value="#{imagePath}/runningon_seamlogo_beige.gif"
                                     width="200" height="50"/>
                 </h:outputLink>
             </div>
@@ -331,7 +331,7 @@
     <!-- Main Content area  -->
     <div id="rightColumn">
 
-        <h:graphicImage value="#{themePath}/img/blank.gif" width="1" height="1"/>
+        <h:graphicImage value="#{imagePath}/blank.gif" width="1" height="1"/>
         <ui:include src="../../includes/breadcrumb.xhtml"/>
 
         <!-- Status messages -->
@@ -341,7 +341,7 @@
 
                     <h:panelGrid styleClass="messageBoxTable" columns="2" cellpadding="0" cellspacing="0" border="0"
                                  rendered="#{message.severity.ordinal == 0}">
-                            <h:graphicImage value="#{themePath}/img/info.gif"
+                            <h:graphicImage value="#{imagePath}/info.gif"
                                             width="18" height="18"
                                             styleClass="messageBoxImage infoImage"/>
                             <h:outputText styleClass="infoMessage" value="#{message.summary}"/>
@@ -349,7 +349,7 @@
 
                     <h:panelGrid styleClass="messageBoxTable" columns="2" cellpadding="0" cellspacing="0" border="0"
                                  rendered="#{message.severity.ordinal > 0}">
-                        <h:graphicImage value="#{themePath}/img/attention.gif"
+                        <h:graphicImage value="#{imagePath}/attention.gif"
                                         rendered="#{message.severity.ordinal > 0}"
                                         width="18" height="18"
                                         styleClass="messageBoxImage attentionImage"/>
@@ -393,12 +393,12 @@
     <a:status id="globalStatus" forceId="true">
         <f:facet name="start">
             <s:div styleClass="statusStart">
-                <h:graphicImage value="#{themePath}/img/statusindicator.gif" width="20" height="25"/>
+                <h:graphicImage value="#{imagePath}/statusindicator.gif" width="20" height="25"/>
             </s:div>
         </f:facet>
         <f:facet name="stop">
             <s:div styleClass="statusStop">
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="20" height="25"/>
+                <h:graphicImage value="#{imagePath}/blank.gif" width="20" height="25"/>
             </s:div>
         </f:facet>
     </a:status>

Modified: trunk/examples/wiki/view/userList_d.xhtml
===================================================================
--- trunk/examples/wiki/view/userList_d.xhtml	2008-05-10 00:02:13 UTC (rev 8147)
+++ trunk/examples/wiki/view/userList_d.xhtml	2008-05-10 02:37:42 UTC (rev 8148)
@@ -100,29 +100,29 @@
                          rendered="#{userSearch.rowCount > 0}">
 
                 <h:commandLink action="#{userSearch.firstPage()}" rendered="#{userSearch.previousPageAvailable}" tabindex="1">
-                    <h:graphicImage value="#{themePath}/img/page.first.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.first.gif" width="13" height="11"/>
                 </h:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!userSearch.previousPageAvailable}"/>
 
                 <h:commandLink action="#{userSearch.previousPage()}" rendered="#{userSearch.previousPageAvailable}" tabindex="1">
-                    <h:graphicImage value="#{themePath}/img/page.previous.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.previous.gif" width="13" height="11"/>
                 </h:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!userSearch.previousPageAvailable}"/>
 
                 <h:outputText value="#{messages['lacewiki.label.userList.Found']} #{userSearch.rowCount} #{messages['lacewiki.label.userList.Members']}"/>
 
                 <h:commandLink action="#{userSearch.nextPage()}" rendered="#{userSearch.nextPageAvailable}" tabindex="1">
-                    <h:graphicImage value="#{themePath}/img/page.next.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.next.gif" width="13" height="11"/>
                 </h:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!userSearch.nextPageAvailable}"/>
 
                 <h:commandLink action="#{userSearch.lastPage()}" rendered="#{userSearch.nextPageAvailable}" tabindex="1">
-                    <h:graphicImage value="#{themePath}/img/page.last.gif" width="13" height="11"/>
+                    <h:graphicImage value="#{imagePath}/page.last.gif" width="13" height="11"/>
                 </h:commandLink>
-                <h:graphicImage value="#{themePath}/img/blank.gif" width="13" height="11"
+                <h:graphicImage value="#{imagePath}/blank.gif" width="13" height="11"
                                 rendered="#{!userSearch.nextPageAvailable}"/>
 
             </h:panelGrid>
@@ -145,9 +145,9 @@
             <h:column>
                 <f:facet name="header">
                     <h:commandLink action="#{userSearch.sortBy('username')}" tabindex="1">
-                        <h:graphicImage value="#{themePath}/img/sortindicator.up.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.up.gif" width="8" height="8"
                                         rendered="#{!userSearch.orderDescending and userSearch.orderByProperty == 'username'}"/>
-                        <h:graphicImage value="#{themePath}/img/sortindicator.down.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.down.gif" width="8" height="8"
                                         rendered="#{userSearch.orderDescending and userSearch.orderByProperty == 'username'}"/>
                         <h:outputText value="#{messages['lacewiki.label.userList.Username']}"/>
                     </h:commandLink>
@@ -181,9 +181,9 @@
             <h:column>
                 <f:facet name="header">
                     <h:commandLink action="#{userSearch.sortBy('firstname')}" tabindex="1">
-                        <h:graphicImage value="#{themePath}/img/sortindicator.up.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.up.gif" width="8" height="8"
                                         rendered="#{!userSearch.orderDescending and userSearch.orderByProperty == 'firstname'}"/>
-                        <h:graphicImage value="#{themePath}/img/sortindicator.down.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.down.gif" width="8" height="8"
                                         rendered="#{userSearch.orderDescending and userSearch.orderByProperty == 'firstname'}"/>
                         <h:outputText value="#{messages['lacewiki.label.userList.FirstName']}"/>
                     </h:commandLink>
@@ -194,9 +194,9 @@
             <h:column>
                 <f:facet name="header">
                     <h:commandLink action="#{userSearch.sortBy('lastname')}" tabindex="1">
-                        <h:graphicImage value="#{themePath}/img/sortindicator.up.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.up.gif" width="8" height="8"
                                         rendered="#{!userSearch.orderDescending and userSearch.orderByProperty == 'lastname'}"/>
-                        <h:graphicImage value="#{themePath}/img/sortindicator.down.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.down.gif" width="8" height="8"
                                         rendered="#{userSearch.orderDescending and userSearch.orderByProperty == 'lastname'}"/>
                         <h:outputText value="#{messages['lacewiki.label.userList.LastName']}"/>
                     </h:commandLink>
@@ -207,9 +207,9 @@
             <h:column rendered="#{wiki:showEmailAddress()}">
                 <f:facet name="header">
                     <h:commandLink action="#{userSearch.sortBy('email')}" tabindex="1">
-                        <h:graphicImage value="#{themePath}/img/sortindicator.up.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.up.gif" width="8" height="8"
                                         rendered="#{!userSearch.orderDescending and userSearch.orderByProperty == 'email'}"/>
-                        <h:graphicImage value="#{themePath}/img/sortindicator.down.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.down.gif" width="8" height="8"
                                         rendered="#{userSearch.orderDescending and userSearch.orderByProperty == 'email'}"/>
                         <h:outputText value="#{messages['lacewiki.label.userList.Email']}"/>
                     </h:commandLink>
@@ -220,9 +220,9 @@
             <h:column>
                 <f:facet name="header">
                     <h:commandLink action="#{userSearch.sortBy('createdOn')}" tabindex="1">
-                        <h:graphicImage value="#{themePath}/img/sortindicator.up.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.up.gif" width="8" height="8"
                                         rendered="#{!userSearch.orderDescending and userSearch.orderByProperty == 'createdOn'}"/>
-                        <h:graphicImage value="#{themePath}/img/sortindicator.down.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.down.gif" width="8" height="8"
                                         rendered="#{userSearch.orderDescending and userSearch.orderByProperty == 'createdOn'}"/>
                         <h:outputText value="#{messages['lacewiki.label.userList.JoinedOn']}"/>
                     </h:commandLink>
@@ -235,9 +235,9 @@
             <h:column>
                 <f:facet name="header">
                     <h:commandLink action="#{userSearch.sortBy('lastLoginOn')}" tabindex="1">
-                        <h:graphicImage value="#{themePath}/img/sortindicator.up.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.up.gif" width="8" height="8"
                                         rendered="#{!userSearch.orderDescending and userSearch.orderByProperty == 'lastLoginOn'}"/>
-                        <h:graphicImage value="#{themePath}/img/sortindicator.down.gif" width="8" height="8"
+                        <h:graphicImage value="#{imagePath}/sortindicator.down.gif" width="8" height="8"
                                         rendered="#{userSearch.orderDescending and userSearch.orderByProperty == 'lastLoginOn'}"/>
                         <h:outputText value="#{messages['lacewiki.label.userList.LastLoginOn']}"/>
                     </h:commandLink>




More information about the seam-commits mailing list