[jboss-cvs] JBossBlog SVN: r145 - in trunk: resources and 9 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 30 04:47:56 EST 2007


Author: adamw
Date: 2007-11-30 04:47:56 -0500 (Fri, 30 Nov 2007)
New Revision: 145

Added:
   trunk/resources/velocity.properties
   trunk/src/action/org/jboss/blog/session/converter/TemplateConverter.java
   trunk/src/action/org/jboss/blog/session/template/DatabaseResourceLoader.java
   trunk/src/action/org/jboss/blog/session/template/TemplateModBean.java
   trunk/src/action/org/jboss/blog/session/validator/UniqueTemplateNameValidator.java
   trunk/view/manage/template/
   trunk/view/manage/template/template_add.xhtml
   trunk/view/manage/template/template_edit.xhtml
   trunk/view/manage/template/template_list.xhtml
   trunk/view/manage/template/template_mod.xhtml
Modified:
   trunk/build.xml
   trunk/resources/META-INF/jbossblog.taglib.xml
   trunk/resources/WEB-INF/components.xml
   trunk/resources/WEB-INF/pages.xml
   trunk/resources/WEB-INF/web.xml
   trunk/src/action/org/jboss/blog/servlet/FeedsServlet.java
   trunk/src/action/org/jboss/blog/session/template/TemplateService.java
   trunk/src/action/org/jboss/blog/session/template/VelocityTemplateService.java
   trunk/src/model/org/jboss/blog/model/Template.java
   trunk/view/manage/index.xhtml
Log:


Modified: trunk/build.xml
===================================================================
--- trunk/build.xml	2007-11-29 14:20:31 UTC (rev 144)
+++ trunk/build.xml	2007-11-30 09:47:56 UTC (rev 145)
@@ -2,331 +2,320 @@
 
 <project name="blog" default="deploy" basedir=".">
 
-        <!-- Give user a chance to override without editing this file or typing -D -->
-        <property file="${basedir}/build.properties" />
+    <!-- Give user a chance to override without editing this file or typing -D -->
+    <property file="${basedir}/build.properties" />
 
-        <property name="profile" value="dev" />
-        <property file="build-${profile}.properties" />
+    <property name="profile" value="dev" />
+    <property file="build-${profile}.properties" />
 
-        <!-- set global properties for this build -->
-        <property name="project.name" value="blog"/>
-        <property name="dist.dir" value="dist" />
-        <property name="src.model.dir" value="src/model" />
-        <property name="src.action.dir" value="src/action" />
-        <property name="src.test.dir" value="src/test" />
-        <property name="lib.dir" value="lib" />
-        <property name="ear.dir" value="exploded-archives/${project.name}.ear" />
-        <property name="jar.dir" value="exploded-archives/${project.name}.jar" />
-        <property name="war.dir" value="exploded-archives/${project.name}.war" />
-        <property name="test.dir" value="test-build" />
-        <property name="bootstrap.dir" value="${basedir}/bootstrap" />
-        <property name="deploy.dir" value="${jboss.home}/server/default/deploy" />
-        <property name="ear.deploy.dir" value="${deploy.dir}/${project.name}.ear" />
-        <property name="jar.deploy.dir" value="${ear.deploy.dir}/${project.name}.jar" />
-        <property name="war.deploy.dir" value="${ear.deploy.dir}/${project.name}.war" />
-        <property name="testng.jar" value="${basedir}/lib/testng.jar" />
-        <property name="javac.debug" value="true" />
-        <property name="javac.deprecation" value="false" />
-        <property name="debug" value="false" />
-	
-		<!--Properties for validating configuration files -->
-		<property name="validate.resources.dir" value="${basedir}/exploded-archives" />
-		<property name="schema.dir" value="${basedir}/exploded-archives/schemas" />
-		<property name="src.schema.dir" value="${schema.dir}/org/jboss/seam"/>
-		<property name="schema.version" value="2.0" />
-	
-        <fileset id="lib" dir="${lib.dir}">
-                <include name="*.jar" />
-        </fileset>
+    <!-- set global properties for this build -->
+    <property name="project.name" value="blog"/>
+    <property name="dist.dir" value="dist" />
+    <property name="src.model.dir" value="src/model" />
+    <property name="src.action.dir" value="src/action" />
+    <property name="src.test.dir" value="src/test" />
+    <property name="lib.dir" value="lib" />
+    <property name="ear.dir" value="exploded-archives/${project.name}.ear" />
+    <property name="jar.dir" value="exploded-archives/${project.name}.jar" />
+    <property name="war.dir" value="exploded-archives/${project.name}.war" />
+    <property name="test.dir" value="test-build" />
+    <property name="bootstrap.dir" value="${basedir}/bootstrap" />
+    <property name="deploy.dir" value="${jboss.home}/server/default/deploy" />
+    <property name="ear.deploy.dir" value="${deploy.dir}/${project.name}.ear" />
+    <property name="jar.deploy.dir" value="${ear.deploy.dir}/${project.name}.jar" />
+    <property name="war.deploy.dir" value="${ear.deploy.dir}/${project.name}.war" />
+    <property name="testng.jar" value="${basedir}/lib/testng.jar" />
+    <property name="javac.debug" value="true" />
+    <property name="javac.deprecation" value="false" />
+    <property name="debug" value="false" />
 
-        <path id="build.classpath">
-                <fileset refid="lib" />
-        </path>
+    <!--Properties for validating configuration files -->
+    <property name="validate.resources.dir" value="${basedir}/exploded-archives" />
+    <property name="schema.dir" value="${basedir}/exploded-archives/schemas" />
+    <property name="src.schema.dir" value="${schema.dir}/org/jboss/seam"/>
+    <property name="schema.version" value="2.0" />
 
-        <target name="init" description="Initialize the build">
-                <mkdir dir="${jar.dir}" />
-                <mkdir dir="${ear.dir}" />
-                <mkdir dir="${war.dir}" />
-                <mkdir dir="${dist.dir}" />
-        </target>
+    <fileset id="lib" dir="${lib.dir}">
+        <include name="*.jar" />
+    </fileset>
 
-        <target name="compile" depends="init" 
-                        description="Compile the Java source code"
-                    unless="eclipse.running">
-                <javac classpathref="build.classpath" 
-                                destdir="${jar.dir}" 
-                                  debug="${javac.debug}" 
-                            deprecation="${javac.deprecation}" 
-                                nowarn="on">
-                        <src path="${src.model.dir}" />
-                        <src path="${src.action.dir}" />
-                </javac>
-        </target>
+    <path id="build.classpath">
+        <fileset refid="lib" />
+    </path>
 
-        <target name="copyclasses" depends="init" 
-                        description="Copy the classes that were compiled by eclipse"
-                    if="eclipse.running">
-                <copy todir="${jar.dir}">
-                        <fileset dir="classes/model">
-                                <include name="**/*.class"/>
-                        </fileset>
-                        <fileset dir="classes/action">
-                                <include name="**/*.class"/>
-                        </fileset>
-                </copy>
-        </target>
+    <target name="init" description="Initialize the build">
+        <mkdir dir="${jar.dir}" />
+        <mkdir dir="${ear.dir}" />
+        <mkdir dir="${war.dir}" />
+        <mkdir dir="${dist.dir}" />
+    </target>
 
-        <target name="jar" depends="compile,copyclasses" 
-                        description="Build the distribution .jar file">
-                <copy todir="${jar.dir}">
-                        <fileset dir="${basedir}/resources">
-                                <include name="seam.properties" />
-                        </fileset>
-                </copy>
-                <copy todir="${jar.dir}/META-INF">
-                        <fileset dir="${basedir}/resources/META-INF">
-                                <include name="ejb-jar.xml" />
-                        </fileset>
-                </copy>
-                <copy tofile="${jar.dir}/META-INF/persistence.xml" 
-                            file="${basedir}/resources/META-INF/persistence-${profile}.xml"
-                   overwrite="true"/>
-                <copy tofile="${jar.dir}/import.sql" 
-                            file="${basedir}/resources/import-${profile}.sql"
-                   overwrite="true"/>
-        </target>
+    <target name="compile" depends="init"
+            description="Compile the Java source code"
+            unless="eclipse.running">
+        <javac classpathref="build.classpath"
+               destdir="${jar.dir}"
+               debug="${javac.debug}"
+               deprecation="${javac.deprecation}"
+               nowarn="on">
+            <src path="${src.model.dir}" />
+            <src path="${src.action.dir}" />
+        </javac>
+    </target>
 
-        <target name="war" depends="compile" 
-                        description="Build the distribution .war file">
-                <copy todir="${war.dir}">
-                        <fileset dir="${basedir}/view" />
-                </copy>
-                <copy todir="${war.dir}/WEB-INF">
-                        <fileset dir="${basedir}/resources/WEB-INF">
-                                <include name="*.*"/>
-                                <include name="classes/**/*.*"/>
-                                <exclude name="classes/**/*.class"/>
-                        </fileset>
-                        <filterset>
-                            <filter token="debug" value="${debug}" />
-                            <filter token="jndiPattern" value="${project.name}/#{ejbName}/local" />
-                            <filter token="embeddedEjb" value="false" />
-                        </filterset>
-                </copy>         
-                <copy todir="${war.dir}/WEB-INF">
-                        <fileset dir="${basedir}/resources/WEB-INF">
-                                <include name="lib/*.*"/>
-                                <include name="classes/**/*.class"/>
-                        </fileset>
-                </copy>         
-                <!--<copy todir="${war.dir}/WEB-INF/lib">
-                        <fileset dir="${lib.dir}">
-                            moved to ear goal
-                        </fileset>
-                </copy>  -->
-                <copy todir="${war.dir}/WEB-INF/classes">
-                        <fileset dir="${basedir}/resources"> 
-                                <include name="messages*.properties"/>
-                        </fileset>
-                </copy>
-        </target>
+    <target name="copyclasses" depends="init"
+            description="Copy the classes that were compiled by eclipse"
+            if="eclipse.running">
+        <copy todir="${jar.dir}">
+            <fileset dir="classes/model">
+                <include name="**/*.class"/>
+            </fileset>
+            <fileset dir="classes/action">
+                <include name="**/*.class"/>
+            </fileset>
+        </copy>
+    </target>
 
-        <target name="ear" description="Build the EAR">
-                <copy todir="${ear.dir}">
-                        <fileset dir="${basedir}/resources">
-                                <include name="*jpdl.xml" />
-                                <include name="hibernate.cfg.xml" />
-                                <include name="jbpm.cfg.xml" />
-                                <include name="*.drl" />
-                        </fileset>
-                		<fileset dir="${lib.dir}">
-                				<include name="jboss-seam.jar" />
-                		</fileset>
-                        <fileset dir="${basedir}">
-                                <include name="lib/jbpm*.jar" />
-                                <include name="lib/jboss-el.jar" />
-                                <include name="lib/drools-*.jar"/>
-                                <include name="lib/janino-*.jar"/>
-                                <include name="lib/antlr-*.jar"/>
-                                <include name="lib/mvel*.jar"/>
-                        		<include name="lib/richfaces-api*.jar" />
-                                <include name="lib/rome*.jar" />
-                                <include name="lib/jdom*.jar" />
+    <target name="jar" depends="compile,copyclasses"
+            description="Build the distribution .jar file">
+        <copy todir="${jar.dir}">
+            <fileset dir="${basedir}/resources">
+                <include name="seam.properties" />
+            </fileset>
+        </copy>
+        <copy todir="${jar.dir}/META-INF">
+            <fileset dir="${basedir}/resources/META-INF">
+                <include name="ejb-jar.xml" />
+            </fileset>
+        </copy>
+        <copy tofile="${jar.dir}/META-INF/persistence.xml"
+              file="${basedir}/resources/META-INF/persistence-${profile}.xml"
+              overwrite="true"/>
+        <copy tofile="${jar.dir}/import.sql"
+              file="${basedir}/resources/import-${profile}.sql"
+              overwrite="true"/>
+    </target>
 
-                                <!-- moved from the war goal -->
-                                <include name="lib/richfaces-impl*.jar" />
-                        		<include name="lib/richfaces-ui*.jar" />
-                                <include name="lib/oscache*.jar" />
-                                <include name="lib/commons-digester.jar" />
-                                <include name="lib/commons-beanutils.jar" />
-                                <include name="lib/jsf-facelets.jar" />
-                                <include name="lib/velocity*.jar" />
-                                <include name="lib/jboss-seam-*.jar" />
-                                <exclude name="lib/jboss-seam-gen.jar" />
-                        </fileset>
-                </copy>
-                <copy todir="${ear.dir}/META-INF">
-                        <fileset dir="${basedir}/resources/META-INF">
-                                <include name="application.xml" />
-                                <include name="jboss-app.xml" />
-                                <include name="jbossblog.taglib.xml" />
-                        </fileset>
-                </copy>
-        </target>
-        
-        <target name="archive" depends="jar,war,ear" 
-                        description="Package the archives">
-                <jar jarfile="${dist.dir}/${project.name}.jar" basedir="${jar.dir}"/>
-                <jar jarfile="${dist.dir}/${project.name}.war" basedir="${war.dir}"/>
-                <jar jarfile="${dist.dir}/${project.name}.ear">
-                        <fileset dir="${ear.dir}"/>
-                        <fileset dir="${dist.dir}">
-                                <include name="${project.name}.jar"/>
-                                <include name="${project.name}.war"/>
-                        </fileset>
-                </jar>
-        </target>
-        
-        <target name="datasource">
-                <fail unless="jboss.home">jboss.home not set</fail>
-                <copy todir="${deploy.dir}">
-                        <fileset dir="${basedir}/resources">
-                                <include name="${project.name}-${profile}-ds.xml" />
-                        </fileset>
-                </copy>
-        </target>
-        
-        <target name="explode" depends="jar,war,ear,datasource" 
-                        description="Deploy the exploded archive">
-                <fail unless="jboss.home">jboss.home not set</fail>
-                
-                <mkdir dir="${jar.deploy.dir}"/>
-                <mkdir dir="${war.deploy.dir}"/>                
-                
-                <copy todir="${jar.deploy.dir}">
-                        <fileset dir="${jar.dir}"/>
-                </copy>
-                <copy todir="${war.deploy.dir}">
-                        <fileset dir="${war.dir}"/>
-                </copy>
-                <copy todir="${ear.deploy.dir}">
-                        <fileset dir="${ear.dir}"/>
-                </copy>
-        </target>
+    <target name="war" depends="compile"
+            description="Build the distribution .war file">
+        <copy todir="${war.dir}">
+            <fileset dir="${basedir}/view" />
+        </copy>
+        <copy todir="${war.dir}/WEB-INF">
+            <fileset dir="${basedir}/resources/WEB-INF">
+                <include name="*.*"/>
+                <include name="classes/**/*.*"/>
+                <exclude name="classes/**/*.class"/>
+            </fileset>
+            <filterset>
+                <filter token="debug" value="${debug}" />
+                <filter token="jndiPattern" value="${project.name}/#{ejbName}/local" />
+                <filter token="embeddedEjb" value="false" />
+            </filterset>
+        </copy>
+        <copy todir="${war.dir}/WEB-INF">
+            <fileset dir="${basedir}/resources/WEB-INF">
+                <include name="lib/*.*"/>
+                <include name="classes/**/*.class"/>
+            </fileset>
+        </copy>
+        <!--<copy todir="${war.dir}/WEB-INF/lib">
+              <fileset dir="${lib.dir}">
+                  moved to ear goal
+              </fileset>
+      </copy>  -->
+        <copy todir="${war.dir}/WEB-INF/classes">
+            <fileset dir="${basedir}/resources">
+                <include name="messages*.properties"/>
+            </fileset>
+        </copy>
+    </target>
 
-        <target name="unexplode" description="Undeploy the exploded archive">
-                <delete failonerror="no">
-                        <fileset dir="${ear.deploy.dir}">
-                                <exclude name="**/*.jar"/>
-                        </fileset>
-                </delete>
-                <delete file="${deploy.dir}/${project.name}-${profile}-ds.xml" failonerror="no"/>
-                <delete dir="${ear.deploy.dir}" failonerror="no"/>
-        </target>
-        
-        <target name="restart" depends="clean,unexplode,explode" description="Restart the exploded archive">
-                <touch file="${ear.deploy.dir}/META-INF/application.xml"/>
-        </target>
+    <target name="ear" description="Build the EAR">
+        <copy todir="${ear.dir}">
+            <fileset dir="${basedir}/resources">
+                <include name="*jpdl.xml" />
+                <include name="hibernate.cfg.xml" />
+                <include name="jbpm.cfg.xml" />
+                <include name="*.drl" />                
+                <include name="velocity.properties"/>
+            </fileset>
+            <fileset dir="${lib.dir}">
+                <include name="jboss-seam.jar" />
+            </fileset>
+            <fileset dir="${basedir}">
+                <include name="lib/jbpm*.jar" />
+                <include name="lib/jboss-el.jar" />
+                <include name="lib/drools-*.jar"/>
+                <include name="lib/janino-*.jar"/>
+                <include name="lib/antlr-*.jar"/>
+                <include name="lib/mvel*.jar"/>
+                <include name="lib/richfaces-api*.jar" />
+                <include name="lib/rome*.jar" />
+                <include name="lib/jdom*.jar" />
 
-        <target name="deploy" depends="archive,datasource" description="Deploy to JBoss AS">
-                <fail unless="jboss.home">jboss.home not set</fail>
-                <copy todir="${deploy.dir}" file="${dist.dir}/${project.name}.ear" />
-        </target>
+                <!-- moved from the war goal -->
+                <include name="lib/richfaces-impl*.jar" />
+                <include name="lib/richfaces-ui*.jar" />
+                <include name="lib/oscache*.jar" />
+                <include name="lib/commons-digester.jar" />
+                <include name="lib/commons-beanutils.jar" />
+                <include name="lib/jsf-facelets.jar" />
+                <include name="lib/velocity*.jar" />
+                <include name="lib/jboss-seam-*.jar" />
+                <exclude name="lib/jboss-seam-gen.jar" />
+            </fileset>
+        </copy>
+        <copy todir="${ear.dir}/META-INF">
+            <fileset dir="${basedir}/resources/META-INF">
+                <include name="application.xml" />
+                <include name="jboss-app.xml" />
+                <include name="jbossblog.taglib.xml" />
+            </fileset>
+        </copy>
+    </target>
 
-        <target name="undeploy" description="Undeploy the example from JBoss">
-                <delete file="${deploy.dir}/${project.name}.ear" />
-                <delete file="${deploy.dir}/${project.name}-dev-ds.xml" />
-                <delete file="${deploy.dir}/${project.name}-prod-ds.xml" />
-        </target>
+    <target name="archive" depends="jar,war,ear"
+            description="Package the archives">
+        <jar jarfile="${dist.dir}/${project.name}.jar" basedir="${jar.dir}"/>
+        <jar jarfile="${dist.dir}/${project.name}.war" basedir="${war.dir}"/>
+        <jar jarfile="${dist.dir}/${project.name}.ear">
+            <fileset dir="${ear.dir}"/>
+            <fileset dir="${dist.dir}">
+                <include name="${project.name}.jar"/>
+                <include name="${project.name}.war"/>
+            </fileset>
+        </jar>
+    </target>
 
-        <target name="clean" description="Cleans up the build directory">
-                <delete dir="${dist.dir}"/>
-                <delete dir="${ear.dir}"/>
-                <delete dir="${war.dir}"/>
-                <delete dir="${jar.dir}"/>
-        		<delete dir="${src.schema.dir}" failonerror="no"/>
-                <delete dir="${basedir}/test-report"/>
-                <delete dir="${basedir}/test-output"/>
-        </target>
+    <target name="datasource">
+        <fail unless="jboss.home">jboss.home not set</fail>
+        <copy todir="${deploy.dir}">
+            <fileset dir="${basedir}/resources">
+                <include name="${project.name}-${profile}-ds.xml" />
+            </fileset>
+        </copy>
+    </target>
 
-        <target name="compiletest" unless="eclipse.running" description="Compile the Java source code for the tests">
+    <target name="explode" depends="jar,war,ear,datasource"
+            description="Deploy the exploded archive">
+        <fail unless="jboss.home">jboss.home not set</fail>
+
+        <mkdir dir="${jar.deploy.dir}"/>
+        <mkdir dir="${war.deploy.dir}"/>
+
+        <copy todir="${jar.deploy.dir}">
+            <fileset dir="${jar.dir}"/>
+        </copy>
+        <copy todir="${war.deploy.dir}">
+            <fileset dir="${war.dir}"/>
+        </copy>
+        <copy todir="${ear.deploy.dir}">
+            <fileset dir="${ear.dir}"/>
+        </copy>
+    </target>
+
+    <target name="unexplode" description="Undeploy the exploded archive">
+        <delete failonerror="no">
+            <fileset dir="${ear.deploy.dir}">
+                <exclude name="**/*.jar"/>
+            </fileset>
+        </delete>
+        <delete file="${deploy.dir}/${project.name}-${profile}-ds.xml" failonerror="no"/>
+        <delete dir="${ear.deploy.dir}" failonerror="no"/>
+    </target>
+
+    <target name="restart" depends="clean,unexplode,explode" description="Restart the exploded archive">
+        <touch file="${ear.deploy.dir}/META-INF/application.xml"/>
+    </target>
+
+    <target name="deploy" depends="archive,datasource" description="Deploy to JBoss AS">
+        <fail unless="jboss.home">jboss.home not set</fail>
+        <copy todir="${deploy.dir}" file="${dist.dir}/${project.name}.ear" />
+    </target>
+
+    <target name="undeploy" description="Undeploy the example from JBoss">
+        <delete file="${deploy.dir}/${project.name}.ear" />
+        <delete file="${deploy.dir}/${project.name}-dev-ds.xml" />
+        <delete file="${deploy.dir}/${project.name}-prod-ds.xml" />
+    </target>
+
+    <target name="clean" description="Cleans up the build directory">
+        <delete dir="${dist.dir}"/>
+        <delete dir="${ear.dir}"/>
+        <delete dir="${war.dir}"/>
+        <delete dir="${jar.dir}"/>
+        <delete dir="${src.schema.dir}" failonerror="no"/>
+        <delete dir="${basedir}/test-report"/>
+        <delete dir="${basedir}/test-output"/>
+    </target>
+
+    <target name="compiletest" unless="eclipse.running" description="Compile the Java source code for the tests">
         <mkdir dir="${test.dir}"/>
         <javac classpathref="build.classpath"
-                        destdir="${test.dir}"
-                          debug="${javac.debug}"
-                    deprecation="${javac.deprecation}"
-                        nowarn="on">
-                <src path="${src.action.dir}" />
-                <src path="${src.model.dir}" />
-                <src path="${src.test.dir}" />
+               destdir="${test.dir}"
+               debug="${javac.debug}"
+               deprecation="${javac.deprecation}"
+               nowarn="on">
+            <src path="${src.action.dir}" />
+            <src path="${src.model.dir}" />
+            <src path="${src.test.dir}" />
         </javac>
-        </target>
-        
-        <target name="copytestclasses" if="eclipse.running" description="Copy classes compiled by eclipse to the test dir">
+    </target>
+
+    <target name="copytestclasses" if="eclipse.running" description="Copy classes compiled by eclipse to the test dir">
         <mkdir dir="${test.dir}"/>
-                <copy todir="${test.dir}">
-                        <fileset dir="classes/model">
-                                <include name="**/*.class"/>
-                        </fileset>
-                </copy>
-                <copy todir="${test.dir}">
-                        <fileset dir="classes/action">
-                                <include name="**/*.class"/>
-                        </fileset>
-                </copy>
-                <copy todir="${test.dir}">
-                        <fileset dir="classes/test">
-                                <include name="**/*.class"/>
-                        </fileset>
-                </copy>
-        </target>
-        
-        <target name="buildtest" depends="compiletest,copytestclasses" description="Build the tests">
-                <copy todir="${test.dir}">
-                        <fileset dir="${basedir}/resources">
-                                <exclude name="META-INF/persistence*.xml"/>
-                                <exclude name="import*.sql"/>
-                                <exclude name="${project.name}-*-ds.xml"/>
-                        </fileset>
-                </copy>
-                <copy tofile="${test.dir}/META-INF/persistence.xml" 
-                        file="${basedir}/resources/META-INF/persistence-test.xml"
-                   overwrite="true"/>
-                <copy tofile="${test.dir}/import.sql" 
-                        file="${basedir}/resources/import-test.sql"
-                   overwrite="true"/>
-                <copy todir="${test.dir}" flatten="true">
-                        <fileset dir="${src.test.dir}">
-                                <include name="**/*Test.xml" />
-                        </fileset>
-                </copy>
-        </target>
+        <copy todir="${test.dir}">
+            <fileset dir="classes/model">
+                <include name="**/*.class"/>
+            </fileset>
+        </copy>
+        <copy todir="${test.dir}">
+            <fileset dir="classes/action">
+                <include name="**/*.class"/>
+            </fileset>
+        </copy>
+        <copy todir="${test.dir}">
+            <fileset dir="classes/test">
+                <include name="**/*.class"/>
+            </fileset>
+        </copy>
+    </target>
 
-        <target name="test" depends="buildtest" description="Run the tests">            
-                <taskdef resource="testngtasks" classpath="${testng.jar}" />
-        		<path id="test.path">
-        			<path path="${test.dir}" />
-        			<fileset dir="${lib.dir}/test">
-        				<include name="*.jar"/>
-        			</fileset>
-        			<path path="${bootstrap.dir}" />
-        			<path refid="build.classpath" />
-        		</path>
-                <testng outputdir="${basedir}/test-report">
-                    <classpath refid="test.path" />
-                    <xmlfileset dir="${test.dir}" includes="*Test.xml" />
-                </testng>
-        </target>
-	
-	<target name="validateConfiguration" depends="war,ear,jar" description="Validate the xml configuration files">
-		<mkdir dir="${schema.dir}"/>
-		<unjar src="${lib.dir}/jboss-seam.jar" dest="${schema.dir}">
-			<patternset>
-				<include name="org/jboss/seam/*.xsd"/>
-				<include name="org/jboss/seam/*.dtd"/>
-			</patternset>
-		</unjar>
-		<ant antfile="validate.xml" target="validateConfiguration" />
-	</target>
-        
+    <target name="buildtest" depends="compiletest,copytestclasses" description="Build the tests">
+        <copy todir="${test.dir}">
+            <fileset dir="${basedir}/resources">
+                <exclude name="META-INF/persistence*.xml"/>
+                <exclude name="import*.sql"/>
+                <exclude name="${project.name}-*-ds.xml"/>
+            </fileset>
+        </copy>
+        <copy tofile="${test.dir}/META-INF/persistence.xml"
+              file="${basedir}/resources/META-INF/persistence-test.xml"
+              overwrite="true"/>
+        <copy tofile="${test.dir}/import.sql"
+              file="${basedir}/resources/import-test.sql"
+              overwrite="true"/>
+        <copy todir="${test.dir}" flatten="true">
+            <fileset dir="${src.test.dir}">
+                <include name="**/*Test.xml" />
+            </fileset>
+        </copy>
+    </target>
+
+    <target name="test" depends="buildtest" description="Run the tests">
+        <taskdef resource="testngtasks" classpath="${testng.jar}" />
+        <path id="test.path">
+            <path path="${test.dir}" />
+            <fileset dir="${lib.dir}/test">
+                <include name="*.jar"/>
+            </fileset>
+            <path path="${bootstrap.dir}" />
+            <path refid="build.classpath" />
+        </path>
+        <testng outputdir="${basedir}/test-report">
+            <classpath refid="test.path" />
+            <xmlfileset dir="${test.dir}" includes="*Test.xml" />
+        </testng>
+    </target>
 </project>

Modified: trunk/resources/META-INF/jbossblog.taglib.xml
===================================================================
--- trunk/resources/META-INF/jbossblog.taglib.xml	2007-11-29 14:20:31 UTC (rev 144)
+++ trunk/resources/META-INF/jbossblog.taglib.xml	2007-11-30 09:47:56 UTC (rev 145)
@@ -11,4 +11,10 @@
             <validator-id>uniqueFeedNameValidator</validator-id>
         </validator>
     </tag>
+    <tag>
+        <tag-name>uniqueTemplateNameValidator</tag-name>
+        <validator>
+            <validator-id>uniqueTemplateNameValidator</validator-id>
+        </validator>
+    </tag>
 </facelet-taglib>
\ No newline at end of file

Modified: trunk/resources/WEB-INF/components.xml
===================================================================
--- trunk/resources/WEB-INF/components.xml	2007-11-29 14:20:31 UTC (rev 144)
+++ trunk/resources/WEB-INF/components.xml	2007-11-30 09:47:56 UTC (rev 145)
@@ -6,6 +6,7 @@
             xmlns:drools="http://jboss.com/products/seam/drools"
             xmlns:bpm="http://jboss.com/products/seam/bpm"
             xmlns:security="http://jboss.com/products/seam/security"
+            xmlns:web="http://jboss.com/products/seam/web"
             xmlns:mail="http://jboss.com/products/seam/mail"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation=
@@ -14,6 +15,7 @@
                  http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.0.xsd 
                  http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.0.xsd
                  http://jboss.com/products/seam/bpm http://jboss.com/products/seam/bpm-2.0.xsd
+                 http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.0.xsd
                  http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.0.xsd
                  http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.0.xsd
                  http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd">
@@ -48,6 +50,8 @@
 
     <async:quartz-dispatcher />
 
+    <web:context-filter url-pattern="/feeds/*"/>
+
     <!-- For use with jBPM pageflow or process management -->
     <!--
     <bpm:jbpm>

Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml	2007-11-29 14:20:31 UTC (rev 144)
+++ trunk/resources/WEB-INF/pages.xml	2007-11-30 09:47:56 UTC (rev 145)
@@ -90,6 +90,32 @@
         </navigation>
     </page>
 
+    <!-- Manage templates -->
+
+    <page view-id="/manage/template/template_add.xhtml">
+        <begin-conversation flush-mode="manual" join="true" />
+        <navigation from-action="#{templateMod.saveNew}">
+            <end-conversation />
+            <redirect view-id="/manage/template/template_list.xhtml" />
+        </navigation>
+    </page>
+
+    <page view-id="/manage/template/template_edit.xhtml">
+        <begin-conversation flush-mode="manual" join="true" />
+        <param name="id" converterId="templateConverter" value="#{templateMod.template}" />
+        <navigation from-action="#{templateMod.saveExisting}">
+            <end-conversation />
+            <redirect view-id="/manage/template/template_list.xhtml" />
+        </navigation>
+    </page>
+
+    <page view-id="/manage/template/template_delete.xhtml">
+        <param name="id" converterId="templateConverter" value="#{templateMod.template}" />
+        <navigation from-action="#{templateMod.delete}">
+            <redirect view-id="/manage/template/template_list.xhtml" />
+        </navigation>
+    </page>
+
     <!-- Exceptions -->
 
     <exception class="org.jboss.seam.framework.EntityNotFoundException">

Modified: trunk/resources/WEB-INF/web.xml
===================================================================
--- trunk/resources/WEB-INF/web.xml	2007-11-29 14:20:31 UTC (rev 144)
+++ trunk/resources/WEB-INF/web.xml	2007-11-30 09:47:56 UTC (rev 145)
@@ -61,19 +61,6 @@
         <servlet-name>Seam Resource Servlet</servlet-name>
         <url-pattern>/seam/resource/*</url-pattern>
     </servlet-mapping>
-
-    <!-- Feeds servlet -->
-
-    <servlet>
-        <servlet-name>Feeds Servlet</servlet-name>
-        <servlet-class>org.jboss.blog.servlet.FeedsServlet</servlet-class>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>Feeds Servlet</servlet-name>
-        <url-pattern>/feeds/*</url-pattern>
-    </servlet-mapping>
-
     <!-- Facelets development mode (disable in production) -->
 
     <context-param>
@@ -118,6 +105,15 @@
         <auth-constraint/>
     </security-constraint>
 
+    <!-- Feeds servlet -->
 
+    <servlet>
+        <servlet-name>Feeds Servlet</servlet-name>
+        <servlet-class>org.jboss.blog.servlet.FeedsServlet</servlet-class>
+    </servlet>
 
+    <servlet-mapping>
+        <servlet-name>Feeds Servlet</servlet-name>
+        <url-pattern>/feeds/*</url-pattern>
+    </servlet-mapping>
 </web-app>

Added: trunk/resources/velocity.properties
===================================================================
--- trunk/resources/velocity.properties	                        (rev 0)
+++ trunk/resources/velocity.properties	2007-11-30 09:47:56 UTC (rev 145)
@@ -0,0 +1,9 @@
+input.encoding = UTF-8
+output.encoding = UTF-8
+
+resource.loader = database
+
+database.resource.loader.description = Velocity File Resource Loader
+database.resource.loader.class = org.jboss.blog.session.template.DatabaseResourceLoader
+database.resource.loader.cache = false
+database.resource.loader.modificationCheckInterval = 2
\ No newline at end of file

Modified: trunk/src/action/org/jboss/blog/servlet/FeedsServlet.java
===================================================================
--- trunk/src/action/org/jboss/blog/servlet/FeedsServlet.java	2007-11-29 14:20:31 UTC (rev 144)
+++ trunk/src/action/org/jboss/blog/servlet/FeedsServlet.java	2007-11-30 09:47:56 UTC (rev 145)
@@ -3,8 +3,6 @@
 import org.jboss.blog.service.FeedNotFoundException;
 import org.jboss.blog.session.template.InvalidTemplateTypeException;
 import org.jboss.blog.session.template.TemplateService;
-import org.jboss.blog.tools.GeneralTools;
-import org.jboss.blog.tools.Pair;
 import org.jboss.seam.Component;
 import org.jboss.seam.log.Logging;
 
@@ -16,7 +14,6 @@
 import javax.transaction.SystemException;
 import javax.transaction.UserTransaction;
 import java.io.IOException;
-import java.io.InputStream;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -52,13 +49,10 @@
                 tx.begin();
             }
 
-            TemplateService templateService = (TemplateService) Component.getInstance("templateService");
-            Pair<String, InputStream> data = templateService.getData(feedType, feedName);
+            // TODO: expires, created, if-not-modified-since
 
-            response.setCharacterEncoding("UTF-8");
-            response.setContentType(data.getFirst());
-
-            GeneralTools.transfer(data.getSecond(), response.getWriter());
+            TemplateService templateService = (TemplateService) Component.getInstance("templateService");
+            templateService.writeTemplate(feedType, feedName, response);
             response.getWriter().flush();
 
             if (txStarted) {

Added: trunk/src/action/org/jboss/blog/session/converter/TemplateConverter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/converter/TemplateConverter.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/converter/TemplateConverter.java	2007-11-30 09:47:56 UTC (rev 145)
@@ -0,0 +1,41 @@
+package org.jboss.blog.session.converter;
+
+import org.jboss.blog.model.Template;
+import org.jboss.seam.Component;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Transactional;
+import org.jboss.seam.annotations.faces.Converter;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.persistence.EntityManager;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("templateConverter")
+ at BypassInterceptors
+ at Converter
+public class TemplateConverter implements javax.faces.convert.Converter {
+    @Transactional
+    public Object getAsObject(FacesContext context, UIComponent cmp, String value) {
+        EntityManager entityManager = (EntityManager) Component.getInstance("entityManager");
+
+        entityManager.joinTransaction();
+
+        Integer id;
+        id = Integer.parseInt(value);
+
+        return entityManager.find(Template.class, id);
+    }
+
+    public String getAsString(FacesContext context, UIComponent cmp, Object value) {
+        if (value == null) {
+            return null;
+        }
+
+        Integer id = ((Template) value).getId();
+        return id == null ? null : id.toString();
+    }
+}
\ No newline at end of file

Added: trunk/src/action/org/jboss/blog/session/template/DatabaseResourceLoader.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/template/DatabaseResourceLoader.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/template/DatabaseResourceLoader.java	2007-11-30 09:47:56 UTC (rev 145)
@@ -0,0 +1,53 @@
+package org.jboss.blog.session.template;
+
+import org.apache.commons.collections.ExtendedProperties;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.runtime.resource.Resource;
+import org.apache.velocity.runtime.resource.loader.ResourceLoader;
+import org.jboss.blog.model.Template;
+import org.jboss.seam.Component;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class DatabaseResourceLoader extends ResourceLoader {
+    public void init(ExtendedProperties extendedProperties) {
+    }
+
+    private Template getTemplate(String name) {
+        return (Template) ((EntityManager) Component.getInstance("entityManager")).createQuery(
+                "select t from Template t where t.name = ?1").setParameter(1, name).getSingleResult();
+    }
+
+    public InputStream getResourceStream(String name) throws ResourceNotFoundException {
+        System.out.println("get res: " + name);
+        try {
+            return new ByteArrayInputStream(getTemplate(name).getText().getBytes());
+        } catch (NoResultException e) {
+            return null;
+        }
+    }
+
+    public boolean isSourceModified(Resource resource) {
+        System.out.println("is mod: " + resource.getName());
+        try {
+            return resource.getLastModified() != getLastModified(resource);
+        } catch (NoResultException e) {
+            return false;
+        }
+    }
+
+    public long getLastModified(Resource resource) {
+        System.out.println("last mod: " + resource.getName());
+        try {
+            return getTemplate(resource.getName()).getLastModified().getTime();
+        } catch (NoResultException e) {
+            return 0;
+        }
+    }
+}

Added: trunk/src/action/org/jboss/blog/session/template/TemplateModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/template/TemplateModBean.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/template/TemplateModBean.java	2007-11-30 09:47:56 UTC (rev 145)
@@ -0,0 +1,43 @@
+package org.jboss.blog.session.template;
+
+import org.jboss.blog.model.Template;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+
+import javax.persistence.EntityManager;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("templateMod")
+public class TemplateModBean {
+    @In
+    private EntityManager entityManager;
+
+    private Template template;
+
+    public Template getTemplate() {
+        if (template == null) {
+            template = new Template();
+        }
+
+        return template;
+    }
+
+    public void setTemplate(Template template) {
+        this.template = template;
+    }
+
+    public void saveNew() {
+        entityManager.persist(template);
+        entityManager.flush();
+    }
+
+    public void saveExisting() {
+        entityManager.flush();
+    }
+
+    public void delete() {
+        entityManager.remove(template);
+    }
+}

Modified: trunk/src/action/org/jboss/blog/session/template/TemplateService.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/template/TemplateService.java	2007-11-29 14:20:31 UTC (rev 144)
+++ trunk/src/action/org/jboss/blog/session/template/TemplateService.java	2007-11-30 09:47:56 UTC (rev 145)
@@ -1,14 +1,16 @@
 package org.jboss.blog.session.template;
 
-import org.jboss.blog.tools.Pair;
-import org.jboss.blog.service.FeedNotFoundException;
+import org.jboss.blog.model.Template;
 
-import java.io.InputStream;
+import javax.servlet.ServletResponse;
+import java.util.List;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 public interface TemplateService {
-    Pair<String, InputStream> getData(String feedType, String feedName)
-            throws FeedNotFoundException, InvalidTemplateTypeException;
+    void writeTemplate(String feedType, String feedName, ServletResponse response)
+            throws Exception;
+
+    List<Template> getAllTemplates();
 }

Modified: trunk/src/action/org/jboss/blog/session/template/VelocityTemplateService.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/template/VelocityTemplateService.java	2007-11-29 14:20:31 UTC (rev 144)
+++ trunk/src/action/org/jboss/blog/session/template/VelocityTemplateService.java	2007-11-30 09:47:56 UTC (rev 145)
@@ -1,39 +1,45 @@
 package org.jboss.blog.session.template;
 
+import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
 import org.jboss.blog.model.Feed;
 import org.jboss.blog.model.Post;
 import org.jboss.blog.model.TemplateType;
-import org.jboss.blog.service.FeedNotFoundException;
 import org.jboss.blog.service.FeedsService;
-import org.jboss.blog.tools.Pair;
-import org.jboss.seam.Component;
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.annotations.*;
 
-import java.io.InputStream;
+import javax.persistence.EntityManager;
+import javax.servlet.ServletResponse;
 import java.util.List;
+import java.util.Properties;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Name("templateService")
- at Scope(ScopeType.STATELESS)
+ at Scope(ScopeType.APPLICATION)
 @AutoCreate
 public class VelocityTemplateService implements TemplateService {
     @In
     private FeedsService feedsService;
 
+    @In
+    private EntityManager entityManager;
+
     private VelocityEngine engine;
 
     @Create
-    public void initVeloctiy() {
-        engine = new VelocityEngine();
+    public void initVeloctiy() throws Exception {
+        Properties props = new Properties();
+        props.load(this.getClass().getResourceAsStream("/velocity.properties"));
+        
+        engine = new VelocityEngine(props);
     }
 
-    public Pair<String, InputStream> getData(String feedType, String feedName)
-            throws FeedNotFoundException, InvalidTemplateTypeException {
+    public void writeTemplate(String feedType, String feedName, ServletResponse response)
+            throws Exception {
         TemplateType templateType;
         try {
             templateType = TemplateType.valueOf(feedType == null? "" : feedType.toUpperCase());
@@ -41,14 +47,21 @@
             throw new InvalidTemplateTypeException(e);
         }
 
-        FeedsService feedsService = (FeedsService) Component.getInstance("feedsService");
         Feed feed = feedsService.getFeed(feedName);
         List<Post> posts = feedsService.getPosts(feed, 0, feed.getMaxPostsInFeed());
 
+        response.setContentType(templateType.contentType());
+
         VelocityContext context = new VelocityContext();
         context.put("posts", posts);
         context.put("feed", feed);
 
-        return null;
+        Template template = engine.getTemplate("standard_rss2");
+        template.merge(context, response.getWriter());
     }
+
+    @SuppressWarnings("unchecked")
+    public List<org.jboss.blog.model.Template> getAllTemplates() {
+        return entityManager.createQuery("select t from Template t order by t.name, t.type").getResultList();
+    }
 }

Added: trunk/src/action/org/jboss/blog/session/validator/UniqueTemplateNameValidator.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/validator/UniqueTemplateNameValidator.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/validator/UniqueTemplateNameValidator.java	2007-11-30 09:47:56 UTC (rev 145)
@@ -0,0 +1,61 @@
+package org.jboss.blog.session.validator;
+
+import org.jboss.blog.tools.StringTools;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.faces.Validator;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.ValidatorException;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Validator
+ at Name("uniqueTemplateNameValidator")
+public class UniqueTemplateNameValidator implements javax.faces.validator.Validator {
+    @In
+    private EntityManager entityManager;
+
+    private String entityId;
+
+    public String getEntityId() {
+        return entityId;
+    }
+
+    public void setEntityId(String entityId) {
+        this.entityId = entityId;
+    }
+
+    public void validate(FacesContext context, UIComponent cmp, Object value)
+            throws ValidatorException {
+        String name = StringTools.safeToString(value);
+
+        Integer id;
+
+        if (StringTools.isEmpty(entityId)) {
+            id = null;
+        } else {
+            id = Integer.parseInt(entityId);
+        }
+
+        Query query;
+
+        if (id == null) {
+            query = entityManager.createQuery("select t.id from Template t where t.name = ?1")
+                    .setParameter(1, name);
+        } else {
+            query = entityManager.createQuery(
+                    "select t.id from Template t where t.name = ?1 and not (t.id = ?2)")
+                    .setParameter(1, name).setParameter(2, id);
+        }
+
+        if (query.getResultList().size() != 0) {
+            throw new ValidatorException(new FacesMessage("A template with that name already exists."));
+        }
+    }
+}

Modified: trunk/src/model/org/jboss/blog/model/Template.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Template.java	2007-11-29 14:20:31 UTC (rev 144)
+++ trunk/src/model/org/jboss/blog/model/Template.java	2007-11-30 09:47:56 UTC (rev 145)
@@ -10,15 +10,15 @@
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Entity
- at Table(uniqueConstraints = @UniqueConstraint(columnNames = {"name", "templateType"}))
 public class Template {
     @Id
     @GeneratedValue
     @Column(updatable = false)
     private Integer id;
 
-    @Length(max = 128)
+    @Length(max = 32)
     @NotEmpty
+    @Column(unique = true)
     private String name;
 
     @Lob
@@ -26,7 +26,7 @@
     private String text;
 
     @Enumerated
-    private TemplateType templateType;
+    private TemplateType type;
 
     @Temporal(value = TemporalType.TIMESTAMP)
     private Date lastModified;
@@ -55,12 +55,12 @@
         this.text = text;
     }
 
-    public TemplateType getFeedKind() {
-        return templateType;
+    public TemplateType getType() {
+        return type;
     }
 
-    public void setFeedKind(TemplateType templateType) {
-        this.templateType = templateType;
+    public void setType(TemplateType type) {
+        this.type = type;
     }
 
     public Date getLastModified() {
@@ -77,7 +77,7 @@
 
         Template template = (Template) o;
 
-        if (templateType != template.templateType) return false;
+        if (type != template.type) return false;
         if (id != null ? !id.equals(template.id) : template.id != null) return false;
         if (name != null ? !name.equals(template.name) : template.name != null) return false;
 
@@ -88,7 +88,13 @@
         int result;
         result = (id != null ? id.hashCode() : 0);
         result = 31 * result + (name != null ? name.hashCode() : 0);
-        result = 31 * result + (templateType != null ? templateType.hashCode() : 0);
+        result = 31 * result + (type != null ? type.hashCode() : 0);
         return result;
     }
+
+    @PrePersist
+    @PreUpdate
+    public void updateLastModified() {
+        setLastModified(new Date());
+    }
 }

Modified: trunk/view/manage/index.xhtml
===================================================================
--- trunk/view/manage/index.xhtml	2007-11-29 14:20:31 UTC (rev 144)
+++ trunk/view/manage/index.xhtml	2007-11-30 09:47:56 UTC (rev 145)
@@ -10,7 +10,8 @@
     <ui:define name="body">
         <h1>Manage feeds</h1>
 
-        <s:link value="Add new feed" view="/manage/add.xhtml" propagation="begin" />
+        <s:link value="Add new feed" view="/manage/add.xhtml" propagation="begin" /> <br />
+        <s:link value="Manage templates" view="/manage/template/template_list.xhtml" />
 
         <h3>Current feeds:</h3>
 

Added: trunk/view/manage/template/template_add.xhtml
===================================================================
--- trunk/view/manage/template/template_add.xhtml	                        (rev 0)
+++ trunk/view/manage/template/template_add.xhtml	2007-11-30 09:47:56 UTC (rev 145)
@@ -0,0 +1,18 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:rich="http://richfaces.org/rich"
+                xmlns:a="http://richfaces.org/a4j"
+                template="../../layout/template.xhtml">
+    <ui:define name="body">
+        <h1>Add a new template</h1>
+
+        <ui:include src="template_mod.xhtml">
+            <ui:param name="new" value="true" />
+        </ui:include>
+    </ui:define>
+</ui:composition>

Added: trunk/view/manage/template/template_edit.xhtml
===================================================================
--- trunk/view/manage/template/template_edit.xhtml	                        (rev 0)
+++ trunk/view/manage/template/template_edit.xhtml	2007-11-30 09:47:56 UTC (rev 145)
@@ -0,0 +1,18 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:rich="http://richfaces.org/rich"
+                xmlns:a="http://richfaces.org/a4j"
+                template="../../layout/template.xhtml">
+    <ui:define name="body">
+        <h1>Edit template: #{templateMod.template.name}</h1>
+
+        <ui:include src="template_mod.xhtml">
+            <ui:param name="new" value="false" />
+        </ui:include>
+    </ui:define>
+</ui:composition>

Added: trunk/view/manage/template/template_list.xhtml
===================================================================
--- trunk/view/manage/template/template_list.xhtml	                        (rev 0)
+++ trunk/view/manage/template/template_list.xhtml	2007-11-30 09:47:56 UTC (rev 145)
@@ -0,0 +1,32 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:rich="http://richfaces.org/rich"
+                template="../../layout/template.xhtml">
+    <ui:define name="body">
+        <h1>Manage templates</h1>
+
+        <s:link value="Add new template" view="/manage/template/template_add.xhtml" propagation="begin" />
+
+        <h3>Current templates:</h3>
+
+        <ui:repeat var="template" value="#{templateService.allTemplates}">
+            <p>
+                #{template.name} (#{template.type})
+                <br />
+                <s:link view="/manage/template/template_edit.xhtml" value="Edit">
+                    <f:param name="id" value="#{template.id}" />
+                </s:link>
+                <br />
+                <s:link view="/manage/template/template_delete.xhtml" action="#{templateMod.delete}" value="Delete"
+                        onclick="if (!confirm('Are you sure you want to delete this template?')) return false">
+                    <f:param name="id" value="#{template.id}" />
+                </s:link>
+            </p>
+        </ui:repeat>
+    </ui:define>
+</ui:composition>

Added: trunk/view/manage/template/template_mod.xhtml
===================================================================
--- trunk/view/manage/template/template_mod.xhtml	                        (rev 0)
+++ trunk/view/manage/template/template_mod.xhtml	2007-11-30 09:47:56 UTC (rev 145)
@@ -0,0 +1,61 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:rich="http://richfaces.org/rich"
+                xmlns:blog="http://jboss.org/blog/tags"
+                xmlns:a="http://richfaces.org/a4j">
+    <h:form>
+        <h:panelGrid columns="2">
+            <h:outputLabel for="name"><span class="required">*</span> Name:</h:outputLabel>
+            <h:panelGroup>
+                <h:inputText id="name" value="#{templateMod.template.name}" required="true" size="32">
+                    <blog:uniqueTemplateNameValidator entityId="#{templateMod.template.id}" />
+                    <a:support event="onblur" reRender="nameMessage" ajaxSingle="true" bypassUpdates="true"/>
+                    <s:validate />
+                </h:inputText>
+
+                <a:outputPanel id="nameMessage">
+                    <h:message for="name" styleClass="error" />
+                </a:outputPanel>
+            </h:panelGroup>
+
+            <h:outputLabel for="type"><span class="required">*</span> Template type:</h:outputLabel>
+            <h:panelGroup>
+                <h:selectOneMenu id="type" value="#{templateMod.template.type}" required="true">
+                    <s:enumItem enumValue="ATOM" />
+                    <s:enumItem enumValue="RSS2" />
+                    <s:convertEnum />
+                    <a:support event="onchange" reRender="typeMessage" ajaxSingle="true" />
+                    <s:validate />
+                </h:selectOneMenu>
+
+                <a:outputPanel id="typeMessage">
+                    <h:message for="type" styleClass="error" />
+                </a:outputPanel>
+            </h:panelGroup>
+
+            <h:outputLabel for="text"><span class="required">*</span> Text:</h:outputLabel>
+            <h:panelGroup>
+                <h:inputTextarea id="text" value="#{templateMod.template.text}" rows="8" cols="64" required="true">
+                    <a:support event="onblur" reRender="textMessage" ajaxSingle="true" bypassUpdates="true"/>
+                    <s:validate />
+                </h:inputTextarea>
+
+                <a:outputPanel id="textMessage">
+                    <h:message for="text" styleClass="error" />
+                </a:outputPanel>
+            </h:panelGroup>
+
+            <h:outputLabel />
+            <h:panelGroup>
+                <h:commandButton value="Add" action="#{templateMod.saveNew}" rendered="#{new}" />
+                <h:commandButton value="Save" action="#{templateMod.saveExisting}" rendered="#{!new}" />
+                <s:button value="Cancel" view="/manage/template/template_list.xhtml" propagation="end" />
+            </h:panelGroup>
+        </h:panelGrid>
+    </h:form>
+</ui:composition>




More information about the jboss-cvs-commits mailing list