[jboss-cvs] JBossBlog SVN: r102 - in trunk-esial/blog-core: src/etc/META-INF and 12 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Mar 22 12:37:07 EDT 2007


Author: acrignon
Date: 2007-03-22 12:37:07 -0400 (Thu, 22 Mar 2007)
New Revision: 102

Added:
   trunk-esial/blog-core/src/java/org/jboss/blog/model/AbstractBlogCategory.java
   trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogCategory.java
   trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogCategoryImpl.java
   trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogCategory.hbm.xml
   trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogCategory.java
   trunk-esial/blog-core/src/java/org/jboss/blog/service/store/model/ModifiableBlogCategory.java
   trunk-esial/blog-core/src/java/org/jboss/blog/ui/CategoryEdit.java
   trunk-esial/blog-core/src/web/views/blog_man.xhtml
   trunk-esial/blog-core/src/web/views/cat_man.xhtml
   trunk-esial/blog-core/src/web/views/cat_mod.xhtml
   trunk-esial/blog-core/src/web/views/cat_new.xhtml
Modified:
   trunk-esial/blog-core/build.xml
   trunk-esial/blog-core/src/etc/META-INF/acl-mapping.xml
   trunk-esial/blog-core/src/etc/META-INF/acl-permissions.xml
   trunk-esial/blog-core/src/etc/META-INF/jboss-service.xml
   trunk-esial/blog-core/src/etc/conf/hibernate/hibernate.cfg.xml
   trunk-esial/blog-core/src/java/org/jboss/blog/BlogName.java
   trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogModel.java
   trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogPost.java
   trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogModelImpl.java
   trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogPostImpl.java
   trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/EmptyBlogModel.java
   trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/EmptyBlogPost.java
   trunk-esial/blog-core/src/java/org/jboss/blog/service/model/rome/RomeBlogPost.java
   trunk-esial/blog-core/src/java/org/jboss/blog/service/model/rome/RomeParsingBlogModelService.java
   trunk-esial/blog-core/src/java/org/jboss/blog/service/store/BlogStoreService.java
   trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.hbm.xml
   trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.java
   trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.hbm.xml
   trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.java
   trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HibernateBlogStoreService.java
   trunk-esial/blog-core/src/java/org/jboss/blog/service/store/model/ModifiableBlogModel.java
   trunk-esial/blog-core/src/java/org/jboss/blog/tools/UITools.java
   trunk-esial/blog-core/src/java/org/jboss/blog/ui/BlogView.java
   trunk-esial/blog-core/src/java/org/jboss/blog/ui/IdEdit.java
   trunk-esial/blog-core/src/java/org/jboss/blog/ui/PostEdit.java
   trunk-esial/blog-core/src/java/org/jboss/blog/ui/SelectableBlogName.java
   trunk-esial/blog-core/src/java/org/jboss/blog/ui/State.java
   trunk-esial/blog-core/src/web/WEB-INF/faces-config.xml
   trunk-esial/blog-core/src/web/views/admin_panel.xhtml
   trunk-esial/blog-core/src/web/views/blog_del.xhtml
   trunk-esial/blog-core/src/web/views/blog_edit.xhtml
   trunk-esial/blog-core/src/web/views/blog_new.xhtml
   trunk-esial/blog-core/src/web/views/blog_view.xhtml
   trunk-esial/blog-core/src/web/views/id_edit.xhtml
   trunk-esial/blog-core/src/web/views/view.xhtml
Log:


Modified: trunk-esial/blog-core/build.xml
===================================================================
--- trunk-esial/blog-core/build.xml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/build.xml	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,147 +1,147 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<project name="JBoss Blog" default="build">
-    <!-- Configuration of deployment -->
-    <property name="jboss.home" value="C:\\jboss-4.0.5.GA" />
-    <property name="jboss.conf" value="default" />
-    <!-- Unset this property if jboss portal is deployed -->
-    <property name="jboss.portal.present" value="true" />
-
-    <!-- Configuration of source/ target directories -->
-    <property name="src" value="src"/>
-    <property name="src.java" value="${src}/java"/>
-    <property name="src.meta" value="${src}/etc"/>
-    <property name="src.web" value="${src}/web"/>
-    <property name="build" value="build"/>
-    <property name="dist" value="dist"/>
-
-    <!-- Name of the service archive which will contain the blog application -->
-    <property name="sar.name" value="jboss-blog.sar" />
-    <!-- Name of the web application that will be contained in the sar -->
-    <property name="war.name" value="jboss-blog.war" />
-
-    <!-- Helper properties: built using the above ones -->
-    <property name="dist.main.dir" value="${dist}/${sar.name}" />
-    <property name="dist.lib.dir" value="${dist.main.dir}/lib" />
-    <property name="dist.war.dir" value="${dist.main.dir}/${war.name}" />
-    <property name="deploy.dir" value="${jboss.home}/server/${jboss.conf}/deploy" />
-
-    <!-- Dependency jars filesets definitions -->
-    <fileset id="rome.jars" dir="../lib/rome"><include name="**/*.jar"/></fileset>
-    <fileset id="jboss.jars" dir="../lib/jboss"><include name="**/*.jar"/></fileset>
-    <fileset id="jboss.portal.jars" dir="../lib/jboss-portal"><include name="**/*.jar"/></fileset>
-    <fileset id="jboss.jaae.jars" dir="../lib/jboss-jaae"><include name="**/*.jar"/></fileset>
-    <fileset id="portlet.jars" dir="../lib/portlet"><include name="**/*.jar"/></fileset>
-    <fileset id="facelets.jars" dir="../lib/facelets"><include name="**/*.jar"/></fileset>
-    <fileset id="myfaces.jars" dir="../lib/myfaces"><include name="**/*.jar"/></fileset>
-    <fileset id="jstl.jars" dir="../lib/jstl"><include name="**/*.jar"/></fileset>
-    <fileset id="hibernate.jars" dir="../lib/hibernate"><include name="**/*.jar"/></fileset>
-    <fileset id="servlet.jars" dir="../lib/servlet"><include name="**/*.jar"/></fileset>
-	<fileset id="freemarker.jars" dir="../lib/freemarker"><include name="**/*.jar"/></fileset>
-    <fileset id="log4j.jar" dir="../lib/xdoclet"><include name="log4j.jar"/></fileset>
-
-    <fileset id="jboss.portal.identity.jars" dir="../lib/jboss-portal">
-        <include name="**/portal-identity-lib.jar"/></fileset>
-
-    <!-- Classpath for building the application: includes all dependency jars -->
-    <path id="base.jars">
-        <fileset refid="rome.jars" />
-        <fileset refid="jboss.jars" />
-        <fileset refid="jboss.portal.jars" />
-        <fileset refid="jboss.jaae.jars" />
-        <fileset refid="portlet.jars" />
-        <fileset refid="facelets.jars" />
-        <fileset refid="myfaces.jars" />
-        <fileset refid="jstl.jars" />
-        <fileset refid="hibernate.jars" />
-        <fileset refid="servlet.jars" />
-    	<fileset refid="freemarker.jars" />
-        <fileset refid="log4j.jar" />
-    </path>
-
-    <!-- XDoclet task definition -->
-    <path id="xdoclet.jars">
-        <fileset dir="../lib/xdoclet"><include name="**/*.jar"/></fileset>
-    </path>
-
-    <taskdef name="jmxdoclet"
-             classname="xdoclet.modules.jmx.JMXDocletTask"
-             classpathref="xdoclet.jars"/>
-    <taskdef name="hibernatedoclet"
-             classname="xdoclet.modules.hibernate.HibernateDocletTask"
-             classpathref="xdoclet.jars" />
-
-    <!-- BUILD TARGETS -->
-
-    <target name="init">
-
-    </target>
-
-    <target name="copy-libs-for-servlet" unless="jboss.portal.present">
-        <copy todir="${dist.lib.dir}"><fileset refid="myfaces.jars"/></copy>
-        <copy todir="${dist.lib.dir}"><fileset refid="facelets.jars"/></copy> 	
-    </target>
-
-    <target name="build" depends="init,clean">
-        <mkdir dir="${build}" />
-        <!-- Compiling the source -->
-        <javac srcdir="${src.java}" destdir="${build}" target="1.4" source="1.4">
-            <classpath refid="base.jars" />
-        </javac>
-        <!-- Copying any xmls -->
-        <copy todir="${build}">
-            <fileset dir="${src.java}">
-                <include name="**/*.xml"/>
-            </fileset>
-        </copy>
-        <!-- Creating the xmbean xml-s -->
-        <jmxdoclet destdir="${build}">
-            <fileset dir="${src.java}"><include name="**/*.java"/></fileset>
-            <jbossxmbean />
-        </jmxdoclet>
-    </target>
-
-    <target name="dist" depends="build">
-        <mkdir dir="${dist.lib.dir}" />
-
-        <!-- Copying the meta information -->
-        <copy todir="${dist.main.dir}">
-            <fileset dir="${src.meta}"><include name="**/*" /></fileset>
-        </copy>
-
-        <!-- Creating the jar with the classes -->
-        <jar destfile="${dist.lib.dir}/jboss-blog-core.jar" basedir="${build}" />
-
-        <!-- Creating the web application -->
-        <mkdir dir="${dist.war.dir}" />
-        <copy todir="${dist.war.dir}">
-            <fileset dir="${src.web}"><include name="**/*" /></fileset>
-        </copy>
-
-        <!-- Copying dependency jars -->
-        <copy todir="${dist.lib.dir}"><fileset refid="rome.jars"/></copy>
-        <copy todir="${dist.lib.dir}"><fileset refid="jboss.jaae.jars"/></copy>
-        <copy todir="${dist.lib.dir}"><fileset refid="jboss.portal.identity.jars"/></copy>
-    	<copy todir="${dist.lib.dir}"><fileset refid="freemarker.jars"/></copy>
-        <antcall target="copy-libs-for-servlet" />
-    </target>
-
-    <target name="deploy" depends="dist,undeploy">
-        <!-- Copying the sar directory to the jboss deploy dir -->
-        <copy todir="${deploy.dir}">
-            <fileset dir="${dist}">
-                <include name="${sar.name}/**" />
-            </fileset>
-        </copy>
-    </target>
-
-    <target name="undeploy">
-        <!-- Deleting old deployment -->
-        <delete dir="${deploy.dir}/${sar.name}" />
-    </target>
-
-    <target name="clean">
-        <delete dir="${build}" />
-        <delete dir="${dist}" />
-    </target>
-</project>
+<?xml version='1.0' encoding='UTF-8'?>
+
+<project name="JBoss Blog" default="build">
+    <!-- Configuration of deployment -->
+    <property name="jboss.home" value="C:\\jboss-4.0.5.GA" />
+    <property name="jboss.conf" value="default" />
+    <!-- Unset this property if jboss portal is deployed -->
+    <property name="jboss.portal.present" value="true" />
+
+    <!-- Configuration of source/ target directories -->
+    <property name="src" value="src"/>
+    <property name="src.java" value="${src}/java"/>
+    <property name="src.meta" value="${src}/etc"/>
+    <property name="src.web" value="${src}/web"/>
+    <property name="build" value="build"/>
+    <property name="dist" value="dist"/>
+
+    <!-- Name of the service archive which will contain the blog application -->
+    <property name="sar.name" value="jboss-blog.sar" />
+    <!-- Name of the web application that will be contained in the sar -->
+    <property name="war.name" value="jboss-blog.war" />
+
+    <!-- Helper properties: built using the above ones -->
+    <property name="dist.main.dir" value="${dist}/${sar.name}" />
+    <property name="dist.lib.dir" value="${dist.main.dir}/lib" />
+    <property name="dist.war.dir" value="${dist.main.dir}/${war.name}" />
+    <property name="deploy.dir" value="${jboss.home}/server/${jboss.conf}/deploy" />
+
+    <!-- Dependency jars filesets definitions -->
+    <fileset id="rome.jars" dir="../lib/rome"><include name="**/*.jar"/></fileset>
+    <fileset id="jboss.jars" dir="../lib/jboss"><include name="**/*.jar"/></fileset>
+    <fileset id="jboss.portal.jars" dir="../lib/jboss-portal"><include name="**/*.jar"/></fileset>
+    <fileset id="jboss.jaae.jars" dir="../lib/jboss-jaae"><include name="**/*.jar"/></fileset>
+    <fileset id="portlet.jars" dir="../lib/portlet"><include name="**/*.jar"/></fileset>
+    <fileset id="facelets.jars" dir="../lib/facelets"><include name="**/*.jar"/></fileset>
+    <fileset id="myfaces.jars" dir="../lib/myfaces"><include name="**/*.jar"/></fileset>
+    <fileset id="jstl.jars" dir="../lib/jstl"><include name="**/*.jar"/></fileset>
+    <fileset id="hibernate.jars" dir="../lib/hibernate"><include name="**/*.jar"/></fileset>
+    <fileset id="servlet.jars" dir="../lib/servlet"><include name="**/*.jar"/></fileset>
+	<fileset id="freemarker.jars" dir="../lib/freemarker"><include name="**/*.jar"/></fileset>
+    <fileset id="log4j.jar" dir="../lib/xdoclet"><include name="log4j.jar"/></fileset>
+
+    <fileset id="jboss.portal.identity.jars" dir="../lib/jboss-portal">
+        <include name="**/portal-identity-lib.jar"/></fileset>
+
+    <!-- Classpath for building the application: includes all dependency jars -->
+    <path id="base.jars">
+        <fileset refid="rome.jars" />
+        <fileset refid="jboss.jars" />
+        <fileset refid="jboss.portal.jars" />
+        <fileset refid="jboss.jaae.jars" />
+        <fileset refid="portlet.jars" />
+        <fileset refid="facelets.jars" />
+        <fileset refid="myfaces.jars" />
+        <fileset refid="jstl.jars" />
+        <fileset refid="hibernate.jars" />
+        <fileset refid="servlet.jars" />
+    	<fileset refid="freemarker.jars" />
+        <fileset refid="log4j.jar" />
+    </path>
+
+    <!-- XDoclet task definition -->
+    <path id="xdoclet.jars">
+        <fileset dir="../lib/xdoclet"><include name="**/*.jar"/></fileset>
+    </path>
+
+    <taskdef name="jmxdoclet"
+             classname="xdoclet.modules.jmx.JMXDocletTask"
+             classpathref="xdoclet.jars"/>
+    <taskdef name="hibernatedoclet"
+             classname="xdoclet.modules.hibernate.HibernateDocletTask"
+             classpathref="xdoclet.jars" />
+
+    <!-- BUILD TARGETS -->
+
+    <target name="init">
+
+    </target>
+
+    <target name="copy-libs-for-servlet" unless="jboss.portal.present">
+        <copy todir="${dist.lib.dir}"><fileset refid="myfaces.jars"/></copy>
+        <copy todir="${dist.lib.dir}"><fileset refid="facelets.jars"/></copy> 	
+    </target>
+
+    <target name="build" depends="init,clean">
+        <mkdir dir="${build}" />
+        <!-- Compiling the source -->
+        <javac srcdir="${src.java}" destdir="${build}" target="1.4" source="1.4" debug="on">
+            <classpath refid="base.jars" />
+        </javac>
+        <!-- Copying any xmls -->
+        <copy todir="${build}">
+            <fileset dir="${src.java}">
+                <include name="**/*.xml"/>
+            </fileset>
+        </copy>
+        <!-- Creating the xmbean xml-s -->
+        <jmxdoclet destdir="${build}">
+            <fileset dir="${src.java}"><include name="**/*.java"/></fileset>
+            <jbossxmbean />
+        </jmxdoclet>
+    </target>
+
+    <target name="dist" depends="build">
+        <mkdir dir="${dist.lib.dir}" />
+
+        <!-- Copying the meta information -->
+        <copy todir="${dist.main.dir}">
+            <fileset dir="${src.meta}"><include name="**/*" /></fileset>
+        </copy>
+
+        <!-- Creating the jar with the classes -->
+        <jar destfile="${dist.lib.dir}/jboss-blog-core.jar" basedir="${build}" />
+
+        <!-- Creating the web application -->
+        <mkdir dir="${dist.war.dir}" />
+        <copy todir="${dist.war.dir}">
+            <fileset dir="${src.web}"><include name="**/*" /></fileset>
+        </copy>
+
+        <!-- Copying dependency jars -->
+        <copy todir="${dist.lib.dir}"><fileset refid="rome.jars"/></copy>
+        <copy todir="${dist.lib.dir}"><fileset refid="jboss.jaae.jars"/></copy>
+        <copy todir="${dist.lib.dir}"><fileset refid="jboss.portal.identity.jars"/></copy>
+    	<copy todir="${dist.lib.dir}"><fileset refid="freemarker.jars"/></copy>
+        <antcall target="copy-libs-for-servlet" />
+    </target>
+
+    <target name="deploy" depends="dist,undeploy">
+        <!-- Copying the sar directory to the jboss deploy dir -->
+        <copy todir="${deploy.dir}">
+            <fileset dir="${dist}">
+                <include name="${sar.name}/**" />
+            </fileset>
+        </copy>
+    </target>
+
+    <target name="undeploy">
+        <!-- Deleting old deployment -->
+        <delete dir="${deploy.dir}/${sar.name}" />
+    </target>
+
+    <target name="clean">
+        <delete dir="${build}" />
+        <delete dir="${dist}" />
+    </target>
+</project>

Modified: trunk-esial/blog-core/src/etc/META-INF/acl-mapping.xml
===================================================================
--- trunk-esial/blog-core/src/etc/META-INF/acl-mapping.xml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/etc/META-INF/acl-mapping.xml	2007-03-22 16:37:07 UTC (rev 102)
@@ -49,6 +49,10 @@
 				<class>org.jboss.blog.ui.BlogEdit</class>
 				<method>delete</method>
 			</resource>
+			 <resource type="jsfAction" criteriaId="manageBlog://action">
+				<class>org.jboss.blog.ui.BlogView</class>
+				<method>manageBlog</method>
+			</resource>
         </function>
 
         <function id="manageCategory" name="Manage Category">
@@ -57,11 +61,11 @@
 				<id>acl://manageCategory</id>
 			</resource>
 			<!-- action protection -->
-			<resource type="jsfAction" criteriaId="manageCategories://action">
+			<resource type="jsfAction" criteriaId="manageCategory://action">
 				<class>org.jboss.blog.ui.BlogEdit</class>
 				<method>save</method>
 			</resource>
-			<implies>accessAdminModule</implies>
+			<!--  implies>accessAdminModule</implies-->
 		</function>                
 	</module>
 	

Modified: trunk-esial/blog-core/src/etc/META-INF/acl-permissions.xml
===================================================================
--- trunk-esial/blog-core/src/etc/META-INF/acl-permissions.xml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/etc/META-INF/acl-permissions.xml	2007-03-22 16:37:07 UTC (rev 102)
@@ -44,6 +44,7 @@
 		
 		<!-- User Module permissions -->
         <permission action="addComment" />
+        <permission action="manageComment"/>
         <!-- permission to edit only my own posts -->
 		<!--<permission action="editPost">
 			<criteria for="editPost://ui">param[0].poster.user.userName.equals(identity.identity.userName)</criteria>
@@ -63,8 +64,21 @@
 		
 		<!-- wild card permission -->
 		<permission action="all" />
+		<!--permission action="viewComment" />
+		<permission action="accessAdminModule" />
+		<permission action="manageBlog"/-->
 	</role>		
 	
+	<role name="BlogAdministrateur" id="BlogAdmin">
+		<permission action="viewComment" />
+		<permission action="managePost" />
+		<permission action="manageBlog" /> 
+		<permission action="manageCategory"/>
+		<permission action="manageComment"/>
+		<!--permission action="manageCategory"/-->
+		
+	</role>	
+	
 	<!-- 
 		deployment specific roles......just examples of how fine grained permissions can be assigned
 		this is an example of how the rules would possibly setup for JBoss.org Forums...

Modified: trunk-esial/blog-core/src/etc/META-INF/jboss-service.xml
===================================================================
--- trunk-esial/blog-core/src/etc/META-INF/jboss-service.xml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/etc/META-INF/jboss-service.xml	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,90 +1,90 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE server
-        PUBLIC "-//JBoss//DTD MBean Service 4.0//EN"
-        "http://www.jboss.org/j2ee/dtd/jboss-service_4_0.dtd">
-<server>
-    <!-- Main blog service -->
-    <mbean code="org.jboss.blog.service.BlogServiceImpl"
-           name="blog:service=Main"
-           xmbean-dd="org/jboss/blog/service/BlogServiceImpl.xml">
-        <depends optional-attribute-name="NameService"
-                 proxy-type="attribute">blog:service=Name</depends>
-        <depends optional-attribute-name="ModelService"
-                 proxy-type="attribute">blog:service=Model</depends>
-        <depends optional-attribute-name="PermissionsService"
-                 proxy-type="attribute">blog:service=Permissions</depends>
-        <depends optional-attribute-name="ConfigurationService"
-                 proxy-type="attribute">blog:service=Configuration</depends>
-        <depends optional-attribute-name="StoreService"
-                 proxy-type="attribute">blog:service=Store</depends>
-    </mbean>
-
-    <!-- Name service -->
-    <mbean code="org.jboss.blog.service.name.PortletPreferencesBlogNameService"
-           name="blog:service=Name"
-           xmbean-dd="org/jboss/blog/service/name/PortletPreferencesBlogNameService.xml" >
-        <attribute name="IdName">blogId</attribute>
-        <attribute name="CategoryName">blogCategory</attribute>
-    </mbean>
-
-    <!-- Configuration service -->
-    <mbean code="org.jboss.blog.service.configuration.PortletPreferencesBlogConfigurationService"
-           name="blog:service=Configuration"
-           xmbean-dd="org/jboss/blog/service/configuration/PortletPreferencesBlogConfigurationService.xml" >
-        <attribute name="NumberOfPostsPerPageName">numberOfPostsPerPage</attribute>
-        <attribute name="ViewPostsOnSeparatePageName">viewPostsOnSeparatePage</attribute>
-        <attribute name="ViewAllPostsName">viewAllPosts</attribute>
-        <attribute name="CommentsEnabledName">commentsEnabled</attribute>
-    </mbean>
-
-    <!-- Model service -->
-    <mbean code="org.jboss.blog.service.model.DelegatingModelService"
-           name="blog:service=Model"
-           xmbean-dd="org/jboss/blog/service/model/DelegatingModelService.xml">
-        <depends optional-attribute-name="ExternalDelegateModelService"
-                 proxy-type="attribute">blog:service=CachingModel</depends>
-        <depends optional-attribute-name="InternalDelegateModelService"
-                 proxy-type="attribute">blog:service=StoreModel</depends>
-    </mbean>
-    <mbean code="org.jboss.blog.service.model.StoreModelService"
-           name="blog:service=StoreModel"
-           xmbean-dd="org/jboss/blog/service/model/StoreModelService.xml">
-        <depends optional-attribute-name="StoreService"
-                 proxy-type="attribute">blog:service=Store</depends>
-    </mbean>
-    <mbean code="org.jboss.blog.service.model.caching.CachingBlogModelService"
-           name="blog:service=CachingModel"
-           xmbean-dd="org/jboss/blog/service/model/caching/CachingBlogModelService.xml">
-        <attribute name="UpdateInterval">60000</attribute>
-        <depends optional-attribute-name="DelegateModelService"
-                 proxy-type="attribute">blog:service=RomeParsingModel</depends>
-    </mbean>
-    <mbean code="org.jboss.blog.service.model.rome.RomeParsingBlogModelService"
-           name="blog:service=RomeParsingModel"
-           xmbean-dd="org/jboss/blog/service/model/rome/RomeParsingBlogModelService.xml">
-    </mbean>
-
-    <!-- Permissions service -->
-    <mbean code="org.jboss.blog.service.permissions.acl.AclBlogPermissionsService"
-           name="blog:service=Permissions"
-           xmbean-dd="org/jboss/blog/service/permissions/acl/AclBlogPermissionsService.xml">
-        <depends optional-attribute-name="UserModule"
-                 proxy-type="attribute">portal:service=Module,type=User</depends>
-    </mbean>
-    <!-- JAAE service -->
-    <mbean code="org.jboss.security.acl.AclKernelFactory"
-           name="org.jboss.security.acl.AclKernelFactory:service=aclKernelFactory"
-           xmbean-dd="org/jboss/security/acl/AclKernelFactory.xml">
-        <depends>portal:service=Module,type=User</depends>
-        <attribute name="aclKernel">org.jboss.security.acl.JBossAclKernel</attribute>
-    </mbean>
-
-    <!-- Store service -->
-    <mbean code="org.jboss.blog.service.store.hibernate.HibernateBlogStoreService"
-           name="blog:service=Store"
-           xmbean-dd="org/jboss/blog/service/store/hibernate/HibernateBlogStoreService.xml" >
-        <depends optional-attribute-name="PermissionsService"
-                 proxy-type="attribute">blog:service=Permissions</depends>
-        <depends>jboss.jca:name=BlogDS,service=DataSourceBinding</depends>
-    </mbean>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE server
+        PUBLIC "-//JBoss//DTD MBean Service 4.0//EN"
+        "http://www.jboss.org/j2ee/dtd/jboss-service_4_0.dtd">
+<server>
+    <!-- Main blog service -->
+    <mbean code="org.jboss.blog.service.BlogServiceImpl"
+           name="blog:service=Main"
+           xmbean-dd="org/jboss/blog/service/BlogServiceImpl.xml">
+        <depends optional-attribute-name="NameService"
+                 proxy-type="attribute">blog:service=Name</depends>
+        <depends optional-attribute-name="ModelService"
+                 proxy-type="attribute">blog:service=Model</depends>
+        <depends optional-attribute-name="PermissionsService"
+                 proxy-type="attribute">blog:service=Permissions</depends>
+        <depends optional-attribute-name="ConfigurationService"
+                 proxy-type="attribute">blog:service=Configuration</depends>
+        <depends optional-attribute-name="StoreService"
+                 proxy-type="attribute">blog:service=Store</depends>
+    </mbean>
+
+    <!-- Name service -->
+    <mbean code="org.jboss.blog.service.name.PortletPreferencesBlogNameService"
+           name="blog:service=Name"
+           xmbean-dd="org/jboss/blog/service/name/PortletPreferencesBlogNameService.xml" >
+        <attribute name="IdName">blogId</attribute>
+        <attribute name="CategoryName">blogCategory</attribute>
+    </mbean>
+
+    <!-- Configuration service -->
+    <mbean code="org.jboss.blog.service.configuration.PortletPreferencesBlogConfigurationService"
+           name="blog:service=Configuration"
+           xmbean-dd="org/jboss/blog/service/configuration/PortletPreferencesBlogConfigurationService.xml" >
+        <attribute name="NumberOfPostsPerPageName">numberOfPostsPerPage</attribute>
+        <attribute name="ViewPostsOnSeparatePageName">viewPostsOnSeparatePage</attribute>
+        <attribute name="ViewAllPostsName">viewAllPosts</attribute>
+        <attribute name="CommentsEnabledName">commentsEnabled</attribute>
+    </mbean>
+
+    <!-- Model service -->
+    <mbean code="org.jboss.blog.service.model.DelegatingModelService"
+           name="blog:service=Model"
+           xmbean-dd="org/jboss/blog/service/model/DelegatingModelService.xml">
+        <depends optional-attribute-name="ExternalDelegateModelService"
+                 proxy-type="attribute">blog:service=CachingModel</depends>
+        <depends optional-attribute-name="InternalDelegateModelService"
+                 proxy-type="attribute">blog:service=StoreModel</depends>
+    </mbean>
+    <mbean code="org.jboss.blog.service.model.StoreModelService"
+           name="blog:service=StoreModel"
+           xmbean-dd="org/jboss/blog/service/model/StoreModelService.xml">
+        <depends optional-attribute-name="StoreService"
+                 proxy-type="attribute">blog:service=Store</depends>
+    </mbean>
+    <mbean code="org.jboss.blog.service.model.caching.CachingBlogModelService"
+           name="blog:service=CachingModel"
+           xmbean-dd="org/jboss/blog/service/model/caching/CachingBlogModelService.xml">
+        <attribute name="UpdateInterval">60000</attribute>
+        <depends optional-attribute-name="DelegateModelService"
+                 proxy-type="attribute">blog:service=RomeParsingModel</depends>
+    </mbean>
+    <mbean code="org.jboss.blog.service.model.rome.RomeParsingBlogModelService"
+           name="blog:service=RomeParsingModel"
+           xmbean-dd="org/jboss/blog/service/model/rome/RomeParsingBlogModelService.xml">
+    </mbean>
+
+    <!-- Permissions service -->
+    <mbean code="org.jboss.blog.service.permissions.acl.AclBlogPermissionsService"
+           name="blog:service=Permissions"
+           xmbean-dd="org/jboss/blog/service/permissions/acl/AclBlogPermissionsService.xml">
+        <depends optional-attribute-name="UserModule"
+                 proxy-type="attribute">portal:service=Module,type=User</depends>
+    </mbean>
+    <!-- JAAE service -->
+    <mbean code="org.jboss.security.acl.AclKernelFactory"
+           name="org.jboss.security.acl.AclKernelFactory:service=aclKernelFactory"
+           xmbean-dd="org/jboss/security/acl/AclKernelFactory.xml">
+        <depends>portal:service=Module,type=User</depends>
+        <attribute name="aclKernel">org.jboss.security.acl.JBossAclKernel</attribute>
+    </mbean>
+
+    <!-- Store service -->
+    <mbean code="org.jboss.blog.service.store.hibernate.HibernateBlogStoreService"
+           name="blog:service=Store"
+           xmbean-dd="org/jboss/blog/service/store/hibernate/HibernateBlogStoreService.xml" >
+        <depends optional-attribute-name="PermissionsService"
+                 proxy-type="attribute">blog:service=Permissions</depends>
+        <depends>jboss.jca:name=BlogDS,service=DataSourceBinding</depends>
+    </mbean>
 </server>
\ No newline at end of file

Modified: trunk-esial/blog-core/src/etc/conf/hibernate/hibernate.cfg.xml
===================================================================
--- trunk-esial/blog-core/src/etc/conf/hibernate/hibernate.cfg.xml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/etc/conf/hibernate/hibernate.cfg.xml	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,47 +1,50 @@
-<?xml version='1.0' encoding='utf-8'?>
-<!DOCTYPE hibernate-configuration PUBLIC
-        "-//Hibernate/Hibernate Configuration DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
-
-<hibernate-configuration>
-    <session-factory name="java:/hibernate/BlogSessionFactory">
-        <property name="connection.datasource">java:/BlogDS</property>
-        <!--property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property-->
-
-        <property name="hibernate.session_factory_name">java:/hibernate/BlogSessionFactory</property>
-
-        <property name="hibernate.transaction.factory_class">
-            org.hibernate.transaction.JTATransactionFactory
-        </property>
-        <property name="hibernate.transaction.manager_lookup_class">
-            org.hibernate.transaction.JBossTransactionManagerLookup
-        </property>
-
-        <property name="hibernate.transaction.flush_before_completion">true</property>
-        <property name="hibernate.transaction.auto_close_session">true</property>
-
-        <property name="show_sql">false</property>
-
-        <property name="hibernate.hbm2ddl.auto">update</property>
-
-        <!-- cache -->
-        <property name="hibernate.cache.use_query_cache">true</property>
-        <property name="hibernate.cache.use_second_level_cache">true</property>
-        <property name="hibernate.cache.provider_class">
-            org.hibernate.cache.EhCacheProvider
-        </property>
-
-        <!-- mapping files -->
-        <mapping resource="org/jboss/blog/service/store/hibernate/HBlogModel.hbm.xml"/>
-        <mapping resource="org/jboss/blog/service/store/hibernate/HBlogModelPost.hbm.xml"/>
-        <mapping resource="org/jboss/blog/service/store/hibernate/HBlogPost.hbm.xml"/>
-        <mapping resource="org/jboss/blog/service/store/hibernate/HBlogComment.hbm.xml"/>
-        <mapping resource="org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.hbm.xml"/>
-
-        <class-cache class="org.jboss.blog.service.store.hibernate.HBlogModel" usage="read-write" />
-        <class-cache class="org.jboss.blog.service.store.hibernate.HBlogModelPost" usage="read-write" />
-        <class-cache class="org.jboss.blog.service.store.hibernate.HBlogPost" usage="read-write" />
-        <class-cache class="org.jboss.blog.service.store.hibernate.HBlogComment" usage="read-write" />
-        <class-cache class="org.jboss.blog.service.store.hibernate.HPortalBlogAuthor" usage="read-write" />
-    </session-factory>
+<?xml version='1.0' encoding='utf-8'?>
+<!DOCTYPE hibernate-configuration PUBLIC
+        "-//Hibernate/Hibernate Configuration DTD//EN"
+        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
+
+<hibernate-configuration>
+    <session-factory name="java:/hibernate/BlogSessionFactory">
+        <property name="connection.datasource">java:/BlogDS</property>
+        <!--property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property-->
+
+        <property name="hibernate.session_factory_name">java:/hibernate/BlogSessionFactory</property>
+
+        <property name="hibernate.transaction.factory_class">
+            org.hibernate.transaction.JTATransactionFactory
+        </property>
+        <property name="hibernate.transaction.manager_lookup_class">
+            org.hibernate.transaction.JBossTransactionManagerLookup
+        </property>
+
+        <property name="hibernate.transaction.flush_before_completion">true</property>
+        <property name="hibernate.transaction.auto_close_session">true</property>
+
+        <property name="show_sql">false</property>
+
+        <property name="hibernate.hbm2ddl.auto">update</property>
+
+        <!-- cache -->
+        <property name="hibernate.cache.use_query_cache">true</property>
+        <property name="hibernate.cache.use_second_level_cache">true</property>
+        <property name="hibernate.cache.provider_class">
+            org.hibernate.cache.EhCacheProvider
+        </property>
+
+        <!-- mapping files -->
+        <mapping resource="org/jboss/blog/service/store/hibernate/HBlogModel.hbm.xml"/>
+        <mapping resource="org/jboss/blog/service/store/hibernate/HBlogModelPost.hbm.xml"/>
+        <mapping resource="org/jboss/blog/service/store/hibernate/HBlogPost.hbm.xml"/>
+        <mapping resource="org/jboss/blog/service/store/hibernate/HBlogComment.hbm.xml"/>
+        <mapping resource="org/jboss/blog/service/store/hibernate/HBlogCategory.hbm.xml"/>
+        <mapping resource="org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.hbm.xml"/>
+        
+
+        <class-cache class="org.jboss.blog.service.store.hibernate.HBlogModel" usage="read-write" />
+        <class-cache class="org.jboss.blog.service.store.hibernate.HBlogModelPost" usage="read-write" />
+        <class-cache class="org.jboss.blog.service.store.hibernate.HBlogPost" usage="read-write" />
+        <class-cache class="org.jboss.blog.service.store.hibernate.HBlogComment" usage="read-write" />
+		<class-cache class="org.jboss.blog.service.store.hibernate.HBlogCategory" usage="read-write" />
+        <class-cache class="org.jboss.blog.service.store.hibernate.HPortalBlogAuthor" usage="read-write" />
+    </session-factory>
 </hibernate-configuration>
\ No newline at end of file

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/BlogName.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/BlogName.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/BlogName.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,61 +1,61 @@
-package org.jboss.blog;
-
-import org.jboss.blog.tools.BlogTools;
-
-import java.io.Serializable;
-
-/**
- * Class representing a name of a blog. This name consists of a blog id
- * and a category. Having it defined, it can be determined what blog should
- * be displayed/ edited/ etc.
- * @author Adam Warski (adamw at aster.pl)
- */
-public class BlogName implements Serializable {
-    private String id;
-    private String category;
-
-    public BlogName() {
-        
-    }
-
-    public BlogName(String id, String category) {
-        this.id = id;
-        this.category = category;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getCategory() {
-        return category;
-    }
-
-    public void setCategory(String category) {
-        this.category = category;
-    }
-
-    public int hashCode() {
-        return (id == null ? 0 : id.hashCode()) +
-                (category == null ? 0 : category.hashCode());
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof BlogName)) {
-            return false;
-        }
-
-        BlogName bn = (BlogName) obj;
-
-        return BlogTools.objectsEqual(id, bn.id) &&
-                BlogTools.objectsEqual(category, bn.category);
-    }
-
-    public String toString() {
-        return "(" + id + ", " + category + ")";
-    }
-}
+package org.jboss.blog;
+
+import org.jboss.blog.tools.BlogTools;
+
+import java.io.Serializable;
+
+/**
+ * Class representing a name of a blog. This name consists of a blog id
+ * and a category. Having it defined, it can be determined what blog should
+ * be displayed/ edited/ etc.
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class BlogName implements Serializable {
+    private String id;
+    private String group;
+
+    public BlogName() {
+        
+    }
+
+    public BlogName(String id, String group) {
+        this.id = id;
+        this.group = group;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getGroup() {
+        return group;
+    }
+
+    public void setGroup(String group) {
+        this.group = group;
+    }
+
+    public int hashCode() {
+        return (id == null ? 0 : id.hashCode()) +
+                (group == null ? 0 : group.hashCode());
+    }
+
+    public boolean equals(Object obj) {
+        if (!(obj instanceof BlogName)) {
+            return false;
+        }
+
+        BlogName bn = (BlogName) obj;
+
+        return BlogTools.objectsEqual(id, bn.id) &&
+                BlogTools.objectsEqual(group, bn.group);
+    }
+
+    public String toString() {
+        return "(" + id + ", " + group + ")";
+    }
+}

Added: trunk-esial/blog-core/src/java/org/jboss/blog/model/AbstractBlogCategory.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/model/AbstractBlogCategory.java	                        (rev 0)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/model/AbstractBlogCategory.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -0,0 +1,5 @@
+package org.jboss.blog.model;
+
+
+public abstract class AbstractBlogCategory implements BlogCategory{
+}

Added: trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogCategory.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogCategory.java	                        (rev 0)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogCategory.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -0,0 +1,7 @@
+package org.jboss.blog.model;
+
+/**
+ * An interface representing a single blog category
+ */
+public interface BlogCategory {
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogModel.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogModel.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogModel.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,40 +1,42 @@
-package org.jboss.blog.model;
-
-import java.util.Set;
-import java.util.List;
-
-/**
- * An interface representing a blog model, that is, a collection of blog
- * posts, together with basic blog information.
- * @author Adam Warski (adamw at aster.pl)
- */
-public interface BlogModel extends BlogItem {
-    /**
-     * Gets all posts that are in this model. Invoking this method is
-     * discouraged. If possible, use {@link BlogModel#getPosts(int, int)}.
-     * @return Sorted, immutable list of {@link BlogPost} - posts for this blog model.
-     */
-    public List getPosts();
-
-    /**
-     * Gets a specified sublist of {@link BlogModel#getPosts()}. This method
-     * should be used instead of interating over the full list beacuse of
-     * possible performance improvements.
-     * @param from Index of first post to be contained in the returned list.
-     * @param to First index after the last post to be contained in the
-     * returned list.
-     * @return Sorted sublist of {@link BlogPost}, containing posts on
-     * positions from <code>from</code> to <code>to</code>.  
-     */
-    public List getPosts(int from, int to);
-
-    /**
-     *
-     * @return Immutable set of {@link java.lang.String} - name of categories to
-     * which this model belongs.
-     */
-    public Set getCategories();
-
-    public BlogPost getPostByGuid(String guid) throws BlogPostDoesNotExistException;
-    public BlogPost getPostByTitleAsId(String titleAsId) throws BlogPostDoesNotExistException;
-}
+package org.jboss.blog.model;
+
+import java.util.Set;
+import java.util.List;
+
+/**
+ * An interface representing a blog model, that is, a collection of blog
+ * posts, together with basic blog information.
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public interface BlogModel extends BlogItem {
+    /**
+     * Gets all posts that are in this model. Invoking this method is
+     * discouraged. If possible, use {@link BlogModel#getPosts(int, int)}.
+     * @return Sorted, immutable list of {@link BlogPost} - posts for this blog model.
+     */
+    public List getPosts();
+
+    /**
+     * Gets a specified sublist of {@link BlogModel#getPosts()}. This method
+     * should be used instead of interating over the full list beacuse of
+     * possible performance improvements.
+     * @param from Index of first post to be contained in the returned list.
+     * @param to First index after the last post to be contained in the
+     * returned list.
+     * @return Sorted sublist of {@link BlogPost}, containing posts on
+     * positions from <code>from</code> to <code>to</code>.  
+     */
+    public List getPosts(int from, int to);
+
+    /**
+     *
+     * @return Immutable set of {@link java.lang.String} - name of categories to
+     * which this model belongs.
+     */
+    //description à modifier
+    public List getCategories();
+
+    
+    public BlogPost getPostByGuid(String guid) throws BlogPostDoesNotExistException;
+    public BlogPost getPostByTitleAsId(String titleAsId) throws BlogPostDoesNotExistException;
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogPost.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogPost.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/model/BlogPost.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,43 +1,43 @@
-package org.jboss.blog.model;
-
-import java.util.Set;
-import java.util.List;
-
-/**
- * An interface representing a single blog post.
- * @author Adam Warski (adamw at aster.pl)
- */
-public interface BlogPost extends BlogItem {
-    public String getTitleAsId();
-    public String getGuid();
-
-    /**
-     *  
-     * @return An URL to a feed with comments to this item. If no
-     * comments are available, this should be null.
-     */
-    public String getCommentLink();
-
-    /**
-     *
-     * @return True iff this post has any comments.
-     */
-    public boolean getHasComments();
-
-    /**
-     *
-     * @return A list of all comments for this item. Objects in the list
-     * implements the {@link BlogComment} interface. If the blog doesn't
-     * have/support comments, null is returned (this is different from the
-     * situation where a blog supports comments, but there are no comments
-     * to this post - in this case, an empty list is returned).
-     */
-    public List getComments();
-
-    /**
-     *
-     * @return Immutable set of {@link java.lang.String} - name of categories to
-     * which this post belongs.
-     */
-    public Set getCategories();
-}
+package org.jboss.blog.model;
+
+import java.util.Set;
+import java.util.List;
+
+/**
+ * An interface representing a single blog post.
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public interface BlogPost extends BlogItem {
+    public String getTitleAsId();
+    public String getGuid();
+
+    /**
+     *  
+     * @return An URL to a feed with comments to this item. If no
+     * comments are available, this should be null.
+     */
+    public String getCommentLink();
+
+    /**
+     *
+     * @return True if this post has any comments.
+     */
+    public boolean getHasComments();
+
+    /**
+     *
+     * @return A list of all comments for this item. Objects in the list
+     * implements the {@link BlogComment} interface. If the blog doesn't
+     * have/support comments, null is returned (this is different from the
+     * situation where a blog supports comments, but there are no comments
+     * to this post - in this case, an empty list is returned).
+     */
+    public List getComments();
+
+    /**
+     *
+     * @return Immutable set of {@link java.lang.String} - name of categories to
+     * which this post belongs.
+     */
+    public List getCategories();
+}

Added: trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogCategoryImpl.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogCategoryImpl.java	                        (rev 0)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogCategoryImpl.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -0,0 +1,57 @@
+package org.jboss.blog.model.impl;
+
+import org.jboss.blog.model.BlogCategory;
+import java.util.Set;
+
+/**
+ * A simple java-bean implementation of the category interface.
+ */
+public class BlogCategoryImpl implements BlogCategory{
+	private Integer id;
+	private String name;
+    private String description;
+    private Set posts;
+    
+    
+	public BlogCategoryImpl(Integer id, String name, String description, Set posts) {
+		super();
+		this.id = id;
+		this.name = name;
+		this.description = description;
+		this.posts = posts;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+	
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+    
+	public Set getPosts(){
+		return posts;
+	}
+	
+	public void setPosts(Set posts){
+		this.posts = posts;
+	}
+    
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogModelImpl.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogModelImpl.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogModelImpl.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,62 +1,64 @@
-package org.jboss.blog.model.impl;
-
-import org.jboss.blog.model.AbstractBlogModel;
-import org.jboss.blog.model.BlogAuthor;
-
-import java.util.Date;
-import java.util.Set;
-import java.util.List;
-
-/**
- * A simple java-bean implementation of the model interface.
- * @author Adam Warski (adamw at aster.pl)
- */
-public class BlogModelImpl extends AbstractBlogModel {
-    private BlogAuthor author;
-    private String title;
-    private String description;
-    private String link;
-    private Date created;
-    private List posts;
-    private Set categories;
-
-    public BlogModelImpl(BlogAuthor author, String title, String description,
-                         String link, Date created, List posts,
-                         Set categories) {
-        this.author = author;
-        this.title = title;
-        this.description = description;
-        this.link = link;
-        this.created = created;
-        this.posts = posts;
-        this.categories = categories;
-    }
-
-    public BlogAuthor getAuthor() {
-        return author;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public String getLink() {
-        return link;
-    }
-
-    public Date getCreated() {
-        return created;
-    }
-
-    public List getPosts() {
-        return posts;
-    }
-
-    public Set getCategories() {
-        return categories;
-    }
-}
+package org.jboss.blog.model.impl;
+
+import org.jboss.blog.model.AbstractBlogModel;
+import org.jboss.blog.model.BlogAuthor;
+
+import java.util.Date;
+import java.util.Set;
+import java.util.List;
+
+/**
+ * A simple java-bean implementation of the model interface.
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class BlogModelImpl extends AbstractBlogModel {
+    private BlogAuthor author;
+    private String title;
+    private String description;
+    private String link;
+    private Date created;
+    private List posts;
+    private List categories;
+
+    public BlogModelImpl(BlogAuthor author, String title, String description,
+                         String link, Date created, List posts,
+                         List categories) {
+        this.author = author;
+        this.title = title;
+        this.description = description;
+        this.link = link;
+        this.created = created;
+        this.posts = posts;
+        this.categories = categories;
+    }
+
+    public BlogAuthor getAuthor() {
+        return author;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public Date getCreated() {
+        return created;
+    }
+
+    public List getPosts() {
+        return posts;
+    }
+
+    public List getCategories() {
+        return categories;
+    }
+    
+
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogPostImpl.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogPostImpl.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/BlogPostImpl.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,74 +1,74 @@
-package org.jboss.blog.model.impl;
-
-import org.jboss.blog.model.AbstractBlogPost;
-import org.jboss.blog.model.BlogAuthor;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-
-/**
- * A simple java-bean implementation of the post interface.
- * @author Adam Warski (adamw at aster.pl)
- */
-public class BlogPostImpl extends AbstractBlogPost {
-    private BlogAuthor author;
-    private String title;
-    private String description;
-    private Date created;
-    private String link;
-    private String guid;
-    private Set categories;
-    private String commentLink;
-    private List comments;
-
-    public BlogPostImpl(BlogAuthor author, String title, String description,
-                        Date created, String link, String guid,
-                        Set categories, String commentLink, List comments) {
-        this.author = author;
-        this.title = title;
-        this.description = description;
-        this.created = created;
-        this.link = link;
-        this.guid = guid;
-        this.categories = categories;
-        this.commentLink = commentLink;
-        this.comments = comments;
-    }
-
-    public BlogAuthor getAuthor() {
-        return author;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public Date getCreated() {
-        return created;
-    }
-
-    public String getLink() {
-        return link;
-    }
-
-    public String getGuid() {
-        return guid;
-    }
-
-    public Set getCategories() {
-        return categories;
-    }
-
-    public String getCommentLink() {
-        return commentLink;
-    }
-
-    public List getComments() {
-        return comments;
-    }
-}
+package org.jboss.blog.model.impl;
+
+import org.jboss.blog.model.AbstractBlogPost;
+import org.jboss.blog.model.BlogAuthor;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A simple java-bean implementation of the post interface.
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class BlogPostImpl extends AbstractBlogPost {
+    private BlogAuthor author;
+    private String title;
+    private String description;
+    private Date created;
+    private String link;
+    private String guid;
+    private List categories;
+    private String commentLink;
+    private List comments;
+
+    public BlogPostImpl(BlogAuthor author, String title, String description,
+                        Date created, String link, String guid,
+                        List categories, String commentLink, List comments) {
+        this.author = author;
+        this.title = title;
+        this.description = description;
+        this.created = created;
+        this.link = link;
+        this.guid = guid;
+        this.categories = categories;
+        this.commentLink = commentLink;
+        this.comments = comments;
+    }
+
+    public BlogAuthor getAuthor() {
+        return author;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public Date getCreated() {
+        return created;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public String getGuid() {
+        return guid;
+    }
+
+    public List getCategories() {
+        return categories;
+    }
+
+    public String getCommentLink() {
+        return commentLink;
+    }
+
+    public List getComments() {
+        return comments;
+    }
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/EmptyBlogModel.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/EmptyBlogModel.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/EmptyBlogModel.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,12 +1,12 @@
-package org.jboss.blog.model.impl;
-
-import java.util.*;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class EmptyBlogModel extends BlogModelImpl {
-    public EmptyBlogModel() {
-        super(new EmptyBlogAuthor(), "", "", "", new Date(), new ArrayList(), new HashSet());
-    }
-}
+package org.jboss.blog.model.impl;
+
+import java.util.*;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class EmptyBlogModel extends BlogModelImpl {
+    public EmptyBlogModel() {
+        super(new EmptyBlogAuthor(), "", "", "", new Date(), new ArrayList(), new ArrayList());
+    }
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/EmptyBlogPost.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/EmptyBlogPost.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/model/impl/EmptyBlogPost.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,13 +1,13 @@
-package org.jboss.blog.model.impl;
-
-import java.util.Date;
-import java.util.HashSet;
-
-/**
- * @author Adam Warski (adamw at aster.pl)
- */
-public class EmptyBlogPost extends BlogPostImpl {
-    public EmptyBlogPost() {
-        super(new EmptyBlogAuthor(), "", "", new Date(), "", "", new HashSet(), null, null);
-    }
-}
+package org.jboss.blog.model.impl;
+
+import java.util.Date;
+import java.util.ArrayList;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class EmptyBlogPost extends BlogPostImpl {
+    public EmptyBlogPost() {
+        super(new EmptyBlogAuthor(), "", "", new Date(), "", "", new ArrayList(), null, null);
+    }
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/service/model/rome/RomeBlogPost.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/model/rome/RomeBlogPost.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/model/rome/RomeBlogPost.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,62 +1,62 @@
-package org.jboss.blog.service.model.rome;
-
-import org.jboss.blog.model.impl.BlogPostImpl;
-import org.jboss.blog.model.impl.BlogCommentImpl;
-import org.jboss.blog.model.impl.BlogAuthorImpl;
-import org.jboss.blog.model.BlogAuthor;
-import org.jboss.blog.tools.BlogTools;
-
-import java.util.*;
-import java.net.URL;
-
-import com.sun.syndication.io.SyndFeedInput;
-import com.sun.syndication.io.XmlReader;
-import com.sun.syndication.feed.synd.SyndFeed;
-import com.sun.syndication.feed.synd.SyndEntry;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class RomeBlogPost extends BlogPostImpl {
-    private boolean commentsInitialized;
-    private List comments;
-
-    public RomeBlogPost(BlogAuthor author, String title, String description, Date created,
-                        String link, String guid, Set categories, String commentLink) {
-        super(author, title, description, created, link, guid, categories, commentLink, null);
-    }
-
-    public List getComments() {
-        if (!commentsInitialized) {
-            commentsInitialized = true;
-
-            if (getCommentLink() == null) {
-                return null;
-            }
-
-            try {
-                SyndFeedInput input = new SyndFeedInput();
-                SyndFeed inFeed;
-                inFeed = input.build(new XmlReader(new URL(getCommentLink()).openStream()));
-
-                comments = new ArrayList();
-
-                String defaultAuthor = inFeed.getAuthor();
-                for (Iterator iter = inFeed.getEntries().iterator(); iter.hasNext();) {
-                    SyndEntry post = (SyndEntry) iter.next();
-
-                    String author = post.getAuthor();
-                    author = BlogTools.isEmpty(author) ? defaultAuthor : author;
-                    comments.add(new BlogCommentImpl(
-                            new BlogAuthorImpl(author, author, ""),
-                            post.getTitle(), post.getDescription().getValue(),
-                            post.getPublishedDate(), post.getLink()));
-                }
-            } catch (Exception e) {
-                comments = null;
-            }
-        }
-
-        return comments;
-    }
-}
+package org.jboss.blog.service.model.rome;
+
+import org.jboss.blog.model.impl.BlogPostImpl;
+import org.jboss.blog.model.impl.BlogCommentImpl;
+import org.jboss.blog.model.impl.BlogAuthorImpl;
+import org.jboss.blog.model.BlogAuthor;
+import org.jboss.blog.tools.BlogTools;
+
+import java.util.*;
+import java.net.URL;
+
+import com.sun.syndication.io.SyndFeedInput;
+import com.sun.syndication.io.XmlReader;
+import com.sun.syndication.feed.synd.SyndFeed;
+import com.sun.syndication.feed.synd.SyndEntry;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class RomeBlogPost extends BlogPostImpl {
+    private boolean commentsInitialized;
+    private List comments;
+
+    public RomeBlogPost(BlogAuthor author, String title, String description, Date created,
+                        String link, String guid, List categories, String commentLink) {
+        super(author, title, description, created, link, guid, categories, commentLink, null);
+    }
+
+    public List getComments() {
+        if (!commentsInitialized) {
+            commentsInitialized = true;
+
+            if (getCommentLink() == null) {
+                return null;
+            }
+
+            try {
+                SyndFeedInput input = new SyndFeedInput();
+                SyndFeed inFeed;
+                inFeed = input.build(new XmlReader(new URL(getCommentLink()).openStream()));
+
+                comments = new ArrayList();
+
+                String defaultAuthor = inFeed.getAuthor();
+                for (Iterator iter = inFeed.getEntries().iterator(); iter.hasNext();) {
+                    SyndEntry post = (SyndEntry) iter.next();
+
+                    String author = post.getAuthor();
+                    author = BlogTools.isEmpty(author) ? defaultAuthor : author;
+                    comments.add(new BlogCommentImpl(
+                            new BlogAuthorImpl(author, author, ""),
+                            post.getTitle(), post.getDescription().getValue(),
+                            post.getPublishedDate(), post.getLink()));
+                }
+            } catch (Exception e) {
+                comments = null;
+            }
+        }
+
+        return comments;
+    }
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/service/model/rome/RomeParsingBlogModelService.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/model/rome/RomeParsingBlogModelService.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/model/rome/RomeParsingBlogModelService.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,100 +1,100 @@
-package org.jboss.blog.service.model.rome;
-
-import org.jboss.blog.model.BlogModel;
-import org.jboss.blog.model.BlogModelDoesNotExistException;
-import org.jboss.blog.model.impl.BlogModelImpl;
-import org.jboss.blog.model.impl.BlogAuthorImpl;
-import org.jboss.blog.BlogName;
-import org.jboss.blog.service.AbstractBlogService;
-import org.jboss.blog.service.model.BlogModelService;
-import org.jboss.blog.rome.CommentRssModule;
-import org.jboss.blog.tools.BlogTools;
-
-import java.util.*;
-import java.net.URL;
-import java.io.IOException;
-
-import com.sun.syndication.io.SyndFeedInput;
-import com.sun.syndication.io.XmlReader;
-import com.sun.syndication.io.FeedException;
-import com.sun.syndication.feed.synd.SyndFeed;
-import com.sun.syndication.feed.synd.SyndEntry;
-import com.sun.syndication.feed.synd.SyndCategory;
-
-/**
- * @author Adam Warski (adamw at aster.pl)
- *
- * @jmx.mbean
- * @jboss.xmbean
- */
-public class RomeParsingBlogModelService extends AbstractBlogService implements BlogModelService {
-    public RomeParsingBlogModelService() {
-
-    }
-
-    private Set getStringCategories(List categories) {
-        if (categories == null) {
-            return null;
-        }
-
-        Set ret = new HashSet();
-        for (Iterator iter = categories.iterator(); iter.hasNext();) {
-            ret.add(((SyndCategory) iter.next()).getName());
-        }
-
-        return ret;
-    }
-
-    /**
-     * @jmx.managed-operation
-     * @jmx.managed-parameter type="org.jboss.blog.BlogName"
-     */
-    public BlogModel retrieveBlogModel(BlogName name) throws BlogModelDoesNotExistException {
-        if (name.getId() == null) {
-            throw new BlogModelDoesNotExistException("No blog selected (null blog id)");
-        }
-
-        // Parsing the feed, which's address is the id of the selected blog.
-        SyndFeedInput input = new SyndFeedInput();
-        SyndFeed inFeed;
-        try {
-            inFeed = input.build(new XmlReader(new URL(name.getId()).openStream()));
-        } catch (IOException e) {
-            throw new BlogModelDoesNotExistException(e);
-        } catch (FeedException e) {
-            throw new BlogModelDoesNotExistException(e);
-        }
-        
-        List posts = new ArrayList();
-
-        String defaultAuthor = inFeed.getAuthor();
-        for (Iterator iter = inFeed.getEntries().iterator(); iter.hasNext();) {
-            SyndEntry post = (SyndEntry) iter.next();
-
-            CommentRssModule commRssModule = (CommentRssModule)
-                    post.getModule("http://wellformedweb.org/CommentAPI/");
-            String commentsRss = null;
-            if (commRssModule != null) {
-                commentsRss = commRssModule.getCommentRss();
-                if (commentsRss != null) {
-                    commentsRss = commentsRss.trim();
-                }
-            }
-
-            String author = post.getAuthor();
-            author = BlogTools.isEmpty(author) ? defaultAuthor : author;
-            posts.add(new RomeBlogPost(
-                    new BlogAuthorImpl(author, author, ""),
-                    post.getTitle(), post.getDescription().getValue(),
-                    post.getPublishedDate(), post.getLink(),
-                    post.getUri(),
-                    Collections.unmodifiableSet(getStringCategories(post.getCategories())),
-                    commentsRss));
-        }
-
-        return new BlogModelImpl(new BlogAuthorImpl(inFeed.getAuthor(), inFeed.getAuthor(), ""),
-                inFeed.getTitle(), inFeed.getDescription(), inFeed.getLink(),
-                inFeed.getPublishedDate(), Collections.unmodifiableList(posts),
-                Collections.unmodifiableSet(getStringCategories(inFeed.getCategories())));
-    }
-}
+package org.jboss.blog.service.model.rome;
+
+import org.jboss.blog.model.BlogModel;
+import org.jboss.blog.model.BlogModelDoesNotExistException;
+import org.jboss.blog.model.impl.BlogModelImpl;
+import org.jboss.blog.model.impl.BlogAuthorImpl;
+import org.jboss.blog.BlogName;
+import org.jboss.blog.service.AbstractBlogService;
+import org.jboss.blog.service.model.BlogModelService;
+import org.jboss.blog.rome.CommentRssModule;
+import org.jboss.blog.tools.BlogTools;
+
+import java.util.*;
+import java.net.URL;
+import java.io.IOException;
+
+import com.sun.syndication.io.SyndFeedInput;
+import com.sun.syndication.io.XmlReader;
+import com.sun.syndication.io.FeedException;
+import com.sun.syndication.feed.synd.SyndFeed;
+import com.sun.syndication.feed.synd.SyndEntry;
+import com.sun.syndication.feed.synd.SyndCategory;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ *
+ * @jmx.mbean
+ * @jboss.xmbean
+ */
+public class RomeParsingBlogModelService extends AbstractBlogService implements BlogModelService {
+    public RomeParsingBlogModelService() {
+
+    }
+
+    private Set getStringCategories(List categories) {
+        if (categories == null) {
+            return null;
+        }
+
+        Set ret = new HashSet();
+        for (Iterator iter = categories.iterator(); iter.hasNext();) {
+            ret.add(((SyndCategory) iter.next()).getName());
+        }
+
+        return ret;
+    }
+
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="org.jboss.blog.BlogName"
+     */
+    public BlogModel retrieveBlogModel(BlogName name) throws BlogModelDoesNotExistException {
+        if (name.getId() == null) {
+            throw new BlogModelDoesNotExistException("No blog selected (null blog id)");
+        }
+
+        // Parsing the feed, which's address is the id of the selected blog.
+        SyndFeedInput input = new SyndFeedInput();
+        SyndFeed inFeed;
+        try {
+            inFeed = input.build(new XmlReader(new URL(name.getId()).openStream()));
+        } catch (IOException e) {
+            throw new BlogModelDoesNotExistException(e);
+        } catch (FeedException e) {
+            throw new BlogModelDoesNotExistException(e);
+        }
+        
+        List posts = new ArrayList();
+
+        String defaultAuthor = inFeed.getAuthor();
+        for (Iterator iter = inFeed.getEntries().iterator(); iter.hasNext();) {
+            SyndEntry post = (SyndEntry) iter.next();
+
+            CommentRssModule commRssModule = (CommentRssModule)
+                    post.getModule("http://wellformedweb.org/CommentAPI/");
+            String commentsRss = null;
+            if (commRssModule != null) {
+                commentsRss = commRssModule.getCommentRss();
+                if (commentsRss != null) {
+                    commentsRss = commentsRss.trim();
+                }
+            }
+
+            String author = post.getAuthor();
+            author = BlogTools.isEmpty(author) ? defaultAuthor : author;
+            posts.add(new RomeBlogPost(
+                    new BlogAuthorImpl(author, author, ""),
+                    post.getTitle(), post.getDescription().getValue(),
+                    post.getPublishedDate(), post.getLink(),
+                    post.getUri(),
+                    new ArrayList(getStringCategories(post.getCategories())),
+                    commentsRss));
+        }
+
+        return new BlogModelImpl(new BlogAuthorImpl(inFeed.getAuthor(), inFeed.getAuthor(), ""),
+                inFeed.getTitle(), inFeed.getDescription(), inFeed.getLink(),
+                inFeed.getPublishedDate(), Collections.unmodifiableList(posts),
+                new ArrayList(getStringCategories(inFeed.getCategories())));
+    }
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/service/store/BlogStoreService.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/store/BlogStoreService.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/store/BlogStoreService.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -32,7 +32,20 @@
     public List retrieveAllCategories(BlogName blogName)
             throws IllegalArgumentException;
 
+    public ModifiableBlogCategory retrieveBlogCategory(String name);
+    
     /**
+     * Reads a list of all groups.
+     * @param blogName Name of the blog for which to read the groups. The
+     * group part of the name will be ignored.
+     * @return A list of {@link org.jboss.blog.BlogName} objects, with the id
+     * part equal to the one passed in the parameter.
+     * @throws IllegalArgumentException If blog name is null.
+     */
+    public List retrieveAllGroups(BlogName blogName)
+    throws IllegalArgumentException;
+    
+    /**
      * Checks if a blog with the given blog name can be modified.
      * @param blogName Name of the blog to check.
      * @return True if this blog can be modified using this store service.
@@ -111,6 +124,13 @@
             throws IllegalArgumentException, BlogModelAlreadyExistsException;
 
     /**
+     * Creates a new blog category
+     * @return A new blog category, which can be later added to a
+     * blog model and saved.
+     */
+    public ModifiableBlogCategory newBlogCategory();
+    
+    /**
      * Creates a new blog post, with an empty set of categories. To later
      * save the post, simply add it to a model.
      * @return A new blog post, which can be later added to a
@@ -139,4 +159,10 @@
     public String retrieveTemplatePostsList(BlogName blogName) throws Exception;
     
     public void saveTemplatePostsList(BlogName blogName,String s) throws Exception;
+
+    public Integer retrieveBlogCategoryId(String name);
+    
+    public void deleteBlogCategory(String name);
+    
+    public void addBlogCategory(String s, String t,BlogName blogName) throws Exception;
 }

Added: trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogCategory.hbm.xml
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogCategory.hbm.xml	                        (rev 0)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogCategory.hbm.xml	2007-03-22 16:37:07 UTC (rev 102)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.jboss.blog.service.store.hibernate">
+    <class name="HBlogCategory"
+           table="BLOG_CATEGORIES">
+        <id name="id" column="CATEGORY_ID">
+            <generator class="native" />
+        </id>
+
+        <property name="name" column="NAME" not-null="true" />
+        
+        <property name="description" column="DESCRIPTION" type="text" />
+        
+         
+    </class>
+</hibernate-mapping>
\ No newline at end of file

Added: trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogCategory.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogCategory.java	                        (rev 0)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogCategory.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -0,0 +1,59 @@
+package org.jboss.blog.service.store.hibernate;
+
+import java.util.List;
+import org.jboss.blog.service.store.model.ModifiableBlogCategory;
+
+
+public class HBlogCategory implements ModifiableBlogCategory{
+	private Integer id;
+	private String name;
+    private String description;
+    private List posts;
+    
+    private HibernateBlogStoreService storeService;
+    
+    public HBlogCategory(){	
+    }
+    
+    public HibernateBlogStoreService getStoreService() {
+        return storeService;
+    }
+    
+    public void setStoreService(HibernateBlogStoreService storeService) {
+        this.storeService = storeService;
+    }
+    
+    
+    public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public void setId(Integer id){
+		this.id = id;
+	}
+	
+	public Integer getId(){
+		return id;
+	}
+    
+	public List getPosts(){
+		return posts;
+	}
+	
+	public void setPosts(List posts){
+		this.posts = posts;
+	}
+    
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.hbm.xml
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.hbm.xml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.hbm.xml	2007-03-22 16:37:07 UTC (rev 102)
@@ -13,7 +13,7 @@
         <natural-id mutable="true">
             <component name="blogName" class="org.jboss.blog.BlogName">
                 <property name="id" column="BLOG_NAME_ID" length="64" />
-                <property name="category" column="BLOG_NAME_CATEGORY" length="128" />
+                <property name="group" column="BLOG_NAME_GROUP" length="128" />
             </component>
         </natural-id>
 
@@ -34,5 +34,11 @@
             <key column="BLOG_ID" not-null="true" />
             <one-to-many class="HBlogModelPost" /> 
         </bag>
+        
+        <bag name="categories" inverse="true">
+        	<key column="BLOG_ID" not-null="true" />
+        	<one-to-many class="HBlogCategory" />
+        </bag>
+        
     </class>
 </hibernate-mapping>
\ No newline at end of file

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -2,6 +2,7 @@
 
 import org.jboss.blog.service.store.model.ModifiableBlogModel;
 import org.jboss.blog.service.store.model.ModifiableBlogPost;
+import org.jboss.blog.service.store.model.ModifiableBlogCategory;
 import org.jboss.blog.service.store.model.BlogModelAlreadyExistsException;
 import org.jboss.blog.model.AbstractBlogModel;
 import org.jboss.blog.model.BlogPost;
@@ -27,13 +28,13 @@
 
     private List modelPosts;
 
-    private Set categories;
+    private List categories;
     private List posts;
 
     private HibernateBlogStoreService storeService;
 
     public HBlogModel() {
-        categories = BlogTools.emptySet();
+        categories = new ArrayList();//BlogTools.emptySet();
     }
 
     public Integer getId() {
@@ -50,11 +51,6 @@
 
     public void setBlogName(BlogName blogName) {
         this.blogName = blogName;
-        if (blogName.getCategory() == null) {
-            categories = BlogTools.emptySet();
-        } else {
-            categories = Collections.singleton(blogName.getCategory());
-        }
     }
 
     public BlogAuthor getAuthor() {
@@ -106,21 +102,23 @@
         this.created = created;
     }
 
-    public String getCategory() {
-        return getBlogName().getCategory();
+    
+    
+    public String getGroup() {
+        return getBlogName().getGroup();
     }
 
-    public void setCategory(String category)
+    public void setGroup(String group)
             throws IllegalArgumentException, BlogModelAlreadyExistsException {
-        if (BlogTools.isEmpty(category)) {
-            throw new IllegalArgumentException("Category cannot be null or empty.");
+        if (BlogTools.isEmpty(group)) {
+            throw new IllegalArgumentException("Group cannot be null or empty.");
         }
 
         /* Trying to create a new model with a given category name, to check
          * if it doesn't already exist. */
-        getStoreService().newBlogModel(new BlogName(getBlogName().getId(), category));
+        getStoreService().newBlogModel(new BlogName(getBlogName().getId(), group));
 
-        getBlogName().setCategory(category);
+        getBlogName().setGroup(group);
     }
 
     //
@@ -143,9 +141,23 @@
 
     //
 
-    public Set getCategories() {
+    public List getCategories() {
+    	HibernateBlogStoreService storeService = getStoreService();
+    	if(categories==null){
+    		categories = storeService.retrieveAllCategories(blogName);
+    		/*
+    		for (Iterator iter = categories.iterator(); iter.hasNext();) {
+        		HBlogCategory cat = ((HBlogCategory) iter.next());
+        		categories.add(cat);
+        		cat.setStoreService(storeService);
+        	}*/
+    	}
         return categories;
     }
+    
+    public void setCategories(List categories){
+    	this.categories = categories;
+    }
 
     public List getPosts() {
         // Creating a list of posts from the a list of HBlogModelPost.
@@ -193,7 +205,14 @@
 
         storeService.addPost(this, hpost);
     }
+    
+    public void addCategory(ModifiableBlogCategory category) throws IllegalArgumentException {
+        HibernateBlogStoreService storeService = getStoreService();
+        HBlogCategory hcat = storeService.castAndAssertBlogCategory(category);
 
+        storeService.addCategory(this, hcat);
+    }
+
     public void removePost(ModifiableBlogPost post) throws IllegalArgumentException {
         HibernateBlogStoreService storeService = getStoreService();
         HBlogPost hpost = storeService.castAndAssertBlogPost(post);

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.hbm.xml
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.hbm.xml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.hbm.xml	2007-03-22 16:37:07 UTC (rev 102)
@@ -36,5 +36,11 @@
             <key column="POST_ID" not-null="true" />
             <one-to-many class="HBlogComment" />
         </bag>
+        
+        <set name="categories" inverse="true">
+        	<key column="POST_ID" not-null="true" />
+         	<many-to-many class="HBlogCategory" />
+         </set>
+
     </class>
 </hibernate-mapping>
\ No newline at end of file

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -27,7 +27,7 @@
 
     private List comments;
     private List modelPosts;
-    private Set categories;
+    private List categories;
 
     private HibernateBlogStoreService storeService;
 
@@ -129,16 +129,13 @@
         this.modelPosts = modelPosts;
     }
 
-    public Set getCategories() {
-        if (categories == null) {
-            categories = new HashSet();
-            for (Iterator iter = getModelPosts().iterator(); iter.hasNext();) {
-                categories.add(((HBlogModelPost) iter.next()).getModel().getCategory());
-            }
-        }
-
-        return Collections.unmodifiableSet(categories);
+    public List getCategories() {
+    	return categories;
     }
+    
+    public void setCategories(List categories){
+    	this.categories = categories;
+    }
 
     public HibernateBlogStoreService getStoreService() {
         return storeService;

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HibernateBlogStoreService.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HibernateBlogStoreService.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/store/hibernate/HibernateBlogStoreService.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -5,6 +5,7 @@
 import org.jboss.blog.service.store.model.ModifiableBlogPost;
 import org.jboss.blog.service.store.model.BlogModelAlreadyExistsException;
 import org.jboss.blog.service.store.model.ModifiableBlogComment;
+import org.jboss.blog.service.store.model.ModifiableBlogCategory;
 import org.jboss.blog.service.AbstractBlogService;
 import org.jboss.blog.service.permissions.model.PortalUserBlogAuthor;
 import org.jboss.blog.service.permissions.BlogPermissionsService;
@@ -12,6 +13,7 @@
 import org.jboss.blog.model.BlogModelDoesNotExistException;
 import org.jboss.blog.model.BlogCommentDoesNotExistException;
 import org.jboss.blog.model.BlogAuthor;
+import org.jboss.blog.model.BlogCategory;
 import org.jboss.blog.tools.BlogTools;
 import org.hibernate.SessionFactory;
 import org.hibernate.cfg.Configuration;
@@ -68,7 +70,16 @@
 
         return (HBlogModel) model;
     }
+    
+    HBlogCategory castAndAssertBlogCategory(BlogCategory category) {
+        BlogTools.assertNotNull(category, "Blog category cannot be null.");
+        if (!(category instanceof HBlogCategory)) {
+            throw new IllegalArgumentException("Category must be obtained from this store service.");
+        }
 
+        return (HBlogCategory) category;
+    }
+
     HBlogPost castAndAssertBlogPost(ModifiableBlogPost post) {
         BlogTools.assertNotNull(post, "Blog post cannot be null.");
         if (!(post instanceof HBlogPost)) {
@@ -107,13 +118,27 @@
      * @jmx.managed-operation
      * @jmx.managed-parameter type="org.jboss.blog.BlogName"
      */
-    public List retrieveAllCategories(BlogName blogName) {
+    public List retrieveAllGroups(BlogName blogName) {
         assertBlogNameNotNull(blogName);
         return sf.getCurrentSession().createQuery(
                 "select model.blogName from HBlogModel as model " +
                         "where model.blogName.id = :id")
                 .setParameter("id", blogName.getId()).list();
     }
+    
+    
+    
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="org.jboss.blog.BlogName"
+     */
+    public List retrieveAllCategories(BlogName blogName) {
+        assertBlogNameNotNull(blogName);
+        return sf.getCurrentSession().createQuery(
+                "select model.categories from HBlogModel as model " +
+                        "where model.blogName.id = :id")
+                .setParameter("id", blogName.getId()).list();
+    }
 
     private boolean blogExists(BlogName blogName) {
         Long count = (Long) sf.getCurrentSession().createQuery(
@@ -154,9 +179,38 @@
 
         return hbm;
     }
+    
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="String"
+     */
+    public ModifiableBlogCategory retrieveBlogCategory(String name){
+    	
+        HBlogCategory hbc = (HBlogCategory) sf.getCurrentSession()
+                .createQuery("from HBlogCategory as cat where cat.name = :name")
+                .setCacheable(true).setParameter("name", name).uniqueResult();
 
+
+        if (hbc != null){
+        	hbc.setStoreService(this);
+    	}
+        return hbc;
+    }
+    
     /**
      * @jmx.managed-operation
+     * @jmx.managed-parameter type="String"
+     */
+    public Integer retrieveBlogCategoryId(String name){
+    	Integer res = (Integer) sf.getCurrentSession()
+        .createQuery("select cat.id from HBlogCategory as cat where cat.name = :name")
+        .setCacheable(true).setParameter("name", name).uniqueResult();
+    	
+    	return res;
+    }
+    
+    /**
+     * @jmx.managed-operation
      * @jmx.managed-parameter type="org.jboss.blog.BlogName"
      */
     public ModifiableBlogModel newBlogModel(BlogName blogName) throws BlogModelAlreadyExistsException {
@@ -181,6 +235,16 @@
     /**
      * @jmx.managed-operation
      */
+    public ModifiableBlogCategory newBlogCategory() {
+        HBlogCategory category = new HBlogCategory();
+        category.setStoreService(this);
+
+        return category;
+    }
+    
+    /**
+     * @jmx.managed-operation
+     */
     public ModifiableBlogPost newBlogPost() {
         HBlogPost post = new HBlogPost();
         post.setModelPosts(new ArrayList());
@@ -244,6 +308,22 @@
 
     /**
      * @jmx.managed-operation
+     * @jmx.managed-parameter type="org.jboss.blog.service.store.model.ModifiableBlogCategory"
+     */
+    public void saveNewBlogCategory(ModifiableBlogCategory category) /*throws BlogCategoryAlreadyExistsException*/ {
+        HBlogCategory hcategory = castAndAssertBlogCategory(category);
+        //assertBlogNameNotNull(hmodel.getBlogName());
+
+        // TODO: checking if the blog already exist or not. Can it be done in a better way?
+        //if (blogExists(hmodel.getBlogName())) {
+        //    throw new BlogModelAlreadyExistsException(hmodel.getBlogName().toString());
+        //}
+
+        sf.getCurrentSession().save(category);
+    }
+    
+    /**
+     * @jmx.managed-operation
      * @jmx.managed-parameter type="org.jboss.blog.service.store.model.ModifiableBlogModel"
      */
     public void deleteBlogModel(ModifiableBlogModel model) {
@@ -287,6 +367,19 @@
                 "where bmp.post = :post").setEntity("post", hpost).executeUpdate();
         sf.getCurrentSession().delete(hpost);
     }
+    
+    
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="org.jboss.blog.service.store.model.ModifiableBlogPost"
+     */
+    public void deleteBlogCategory(String name) {
+        HBlogCategory hcat = castAndAssertBlogCategory(retrieveBlogCategory(name));
+        if (hcat.getId() == null) {
+            throw new IllegalArgumentException("Cannot delete a new category.");
+        }
+        sf.getCurrentSession().delete(hcat);
+    }
 
     /**
      * @jmx.managed-operation
@@ -307,7 +400,7 @@
      * To the given blog model, adds the given post.
      * @param model Model to which the post should be added.
      * @param post Post to add.
-     */
+     */ 
     void addPost(HBlogModel model, HBlogPost post) {
         HBlogModel hmodel = castAndAssertBlogModel(model);
         HBlogPost hpost = castAndAssertBlogPost(post);
@@ -324,7 +417,21 @@
             sf.getCurrentSession().save(hbmp);
         }
     }
+    
+    /**
+     * To the given blog model, adds the given category.
+     * @param model Model to which the post should be added.
+     * @param category Category to add.
+     */ 
+    void addCategory(HBlogModel model, HBlogCategory category) {
+        HBlogModel hmodel = castAndAssertBlogModel(model);
+        HBlogCategory hcat = castAndAssertBlogCategory(category);
 
+       hmodel.getCategories().add(hcat);
+        sf.getCurrentSession().saveOrUpdate(hcat);
+        
+    }
+
     /**
      * From the given blog model, removes the given post.
      * @param model Model from which the post shold be removed.
@@ -461,4 +568,24 @@
     	HBlogModel hbm = (HBlogModel) sf.getCurrentSession().createQuery("from HBlogModel as model where model.blogName = :name").setParameter("name", blogName).uniqueResult();
     	hbm.setTemplatePostsList(s);
     }
+    
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="java.lang.String"
+     * @jmx.managed-parameter type="java.lang.String"
+     * @jmx.managed-parameter type="org.jboss.blog.BlogName"
+     */
+    public void addBlogCategory(String name, String description,BlogName blogName) throws Exception{
+    	ModifiableBlogCategory mbc = newBlogCategory();
+    	
+    	//mbc.setId(id);
+    	mbc.setName(name);
+    	mbc.setDescription(description);
+
+    	ModifiableBlogModel mbm = retrieveBlogModel(blogName/*getState().getSelectedBlogName()*/);
+    	mbc.setId(new Integer(mbm.getCategories().size()+1));
+    	//mbm.addCategory(mbc);
+    	mbm.getCategories().add(mbc);
+    	 sf.getCurrentSession().save(mbm);
+    }
 }

Added: trunk-esial/blog-core/src/java/org/jboss/blog/service/store/model/ModifiableBlogCategory.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/store/model/ModifiableBlogCategory.java	                        (rev 0)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/store/model/ModifiableBlogCategory.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -0,0 +1,18 @@
+package org.jboss.blog.service.store.model;
+
+import org.jboss.blog.model.BlogCategory;
+
+
+import java.io.Serializable;
+
+
+public interface ModifiableBlogCategory extends BlogCategory{
+
+	public void setId(Integer id);
+	
+	public void setName(String name);
+	
+	public void setDescription(String description);
+	
+	public String getDescription();
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/service/store/model/ModifiableBlogModel.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/service/store/model/ModifiableBlogModel.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/service/store/model/ModifiableBlogModel.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -3,7 +3,7 @@
 import org.jboss.blog.model.BlogModel;
 import org.jboss.blog.model.BlogPostDoesNotExistException;
 
-import java.util.Set;
+import java.util.List;
 
 /**
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
@@ -14,14 +14,15 @@
      * @return Set containg {@link ModifiableBlogModel#getCategory()} - name of
      * the category to which this model belongs.
      */
-    public Set getCategories();
+	//description à modifier
+    public List getCategories();
 
     /**
      *
      * @return Name of the category, to which this model belongs. An empty string
      * denotes the root category.
      */
-    public String getCategory();
+    public String getGroup();
 
     /**
      * Sets the name of the category, to which this model belongs. The name of
@@ -31,7 +32,7 @@
      * @throws BlogModelAlreadyExistsException If a model with this category name
      * already exists.
      */
-    public void setCategory(String category)
+    public void setGroup(String group)
             throws IllegalArgumentException, BlogModelAlreadyExistsException;
 
     public ModifiableBlogPost getModifiableBlogPostByTitleAsId(String titleAsId)
@@ -47,6 +48,15 @@
      */
     public void addPost(ModifiableBlogPost post)
             throws IllegalArgumentException;
+    
+    /**
+     * Adds the given category to this blog model. This method should be used
+     * @param category Category to add.
+     * @throws IllegalArgumentException If category is null, or
+     * it hasn't been obtained in a proper way.
+     */
+    public void addCategory(ModifiableBlogCategory category)
+            throws IllegalArgumentException;
 
     /**
      * Removes the given post from this blog model. This method should be used

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/tools/UITools.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/tools/UITools.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/tools/UITools.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,49 +1,55 @@
-package org.jboss.blog.tools;
-
-import org.jboss.blog.BlogName;
-
-import javax.faces.context.FacesContext;
-import javax.faces.application.FacesMessage;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class UITools {
-    public static final String BLOG_VIEW    = "blog_view";
-    public static final String POST_VIEW    = "post_view";
-
-    public static final String BLOG_EDIT    = "blog_edit";
-    public static final String BLOG_NEW     = "blog_new";
-    public static final String BLOG_DEL     = "blog_del";
-
-    public static final String POST_EDIT    = "post_edit";
-    public static final String POST_NEW     = "post_new";
-    public static final String POST_DEL     = "post_del";
-
-    public static final String COMMENT_DEL  = "comment_del";
-
-    public static final String ADMIN_PANEL  = "admin_panel";
-    public static final String ID_EDIT      = "id_edit";
-
-    public static void addInfoMessage(String message) {
-        FacesContext.getCurrentInstance().addMessage(null,
-                new FacesMessage(FacesMessage.SEVERITY_INFO, message, ""));
-    }
-
-    public static void addErrorMessage(String message) {
-        FacesContext.getCurrentInstance().addMessage(null,
-                new FacesMessage(FacesMessage.SEVERITY_ERROR, message, ""));
-    }
-
-    public static void addMessageBlogDoesntExist(BlogName blogName) {
-        addErrorMessage("The blog you requested does not exist: " + blogName.toString() + ".");
-    }
-
-    public static void addMessagePostDoesntExist(String id) {
-        addErrorMessage("The post you requested: " + id + " does not exist.");
-    }
-
-    public static void addMessageCommentDoesntExist() {
-        addErrorMessage("The comment you requested does not exist.");
-    }
-}
+package org.jboss.blog.tools;
+
+import org.jboss.blog.BlogName;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.FacesMessage;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class UITools {
+    public static final String BLOG_VIEW    = "blog_view";
+    public static final String POST_VIEW    = "post_view";
+
+    public static final String BLOG_EDIT    = "blog_edit";
+    public static final String BLOG_NEW     = "blog_new";
+    public static final String BLOG_DEL     = "blog_del";
+    public static final String BLOG_MAN		= "blog_manage";
+
+    public static final String POST_EDIT    = "post_edit";
+    public static final String POST_NEW     = "post_new";
+    public static final String POST_DEL     = "post_del";
+    
+    public static final String CAT_EDIT		= "cat_edit";
+    public static final String CAT_NEW		= "cat_new";
+    public static final String CAT_DEL		= "cat_delete";
+    public static final String CAT_MAN		= "cat_manage";
+
+    public static final String COMMENT_DEL  = "comment_del";
+
+    public static final String ADMIN_PANEL  = "admin_panel";
+    public static final String ID_EDIT      = "id_edit";
+
+    public static void addInfoMessage(String message) {
+        FacesContext.getCurrentInstance().addMessage(null,
+                new FacesMessage(FacesMessage.SEVERITY_INFO, message, ""));
+    }
+
+    public static void addErrorMessage(String message) {
+        FacesContext.getCurrentInstance().addMessage(null,
+                new FacesMessage(FacesMessage.SEVERITY_ERROR, message, ""));
+    }
+
+    public static void addMessageBlogDoesntExist(BlogName blogName) {
+        addErrorMessage("The blog you requested does not exist: " + blogName.toString() + ".");
+    }
+
+    public static void addMessagePostDoesntExist(String id) {
+        addErrorMessage("The post you requested: " + id + " does not exist.");
+    }
+
+    public static void addMessageCommentDoesntExist() {
+        addErrorMessage("The comment you requested does not exist.");
+    }
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/ui/BlogView.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/ui/BlogView.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/ui/BlogView.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,369 +1,381 @@
-package org.jboss.blog.ui;
-
-import org.jboss.blog.model.BlogModel;
-import org.jboss.blog.model.BlogModelDoesNotExistException;
-import org.jboss.blog.model.BlogPost;
-import org.jboss.blog.model.BlogPostDoesNotExistException;
-import org.jboss.blog.model.impl.EmptyBlogPost;
-import org.jboss.blog.model.impl.EmptyBlogModel;
-import org.jboss.blog.BlogName;
-import org.jboss.blog.service.store.model.ModifiableBlogPost;
-import org.jboss.blog.service.store.model.ModifiableBlogModel;
-import org.jboss.blog.tools.BlogTools;
-import org.jboss.blog.tools.UITools;
-
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIData;
-import java.util.List;
-
-/**
- * A request-scoped bean allowing to access current view setup - what and how
- * should be displayed.
- * @author Adam Warski (adamw at aster.pl)
- */
-public class BlogView {
-    public BlogView() {
-
-    }
-
-    // Faces-managed properties
-    private UIData postsData;
-    private State state;
-
-    public UIData getPostsData() {
-        return postsData;
-    }
-
-    public void setPostsData(UIData postsData) {
-        this.postsData = postsData;
-    }
-
-    public State getState() {
-        return state;
-    }
-
-    public void setState(State state) {
-        this.state = state;
-    }
-
-    // Cached properties
-    private BlogName blogName;
-    private BlogModel blogModel;
-    private BlogViewState blogViewState;
-    private Integer numberOfPostsPerPage;
-    private Boolean viewPostsOnSeparatePage;
-    private Boolean viewAllPosts;
-    private Boolean commentsEnabled;
-    private Boolean postsExpandable;
-    private Boolean blogModifiable;
-    private Boolean defaultBlog;
-
-    /* A list of posts to show in the current view, plus the next post,
-     * if such a post exists (used to checking if there is a next page). */
-    private List postsWithNext;
-    // A list of posts to show in the current view.
-    private List posts;
-
-    Object getRequest() {
-        return FacesContext.getCurrentInstance().getExternalContext().getRequest();
-    }
-
-    private void resetBlogData() {
-        blogName = null;
-        blogModel = null;
-        blogModifiable = null;
-        blogViewState = null;
-        defaultBlog  = null;
-    }
-
-    private void resetPosts() {
-        postsWithNext = null;
-        posts = null;
-    }
-
-    public BlogName getBlogName() {
-        if (blogName == null) {
-            // Blog name from the state has precedence over the default one.
-            blogName = getState().getSelectedBlogName();
-            if (blogName == null) {
-                blogName = BlogTools.getBlogService().getNameService().retrieveBlogName(getRequest());
-            }
-        }
-
-        return blogName;
-    }
-
-    public Boolean getDefaultBlog() {
-        if (defaultBlog == null) {
-            defaultBlog = Boolean.valueOf(getState().getSelectedBlogName() == null);
-        }
-
-        return defaultBlog;
-    }
-
-    public BlogModel getBlogModel() {
-        if (blogModel == null) {
-            try {
-                blogModel = BlogTools.getBlogService().getModelService().retrieveBlogModel(
-                        getBlogName());
-            } catch (BlogModelDoesNotExistException e) {
-                UITools.addMessageBlogDoesntExist(getBlogName());
-                blogModel = new EmptyBlogModel();
-            }
-        }
-
-        return blogModel;
-    }
-
-    public Boolean getCommentsEnabled() {
-        if (commentsEnabled == null) {
-            commentsEnabled = BlogTools.getBlogService().getConfigurationService().
-                    getCommentsEnabled(getRequest());
-        }
-
-        return commentsEnabled;
-    }
-
-    public Integer getNumberOfPostsPerPage() {
-        if (numberOfPostsPerPage == null) {
-            numberOfPostsPerPage = BlogTools.getBlogService().getConfigurationService().
-                    getNumberOfPostsPerPage(getRequest());
-        }
-
-        return numberOfPostsPerPage;
-    }
-
-    public Boolean getViewPostsOnSeparatePage() {
-        if (viewPostsOnSeparatePage == null) {
-            viewPostsOnSeparatePage = BlogTools.getBlogService().getConfigurationService().
-                    getViewPostsOnSeparatePage(getRequest());
-        }
-
-        return viewPostsOnSeparatePage;
-    }
-
-    public Boolean getViewAllPosts() {
-        if (viewAllPosts == null) {
-            viewAllPosts = BlogTools.getBlogService().getConfigurationService().
-                    getViewAllPosts(getRequest());
-        }
-
-        return viewAllPosts;
-    }
-
-    public BlogViewState getBlogViewState() {
-        if (blogViewState == null) {
-            blogViewState = getState().getBlogViewState(getBlogName());
-        }
-
-        return blogViewState;
-    }
-
-    public Boolean getPostsExpandable() {
-        if (postsExpandable == null) {
-            postsExpandable = Boolean.valueOf(!getViewAllPosts().booleanValue() ||
-                    getViewPostsOnSeparatePage().booleanValue());
-        }
-
-        return postsExpandable;
-    }
-
-    public Boolean getBlogModifiable() {
-        if (blogModifiable == null) {
-            blogModifiable = Boolean.valueOf(BlogTools.getBlogService().getStoreService().
-                    retrieveBlogModifiable(getBlogName()));
-        }
-
-        return blogModifiable;
-    }
-
-    private List getPostsWithNext() {
-        if (postsWithNext == null) {
-            postsWithNext = getBlogModel().getPosts(getFrom(), getTo()+1);
-        }
-
-        return postsWithNext;
-    }
-
-    public List getPosts() {
-        if (posts == null) {
-            List postsWithNext = getPostsWithNext();
-            posts = postsWithNext.subList(0, Math.min(postsWithNext.size(),
-                    getNumberOfPostsPerPage().intValue()));
-        }
-
-        return posts;
-    }
-
-    //
-
-    public boolean getHasPrevious() {
-        return getFrom() > 0;
-    }
-
-    public boolean getHasNext() {
-        return getPostsWithNext().size() > getTo() - getFrom();
-    }
-
-    public int getTo() {
-        return getFrom() + getNumberOfPostsPerPage().intValue();
-    }
-
-    public int getFrom() {
-        return getBlogViewState().getFrom();
-    }
-
-    private void setFrom(int from) {
-        BlogViewState bvs = getBlogViewState();
-        bvs.setFrom(from);
-        setSelectedPostTitleAsId(null);
-    }
-
-    public String getSelectedPostTitleAsId() {
-        return getBlogViewState().getSelectedPostTitleAsId();
-    }
-
-    private void setSelectedPostTitleAsId(String selectedPostId) {
-        getBlogViewState().setSelectedPostTitleAsId(selectedPostId);
-    }
-
-    private BlogPost postDoesNotExist(String id) {
-        UITools.addMessagePostDoesntExist(id);
-        return new EmptyBlogPost();
-    }
-
-    ModifiableBlogModel getModifiableModel() throws BlogModelDoesNotExistException {
-        return BlogTools.getBlogService().getStoreService().retrieveBlogModel(
-                getBlogName());
-    }
-
-    ModifiableBlogPost getModifiableSelectedPost()
-            throws BlogPostDoesNotExistException, BlogModelDoesNotExistException {        
-        return getModifiableModel().getModifiableBlogPostByTitleAsId(
-                getSelectedPostTitleAsId());
-    }
-
-    public BlogPost getSelectedPost() {
-        String titleAsId = getSelectedPostTitleAsId();
-
-        if (titleAsId == null) {
-            return postDoesNotExist(titleAsId);
-        }
-
-        // First looking in the specified range.
-        List posts = getPostsWithNext();
-        for (int i=0; i<posts.size(); i++) {
-            BlogPost current = (BlogPost) posts.get(i);
-            if (titleAsId.equals(current.getTitleAsId())) {
-                return current;
-            }
-        }
-
-        // If unsuccessfull, looking in all entries (we may find something if
-        // after selecting the entry, new entries have been added/ remvoed).
-        try {
-            return blogModel.getPostByTitleAsId(titleAsId);
-        } catch (BlogPostDoesNotExistException e) {
-            return postDoesNotExist(titleAsId);
-        }
-    }
-
-    // Actions
-
-    public String next() {
-        setFrom(getFrom() + getNumberOfPostsPerPage().intValue());
-        resetPosts();
-
-        return null;
-    }
-
-    public String previous() {
-        setFrom(Math.max(getFrom() - getNumberOfPostsPerPage().intValue(), 0));
-        resetPosts();
-
-        return null;
-    }
-
-    public String postView() {
-        postSelect();
-
-        if (getViewPostsOnSeparatePage().booleanValue()) {
-            return UITools.POST_VIEW;
-        } else {
-            return null;
-        }
-    }
-
-    public String blogView() {
-        postClear();
-
-        return UITools.BLOG_VIEW;
-    }
-
-    public String postEditFromBlogView() {
-        postSelect();
-        exitFromBlogView();
-
-        return UITools.POST_EDIT;
-    }
-
-    public String postEditFromPostView() {
-        exitFromPostView();
-
-        return UITools.POST_EDIT;
-    }
-
-    public String postNew() {
-        exitFromBlogView();
-
-        return UITools.POST_NEW;
-    }
-
-    public String blogEditFromBlogView() {
-        exitFromBlogView();
-
-        return UITools.BLOG_EDIT;
-    }
-
-    public String blogEditFromPostView() {
-        exitFromPostView();
-
-        return UITools.BLOG_EDIT;
-    }
-
-    public String returnToDefault() {
-        getState().setSelectedBlogName(null);
-        resetBlogData();
-
-        return null;
-    }
-
-    // Helper methods
-
-    private void postSelect() {
-        BlogPost selected = (BlogPost) postsData.getRowData();
-        setSelectedPostTitleAsId(selected.getTitleAsId());
-    }
-
-    private void postClear() {
-        setSelectedPostTitleAsId(null);
-    }
-
-    private void exitFromBlogView() {
-        getState().setReturnTo(UITools.BLOG_VIEW);
-    }
-
-    private void exitFromPostView() {
-        getState().setReturnTo(UITools.POST_VIEW);
-    }
-
-    String getReturnTo() {
-        String viewName = state.getReturnTo();
-        if ((viewName == null) || (UITools.BLOG_VIEW.equals(viewName))) {
-            viewName = UITools.BLOG_VIEW;
-            postClear();
-        }
-
-        return viewName;
-    }
-}
+package org.jboss.blog.ui;
+
+import org.jboss.blog.model.BlogModel;
+import org.jboss.blog.model.BlogModelDoesNotExistException;
+import org.jboss.blog.model.BlogPost;
+import org.jboss.blog.model.BlogPostDoesNotExistException;
+import org.jboss.blog.model.impl.EmptyBlogPost;
+import org.jboss.blog.model.impl.EmptyBlogModel;
+import org.jboss.blog.BlogName;
+import org.jboss.blog.service.store.model.ModifiableBlogPost;
+import org.jboss.blog.service.store.model.ModifiableBlogModel;
+import org.jboss.blog.tools.BlogTools;
+import org.jboss.blog.tools.UITools;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIData;
+import java.util.List;
+
+/**
+ * A request-scoped bean allowing to access current view setup - what and how
+ * should be displayed.
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class BlogView {
+    public BlogView() {
+
+    }
+
+    // Faces-managed properties
+    private UIData postsData;
+    private State state;
+
+    public UIData getPostsData() {
+        return postsData;
+    }
+
+    public void setPostsData(UIData postsData) {
+        this.postsData = postsData;
+    }
+
+    public State getState() {
+        return state;
+    }
+
+    public void setState(State state) {
+        this.state = state;
+    }
+
+    // Cached properties
+    private BlogName blogName;
+    private BlogModel blogModel;
+    private BlogViewState blogViewState;
+    private Integer numberOfPostsPerPage;
+    private Boolean viewPostsOnSeparatePage;
+    private Boolean viewAllPosts;
+    private Boolean commentsEnabled;
+    private Boolean postsExpandable;
+    private Boolean blogModifiable;
+    private Boolean defaultBlog;
+
+    /* A list of posts to show in the current view, plus the next post,
+     * if such a post exists (used to checking if there is a next page). */
+    private List postsWithNext;
+    // A list of posts to show in the current view.
+    private List posts;
+
+    Object getRequest() {
+        return FacesContext.getCurrentInstance().getExternalContext().getRequest();
+    }
+
+    private void resetBlogData() {
+        blogName = null;
+        blogModel = null;
+        blogModifiable = null;
+        blogViewState = null;
+        defaultBlog  = null;
+    }
+
+    private void resetPosts() {
+        postsWithNext = null;
+        posts = null;
+    }
+
+    public BlogName getBlogName() {
+        if (blogName == null) {
+            // Blog name from the state has precedence over the default one.
+            blogName = getState().getSelectedBlogName();
+            if (blogName == null) {
+                blogName = BlogTools.getBlogService().getNameService().retrieveBlogName(getRequest());
+            }
+        }
+
+        return blogName;
+    }
+
+    public Boolean getDefaultBlog() {
+        if (defaultBlog == null) {
+            defaultBlog = Boolean.valueOf(getState().getSelectedBlogName() == null);
+        }
+
+        return defaultBlog;
+    }
+
+    public BlogModel getBlogModel() {
+        if (blogModel == null) {
+            try {
+                blogModel = BlogTools.getBlogService().getModelService().retrieveBlogModel(
+                        getBlogName());
+            } catch (BlogModelDoesNotExistException e) {
+                UITools.addMessageBlogDoesntExist(getBlogName());
+                blogModel = new EmptyBlogModel();
+            }
+        }
+
+        return blogModel;
+    }
+
+    public Boolean getCommentsEnabled() {
+        if (commentsEnabled == null) {
+            commentsEnabled = BlogTools.getBlogService().getConfigurationService().
+                    getCommentsEnabled(getRequest());
+        }
+
+        return commentsEnabled;
+    }
+
+    public Integer getNumberOfPostsPerPage() {
+        if (numberOfPostsPerPage == null) {
+            numberOfPostsPerPage = BlogTools.getBlogService().getConfigurationService().
+                    getNumberOfPostsPerPage(getRequest());
+        }
+
+        return numberOfPostsPerPage;
+    }
+
+    public Boolean getViewPostsOnSeparatePage() {
+        if (viewPostsOnSeparatePage == null) {
+            viewPostsOnSeparatePage = BlogTools.getBlogService().getConfigurationService().
+                    getViewPostsOnSeparatePage(getRequest());
+        }
+
+        return viewPostsOnSeparatePage;
+    }
+
+    public Boolean getViewAllPosts() {
+        if (viewAllPosts == null) {
+            viewAllPosts = BlogTools.getBlogService().getConfigurationService().
+                    getViewAllPosts(getRequest());
+        }
+
+        return viewAllPosts;
+    }
+
+    public BlogViewState getBlogViewState() {
+        if (blogViewState == null) {
+            blogViewState = getState().getBlogViewState(getBlogName());
+        }
+
+        return blogViewState;
+    }
+
+    public Boolean getPostsExpandable() {
+        if (postsExpandable == null) {
+            postsExpandable = Boolean.valueOf(!getViewAllPosts().booleanValue() ||
+                    getViewPostsOnSeparatePage().booleanValue());
+        }
+
+        return postsExpandable;
+    }
+
+    public Boolean getBlogModifiable() {
+        if (blogModifiable == null) {
+            blogModifiable = Boolean.valueOf(BlogTools.getBlogService().getStoreService().
+                    retrieveBlogModifiable(getBlogName()));
+        }
+
+        return blogModifiable;
+    }
+
+    private List getPostsWithNext() {
+        if (postsWithNext == null) {
+            postsWithNext = getBlogModel().getPosts(getFrom(), getTo()+1);
+        }
+
+        return postsWithNext;
+    }
+
+    public List getPosts() {
+        if (posts == null) {
+            List postsWithNext = getPostsWithNext();
+            posts = postsWithNext.subList(0, Math.min(postsWithNext.size(),
+                    getNumberOfPostsPerPage().intValue()));
+        }
+
+        return posts;
+    }
+
+    //
+
+    public boolean getHasPrevious() {
+        return getFrom() > 0;
+    }
+
+    public boolean getHasNext() {
+        return getPostsWithNext().size() > getTo() - getFrom();
+    }
+
+    public int getTo() {
+        return getFrom() + getNumberOfPostsPerPage().intValue();
+    }
+
+    public int getFrom() {
+        return getBlogViewState().getFrom();
+    }
+
+    private void setFrom(int from) {
+        BlogViewState bvs = getBlogViewState();
+        bvs.setFrom(from);
+        setSelectedPostTitleAsId(null);
+    }
+
+    public String getSelectedPostTitleAsId() {
+        return getBlogViewState().getSelectedPostTitleAsId();
+    }
+
+    private void setSelectedPostTitleAsId(String selectedPostId) {
+        getBlogViewState().setSelectedPostTitleAsId(selectedPostId);
+    }
+
+    private BlogPost postDoesNotExist(String id) {
+        UITools.addMessagePostDoesntExist(id);
+        return new EmptyBlogPost();
+    }
+
+    ModifiableBlogModel getModifiableModel() throws BlogModelDoesNotExistException {
+        return BlogTools.getBlogService().getStoreService().retrieveBlogModel(
+                getBlogName());
+    }
+
+    ModifiableBlogPost getModifiableSelectedPost()
+            throws BlogPostDoesNotExistException, BlogModelDoesNotExistException {        
+        return getModifiableModel().getModifiableBlogPostByTitleAsId(
+                getSelectedPostTitleAsId());
+    }
+
+    public BlogPost getSelectedPost() {
+        String titleAsId = getSelectedPostTitleAsId();
+
+        if (titleAsId == null) {
+            return postDoesNotExist(titleAsId);
+        }
+
+        // First looking in the specified range.
+        List posts = getPostsWithNext();
+        for (int i=0; i<posts.size(); i++) {
+            BlogPost current = (BlogPost) posts.get(i);
+            if (titleAsId.equals(current.getTitleAsId())) {
+                return current;
+            }
+        }
+
+        // If unsuccessfull, looking in all entries (we may find something if
+        // after selecting the entry, new entries have been added/ remvoed).
+        try {
+            return blogModel.getPostByTitleAsId(titleAsId);
+        } catch (BlogPostDoesNotExistException e) {
+            return postDoesNotExist(titleAsId);
+        }
+    }
+
+    // Actions
+
+    public String next() {
+        setFrom(getFrom() + getNumberOfPostsPerPage().intValue());
+        resetPosts();
+
+        return null;
+    }
+
+    public String previous() {
+        setFrom(Math.max(getFrom() - getNumberOfPostsPerPage().intValue(), 0));
+        resetPosts();
+
+        return null;
+    }
+
+    public String postView() {
+        postSelect();
+
+        if (getViewPostsOnSeparatePage().booleanValue()) {
+            return UITools.POST_VIEW;
+        } else {
+            return null;
+        }
+    }
+
+    public String blogView() {
+        postClear();
+
+        return UITools.BLOG_VIEW;
+    }
+
+    public String postEditFromBlogView() {
+        postSelect();
+        exitFromBlogView();
+
+        return UITools.POST_EDIT;
+    }
+
+    public String postEditFromPostView() {
+        exitFromPostView();
+
+        return UITools.POST_EDIT;
+    }
+
+    public String postNew() {
+        exitFromBlogView();
+
+        return UITools.POST_NEW;
+    }
+    
+    public String manageBlog() {
+        exitFromBlogView();
+
+        return UITools.BLOG_MAN;
+    }
+    
+    public String manageCategory() {
+        exitFromBlogView();
+
+        return UITools.CAT_MAN;
+    }
+
+    public String blogEditFromBlogView() {
+        exitFromBlogView();
+
+        return UITools.BLOG_EDIT;
+    }
+
+    public String blogEditFromPostView() {
+        exitFromPostView();
+
+        return UITools.BLOG_EDIT;
+    }
+
+    public String returnToDefault() {
+        getState().setSelectedBlogName(null);
+        resetBlogData();
+
+        return null;
+    }
+
+    // Helper methods
+
+    private void postSelect() {
+        BlogPost selected = (BlogPost) postsData.getRowData();
+        setSelectedPostTitleAsId(selected.getTitleAsId());
+    }
+
+    private void postClear() {
+        setSelectedPostTitleAsId(null);
+    }
+
+    private void exitFromBlogView() {
+        getState().setReturnTo(UITools.BLOG_VIEW);
+    }
+
+    private void exitFromPostView() {
+        getState().setReturnTo(UITools.POST_VIEW);
+    }
+
+    String getReturnTo() {
+        String viewName = state.getReturnTo();
+        if ((viewName == null) || (UITools.BLOG_VIEW.equals(viewName))) {
+            viewName = UITools.BLOG_VIEW;
+            postClear();
+        }
+
+        return viewName;
+    }
+}

Added: trunk-esial/blog-core/src/java/org/jboss/blog/ui/CategoryEdit.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/ui/CategoryEdit.java	                        (rev 0)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/ui/CategoryEdit.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -0,0 +1,179 @@
+package org.jboss.blog.ui;
+
+import org.jboss.blog.model.BlogModel;
+import org.jboss.blog.model.BlogModelDoesNotExistException;
+import org.jboss.blog.model.impl.EmptyBlogModel;
+import org.jboss.blog.tools.BlogTools;
+import org.jboss.blog.tools.UITools;
+import org.jboss.blog.service.store.model.ModifiableBlogModel;
+import org.jboss.blog.service.store.model.ModifiableBlogCategory;
+import org.jboss.blog.service.store.model.BlogModelAlreadyExistsException;
+import org.jboss.blog.BlogName;
+
+import java.util.Date;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class CategoryEdit {
+    private State state;
+    private BlogView blogView;
+
+    private boolean initDone;
+    
+    private Integer id = new Integer(1);
+    private String name;
+    private String description;
+
+    
+    public CategoryEdit() {
+        initDone = false;
+    }
+
+    public Integer getId(){
+   	 if (!initDone) { init(); }
+        return id;
+   }
+   
+   public void setId(Integer id){
+   	this.id = id;
+   }
+   
+    public String getName(){
+    	 if (!initDone) { init(); }
+         return name;
+    }
+    
+    public void setName(String name){
+    	this.name = name;
+    }
+    
+
+    public String getDescription() {
+        if (!initDone) { init(); }
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+
+    public State getState() {
+        return state;
+    }
+
+    public void setState(State state) {
+        this.state = state;
+    }
+
+    public BlogView getBlogView() {
+        return blogView;
+    }
+
+    public void setBlogView(BlogView blogView) {
+        this.blogView = blogView;
+    }
+
+    //
+
+    private void init() {
+    	
+        name = getState().getSelectedCategory();
+        ModifiableBlogCategory mbc = BlogTools.getBlogService().getStoreService().retrieveBlogCategory(name);
+        if(mbc==null){
+        	description="";
+        }
+        else{
+        	description = mbc.getDescription();
+        }
+        
+        initDone = true;
+    }
+
+    // Actions
+
+    public String save() {
+        try {
+            ModifiableBlogModel mbm = BlogTools.getBlogService().getStoreService().retrieveBlogModel(
+                    blogView.getBlogName());
+
+            boolean changed = false;
+            /*
+            if (!BlogTools.objectsEqual(description, mbm.getCategory().getDescription())) {
+                changed = true; mbm.getCategory().setDescription(description); }
+            if (!BlogTools.objectsEqual(name, mbm.getCategory().getName())) {
+                changed = true; mbm.getCategory().setName(name); }
+            */
+            if (changed) {
+                UITools.addInfoMessage("Blog category data saved.");
+            } else {
+                UITools.addInfoMessage("No blog category data was modified.");
+            }
+        } catch (BlogModelDoesNotExistException e) {
+            UITools.addMessageBlogDoesntExist(blogView.getBlogName());
+        }
+
+        return blogView.getReturnTo();
+    }
+
+    public String saveNew() {
+
+        try {
+        	BlogTools.getBlogService().getStoreService().addBlogCategory(name,description,blogView.getBlogName());
+        	/*
+        	ModifiableBlogCategory mbc = BlogTools.getBlogService().getStoreService().newBlogCategory();
+        	
+        	mbc.setId(id);
+        	mbc.setName(name);
+        	mbc.setDescription(getDescription());
+
+        	ModifiableBlogModel mbm = BlogTools.getBlogService().getStoreService().retrieveBlogModel(blogView.getBlogName()/*getState().getSelectedBlogName());
+
+        	mbm.addCategory(mbc);
+        	*/
+            UITools.addInfoMessage("New blog category created.");
+        } catch (IllegalArgumentException e) {
+            UITools.addErrorMessage("Illegal argument: " + getState().getSelectedBlogName() + ".");
+        }catch(BlogModelDoesNotExistException e){
+        	UITools.addErrorMessage("Blog Model does not exist" + getState().getSelectedBlogName() + ".");
+        }catch(Exception e){
+        	e.printStackTrace();
+        }
+
+        return null;//UITools.BLOG_VIEW;
+    }
+
+    public String delete() {
+        try {
+            String toDelete = getState().getSelectedCategory();
+
+            BlogTools.getBlogService().getStoreService().deleteBlogCategory(toDelete);
+
+            getState().setSelectedCategory(null);
+
+            UITools.addInfoMessage("Blog category deleted.");
+
+            // If this was the last category with this id, we must return to the admin panel.
+            if (BlogTools.getBlogService().getStoreService().retrieveAllCategories(getState().getSelectedBlogName()).size() == 0) {
+                return UITools.ADMIN_PANEL;
+            } else {
+                return UITools.ID_EDIT;
+            }
+        } catch(Throwable t) {
+            t.printStackTrace();
+            throw new RuntimeException(t);
+        }
+
+    }
+
+    public String backFromDelete(){
+        getState().setSelectedBlogName(null);
+
+        return UITools.ID_EDIT;
+    }
+
+    public String back() {
+        return UITools.CAT_MAN;
+    }
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/ui/IdEdit.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/ui/IdEdit.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/ui/IdEdit.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,175 +1,293 @@
-package org.jboss.blog.ui;
-
-import org.jboss.blog.tools.BlogTools;
-import org.jboss.blog.tools.UITools;
-import org.jboss.blog.BlogName;
-
-import javax.faces.model.SelectItem;
-import java.util.List;
-import java.util.Iterator;
-import java.util.ArrayList;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class IdEdit {
-    private State state;
-
-    private List rawIds;
-    private List ids;
-    private List categories;
-
-    private String newId;
-    private String existingId;
-
-    private String newCategory;
-    private String existingCategory;
-    private String deleteCategory;
-
-    private Boolean categoryExists;
-
-    public IdEdit() {
-
-    }
-
-    public State getState() {
-        return state;
-    }
-
-    public void setState(State state) {
-        this.state = state;
-    }
-
-    private void populateRawIds() {
-        if (rawIds == null) {
-            // TODO: filter with permissions of the logged in person
-            rawIds = BlogTools.getBlogService().getStoreService().retrieveAllBlogs();
-        }
-    }
-
-    public List getIds() {
-        if (ids == null) {
-            populateRawIds();
-            ids = new ArrayList();
-
-            for (Iterator iter = rawIds.iterator(); iter.hasNext();) {
-                BlogName next = (BlogName) iter.next();
-                ids.add(new SelectItem(next.getId(), next.getId()));
-            }
-        }
-
-        return ids;
-    }
-
-    public List getCategories() {
-        if (categories == null) {
-            // TODO: filter with permissions of the logged in person
-            List rawCategories = BlogTools.getBlogService().getStoreService()
-                    .retrieveAllCategories(new BlogName(getState().getSelectedBlogId(), null));
-            categories = new ArrayList();
-
-            for (Iterator iter = rawCategories.iterator(); iter.hasNext();) {
-                BlogName next = (BlogName) iter.next();
-                categories.add(new SelectItem(next.getCategory(), next.getCategory()));
-            }
-        }
-        
-        return categories;
-    }
-
-    public Boolean getCategoryExists() {
-        if (categoryExists == null) {
-            categoryExists = Boolean.valueOf(getCategories().size() > 0);
-        }
-
-        return categoryExists;
-    }
-
-    public String getNewId() {
-        return newId;
-    }
-
-    public void setNewId(String newId) {
-        this.newId = newId;
-    }
-
-    public String getExistingId() {
-        return existingId;
-    }
-
-    public void setExistingId(String existingId) {
-        this.existingId = existingId;
-    }
-
-    public String getNewCategory() {
-        return newCategory;
-    }
-
-    public void setNewCategory(String newCategory) {
-        this.newCategory = newCategory;
-    }
-
-    public String getExistingCategory() {
-        return existingCategory;
-    }
-
-    public void setExistingCategory(String existingCategory) {
-        this.existingCategory = existingCategory;
-    }
-
-    public String getDeleteCategory() {
-        return deleteCategory;
-    }
-
-    public void setDeleteCategory(String deleteCategory) {
-        this.deleteCategory = deleteCategory;
-    }
-
-    // Actions
-
-    public String editExisting() {
-        getState().setSelectedBlogId(getExistingId());
-
-        return UITools.ID_EDIT;
-    }
-
-    public String editNew() {
-        // Checking if the new id is not empty.
-        if (BlogTools.isEmpty(getNewId())) {
-            UITools.addErrorMessage("New blog id cannot be null.");
-            return null;
-        }
-
-        // And if it doesn't already exist.
-        populateRawIds();
-        if (rawIds.contains(new BlogName(getNewId(), null))) {
-            UITools.addErrorMessage("Blog id already exists.");
-            return null;
-        }
-
-        getState().setSelectedBlogId(getNewId());
-
-        return UITools.ID_EDIT;
-    }
-
-    public String newCategory() {
-        getState().setSelectedBlogName(new BlogName(getState().getSelectedBlogId(),
-                getNewCategory()));
-
-        return UITools.BLOG_NEW;
-    }
-
-    public String editCategory() {
-        getState().setSelectedBlogName(new BlogName(getState().getSelectedBlogId(),
-                getExistingCategory()));
-
-        return UITools.BLOG_VIEW;
-    }
-
-    public String deleteCategory() {
-        getState().setSelectedBlogName(new BlogName(getState().getSelectedBlogId(),
-                getDeleteCategory()));
-        
-        return UITools.BLOG_DEL;
-    }
-}
+package org.jboss.blog.ui;
+
+import org.jboss.blog.tools.BlogTools;
+import org.jboss.blog.tools.UITools;
+import org.jboss.blog.BlogName;
+import org.jboss.blog.model.BlogModel;
+import org.jboss.blog.model.BlogCategory;
+import org.jboss.blog.model.BlogModelDoesNotExistException;
+import org.jboss.blog.service.store.model.ModifiableBlogModel;
+import org.jboss.blog.service.store.hibernate.HBlogCategory;
+import javax.faces.model.SelectItem;
+import java.util.List;
+import java.util.Iterator;
+import java.util.ArrayList;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class IdEdit {
+    private State state;
+
+    private List rawIds;
+    private List ids;
+    private List groups;
+    private List categories;
+    private List categoryNames;
+
+    private String newId;
+    private String existingId;
+
+    private String newGroup;
+    private String existingGroup;
+    private String deleteGroup;
+    
+    private String newCategory;
+    private String existingCategory;
+    private String deleteCategory;
+
+    private Boolean groupExists;
+    private Boolean categoryExists;
+    
+    private BlogView blogView;
+
+    public IdEdit() {
+    	
+    }
+
+    public State getState() {
+        return state;
+    }
+
+    public void setState(State state) {
+        this.state = state;
+    }
+
+    private void populateRawIds() {
+        if (rawIds == null) {
+            // TODO: filter with permissions of the logged in person
+            rawIds = BlogTools.getBlogService().getStoreService().retrieveAllBlogs();
+        }
+    }
+
+    public List getIds() {
+        if (ids == null) {
+            populateRawIds();
+            ids = new ArrayList();
+
+            for (Iterator iter = rawIds.iterator(); iter.hasNext();) {
+                BlogName next = (BlogName) iter.next();
+                ids.add(new SelectItem(next.getId(), next.getId()));
+            }
+        }
+
+        return ids;
+    }
+
+    public List getCategories() {
+        if (categories == null) {
+            // TODO: filter with permissions of the logged in person
+
+        	//categories = BlogTools.getBlogService().getStoreService().retrieveAllCategories(new BlogName(getState().getSelectedBlogId(), null));
+        	try{
+        		categories = (BlogTools.getBlogService().getStoreService().retrieveAllCategories(blogView.getBlogName()));
+        		
+        	}catch(Exception e){
+        		e.printStackTrace();
+        	}
+        }
+        
+        return categories;
+    }
+    
+    public List getCategoryNames(){
+    	if (categoryNames == null) {
+            // TODO: filter with permissions of the logged in person
+
+        	//categories = BlogTools.getBlogService().getStoreService().retrieveAllCategories(new BlogName(getState().getSelectedBlogId(), null));
+        	try{
+        		List cat = getCategories();
+        		categoryNames = new ArrayList();
+        		String c;
+        		if(cat.size()<1)
+        			categoryNames.add(new SelectItem("ya rin","ya rin"));
+        		else{
+        	
+        			for (Iterator iter = cat.iterator(); iter.hasNext();) {
+                        HBlogCategory next = (HBlogCategory) iter.next();
+                        categoryNames.add(new SelectItem(next.getName(), next.getName()));
+                    }
+        		}
+        	}catch(Exception e){
+        		e.printStackTrace();
+        	}
+        }
+        
+        return categoryNames;
+    }
+    
+    public void setCategoryNames(List categoryNames){
+    	this.categoryNames = categoryNames;
+    }
+
+    public List getGroups(){
+    	List rawCategories = BlogTools.getBlogService().getStoreService()
+        .retrieveAllGroups(new BlogName(getState().getSelectedBlogId(), null));
+    	groups = new ArrayList();
+
+    	for (Iterator iter = rawCategories.iterator(); iter.hasNext();) {
+    			BlogName next = (BlogName) iter.next();
+    			groups.add(new SelectItem(next.getGroup(), next.getGroup()));
+    	}
+    	
+    	return groups;
+    }
+    
+    
+    public Boolean getGroupExists() {
+        if (groupExists == null) {
+            groupExists = Boolean.valueOf(getGroups().size() > 0);
+        }
+
+        return groupExists;
+    }
+    
+    public Boolean getCategoryExists() {
+        if (categoryExists == null) {
+        	categoryExists = Boolean.valueOf(getCategories().size() > 0);
+        }
+
+        return categoryExists;
+    }
+    
+
+    public String getNewId() {
+        return newId;
+    }
+
+    public void setNewId(String newId) {
+        this.newId = newId;
+    }
+
+    public String getExistingId() {
+        return existingId;
+    }
+
+    public void setExistingId(String existingId) {
+        this.existingId = existingId;
+    }
+
+    public String getNewGroup() {
+        return newGroup;
+    }
+
+    public void setNewGroup(String newGroup) {
+        this.newGroup = newGroup;
+    }
+    
+    public String getNewCategory() {
+        return newCategory;
+    }
+
+    public void setNewCategory(String newCategory) {
+        this.newCategory = newCategory;
+    }
+
+    public String getExistingGroup() {
+        return existingGroup;
+    }
+
+    public void setExistingGroup(String existingGroup) {
+        this.existingGroup = existingGroup;
+    }
+
+    public String getDeleteGroup() {
+        return deleteGroup;
+    }
+
+    public void setDeleteGroup(String deleteGroup) {
+        this.deleteGroup = deleteGroup;
+    }
+    
+    public String getExistingCategory() {
+        return existingCategory;
+    }
+
+    public void setExistingCategory(String existingCategory) {
+        this.existingCategory = existingCategory;
+    }
+
+    public String getDeleteCategory() {
+        return deleteCategory;
+    }
+
+    public void setDeleteCategory(String deleteCategory) {
+        this.deleteCategory = deleteCategory;
+    }
+    
+    public BlogView getBlogView(){
+    	return blogView;
+    }
+    
+    public void setBlogView(BlogView bv){
+    	blogView = bv;
+    }
+
+    // Actions
+
+    public String editExisting() {
+        getState().setSelectedBlogId(getExistingId());
+
+        return UITools.ID_EDIT;
+    }
+
+    public String editNew() {
+        // Checking if the new id is not empty.
+        if (BlogTools.isEmpty(getNewId())) {
+            UITools.addErrorMessage("New blog id cannot be null.");
+            return null;
+        }
+
+        // And if it doesn't already exist.
+        populateRawIds();
+        if (rawIds.contains(new BlogName(getNewId(), null))) {
+            UITools.addErrorMessage("Blog id already exists.");
+            return null;
+        }
+
+        getState().setSelectedBlogId(getNewId());
+
+        return UITools.ID_EDIT;
+    }
+
+    public String newGroup() {
+        getState().setSelectedBlogName(new BlogName(getState().getSelectedBlogId(),
+                getNewGroup()));
+
+        return UITools.BLOG_NEW;
+    }
+    
+    public String newCategory() {
+        getState().setSelectedCategory(getNewCategory());
+        
+        return UITools.CAT_NEW;
+    }
+
+    public String editGroup() {
+        getState().setSelectedBlogName(new BlogName(getState().getSelectedBlogId(),
+                getExistingGroup()));
+
+        return UITools.BLOG_VIEW;
+    }
+    
+    public String editCategory() {
+    	Integer catId = BlogTools.getBlogService().getStoreService().retrieveBlogCategoryId(getNewCategory());
+        getState().setSelectedCategoryId(catId);
+
+        return UITools.CAT_EDIT;
+    }
+
+    public String deleteGroup() {
+        getState().setSelectedBlogName(new BlogName(getState().getSelectedBlogId(),
+                getDeleteGroup()));
+        
+        return UITools.BLOG_DEL;
+    }
+    
+    public String deleteCategory() {
+        getState().setSelectedCategory(getDeleteCategory());
+        
+        return UITools.CAT_DEL;
+    }
+    
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/ui/PostEdit.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/ui/PostEdit.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/ui/PostEdit.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,292 +1,298 @@
-package org.jboss.blog.ui;
-
-import org.jboss.blog.model.BlogModelDoesNotExistException;
-import org.jboss.blog.model.BlogPost;
-import org.jboss.blog.model.BlogPostDoesNotExistException;
-import org.jboss.blog.tools.BlogTools;
-import org.jboss.blog.tools.UITools;
-import org.jboss.blog.service.store.model.ModifiableBlogModel;
-import org.jboss.blog.service.store.model.ModifiableBlogPost;
-import org.jboss.blog.BlogName;
-
-import java.util.*;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class PostEdit {
-    private State state;
-    private BlogView blogView;
-
-    private boolean initDone;
-
-    private String title;
-    private String description;
-    private String link;
-    private String guid;
-    private String commentLink;
-
-    private List blogs;
-
-    public PostEdit() {
-        initDone = false;
-    }
-
-    public String getTitle() {
-        if (!initDone) { init(); }
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getDescription() {
-        if (!initDone) { init(); }
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getLink() {
-        if (!initDone) { init(); }
-        return link;
-    }
-
-    public void setLink(String link) {
-        this.link = link;
-    }
-
-    public String getGuid() {
-        if (!initDone) { init(); }
-        return guid;
-    }
-
-    public String getCommentLink() {
-        if (!initDone) { init(); }
-        return commentLink;
-    }
-
-    public void setCommentLink(String commentLink) {
-        this.commentLink = commentLink;
-    }
-
-    public void setGuid(String guid) {
-        this.guid = guid;
-    }
-
-    public State getState() {
-        return state;
-    }
-
-    public void setState(State state) {
-        this.state = state;
-    }
-
-    public BlogView getBlogView() {
-        return blogView;
-    }
-
-    public void setBlogView(BlogView blogView) {
-        this.blogView = blogView;
-    }
-
-    public List getBlogs() {
-        if (blogs == null) {
-            List blogNames = BlogTools.getBlogService().getStoreService().retrieveAllCategories(
-                    blogView.getBlogName());
-            blogs = new ArrayList();
-
-            // Constructing a set of category names to which the post currently belongs.
-            Set currentCategories;
-            if (blogView.getSelectedPostTitleAsId() == null) {
-                currentCategories = new HashSet();
-                currentCategories.add(blogView.getBlogName().getCategory());
-            } else {
-                currentCategories = blogView.getSelectedPost().getCategories();
-            }
-
-            for (Iterator iter=blogNames.iterator(); iter.hasNext();) {
-                blogs.add(new SelectableBlogName((BlogName) iter.next(), currentCategories));
-            }
-        }
-
-        return blogs;
-    }
-
-    //
-
-    private void init() {
-        if (blogView.getSelectedPostTitleAsId() != null) {
-            BlogPost post = blogView.getSelectedPost();
-
-            title = post.getTitle();
-            description = post.getDescription();
-            link = post.getLink();
-            guid = post.getGuid();
-            commentLink = post.getCommentLink();
-        }
-
-        initDone = true;
-    }
-
-    // Actions
-
-    private Set getCurrentCategories() {
-        Set currentCategories = new HashSet();
-        if (blogView.getSelectedPostTitleAsId() == null) {
-            currentCategories.add(blogView.getBlogName());
-        } else {
-            String id = blogView.getBlogName().getId();
-            for (Iterator iter = blogView.getSelectedPost().getCategories().iterator();
-                 iter.hasNext();) {
-                currentCategories.add(new BlogName(id, (String) iter.next()));
-            }
-        }
-
-        return currentCategories;
-    }
-
-    private Set getSelectedCategories() {
-        List blogs = getBlogs();
-        Set selected = new HashSet();
-        for (Iterator iter = blogs.iterator(); iter.hasNext();) {
-            SelectableBlogName sbn = (SelectableBlogName) iter.next();
-            if (sbn.isSelected()) {
-                selected.add(sbn.getBlogName());
-            }
-        }
-
-        return selected;
-    }
-
-    public String saveNew() {
-        Set selectedCategories = getSelectedCategories();
-        if (selectedCategories.size() == 0) {
-            UITools.addErrorMessage("You must select at least one category.");
-            return null;
-        }
-
-        try {
-            ModifiableBlogPost post;
-
-            post = BlogTools.getBlogService().getStoreService().newBlogPost();
-
-            post.setAuthor(BlogTools.getBlogService().getStoreService().
-                    newBlogAuthor(getBlogView().getRequest()));
-
-            post.setTitle(title);
-            post.setLink(link);
-            post.setDescription(description);
-            post.setGuid(guid);
-            post.setCreated(new Date());
-            post.setCommentLink(commentLink);
-
-            // Adding the post to all selected categories.
-            // TODO permissions for category-level? Both here, save() and post_mod.xhtml
-            for (Iterator iter = selectedCategories.iterator(); iter.hasNext();) {
-                ModifiableBlogModel blog = BlogTools.getBlogService().getStoreService().retrieveBlogModel(
-                        (BlogName) iter.next());
-                blog.addPost(post);
-            }
-
-            UITools.addInfoMessage("New post saved.");
-        } catch (BlogModelDoesNotExistException e) {
-            UITools.addMessageBlogDoesntExist(blogView.getBlogName());
-        }
-
-        return UITools.BLOG_VIEW;
-    }
-
-    public String save() {
-        // Calculating the added & removed categories sets.
-        Set selectedCategories = getSelectedCategories();
-        if (selectedCategories.size() == 0) {
-            return UITools.POST_DEL;
-        }
-
-        Set currentCategories = getCurrentCategories();
-        
-        Set addedCategories = new HashSet(selectedCategories);
-        addedCategories.removeAll(currentCategories);
-
-        Set removedCategories = new HashSet(currentCategories);
-        removedCategories.removeAll(selectedCategories);
-
-        try {
-            ModifiableBlogModel model;
-            ModifiableBlogPost post = blogView.getModifiableSelectedPost();
-
-            boolean changed = false;
-
-            // Changing post properties.
-            if (!BlogTools.objectsEqual(title, post.getTitle())) {
-                changed = true; post.setTitle(title); }
-
-            if (!BlogTools.objectsEqual(link, post.getLink())) {
-                changed = true; post.setLink(link); }
-
-            if (!BlogTools.objectsEqual(description, post.getDescription())) {
-                changed = true; post.setDescription(description); }
-
-            if (!BlogTools.objectsEqual(guid, post.getGuid())) {
-                changed = true; post.setGuid(guid); }
-
-            if (!BlogTools.objectsEqual(commentLink, post.getCommentLink())) {
-                changed = true; post.setCommentLink(commentLink); }
-
-            // Adding & removing posts from categories.
-            for (Iterator iter = addedCategories.iterator(); iter.hasNext();) {
-                changed = true;
-                model = BlogTools.getBlogService().getStoreService().retrieveBlogModel(
-                        (BlogName) iter.next());
-                model.addPost(post);
-            }
-
-            for (Iterator iter = removedCategories.iterator(); iter.hasNext();) {
-                changed = true;
-                model = BlogTools.getBlogService().getStoreService().retrieveBlogModel(
-                        (BlogName) iter.next());
-                model.removePost(post);
-            }
-
-            if (changed) {
-                UITools.addInfoMessage("Post data saved.");
-            } else {
-                UITools.addInfoMessage("No post data was modified.");
-            }
-        } catch (BlogModelDoesNotExistException e) {
-            UITools.addMessageBlogDoesntExist(blogView.getBlogName());
-        } catch (BlogPostDoesNotExistException e) {
-            UITools.addMessagePostDoesntExist(blogView.getSelectedPostTitleAsId());
-        }
-
-        return blogView.getReturnTo();
-    }
-
-    public String delete() {
-        try {
-            ModifiableBlogModel model = BlogTools.getBlogService().getStoreService().retrieveBlogModel(
-                    blogView.getBlogName());
-            ModifiableBlogPost post = model.getModifiableBlogPostByTitleAsId(
-                    blogView.getSelectedPostTitleAsId());
-
-            BlogTools.getBlogService().getStoreService().deletePost(post);
-
-            UITools.addInfoMessage("Post deleted.");
-        } catch (BlogModelDoesNotExistException e) {
-            UITools.addMessageBlogDoesntExist(blogView.getBlogName());
-        } catch (BlogPostDoesNotExistException e) {
-            UITools.addMessagePostDoesntExist(blogView.getSelectedPostTitleAsId());
-        }
-
-        return UITools.BLOG_VIEW;
-
-    }
-
-    public String back() {
-        return blogView.getReturnTo();
-    }
+package org.jboss.blog.ui;
+
+import org.jboss.blog.model.BlogModelDoesNotExistException;
+import org.jboss.blog.model.BlogPost;
+import org.jboss.blog.model.BlogPostDoesNotExistException;
+import org.jboss.blog.tools.BlogTools;
+import org.jboss.blog.tools.UITools;
+import org.jboss.blog.service.store.model.ModifiableBlogModel;
+import org.jboss.blog.service.store.model.ModifiableBlogPost;
+import org.jboss.blog.BlogName;
+import org.jboss.blog.model.BlogModel;
+
+import java.util.*;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class PostEdit {
+    private State state;
+    private BlogView blogView;
+
+    private boolean initDone;
+
+    private String title;
+    private String description;
+    private String link;
+    private String guid;
+    private String commentLink;
+
+    private List blogs;
+
+    public PostEdit() {
+        initDone = false;
+    }
+
+    public String getTitle() {
+        if (!initDone) { init(); }
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getDescription() {
+        if (!initDone) { init(); }
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getLink() {
+        if (!initDone) { init(); }
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public String getGuid() {
+        if (!initDone) { init(); }
+        return guid;
+    }
+
+    public String getCommentLink() {
+        if (!initDone) { init(); }
+        return commentLink;
+    }
+
+    public void setCommentLink(String commentLink) {
+        this.commentLink = commentLink;
+    }
+
+    public void setGuid(String guid) {
+        this.guid = guid;
+    }
+
+    public State getState() {
+        return state;
+    }
+
+    public void setState(State state) {
+        this.state = state;
+    }
+
+    public BlogView getBlogView() {
+        return blogView;
+    }
+
+    public void setBlogView(BlogView blogView) {
+        this.blogView = blogView;
+    }
+
+    public List getBlogs() {
+        if (blogs == null) {
+            List blogNames = BlogTools.getBlogService().getStoreService().retrieveAllCategories(
+                    blogView.getBlogName());
+            blogs = new ArrayList();
+
+            // Constructing a set of category names to which the post currently belongs.
+            List currentCategories;
+            if (blogView.getSelectedPostTitleAsId() == null) {
+                currentCategories = new ArrayList();
+                try{
+                	BlogModel bm = BlogTools.getBlogService().getStoreService().retrieveBlogModel(blogView.getBlogName());
+                	currentCategories = bm.getCategories();
+                }catch(BlogModelDoesNotExistException e){
+                	UITools.addMessageBlogDoesntExist(blogView.getBlogName());
+                }
+            } else {
+                currentCategories = blogView.getSelectedPost().getCategories();
+            }
+
+            for (Iterator iter=blogNames.iterator(); iter.hasNext();) {
+                blogs.add(new SelectableBlogName((BlogName) iter.next(), currentCategories));
+            }
+        }
+
+        return blogs;
+    }
+
+    
+
+    private void init() {
+        if (blogView.getSelectedPostTitleAsId() != null) {
+            BlogPost post = blogView.getSelectedPost();
+
+            title = post.getTitle();
+            description = post.getDescription();
+            link = post.getLink();
+            guid = post.getGuid();
+            commentLink = post.getCommentLink();
+        }
+
+        initDone = true;
+    }
+
+    // Actions
+
+    private Set getCurrentCategories() {
+        Set currentCategories = new HashSet();
+        if (blogView.getSelectedPostTitleAsId() == null) {
+            currentCategories.add(blogView.getBlogName());
+        } else {
+            String id = blogView.getBlogName().getId();
+            for (Iterator iter = blogView.getSelectedPost().getCategories().iterator();
+                 iter.hasNext();) {
+                currentCategories.add(new BlogName(id, (String) iter.next()));
+            }
+        }
+
+        return currentCategories;
+    }
+
+    private Set getSelectedCategories() {
+        List blogs = getBlogs();
+        Set selected = new HashSet();
+        for (Iterator iter = blogs.iterator(); iter.hasNext();) {
+            SelectableBlogName sbn = (SelectableBlogName) iter.next();
+            if (sbn.isSelected()) {
+                selected.add(sbn.getBlogName());
+            }
+        }
+
+        return selected;
+    }
+
+    public String saveNew() {
+        Set selectedCategories = getSelectedCategories();
+        if (selectedCategories.size() == 0) {
+            UITools.addErrorMessage("You must select at least one category.");
+            return null;
+        }
+
+        try {
+            ModifiableBlogPost post;
+
+            post = BlogTools.getBlogService().getStoreService().newBlogPost();
+
+            post.setAuthor(BlogTools.getBlogService().getStoreService().
+                    newBlogAuthor(getBlogView().getRequest()));
+
+            post.setTitle(title);
+            post.setLink(link);
+            post.setDescription(description);
+            post.setGuid(guid);
+            post.setCreated(new Date());
+            post.setCommentLink(commentLink);
+
+            // Adding the post to all selected categories.
+            // TODO permissions for category-level? Both here, save() and post_mod.xhtml
+            for (Iterator iter = selectedCategories.iterator(); iter.hasNext();) {
+                ModifiableBlogModel blog = BlogTools.getBlogService().getStoreService().retrieveBlogModel(
+                        (BlogName) iter.next());
+                blog.addPost(post);
+            }
+
+            UITools.addInfoMessage("New post saved.");
+        } catch (BlogModelDoesNotExistException e) {
+            UITools.addMessageBlogDoesntExist(blogView.getBlogName());
+        }
+
+        return UITools.BLOG_VIEW;
+    }
+
+    public String save() {
+        // Calculating the added & removed categories sets.
+        Set selectedCategories = getSelectedCategories();
+        if (selectedCategories.size() == 0) {
+            return UITools.POST_DEL;
+        }
+
+        Set currentCategories = getCurrentCategories();
+        
+        Set addedCategories = new HashSet(selectedCategories);
+        addedCategories.removeAll(currentCategories);
+
+        Set removedCategories = new HashSet(currentCategories);
+        removedCategories.removeAll(selectedCategories);
+
+        try {
+            ModifiableBlogModel model;
+            ModifiableBlogPost post = blogView.getModifiableSelectedPost();
+
+            boolean changed = false;
+
+            // Changing post properties.
+            if (!BlogTools.objectsEqual(title, post.getTitle())) {
+                changed = true; post.setTitle(title); }
+
+            if (!BlogTools.objectsEqual(link, post.getLink())) {
+                changed = true; post.setLink(link); }
+
+            if (!BlogTools.objectsEqual(description, post.getDescription())) {
+                changed = true; post.setDescription(description); }
+
+            if (!BlogTools.objectsEqual(guid, post.getGuid())) {
+                changed = true; post.setGuid(guid); }
+
+            if (!BlogTools.objectsEqual(commentLink, post.getCommentLink())) {
+                changed = true; post.setCommentLink(commentLink); }
+
+            // Adding & removing posts from categories.
+            for (Iterator iter = addedCategories.iterator(); iter.hasNext();) {
+                changed = true;
+                model = BlogTools.getBlogService().getStoreService().retrieveBlogModel(
+                        (BlogName) iter.next());
+                model.addPost(post);
+            }
+
+            for (Iterator iter = removedCategories.iterator(); iter.hasNext();) {
+                changed = true;
+                model = BlogTools.getBlogService().getStoreService().retrieveBlogModel(
+                        (BlogName) iter.next());
+                model.removePost(post);
+            }
+
+            if (changed) {
+                UITools.addInfoMessage("Post data saved.");
+            } else {
+                UITools.addInfoMessage("No post data was modified.");
+            }
+        } catch (BlogModelDoesNotExistException e) {
+            UITools.addMessageBlogDoesntExist(blogView.getBlogName());
+        } catch (BlogPostDoesNotExistException e) {
+            UITools.addMessagePostDoesntExist(blogView.getSelectedPostTitleAsId());
+        }
+
+        return blogView.getReturnTo();
+    }
+
+    public String delete() {
+        try {
+            ModifiableBlogModel model = BlogTools.getBlogService().getStoreService().retrieveBlogModel(
+                    blogView.getBlogName());
+            ModifiableBlogPost post = model.getModifiableBlogPostByTitleAsId(
+                    blogView.getSelectedPostTitleAsId());
+
+            BlogTools.getBlogService().getStoreService().deletePost(post);
+
+            UITools.addInfoMessage("Post deleted.");
+        } catch (BlogModelDoesNotExistException e) {
+            UITools.addMessageBlogDoesntExist(blogView.getBlogName());
+        } catch (BlogPostDoesNotExistException e) {
+            UITools.addMessagePostDoesntExist(blogView.getSelectedPostTitleAsId());
+        }
+
+        return UITools.BLOG_VIEW;
+
+    }
+
+    public String back() {
+        return blogView.getReturnTo();
+    }
 }
\ No newline at end of file

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/ui/SelectableBlogName.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/ui/SelectableBlogName.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/ui/SelectableBlogName.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,35 +1,35 @@
-package org.jboss.blog.ui;
-
-import org.jboss.blog.BlogName;
-
-import java.util.Set;
-
-/**
- * 
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class SelectableBlogName {
-    private BlogName blogName;
-    private boolean selected;
-
-    public SelectableBlogName(BlogName blogName, Set currentCategories) {
-        this.blogName = blogName;
-        this.selected = currentCategories.contains(blogName.getCategory());
-    }
-
-    public String getCategory() {
-        return blogName.getCategory();
-    }
-
-    public boolean isSelected() {
-        return selected;
-    }
-
-    public void setSelected(boolean selected) {
-        this.selected = selected;
-    }
-
-    public BlogName getBlogName() {
-        return blogName;
-    }
-}
+package org.jboss.blog.ui;
+
+import org.jboss.blog.BlogName;
+
+import java.util.List;
+
+/**
+ * 
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class SelectableBlogName {
+    private BlogName blogName;
+    private boolean selected;
+
+    public SelectableBlogName(BlogName blogName, List currentCategories) {
+        this.blogName = blogName;
+        this.selected = currentCategories.contains(blogName.getGroup());
+    }
+
+    public String getGroup() {
+        return blogName.getGroup();
+    }
+
+    public boolean isSelected() {
+        return selected;
+    }
+
+    public void setSelected(boolean selected) {
+        this.selected = selected;
+    }
+
+    public BlogName getBlogName() {
+        return blogName;
+    }
+}

Modified: trunk-esial/blog-core/src/java/org/jboss/blog/ui/State.java
===================================================================
--- trunk-esial/blog-core/src/java/org/jboss/blog/ui/State.java	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/java/org/jboss/blog/ui/State.java	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,73 +1,97 @@
-package org.jboss.blog.ui;
-
-import org.jboss.blog.BlogName;
-
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * A session-scoped bean that remembers the current view state for each blog
- * that has been viewed, plus administration parameters.   
- * @author Adam Warski (adamw at aster.pl)
- */
-public class State {
-    // Map BlogName --> BlogViewState.
-    private Map blogViewStates;
-
-    private String selectedBlogId;
-    private BlogName selectedBlogName;
-
-    private String returnTo;
-
-    public State() {
-        blogViewStates = new HashMap();
-    }
-
-    public BlogViewState getBlogViewState(BlogName blogName) {
-        BlogViewState ret = (BlogViewState) blogViewStates.get(blogName);
-        if (ret == null) {
-            ret = new BlogViewState();
-            blogViewStates.put(blogName, ret);
-        }
-
-        return ret;
-    }
-
-    /**
-     * Gets the id of the selected blog.
-     * @return Id of the blog selected for editing.
-     */
-    public String getSelectedBlogId() {
-        return selectedBlogId;
-    }
-
-    public void setSelectedBlogId(String selectedBlogId) {
-        this.selectedBlogId = selectedBlogId;
-    }
-
-    /**
-     * Gets the name of the selected blog.
-     * @return Name of the blog selected for viewing/ editing.
-     */
-    public BlogName getSelectedBlogName() {
-        return selectedBlogName;
-    }
-
-    public void setSelectedBlogName(BlogName selectedBlogName) {
-        this.selectedBlogName = selectedBlogName;
-    }
-
-    /**
-     * Gets the return to value.
-     * @return A string naming a view, to which the user should be directed
-     * after completing operations in the current view. Only relevant when
-     * the new view name depends on the originating view.
-     */
-    public String getReturnTo() {
-        return returnTo;
-    }
-
-    public void setReturnTo(String returnTo) {
-        this.returnTo = returnTo;
-    }
-}
+package org.jboss.blog.ui;
+
+import org.jboss.blog.BlogName;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * A session-scoped bean that remembers the current view state for each blog
+ * that has been viewed, plus administration parameters.   
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class State {
+    // Map BlogName --> BlogViewState.
+    private Map blogViewStates;
+
+    private String selectedBlogId;
+    private BlogName selectedBlogName;
+    private String selectedCategory;
+    private Integer selectedCategoryId;
+
+    private String returnTo;
+
+    public State() {
+        blogViewStates = new HashMap();
+    }
+
+    public BlogViewState getBlogViewState(BlogName blogName) {
+        BlogViewState ret = (BlogViewState) blogViewStates.get(blogName);
+        if (ret == null) {
+            ret = new BlogViewState();
+            blogViewStates.put(blogName, ret);
+        }
+
+        return ret;
+    }
+
+    /**
+     * Gets the id of the selected blog.
+     * @return Id of the blog selected for editing.
+     */
+    public String getSelectedBlogId() {
+        return selectedBlogId;
+    }
+
+    public void setSelectedBlogId(String selectedBlogId) {
+        this.selectedBlogId = selectedBlogId;
+    }
+    
+    /**
+     * @return name of the category selected for editing.
+     */
+    public String getSelectedCategory() {
+        return selectedCategory;
+    }
+
+    public void setSelectedCategory(String selectedCategory) {
+        this.selectedCategory = selectedCategory;
+    }
+    
+    /**
+     * @return id of the category selected for editing.
+     */
+    public Integer getSelectedCategoryId() {
+        return selectedCategoryId;
+    }
+
+    public void setSelectedCategoryId(Integer selectedCategoryId) {
+        this.selectedCategoryId = selectedCategoryId;
+    }
+    
+    /**
+     * Gets the name of the selected blog.
+     * @return Name of the blog selected for viewing/ editing.
+     */
+    public BlogName getSelectedBlogName() {
+        return selectedBlogName;
+    }
+
+    public void setSelectedBlogName(BlogName selectedBlogName) {
+        this.selectedBlogName = selectedBlogName;
+    }
+
+    /**
+     * Gets the return to value.
+     * @return A string naming a view, to which the user should be directed
+     * after completing operations in the current view. Only relevant when
+     * the new view name depends on the originating view.
+     */
+    public String getReturnTo() {
+        return returnTo;
+    }
+
+    public void setReturnTo(String returnTo) {
+        this.returnTo = returnTo;
+    }
+}

Modified: trunk-esial/blog-core/src/web/WEB-INF/faces-config.xml
===================================================================
--- trunk-esial/blog-core/src/web/WEB-INF/faces-config.xml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/web/WEB-INF/faces-config.xml	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,244 +1,292 @@
-<?xml version='1.0' encoding='UTF-8'?>
-
-<!DOCTYPE faces-config PUBLIC
-        "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
-        "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
-
-<faces-config>
-    <application>
-        <!-- JBoss Portal-facelets integration -->
-        <property-resolver>org.jboss.portal.faces.el.DelegatingPropertyResolver</property-resolver>
-
-        <!--<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>-->
-        <view-handler>com.sun.facelets.FaceletPortletViewHandler</view-handler>
-        <locale-config>
-            <default-locale>en</default-locale>
-        </locale-config>
-        <action-listener>org.jboss.blog.service.permissions.acl.AuthorizationListener</action-listener>
-    </application>
-
-    <managed-bean>
-        <managed-bean-name>blogView</managed-bean-name>
-        <managed-bean-class>org.jboss.blog.ui.BlogView</managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-        <managed-property>
-            <property-name>state</property-name>
-            <value>#{state}</value>
-        </managed-property>
-    </managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>blogEdit</managed-bean-name>
-        <managed-bean-class>org.jboss.blog.ui.BlogEdit</managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-        <managed-property>
-            <property-name>state</property-name>
-            <value>#{state}</value>
-        </managed-property>
-        <managed-property>
-            <property-name>blogView</property-name>
-            <value>#{blogView}</value>
-        </managed-property>
-    </managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>postEdit</managed-bean-name>
-        <managed-bean-class>org.jboss.blog.ui.PostEdit</managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-        <managed-property>
-            <property-name>state</property-name>
-            <value>#{state}</value>
-        </managed-property>
-        <managed-property>
-            <property-name>blogView</property-name>
-            <value>#{blogView}</value>
-        </managed-property>
-    </managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>idEdit</managed-bean-name>
-        <managed-bean-class>org.jboss.blog.ui.IdEdit</managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-        <managed-property>
-            <property-name>state</property-name>
-            <value>#{state}</value>
-        </managed-property>
-    </managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>commentEdit</managed-bean-name>
-        <managed-bean-class>org.jboss.blog.ui.CommentEdit</managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-        <managed-property>
-            <property-name>blogView</property-name>
-            <value>#{blogView}</value>
-        </managed-property>
-    </managed-bean>
-
-    <managed-bean>
-        <managed-bean-name>state</managed-bean-name>
-        <managed-bean-class>org.jboss.blog.ui.State</managed-bean-class>
-        <managed-bean-scope>session</managed-bean-scope>
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!DOCTYPE faces-config PUBLIC
+        "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
+        "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
+
+<faces-config>
+    <application>
+        <!-- JBoss Portal-facelets integration -->
+        <property-resolver>org.jboss.portal.faces.el.DelegatingPropertyResolver</property-resolver>
+
+        <!--<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>-->
+        <view-handler>com.sun.facelets.FaceletPortletViewHandler</view-handler>
+        <locale-config>
+            <default-locale>en</default-locale>
+        </locale-config>
+        <action-listener>org.jboss.blog.service.permissions.acl.AuthorizationListener</action-listener>
+    </application>
+
+    <managed-bean>
+        <managed-bean-name>blogView</managed-bean-name>
+        <managed-bean-class>org.jboss.blog.ui.BlogView</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+        <managed-property>
+            <property-name>state</property-name>
+            <value>#{state}</value>
+        </managed-property>
     </managed-bean>
-    
-    <managed-bean>
-        <managed-bean-name>templ</managed-bean-name>
-        <managed-bean-class>org.jboss.blog.ui.templateManager</managed-bean-class>
-        <managed-bean-scope>request</managed-bean-scope>
-        <managed-property>
-            <property-name>blogView</property-name>
-            <value>#{blogView}</value>
-        </managed-property>
-    </managed-bean>
-
-    <!-- Post/ blog view -->
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>blog_view</from-outcome>
-            <to-view-id>/views/index.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-    
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>template</from-outcome>
-            <to-view-id>/tpl/test2.ftl</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>post_view</from-outcome>
-            <to-view-id>/views/post_view.xhtml</to-view-id>
-        </navigation-case>
+
+    <managed-bean>
+        <managed-bean-name>blogEdit</managed-bean-name>
+        <managed-bean-class>org.jboss.blog.ui.BlogEdit</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+        <managed-property>
+            <property-name>state</property-name>
+            <value>#{state}</value>
+        </managed-property>
+        <managed-property>
+            <property-name>blogView</property-name>
+            <value>#{blogView}</value>
+        </managed-property>
+    </managed-bean>
+
+    <managed-bean>
+        <managed-bean-name>postEdit</managed-bean-name>
+        <managed-bean-class>org.jboss.blog.ui.PostEdit</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+        <managed-property>
+            <property-name>state</property-name>
+            <value>#{state}</value>
+        </managed-property>
+        <managed-property>
+            <property-name>blogView</property-name>
+            <value>#{blogView}</value>
+        </managed-property>
+    </managed-bean>
+
+	<managed-bean>
+        <managed-bean-name>categoryEdit</managed-bean-name>
+        <managed-bean-class>org.jboss.blog.ui.CategoryEdit</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+        <managed-property>
+            <property-name>state</property-name>
+            <value>#{state}</value>
+        </managed-property>
+        <managed-property>
+            <property-name>blogView</property-name>
+            <value>#{blogView}</value>
+        </managed-property>
+    </managed-bean>
+	
+    <managed-bean>
+        <managed-bean-name>idEdit</managed-bean-name>
+        <managed-bean-class>org.jboss.blog.ui.IdEdit</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+        <managed-property>
+            <property-name>state</property-name>
+            <value>#{state}</value>
+        </managed-property>
+        <managed-property>
+            <property-name>blogView</property-name>
+            <value>#{blogView}</value>
+        </managed-property>
+    </managed-bean>
+
+    <managed-bean>
+        <managed-bean-name>commentEdit</managed-bean-name>
+        <managed-bean-class>org.jboss.blog.ui.CommentEdit</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+        <managed-property>
+            <property-name>blogView</property-name>
+            <value>#{blogView}</value>
+        </managed-property>
+    </managed-bean>
+
+    <managed-bean>
+        <managed-bean-name>state</managed-bean-name>
+        <managed-bean-class>org.jboss.blog.ui.State</managed-bean-class>
+        <managed-bean-scope>session</managed-bean-scope>
+    </managed-bean>
+    
+    <managed-bean>
+        <managed-bean-name>reco</managed-bean-name>
+        <managed-bean-class>org.jboss.blog.recommendBlog</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+    </managed-bean>
+    
+    <managed-bean>
+        <managed-bean-name>templ</managed-bean-name>
+        <managed-bean-class>org.jboss.blog.ui.templateManager</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+        <managed-property>
+            <property-name>blogView</property-name>
+            <value>#{blogView}</value>
+        </managed-property>
+    </managed-bean>
+
+    <!-- Post/ blog view -->
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>blog_view</from-outcome>
+            <to-view-id>/views/index.xhtml</to-view-id>
+        </navigation-case>
     </navigation-rule>
-        
+    
     <navigation-rule>
         <from-view-id>*</from-view-id>
         <navigation-case>
+            <from-outcome>template</from-outcome>
+            <to-view-id>/tpl/test2.ftl</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>post_view</from-outcome>
+            <to-view-id>/views/post_view.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+    
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>recommend</from-outcome>
+            <to-view-id>/views/recommend.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+    
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
             <from-outcome>default</from-outcome>
             <to-view-id>/views/index.xhtml</to-view-id>
         </navigation-case>
-    </navigation-rule>
-
-    <!-- Post edit/new/del -->
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>post_edit</from-outcome>
-            <to-view-id>/views/post_edit.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>post_new</from-outcome>
-            <to-view-id>/views/post_new.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>post_del</from-outcome>
-            <to-view-id>/views/post_del.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <!-- Comment del -->
-
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>comment_del</from-outcome>
-            <to-view-id>/views/comment_del.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <!-- Admin -->
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>admin_panel</from-outcome>
-            <to-view-id>/views/admin_panel.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>id_edit</from-outcome>
-            <to-view-id>/views/id_edit.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>admin_panel</from-outcome>
-            <to-view-id>/views/admin_panel.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <!-- Blog edit/new/del -->
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>blog_edit</from-outcome>
-            <to-view-id>/views/blog_edit.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>blog_new</from-outcome>
-            <to-view-id>/views/blog_new.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>blog_del</from-outcome>
-            <to-view-id>/views/blog_del.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>id_edit</from-outcome>
-            <to-view-id>/views/id_edit.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>admin_panel</from-outcome>
-            <to-view-id>/views/admin_panel.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-    
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>saveOK</from-outcome>
-            <to-view-id>/views/blog_view.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-    
-    <navigation-rule>
-        <from-view-id>*</from-view-id>
-        <navigation-case>
-            <from-outcome>toTemplatePostsList</from-outcome>
-            <to-view-id>/views/template_posts_list.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
-    
-</faces-config>
+    </navigation-rule>
+
+    <!-- Post edit/new/del -->
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>post_edit</from-outcome>
+            <to-view-id>/views/post_edit.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>post_new</from-outcome>
+            <to-view-id>/views/post_new.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+    
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>blog_manage</from-outcome>
+            <to-view-id>/views/blog_man.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+    
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>cat_manage</from-outcome>
+            <to-view-id>/views/cat_man.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+	<navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>cat_new</from-outcome>
+            <to-view-id>/views/cat_new.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+    
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>post_del</from-outcome>
+            <to-view-id>/views/post_del.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+    <!-- Comment del -->
+
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>comment_del</from-outcome>
+            <to-view-id>/views/comment_del.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+    <!-- Admin -->
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>admin_panel</from-outcome>
+            <to-view-id>/views/admin_panel.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>id_edit</from-outcome>
+            <to-view-id>/views/id_edit.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+    <!-- Blog edit/new/del -->
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>blog_edit</from-outcome>
+            <to-view-id>/views/blog_edit.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>blog_new</from-outcome>
+            <to-view-id>/views/blog_new.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>blog_del</from-outcome>
+            <to-view-id>/views/blog_del.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>id_edit</from-outcome>
+            <to-view-id>/views/id_edit.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>admin_panel</from-outcome>
+            <to-view-id>/views/admin_panel.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+    
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>saveOK</from-outcome>
+            <to-view-id>/views/blog_view.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+    
+    <navigation-rule>
+        <from-view-id>*</from-view-id>
+        <navigation-case>
+            <from-outcome>toTemplatePostsList</from-outcome>
+            <to-view-id>/views/template_posts_list.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+    
+</faces-config>

Modified: trunk-esial/blog-core/src/web/views/admin_panel.xhtml
===================================================================
--- trunk-esial/blog-core/src/web/views/admin_panel.xhtml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/web/views/admin_panel.xhtml	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,50 +1,50 @@
-<div  xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jstl/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:blog="http://www.jboss.org/portal/jbossblog">
-    <ui:composition template="common.xhtml">
-        <ui:param name="requiredPermission" value="acl://accessAdminModule" />
-        <ui:define name="content">
-            <h2>Blog Administration</h2>
-
-            <h:messages />
-
-            <h:form>
-            <h:panelGrid columns="3">
-                <blog:isAllowed fragment="acl://manageBlog">
-                    <h:panelGroup>
-                        Create and edit a new blog id
-                    </h:panelGroup>
-                    <h:panelGroup>
-                        <h:inputText value="#{idEdit.newId}"
-                                     maxlength="64" size="32" />
-                    </h:panelGroup>
-                    <h:panelGroup>
-                        <h:commandLink action="#{idEdit.editNew}" value="Go &gt;&gt;"/>
-                    </h:panelGroup>
-                </blog:isAllowed>
-
-                <h:panelGroup>
-                    Edit an existing blog id
-                </h:panelGroup>
-                <h:panelGroup>
-                    <h:selectOneMenu value="#{idEdit.existingId}">
-                        <f:selectItems value="#{idEdit.ids}" />
-                    </h:selectOneMenu>
-                </h:panelGroup>
-                <h:panelGroup>
-                    <h:commandLink action="#{idEdit.editExisting}" value="Go &gt;&gt;"/>
-                </h:panelGroup>
-
-                <h:panelGroup>
-                    <h:commandLink value="&lt;&lt; Back" action="blog_view" immediate="true"/>
-                </h:panelGroup>
-                <h:panelGroup></h:panelGroup>
-                <h:panelGroup></h:panelGroup>
-            </h:panelGrid>
-            </h:form>
-        </ui:define>
-    </ui:composition>
+<div  xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+    <ui:composition template="common.xhtml">
+        <ui:param name="requiredPermission" value="acl://accessAdminModule" />
+        <ui:define name="content">
+            <h2>Blog Administration</h2>
+
+            <h:messages />
+
+            <h:form>
+            <h:panelGrid columns="3">
+                <blog:isAllowed fragment="acl://manageBlog">
+                    <h:panelGroup>
+                        Create and edit a new blog id
+                    </h:panelGroup>
+                    <h:panelGroup>
+                        <h:inputText value="#{idEdit.newId}"
+                                     maxlength="64" size="32" />
+                    </h:panelGroup>
+                    <h:panelGroup>
+                        <h:commandLink action="#{idEdit.editNew}" value="Go &gt;&gt;"/>
+                    </h:panelGroup>
+                </blog:isAllowed>
+
+                <h:panelGroup>
+                    Edit an existing blog id
+                </h:panelGroup>
+                <h:panelGroup>
+                    <h:selectOneMenu value="#{idEdit.existingId}">
+                        <f:selectItems value="#{idEdit.ids}" />
+                    </h:selectOneMenu>
+                </h:panelGroup>
+                <h:panelGroup>
+                    <h:commandLink action="#{idEdit.editExisting}" value="Go &gt;&gt;"/>
+                </h:panelGroup>
+
+                <h:panelGroup>
+                    <h:commandLink value="&lt;&lt; Back" action="blog_view" immediate="true"/>
+                </h:panelGroup>
+                <h:panelGroup></h:panelGroup>
+                <h:panelGroup></h:panelGroup>
+            </h:panelGrid>
+            </h:form>
+        </ui:define>
+    </ui:composition>
 </div>
\ No newline at end of file

Modified: trunk-esial/blog-core/src/web/views/blog_del.xhtml
===================================================================
--- trunk-esial/blog-core/src/web/views/blog_del.xhtml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/web/views/blog_del.xhtml	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,26 +1,26 @@
-<div  xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jstl/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:blog="http://www.jboss.org/portal/jbossblog">
-    <ui:composition template="del_confirm.xhtml">
-        <ui:param name="requiredPermission" value="acl://manageBlog" />
-
-        <ui:define name="delname">
-            blog category
-        </ui:define>
-
-        <ui:define name="delsubject">
-            #{state.selectedBlogName}
-        </ui:define>
-
-        <ui:define name="cancellink">
-            <h:commandLink value="No" action="#{blogEdit.backFromDelete}" />
-        </ui:define>
-
-        <ui:define name="deletelink">
-            <h:commandLink value="Yes" action="#{blogEdit.delete}" />
-        </ui:define>
-    </ui:composition>
+<div  xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+    <ui:composition template="del_confirm.xhtml">
+        <ui:param name="requiredPermission" value="acl://manageBlog" />
+
+        <ui:define name="delname">
+            blog category
+        </ui:define>
+
+        <ui:define name="delsubject">
+            #{state.selectedBlogName}
+        </ui:define>
+
+        <ui:define name="cancellink">
+            <h:commandLink value="No" action="#{blogEdit.backFromDelete}" />
+        </ui:define>
+
+        <ui:define name="deletelink">
+            <h:commandLink value="Yes" action="#{blogEdit.delete}" />
+        </ui:define>
+    </ui:composition>
 </div>
\ No newline at end of file

Modified: trunk-esial/blog-core/src/web/views/blog_edit.xhtml
===================================================================
--- trunk-esial/blog-core/src/web/views/blog_edit.xhtml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/web/views/blog_edit.xhtml	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,22 +1,22 @@
-<div  xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jstl/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:blog="http://www.jboss.org/portal/jbossblog">
-    <ui:composition template="blog_mod.xhtml">
-        <ui:param name="requiredPermission" value="acl://manageCategory" />
-
-        <ui:define name="editheader">
-            Edit blog category
-        </ui:define>
-
-        <ui:define name="edittableheader">
-            Change blog category data:
-        </ui:define>
-
-        <ui:define name="savelink">
-            <h:commandLink value="Save" action="#{blogEdit.save}" />
-        </ui:define>
-    </ui:composition>
+<div  xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+    <ui:composition template="blog_mod.xhtml">
+        <ui:param name="requiredPermission" value="acl://manageCategory" />
+
+        <ui:define name="editheader">
+            Edit blog category
+        </ui:define>
+
+        <ui:define name="edittableheader">
+            Change blog category data:
+        </ui:define>
+
+        <ui:define name="savelink">
+            <h:commandLink value="Save" action="#{blogEdit.save}" />
+        </ui:define>
+    </ui:composition>
 </div>
\ No newline at end of file

Added: trunk-esial/blog-core/src/web/views/blog_man.xhtml
===================================================================
--- trunk-esial/blog-core/src/web/views/blog_man.xhtml	                        (rev 0)
+++ trunk-esial/blog-core/src/web/views/blog_man.xhtml	2007-03-22 16:37:07 UTC (rev 102)
@@ -0,0 +1,37 @@
+<div  xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+	<ui:composition template="common.xhtml">
+        <ui:param name="requiredPermission" value="acl://manageBlog" />
+        <ui:define name="content">
+            <h2>Blog Administration</h2>
+
+            <h:messages />
+
+            <h:panelGroup>
+             <h:panelGroup>
+        <blog:isAllowed fragment="acl://manageBlog" contextData="#{blogView.blogName}">
+            <h:form rendered="#{blogView.blogModifiable}">
+                <p class="admin-link"><h:commandLink value="Edit blog's data" action="#{blogView.blogEditFromBlogView}" /></p>
+            </h:form>
+        </blog:isAllowed>
+        </h:panelGroup>
+         <h:panelGroup>
+        <blog:isAllowed fragment="acl://manageCategory" contextData="#{blogView.blogName}">
+            <h:form rendered="#{blogView.blogModifiable}">
+                <p class="admin-link"><h:commandLink value="Manage Categories" action="#{blogView.manageCategory}" /></p>
+            </h:form>
+        </blog:isAllowed>
+        </h:panelGroup>
+        <blog:isAllowed fragment="acl://managePost" contextData="#{blogView.blogName}">
+            <h:form rendered="#{blogView.blogModifiable}">
+                <p class="admin-link"><h:commandLink value="Edit template" action="toTemplatePostsList" /></p>
+            </h:form>
+        </blog:isAllowed>
+        </h:panelGroup>
+        </ui:define>
+    </ui:composition>
+</div>
\ No newline at end of file

Modified: trunk-esial/blog-core/src/web/views/blog_new.xhtml
===================================================================
--- trunk-esial/blog-core/src/web/views/blog_new.xhtml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/web/views/blog_new.xhtml	2007-03-22 16:37:07 UTC (rev 102)
@@ -8,11 +8,11 @@
         <ui:param name="requiredPermission" value="acl://manageBlog" />
 
         <ui:define name="editheader">
-            New blog category
+            New blog
         </ui:define>
 
         <ui:define name="edittableheader">
-            Enter blog category data:
+            Enter blog data:
         </ui:define>
 
         <ui:define name="savelink">

Modified: trunk-esial/blog-core/src/web/views/blog_view.xhtml
===================================================================
--- trunk-esial/blog-core/src/web/views/blog_view.xhtml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/web/views/blog_view.xhtml	2007-03-22 16:37:07 UTC (rev 102)
@@ -17,11 +17,18 @@
             </h:form>
         </h:panelGroup>
     
-        <h:panelGrid columns="3">
+        <h:panelGrid columns="4">
         <h:panelGroup>
+        <blog:isAllowed fragment="acl://manageBlog" contextData="#{blogView.blogName}">
+            <h:form rendered="#{blogView.blogModifiable}">
+                <p class="admin-link"><h:commandLink value="Manage Blog" action="#{blogView.manageBlog}" /></p>
+            </h:form>
+        </blog:isAllowed>
+        </h:panelGroup>
+        <h:panelGroup>   
         <blog:isAllowed fragment="acl://managePost" contextData="#{blogView.blogName}">
             <h:form rendered="#{blogView.blogModifiable}">
-                <p class="admin-link"><h:commandLink value="New post" action="#{blogView.postNew}" /></p>
+                <p class="admin-link"><h:commandLink value=" | New post" action="#{blogView.postNew}" /></p>
             </h:form>
         </blog:isAllowed>
         </h:panelGroup>

Added: trunk-esial/blog-core/src/web/views/cat_man.xhtml
===================================================================
--- trunk-esial/blog-core/src/web/views/cat_man.xhtml	                        (rev 0)
+++ trunk-esial/blog-core/src/web/views/cat_man.xhtml	2007-03-22 16:37:07 UTC (rev 102)
@@ -0,0 +1,64 @@
+<div  xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+    <ui:composition template="common.xhtml">
+        <ui:param name="requiredPermission" value="acl://manageCategory" />
+        <ui:define name="content">
+            <h2>Editing Categories: #{state.selectedBlogId}</h2>
+
+            <h:messages />
+
+            <h:form>
+            <h:panelGrid columns="3">
+                <h:panelGroup>
+                    create a new category :
+                </h:panelGroup>
+                <h:panelGroup>
+                    <h:inputText value="#{idEdit.newCategory}"
+                                 maxlength="128" size="32" />
+                </h:panelGroup>
+                <h:panelGroup>
+                    <h:commandLink action="#{idEdit.newCategory}" value="Go &gt;&gt;"/>
+                </h:panelGroup>
+
+                <h:panelGroup> <!--rendered="#{idEdit.categoryExists}"-->
+                    Edit an existing category
+                </h:panelGroup>
+                <h:panelGroup> <!--rendered="#{idEdit.categoryExists}"-->
+                    <h:selectOneMenu value="#{idEdit.existingCategory}">
+                        <f:selectItems value="#{idEdit.categoryNames}" />
+                    </h:selectOneMenu>
+                </h:panelGroup>
+                <h:panelGroup> <!--rendered="#{idEdit.categoryExists}"-->
+                    <h:commandLink action="#{idEdit.editCategory}" value="Go &gt;&gt;"/>
+                </h:panelGroup>
+
+                <h:panelGroup rendered="#{idEdit.categoryExists}">
+                    Delete a category
+                </h:panelGroup>
+                <h:panelGroup rendered="#{idEdit.categoryExists}">
+                    <h:selectOneMenu value="#{idEdit.deleteCategory}">
+                        <f:selectItems value="#{idEdit.categories}" />
+                    </h:selectOneMenu>
+                </h:panelGroup>
+                <h:panelGroup rendered="#{idEdit.categoryExists}">
+                    <h:commandLink action="#{idEdit.deleteCategory}" value="Go &gt;&gt;"/>
+                </h:panelGroup>
+
+                <h:panelGroup>
+                    <h:commandLink value="&lt;&lt; Back" action="blog_manage" immediate="true"/>
+                </h:panelGroup>
+
+                <h:panelGroup>
+                </h:panelGroup>
+
+                <h:panelGroup>
+                </h:panelGroup>
+            </h:panelGrid>
+            </h:form>
+        </ui:define>
+    </ui:composition>
+</div>
\ No newline at end of file

Added: trunk-esial/blog-core/src/web/views/cat_mod.xhtml
===================================================================
--- trunk-esial/blog-core/src/web/views/cat_mod.xhtml	                        (rev 0)
+++ trunk-esial/blog-core/src/web/views/cat_mod.xhtml	2007-03-22 16:37:07 UTC (rev 102)
@@ -0,0 +1,39 @@
+<div  xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+    <ui:composition template="common.xhtml">
+        <ui:define name="content">
+            <h2><ui:insert name="editheader" /></h2>
+
+            <h:messages />
+
+            <h:form>
+                <h4><ui:insert name="edittableheader" /></h4>
+                <h:panelGrid columns="2">
+                    <h:panelGroup>Name: (*)</h:panelGroup>
+                    <h:panelGroup>
+                        <h:inputText value="#{categoryEdit.name}" required="true"
+                                maxlength="255" size="32" />
+                    </h:panelGroup>
+
+
+                    <h:panelGroup>Description:</h:panelGroup>
+                    <h:panelGroup>
+                        <h:inputTextarea value="#{categoryEdit.description}" rows="10" cols="40" />
+                    </h:panelGroup>
+                </h:panelGrid>
+
+                <p class="sidenote">
+                    Fields marked with (*) are required.
+                </p>
+
+                <h:commandLink value="&lt;&lt; Back" action="#{categoryEdit.back}" immediate="true"/>
+                &#160;
+                <ui:insert name="savelink" />
+            </h:form>
+        </ui:define>
+    </ui:composition>
+</div>
\ No newline at end of file

Added: trunk-esial/blog-core/src/web/views/cat_new.xhtml
===================================================================
--- trunk-esial/blog-core/src/web/views/cat_new.xhtml	                        (rev 0)
+++ trunk-esial/blog-core/src/web/views/cat_new.xhtml	2007-03-22 16:37:07 UTC (rev 102)
@@ -0,0 +1,22 @@
+<div  xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+    <ui:composition template="cat_mod.xhtml">
+        <ui:param name="requiredPermission" value="acl://manageCategory" />
+
+        <ui:define name="editheader">
+            New Category
+        </ui:define>
+
+        <ui:define name="edittableheader">
+            Enter category data:
+        </ui:define>
+
+        <ui:define name="savelink">
+            <h:commandLink value="Save" action="#{categoryEdit.saveNew}" />
+        </ui:define>
+    </ui:composition>
+</div>
\ No newline at end of file

Modified: trunk-esial/blog-core/src/web/views/id_edit.xhtml
===================================================================
--- trunk-esial/blog-core/src/web/views/id_edit.xhtml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/web/views/id_edit.xhtml	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,64 +1,64 @@
-<div  xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jstl/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:blog="http://www.jboss.org/portal/jbossblog">
-    <ui:composition template="common.xhtml">
-        <ui:param name="requiredPermission" value="acl://accessAdminModule" />
-        <ui:define name="content">
-            <h2>Editing id: #{state.selectedBlogId}</h2>
-
-            <h:messages />
-
-            <h:form>
-            <h:panelGrid columns="3">
-                <h:panelGroup>
-                    New category
-                </h:panelGroup>
-                <h:panelGroup>
-                    <h:inputText value="#{idEdit.newCategory}"
-                                 maxlength="128" size="32" />
-                </h:panelGroup>
-                <h:panelGroup>
-                    <h:commandLink action="#{idEdit.newCategory}" value="Go &gt;&gt;"/>
-                </h:panelGroup>
-
-                <h:panelGroup rendered="#{idEdit.categoryExists}">
-                    Edit an existing blog category
-                </h:panelGroup>
-                <h:panelGroup rendered="#{idEdit.categoryExists}">
-                    <h:selectOneMenu value="#{idEdit.existingCategory}">
-                        <f:selectItems value="#{idEdit.categories}" />
-                    </h:selectOneMenu>
-                </h:panelGroup>
-                <h:panelGroup rendered="#{idEdit.categoryExists}">
-                    <h:commandLink action="#{idEdit.editCategory}" value="Go &gt;&gt;"/>
-                </h:panelGroup>
-
-                <h:panelGroup rendered="#{idEdit.categoryExists}">
-                    Delete a blog category
-                </h:panelGroup>
-                <h:panelGroup rendered="#{idEdit.categoryExists}">
-                    <h:selectOneMenu value="#{idEdit.deleteCategory}">
-                        <f:selectItems value="#{idEdit.categories}" />
-                    </h:selectOneMenu>
-                </h:panelGroup>
-                <h:panelGroup rendered="#{idEdit.categoryExists}">
-                    <h:commandLink action="#{idEdit.deleteCategory}" value="Go &gt;&gt;"/>
-                </h:panelGroup>
-
-                <h:panelGroup>
-                    <h:commandLink value="&lt;&lt; Back" action="admin_panel" immediate="true"/>
-                </h:panelGroup>
-
-                <h:panelGroup>
-                </h:panelGroup>
-
-                <h:panelGroup>
-                </h:panelGroup>
-            </h:panelGrid>
-            </h:form>
-        </ui:define>
-    </ui:composition>
+<div  xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+    <ui:composition template="common.xhtml">
+        <ui:param name="requiredPermission" value="acl://accessAdminModule" />
+        <ui:define name="content">
+            <h2>Editing id: #{state.selectedBlogId}</h2>
+
+            <h:messages />
+
+            <h:form>
+            <h:panelGrid columns="3">
+                <h:panelGroup>
+                    Associated Group :
+                </h:panelGroup>
+                <h:panelGroup>
+                    <h:inputText value="#{idEdit.newGroup}"
+                                 maxlength="128" size="32" />
+                </h:panelGroup>
+                <h:panelGroup>
+                    <h:commandLink action="#{idEdit.newGroup}" value="Go &gt;&gt;"/>
+                </h:panelGroup>
+
+                <h:panelGroup rendered="#{idEdit.groupExists}">
+                    Edit an existing blog category
+                </h:panelGroup>
+                <h:panelGroup rendered="#{idEdit.groupExists}">
+                    <h:selectOneMenu value="#{idEdit.existingGroup}">
+                        <f:selectItems value="#{idEdit.groups}" />
+                    </h:selectOneMenu>
+                </h:panelGroup>
+                <h:panelGroup rendered="#{idEdit.groupExists}">
+                    <h:commandLink action="#{idEdit.editGroup}" value="Go &gt;&gt;"/>
+                </h:panelGroup>
+
+                <h:panelGroup rendered="#{idEdit.groupExists}">
+                    Delete a blog category
+                </h:panelGroup>
+                <h:panelGroup rendered="#{idEdit.groupExists}">
+                    <h:selectOneMenu value="#{idEdit.deleteGroup}">
+                        <f:selectItems value="#{idEdit.groups}" />
+                    </h:selectOneMenu>
+                </h:panelGroup>
+                <h:panelGroup rendered="#{idEdit.groupExists}">
+                    <h:commandLink action="#{idEdit.deleteGroup}" value="Go &gt;&gt;"/>
+                </h:panelGroup>
+
+                <h:panelGroup>
+                    <h:commandLink value="&lt;&lt; Back" action="admin_panel" immediate="true"/>
+                </h:panelGroup>
+
+                <h:panelGroup>
+                </h:panelGroup>
+
+                <h:panelGroup>
+                </h:panelGroup>
+            </h:panelGrid>
+            </h:form>
+        </ui:define>
+    </ui:composition>
 </div>
\ No newline at end of file

Modified: trunk-esial/blog-core/src/web/views/view.xhtml
===================================================================
--- trunk-esial/blog-core/src/web/views/view.xhtml	2007-03-22 09:21:31 UTC (rev 101)
+++ trunk-esial/blog-core/src/web/views/view.xhtml	2007-03-22 16:37:07 UTC (rev 102)
@@ -1,38 +1,38 @@
-<div  xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jstl/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:blog="http://www.jboss.org/portal/jbossblog">
-    <ui:composition template="common.xhtml">
-        <ui:param name="requiredPermission" value="acl://viewCategory" />
-        <ui:define name="content">
-            <h2>
-                <h:panelGroup>
-                #{blogView.blogModel.title}
-                </h:panelGroup>
-            </h2>
-            
-            <h:panelGroup rendered="#{not empty blogView.blogName.category}">
-                categories: #{blogView.blogName.category}
-            </h:panelGroup>
-			
-			<h:panelGroup rendered="#{not empty blogView.blogModel.title}">
-            <p class="blog-description">
-                Description: #{blogView.blogModel.description}
-            </p>
-            </h:panelGroup>
-
-
-            <h:panelGroup rendered="#{blogView.blogModifiable}">
-                <blog:isAllowed fragment="acl://manageCategory" contextData="#{blogView.blogName}">
-                    <h:form>
-                        <p class="admin-link"><ui:insert name="editlink" /></p>
-                    </h:form>
-                </blog:isAllowed>
-            </h:panelGroup>
-
-            <ui:insert name="viewmain" />
-        </ui:define>
-    </ui:composition>
+<div  xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+    <ui:composition template="common.xhtml">
+        <ui:param name="requiredPermission" value="acl://viewCategory" />
+        <ui:define name="content">
+            <h2>
+                <h:panelGroup>
+                #{blogView.blogModel.title}
+                </h:panelGroup>
+            </h2>
+            
+            <h:panelGroup rendered="#{not empty blogView.blogName.group}">
+                Group: #{blogView.blogName.group}
+            </h:panelGroup>
+			
+			<h:panelGroup rendered="#{not empty blogView.blogModel.title}">
+            <p class="blog-description">
+                Description: #{blogView.blogModel.description}
+            </p>
+            </h:panelGroup>
+
+
+            <!-- h:panelGroup rendered="#{blogView.blogModifiable}">
+                <blog:isAllowed fragment="acl://manageCategory" contextData="#{blogView.blogName}">
+                    <h:form>
+                        <p class="admin-link"><ui:insert name="editlink" /></p>
+                    </h:form>
+                </blog:isAllowed>
+            </h:panelGroup-->
+
+            <ui:insert name="viewmain" />
+        </ui:define>
+    </ui:composition>
 </div>
\ No newline at end of file




More information about the jboss-cvs-commits mailing list