[jboss-cvs] JBossBlog SVN: r234 - in trunk: lib and 20 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Mar 3 08:05:35 EST 2008


Author: adamw
Date: 2008-03-03 08:05:35 -0500 (Mon, 03 Mar 2008)
New Revision: 234

Added:
   trunk/lib/portal-identity-lib.jar
   trunk/lib/shotoku-base.jar
   trunk/resources-portlet/WEB-INF/blog-object.xml
   trunk/resources-portlet/WEB-INF/portlet-instances.xml
   trunk/src/action/org/jboss/blog/session/security/external/
   trunk/src/action/org/jboss/blog/session/security/external/AbstractExternalSecurityService.java
   trunk/src/action/org/jboss/blog/session/security/external/DummyExternalSecurityService.java
   trunk/src/action/org/jboss/blog/session/security/external/ExternalSecurityService.java
   trunk/src/portal/
   trunk/src/portal/org/
   trunk/src/portal/org/jboss/blog/session/
   trunk/src/portal/org/jboss/blog/session/security/
   trunk/src/portal/org/jboss/blog/session/security/external/
   trunk/src/portal/org/jboss/blog/session/security/external/PortalExternalSecurityService.java
   trunk/src/portal/org/jboss/blog/session/security/external/PortalSecurityException.java
   trunk/src/shotoku/org/jboss/blog/session/shotoku/PostContentTooLargeException.java
   trunk/view-portlet/view_main.jsp
Removed:
   trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java
   trunk/src/portal/org/
   trunk/src/portlet/
Modified:
   trunk/blog.iml
   trunk/build.properties
   trunk/build.xml
   trunk/resources-portlet/WEB-INF/portlet.xml
   trunk/resources/META-INF/application.xml
   trunk/resources/META-INF/security.drl
   trunk/resources/WEB-INF/urlrewrite.xml
   trunk/src/action/org/jboss/blog/session/security/Authenticator.java
   trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java
   trunk/src/portal/org/jboss/blog/portlet/BlogPortlet.java
   trunk/src/shotoku/org/jboss/blog/session/feed/mod/ShotokuModBean.java
   trunk/src/shotoku/org/jboss/blog/session/feed/update/ShotokuFeedUpdate.java
   trunk/src/shotoku/org/jboss/blog/session/shotoku/ShotokuFeedService.java
   trunk/src/test/org/jboss/blog/session/merge/test/GenericsExample1.java
   trunk/view-portlet/view.jsp
   trunk/view/index.html
   trunk/view/layout/menu.xhtml
   trunk/view/stylesheet/blog.css
Log:


Modified: trunk/blog.iml
===================================================================
--- trunk/blog.iml	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/blog.iml	2008-03-03 13:05:35 UTC (rev 234)
@@ -22,7 +22,7 @@
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/action" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/model" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/portlet" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/portal" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/services" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/shotoku" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
@@ -197,6 +197,15 @@
         <SOURCES />
       </library>
     </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/portal-identity-lib.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
     <orderEntryProperties />
   </component>
 </module>

Modified: trunk/build.properties
===================================================================
--- trunk/build.properties	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/build.properties	2008-03-03 13:05:35 UTC (rev 234)
@@ -1,4 +1,5 @@
 #jboss.home = /Users/adamwarski/portal-extensions/feeds/binaries
 jboss.home = /Users/adamwarski/jboss/jboss-4.2
+#jboss.home = /Users/adamwarski/jboss/jboss-4.0.5
 #profile = design
 #jboss.home = /Users/adamwarski/jboss/jboss-design
\ No newline at end of file

Modified: trunk/build.xml
===================================================================
--- trunk/build.xml	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/build.xml	2008-03-03 13:05:35 UTC (rev 234)
@@ -15,21 +15,23 @@
     <property name="src.services.dir" value="src/services" />
     <property name="src.tools.dir" value="src/tools" />
     <property name="src.test.dir" value="src/test" />
-    <property name="src.portlet.dir" value="src/portlet" />
+    <property name="src.portal.dir" value="src/portal" />
     <property name="src.shotoku.dir" value="src/shotoku" />
     <property name="lib.dir" value="lib" />
 
     <property name="jar.impl.name" value="${project.name}-impl.jar" />
     <property name="jar.api.name" value="${project.name}.jar" />
     <property name="jar.shotoku.name" value="${project.name}-shotoku.jar" />
-    <property name="portlet.name" value="${project.name}-portlet.war" />
+    <property name="jar.portal.name" value="${project.name}-portal.jar" />
+    <property name="portal.name" value="${project.name}-portal.war" />
 
     <property name="ear.dir" value="exploded-archives/${project.name}.ear" />
     <property name="jar.impl.dir" value="exploded-archives/${jar.impl.name}" />
     <property name="jar.api.dir" value="exploded-archives/${jar.api.name}" />
     <property name="jar.shotoku.dir" value="exploded-archives/${jar.shotoku.name}" />
+    <property name="jar.portal.dir" value="exploded-archives/${jar.portal.name}" />
     <property name="war.dir" value="exploded-archives/${project.name}.war" />
-    <property name="portlet.dir" value="exploded-archives/${portlet.name}" />
+    <property name="portal.dir" value="exploded-archives/${portal.name}" />
     <property name="test.dir" value="test-build" />
     <property name="bootstrap.dir" value="${basedir}/bootstrap" />
     <property name="deploy.dir" value="${jboss.home}/server/default/deploy" />
@@ -37,8 +39,9 @@
     <property name="ear.deploy.dir" value="${deploy.dir}/${project.name}.ear" />
     <property name="jar.deploy.dir" value="${ear.deploy.dir}/${jar.impl.name}" />
     <property name="jar.shotoku.deploy.dir" value="${ear.deploy.dir}/${jar.shotoku.name}" />
+    <property name="jar.portal.deploy.dir" value="${ear.deploy.dir}/${jar.portal.name}" />
     <property name="war.deploy.dir" value="${ear.deploy.dir}/${project.name}.war" />
-    <property name="portlet.deploy.dir" value="${ear.deploy.dir}/${portlet.name}" />
+    <property name="portal.deploy.dir" value="${ear.deploy.dir}/${portal.name}" />
     <property name="testng.jar" value="${basedir}/lib/testng.jar" />
     <property name="javac.debug" value="true" />
     <property name="javac.deprecation" value="false" />
@@ -73,12 +76,12 @@
         <mkdir dir="${jar.impl.dir}" />
         <mkdir dir="${jar.api.dir}" />
         <mkdir dir="${jar.shotoku.dir}" />
+        <mkdir dir="${jar.portal.dir}" />
         <mkdir dir="${ear.dir}" />
         <mkdir dir="${war.dir}" />
-        <mkdir dir="${portlet.dir}" />
-        <mkdir dir="${portlet.dir}/WEB-INF" />
-        <mkdir dir="${portlet.dir}/WEB-INF/classes" />
-        <mkdir dir="${portlet.dir}/WEB-INF/lib" />
+        <mkdir dir="${portal.dir}" />
+        <mkdir dir="${portal.dir}/WEB-INF" />
+        <mkdir dir="${portal.dir}/WEB-INF/lib" />
         <mkdir dir="${dist.dir}" />
     </target>
 
@@ -100,12 +103,12 @@
                nowarn="on">
             <src path="${src.action.dir}" />
         </javac>
-        <javac classpathref="build.impl.classpath"
-               destdir="${portlet.dir}/WEB-INF/classes"
+        <javac classpathref="build.dep.classpath"
+               destdir="${jar.portal.dir}"
                debug="${javac.debug}"
                deprecation="${javac.deprecation}"
                nowarn="on">
-            <src path="${src.portlet.dir}" />
+            <src path="${src.portal.dir}" />
         </javac>
         <javac classpathref="build.dep.classpath"
                destdir="${jar.shotoku.dir}"
@@ -135,6 +138,13 @@
             </fileset>
         </copy>
 
+        <!-- TODO: remove this marker for scanner -->
+        <copy todir="${jar.portal.dir}">
+            <fileset dir="${basedir}/resources">
+                <include name="seam.properties" />
+            </fileset>
+        </copy>
+
         <copy todir="${jar.impl.dir}/META-INF">
             <fileset dir="${basedir}/resources/META-INF">
                 <include name="ejb-jar.xml" />
@@ -190,17 +200,17 @@
             </fileset>
         </copy>
 
-        <copy todir="${portlet.dir}">
+        <copy todir="${portal.dir}">
             <fileset dir="${basedir}/resources-portlet">
                 <include name="**/*"/>
             </fileset>
         </copy>
-        <copy todir="${portlet.dir}">
+        <copy todir="${portal.dir}">
             <fileset dir="${basedir}/view-portlet">
                 <include name="**/*"/>
             </fileset>
         </copy>
-        <copy todir="${portlet.dir}/WEB-INF/lib">
+        <copy todir="${portal.dir}/WEB-INF/lib">
             <fileset dir="${basedir}/lib">
                 <include name="jstl.jar" />
                 <include name="standard.jar" />
@@ -271,8 +281,9 @@
             description="Package the archives">
         <jar jarfile="${dist.dir}/${jar.impl.name}" basedir="${jar.impl.dir}"/>
         <jar jarfile="${dist.dir}/${jar.shotoku.name}" basedir="${jar.shotoku.dir}"/>
+        <jar jarfile="${dist.dir}/${jar.portal.name}" basedir="${jar.portal.dir}"/>
         <jar jarfile="${dist.dir}/${project.name}.war" basedir="${war.dir}"/>
-        <jar jarfile="${dist.dir}/${portlet.name}" basedir="${portlet.dir}"/>
+        <jar jarfile="${dist.dir}/${portal.name}" basedir="${portal.dir}"/>
         <jar jarfile="${dist.dir}/${project.name}.ear">
             <fileset dir="${ear.dir}"/>
             <fileset dir="${dist.dir}">
@@ -310,7 +321,7 @@
 
         <mkdir dir="${jar.deploy.dir}"/>
         <mkdir dir="${war.deploy.dir}"/>
-        <mkdir dir="${portlet.deploy.dir}"/>
+        <mkdir dir="${portal.deploy.dir}"/>
 
         <copy todir="${jar.deploy.dir}">
             <fileset dir="${jar.impl.dir}"/>
@@ -318,11 +329,14 @@
         <copy todir="${jar.shotoku.deploy.dir}">
             <fileset dir="${jar.shotoku.dir}"/>
         </copy>
+        <copy todir="${jar.portal.deploy.dir}">
+            <fileset dir="${jar.portal.dir}"/>
+        </copy>
         <copy todir="${war.deploy.dir}">
             <fileset dir="${war.dir}"/>
         </copy>
-        <copy todir="${portlet.deploy.dir}">
-            <fileset dir="${portlet.dir}"/>
+        <copy todir="${portal.deploy.dir}">
+            <fileset dir="${portal.dir}"/>
         </copy>
         <copy todir="${ear.deploy.dir}">
             <fileset dir="${ear.dir}"/>
@@ -373,9 +387,10 @@
         <delete dir="${dist.dir}"/>
         <delete dir="${ear.dir}"/>
         <delete dir="${war.dir}"/>
-        <delete dir="${portlet.dir}"/>
+        <delete dir="${portal.dir}"/>
         <delete dir="${jar.impl.dir}"/>
         <delete dir="${jar.api.dir}"/>
+        <delete dir="${jar.portal.dir}"/>
         <delete dir="${src.schema.dir}" failonerror="no"/>
         <delete dir="${basedir}/test-report"/>
         <delete dir="${basedir}/test-output"/>

Added: trunk/lib/portal-identity-lib.jar
===================================================================
(Binary files differ)


Property changes on: trunk/lib/portal-identity-lib.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/lib/shotoku-base.jar
===================================================================
(Binary files differ)


Property changes on: trunk/lib/shotoku-base.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/resources/META-INF/application.xml
===================================================================
--- trunk/resources/META-INF/application.xml	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/resources/META-INF/application.xml	2008-03-03 13:05:35 UTC (rev 234)
@@ -1,36 +1,39 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<application xmlns="http://java.sun.com/xml/ns/javaee" 
+<application xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"
              version="5">
-    
-   <display-name>blog</display-name>
 
-   <!-- Seam and EL -->
-   <module>
-       <ejb>jboss-seam.jar</ejb>
-   </module>
+    <display-name>blog</display-name>
 
-   <module>
-      <ejb>blog-impl.jar</ejb>
-   </module>
+    <!-- Seam and EL -->
+    <module>
+        <ejb>jboss-seam.jar</ejb>
+    </module>
 
     <module>
-      <ejb>blog-shotoku.jar</ejb>
-   </module>
-   
-   <module>
-      <web>
-         <web-uri>blog.war</web-uri>
-         <context-root>/blogs</context-root>
-      </web>
-   </module>
+        <ejb>blog-impl.jar</ejb>
+    </module>
 
-   <module>
-      <web>
-         <web-uri>blog-portlet.war</web-uri>
-         <context-root>/blog-portlet</context-root>
-      </web>
-   </module>
-    
+    <module>
+        <ejb>blog-shotoku.jar</ejb>
+    </module>
+
+    <module>
+        <ejb>blog-portal.jar</ejb>
+    </module>
+
+    <module>
+        <web>
+            <web-uri>blog.war</web-uri>
+            <context-root>/blogs</context-root>
+        </web>
+    </module>
+
+    <module>
+        <web>
+            <web-uri>blog-portal.war</web-uri>
+            <context-root>/blog-portal</context-root>
+        </web>
+    </module>
 </application>

Modified: trunk/resources/META-INF/security.drl
===================================================================
--- trunk/resources/META-INF/security.drl	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/resources/META-INF/security.drl	2008-03-03 13:05:35 UTC (rev 234)
@@ -11,12 +11,12 @@
 import org.jboss.blog.session.security.FeedsCombinedRole;
 
 // TODO: remove
-rule Dev
+/* rule Dev
 when
   c: PermissionCheck()
 then
   c.grant();
-end;
+end; */
 
 rule CanDoAnything
 when

Modified: trunk/resources/WEB-INF/urlrewrite.xml
===================================================================
--- trunk/resources/WEB-INF/urlrewrite.xml	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/resources/WEB-INF/urlrewrite.xml	2008-03-03 13:05:35 UTC (rev 234)
@@ -9,6 +9,18 @@
 
 -->
 <urlrewrite>
+    <!-- Main view -->
+
+    <rule>
+        <from>^/index.html$</from>
+        <to>/home.seam</to>
+    </rule>
+
+    <outbound-rule>
+        <from>^/blogs/home.seam$</from>
+        <to>/blogs/</to>
+    </outbound-rule>
+
     <!-- Posts view -->
 
     <rule>
@@ -17,18 +29,18 @@
     </rule>
 
     <outbound-rule>
-        <from>^/blog/view/post.seam\?post=(\w+)$</from>
-        <to>/blog/post/$1</to>
+        <from>^/blogs/view/post.seam\?post=(\w+)$</from>
+        <to>/blogs/post/$1</to>
     </outbound-rule>
 
     <outbound-rule>
-        <from>^/blog/view/post.seam\?post=(\w+)&amp;(.+)$</from>
-        <to>/blog/post/$1?$2</to>
+        <from>^/blogs/view/post.seam\?post=(\w+)&amp;(.+)$</from>
+        <to>/blogs/post/$1?$2</to>
     </outbound-rule>
 
     <outbound-rule>
-        <from>^/blog/view/post.seam\?cid=(\d+)&amp;post=(\w+)(.*)$</from>
-        <to>/blog/post/$2?cid=$1$3</to>
+        <from>^/blogs/view/post.seam\?cid=(\d+)&amp;post=(\w+)(.*)$</from>
+        <to>/blogs/post/$2?cid=$1$3</to>
     </outbound-rule>
 
     <!-- Feeds -->
@@ -39,8 +51,8 @@
     </rule>
 
     <outbound-rule>
-        <from>^/blog/feeds.seam\?type=(\w+)&amp;name=([a-z0-9_]*)$</from>
-        <to>/blog/feed/$2?type=$1</to>
+        <from>^/blogs/feeds.seam\?type=(\w+)&amp;name=([a-z0-9_]*)$</from>
+        <to>/blogs/feed/$2?type=$1</to>
     </outbound-rule>
 
     <!-- Feed view -->
@@ -51,8 +63,8 @@
     </rule>
 
     <outbound-rule>
-        <from>^/blog/view/feed.seam\?(cid=\d+&amp;)?(from=\d+)&amp;name=([a-z0-9_]+)(.*)$</from>
-        <to>/blog/view/$3?$1$2$4</to>
+        <from>^/blogs/view/feed.seam\?(cid=\d+&amp;)?(from=\d+)&amp;name=([a-z0-9_]+)(.*)$</from>
+        <to>/blogs/view/$3?$1$2$4</to>
     </outbound-rule>
 </urlrewrite>
 

Added: trunk/resources-portlet/WEB-INF/blog-object.xml
===================================================================
--- trunk/resources-portlet/WEB-INF/blog-object.xml	                        (rev 0)
+++ trunk/resources-portlet/WEB-INF/blog-object.xml	2008-03-03 13:05:35 UTC (rev 234)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE deployments PUBLIC
+        "-//JBoss Portal//DTD Portal Object 2.6//EN"
+        "http://www.jboss.org/portal/dtd/portal-object_2_6.dtd">
+<deployments>
+    <deployment>
+        <parent-ref>default.default</parent-ref>
+        <if-exists>overwrite</if-exists>
+        <window>
+            <window-name>DefaultBlogPortletWindow</window-name>
+            <instance-ref>
+                DefaultBlogPortletInstance
+            </instance-ref>
+            <region>right</region>
+            <height>3</height>
+        </window>
+    </deployment>
+</deployments>
\ No newline at end of file

Added: trunk/resources-portlet/WEB-INF/portlet-instances.xml
===================================================================
--- trunk/resources-portlet/WEB-INF/portlet-instances.xml	                        (rev 0)
+++ trunk/resources-portlet/WEB-INF/portlet-instances.xml	2008-03-03 13:05:35 UTC (rev 234)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE deployments PUBLIC
+        "-//JBoss Portal//DTD Portlet Instances 2.6//EN"
+        "http://www.jboss.org/portal/dtd/portlet-instances_2_6.dtd">
+<deployments>
+    <deployment>
+        <if-exists>overwrite</if-exists>
+        <instance>
+            <instance-id>DefaultBlogPortletInstance</instance-id>
+            <portlet-ref>BlogPortlet</portlet-ref>
+            <preferences>
+                <preference>
+                    <name>feedName</name>
+                    <value>all</value>
+                </preference>
+                <preference>
+                    <name>numberOfPosts</name>
+                    <value>3</value>
+                </preference>
+                <preference>
+                    <name>summaryLength</name>
+                    <value>0</value>
+                </preference>
+                <preference>
+                    <name>showDate</name>
+                    <value>true</value>
+                </preference>
+                <preference>
+                    <name>jsp</name>
+                    <value>/view_main.jsp</value>
+                </preference>
+            </preferences>
+        </instance>
+    </deployment>
+</deployments>
\ No newline at end of file

Modified: trunk/resources-portlet/WEB-INF/portlet.xml
===================================================================
--- trunk/resources-portlet/WEB-INF/portlet.xml	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/resources-portlet/WEB-INF/portlet.xml	2008-03-03 13:05:35 UTC (rev 234)
@@ -32,6 +32,10 @@
                 <name>showDate</name>
                 <value>true</value>
             </preference>
+            <preference>
+                <name>jsp</name>
+                <value>/view.jsp</value>
+            </preference>
         </portlet-preferences>
     </portlet>
 </portlet-app>

Modified: trunk/src/action/org/jboss/blog/session/security/Authenticator.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/Authenticator.java	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/src/action/org/jboss/blog/session/security/Authenticator.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -7,6 +7,7 @@
 import org.jboss.blog.model.security.SecurityUser;
 import org.jboss.blog.model.security.SecurityGroup;
 import org.jboss.blog.model.security.SecurityMapping;
+import org.jboss.blog.session.security.external.ExternalSecurityService;
 
 import java.util.List;
 

Deleted: trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -1,110 +0,0 @@
-package org.jboss.blog.session.security;
-
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.AutoCreate;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.ScopeType;
-import org.jboss.blog.model.security.SecurityUser;
-import org.jboss.blog.model.security.SecurityGroup;
-import org.jboss.blog.model.security.RestrictedSecurityGroup;
-import org.jboss.blog.model.security.RestrictedSecurityUser;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * @author <a href="mailto:adam at warski.org">Adam Warski</a>
- */
- at Name("externalSecurityService")
- at AutoCreate
- at Scope(ScopeType.STATELESS)
-public class ExternalSecurityService {
-    @In
-    private EntityManager entityManager;
-
-    public SecurityUser authenticate(String username, String password) throws InvalidLoginException {
-        SecurityUser user = new SecurityUser();
-        user.setExternalId(Long.parseLong(username));
-
-        return getUnrestrictedSecurityUser(user);
-    }
-
-    public SecurityGroup getUnrestrictedSecurityGroup(RestrictedSecurityGroup securityGroup) {
-        try {
-            SecurityGroup entitySg = (SecurityGroup) entityManager.createQuery(
-                    "select sg from SecurityGroup sg where sg.externalId = ?1")
-                    .setParameter(1, securityGroup.getExternalId()).getSingleResult();
-            entitySg.setRealGroup(securityGroup.getRealGroup());
-
-            return entitySg;
-        } catch (NoResultException e) {
-            SecurityGroup sg = new SecurityGroup();
-            sg.setExternalId(securityGroup.getExternalId());
-            sg.setRealGroup(securityGroup.getRealGroup());
-
-            entityManager.persist(sg);
-
-            return sg;
-        }
-    }
-
-    public SecurityUser getUnrestrictedSecurityUser(RestrictedSecurityUser securityUser) {
-        try {
-            SecurityUser entitySu = (SecurityUser) entityManager.createQuery(
-                    "select su from SecurityUser su where su.externalId = ?1")
-                    .setParameter(1, securityUser.getExternalId()).getSingleResult();
-            entitySu.setRealUser(securityUser.getRealUser());
-
-            return entitySu;
-        } catch (NoResultException e) {
-            SecurityUser su = new SecurityUser();
-            su.setExternalId(securityUser.getExternalId());
-            su.setRealUser(securityUser.getRealUser());
-
-            entityManager.persist(su);
-
-            return su;
-        }
-    }
-
-    public List<RestrictedSecurityGroup> getAllGroups() {
-        List<RestrictedSecurityGroup> groups = new ArrayList<RestrictedSecurityGroup>();
-        groups.add(new SecurityGroup("group1", 1l));
-        groups.add(new SecurityGroup("group2", 2l));
-        groups.add(new SecurityGroup("group3", 3l));
-
-        return groups;
-    }
-
-    public List<RestrictedSecurityUser> getAllUsers() {
-        List<RestrictedSecurityUser> users = new ArrayList<RestrictedSecurityUser>();
-        users.add(new SecurityUser("1", 1l));
-        users.add(new SecurityUser("2", 2l));
-        users.add(new SecurityUser("2", 3l));
-
-        return users;
-    }
-
-    public List<SecurityGroup> getGroupsOfUser(SecurityUser securityUser) {
-        List<SecurityGroup> groups = new ArrayList<SecurityGroup>();
-        groups.add(getUnrestrictedSecurityGroup(
-                new SecurityGroup("group" + securityUser.getExternalId(), securityUser.getExternalId())));
-
-        return groups;
-    }
-
-    public String getDisplayName(RestrictedSecurityUser securityUser) {
-        return securityUser.getExternalId().toString();
-    }
-
-    public String getDisplayName(RestrictedSecurityGroup securityGroup) {
-        if (securityGroup.getRealGroup() == null) {
-            securityGroup.setRealGroup("group" + securityGroup.getExternalId());
-        }
-
-        return securityGroup.getRealGroup().toString();
-    }
-}

Modified: trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -9,12 +9,14 @@
 import org.jboss.blog.model.security.*;
 import org.jboss.blog.model.Group;
 import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.session.security.external.ExternalSecurityService;
 
 import javax.persistence.EntityManager;
 import javax.persistence.NoResultException;
 import javax.faces.application.FacesMessage;
 import java.util.List;
 import java.util.ArrayList;
+import java.io.Serializable;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -22,7 +24,7 @@
 @Name("securityMod")
 @Scope(ScopeType.CONVERSATION)
 @AutoCreate
-public class SecurityModBean {
+public class SecurityModBean implements Serializable {
     @In
     private EntityManager entityManager;
 

Added: trunk/src/action/org/jboss/blog/session/security/external/AbstractExternalSecurityService.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/external/AbstractExternalSecurityService.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/external/AbstractExternalSecurityService.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -0,0 +1,54 @@
+package org.jboss.blog.session.security.external;
+
+import org.jboss.blog.model.security.SecurityUser;
+import org.jboss.blog.model.security.SecurityGroup;
+import org.jboss.blog.model.security.RestrictedSecurityGroup;
+import org.jboss.blog.model.security.RestrictedSecurityUser;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public abstract class AbstractExternalSecurityService implements ExternalSecurityService {
+    protected abstract EntityManager getEntityManager();
+
+    public SecurityGroup getUnrestrictedSecurityGroup(RestrictedSecurityGroup securityGroup) {
+        try {
+            SecurityGroup entitySg = (SecurityGroup) getEntityManager().createQuery(
+                    "select sg from SecurityGroup sg where sg.externalId = ?1")
+                    .setParameter(1, securityGroup.getExternalId()).getSingleResult();
+            entitySg.setRealGroup(securityGroup.getRealGroup());
+
+            return entitySg;
+        } catch (NoResultException e) {
+            SecurityGroup sg = new SecurityGroup();
+            sg.setExternalId(securityGroup.getExternalId());
+            sg.setRealGroup(securityGroup.getRealGroup());
+
+            getEntityManager().persist(sg);
+
+            return sg;
+        }
+    }
+
+    public SecurityUser getUnrestrictedSecurityUser(RestrictedSecurityUser securityUser) {
+        try {
+            SecurityUser entitySu = (SecurityUser) getEntityManager().createQuery(
+                    "select su from SecurityUser su where su.externalId = ?1")
+                    .setParameter(1, securityUser.getExternalId()).getSingleResult();
+            entitySu.setRealUser(securityUser.getRealUser());
+
+            return entitySu;
+        } catch (NoResultException e) {
+            SecurityUser su = new SecurityUser();
+            su.setExternalId(securityUser.getExternalId());
+            su.setRealUser(securityUser.getRealUser());
+
+            getEntityManager().persist(su);
+
+            return su;
+        }
+    }
+}
\ No newline at end of file

Copied: trunk/src/action/org/jboss/blog/session/security/external/DummyExternalSecurityService.java (from rev 223, trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java)
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/external/DummyExternalSecurityService.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/external/DummyExternalSecurityService.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -0,0 +1,74 @@
+package org.jboss.blog.session.security.external;
+
+import org.jboss.seam.annotations.*;
+import org.jboss.seam.ScopeType;
+import org.jboss.blog.model.security.SecurityUser;
+import org.jboss.blog.model.security.SecurityGroup;
+import org.jboss.blog.model.security.RestrictedSecurityGroup;
+import org.jboss.blog.model.security.RestrictedSecurityUser;
+import org.jboss.blog.session.security.InvalidLoginException;
+
+import javax.persistence.EntityManager;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("externalSecurityService")
+ at AutoCreate
+ at Scope(ScopeType.STATELESS)
+ at Install(precedence = 15)
+public class DummyExternalSecurityService extends AbstractExternalSecurityService {
+    @In
+    private EntityManager entityManager;
+
+    protected EntityManager getEntityManager() {
+        return entityManager;
+    }
+
+    public SecurityUser authenticate(String username, String password) throws InvalidLoginException {
+        SecurityUser user = new SecurityUser();
+        user.setExternalId(Long.parseLong(username));
+
+        return getUnrestrictedSecurityUser(user);
+    }   
+
+    public List<? extends RestrictedSecurityGroup> getAllGroups() {
+        List<RestrictedSecurityGroup> groups = new ArrayList<RestrictedSecurityGroup>();
+        groups.add(new SecurityGroup("group1", 1l));
+        groups.add(new SecurityGroup("group2", 2l));
+        groups.add(new SecurityGroup("group3", 3l));
+
+        return groups;
+    }
+
+    public List<? extends RestrictedSecurityUser> getAllUsers() {
+        List<RestrictedSecurityUser> users = new ArrayList<RestrictedSecurityUser>();
+        users.add(new SecurityUser("1", 1l));
+        users.add(new SecurityUser("2", 2l));
+        users.add(new SecurityUser("2", 3l));
+
+        return users;
+    }
+
+    public List<SecurityGroup> getGroupsOfUser(SecurityUser securityUser) {
+        List<SecurityGroup> groups = new ArrayList<SecurityGroup>();
+        groups.add(getUnrestrictedSecurityGroup(
+                new SecurityGroup("group" + securityUser.getExternalId(), securityUser.getExternalId())));
+
+        return groups;
+    }
+
+    public String getDisplayName(RestrictedSecurityUser securityUser) {
+        return securityUser.getExternalId().toString();
+    }
+
+    public String getDisplayName(RestrictedSecurityGroup securityGroup) {
+        if (securityGroup.getRealGroup() == null) {
+            securityGroup.setRealGroup("group" + securityGroup.getExternalId());
+        }
+
+        return securityGroup.getRealGroup().toString();
+    }
+}

Copied: trunk/src/action/org/jboss/blog/session/security/external/ExternalSecurityService.java (from rev 223, trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java)
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/external/ExternalSecurityService.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/external/ExternalSecurityService.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -0,0 +1,30 @@
+package org.jboss.blog.session.security.external;
+
+import org.jboss.blog.model.security.SecurityUser;
+import org.jboss.blog.model.security.SecurityGroup;
+import org.jboss.blog.model.security.RestrictedSecurityGroup;
+import org.jboss.blog.model.security.RestrictedSecurityUser;
+import org.jboss.blog.session.security.InvalidLoginException;
+
+import java.util.List;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public interface ExternalSecurityService {
+    SecurityUser authenticate(String username, String password) throws InvalidLoginException;
+
+    SecurityGroup getUnrestrictedSecurityGroup(RestrictedSecurityGroup securityGroup);
+
+    SecurityUser getUnrestrictedSecurityUser(RestrictedSecurityUser securityUser);
+
+    List<? extends RestrictedSecurityGroup> getAllGroups();
+
+    List<? extends RestrictedSecurityUser> getAllUsers();
+
+    List<SecurityGroup> getGroupsOfUser(SecurityUser securityUser);
+
+    String getDisplayName(RestrictedSecurityUser securityUser);
+
+    String getDisplayName(RestrictedSecurityGroup securityGroup);
+}

Copied: trunk/src/portal (from rev 225, trunk/src/portlet)

Copied: trunk/src/portal/org (from rev 233, trunk/src/portlet/org)

Modified: trunk/src/portal/org/jboss/blog/portlet/BlogPortlet.java
===================================================================
--- trunk/src/portlet/org/jboss/blog/portlet/BlogPortlet.java	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/src/portal/org/jboss/blog/portlet/BlogPortlet.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -42,6 +42,8 @@
             String showDateString = preferences.getValue("showDate", "true");
             Boolean showDate = Boolean.valueOf(showDateString);
 
+            String jsp = preferences.getValue("jsp", "/view.jsp");
+
             response.setContentType("text/html");
 
             try {
@@ -58,7 +60,7 @@
                 request.setAttribute("linkService", linkService);
 
                 // Including the jsp
-                PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/view.jsp");
+                PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jsp);
                 rd.include(request, response);
             } catch (FeedNotFoundException e) {
                 request.setAttribute("feedName", feedName);

Added: trunk/src/portal/org/jboss/blog/session/security/external/PortalExternalSecurityService.java
===================================================================
--- trunk/src/portal/org/jboss/blog/session/security/external/PortalExternalSecurityService.java	                        (rev 0)
+++ trunk/src/portal/org/jboss/blog/session/security/external/PortalExternalSecurityService.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -0,0 +1,241 @@
+package org.jboss.blog.session.security.external;
+
+import org.jboss.seam.annotations.*;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.ScopeType;
+import org.jboss.blog.model.security.SecurityUser;
+import org.jboss.blog.model.security.SecurityGroup;
+import org.jboss.blog.model.security.RestrictedSecurityGroup;
+import org.jboss.blog.model.security.RestrictedSecurityUser;
+import org.jboss.blog.session.security.InvalidLoginException;
+import org.jboss.portal.identity.*;
+import org.jboss.portal.identity.Role;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("externalSecurityService")
+ at AutoCreate
+ at Scope(ScopeType.STATELESS)
+public class PortalExternalSecurityService extends AbstractExternalSecurityService {
+    @In
+    private EntityManager entityManager;
+
+    protected EntityManager getEntityManager() {
+        return entityManager;
+    }
+
+    @Logger
+    private Log log;
+
+    private UserModule getUserModule() throws PortalSecurityException {
+        try {
+            return (UserModule) new InitialContext().lookup("java:portal/UserModule");
+        } catch (NamingException e) {
+            log.error(e);
+            throw new PortalSecurityException(e);
+        }
+    }
+
+    private RoleModule getRoleModule() throws PortalSecurityException {
+        try {
+            return (RoleModule) new InitialContext().lookup("java:portal/RoleModule");
+        } catch (NamingException e) {
+            log.error(e);
+            throw new PortalSecurityException(e);
+        }
+    }
+
+    private MembershipModule getMembershipModule() throws PortalSecurityException {
+        try {
+            return (MembershipModule) new InitialContext().lookup("java:portal/MembershipModule");
+        } catch (NamingException e) {
+            log.error(e);
+            throw new PortalSecurityException(e);
+        }
+    }
+
+    private List<SecurityGroup> convertRoles(Set<Role> roles) {
+        List<SecurityGroup> securityGroups = new ArrayList<SecurityGroup>();
+
+        for (Role role : roles) {
+            securityGroups.add(new SecurityGroup(role, (Long) role.getId()));
+        }
+
+        return securityGroups;
+    }
+
+    private List<SecurityUser> convertUsers(Set<User> users) {
+        List<SecurityUser> securityUsers = new ArrayList<SecurityUser>();
+
+        for (User user : users) {
+            securityUsers.add(new SecurityUser(user, (Long) user.getId()));
+        }
+
+        return securityUsers;
+    }
+
+    private User getRealUser(RestrictedSecurityUser securityUser) throws PortalSecurityException, NoSuchUserException {
+        if (securityUser.getRealUser() == null) {
+            try {
+                User user = getUserModule().findUserById(securityUser.getExternalId());
+                securityUser.setRealUser(user);
+
+                return user;
+            } catch (NoSuchUserException e) {
+                throw e;
+            } catch (IdentityException e) {
+                throw new PortalSecurityException(e);
+            }
+        } else {
+            return (User) securityUser.getRealUser();
+        }
+    }
+
+    private Role getRealRole(RestrictedSecurityGroup securityGroup) throws PortalSecurityException {
+        if (securityGroup.getRealGroup() == null) {
+            try {
+                Role role = getRoleModule().findRoleById(securityGroup.getExternalId());
+                securityGroup.setRealGroup(role);
+
+                return role;
+            } catch (IdentityException e) {
+                throw new PortalSecurityException(e);
+            }
+        } else {
+            return (Role) securityGroup.getRealGroup();
+        }
+    }
+
+    public SecurityGroup getUnrestrictedSecurityGroup(RestrictedSecurityGroup securityGroup) {
+        try {
+            SecurityGroup entitySg = (SecurityGroup) entityManager.createQuery(
+                    "select sg from SecurityGroup sg where sg.externalId = ?1")
+                    .setParameter(1, securityGroup.getExternalId()).getSingleResult();
+            entitySg.setRealGroup(securityGroup.getRealGroup());
+
+            return entitySg;
+        } catch (NoResultException e) {
+            SecurityGroup sg = new SecurityGroup();
+            sg.setExternalId(securityGroup.getExternalId());
+            sg.setRealGroup(securityGroup.getRealGroup());
+
+            entityManager.persist(sg);
+
+            return sg;
+        }
+    }
+
+    public SecurityUser getUnrestrictedSecurityUser(RestrictedSecurityUser securityUser) {
+        try {
+            SecurityUser entitySu = (SecurityUser) entityManager.createQuery(
+                    "select su from SecurityUser su where su.externalId = ?1")
+                    .setParameter(1, securityUser.getExternalId()).getSingleResult();
+            entitySu.setRealUser(securityUser.getRealUser());
+
+            return entitySu;
+        } catch (NoResultException e) {
+            SecurityUser su = new SecurityUser();
+            su.setExternalId(securityUser.getExternalId());
+            su.setRealUser(securityUser.getRealUser());
+
+            entityManager.persist(su);
+
+            return su;
+        }
+    }
+
+    public SecurityUser authenticate(String username, String password) throws InvalidLoginException {
+        try {
+            User user = getUserModule().findUserByUserName(username);
+
+            if (!user.validatePassword(password)) {
+                throw new InvalidLoginException();
+            }
+
+            SecurityUser securityUser = new SecurityUser();
+            securityUser.setExternalId((Long) user.getId());
+            securityUser.setRealUser(user);
+
+            return getUnrestrictedSecurityUser(securityUser);
+        } catch (NoSuchUserException e) {
+            throw new InvalidLoginException();
+        } catch (IdentityException e) {
+            log.error(e);
+            throw new InvalidLoginException();
+        } catch (PortalSecurityException e) {
+            log.error(e);
+            throw new InvalidLoginException();
+        }
+    }
+
+    public List<? extends RestrictedSecurityGroup> getAllGroups() {
+        try {
+            //noinspection unchecked
+            return convertRoles((Set<Role>) getRoleModule().findRoles());
+        } catch (IdentityException e) {
+            log.error(e);
+            return new ArrayList<RestrictedSecurityGroup>();
+        } catch (PortalSecurityException e) {
+            log.error(e);
+            return new ArrayList<RestrictedSecurityGroup>();
+        }
+    }
+
+    public List<? extends RestrictedSecurityUser> getAllUsers() {
+        try {
+            // TODO - users count
+            //noinspection unchecked
+            return convertUsers((Set<User>) getUserModule().findUsers(0, 100000));
+        } catch (NoSuchUserException e) {
+            return new ArrayList<RestrictedSecurityUser>();
+        } catch (IdentityException e) {
+            log.error(e);
+            return new ArrayList<RestrictedSecurityUser>();
+        } catch (PortalSecurityException e) {
+            log.error(e);
+            return new ArrayList<RestrictedSecurityUser>();
+        }
+    }
+
+    public List<SecurityGroup> getGroupsOfUser(SecurityUser securityUser) {
+        try {
+            //noinspection unchecked
+            return convertRoles((Set<Role>) getMembershipModule().getRoles(getRealUser(securityUser)));
+        } catch (NoSuchUserException e) {
+            return new ArrayList<SecurityGroup>();
+        } catch (IdentityException e) {
+            log.error(e);
+            return new ArrayList<SecurityGroup>();
+        } catch (PortalSecurityException e) {
+            log.error(e);
+            return new ArrayList<SecurityGroup>();
+        }
+    }
+
+    public String getDisplayName(RestrictedSecurityUser securityUser) {
+        try {
+            return getRealUser(securityUser).getUserName();
+        } catch (NoSuchUserException e) {
+            return "<deleted (id = " + securityUser.getExternalId() + ">";
+        } catch (PortalSecurityException e) {
+            return "<? " + e.getMessage() + ">";
+        }
+    }
+
+    public String getDisplayName(RestrictedSecurityGroup securityGroup) {
+        try {
+            return getRealRole(securityGroup).getDisplayName();
+        } catch (PortalSecurityException e) {
+            return "<? " + e.getMessage() + ">";
+        }
+    }
+}
\ No newline at end of file

Added: trunk/src/portal/org/jboss/blog/session/security/external/PortalSecurityException.java
===================================================================
--- trunk/src/portal/org/jboss/blog/session/security/external/PortalSecurityException.java	                        (rev 0)
+++ trunk/src/portal/org/jboss/blog/session/security/external/PortalSecurityException.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -0,0 +1,23 @@
+package org.jboss.blog.session.security.external;
+
+import javax.naming.NamingException;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class PortalSecurityException extends Exception {
+    public PortalSecurityException() {
+    }
+
+    public PortalSecurityException(String message) {
+        super(message);
+    }
+
+    public PortalSecurityException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public PortalSecurityException(Throwable cause) {
+        super(cause);
+    }
+}

Modified: trunk/src/shotoku/org/jboss/blog/session/feed/mod/ShotokuModBean.java
===================================================================
--- trunk/src/shotoku/org/jboss/blog/session/feed/mod/ShotokuModBean.java	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/src/shotoku/org/jboss/blog/session/feed/mod/ShotokuModBean.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -11,18 +11,20 @@
 import org.jboss.blog.model.Post;
 import org.jboss.blog.session.feed.InvalidFeedTypeException;
 import org.jboss.blog.session.shotoku.ShotokuFeedService;
+import org.jboss.blog.session.shotoku.PostContentTooLargeException;
 import org.jboss.shotoku.exceptions.RepositoryException;
 
 import javax.persistence.EntityManager;
 import javax.faces.application.FacesMessage;
 import java.util.List;
+import java.io.Serializable;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Scope(ScopeType.CONVERSATION)
 @Name("shotokuFeedMod")
-public class ShotokuModBean {
+public class ShotokuModBean implements Serializable {
     @In
     private FeedModBean feedMod;
 
@@ -102,6 +104,9 @@
         } catch (RepositoryException e) {
             setPathOk(false);
             setPathException(e);
+        } catch (PostContentTooLargeException e) {
+            setPathOk(false);
+            setPathException(e);
         }
     }
 

Modified: trunk/src/shotoku/org/jboss/blog/session/feed/update/ShotokuFeedUpdate.java
===================================================================
--- trunk/src/shotoku/org/jboss/blog/session/feed/update/ShotokuFeedUpdate.java	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/src/shotoku/org/jboss/blog/session/feed/update/ShotokuFeedUpdate.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -6,6 +6,7 @@
 import org.jboss.blog.session.update.UpdateException;
 import org.jboss.blog.session.feed.lock.FeedsLocksBean;
 import org.jboss.blog.session.shotoku.ShotokuFeedService;
+import org.jboss.blog.session.shotoku.PostContentTooLargeException;
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
@@ -40,6 +41,8 @@
                 posts = shotokuFeedService.getPosts(feed);
             } catch (RepositoryException e) {
                 throw new UpdateException(e);
+            } catch (PostContentTooLargeException e) {
+                throw new UpdateException(e);
             }
 
             mergeService.merge(feed, posts);

Added: trunk/src/shotoku/org/jboss/blog/session/shotoku/PostContentTooLargeException.java
===================================================================
--- trunk/src/shotoku/org/jboss/blog/session/shotoku/PostContentTooLargeException.java	                        (rev 0)
+++ trunk/src/shotoku/org/jboss/blog/session/shotoku/PostContentTooLargeException.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -0,0 +1,21 @@
+package org.jboss.blog.session.shotoku;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class PostContentTooLargeException extends Exception {
+    public PostContentTooLargeException() {
+    }
+
+    public PostContentTooLargeException(String message) {
+        super(message);
+    }
+
+    public PostContentTooLargeException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public PostContentTooLargeException(Throwable cause) {
+        super(cause);
+    }
+}

Modified: trunk/src/shotoku/org/jboss/blog/session/shotoku/ShotokuFeedService.java
===================================================================
--- trunk/src/shotoku/org/jboss/blog/session/shotoku/ShotokuFeedService.java	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/src/shotoku/org/jboss/blog/session/shotoku/ShotokuFeedService.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -31,7 +31,7 @@
     @In
     private LinkService linkService;
 
-    public List<Post> getPosts(ShotokuFeed feed) throws RepositoryException {
+    public List<Post> getPosts(ShotokuFeed feed) throws RepositoryException, PostContentTooLargeException {
         ContentManager cm = ContentManager.getContentManager(feed.getCmId(), feed.getCmPath());
 
         List<Post> posts = new ArrayList<Post>();
@@ -68,7 +68,12 @@
                     post.getImages().add(new Image(post, linkService.getServerAddress() + '/' + thumbnail));
                 }
             } else {
-                post.setContent(node.getContent());
+                if (node.getLength() > 1000000) {
+                    throw new PostContentTooLargeException("The content for node: '" + node.getFullName() +
+                        "' is too large for a post.");
+                }
+
+                post.setContent(node.getContent());    
             }
 
             posts.add(post);

Modified: trunk/src/test/org/jboss/blog/session/merge/test/GenericsExample1.java
===================================================================
--- trunk/src/test/org/jboss/blog/session/merge/test/GenericsExample1.java	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/src/test/org/jboss/blog/session/merge/test/GenericsExample1.java	2008-03-03 13:05:35 UTC (rev 234)
@@ -19,12 +19,17 @@
     public static void test1(List<Long> list2) {
         new GenericsExample1<List<? extends Number>>().process(list2);
     }
+    
+    public static void test2(List<? extends Number> list1, List<Long> list2) {
+        GenericsExample1<List<? extends Number>> x = new GenericsExample1<List<? extends Number>>();
+        //GenericsExample1<List<? extends Number>> y = getInstance(list1);
+    }
 
     //
 
-    public void test2(List<? extends Number> list1) { }
+    public void test3(List<? extends Number> list1) { }
 
-    public void test3(List<Long> list2) {
-        test2(list2);
+    public void test4(List<Long> list2) {
+        test3(list2);
     }
 }

Modified: trunk/view/index.html
===================================================================
--- trunk/view/index.html	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/view/index.html	2008-03-03 13:05:35 UTC (rev 234)
@@ -1,5 +1 @@
-<html>
-<head>
-  <meta http-equiv="Refresh" content="0; URL=home.seam">
-</head>
-</html>
\ No newline at end of file
+<html />
\ No newline at end of file

Modified: trunk/view/layout/menu.xhtml
===================================================================
--- trunk/view/layout/menu.xhtml	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/view/layout/menu.xhtml	2008-03-03 13:05:35 UTC (rev 234)
@@ -44,8 +44,11 @@
     <div id="primarynav">
         <ul>
             <li>
-                <s:link view="/home.xhtml" value="Home"/>
+                <a href="/">JBoss.ORG</a>
             </li>
+            <li>
+                <s:link view="/home.xhtml" value="Feeds home" propagation="none" />
+            </li>
             <s:fragment rendered="#{identity.hasPermission('management', 'view')}">
                 <li>
                     <s:link value="Manage" view="/manage/index.xhtml" propagation="none" />

Modified: trunk/view/stylesheet/blog.css
===================================================================
--- trunk/view/stylesheet/blog.css	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/view/stylesheet/blog.css	2008-03-03 13:05:35 UTC (rev 234)
@@ -194,3 +194,7 @@
 .messages {
     
 }
+
+.portlet_author_date {
+    font-style: italic;
+}

Modified: trunk/view-portlet/view.jsp
===================================================================
--- trunk/view-portlet/view.jsp	2008-03-01 17:48:47 UTC (rev 233)
+++ trunk/view-portlet/view.jsp	2008-03-03 13:05:35 UTC (rev 234)
@@ -11,36 +11,58 @@
 
 <portlet:defineObjects />
 
+<head>
+    <link href="/blogs/stylesheet/blog.css" rel="stylesheet" type="text/css" />
+</head>
+
 <%
     Feed feed = (Feed) request.getAttribute("feed");
     LinkService linkService = (LinkService) request.getAttribute("linkService");
 %>
 
-Now viewing feed '${feed.title}'.
-<a href="<%= linkService.generateFeedPageLink(feed) %>">View full feed on JBoss Feeds Central</a>
+<div>
+    <c:forEach items="${posts}" var="post">
+        <%
+            Post post = (Post) pageContext.getAttribute("post");
+        %>
 
-<br />
-<br />
+        <p>
+            <b>
+                <a href="<%= linkService.generatePostLink(post) %>">${post.title}</a>
+            </b>
+            <br />
 
-<c:forEach items="${posts}" var="post">
-    <%
-        Post post = (Post) pageContext.getAttribute("post");
-    %>
-    <a href="<%= linkService.generatePostLink(post) %>">${post.title}</a>
-    <br />
+            <c:if test="${showDate}">
+                <span class="portlet_author_date">
+                    Posted on <%= SimpleDateFormat.getDateTimeInstance().format(post.getPublished()) %> by
+                    <%= post.getEffectiveAuthor() %>.
+                </span>
+            </c:if>
 
-    <c:if test="${showDate}">
-        Posted on <%= SimpleDateFormat.getDateTimeInstance().format(post.getPublished()) %> by
-        <%= post.getEffectiveAuthor() %>.
+            <c:if test="${summaryLength > 0}">
+                <br />
+                <br />
+                
+                <span>
+                    <%= StringTools.createSummary(post.getContent(), (Integer) request.getAttribute("summaryLength")) %>
+                </span>
+            </c:if>
+        </p>
+    </c:forEach>
 
-        <br/>
-    </c:if>
-
-    <c:if test="${summaryLength > 0}">
-        <%= StringTools.createSummary(post.getContent(), (Integer) request.getAttribute("summaryLength")) %>
-        
-        <br />
-    </c:if>
-    
-    <br />
-</c:forEach>
\ No newline at end of file
+    <div class="blogFeedNav">
+        <ul>
+            <li>
+                <a href="<%= linkService.generateFeedPageLink(feed) %>"
+                   class="standardLinkArrow">
+                    View full feed
+                </a>
+            </li>
+            <li>
+                <a href="/blogs" class="standardLinkArrow">
+                    Go to JBoss Feeds Central
+                </a>
+            </li>
+        </ul>
+    </div>
+</div>
\ No newline at end of file

Copied: trunk/view-portlet/view_main.jsp (from rev 225, trunk/view-portlet/view.jsp)
===================================================================
--- trunk/view-portlet/view_main.jsp	                        (rev 0)
+++ trunk/view-portlet/view_main.jsp	2008-03-03 13:05:35 UTC (rev 234)
@@ -0,0 +1,67 @@
+<%@ page import="org.jboss.blog.service.LinkService" %>
+<%@ page import="org.jboss.blog.model.feed.Feed" %>
+<%@ page import="org.jboss.blog.model.Post" %>
+<%@ page import="org.jboss.blog.tools.StringTools" %>
+<%@ page import="java.text.SimpleDateFormat" %>
+<%@ page language="java" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
+<%@ page isELIgnored ="false" %>
+
+<portlet:defineObjects />
+
+<head>
+    <link href="/blogs/stylesheet/blog.css" rel="stylesheet" type="text/css" />
+</head>
+
+<%
+    Feed feed = (Feed) request.getAttribute("feed");
+    LinkService linkService = (LinkService) request.getAttribute("linkService");
+%>
+
+<div class="homespot">
+    <h3>Latest Blogs</h3>
+
+    <c:forEach items="${posts}" var="post">
+        <%
+            Post post = (Post) pageContext.getAttribute("post");
+        %>
+
+        <p>
+            <b>
+                <a href="<%= linkService.generatePostLink(post) %>">${post.title}</a>
+            </b>
+            <br />
+
+            <c:if test="${showDate}">
+                <span class="portlet_author_date">
+                    Posted on <%= SimpleDateFormat.getDateTimeInstance().format(post.getPublished()) %> by
+                    <%= post.getEffectiveAuthor() %>.
+                </span>
+            </c:if>
+
+            <c:if test="${summaryLength > 0}">
+                <span>
+                    <%= StringTools.createSummary(post.getContent(), (Integer) request.getAttribute("summaryLength")) %>
+                </span>
+            </c:if>
+        </p>
+    </c:forEach>
+
+    <div class="blogFeedNav">
+        <ul>
+            <li>
+                <a href="<%= linkService.generateFeedPageLink(feed) %>"
+                   class="standardLinkArrow">
+                    View full feed
+                </a>
+            </li>
+            <li>
+                <a href="/blogs" class="standardLinkArrow">
+                    Go to JBoss Feeds Central
+                </a>
+            </li>
+        </ul>
+    </div>
+</div>
\ No newline at end of file




More information about the jboss-cvs-commits mailing list