[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