[jboss-cvs] JBossBlog SVN: r225 - in trunk: lib and 24 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Feb 27 10:51:16 EST 2008


Author: adamw
Date: 2008-02-27 10:51:16 -0500 (Wed, 27 Feb 2008)
New Revision: 225

Added:
   trunk/resources-portlet/
   trunk/resources-portlet/WEB-INF/
   trunk/resources-portlet/WEB-INF/jboss-portlet.xml
   trunk/resources-portlet/WEB-INF/portlet-instances.xml
   trunk/resources-portlet/WEB-INF/portlet-object.xml
   trunk/resources-portlet/WEB-INF/portlet.xml
   trunk/resources-portlet/WEB-INF/web.xml
   trunk/src/action/org/jboss/blog/session/tools/StringToolsBean.java
   trunk/src/action/org/jboss/blog/session/view/LinkServiceImpl.java
   trunk/src/portlet/
   trunk/src/portlet/org/
   trunk/src/portlet/org/jboss/
   trunk/src/portlet/org/jboss/blog/
   trunk/src/portlet/org/jboss/blog/portlet/
   trunk/src/portlet/org/jboss/blog/portlet/BlogPortlet.java
   trunk/src/services/org/jboss/blog/service/LinkService.java
   trunk/view-portlet/
   trunk/view-portlet/feed_not_found.jsp
   trunk/view-portlet/view.jsp
Removed:
   trunk/src/action/org/jboss/blog/session/tools/StringToolsBean.java
Modified:
   trunk/blog.iml
   trunk/build.xml
   trunk/lib/jstl.jar
   trunk/resources/META-INF/application.xml
   trunk/resources/WEB-INF/components.xml
   trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java
   trunk/src/action/org/jboss/blog/session/converter/PostConverter.java
   trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
   trunk/src/action/org/jboss/blog/session/feed/InvalidFeedTypeException.java
   trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java
   trunk/src/action/org/jboss/blog/session/feed/mod/RemoteFeedModBean.java
   trunk/src/action/org/jboss/blog/session/feed/type/FeedTypes.java
   trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java
   trunk/src/action/org/jboss/blog/session/update/UpdateHandler.java
   trunk/src/action/org/jboss/blog/session/xml/velocity/tools/XmlTools.java
   trunk/src/services/org/jboss/blog/service/FeedNotFoundException.java
   trunk/src/services/org/jboss/blog/service/PostNotFoundException.java
   trunk/src/tools/org/jboss/blog/tools/StringTools.java
   trunk/view/layout/template.xhtml
   trunk/view/view/feed.xhtml
Log:


Modified: trunk/blog.iml
===================================================================
--- trunk/blog.iml	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/blog.iml	2008-02-27 15:51:16 UTC (rev 225)
@@ -22,6 +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/services" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/tools" isTestSource="false" />
@@ -177,6 +178,15 @@
         <SOURCES />
       </library>
     </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/portal-portlet-jsr168api-lib.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
     <orderEntryProperties />
   </component>
 </module>

Modified: trunk/build.xml
===================================================================
--- trunk/build.xml	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/build.xml	2008-02-27 15:51:16 UTC (rev 225)
@@ -15,15 +15,18 @@
     <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="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="portlet.name" value="${project.name}-portlet.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="war.dir" value="exploded-archives/${project.name}.war" />
+    <property name="portlet.dir" value="exploded-archives/${portlet.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" />
@@ -31,6 +34,7 @@
     <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="war.deploy.dir" value="${ear.deploy.dir}/${project.name}.war" />
+    <property name="portlet.deploy.dir" value="${ear.deploy.dir}/${portlet.name}" />
     <property name="testng.jar" value="${basedir}/lib/testng.jar" />
     <property name="javac.debug" value="true" />
     <property name="javac.deprecation" value="false" />
@@ -60,6 +64,10 @@
         <mkdir dir="${jar.api.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="${dist.dir}" />
     </target>
 
@@ -81,6 +89,13 @@
                nowarn="on">
             <src path="${src.action.dir}" />
         </javac>
+        <javac classpathref="build.impl.classpath"
+               destdir="${portlet.dir}/WEB-INF/classes"
+               debug="${javac.debug}"
+               deprecation="${javac.deprecation}"
+               nowarn="on">
+            <src path="${src.portlet.dir}" />
+        </javac>
     </target>
 
     <target name="jar" depends="compile"
@@ -145,6 +160,23 @@
                 <include name="messages*.properties"/>
             </fileset>
         </copy>
+
+        <copy todir="${portlet.dir}">
+            <fileset dir="${basedir}/resources-portlet">
+                <include name="**/*"/>
+            </fileset>
+        </copy>
+        <copy todir="${portlet.dir}">
+            <fileset dir="${basedir}/view-portlet">
+                <include name="**/*"/>
+            </fileset>
+        </copy>
+        <copy todir="${portlet.dir}/WEB-INF/lib">
+            <fileset dir="${basedir}/lib">
+                <include name="jstl.jar" />
+                <include name="standard.jar" />
+            </fileset>
+        </copy>
     </target>
 
     <target name="ear" description="Build the EAR">
@@ -210,6 +242,7 @@
             description="Package the archives">
         <jar jarfile="${dist.dir}/${jar.impl.name}" basedir="${jar.impl.dir}"/>
         <jar jarfile="${dist.dir}/${project.name}.war" basedir="${war.dir}"/>
+        <jar jarfile="${dist.dir}/${portlet.name}" basedir="${portlet.dir}"/>
         <jar jarfile="${dist.dir}/${project.name}.ear">
             <fileset dir="${ear.dir}"/>
             <fileset dir="${dist.dir}">
@@ -247,6 +280,7 @@
 
         <mkdir dir="${jar.deploy.dir}"/>
         <mkdir dir="${war.deploy.dir}"/>
+        <mkdir dir="${portlet.deploy.dir}"/>
 
         <copy todir="${jar.deploy.dir}">
             <fileset dir="${jar.impl.dir}"/>
@@ -254,6 +288,9 @@
         <copy todir="${war.deploy.dir}">
             <fileset dir="${war.dir}"/>
         </copy>
+        <copy todir="${portlet.deploy.dir}">
+            <fileset dir="${portlet.dir}"/>
+        </copy>
         <copy todir="${ear.deploy.dir}">
             <fileset dir="${ear.dir}"/>
         </copy>
@@ -303,6 +340,7 @@
         <delete dir="${dist.dir}"/>
         <delete dir="${ear.dir}"/>
         <delete dir="${war.dir}"/>
+        <delete dir="${portlet.dir}"/>
         <delete dir="${jar.impl.dir}"/>
         <delete dir="${jar.api.dir}"/>
         <delete dir="${src.schema.dir}" failonerror="no"/>

Modified: trunk/lib/jstl.jar
===================================================================
(Binary files differ)

Modified: trunk/resources/META-INF/application.xml
===================================================================
--- trunk/resources/META-INF/application.xml	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/resources/META-INF/application.xml	2008-02-27 15:51:16 UTC (rev 225)
@@ -21,5 +21,12 @@
          <context-root>/blog</context-root>
       </web>
    </module>
+
+   <module>
+      <web>
+         <web-uri>blog-portlet.war</web-uri>
+         <context-root>/blog-portlet</context-root>
+      </web>
+   </module>
     
 </application>

Modified: trunk/resources/WEB-INF/components.xml
===================================================================
--- trunk/resources/WEB-INF/components.xml	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/resources/WEB-INF/components.xml	2008-02-27 15:51:16 UTC (rev 225)
@@ -32,14 +32,14 @@
 
     <security:identity authenticate-method="#{authenticator.authenticate}"
                        security-rules="#{securityRules}" />
-    
+
     <async:thread-pool-dispatcher />
 
     <drools:rule-base name="securityRules">
-       <drools:rule-files>
-           <value>/META-INF/security.drl</value>
-       </drools:rule-files>
-   </drools:rule-base>    
+        <drools:rule-files>
+            <value>/META-INF/security.drl</value>
+        </drools:rule-files>
+    </drools:rule-base>
 
     <event type="org.jboss.seam.notLoggedIn">
         <action execute="#{redirect.captureCurrentView}"/>

Added: trunk/resources-portlet/WEB-INF/jboss-portlet.xml
===================================================================
--- trunk/resources-portlet/WEB-INF/jboss-portlet.xml	                        (rev 0)
+++ trunk/resources-portlet/WEB-INF/jboss-portlet.xml	2008-02-27 15:51:16 UTC (rev 225)
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE portlet-app PUBLIC
+        "-//JBoss Portal//DTD JBoss Portlet 2.6//EN"
+        "http://www.jboss.org/portal/dtd/jboss-portlet_2_6.dtd">
+<portlet-app>
+    <portlet>
+        <portlet-name>BlogPortlet</portlet-name>
+    </portlet>
+</portlet-app>
\ 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-02-27 15:51:16 UTC (rev 225)
@@ -0,0 +1,44 @@
+<?xml version="1.0" standalone="yes"?>
+<!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>BlogPortletInstance1</instance-id>
+            <portlet-ref>BlogPortlet</portlet-ref>
+            <preferences>
+                <preference>
+                    <name>feedName</name>
+                    <value>bob2</value>
+                </preference> 
+            </preferences>
+        </instance>
+    </deployment>
+    <deployment>
+        <if-exists>overwrite</if-exists>
+        <instance>
+            <instance-id>BlogPortletInstance2</instance-id>
+            <portlet-ref>BlogPortlet</portlet-ref>
+            <preferences>
+                <preference>
+                    <name>feedName</name>
+                    <value>bob2</value>
+                </preference>
+                <preference>
+                    <name>summaryLength</name>
+                    <value>0</value>
+                </preference>
+                <preference>
+                    <name>showDate</name>
+                    <value>false</value>
+                </preference>
+                <preference>
+                    <name>numberOfPostsPerPage</name>
+                    <value>10</value>
+                </preference>
+            </preferences>
+        </instance>
+    </deployment>
+</deployments>
\ No newline at end of file

Added: trunk/resources-portlet/WEB-INF/portlet-object.xml
===================================================================
--- trunk/resources-portlet/WEB-INF/portlet-object.xml	                        (rev 0)
+++ trunk/resources-portlet/WEB-INF/portlet-object.xml	2008-02-27 15:51:16 UTC (rev 225)
@@ -0,0 +1,26 @@
+<?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>BlogPortletWindow1</window-name>
+            <instance-ref>BlogPortletInstance1</instance-ref>
+            <region>center</region>
+            <height>1</height>
+        </window>
+    </deployment>
+    <deployment>
+        <parent-ref>default.default</parent-ref>
+        <if-exists>overwrite</if-exists>
+        <window>
+            <window-name>BlogPortletWindow2</window-name>
+            <instance-ref>BlogPortletInstance2</instance-ref>
+            <region>center</region>
+            <height>2</height>
+        </window>
+    </deployment>
+</deployments>
\ No newline at end of file

Added: trunk/resources-portlet/WEB-INF/portlet.xml
===================================================================
--- trunk/resources-portlet/WEB-INF/portlet.xml	                        (rev 0)
+++ trunk/resources-portlet/WEB-INF/portlet.xml	2008-02-27 15:51:16 UTC (rev 225)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd
+                                 http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
+             version="1.0">
+    <portlet>
+        <portlet-name>BlogPortlet</portlet-name>
+        <portlet-class>org.jboss.blog.portlet.BlogPortlet</portlet-class>
+        <supports>
+            <mime-type>text/html</mime-type>
+            <portlet-mode>VIEW</portlet-mode>
+        </supports>
+        <supported-locale>en</supported-locale>
+        <expiration-cache>0</expiration-cache>
+        <portlet-info>
+            <title>JBoss Blog Portlet</title>
+        </portlet-info>
+        <portlet-preferences>
+            <preference>
+                <name>feedName</name>
+            </preference>
+            <preference>
+                <name>numberOfPostsPerPage</name>
+                <value>5</value>
+            </preference>
+            <preference>
+                <name>summaryLength</name>
+                <value>200</value>
+            </preference>
+            <preference>
+                <name>showDate</name>
+                <value>true</value>
+            </preference>
+        </portlet-preferences>
+    </portlet>
+</portlet-app>
+

Added: trunk/resources-portlet/WEB-INF/web.xml
===================================================================
--- trunk/resources-portlet/WEB-INF/web.xml	                        (rev 0)
+++ trunk/resources-portlet/WEB-INF/web.xml	2008-02-27 15:51:16 UTC (rev 225)
@@ -0,0 +1,24 @@
+<?xml version="1.0" ?>
+<web-app 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/web-app_2_5.xsd"
+         version="2.5">
+    <context-param>
+        <param-name>sourceBasePath</param-name>
+        <param-value>/Users/adamwarski/blog/view-portlet</param-value>
+    </context-param>
+
+    <filter>
+        <filter-name>Resources Filter</filter-name>
+        <filter-class>org.jboss.shotoku.web.ResourcesFilter</filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>Resources Filter</filter-name>
+        <url-pattern>/*</url-pattern>
+        <dispatcher>ERROR</dispatcher>
+        <dispatcher>FORWARD</dispatcher>
+        <dispatcher>INCLUDE</dispatcher>
+        <dispatcher>REQUEST</dispatcher>
+    </filter-mapping>
+</web-app>

Modified: trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -2,6 +2,7 @@
 
 import org.jboss.blog.model.feed.Feed;
 import org.jboss.blog.service.FeedsService;
+import org.jboss.blog.service.FeedNotFoundException;
 import org.jboss.seam.Component;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.Transactional;
@@ -21,8 +22,12 @@
     @Transactional
     public Object getAsObject(FacesContext context, UIComponent cmp, String value) {
         FeedsService feedsService = (FeedsService) Component.getInstance("feedsService");
-        
-        return feedsService.getFeed(value);
+
+        try {
+            return feedsService.getFeed(value);
+        } catch (FeedNotFoundException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     public String getAsString(FacesContext context, UIComponent cmp, Object value) {

Modified: trunk/src/action/org/jboss/blog/session/converter/PostConverter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/converter/PostConverter.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/action/org/jboss/blog/session/converter/PostConverter.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -2,7 +2,9 @@
 
 import org.jboss.blog.model.Post;
 import org.jboss.blog.service.FeedsService;
+import org.jboss.blog.service.PostNotFoundException;
 import org.jboss.seam.Component;
+import org.jboss.seam.log.Log;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.Transactional;
 import org.jboss.seam.annotations.faces.Converter;
@@ -22,7 +24,11 @@
     public Object getAsObject(FacesContext context, UIComponent cmp, String value) {
         FeedsService feedsService = (FeedsService) Component.getInstance("feedsService");
 
-        return feedsService.getPost(value);
+        try {
+            return feedsService.getPost(value);
+        } catch (PostNotFoundException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     public String getAsString(FacesContext context, UIComponent cmp, Object value) {

Modified: trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -21,6 +21,7 @@
 import javax.persistence.NoResultException;
 import javax.interceptor.Interceptors;
 import java.util.List;
+import java.util.ArrayList;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -40,28 +41,43 @@
 
     public Post getPost(String titleAsId) throws PostNotFoundException {
         log.debug("Reading post '#0' from the DB.", titleAsId);
+
+        if (titleAsId == null) {
+            throw new PostNotFoundException(titleAsId);
+        }
+
         try {
             return (Post) entityManager.createQuery("select post from Post post where post.titleAsId = ?1")
                     .setParameter(1, titleAsId).setHint("org.hibernate.cacheable", Boolean.TRUE).getSingleResult();
         } catch (NoResultException e) {
-            throw new PostNotFoundException();
+            throw new PostNotFoundException(titleAsId);
         }
     }
 
     public Feed getFeed(String feedName) throws FeedNotFoundException {
         log.debug("Reading feed '#0' from the DB.", feedName);
+
+        if (feedName == null) {
+            throw new FeedNotFoundException(feedName);
+        }
+
         try {
             return (Feed) entityManager.createQuery("select feed from Feed feed where feed.name = ?1")
                     .setParameter(1, feedName).setHint("org.hibernate.cacheable", Boolean.TRUE).getSingleResult();
         } catch (NoResultException e) {
-            throw new FeedNotFoundException();
+            throw new FeedNotFoundException(feedName);
         }
     }
 
     @Interceptors(FeedsServiceGetPostsInterceptor.class)
     public List<? extends RestrictedPost> getPosts(RestrictedFeed feed, int from, int to) {
         log.debug("Reading feed '#0' posts from the DB, from #1 to #2.", feed.getName(), from, to);
-        return feedTypes.getFeedDao(feed).getPosts(from, to);
+        try {
+            return feedTypes.getFeedDao(feed).getPosts(from, to);
+        } catch (InvalidFeedTypeException e) {
+            log.error(e);
+            return new ArrayList<RestrictedPost>();
+        }
     }
 
     @Remove

Modified: trunk/src/action/org/jboss/blog/session/feed/InvalidFeedTypeException.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/InvalidFeedTypeException.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/action/org/jboss/blog/session/feed/InvalidFeedTypeException.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -3,7 +3,7 @@
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
-public class InvalidFeedTypeException extends RuntimeException {
+public class InvalidFeedTypeException extends Exception {
     public InvalidFeedTypeException() {
     }
 

Modified: trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -53,7 +53,7 @@
 
     private List<PostFilter> globalFilters;
 
-    public AggregatedFeed getAggregatedFeed() {
+    public AggregatedFeed getAggregatedFeed() throws InvalidFeedTypeException {
         if (aggregatedFeed == null) {
             if (feedMod.getFeed() == null) {
                 aggregatedFeed = new AggregatedFeed();
@@ -103,7 +103,7 @@
     }
 
     @Create
-    public void populateLists() {
+    public void populateLists() throws InvalidFeedTypeException {
         // Populating available groups
         availableGroups = groupsService.getAllGroups();
         availableFeeds = new ArrayList<Feed>();
@@ -188,7 +188,7 @@
         }
     }
 
-    private void save() {
+    private void save() throws InvalidFeedTypeException {
         // Saving feeds and filters
         saveSelectedEntities(getAggregatedFeed().getFeeds(), selectedFeeds, selectedFeedsFilters);
 
@@ -199,12 +199,12 @@
         getAggregatedFeed().setGlobalFilter(new AndFilter(globalFilters));
     }
 
-    public void saveNew() {
+    public void saveNew() throws InvalidFeedTypeException {
         save();
     }
 
     @Restrict("#{identity.hasPermission('feed', 'edit', feedMod.feed, feedMod.feed.group)}")
-    public void saveExisting() {
+    public void saveExisting() throws InvalidFeedTypeException {
         save();
         entityManager.flush();
 

Modified: trunk/src/action/org/jboss/blog/session/feed/mod/RemoteFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/RemoteFeedModBean.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/RemoteFeedModBean.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -51,7 +51,7 @@
     private boolean parseOk;
     private Exception parseException;
 
-    public RemoteFeed getRemoteFeed() {
+    public RemoteFeed getRemoteFeed() throws InvalidFeedTypeException {
         if (remoteFeed == null) {
             if (feedMod.getFeed() == null) {
                 remoteFeed = new RemoteFeed();
@@ -88,7 +88,7 @@
         this.parseException = parseException;
     }
 
-    public void unsetAccepted() {
+    public void unsetAccepted() throws InvalidFeedTypeException {
         getRemoteFeed().setAccepted(false);
     }
 
@@ -108,7 +108,7 @@
         }        
     }
 
-    public void parseFeed() {
+    public void parseFeed() throws InvalidFeedTypeException {
         try {
             parsedFeed = parserService.parse(getRemoteFeed().getRemoteLink());
             validateFeedAndPosts(parsedFeed);
@@ -119,7 +119,7 @@
         }
     }
 
-    public void saveNew() {
+    public void saveNew() throws InvalidFeedTypeException {
         getRemoteFeed().setAuthor(parsedFeed.getAuthor());
         getRemoteFeed().setDescription(parsedFeed.getDescription());
         getRemoteFeed().setLink(parsedFeed.getLink());
@@ -131,7 +131,7 @@
     }
 
     @Restrict("#{identity.hasPermission('feed', 'edit', feedMod.feed, feedMod.feed.group)}")
-    public void saveExisting() {
+    public void saveExisting() throws InvalidFeedTypeException {
         getRemoteFeed().setLink(parsedFeed.getLink());
 
         entityManager.flush();
@@ -143,7 +143,7 @@
     }
 
     @Restrict("#{identity.hasPermission('feed', 'edit', feedMod.feed, feedMod.feed.group)}")
-    public void saveOnlyPostAuthorType() {
+    public void saveOnlyPostAuthorType() throws InvalidFeedTypeException {
         PostAuthorType newPostAuthorType = getRemoteFeed().getPostAuthorType();
 
         entityManager.refresh(getRemoteFeed());

Modified: trunk/src/action/org/jboss/blog/session/feed/type/FeedTypes.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/type/FeedTypes.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/action/org/jboss/blog/session/feed/type/FeedTypes.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -47,7 +47,7 @@
         }
     }
 
-    public FeedDao getFeedDao(RestrictedFeed feed) {
+    public FeedDao getFeedDao(RestrictedFeed feed) throws InvalidFeedTypeException {
         try {
             return feedDaos.get(feed.getClass()).newInstance(feed);
         } catch (InstantiationException e) {

Modified: trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -6,6 +6,7 @@
 import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.model.Image;
 import org.jboss.blog.service.FeedsService;
+import org.jboss.blog.service.PostNotFoundException;
 import org.jboss.blog.tools.GeneralTools;
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.core.Events;
@@ -143,9 +144,13 @@
                     savePost(feed, mergeFrom.getCurrent());
                     mergeFrom.next();
                 } else if (compare == 0) {
-                    mergePosts(feedsService.getPost(mergeTo.getCurrent().getTitleAsId()), mergeFrom.getCurrent());
-                    mergeFrom.next();
-                    mergeTo.next();
+                    try {
+                        mergePosts(feedsService.getPost(mergeTo.getCurrent().getTitleAsId()), mergeFrom.getCurrent());
+                        mergeTo.next();
+                        mergeFrom.next();
+                    } catch (PostNotFoundException e) {
+                        mergeTo.next();
+                    }
                 } else {
                     // mergeTo post is after mergeFrom post
                     // proceeding to the next mergeTo post (if exists)

Deleted: trunk/src/action/org/jboss/blog/session/tools/StringToolsBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/tools/StringToolsBean.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/action/org/jboss/blog/session/tools/StringToolsBean.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -1,30 +0,0 @@
-package org.jboss.blog.session.tools;
-
-import org.jboss.blog.tools.StringTools;
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.AutoCreate;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-
-/**
- * @author <a href="mailto:adam at warski.org">Adam Warski</a>
- */
- at Name("stringTools")
- at Scope(ScopeType.APPLICATION)
- at AutoCreate
-public class StringToolsBean {
-    public String createSummary(String s) {
-        if (s == null) {
-            return null;
-        }
-
-        s = StringTools.stripHtml(s);
-
-        if (s.length() > 1000) {
-            s = s.substring(0, 1000);
-            return s + "...";
-        } else {
-            return s;
-        }
-    }
-}

Added: trunk/src/action/org/jboss/blog/session/tools/StringToolsBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/tools/StringToolsBean.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/tools/StringToolsBean.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -0,0 +1,19 @@
+package org.jboss.blog.session.tools;
+
+import org.jboss.blog.tools.StringTools;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("stringTools")
+ at Scope(ScopeType.APPLICATION)
+ at AutoCreate
+public class StringToolsBean {
+    public String createSummary(String s) {
+        return StringTools.createSummary(s, 1000);
+    }
+}

Modified: trunk/src/action/org/jboss/blog/session/update/UpdateHandler.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/update/UpdateHandler.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/action/org/jboss/blog/session/update/UpdateHandler.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -5,6 +5,7 @@
 import org.jboss.blog.model.Group;
 import org.jboss.blog.service.GroupsService;
 import org.jboss.blog.session.feed.type.FeedTypes;
+import org.jboss.blog.session.feed.InvalidFeedTypeException;
 import org.jboss.seam.annotations.AutoCreate;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
@@ -42,6 +43,8 @@
             feedTypes.getFeedDao(feed).update();
         } catch (UpdateException e) {
             updateManager.addFeedUpdateException(feed.getName(), e);
+        } catch (InvalidFeedTypeException e) {
+            updateManager.addFeedUpdateException(feed.getName(), new UpdateException(e));
         }
     }
 

Copied: trunk/src/action/org/jboss/blog/session/view/LinkServiceImpl.java (from rev 216, trunk/src/action/org/jboss/blog/session/view/LinkServiceBean.java)
===================================================================
--- trunk/src/action/org/jboss/blog/session/view/LinkServiceImpl.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/view/LinkServiceImpl.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -0,0 +1,53 @@
+package org.jboss.blog.session.view;
+
+import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.Post;
+import org.jboss.blog.model.XmlType;
+import org.jboss.blog.service.LinkService;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.Name;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateless;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at AutoCreate
+ at Stateless
+ at Name("linkService")
+public class LinkServiceImpl implements LinkService {
+    private String serverAddress;
+    private String contextName;
+
+    public String getServerAddress() {
+        return serverAddress;
+    }
+
+    public void setServerAddress(String serverAddress) {
+        this.serverAddress = serverAddress;
+    }
+
+    public String getContextName() {
+        return contextName;
+    }
+
+    public void setContextName(String contextName) {
+        this.contextName = contextName;
+    }
+
+    public String generateFeedLink(Feed feed, XmlType type) {
+        return serverAddress + "/" + contextName + "/feed/" + feed.getName() + "?type=" + type;
+    }
+
+    public String generateFeedPageLink(Feed feed) {
+        return serverAddress + "/" + contextName + "/view/" + feed.getName();
+    }
+
+    public String generatePostLink(Post post) {
+        return serverAddress + "/" + contextName + "/post/" + post.getTitleAsId();
+    }
+
+    @Remove
+    public void remove() { }
+}

Modified: trunk/src/action/org/jboss/blog/session/xml/velocity/tools/XmlTools.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/xml/velocity/tools/XmlTools.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/action/org/jboss/blog/session/xml/velocity/tools/XmlTools.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -3,7 +3,7 @@
 import org.jboss.blog.model.feed.Feed;
 import org.jboss.blog.model.Post;
 import org.jboss.blog.model.XmlType;
-import org.jboss.blog.session.view.LinkServiceBean;
+import org.jboss.blog.service.LinkService;
 import org.jboss.seam.Component;
 
 import java.text.SimpleDateFormat;
@@ -30,8 +30,8 @@
         return cal.getTime();
     }
 
-    private LinkServiceBean getLinkService() {
-        return (LinkServiceBean) Component.getInstance("linkService");
+    private LinkService getLinkService() {
+        return (LinkService) Component.getInstance("linkService");
     }
 
     public String feedPageLink(Feed feed) {

Added: trunk/src/portlet/org/jboss/blog/portlet/BlogPortlet.java
===================================================================
--- trunk/src/portlet/org/jboss/blog/portlet/BlogPortlet.java	                        (rev 0)
+++ trunk/src/portlet/org/jboss/blog/portlet/BlogPortlet.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -0,0 +1,75 @@
+package org.jboss.blog.portlet;
+
+import org.jboss.blog.service.FeedsService;
+import org.jboss.blog.service.LinkService;
+import org.jboss.blog.service.FeedNotFoundException;
+import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.RestrictedPost;
+import org.jboss.seam.Component;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.contexts.Lifecycle;
+
+import javax.portlet.*;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class BlogPortlet extends GenericPortlet {
+    protected void doView(RenderRequest request, RenderResponse response)
+            throws PortletException, IOException {
+        boolean createContexts = !Contexts.isEventContextActive() && !Contexts.isApplicationContextActive();
+        if (createContexts) {
+            Lifecycle.beginCall();
+        }
+
+        try {
+            // Getting the services
+            FeedsService feedsService = (FeedsService) Component.getInstance("feedsService");
+            LinkService linkService = (LinkService) Component.getInstance("linkService");
+
+            // Reading the preferences
+            PortletPreferences preferences = request.getPreferences();
+            String feedName = preferences.getValue("feedName", null);
+
+            String numberOfPostsPerPageString = preferences.getValue("numberOfPostsPerPage", "5");
+            int numberOfPostsPerPage = Integer.parseInt(numberOfPostsPerPageString);
+
+            String summaryLengthString = preferences.getValue("summaryLength", "200");
+            Integer summaryLength = Integer.valueOf(summaryLengthString);
+
+            String showDateString = preferences.getValue("showDate", "true");
+            Boolean showDate = Boolean.valueOf(showDateString);
+
+            response.setContentType("text/html");
+
+            try {
+                Feed feed = feedsService.getFeed(feedName);
+
+                // Reading posts
+                List<? extends RestrictedPost> posts = feedsService.getPosts(feed, 0, numberOfPostsPerPage);
+
+                // Setting request attributes
+                request.setAttribute("feed", feed);
+                request.setAttribute("posts", posts);
+                request.setAttribute("summaryLength", summaryLength);
+                request.setAttribute("showDate", showDate);
+                request.setAttribute("linkService", linkService);
+
+                // Including the jsp
+                PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/view.jsp");
+                rd.include(request, response);
+            } catch (FeedNotFoundException e) {
+                request.setAttribute("feedName", feedName);
+
+                PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/feed_not_found.jsp");
+                rd.include(request, response);
+            }
+        } finally {
+            if (createContexts) {
+                Lifecycle.endCall();
+            }
+        }
+    }
+}

Modified: trunk/src/services/org/jboss/blog/service/FeedNotFoundException.java
===================================================================
--- trunk/src/services/org/jboss/blog/service/FeedNotFoundException.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/services/org/jboss/blog/service/FeedNotFoundException.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -3,7 +3,7 @@
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
-public class FeedNotFoundException extends RuntimeException {
+public class FeedNotFoundException extends Exception {
     public FeedNotFoundException() {
     }
 

Added: trunk/src/services/org/jboss/blog/service/LinkService.java
===================================================================
--- trunk/src/services/org/jboss/blog/service/LinkService.java	                        (rev 0)
+++ trunk/src/services/org/jboss/blog/service/LinkService.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -0,0 +1,31 @@
+package org.jboss.blog.service;
+
+import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.XmlType;
+import org.jboss.blog.model.Post;
+
+import javax.ejb.Local;
+import javax.ejb.Remove;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Local
+public interface LinkService {
+    String getServerAddress();
+
+    void setServerAddress(String serverAddress);
+
+    String getContextName();
+
+    void setContextName(String contextName);
+
+    String generateFeedLink(Feed feed, XmlType type);
+
+    String generateFeedPageLink(Feed feed);
+
+    String generatePostLink(Post post);
+
+    @Remove
+    void remove();
+}

Modified: trunk/src/services/org/jboss/blog/service/PostNotFoundException.java
===================================================================
--- trunk/src/services/org/jboss/blog/service/PostNotFoundException.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/services/org/jboss/blog/service/PostNotFoundException.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -3,7 +3,7 @@
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
-public class PostNotFoundException extends RuntimeException {
+public class PostNotFoundException extends Exception {
     public PostNotFoundException() {
     }
 

Modified: trunk/src/tools/org/jboss/blog/tools/StringTools.java
===================================================================
--- trunk/src/tools/org/jboss/blog/tools/StringTools.java	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/src/tools/org/jboss/blog/tools/StringTools.java	2008-02-27 15:51:16 UTC (rev 225)
@@ -76,4 +76,19 @@
             return html;
         }
     }
+
+    public static String createSummary(String s, int length) {
+        if (s == null) {
+            return null;
+        }
+
+        s = stripHtml(s);
+
+        if (s.length() > length) {
+            s = s.substring(0, length);
+            return s + "...";
+        } else {
+            return s;
+        }
+    }
 }

Modified: trunk/view/layout/template.xhtml
===================================================================
--- trunk/view/layout/template.xhtml	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/view/layout/template.xhtml	2008-02-27 15:51:16 UTC (rev 225)
@@ -12,6 +12,7 @@
     <link href="/blog/stylesheet/org_main.css" rel="stylesheet" type="text/css" />
     <link href="/blog/stylesheet/org_layout.css" rel="stylesheet" type="text/css" />
     <link href="/blog/stylesheet/blog.css" rel="stylesheet" type="text/css" />
+    <ui:insert name="additional_headers" />
 </head>
 
 <body>

Modified: trunk/view/view/feed.xhtml
===================================================================
--- trunk/view/view/feed.xhtml	2008-02-26 16:34:15 UTC (rev 224)
+++ trunk/view/view/feed.xhtml	2008-02-27 15:51:16 UTC (rev 225)
@@ -8,6 +8,12 @@
                 xmlns:rich="http://richfaces.org/rich"
                 xmlns:a="http://richfaces.org/a4j"
                 template="../layout/template.xhtml">
+    <ui:define name="additional_headers">
+        <link rel="alternate" type="application/atom+xml"
+              title="Subscribe to an ATOM feed for '#{feedView.feed.title}'!"
+              href="#{linkService.generateFeedLink(feedView.feed, 'ATOM')}" />
+    </ui:define>
+
     <ui:define name="header">
         View feed: #{feedView.feed.title}
     </ui:define>

Added: trunk/view-portlet/feed_not_found.jsp
===================================================================
--- trunk/view-portlet/feed_not_found.jsp	                        (rev 0)
+++ trunk/view-portlet/feed_not_found.jsp	2008-02-27 15:51:16 UTC (rev 225)
@@ -0,0 +1,9 @@
+<%@ 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 />
+
+The feed: '${requestScope.feedName}' does not exist.
\ No newline at end of file

Added: trunk/view-portlet/view.jsp
===================================================================
--- trunk/view-portlet/view.jsp	                        (rev 0)
+++ trunk/view-portlet/view.jsp	2008-02-27 15:51:16 UTC (rev 225)
@@ -0,0 +1,46 @@
+<%@ 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 />
+
+<%
+    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>
+
+<br />
+<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}">
+        Posted on <%= SimpleDateFormat.getDateTimeInstance().format(post.getPublished()) %> by
+        <%= post.getEffectiveAuthor() %>.
+
+        <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




More information about the jboss-cvs-commits mailing list