[jboss-cvs] JBossBlog SVN: r73 - in trunk: blog-common and 15 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Mar 14 20:14:59 EDT 2007


Author: adamw
Date: 2007-03-14 20:14:59 -0400 (Wed, 14 Mar 2007)
New Revision: 73

Added:
   trunk/blog-common/src/java/org/jboss/blog/service/AbstractBlogService.java
   trunk/blog-hibernate/
   trunk/blog-hibernate/blog-hibernate.iml
   trunk/blog-hibernate/build.xml
   trunk/blog-hibernate/src/
   trunk/blog-hibernate/src/java/
   trunk/blog-hibernate/src/java/org/
   trunk/blog-hibernate/src/java/org/jboss/
   trunk/blog-hibernate/src/java/org/jboss/blog/
   trunk/blog-hibernate/src/java/org/jboss/blog/service/
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogComment.hbm.xml
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogComment.java
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.hbm.xml
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.java
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModelPost.hbm.xml
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModelPost.java
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.hbm.xml
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.java
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.hbm.xml
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.java
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HibernateBlogStoreService.java
   trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HibernateSessionFilter.java
Removed:
   trunk/blog-core/src/java/org/jboss/blog/service/AbstractBlogService.java
   trunk/blog-core/src/java/org/jboss/blog/service/store/hibernate/
   trunk/blog-core/src/java/org/jboss/blog/test/
   trunk/blog-core/src/java/org/jboss/security/
Modified:
   trunk/blog-common/blog-common.iml
   trunk/blog-core/blog-core.iml
   trunk/blog-core/build.xml
   trunk/build.xml
   trunk/jbossblog.ipr
   trunk/jbossblog.iws
Log:
Refactoring

Modified: trunk/blog-common/blog-common.iml
===================================================================
--- trunk/blog-common/blog-common.iml	2007-03-14 22:14:42 UTC (rev 72)
+++ trunk/blog-common/blog-common.iml	2007-03-15 00:14:59 UTC (rev 73)
@@ -26,6 +26,33 @@
         <SOURCES />
       </library>
     </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/jboss/jboss-j2ee.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/jboss/jboss-system.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/jboss/jboss-jmx.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
     <orderEntryProperties />
   </component>
 </module>

Copied: trunk/blog-common/src/java/org/jboss/blog/service/AbstractBlogService.java (from rev 69, trunk/blog-core/src/java/org/jboss/blog/service/AbstractBlogService.java)
===================================================================
--- trunk/blog-common/src/java/org/jboss/blog/service/AbstractBlogService.java	                        (rev 0)
+++ trunk/blog-common/src/java/org/jboss/blog/service/AbstractBlogService.java	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,10 @@
+package org.jboss.blog.service;
+
+import org.jboss.system.ServiceMBeanSupport;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public abstract class AbstractBlogService extends ServiceMBeanSupport {
+    protected static final String REQUEST_NULL_EX_MSG = "Request can't be null."; 
+}

Modified: trunk/blog-core/blog-core.iml
===================================================================
--- trunk/blog-core/blog-core.iml	2007-03-14 22:14:42 UTC (rev 72)
+++ trunk/blog-core/blog-core.iml	2007-03-15 00:14:59 UTC (rev 73)
@@ -75,10 +75,11 @@
       </library>
     </orderEntry>
     <orderEntry type="library" name="xdoclet" level="project" />
+    <orderEntry type="module" module-name="blog-common" />
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jboss-portal/portal-identity-lib.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/jboss-jaae/jboss-acl.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -105,23 +106,21 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jboss-jaae/jboss-acl.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/jboss-portal/portal-faces-lib.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
       </library>
     </orderEntry>
-    <orderEntry type="library" name="hibernate" level="project" />
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jboss-portal/portal-faces-lib.jar!/" />
+          <root url="jar://$MODULE_DIR$/../lib/jboss-portal/portal-identity-lib.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
       </library>
     </orderEntry>
-    <orderEntry type="module" module-name="blog-common" />
     <orderEntryProperties />
   </component>
   <component name="WebModuleBuildComponent">
@@ -179,6 +178,11 @@
       <url>jar://$MODULE_DIR$/../lib/jboss-portal/portal-identity-lib.jar!/</url>
     </containerElement>
     <containerElement type="library" level="module">
+      <attribute name="method" value="0" />
+      <attribute name="URI" value="/WEB-INF/lib/jboss-j2ee.jar" />
+      <url>jar://$MODULE_DIR$/../lib/jboss/jboss-j2ee.jar!/</url>
+    </containerElement>
+    <containerElement type="library" level="module">
       <attribute name="method" value="1" />
       <attribute name="URI" value="/WEB-INF/lib/jboss-jmx.jar" />
       <url>jar://$MODULE_DIR$/../lib/jboss/jboss-jmx.jar!/</url>
@@ -200,13 +204,14 @@
     </containerElement>
     <containerElement type="library" level="module">
       <attribute name="method" value="0" />
+      <attribute name="URI" value="/WEB-INF/lib/rome-0.9.jar" />
+      <url>jar://$MODULE_DIR$/../lib/rome/rome-0.9.jar!/</url>
+    </containerElement>
+    <containerElement type="library" level="module">
+      <attribute name="method" value="0" />
       <attribute name="URI" value="&lt;N/A&gt;" />
       <url>jar://$APPLICATION_HOME_DIR$/lib/javaee.jar!/</url>
     </containerElement>
-    <containerElement type="library" name="hibernate" level="project">
-      <attribute name="method" value="1" />
-      <attribute name="URI" value="/WEB-INF/lib" />
-    </containerElement>
     <containerElement type="library" name="jsf" level="project">
       <attribute name="method" value="0" />
       <attribute name="URI" value="&lt;N/A&gt;" />

Modified: trunk/blog-core/build.xml
===================================================================
--- trunk/blog-core/build.xml	2007-03-14 22:14:42 UTC (rev 72)
+++ trunk/blog-core/build.xml	2007-03-15 00:14:59 UTC (rev 73)
@@ -6,13 +6,12 @@
         <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="jboss.jaae.jars" />        
 
         <fileset refid="log4j.jar" />
     </path>
@@ -45,7 +44,7 @@
         <!-- Compiling the source -->
         <javac srcdir="${src.java}" destdir="${build}" target="1.4" source="1.4">
             <classpath refid="base.jars" />
-            <!-- Dependency on the blog-model classes -->
+            <!-- Dependency on the blog-common classes -->
             <classpath path="../blog-common/${build}" />
         </javac>
         <!-- Copying any xmls -->

Deleted: trunk/blog-core/src/java/org/jboss/blog/service/AbstractBlogService.java
===================================================================
--- trunk/blog-core/src/java/org/jboss/blog/service/AbstractBlogService.java	2007-03-14 22:14:42 UTC (rev 72)
+++ trunk/blog-core/src/java/org/jboss/blog/service/AbstractBlogService.java	2007-03-15 00:14:59 UTC (rev 73)
@@ -1,10 +0,0 @@
-package org.jboss.blog.service;
-
-import org.jboss.system.ServiceMBeanSupport;
-
-/**
- * @author Adam Warski (adamw at aster.pl)
- */
-public abstract class AbstractBlogService extends ServiceMBeanSupport {
-    protected static final String REQUEST_NULL_EX_MSG = "Request can't be null."; 
-}


Property changes on: trunk/blog-hibernate
___________________________________________________________________
Name: svn:ignore
   + build
targe


Added: trunk/blog-hibernate/blog-hibernate.iml
===================================================================
--- trunk/blog-hibernate/blog-hibernate.iml	                        (rev 0)
+++ trunk/blog-hibernate/blog-hibernate.iml	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/java" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="hibernate" level="project" />
+    <orderEntry type="module" module-name="blog-common" />
+    <orderEntryProperties />
+  </component>
+</module>
+

Added: trunk/blog-hibernate/build.xml
===================================================================
--- trunk/blog-hibernate/build.xml	                        (rev 0)
+++ trunk/blog-hibernate/build.xml	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,41 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<project name="JBoss Blog Hibernate">
+    <!-- Classpath for building the application: includes all dependency jars -->
+    <path id="base.jars">
+        <fileset refid="hibernate.jars" />
+        <fileset refid="jboss.jars" />
+        <fileset refid="servlet.jars" />
+        <fileset refid="log4j.jar" />
+        <fileset refid="jboss.portal.jars" />
+    </path>
+
+    <!-- BUILD TARGETS -->
+
+    <target name="init">
+
+    </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" />
+            <!-- Dependency on the blog-common classes -->
+            <classpath path="../blog-common/${build}" />
+            <!-- Dependency on the blog-core classes -->
+            <classpath path="../blog-core/${build}" />
+        </javac>
+    </target>
+
+    <target name="dist" depends="build">
+        <mkdir dir="${dist.lib.dir}" />
+
+        <!-- Creating the jar with the classes -->
+        <jar destfile="${dist.lib.dir}/jboss-blog-hibernate.jar" basedir="${build}" />
+    </target>
+
+    <target name="clean">
+        <delete dir="${build}" />
+    </target>
+</project>

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogComment.hbm.xml
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogComment.hbm.xml	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogComment.hbm.xml	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,26 @@
+<?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="HBlogComment"
+           table="BLOG_COMMENTS">
+        <id name="id" column="COMMENT_ID">
+            <generator class="native" />
+        </id>
+
+        <many-to-one name="post" column="POST_ID" not-null="true" class="HBlogPost" cascade="none" />
+
+        <many-to-one name="author" column="AUTHOR" not-null="true" class="HPortalBlogAuthor" cascade="none" />
+
+        <property name="created" column="CREATED" not-null="true" type="timestamp"
+                  update="false" />
+
+        <property name="title" column="TITLE" not-null="true" />
+
+        <property name="link" column="LINK" />
+        
+        <property name="description" column="DESCRIPTION" type="text" />
+    </class>
+</hibernate-mapping>
\ No newline at end of file

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogComment.java
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogComment.java	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogComment.java	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,90 @@
+package org.jboss.blog.service.store.hibernate;
+
+import org.jboss.blog.model.AbstractBlogComment;
+import org.jboss.blog.model.BlogAuthor;
+import org.jboss.blog.service.store.model.ModifiableBlogComment;
+
+import java.util.Date;
+import java.io.Serializable;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class HBlogComment extends AbstractBlogComment implements ModifiableBlogComment {
+    private Integer id;
+    private BlogAuthor author;
+    private String title;
+    private String description;
+    private Date created;
+    private String link;
+    private HBlogPost post;
+
+    public HBlogComment() {
+
+    }
+
+    public Serializable getCommentId() {
+        return getId();
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public BlogAuthor getAuthor() {
+        getStoreService().castAndAssertBlogAuthor(author).setStoreService(getStoreService());
+        return author;
+    }
+
+    public HBlogPost getPost() {
+        return post;
+    }
+
+    public void setPost(HBlogPost post) {
+        this.post = post;
+    }
+
+    public void setAuthor(BlogAuthor author) {
+        this.author = author;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public Date getCreated() {
+        return created;
+    }
+
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public HibernateBlogStoreService getStoreService() {
+        return getPost().getStoreService();
+    }
+}

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.hbm.xml
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.hbm.xml	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.hbm.xml	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,36 @@
+<?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="HBlogModel"
+           table="BLOG_MODELS">
+        <id name="id" column="BLOG_ID">
+            <generator class="native" />
+        </id>
+
+        <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" />
+            </component>
+        </natural-id>
+
+        <many-to-one name="author" column="AUTHOR" not-null="true" class="HPortalBlogAuthor" />
+
+        <property name="created" column="CREATED" not-null="true" type="timestamp"
+                  update="false" />
+
+        <property name="title" column="TITLE" not-null="true" />
+
+        <property name="link" column="LINK" />
+
+        <property name="description" column="DESCRIPTION" type="text" />
+
+        <bag name="modelPosts" inverse="true">
+            <key column="BLOG_ID" not-null="true" />
+            <one-to-many class="HBlogModelPost" /> 
+        </bag>
+    </class>
+</hibernate-mapping>
\ No newline at end of file

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.java
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.java	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.java	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,194 @@
+package org.jboss.blog.service.store.hibernate;
+
+import org.jboss.blog.service.store.model.ModifiableBlogModel;
+import org.jboss.blog.service.store.model.ModifiableBlogPost;
+import org.jboss.blog.service.store.model.BlogModelAlreadyExistsException;
+import org.jboss.blog.model.AbstractBlogModel;
+import org.jboss.blog.model.BlogPost;
+import org.jboss.blog.model.BlogPostDoesNotExistException;
+import org.jboss.blog.model.BlogAuthor;
+import org.jboss.blog.BlogName;
+import org.jboss.blog.tools.BasicTools;
+
+import java.util.*;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class HBlogModel extends AbstractBlogModel implements ModifiableBlogModel {
+    private Integer id;
+    private BlogName blogName;
+    private BlogAuthor author;
+    private String title;
+    private String description;
+    private String link;
+    private Date created;
+
+    private List modelPosts;
+
+    private Set categories;
+    private List posts;
+
+    private HibernateBlogStoreService storeService;
+
+    public HBlogModel() {
+        categories = BasicTools.emptySet();
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public BlogName getBlogName() {
+        return blogName;
+    }
+
+    public void setBlogName(BlogName blogName) {
+        this.blogName = blogName;
+        if (blogName.getCategory() == null) {
+            categories = BasicTools.emptySet();
+        } else {
+            categories = Collections.singleton(blogName.getCategory());
+        }
+    }
+
+    public BlogAuthor getAuthor() {
+        getStoreService().castAndAssertBlogAuthor(author).setStoreService(getStoreService());
+        return author;
+    }
+
+    public void setAuthor(BlogAuthor author) {
+        this.author = author;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public Date getCreated() {
+        return created;
+    }
+
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+
+    public String getCategory() {
+        return getBlogName().getCategory();
+    }
+
+    public void setCategory(String category)
+            throws IllegalArgumentException, BlogModelAlreadyExistsException {
+        if (BasicTools.isEmpty(category)) {
+            throw new IllegalArgumentException("Category 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));
+
+        getBlogName().setCategory(category);
+    }
+
+    //
+
+    public List getModelPosts() {
+        return modelPosts;
+    }
+
+    public void setModelPosts(List posts) {
+        this.modelPosts = posts;
+    }
+
+    public HibernateBlogStoreService getStoreService() {
+        return storeService;
+    }
+
+    public void setStoreService(HibernateBlogStoreService storeService) {
+        this.storeService = storeService;
+    }
+
+    //
+
+    public Set getCategories() {
+        return categories;
+    }
+
+    public List getPosts() {
+        // Creating a list of posts from the a list of HBlogModelPost.
+        if (posts == null) {
+            posts = new ArrayList();
+            modelPosts = getModelPosts();
+            HibernateBlogStoreService storeService = getStoreService();
+
+            for (Iterator iter = modelPosts.iterator(); iter.hasNext();) {
+                HBlogPost post = ((HBlogModelPost) iter.next()).getPost();
+                post.setStoreService(storeService);
+                posts.add(post);
+            }
+
+            Collections.sort(posts);
+        }
+
+        return Collections.unmodifiableList(posts);
+    }
+
+    //
+
+    public List getPosts(int from, int to) {
+        return storeService.getPosts(this, from, to);
+    }
+
+    public ModifiableBlogPost getModifiableBlogPostByTitleAsId(String titleAsId)
+            throws BlogPostDoesNotExistException {
+        HBlogPost p = storeService.getPostByTitleAsId(this, titleAsId);
+        if (p == null) {
+            throw new BlogPostDoesNotExistException(titleAsId);
+        }
+
+        return p;
+    }
+
+    public BlogPost getPostByTitleAsId(String titleAsId)
+            throws BlogPostDoesNotExistException {
+        return getModifiableBlogPostByTitleAsId(titleAsId);
+    }
+
+    public void addPost(ModifiableBlogPost post) throws IllegalArgumentException {
+        HibernateBlogStoreService storeService = getStoreService();
+        HBlogPost hpost = storeService.castAndAssertBlogPost(post);
+
+        storeService.addPost(this, hpost);
+    }
+
+    public void removePost(ModifiableBlogPost post) throws IllegalArgumentException {
+        HibernateBlogStoreService storeService = getStoreService();
+        HBlogPost hpost = storeService.castAndAssertBlogPost(post);
+
+        storeService.removePost(this, hpost);
+    }
+}
\ No newline at end of file

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModelPost.hbm.xml
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModelPost.hbm.xml	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModelPost.hbm.xml	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,18 @@
+<?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="HBlogModelPost"
+           table="BLOG_MODELS_POSTS">
+        <id name="id" column="BLOG_MODEL_ID">
+            <generator class="native" />
+        </id>
+        
+        <natural-id>
+            <many-to-one name="model" class="HBlogModel" column="BLOG_ID" cascade="none" />
+            <many-to-one name="post" class="HBlogPost" column="POST_ID" cascade="persist,merge,save-update" />
+        </natural-id>
+    </class>
+</hibernate-mapping>
\ No newline at end of file

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModelPost.java
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModelPost.java	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogModelPost.java	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,64 @@
+package org.jboss.blog.service.store.hibernate;
+
+import org.jboss.blog.tools.BasicTools;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class HBlogModelPost {
+    private Integer id;
+    private HBlogModel model;
+    private HBlogPost post;
+
+    public HBlogModelPost() {
+        
+    }
+
+    public HBlogModelPost(HBlogModel model, HBlogPost post) {
+        this.model = model;
+        this.post = post;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public HBlogModel getModel() {
+        return model;
+    }
+
+    public void setModel(HBlogModel model) {
+        this.model = model;
+    }
+
+    public HBlogPost getPost() {
+        return post;
+    }
+
+    public void setPost(HBlogPost post) {
+        this.post = post;
+    }
+
+    private int hashCode(Integer i) {
+        return i == null ? 0 : i.hashCode();
+    }
+
+    public int hashCode() {
+        return hashCode(model.getId()) + hashCode(post.getId());
+    }
+
+    public boolean equals(Object obj) {
+        if (!(obj instanceof HBlogModelPost)) {
+            return false;
+        }
+
+        HBlogModelPost hbmp = (HBlogModelPost) obj;
+
+        return BasicTools.objectsEqual(hbmp.getModel().getId(), getModel().getId()) &&
+                BasicTools.objectsEqual(hbmp.getPost().getId(), getPost().getId());
+    }
+}

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.hbm.xml
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.hbm.xml	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.hbm.xml	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,40 @@
+<?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="HBlogPost"
+           table="BLOG_POSTS">
+        <id name="id" column="POST_ID">
+            <generator class="native" />
+        </id>
+
+        <many-to-one name="author" column="AUTHOR" not-null="true" class="HPortalBlogAuthor" />
+
+        <property name="created" column="CREATED" not-null="true" type="timestamp"
+                  update="false" />
+
+        <property name="title" column="TITLE" not-null="true" />
+
+        <property name="titleAsId" column="TITLE_AS_ID" not-null="true" index="titleAsIdIndex" />
+
+        <property name="guid" column="GUID" not-null="true" />
+
+        <property name="link" column="LINK" />
+
+        <property name="commentLink" column="COMMENT_LINK" />
+
+        <property name="description" column="DESCRIPTION" type="text" />
+
+        <bag name="modelPosts" inverse="true">
+            <key column="POST_ID" not-null="true" />
+            <one-to-many class="HBlogModelPost" />
+        </bag>
+
+        <bag name="comments" order-by="created desc" inverse="true" cascade="all">
+            <key column="POST_ID" not-null="true" />
+            <one-to-many class="HBlogComment" />
+        </bag>
+    </class>
+</hibernate-mapping>
\ No newline at end of file

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.java
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.java	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.java	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,171 @@
+package org.jboss.blog.service.store.hibernate;
+
+import org.jboss.blog.service.store.model.ModifiableBlogPost;
+import org.jboss.blog.service.store.model.ModifiableBlogComment;
+import org.jboss.blog.model.AbstractBlogPost;
+import org.jboss.blog.model.BlogComment;
+import org.jboss.blog.model.BlogCommentDoesNotExistException;
+import org.jboss.blog.model.BlogAuthor;
+import org.jboss.blog.tools.BasicTools;
+
+import java.util.*;
+import java.io.Serializable;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class HBlogPost extends AbstractBlogPost implements ModifiableBlogPost {
+    private Integer id;
+    private BlogAuthor author;
+    private String title;
+    private String description;
+    private String link;
+    private String guid;
+    private String commentLink;
+    private String titleAsId;
+    private Date created;
+
+    private List comments;
+    private List modelPosts;
+    private Set categories;
+
+    private HibernateBlogStoreService storeService;
+
+    public HBlogPost() {
+
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public BlogAuthor getAuthor() {
+        getStoreService().castAndAssertBlogAuthor(author).setStoreService(getStoreService());
+        return author;
+    }
+
+    public void setAuthor(BlogAuthor author) {
+        this.author = author;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+
+        String newTitleAsId = BasicTools.convertToId(title);
+        if (!BasicTools.objectsEqual(titleAsId, newTitleAsId)) {
+            setTitleAsId(newTitleAsId);
+        }
+    }
+
+    public String getTitleAsId() {
+        return titleAsId;
+    }
+
+    public void setTitleAsId(String titleAsId) {
+        this.titleAsId = titleAsId;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public String getGuid() {
+        return guid;
+    }
+
+    public void setGuid(String guid) {
+        this.guid = guid;
+    }
+
+    public String getCommentLink() {
+        return commentLink;
+    }
+
+    public void setCommentLink(String commentLink) {
+        this.commentLink = commentLink;
+    }
+
+    public Date getCreated() {
+        return created;
+    }
+
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+
+    public List getComments() {
+        return comments;
+    }
+
+    public void setComments(List comments) {
+        this.comments = comments;
+    }
+
+    public List getModelPosts() {
+        return modelPosts;
+    }
+
+    public void setModelPosts(List modelPosts) {
+        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 HibernateBlogStoreService getStoreService() {
+        return storeService;
+    }
+
+    public void setStoreService(HibernateBlogStoreService storeService) {
+        this.storeService = storeService;
+    }
+
+    public void addComment(ModifiableBlogComment comment) throws IllegalArgumentException {
+        HibernateBlogStoreService storeService = getStoreService();
+        HBlogComment hcomment = storeService.castAndAssertBlogComment(comment);
+
+        storeService.addComment(this, hcomment);
+    }
+
+    public ModifiableBlogComment getModifiableBlogComment(BlogComment comment)
+            throws BlogCommentDoesNotExistException {
+        if (!(comment instanceof HBlogComment)) {
+            throw new BlogCommentDoesNotExistException(comment.getTitle());
+        }
+
+        return (ModifiableBlogComment) comment;
+    }
+
+    public ModifiableBlogComment getModifiableBlogComment(Serializable id)
+            throws BlogCommentDoesNotExistException {
+        return getStoreService().getComment(id);
+    }
+}

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.hbm.xml
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.hbm.xml	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.hbm.xml	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,15 @@
+<?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="HPortalBlogAuthor"
+           table="BLOG_PORTAL_AUTHORS">
+        <id name="id" column="AUTHOR_ID">
+            <generator class="native" />
+        </id>
+
+        <property name="jbp_id" column="JBP_ID" not-null="true" />
+    </class>
+</hibernate-mapping>
\ No newline at end of file

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.java
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.java	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.java	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,84 @@
+package org.jboss.blog.service.store.hibernate;
+
+import org.jboss.blog.model.AbstractBlogAuthor;
+import org.jboss.blog.model.BlogAuthor;
+import org.jboss.blog.service.permissions.model.PortalUserBlogAuthor;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class HPortalBlogAuthor extends AbstractBlogAuthor {
+    private Integer id;
+    private Long jbp_id;
+
+    private boolean initDone;
+    private PortalUserBlogAuthor author;
+    private HibernateBlogStoreService storeService;
+
+    private void initUser() {
+        BlogAuthor blogAuthor = getStoreService().getPermissionsService().retrieveBlogAuthor(jbp_id);
+
+        if (blogAuthor instanceof PortalUserBlogAuthor) {
+            author = (PortalUserBlogAuthor) blogAuthor;
+        } else {
+            author = null;
+        }
+
+        initDone = true;
+    }
+
+    public String getUserName() {
+        if (!initDone) { initUser(); }
+        if (author != null) {
+            return author.getUserName();
+        } else {
+            return "";
+        }
+    }
+
+    public String getGivenName() {
+        if (!initDone) { initUser(); }
+        if (author != null) {
+            return author.getGivenName();
+        } else {
+            return "";
+        }
+    }
+
+    public String getFamilyName() {
+        if (!initDone) { initUser(); }
+        if (author != null) {
+            return author.getFamilyName();
+        } else {
+            return "";
+        }
+    }
+
+    //
+
+    public Long getJbp_id() {
+        return jbp_id;
+    }
+
+    public void setJbp_id(Long jbp_id) {
+        this.jbp_id = jbp_id;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    //
+
+    public HibernateBlogStoreService getStoreService() {
+        return storeService;
+    }
+
+    public void setStoreService(HibernateBlogStoreService storeService) {
+        this.storeService = storeService;
+    }
+}

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HibernateBlogStoreService.java
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HibernateBlogStoreService.java	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HibernateBlogStoreService.java	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,446 @@
+package org.jboss.blog.service.store.hibernate;
+
+import org.jboss.blog.service.store.BlogStoreService;
+import org.jboss.blog.service.store.model.ModifiableBlogModel;
+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.AbstractBlogService;
+import org.jboss.blog.service.permissions.model.PortalUserBlogAuthor;
+import org.jboss.blog.service.permissions.BlogPermissionsService;
+import org.jboss.blog.BlogName;
+import org.jboss.blog.model.BlogModelDoesNotExistException;
+import org.jboss.blog.model.BlogCommentDoesNotExistException;
+import org.jboss.blog.model.BlogAuthor;
+import org.jboss.blog.tools.BasicTools;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Configuration;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.io.Serializable;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ *
+ * @jmx.mbean
+ * @jmx.managed-operation
+ *  name="start"
+ *  impact="ACTION"
+ *  return-type="void"
+ * @jmx.managed-operation
+ *  name="stop"
+ *  impact="ACTION"
+ *  return-type="void"
+ * @jboss.xmbean
+ */
+public class HibernateBlogStoreService extends AbstractBlogService implements BlogStoreService {
+    private SessionFactory sf;
+
+    protected void startService() throws Exception {
+        sf = new Configuration().configure("/conf/hibernate/hibernate.cfg.xml")
+                .buildSessionFactory();
+    }
+
+    protected void stopService() throws Exception {
+
+    }
+
+    private void assertBlogNameNotNull(BlogName blogName) {
+        BasicTools.assertNotNull(blogName, "Blog name cannot be null.");
+    }
+
+    HPortalBlogAuthor castAndAssertBlogAuthor(BlogAuthor author) {
+        BasicTools.assertNotNull(author, "Blog author cannot be null.");
+        if (!(author instanceof HPortalBlogAuthor)) {
+            throw new IllegalArgumentException("Author must be obtained from this store service.");
+        }
+
+        return (HPortalBlogAuthor) author;
+    }
+
+    HBlogModel castAndAssertBlogModel(ModifiableBlogModel model) {
+        BasicTools.assertNotNull(model, "Blog model cannot be null.");
+        if (!(model instanceof HBlogModel)) {
+            throw new IllegalArgumentException("Model must be obtained from this store service.");
+        }
+
+        return (HBlogModel) model;
+    }
+
+    HBlogPost castAndAssertBlogPost(ModifiableBlogPost post) {
+        BasicTools.assertNotNull(post, "Blog post cannot be null.");
+        if (!(post instanceof HBlogPost)) {
+            throw new IllegalArgumentException("Post must be obtained from this store service.");
+        }
+
+        return (HBlogPost) post;
+    }
+
+    HBlogComment castAndAssertBlogComment(ModifiableBlogComment comment) {
+        BasicTools.assertNotNull(comment, "Blog comment cannot be null.");
+        if (!(comment instanceof HBlogComment)) {
+            throw new IllegalArgumentException("Comment must be obtained from this store service.");
+        }
+
+        return (HBlogComment) comment;
+    }
+
+    /**
+     * @jmx.managed-operation
+     */
+    public List retrieveAllBlogs() {
+        List ids = sf.getCurrentSession().createQuery(
+                "select distinct model.blogName.id from HBlogModel as model")
+                .list();
+
+        List ret = new ArrayList();
+        for (Iterator iter = ids.iterator(); iter.hasNext();) {
+            ret.add(new BlogName((String) iter.next(), null));
+        }
+
+        return ret;
+    }
+
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="org.jboss.blog.BlogName"
+     */
+    public List retrieveAllCategories(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();
+    }
+
+    private boolean blogExists(BlogName blogName) {
+        Long count = (Long) sf.getCurrentSession().createQuery(
+                "select count(*) from HBlogModel as model where " +
+                        "model.blogName = :name")
+                .setParameter("name", blogName).setCacheable(true)
+                .uniqueResult();
+
+        return (count.longValue() > 0);
+    }
+
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="org.jboss.blog.BlogName"
+     */
+    public boolean retrieveBlogModifiable(BlogName blogName) {
+        assertBlogNameNotNull(blogName);
+        return blogExists(blogName);
+    }
+
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="org.jboss.blog.BlogName"
+     */
+    public ModifiableBlogModel retrieveBlogModel(BlogName blogName)
+            throws BlogModelDoesNotExistException {
+        assertBlogNameNotNull(blogName);
+
+        HBlogModel hbm = (HBlogModel) sf.getCurrentSession()
+                .createQuery("from HBlogModel as model where model.blogName = :name")
+                .setCacheable(true).setParameter("name", blogName).uniqueResult();
+
+        if (hbm == null) {
+            throw new BlogModelDoesNotExistException(blogName.toString());
+        }
+
+        hbm.setStoreService(this);
+
+        return hbm;
+    }
+
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="org.jboss.blog.BlogName"
+     */
+    public ModifiableBlogModel newBlogModel(BlogName blogName) throws BlogModelAlreadyExistsException {
+        assertBlogNameNotNull(blogName);
+
+        HBlogModel hbm = (HBlogModel) sf.getCurrentSession()
+                .createQuery("from HBlogModel as model where model.blogName = :name")
+                .setParameter("name", blogName).uniqueResult();
+
+        if (hbm != null) {
+            // Blog model already exists.
+            throw new BlogModelAlreadyExistsException(blogName.toString());
+        }
+
+        hbm = new HBlogModel();
+        hbm.setBlogName(blogName);
+        hbm.setStoreService(this);
+
+        return hbm;
+    }
+
+    /**
+     * @jmx.managed-operation
+     */
+    public ModifiableBlogPost newBlogPost() {
+        HBlogPost post = new HBlogPost();
+        post.setModelPosts(new ArrayList());
+        post.setStoreService(this);
+
+        return post;
+    }
+
+    /**
+     * @jmx.managed-operation
+     */
+    public ModifiableBlogComment newBlogComment() {
+        return new HBlogComment();
+    }
+
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="java.lang.Object"
+     */
+    public BlogAuthor newBlogAuthor(Object request) {
+        BlogAuthor author = permissionsService.retrieveBlogAuthor(request);
+
+        if (!(author instanceof PortalUserBlogAuthor)) {
+            throw new IllegalArgumentException("Invalid author!");
+        }
+
+        Object jbp_id = ((PortalUserBlogAuthor) author).getUser().getId();
+        HPortalBlogAuthor hpba = (HPortalBlogAuthor) sf.getCurrentSession()
+                .createQuery("from HPortalBlogAuthor as author where author.jbp_id = :id")
+                .setParameter("id", jbp_id)
+                .uniqueResult();
+
+        if (hpba != null) {
+            // Blog author already exists.
+            return hpba;
+        }
+
+        // Creating new blog author.
+        hpba = new HPortalBlogAuthor();
+        hpba.setJbp_id((Long) jbp_id);
+        sf.getCurrentSession().save(hpba);
+
+        return hpba;
+    }
+
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="org.jboss.blog.service.store.model.ModifiableBlogModel"
+     */
+    public void saveNewBlogModel(ModifiableBlogModel model) throws BlogModelAlreadyExistsException {
+        HBlogModel hmodel = castAndAssertBlogModel(model);
+        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(model);
+    }
+
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="org.jboss.blog.service.store.model.ModifiableBlogModel"
+     */
+    public void deleteBlogModel(ModifiableBlogModel model) {
+        HBlogModel hmodel = castAndAssertBlogModel(model);
+        if (hmodel.getId() == null) {
+            throw new IllegalArgumentException("Cannot delete a new model.");
+        }
+
+        // Deleting the model.
+        sf.getCurrentSession().delete(hmodel);
+
+        // Deleting all posts belonging only to this category.
+        // TODO This can be done more effectively with a query
+        for (Iterator iter = hmodel.getModelPosts().iterator(); iter.hasNext();) {
+            HBlogModelPost modelPost = (HBlogModelPost) iter.next();
+            HBlogPost post = modelPost.getPost();
+
+            // If the post belongs only to this model, delete it.
+            if ((post.getModelPosts().size() == 1) && (post.getId() != null)) {
+                sf.getCurrentSession().delete(modelPost);
+                sf.getCurrentSession().delete(post.getModelPosts().get(0));
+                sf.getCurrentSession().delete(post);
+                post.getModelPosts().clear();
+            }
+        }
+
+        hmodel.getModelPosts().clear();
+    }
+
+    /**
+     * @jmx.managed-operation
+     * @jmx.managed-parameter type="org.jboss.blog.service.store.model.ModifiableBlogPost"
+     */
+    public void deletePost(ModifiableBlogPost post) {
+        HBlogPost hpost = castAndAssertBlogPost(post);
+        if (hpost.getId() == null) {
+            throw new IllegalArgumentException("Cannot delete a new post.");
+        }
+
+        sf.getCurrentSession().createQuery("delete from HBlogModelPost as bmp " +
+                "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.ModifiableBlogComment"
+     */
+    public void deleteComment(ModifiableBlogComment comment) {
+        HBlogComment hcomment = castAndAssertBlogComment(comment);
+        if (hcomment.getId() == null) {
+            throw new IllegalArgumentException("Cannot delete a new comment.");
+        }
+
+        sf.getCurrentSession().delete(hcomment);
+        // TODO
+        sf.getCurrentSession().flush();
+    }
+
+    //
+
+    /**
+     * 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);
+
+        // TODO Thread-unsafe checking
+        if ((hpost.getId() == null) ||
+                ((Long) sf.getCurrentSession().createQuery("select count(*) from " +
+                        "HBlogModelPost as bmp where bmp.model = :model and bmp.post = :post")
+                        .setEntity("model", hmodel).setEntity("post", hpost).uniqueResult()).longValue() == 0) {
+
+            HBlogModelPost hbmp = new HBlogModelPost(hmodel, hpost);
+            hmodel.getModelPosts().add(hbmp);
+            hpost.getModelPosts().add(hbmp);
+            sf.getCurrentSession().save(hbmp);
+        }
+    }
+
+    /**
+     * From the given blog model, removes the given post.
+     * @param model Model from which the post shold be removed.
+     * @param post Post to remove.
+     */
+    void removePost(HBlogModel model, HBlogPost post) {
+        HBlogModel hmodel = castAndAssertBlogModel(model);
+        HBlogPost hpost = castAndAssertBlogPost(post);
+
+        HBlogModelPost hbmp = (HBlogModelPost) sf.getCurrentSession().createQuery(
+                "from HBlogModelPost as bmp where bmp.model = :model " +
+                        "and bmp.post = :post").setEntity("model", hmodel)
+                .setEntity("post", hpost).uniqueResult();
+
+        if (hbmp == null) {
+            // Nothing to delete.
+            return;
+        }
+
+        hmodel.getModelPosts().remove(hbmp);
+        hpost.getModelPosts().remove(hbmp);
+        sf.getCurrentSession().delete(hbmp);
+    }
+
+    /**
+     * To the given blog post, adds the given comment.
+     * @param post Post to which the comment should be added.
+     * @param comment Comment to add.
+     */
+    void addComment(HBlogPost post, HBlogComment comment) {
+        HBlogPost hpost = castAndAssertBlogPost(post);
+        HBlogComment hcomment = castAndAssertBlogComment(comment);
+
+        hcomment.setPost(hpost);
+
+        hpost.getComments().add(hcomment);
+        sf.getCurrentSession().saveOrUpdate(hcomment);
+    }
+
+    /**
+     * Gets posts for the given model which, when sorted, are between the given
+     * indexes in the list of all posts.
+     * @param model Model for which to get the posts.
+     * @param from Index from which to get the posts.
+     * @param to Index of post after the last post to get.
+     * @return A list of posts, which, when sorted, are between the given indexes
+     * in the list of all posts.
+     */
+    List getPosts(HBlogModel model, int from, int to) {
+        List posts = sf.getCurrentSession().createQuery(
+                "select bmp.post from HBlogModelPost bmp where bmp.model = :model " +
+                        "order by bmp.post.created desc")
+                .setEntity("model", model).setFirstResult(from)
+                .setMaxResults(to-from).list();
+
+        for (Iterator iter = posts.iterator(); iter.hasNext();) {
+            ((HBlogPost) iter.next()).setStoreService(this);
+        }
+
+        return posts;
+    }
+
+    /**
+     * Gets a post with the specified title.
+     * @param model Model to which the post should belong.
+     * @param titleAsId Title converted to an id of the post.
+     * @return Post with the given title in the given model or null, if no such
+     * post exists.
+     */
+    HBlogPost getPostByTitleAsId(HBlogModel model, String titleAsId) {
+        HBlogPost ret = (HBlogPost) sf.getCurrentSession().createQuery(
+                "select bmp.post from HBlogModelPost bmp where bmp.model = :model " +
+                        "and bmp.post.titleAsId = :titleAsId").setEntity("model", model)
+                .setParameter("titleAsId", titleAsId).uniqueResult();
+
+        ret.setStoreService(this);
+
+        return ret;
+    }
+
+    /**
+     * Gets a comment with the specified id.
+     * @param id Unique id of the comment to get.
+     * @return Comment with the given id.
+     * @throws BlogCommentDoesNotExistException If a comment with the given id does
+     * not exist.
+     */
+    HBlogComment getComment(Serializable id) throws BlogCommentDoesNotExistException {
+        HBlogComment ret = (HBlogComment) sf.getCurrentSession().get(HBlogComment.class, id);
+
+        if (ret == null) {
+            throw new BlogCommentDoesNotExistException(id.toString());
+        }
+
+        return ret;
+    }
+
+    //
+
+    private BlogPermissionsService permissionsService;
+
+    /**
+     * @jmx.managed-attribute
+     * @return Current permissions service.
+     */
+    public BlogPermissionsService getPermissionsService() {
+        return permissionsService;
+    }
+
+    /**
+     * @param permissionsService New permissions service to set.
+     * @jmx.managed-attribute
+     */
+    public void setPermissionsService(BlogPermissionsService permissionsService) {
+        this.permissionsService = permissionsService;
+    }
+}

Added: trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HibernateSessionFilter.java
===================================================================
--- trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HibernateSessionFilter.java	                        (rev 0)
+++ trunk/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate/HibernateSessionFilter.java	2007-03-15 00:14:59 UTC (rev 73)
@@ -0,0 +1,57 @@
+package org.jboss.blog.service.store.hibernate;
+
+import org.apache.log4j.Logger;
+
+import javax.servlet.*;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.transaction.UserTransaction;
+import javax.transaction.SystemException;
+import java.io.IOException;
+
+/**
+ * A filter which surrounds all further processing with a hibernate session,
+ * so that later it can be easily obtained using
+ * {@link org.hibernate.SessionFactory#getCurrentSession()}. For use in
+ * servlet deployments.
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class HibernateSessionFilter implements Filter {
+    private final static Logger log = Logger.getLogger(HibernateSessionFilter.class);
+
+    public void init(FilterConfig filterConfig) throws ServletException {        
+
+    }
+
+    public void doFilter(ServletRequest servletRequest,
+                         ServletResponse servletResponse,
+                         FilterChain filterChain) throws IOException, ServletException {
+        UserTransaction tx;
+        try {
+            InitialContext ctx = new InitialContext();
+            tx = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
+        } catch (NamingException e) {
+            throw new ServletException(e);
+        }                 
+
+        try {
+            tx.begin();
+
+            filterChain.doFilter(servletRequest, servletResponse);
+
+            tx.commit();
+        } catch (Throwable t) {
+            try {
+                tx.rollback();
+            } catch (SystemException e) {
+                log.error("Error rolling back transaction.", e);
+            }
+
+            log.error("Error executing logic", t);
+        }
+    }
+
+    public void destroy() {
+
+    }
+}
\ No newline at end of file

Modified: trunk/build.xml
===================================================================
--- trunk/build.xml	2007-03-14 22:14:42 UTC (rev 72)
+++ trunk/build.xml	2007-03-15 00:14:59 UTC (rev 73)
@@ -49,6 +49,7 @@
     <target name="each-module">
         <ant dir="blog-common" inheritrefs="true" target="${target.name}" />
         <ant dir="blog-core" inheritrefs="true" target="${target.name}" />
+        <ant dir="blog-hibernate" inheritrefs="true" target="${target.name}" />
     </target>
 
     <!-- Main tasks -->

Modified: trunk/jbossblog.ipr
===================================================================
--- trunk/jbossblog.ipr	2007-03-14 22:14:42 UTC (rev 72)
+++ trunk/jbossblog.ipr	2007-03-15 00:14:59 UTC (rev 73)
@@ -295,6 +295,7 @@
     <modules>
       <module fileurl="file://$PROJECT_DIR$/blog-common/blog-common.iml" filepath="$PROJECT_DIR$/blog-common/blog-common.iml" />
       <module fileurl="file://$PROJECT_DIR$/blog-core/blog-core.iml" filepath="$PROJECT_DIR$/blog-core/blog-core.iml" />
+      <module fileurl="file://$PROJECT_DIR$/blog-hibernate/blog-hibernate.iml" filepath="$PROJECT_DIR$/blog-hibernate/blog-hibernate.iml" />
       <module fileurl="file://$PROJECT_DIR$/main.iml" filepath="$PROJECT_DIR$/main.iml" />
     </modules>
   </component>

Modified: trunk/jbossblog.iws
===================================================================
--- trunk/jbossblog.iws	2007-03-14 22:14:42 UTC (rev 72)
+++ trunk/jbossblog.iws	2007-03-15 00:14:59 UTC (rev 73)
@@ -17,10 +17,55 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" name="Default" comment="">
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/JBossPortalUtil.java" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/JSFActionContext.java" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/AuthorizationListener.java" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/AbstractBlogService.java" afterPath="" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-hibernate/src/java/org" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl" afterPath="" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-hibernate/src/java/org/jboss/blog" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-hibernate/src/java/org/jboss/blog/service" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-hibernate/src" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.hbm.xml" afterPath="" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/build.xml" afterPath="$PROJECT_DIR$/build.xml" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/security/acl" afterPath="" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/blog-core/build.xml" afterPath="$PROJECT_DIR$/blog-core/build.xml" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.hbm.xml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModelPost.hbm.xml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HibernateSessionFilter.java" afterPath="" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-hibernate/build.xml" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/blog-common/blog-common.iml" afterPath="$PROJECT_DIR$/blog-common/blog-common.iml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jbossblog.iws" afterPath="$PROJECT_DIR$/jbossblog.iws" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/AclBlogPermissionsService.java" afterPath="" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-hibernate" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-hibernate/blog-hibernate.iml" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HPortalBlogAuthor.java" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/security/acl/AclKernelFactory.xml" afterPath="" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-common/src/java/org/jboss/blog/service/AbstractBlogService.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/blog-core/blog-core.iml" afterPath="$PROJECT_DIR$/blog-core/blog-core.iml" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/portal" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogComment.hbm.xml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/test" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/portal/PortalBlogPermissionsService.java" afterPath="" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-hibernate/src/java/org/jboss/blog/service/store" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.hbm.xml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/model" afterPath="" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-hibernate/src/java/org/jboss/blog/service/store/hibernate" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jbossblog.ipr" afterPath="$PROJECT_DIR$/jbossblog.ipr" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/test/HibernateTest.java" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/JSFUIContext.java" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/security" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogComment.java" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogPost.java" afterPath="" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jbossblog.iws" afterPath="$PROJECT_DIR$/jbossblog.iws" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/ACLTagHandler.java" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModel.java" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/model/PortalUserBlogAuthor.java" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HibernateBlogStoreService.java" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/JSFSecurityContext.java" afterPath="" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-hibernate/src/java" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store/hibernate/HBlogModelPost.java" afterPath="" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/blog-hibernate/src/java/org/jboss" />
     </list>
   </component>
   <component name="ChangeListSynchronizer" />
@@ -146,14 +191,61 @@
   <component name="FileEditorManager">
     <leaf>
       <file leaf-file-name="build.xml" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/blog-hibernate/build.xml">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="25" column="44" selection-start="879" selection-end="879" vertical-scroll-proportion="0.45509708">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="build.xml" pinned="false" current="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/build.xml">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="54" column="40" selection-start="2854" selection-end="2854" vertical-scroll-proportion="0.30522564">
+            <state line="50" column="74" selection-start="2774" selection-end="2774" vertical-scroll-proportion="0.5813107">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
+      <file leaf-file-name="build.xml" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/blog-core/build.xml">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="3" column="40" selection-start="113" selection-end="113" vertical-scroll-proportion="0.05461165">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="AuthorizationListener.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/AuthorizationListener.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="71" column="17" selection-start="2537" selection-end="2537" vertical-scroll-proportion="1.0012361">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="AclBlogPermissionsService.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/AclBlogPermissionsService.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="11" column="33" selection-start="502" selection-end="502" vertical-scroll-proportion="0.2039555">
+              <folding>
+                <element signature="imports" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="JSFSecurityContext.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/JSFSecurityContext.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="9" column="54" selection-start="277" selection-end="277" vertical-scroll-proportion="0.12742719">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
     </leaf>
   </component>
   <component name="FindManager">
@@ -527,7 +619,7 @@
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
         </PATH_ELEMENT>
         <PATH_ELEMENT>
-          <option name="myItemId" value="blog-core" />
+          <option name="myItemId" value="blog-hibernate" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
         </PATH_ELEMENT>
       </PATH>
@@ -537,11 +629,11 @@
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
         </PATH_ELEMENT>
         <PATH_ELEMENT>
-          <option name="myItemId" value="blog-core" />
+          <option name="myItemId" value="blog-hibernate" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
         </PATH_ELEMENT>
         <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core" />
+          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-hibernate" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
       </PATH>
@@ -554,14 +646,6 @@
           <option name="myItemId" value="blog-core" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
         </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
       </PATH>
       <PATH>
         <PATH_ELEMENT>
@@ -576,22 +660,6 @@
           <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
       </PATH>
       <PATH>
         <PATH_ELEMENT>
@@ -610,26 +678,6 @@
           <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/ui" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
       </PATH>
       <PATH>
         <PATH_ELEMENT>
@@ -660,14 +708,6 @@
           <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/tools" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
       </PATH>
       <PATH>
         <PATH_ELEMENT>
@@ -702,10 +742,6 @@
           <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/test" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
       </PATH>
       <PATH>
         <PATH_ELEMENT>
@@ -783,7 +819,7 @@
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
         <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/store" />
+          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
       </PATH>
@@ -828,48 +864,10 @@
           <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
-      </PATH>
-      <PATH>
         <PATH_ELEMENT>
-          <option name="myItemId" value="jbossblog.ipr" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="blog-core" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core" />
+          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/model" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/name" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
       </PATH>
       <PATH>
         <PATH_ELEMENT>
@@ -909,51 +907,13 @@
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
         <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/model" />
+          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
-      </PATH>
-      <PATH>
         <PATH_ELEMENT>
-          <option name="myItemId" value="jbossblog.ipr" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="blog-core" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core" />
+          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/configuration" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
       </PATH>
       <PATH>
         <PATH_ELEMENT>
@@ -961,40 +921,6 @@
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
         </PATH_ELEMENT>
         <PATH_ELEMENT>
-          <option name="myItemId" value="blog-core" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-core/src/java/org/jboss/blog" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-      </PATH>
-      <PATH>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="jbossblog.ipr" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
           <option name="myItemId" value="blog-common" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
         </PATH_ELEMENT>
@@ -1013,24 +939,6 @@
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
         </PATH_ELEMENT>
       </PATH>
-      <PATH>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="jbossblog.ipr" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="blog-common" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-common" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/blog-common/src" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-      </PATH>
     </subPane>
   </component>
   <component name="ProjectReloadState">
@@ -1078,11 +986,11 @@
       <recent name="org.jboss.blog.service.configuration" />
     </key>
     <key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
+      <recent name="org.jboss.blog.service.permissions.portal" />
+      <recent name="org.jboss.blog.service.permissions.model" />
+      <recent name="org.jboss.blog.service.permissions.acl" />
       <recent name="org.jboss.blog.service" />
       <recent name="org.jboss.blog.service.store" />
-      <recent name="org.jboss.blog.service.permissions" />
-      <recent name="org.jboss.blog.service.name" />
-      <recent name="org.jboss.blog.service.model" />
     </key>
   </component>
   <component name="RestoreUpdateTree" />
@@ -1325,77 +1233,105 @@
   </component>
   <component name="com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectRootMasterDetailsConfigurable" proportions="0.16666667" version="1">
     <option name="myPlainMode" value="false" />
-    <option name="myLastEditedConfigurable" value="blog-common" />
+    <option name="myLastEditedConfigurable" value="blog-core" />
   </component>
   <component name="com.intellij.profile.ui.ErrorOptionsConfigurable" proportions="0.16666667,0.5642857" version="1">
     <option name="myLastEditedConfigurable" value="Project Default" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/blog-common/src/java/org/jboss/blog/service/permissions/BlogPermissionsService.java">
+    <entry file="file://$PROJECT_DIR$/blog-common/build.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="9" column="17" selection-start="242" selection-end="242" vertical-scroll-proportion="0.16033255">
+        <state line="6" column="38" selection-start="259" selection-end="259" vertical-scroll-proportion="0.1092233">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/tools/UITools.java">
+    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/security/acl/AclKernelFactory.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="19" column="27" selection-start="632" selection-end="632" vertical-scroll-proportion="0.23159145">
+        <state line="24" column="45" selection-start="919" selection-end="919" vertical-scroll-proportion="0.44499382">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/tools/FacesTools.java">
+    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/JSFUIContext.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="20" selection-start="20" selection-end="20" vertical-scroll-proportion="0.0">
+        <state line="7" column="13" selection-start="176" selection-end="176" vertical-scroll-proportion="0.12742719">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/tools/PortletTools.java">
+    <entry file="file://$PROJECT_DIR$/blog-common/src/java/org/jboss/blog/service/permissions/SecurityContext.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="7" column="13" selection-start="149" selection-end="149" vertical-scroll-proportion="0.12470309">
+        <state line="7" column="0" selection-start="152" selection-end="152" vertical-scroll-proportion="0.12742719">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/blog-core/build.xml">
+    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/JSFSecurityContext.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="21" column="38" selection-start="750" selection-end="750" vertical-scroll-proportion="0.37410927">
+        <state line="9" column="54" selection-start="277" selection-end="277" vertical-scroll-proportion="0.12742719">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/blog-common/build.xml">
+    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/AclBlogPermissionsService.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="27" column="61" selection-start="812" selection-end="812" vertical-scroll-proportion="0.48099762">
+        <state line="11" column="33" selection-start="502" selection-end="502" vertical-scroll-proportion="0.2039555">
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/ACLTagHandler.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="60" column="38" selection-start="1642" selection-end="1642" vertical-scroll-proportion="0.184178">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/blog-common/src/java/org/jboss/blog/rome/CommentRssModule.java">
+    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/JSFActionContext.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="8" column="17" selection-start="185" selection-end="185" vertical-scroll-proportion="0.14251782">
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
+        <state line="9" column="13" selection-start="210" selection-end="210" vertical-scroll-proportion="0.12742719">
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/AbstractBlogService.java">
+    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/JBossPortalUtil.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="7" column="22" selection-start="149" selection-end="149" vertical-scroll-proportion="0.12470309">
+        <state line="34" column="86" selection-start="990" selection-end="990" vertical-scroll-proportion="0.36407766">
           <folding />
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/blog-core/src/java/org/jboss/blog/service/permissions/acl/AuthorizationListener.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="71" column="17" selection-start="2537" selection-end="2537" vertical-scroll-proportion="1.0012361">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/blog-core/build.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="3" column="40" selection-start="113" selection-end="113" vertical-scroll-proportion="0.05461165">
+          <folding />
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/build.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="54" column="40" selection-start="2854" selection-end="2854" vertical-scroll-proportion="0.30522564">
+        <state line="50" column="74" selection-start="2774" selection-end="2774" vertical-scroll-proportion="0.5813107">
           <folding />
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/blog-hibernate/build.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="25" column="44" selection-start="879" selection-end="879" vertical-scroll-proportion="0.45509708">
+          <folding />
+        </state>
+      </provider>
+    </entry>
   </component>
 </project>
 




More information about the jboss-cvs-commits mailing list