You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
(31) |
Apr
(21) |
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
(2) |
Nov
(9) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <bla...@us...> - 2009-06-30 03:45:42
|
Revision: 61 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=61&view=rev Author: blamonica Date: 2009-06-30 03:45:39 +0000 (Tue, 30 Jun 2009) Log Message: ----------- * Convert the project to use maven2. Modified Paths: -------------- trunk/drawbridge/.classpath trunk/drawbridge/.project trunk/drawbridge/.settings/org.eclipse.jdt.core.prefs trunk/drawbridge/.settings/org.eclipse.wst.common.component trunk/drawbridge/WebContent/META-INF/context.xml trunk/drawbridge/build.xml trunk/drawbridge/src/test/db.script trunk/drawbridge/src/test/drawbridge-test-spring.xml trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java trunk/drawbridge/src/test/net/sf/drawbridge/exec/DefaultJobExecuterTest.java trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzCronValidatorTest.java Added Paths: ----------- trunk/drawbridge/.settings/org.eclipse.ltk.core.refactoring.prefs trunk/drawbridge/.settings/org.maven.ide.eclipse.prefs trunk/drawbridge/pom.xml trunk/drawbridge/src/test/db.properties Removed Paths: ------------- trunk/drawbridge/master.dependencies.properties Property Changed: ---------------- trunk/drawbridge/ Property changes on: trunk/drawbridge ___________________________________________________________________ Modified: svn:ignore - target eclipse-target + target eclipse-target temp-testng-customsuite.xml test-output Modified: trunk/drawbridge/.classpath =================================================================== --- trunk/drawbridge/.classpath 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/.classpath 2009-06-30 03:45:39 UTC (rev 61) @@ -1,30 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src/java"/> - <classpathentry kind="src" path="src/test"/> + <classpathentry kind="src" output="target/test-classes" path="src/test"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="var" path="JAR_REPO/asm/asm.jar"/> - <classpathentry kind="var" path="JAR_REPO/asm/asm-attrs.jar"/> - <classpathentry kind="var" path="JAR_REPO/cglib/cglib-2.1.3.jar"/> - <classpathentry kind="var" path="JAR_REPO/commons/commons-beanutils.jar"/> - <classpathentry kind="var" path="JAR_REPO/commons/commons-codec.jar"/> - <classpathentry kind="var" path="JAR_REPO/commons/commons-collections.jar"/> - <classpathentry kind="var" path="JAR_REPO/commons/commons-lang.jar"/> - <classpathentry kind="var" path="JAR_REPO/commons/commons-logging.jar"/> - <classpathentry kind="var" path="JAR_REPO/displaytag/displaytag-1.1.1.jar"/> - <classpathentry kind="var" path="JAR_REPO/dom4j/dom4j-1.6.1.jar"/> - <classpathentry kind="var" path="JAR_REPO/hibernate/hibernate-3.2.6.jar"/> - <classpathentry kind="var" path="JAR_REPO/hsqldb/hsqldb-1.9.0-beta.jar"/> - <classpathentry kind="var" path="JAR_REPO/jmock/jmock-1.0.1.jar"/> - <classpathentry kind="var" path="JAR_REPO/jstl/jstl.jar"/> - <classpathentry kind="var" path="JAR_REPO/jta/jta.jar"/> - <classpathentry kind="var" path="JAR_REPO/junit/junit-4.4.jar"/> - <classpathentry kind="var" path="JAR_REPO/mysql/mysql-connector-java-5.1.5-bin.jar"/> - <classpathentry kind="var" path="JAR_REPO/quartz/quartz-all-1.6.0.jar"/> - <classpathentry kind="var" path="JAR_REPO/servlet/servlet-api.jar"/> - <classpathentry kind="var" path="JAR_REPO/spring/spring-2.5.2.jar"/> - <classpathentry kind="var" path="JAR_REPO/standard/standard.jar"/> - <classpathentry kind="var" path="JAR_REPO/spring/spring-webmvc-2.5.2.jar"/> - <classpathentry kind="var" path="JAR_REPO/spring/spring-test-2.5.2.jar"/> - <classpathentry kind="output" path="eclipse-target/classes"/> + <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> + <classpathentry kind="output" path="target/classes"/> </classpath> Modified: trunk/drawbridge/.project =================================================================== --- trunk/drawbridge/.project 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/.project 2009-06-30 03:45:39 UTC (rev 61) @@ -6,27 +6,33 @@ </projects> <buildSpec> <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> + <name>org.eclipse.wst.common.project.facet.core.builder</name> <arguments> </arguments> </buildCommand> <buildCommand> - <name>org.eclipse.wst.common.project.facet.core.builder</name> + <name>org.eclipse.wst.validation.validationbuilder</name> <arguments> </arguments> </buildCommand> <buildCommand> - <name>org.eclipse.wst.validation.validationbuilder</name> + <name>org.springframework.ide.eclipse.core.springbuilder</name> <arguments> </arguments> </buildCommand> <buildCommand> - <name>org.springframework.ide.eclipse.core.springbuilder</name> + <name>org.maven.ide.eclipse.maven2Builder</name> <arguments> </arguments> </buildCommand> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> </buildSpec> <natures> + <nature>org.maven.ide.eclipse.maven2Nature</nature> <nature>org.springframework.ide.eclipse.core.springnature</nature> <nature>org.eclipse.wst.common.project.facet.core.nature</nature> <nature>org.eclipse.jdt.core.javanature</nature> Modified: trunk/drawbridge/.settings/org.eclipse.jdt.core.prefs =================================================================== --- trunk/drawbridge/.settings/org.eclipse.jdt.core.prefs 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/.settings/org.eclipse.jdt.core.prefs 2009-06-30 03:45:39 UTC (rev 61) @@ -1,7 +1,12 @@ -#Fri Jan 18 18:19:08 CST 2008 +#Sat Jun 27 10:49:17 MDT 2009 eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.source=1.5 Added: trunk/drawbridge/.settings/org.eclipse.ltk.core.refactoring.prefs =================================================================== --- trunk/drawbridge/.settings/org.eclipse.ltk.core.refactoring.prefs (rev 0) +++ trunk/drawbridge/.settings/org.eclipse.ltk.core.refactoring.prefs 2009-06-30 03:45:39 UTC (rev 61) @@ -0,0 +1,3 @@ +#Sat Jun 27 17:32:48 MDT 2009 +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false Modified: trunk/drawbridge/.settings/org.eclipse.wst.common.component =================================================================== --- trunk/drawbridge/.settings/org.eclipse.wst.common.component 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/.settings/org.eclipse.wst.common.component 2009-06-30 03:45:39 UTC (rev 61) @@ -2,11 +2,11 @@ <project-modules id="moduleCoreId" project-version="1.5.0"> <wb-module deploy-name="drawbridge"> <wb-resource deploy-path="/" source-path="/WebContent"/> -<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/java"/> -<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/dummy"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/xsd"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/webtest"/> +<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/java"/> +<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test"/> <property name="java-output-path" value="build/classes"/> <property name="context-root" value="drawbridge"/> </wb-module> Added: trunk/drawbridge/.settings/org.maven.ide.eclipse.prefs =================================================================== --- trunk/drawbridge/.settings/org.maven.ide.eclipse.prefs (rev 0) +++ trunk/drawbridge/.settings/org.maven.ide.eclipse.prefs 2009-06-30 03:45:39 UTC (rev 61) @@ -0,0 +1,9 @@ +#Sat Jun 27 20:19:43 MDT 2009 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +skipCompilerPlugin=true +version=1 Modified: trunk/drawbridge/WebContent/META-INF/context.xml =================================================================== --- trunk/drawbridge/WebContent/META-INF/context.xml 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/WebContent/META-INF/context.xml 2009-06-30 03:45:39 UTC (rev 61) @@ -1,8 +1,10 @@ -<Context docBase="drawbridge" path="/drawbridge" reloadable="true" debug="1" source="org.eclipse.jst.jee.server:drawbridge"> - <Resource name="jdbc/DrawbridgeDataSource" auth="Container" type="javax.sql.DataSource" - maxActive="30" maxIdle="30" maxWait="10000" - username="drawbridge_user" password="drawbridge" driverClassName="com.mysql.jdbc.Driver" - url="jdbc:mysql://localhost:3306/drawbridge"/> +<Context docBase="drawbridge" path="/drawbridge" reloadable="true" debug="1"> + <Resource name="jdbc/DrawbridgeDataSource" auth="Container" + type="javax.sql.DataSource" username="drawbridge_user" password="drawbridge" + driverClassName="com.mysql.jdbc.Driver" maxActive="8" + url="jdbc:mysql://localhost:3306/drawbridge?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8" + maxIdle="4" /> + </Context> Modified: trunk/drawbridge/build.xml =================================================================== --- trunk/drawbridge/build.xml 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/build.xml 2009-06-30 03:45:39 UTC (rev 61) @@ -1,173 +1,7 @@ -<project name="Drawbridge" default="all"> +<project name="Drawbridge" default="webtest"> <taskdef resource="net/sf/antcontrib/antcontrib.properties"/> - - <property file="master.dependencies.properties"/> - - <target name="all" depends="clean,compile,unit-test,package"/> - <property environment="env"/> - - <target name="set.jar_repo.property" unless="${env.JAR_REPO}"> - <fail message="JAR_REPO environment variable not set!"/> - </target> - - <target name="clean"> - <delete dir="target"/> - </target> - - <target name="get.dependencies" unless="${env.LOCAL_DEPLOY}"> - <get-dependency dep="${jar.asm.attrs}"/> - <get-dependency dep="${jar.asm}"/> - <get-dependency dep="${jar.cglib}"/> - <get-dependency dep="${jar.commons.beanutils}"/> - <get-dependency dep="${jar.commons.codec}"/> - <get-dependency dep="${jar.commons.collections}"/> - <get-dependency dep="${jar.commons.lang}"/> - <get-dependency dep="${jar.commons.logging}"/> - <get-dependency dep="${jar.displaytag}"/> - <get-dependency dep="${jar.dom4j}"/> - <get-dependency dep="${jar.dwr}"/> - <get-dependency dep="${jar.hibernate}"/> - <get-dependency dep="${jar.hsqldb}"/> - <get-dependency dep="${jar.jmock}"/> - <get-dependency dep="${jar.jstl}"/> - <get-dependency dep="${jar.jta}"/> - <get-dependency dep="${jar.junit}"/> - <get-dependency dep="${jar.mysql}"/> - <get-dependency dep="${jar.quartz}"/> - <get-dependency dep="${jar.servlet}"/> - <get-dependency dep="${jar.spring}"/> - <get-dependency dep="${jar.spring.web}"/> - <get-dependency dep="${jar.spring.test}"/> - <get-dependency dep="${jar.standard}"/> - </target> - - <macrodef name="get-dependency"> - <attribute name="dep"/> - <sequential> - <if> - <available file="${env.JAR_REPO}/@{dep}"/> - <then> - </then> - <else> - <mkdir dir="${env.JAR_REPO}/@{dep}"/> - <delete dir="${env.JAR_REPO}/@{dep}"/> - </else> - </if> - <get dest="${env.JAR_REPO}/@{dep}" src="http://www.pojo.us/drawbridge/@{dep}" usetimestamp="true" verbose="on" ignoreerrors="true"/> - </sequential> - </macrodef> - - <path id="classpath.compile"> - <pathelement path="${env.JAR_REPO}/${jar.asm.attrs}"/> - <pathelement path="${env.JAR_REPO}/${jar.asm}"/> - <pathelement path="${env.JAR_REPO}/${jar.cglib}"/> - <pathelement path="${env.JAR_REPO}/${jar.commons.beanutils}"/> - <pathelement path="${env.JAR_REPO}/${jar.commons.codec}"/> - <pathelement path="${env.JAR_REPO}/${jar.commons.collections}"/> - <pathelement path="${env.JAR_REPO}/${jar.commons.lang}"/> - <pathelement path="${env.JAR_REPO}/${jar.commons.logging}"/> - <pathelement path="${env.JAR_REPO}/${jar.displaytag}"/> - <pathelement path="${env.JAR_REPO}/${jar.dom4j}"/> - <pathelement path="${env.JAR_REPO}/${jar.hibernate}"/> - <pathelement path="${env.JAR_REPO}/${jar.jstl}"/> - <pathelement path="${env.JAR_REPO}/${jar.jta}"/> - <pathelement path="${env.JAR_REPO}/${jar.quartz}"/> - <pathelement path="${env.JAR_REPO}/${jar.servlet}"/> - <pathelement path="${env.JAR_REPO}/${jar.spring}"/> - <pathelement path="${env.JAR_REPO}/${jar.spring.web}"/> - <pathelement path="${env.JAR_REPO}/${jar.standard}"/> - </path> - - <path id="classpath.unit-test"> - <pathelement path="${env.JAR_REPO}/${jar.hsqldb}"/> - <pathelement path="${env.JAR_REPO}/${jar.jmock}"/> - <pathelement path="${env.JAR_REPO}/${jar.junit}"/> - <pathelement path="${env.JAR_REPO}/${jar.spring.test}"/> - </path> - - <target name="compile" depends="get.dependencies"> - <mkdir dir="target"/> - <mkdir dir="target/classes"/> - <javac destdir="target/classes" srcdir="src/java" includes="**/*.java"> - <classpath> - <path refid="classpath.compile"/> - </classpath> - </javac> - - <copy todir="target/classes"> - <fileset dir="src/java" includes="**/*"/> - </copy> - </target> - - <target name="unit-test" depends="compile"> - <mkdir dir="target/test-classes"/> - <javac destdir="target/test-classes" srcdir="src/test" includes="**/*Test.java"> - <classpath> - <path path="target/classes"/> - <path refid="classpath.compile"/> - <path refid="classpath.unit-test"/> - </classpath> - </javac> - - <copy todir="target/test-classes"> - <fileset dir="src/test" includes="**/*" excludes="**/*.java"/> - </copy> - - <junit showoutput="false" haltonfailure="true" haltonerror="true" fork="yes" forkmode="once" dir="${basedir}"> - <batchtest> - <fileset dir="target/test-classes" includes="**/*Test.class" excludes="**/Abstract*"/> - </batchtest> - <classpath> - <path path="target/classes"/> - <path path="target/test-classes"/> - <path refid="classpath.compile"/> - <path refid="classpath.unit-test"/> - </classpath> - <formatter type="brief" usefile="false" /> - </junit> - </target> - - <target name="package" depends="compile"> - <jar jarfile="target/drawbridge.jar" compress="true"> - <fileset dir="target/classes" includes="**/*"/> - <fileset dir="target/classes" includes="**/*.xml"/> - <fileset dir="src/java" includes="**/*.java"/> - </jar> - - <copy flatten="true" failonerror="true" overwrite="true" todir="${basedir}/WebContent/WEB-INF/lib"> - <resources> - <file file="${env.JAR_REPO}/${jar.asm.attrs}"/> - <file file="${env.JAR_REPO}/${jar.asm}"/> - <file file="${env.JAR_REPO}/${jar.cglib}"/> - <file file="${env.JAR_REPO}/${jar.commons.beanutils}"/> - <file file="${env.JAR_REPO}/${jar.commons.codec}"/> - <file file="${env.JAR_REPO}/${jar.commons.collections}"/> - <file file="${env.JAR_REPO}/${jar.commons.lang}"/> - <file file="${env.JAR_REPO}/${jar.commons.logging}"/> - <file file="${env.JAR_REPO}/${jar.displaytag}"/> - <file file="${env.JAR_REPO}/${jar.dom4j}"/> - <file file="${env.JAR_REPO}/${jar.dwr}"/> - <file file="${env.JAR_REPO}/${jar.hibernate}"/> - <file file="${env.JAR_REPO}/${jar.jstl}"/> - <file file="${env.JAR_REPO}/${jar.jta}"/> - <file file="${env.JAR_REPO}/${jar.quartz}"/> - <file file="${env.JAR_REPO}/${jar.servlet}"/> - <file file="${env.JAR_REPO}/${jar.spring}"/> - <file file="${env.JAR_REPO}/${jar.spring.web}"/> - <file file="${env.JAR_REPO}/${jar.standard}"/> - <file file="${env.JAR_REPO}/${jar.mysql}"/> - </resources> - </copy> - - <war warfile="target/drawbridge.war" webxml="WebContent/WEB-INF/web.xml" compress="true"> - <zipfileset dir="WebContent" includes="**/*" /> - <zipfileset file="target/drawbridge.jar" prefix="WEB-INF/lib"/> - </war> - - </target> - <target name="webtest"> <ant dir="src/canoo" antfile="build.xml"/> </target> Deleted: trunk/drawbridge/master.dependencies.properties =================================================================== --- trunk/drawbridge/master.dependencies.properties 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/master.dependencies.properties 2009-06-30 03:45:39 UTC (rev 61) @@ -1,24 +0,0 @@ -jar.asm.attrs=asm/asm-attrs.jar -jar.asm=asm/asm.jar -jar.cglib=cglib/cglib-2.1.3.jar -jar.commons.beanutils=commons/commons-beanutils.jar -jar.commons.codec=commons/commons-codec.jar -jar.commons.collections=commons/commons-collections.jar -jar.commons.lang=commons/commons-lang.jar -jar.commons.logging=commons/commons-logging.jar -jar.displaytag=displaytag/displaytag-1.1.1.jar -jar.dom4j=dom4j/dom4j-1.6.1.jar -jar.dwr=dwr/dwr-2.0.3.jar -jar.hibernate=hibernate/hibernate-3.2.6.jar -jar.hsqldb=hsqldb/hsqldb-1.9.0-beta.jar -jar.jmock=jmock/jmock-1.0.1.jar -jar.jstl=jstl/jstl.jar -jar.jta=jta/jta.jar -jar.junit=junit/junit-4.4.jar -jar.mysql=mysql/mysql-connector-java-5.1.5-bin.jar -jar.quartz=quartz/quartz-all-1.6.0.jar -jar.servlet=servlet/servlet-api.jar -jar.spring=spring/spring-2.5.2.jar -jar.spring.web=spring/spring-webmvc-2.5.2.jar -jar.spring.test=spring/spring-test-2.5.2.jar -jar.standard=standard/standard.jar \ No newline at end of file Added: trunk/drawbridge/pom.xml =================================================================== --- trunk/drawbridge/pom.xml (rev 0) +++ trunk/drawbridge/pom.xml 2009-06-30 03:45:39 UTC (rev 61) @@ -0,0 +1,168 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>net.sf.drawbridge</groupId> + <artifactId>drawbridge</artifactId> + <packaging>war</packaging> + <name>Drawbridge</name> + <version>0.0.1-SNAPSHOT</version> + <description>A Java-based database management workflow application. Users can submit queries, approve queries, and run approved queries immediately or on a schedule.</description> + <build> + <sourceDirectory>src/java</sourceDirectory> + <testSourceDirectory>src/test</testSourceDirectory> + <outputDirectory>target/classes</outputDirectory> + <testOutputDirectory>target/test-classes</testOutputDirectory> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>tomcat-maven-plugin</artifactId> + <version>1.0-beta-1</version> + <configuration> + <warSourceDirectory>${basedir}/WebContent</warSourceDirectory> + <port>8081</port> + </configuration> + <dependencies> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>5.1.6</version> + <scope>runtime</scope> + </dependency> + </dependencies> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-war-plugin</artifactId> + <version>2.1-beta-1</version> + <configuration> + <cacheFile>${project.build.directory}/war/work/webapp-cache.xml</cacheFile> + <outputDirectory> ${project.build.directory}</outputDirectory> + <warName>${project.build.finalName}</warName> + <warSourceDirectory>${basedir}/WebContent/</warSourceDirectory> + <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory> + <workDirectory>${project.build.directory}/war/work</workDirectory> + </configuration> + <executions> + <execution> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>2.0.2</version> + <configuration> + <source>1.5</source> + <target>1.5</target> + </configuration> + </plugin> + </plugins> + </build> + <repositories> + <repository> + <id>pojo.us/external_free</id> + <url>http://www.pojo.us/maven2_repositories/external_free</url> + <releases> + <enabled>true</enabled> + </releases> + <snapshots> + <enabled>false</enabled> + </snapshots> + </repository> + </repositories> + <dependencies> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-webmvc</artifactId> + <version>2.5.6.SEC01</version> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>2.5</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-orm</artifactId> + <version>2.5.6.SEC01</version> + </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate</artifactId> + <version>3.2.6.ga</version> + </dependency> + <dependency> + <groupId>javax.transaction</groupId> + <artifactId>jta</artifactId> + <version>1.1</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-jdbc</artifactId> + <version>2.5.6.SEC01</version> + </dependency> + <dependency> + <groupId>opensymphony</groupId> + <artifactId>quartz</artifactId> + <version>1.6.3</version> + </dependency> + <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + <version>1.3</version> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.6</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>jmock</groupId> + <artifactId>jmock</artifactId> + <version>1.2.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>jstl</artifactId> + <version>1.1.2</version> + </dependency> + <dependency> + <groupId>org.directwebremoting</groupId> + <artifactId>dwr</artifactId> + <version>2.0.3</version> + </dependency> + <dependency> + <groupId>hsqldb</groupId> + <artifactId>hsqldb</artifactId> + <version>1.9.0-beta3</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + <version>2.5.6.SEC01</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testng</groupId> + <artifactId>testng</artifactId> + <version>5.8</version> + <classifier>jdk15</classifier> + <scope>test</scope> + </dependency> + <dependency> + <groupId>commons-collections</groupId> + <artifactId>commons-collections</artifactId> + <version>3.2.1</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>5.1.6</version> + <scope>runtime</scope> + </dependency> + </dependencies> +</project> \ No newline at end of file Added: trunk/drawbridge/src/test/db.properties =================================================================== --- trunk/drawbridge/src/test/db.properties (rev 0) +++ trunk/drawbridge/src/test/db.properties 2009-06-30 03:45:39 UTC (rev 61) @@ -0,0 +1,18 @@ +#HSQL Database Engine 1.9.0.0 +#Mon Jun 29 20:35:41 MDT 2009 +hsqldb.script_format=0 +runtime.gc_interval=0 +sql.enforce_strict_size=false +sql.enforce_keywords=false +hsqldb.cache_size_scale=8 +readonly=false +hsqldb.nio_data_file=true +hsqldb.cache_scale=15 +version=1.9.0 +hsqldb.cache_file_scale=1 +hsqldb.lock_file=true +hsqldb.log_size=200 +modified=yes +hsqldb.cache_version=1.7.0 +hsqldb.original_version=1.9.0 +hsqldb.compatible_version=1.9.0 Modified: trunk/drawbridge/src/test/db.script =================================================================== --- trunk/drawbridge/src/test/db.script 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/src/test/db.script 2009-06-30 03:45:39 UTC (rev 61) @@ -1,39 +1,49 @@ -CREATE USER SA PASSWORD "" +SET DATABASE COLLATION "English" +CREATE USER SA PASSWORD '' CREATE SCHEMA PUBLIC AUTHORIZATION DBA SET SCHEMA PUBLIC -CREATE MEMORY TABLE DB_USER(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,USER_NAME VARCHAR(16) NOT NULL,FIRST_NAME VARCHAR(32) NOT NULL,LAST_NAME VARCHAR(32) NOT NULL,ACTIVE VARCHAR(1) DEFAULT 'Y' NOT NULL,CONSTRAINT UNQ_DB_USER UNIQUE(USER_NAME)) -CREATE MEMORY TABLE DB_GROUP(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 3) NOT NULL PRIMARY KEY,GROUP_NAME VARCHAR(16) NOT NULL,CONSTRAINT UNQ_DB_GROUP UNIQUE(GROUP_NAME)) -CREATE MEMORY TABLE DB_USER_GROUP(USER_ID INTEGER NOT NULL,GROUP_ID INTEGER NOT NULL,PRIMARY KEY(USER_ID,GROUP_ID),CONSTRAINT FK_DB_USER_GROUP_DB_USER FOREIGN KEY(USER_ID) REFERENCES PUBLIC.DB_USER(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_USER_GROUP_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE) -CREATE MEMORY TABLE DB_DRIVER(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,NAME VARCHAR(32) NOT NULL,CLASS_NAME VARCHAR(128) NOT NULL,CONSTRAINT UNQ_DB_DRIVER UNIQUE(NAME)) -CREATE MEMORY TABLE DB_DATABASE(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,NAME VARCHAR(32) NOT NULL,JDBC_URL VARCHAR(128) NOT NULL,DRIVER_ID INTEGER NOT NULL,CONSTRAINT FK_DB_DATABASE_DB_DRIVER FOREIGN KEY(DRIVER_ID) REFERENCES PUBLIC.DB_DRIVER(ID),CONSTRAINT UNQ_DB_DATABASE UNIQUE(NAME)) -CREATE MEMORY TABLE DB_RUN_AS(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,USER_NAME VARCHAR(16) NOT NULL,ENC_PASSWORD VARCHAR(32) NOT NULL,DATABASE_ID INTEGER NOT NULL,CONSTRAINT FK_DB_RUN_AS_DB_DATABASE FOREIGN KEY(DATABASE_ID) REFERENCES PUBLIC.DB_DATABASE(ID),CONSTRAINT UNQ_DB_RUN_AS UNIQUE(USER_NAME,DATABASE_ID)) -CREATE MEMORY TABLE DB_JOB(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,RUN_AS_ID INTEGER NOT NULL,JOB_TYPE VARCHAR(1) NOT NULL,QUERY VARCHAR(1024) NOT NULL,SUBMITTED_BY INTEGER NOT NULL,SUBMITTED_ON TIMESTAMP NOT NULL,REVIEWED_BY INTEGER,REVIEWED_ON TIMESTAMP,APPROVED_BY INTEGER,APPROVED_ON TIMESTAMP,ACTIVE VARCHAR(1) NOT NULL,HANDLER VARCHAR(128),HANDLER_PARAMS VARCHAR(512),CONSTRAINT FK_DB_JOB_DB_RUN_AS FOREIGN KEY(RUN_AS_ID) REFERENCES PUBLIC.DB_RUN_AS(ID),CONSTRAINT FK_DB_JOB_SUBMITTED_BY FOREIGN KEY(SUBMITTED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_REVIEWED_BY FOREIGN KEY(REVIEWED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_APPROVED_BY FOREIGN KEY(APPROVED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT UNQ_DB_JOB UNIQUE(NAME),CONSTRAINT CHK_DB_JOB_ACTIVE CHECK((DB_JOB.ACTIVE) IN (('Y'),('N'))),CONSTRAINT CHK_DB_JOB_JOB_TYPE CHECK((DB_JOB.JOB_TYPE) IN (('Q'),('U'),('P')))) -CREATE MEMORY TABLE DB_SCHEDULE(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,JOB_ID INTEGER NOT NULL,START_DATE DATE,STOP_DATE DATE,SCHEDULE VARCHAR(128) NOT NULL,VERSION INTEGER DEFAULT 0 NOT NULL,CONSTRAINT FK_DB_SCHEDULE_DB_JOB FOREIGN KEY(JOB_ID) REFERENCES PUBLIC.DB_JOB(ID)) -CREATE MEMORY TABLE DB_PERMISSION_LIST(ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,PERMISSION_TYPE VARCHAR(1) NOT NULL,CONSTRAINT UNQ_DB_PERMISSION UNIQUE(NAME,PERMISSION_TYPE),CONSTRAINT CHK_DB_PERMISSION_LIST_PERMISSION_TYPE CHECK((DB_PERMISSION_LIST.PERMISSION_TYPE) IN (('S'),('D'),('R')))) -CREATE MEMORY TABLE DB_SYSTEM_PERMISSION(GROUP_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,PRIMARY KEY(GROUP_ID,PERMISSION_ID),CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE) -CREATE MEMORY TABLE DB_DATABASE_PERMISSION(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,GROUP_ID INTEGER NOT NULL,DATABASE_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_DATABASE FOREIGN KEY(DATABASE_ID) REFERENCES PUBLIC.DB_DATABASE(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT UNQ_DB_GRAP UNIQUE(GROUP_ID,DATABASE_ID,PERMISSION_ID)) -CREATE MEMORY TABLE DB_RUN_AS_PERMISSION(GROUP_ID INTEGER NOT NULL,RUN_AS_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,PRIMARY KEY(GROUP_ID,RUN_AS_ID,PERMISSION_ID),CONSTRAINT FK_DB_RUN_AS_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_RUN_AS_PERMISSION_DB_RUN_AS FOREIGN KEY(RUN_AS_ID) REFERENCES PUBLIC.DB_RUN_AS(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_RUN_AS_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE) -CREATE MEMORY TABLE QRTZ_JOB_DETAILS(JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250),JOB_CLASS_NAME VARCHAR(250) NOT NULL,IS_DURABLE BOOLEAN NOT NULL,IS_VOLATILE BOOLEAN NOT NULL,IS_STATEFUL BOOLEAN NOT NULL,REQUESTS_RECOVERY BOOLEAN NOT NULL,JOB_DATA BINARY,PRIMARY KEY(JOB_NAME,JOB_GROUP)) -CREATE MEMORY TABLE QRTZ_JOB_LISTENERS(JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,JOB_LISTENER VARCHAR(200) NOT NULL,PRIMARY KEY(JOB_NAME,JOB_GROUP,JOB_LISTENER),FOREIGN KEY(JOB_NAME,JOB_GROUP) REFERENCES PUBLIC.QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)) -CREATE MEMORY TABLE QRTZ_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,IS_VOLATILE BOOLEAN NOT NULL,DESCRIPTION VARCHAR(250),NEXT_FIRE_TIME NUMERIC(13,0),PREV_FIRE_TIME NUMERIC(13,0),PRIORITY INTEGER,TRIGGER_STATE VARCHAR(16) NOT NULL,TRIGGER_TYPE VARCHAR(8) NOT NULL,START_TIME NUMERIC(13,0) NOT NULL,END_TIME NUMERIC(13,0),CALENDAR_NAME VARCHAR(200),MISFIRE_INSTR NUMERIC(2,0),JOB_DATA BINARY,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(JOB_NAME,JOB_GROUP) REFERENCES PUBLIC.QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)) -CREATE MEMORY TABLE QRTZ_SIMPLE_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,REPEAT_COUNT NUMERIC(7,0) NOT NULL,REPEAT_INTERVAL NUMERIC(12,0) NOT NULL,TIMES_TRIGGERED NUMERIC(7,0) NOT NULL,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) -CREATE MEMORY TABLE QRTZ_CRON_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,CRON_EXPRESSION VARCHAR(120) NOT NULL,TIME_ZONE_ID VARCHAR(80),PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) -CREATE MEMORY TABLE QRTZ_BLOB_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,BLOB_DATA BINARY,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) -CREATE MEMORY TABLE QRTZ_TRIGGER_LISTENERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,TRIGGER_LISTENER VARCHAR(200) NOT NULL,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_LISTENER),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) -CREATE MEMORY TABLE QRTZ_CALENDARS(CALENDAR_NAME VARCHAR(200) NOT NULL PRIMARY KEY,CALENDAR BINARY NOT NULL) -CREATE MEMORY TABLE QRTZ_PAUSED_TRIGGER_GRPS(TRIGGER_GROUP VARCHAR(200) NOT NULL PRIMARY KEY) -CREATE MEMORY TABLE QRTZ_FIRED_TRIGGERS(ENTRY_ID VARCHAR(95) NOT NULL PRIMARY KEY,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,IS_VOLATILE BOOLEAN NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,FIRED_TIME NUMERIC(13,0) NOT NULL,PRIORITY INTEGER NOT NULL,STATE VARCHAR(16) NOT NULL,JOB_NAME VARCHAR(200),JOB_GROUP VARCHAR(200),IS_STATEFUL BOOLEAN,REQUESTS_RECOVERY BOOLEAN) -CREATE MEMORY TABLE QRTZ_SCHEDULER_STATE(INSTANCE_NAME VARCHAR(200) NOT NULL PRIMARY KEY,LAST_CHECKIN_TIME NUMERIC(13,0) NOT NULL,CHECKIN_INTERVAL NUMERIC(13,0) NOT NULL) -CREATE MEMORY TABLE QRTZ_LOCKS(LOCK_NAME VARCHAR(40) NOT NULL PRIMARY KEY) -ALTER TABLE DB_USER ALTER COLUMN ID RESTART WITH 2 -ALTER TABLE DB_GROUP ALTER COLUMN ID RESTART WITH 3 -ALTER TABLE DB_DRIVER ALTER COLUMN ID RESTART WITH 1 -ALTER TABLE DB_DATABASE ALTER COLUMN ID RESTART WITH 1 -ALTER TABLE DB_RUN_AS ALTER COLUMN ID RESTART WITH 2 -ALTER TABLE DB_JOB ALTER COLUMN ID RESTART WITH 2 -ALTER TABLE DB_SCHEDULE ALTER COLUMN ID RESTART WITH 2 -ALTER TABLE DB_DATABASE_PERMISSION ALTER COLUMN ID RESTART WITH 0 -SET SCHEMA PUBLIC +CREATE MEMORY TABLE PUBLIC.DB_USER(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,USER_NAME VARCHAR(16) NOT NULL,FIRST_NAME VARCHAR(32) NOT NULL,LAST_NAME VARCHAR(32) NOT NULL,ACTIVE VARCHAR(1) DEFAULT 'Y' NOT NULL,CONSTRAINT UNQ_DB_USER UNIQUE(USER_NAME)) +ALTER TABLE PUBLIC.DB_USER ALTER COLUMN ID RESTART WITH 2 +CREATE MEMORY TABLE PUBLIC.DB_GROUP(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 3) NOT NULL PRIMARY KEY,GROUP_NAME VARCHAR(16) NOT NULL,CONSTRAINT UNQ_DB_GROUP UNIQUE(GROUP_NAME)) +ALTER TABLE PUBLIC.DB_GROUP ALTER COLUMN ID RESTART WITH 3 +CREATE MEMORY TABLE PUBLIC.DB_USER_GROUP(USER_ID INTEGER NOT NULL,GROUP_ID INTEGER NOT NULL,PRIMARY KEY(USER_ID,GROUP_ID),CONSTRAINT FK_DB_USER_GROUP_DB_USER FOREIGN KEY(USER_ID) REFERENCES PUBLIC.DB_USER(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_USER_GROUP_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE) +CREATE MEMORY TABLE PUBLIC.DB_DRIVER(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,NAME VARCHAR(32) NOT NULL,CLASS_NAME VARCHAR(128) NOT NULL,CONSTRAINT UNQ_DB_DRIVER UNIQUE(NAME)) +ALTER TABLE PUBLIC.DB_DRIVER ALTER COLUMN ID RESTART WITH 1 +CREATE MEMORY TABLE PUBLIC.DB_DATABASE(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,NAME VARCHAR(32) NOT NULL,JDBC_URL VARCHAR(128) NOT NULL,DRIVER_ID INTEGER NOT NULL,CONSTRAINT FK_DB_DATABASE_DB_DRIVER FOREIGN KEY(DRIVER_ID) REFERENCES PUBLIC.DB_DRIVER(ID),CONSTRAINT UNQ_DB_DATABASE UNIQUE(NAME)) +ALTER TABLE PUBLIC.DB_DATABASE ALTER COLUMN ID RESTART WITH 1 +CREATE MEMORY TABLE PUBLIC.DB_RUN_AS(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,USER_NAME VARCHAR(16) NOT NULL,ENC_PASSWORD VARCHAR(32) NOT NULL,DATABASE_ID INTEGER NOT NULL,CONSTRAINT FK_DB_RUN_AS_DB_DATABASE FOREIGN KEY(DATABASE_ID) REFERENCES PUBLIC.DB_DATABASE(ID),CONSTRAINT UNQ_DB_RUN_AS UNIQUE(USER_NAME,DATABASE_ID)) +ALTER TABLE PUBLIC.DB_RUN_AS ALTER COLUMN ID RESTART WITH 2 +CREATE MEMORY TABLE PUBLIC.DB_JOB(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,RUN_AS_ID INTEGER NOT NULL,JOB_TYPE VARCHAR(1) NOT NULL,QUERY VARCHAR(1024) NOT NULL,SUBMITTED_BY INTEGER NOT NULL,SUBMITTED_ON TIMESTAMP NOT NULL,REVIEWED_BY INTEGER,REVIEWED_ON TIMESTAMP,APPROVED_BY INTEGER,APPROVED_ON TIMESTAMP,ACTIVE VARCHAR(1) NOT NULL,HANDLER VARCHAR(128),HANDLER_PARAMS VARCHAR(512),CONSTRAINT FK_DB_JOB_DB_RUN_AS FOREIGN KEY(RUN_AS_ID) REFERENCES PUBLIC.DB_RUN_AS(ID),CONSTRAINT FK_DB_JOB_SUBMITTED_BY FOREIGN KEY(SUBMITTED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_REVIEWED_BY FOREIGN KEY(REVIEWED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_APPROVED_BY FOREIGN KEY(APPROVED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT UNQ_DB_JOB UNIQUE(NAME),CONSTRAINT CHK_DB_JOB_ACTIVE CHECK((PUBLIC.DB_JOB.ACTIVE) IN (('Y'),('N'))),CONSTRAINT CHK_DB_JOB_JOB_TYPE CHECK((PUBLIC.DB_JOB.JOB_TYPE) IN (('Q'),('U'),('P')))) +ALTER TABLE PUBLIC.DB_JOB ALTER COLUMN ID RESTART WITH 2 +CREATE MEMORY TABLE PUBLIC.DB_SCHEDULE(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,JOB_ID INTEGER NOT NULL,START_DATE DATE,STOP_DATE DATE,SCHEDULE VARCHAR(128) NOT NULL,VERSION INTEGER DEFAULT 0 NOT NULL,CONSTRAINT FK_DB_SCHEDULE_DB_JOB FOREIGN KEY(JOB_ID) REFERENCES PUBLIC.DB_JOB(ID)) +ALTER TABLE PUBLIC.DB_SCHEDULE ALTER COLUMN ID RESTART WITH 2 +CREATE MEMORY TABLE PUBLIC.DB_PERMISSION_LIST(ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,PERMISSION_TYPE VARCHAR(1) NOT NULL,CONSTRAINT UNQ_DB_PERMISSION UNIQUE(NAME,PERMISSION_TYPE),CONSTRAINT CHK_DB_PERMISSION_LIST_PERMISSION_TYPE CHECK((PUBLIC.DB_PERMISSION_LIST.PERMISSION_TYPE) IN (('S'),('D'),('R')))) +CREATE MEMORY TABLE PUBLIC.DB_SYSTEM_PERMISSION(GROUP_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,PRIMARY KEY(GROUP_ID,PERMISSION_ID),CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE) +CREATE MEMORY TABLE PUBLIC.DB_DATABASE_PERMISSION(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,GROUP_ID INTEGER NOT NULL,DATABASE_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_DATABASE FOREIGN KEY(DATABASE_ID) REFERENCES PUBLIC.DB_DATABASE(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT UNQ_DB_GRAP UNIQUE(GROUP_ID,DATABASE_ID,PERMISSION_ID)) +ALTER TABLE PUBLIC.DB_DATABASE_PERMISSION ALTER COLUMN ID RESTART WITH 0 +CREATE MEMORY TABLE PUBLIC.DB_RUN_AS_PERMISSION(GROUP_ID INTEGER NOT NULL,RUN_AS_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,PRIMARY KEY(GROUP_ID,RUN_AS_ID,PERMISSION_ID),CONSTRAINT FK_DB_RUN_AS_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_RUN_AS_PERMISSION_DB_RUN_AS FOREIGN KEY(RUN_AS_ID) REFERENCES PUBLIC.DB_RUN_AS(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_RUN_AS_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE) +CREATE MEMORY TABLE PUBLIC.QRTZ_JOB_DETAILS(JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250),JOB_CLASS_NAME VARCHAR(250) NOT NULL,IS_DURABLE BOOLEAN NOT NULL,IS_VOLATILE BOOLEAN NOT NULL,IS_STATEFUL BOOLEAN NOT NULL,REQUESTS_RECOVERY BOOLEAN NOT NULL,JOB_DATA BINARY,PRIMARY KEY(JOB_NAME,JOB_GROUP)) +CREATE MEMORY TABLE PUBLIC.QRTZ_JOB_LISTENERS(JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,JOB_LISTENER VARCHAR(200) NOT NULL,PRIMARY KEY(JOB_NAME,JOB_GROUP,JOB_LISTENER),FOREIGN KEY(JOB_NAME,JOB_GROUP) REFERENCES PUBLIC.QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)) +CREATE MEMORY TABLE PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,IS_VOLATILE BOOLEAN NOT NULL,DESCRIPTION VARCHAR(250),NEXT_FIRE_TIME NUMERIC(13),PREV_FIRE_TIME NUMERIC(13),PRIORITY INTEGER,TRIGGER_STATE VARCHAR(16) NOT NULL,TRIGGER_TYPE VARCHAR(8) NOT NULL,START_TIME NUMERIC(13) NOT NULL,END_TIME NUMERIC(13),CALENDAR_NAME VARCHAR(200),MISFIRE_INSTR NUMERIC(2),JOB_DATA BINARY,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(JOB_NAME,JOB_GROUP) REFERENCES PUBLIC.QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)) +CREATE MEMORY TABLE PUBLIC.QRTZ_SIMPLE_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,REPEAT_COUNT NUMERIC(7) NOT NULL,REPEAT_INTERVAL NUMERIC(12) NOT NULL,TIMES_TRIGGERED NUMERIC(7) NOT NULL,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +CREATE MEMORY TABLE PUBLIC.QRTZ_CRON_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,CRON_EXPRESSION VARCHAR(120) NOT NULL,TIME_ZONE_ID VARCHAR(80),PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +CREATE MEMORY TABLE PUBLIC.QRTZ_BLOB_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,BLOB_DATA BINARY,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +CREATE MEMORY TABLE PUBLIC.QRTZ_TRIGGER_LISTENERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,TRIGGER_LISTENER VARCHAR(200) NOT NULL,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_LISTENER),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +CREATE MEMORY TABLE PUBLIC.QRTZ_CALENDARS(CALENDAR_NAME VARCHAR(200) NOT NULL PRIMARY KEY,CALENDAR BINARY NOT NULL) +CREATE MEMORY TABLE PUBLIC.QRTZ_PAUSED_TRIGGER_GRPS(TRIGGER_GROUP VARCHAR(200) NOT NULL PRIMARY KEY) +CREATE MEMORY TABLE PUBLIC.QRTZ_FIRED_TRIGGERS(ENTRY_ID VARCHAR(95) NOT NULL PRIMARY KEY,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,IS_VOLATILE BOOLEAN NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,FIRED_TIME NUMERIC(13) NOT NULL,PRIORITY INTEGER NOT NULL,STATE VARCHAR(16) NOT NULL,JOB_NAME VARCHAR(200),JOB_GROUP VARCHAR(200),IS_STATEFUL BOOLEAN,REQUESTS_RECOVERY BOOLEAN) +CREATE MEMORY TABLE PUBLIC.QRTZ_SCHEDULER_STATE(INSTANCE_NAME VARCHAR(200) NOT NULL PRIMARY KEY,LAST_CHECKIN_TIME NUMERIC(13) NOT NULL,CHECKIN_INTERVAL NUMERIC(13) NOT NULL) +CREATE MEMORY TABLE PUBLIC.QRTZ_LOCKS(LOCK_NAME VARCHAR(40) NOT NULL PRIMARY KEY) +CREATE FUNCTION PUBLIC."org.hsqldb.Library.getDatabaseProductName"() RETURNS VARCHAR(32768) LANGUAGE JAVA NOT DETERMINISTIC NO SQL CALLED ON NULL INPUT EXTERNAL NAME 'CLASSPATH:org.hsqldb.Library.getDatabaseProductName'; +CREATE FUNCTION PUBLIC."org.hsqldb.Library.getDatabaseMajorVersion"() RETURNS INTEGER LANGUAGE JAVA NOT DETERMINISTIC NO SQL CALLED ON NULL INPUT EXTERNAL NAME 'CLASSPATH:org.hsqldb.Library.getDatabaseMajorVersion'; +CREATE FUNCTION PUBLIC."org.hsqldb.Library.getDatabaseProductVersion"() RETURNS VARCHAR(32768) LANGUAGE JAVA NOT DETERMINISTIC NO SQL CALLED ON NULL INPUT EXTERNAL NAME 'CLASSPATH:org.hsqldb.Library.getDatabaseProductVersion'; +ALTER SEQUENCE SYSTEM_LOBS.LOB_ID RESTART WITH 1 +SET DATABASE DEFAULT INITIAL SCHEMA PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.YES_OR_NO TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.TIME_STAMP TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CARDINAL_NUMBER TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CHARACTER_DATA TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.SQL_IDENTIFIER TO PUBLIC GRANT DBA TO SA SET WRITE_DELAY 10 SET SCHEMA PUBLIC @@ -52,8 +62,8 @@ INSERT INTO DB_RUN_AS VALUES(1,'dev','base64',0) INSERT INTO DB_JOB VALUES(0,'Job 1',0,'Q','select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','handler','testKey1=testVal1\u000atestKey2=testVal2') INSERT INTO DB_JOB VALUES(1,'Job 2',0,'Q','select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','handler','testKey1=testVal1\u000atestKey2=testVal2') -INSERT INTO DB_SCHEDULE VALUES(0,0,NULL,NULL,'0/60 * * * * ?',0) -INSERT INTO DB_SCHEDULE VALUES(1,1,NULL,NULL,'0/60 * * * * ?',0) +INSERT INTO DB_SCHEDULE VALUES(0,0,NULL,NULL,'0/60 * * * * ?',2) +INSERT INTO DB_SCHEDULE VALUES(1,1,NULL,NULL,'0/60 * * * * ?',2) INSERT INTO DB_PERMISSION_LIST VALUES(1,'ADD USER','S') INSERT INTO DB_PERMISSION_LIST VALUES(2,'EDIT USER','S') INSERT INTO DB_PERMISSION_LIST VALUES(3,'DELETE USER','S') Modified: trunk/drawbridge/src/test/drawbridge-test-spring.xml =================================================================== --- trunk/drawbridge/src/test/drawbridge-test-spring.xml 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/src/test/drawbridge-test-spring.xml 2009-06-30 03:45:39 UTC (rev 61) @@ -9,7 +9,7 @@ <bean id="DataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> - <property name="url" value="jdbc:hsqldb:src/test/db"/> + <property name="url" value="jdbc:hsqldb:file:src/test/db;shutdown=true"/> <property name="username" value="sa"/> <property name="password" value=""/> <property name="suppressClose" value="true"/> Modified: trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2009-06-30 03:45:39 UTC (rev 61) @@ -17,13 +17,13 @@ */ package net.sf.drawbridge.dao; +import static org.testng.Assert.*; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.List; import javax.sql.DataSource; -import junit.framework.TestCase; import net.sf.drawbridge.test.TestBeanFactory; import net.sf.drawbridge.vo.Job; import net.sf.drawbridge.vo.JobType; @@ -36,8 +36,10 @@ import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.AbstractPlatformTransactionManager; import org.springframework.transaction.support.DefaultTransactionDefinition; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; -public class JobDaoTest extends TestCase { +public class JobDaoTest { private JobDao target; @@ -52,8 +54,9 @@ private String params="testKey1=testVal1\ntestKey2=testVal2"; private SessionFactory sessionFactory; - - protected void setUp() { + + @BeforeMethod + public void setUp() { txManager = (AbstractPlatformTransactionManager) TestBeanFactory.getBean("TxManager"); target = (JobDao) TestBeanFactory.getBean("JobDao"); sessionFactory = (SessionFactory) TestBeanFactory.getBean("SessionFactory"); @@ -62,40 +65,43 @@ userDao = (UserDao) TestBeanFactory.getBean("UserDao"); } - public void testShouldGetJobObject() throws Exception { + @Test + public void shouldGetJobObject() throws Exception { Job result = target.get(0L); SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss"); - assertNotNull("result is null", result); - assertEquals("id", new Long(0), result.getId()); - assertEquals("name", "Job 1", result.getName()); - assertEquals("runAsAcount", new Integer(0), result.getRunAsAccount().getId()); - assertEquals("submittedBy", new Integer(0), result.getSubmittedBy().getId()); - assertEquals("submittedOn", "03-19-2008 19:00:00", df.format(result.getSubmittedOn().getTime())); - assertEquals("reviewedBy", new Integer(1), result.getReviewedBy().getId()); - assertEquals("reviewedOn", "03-20-2008 18:00:00", df.format(result.getReviewedOn().getTime())); - assertEquals("approvedBy", new Integer(1), result.getApprovedBy().getId()); - assertEquals("approvedOn", "03-20-2008 18:00:01", df.format(result.getApprovedOn().getTime())); - assertTrue("active", result.isActive()); - assertEquals("schedule", 1, result.getSchedules().size()); - assertEquals("schedule", "0/60 * * * * ?", result.getSchedules().iterator().next().getSchedule()); - assertEquals("handler", "handler", result.getHandler()); - assertEquals("handlerParams", params, result.getHandlerParams()); + assertNotNull( result,"result is null"); + assertEquals(result.getId(), new Long(0), "id"); + assertEquals(result.getName(), "Job 1", "name"); + assertEquals(result.getRunAsAccount().getId(), new Integer(0),"runAsAcount"); + assertEquals( result.getSubmittedBy().getId(), new Integer(0),"submittedBy"); + assertEquals( df.format(result.getSubmittedOn().getTime()), "03-19-2008 19:00:00","submittedOn"); + assertEquals( result.getReviewedBy().getId(), new Integer(1),"reviewedBy"); + assertEquals( df.format(result.getReviewedOn().getTime()), "03-20-2008 18:00:00","reviewedOn"); + assertEquals( result.getApprovedBy().getId(), new Integer(1),"approvedBy"); + assertEquals( df.format(result.getApprovedOn().getTime()), "03-20-2008 18:00:01","approvedOn"); + assertTrue(result.isActive(),"active"); + assertEquals( result.getSchedules().size(), 1,"schedule"); + assertEquals( result.getSchedules().iterator().next().getSchedule(), "0/60 * * * * ?","schedule"); + assertEquals( result.getHandler(), "handler","handler"); + assertEquals( result.getHandlerParams(), params,"handlerParams"); } - public void testShouldCreateNewJobObject() throws Exception { + @Test + public void shouldCreateNewJobObject() throws Exception { TransactionStatus tx = txManager.getTransaction(new DefaultTransactionDefinition()); try { User submitter = userDao.get(0); RunAsAccount account = runAsAccountDao.get(0); Job job = new Job(null, "A new job", account, JobType.QUERY, "select count(*) from dual", submitter, Calendar.getInstance(), null, null, null, null, true, "handler", params); target.create(job); - assertNotNull("id is still null", job.getId()); + assertNotNull(job.getId(),"id is still null"); } finally { txManager.rollback(tx); } } - public void testShouldSaveChangesToJobObject() throws Exception { + @Test + public void shouldSaveChangesToJobObject() throws Exception { TransactionStatus tx = txManager.getTransaction(new DefaultTransactionDefinition()); try { Job existing = target.get(0L); @@ -109,20 +115,22 @@ } } - public void testShouldDeleteObjectFromJob() throws Exception { + @Test + public void shouldDeleteObjectFromJob() throws Exception { TransactionStatus tx = txManager.getTransaction(new DefaultTransactionDefinition()); try { Job existing = target.get(0L); assertNotNull(existing); target.delete(existing); - assertNull("should be deleted", target.get(0L)); + assertNull(target.get(0L),"should be deleted"); } finally { txManager.rollback(tx); } } - public void testShouldRetrieveAllObjectsFromJob() throws Exception { + @Test + public void shouldRetrieveAllObjectsFromJob() throws Exception { TransactionStatus tx = txManager.getTransaction(new DefaultTransactionDefinition()); try { List<Job> all = target.getAll(); @@ -135,11 +143,13 @@ } } - public void testShouldRetrieveAllJobsBasedOnDatabaseId() throws Exception { + @Test + public void shouldRetrieveAllJobsBasedOnDatabaseId() throws Exception { assertEquals(2, target.getJobsForDatabase(0).size()); } - public void testShouldThrowStaleObjectExceptionIfVersionChangesInScheduleRow() throws Exception { + @Test + public void shouldThrowStaleObjectExceptionIfVersionChangesInScheduleRow() throws Exception { TransactionStatus tx = txManager.getTransaction(new DefaultTransactionDefinition()); try { Job job = target.get(0L); @@ -154,13 +164,14 @@ } } - public void testShouldRetriveAllActiveJobs() throws Exception { + @Test + public void shouldRetriveAllActiveJobs() throws Exception { TransactionStatus tx = txManager.getTransaction(new DefaultTransactionDefinition()); try { List<Job> jobs = target.getAllActive(); assertTrue(jobs.size() > 0); for (Job job : jobs) { - assertTrue("job " + job.getId() + " is not active, but should be.", job.isActive()); + assertTrue(job.isActive(), "job " + job.getId() + " is not active, but should be."); } } finally { txManager.rollback(tx); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/exec/DefaultJobExecuterTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/exec/DefaultJobExecuterTest.java 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/src/test/net/sf/drawbridge/exec/DefaultJobExecuterTest.java 2009-06-30 03:45:39 UTC (rev 61) @@ -17,12 +17,15 @@ */ package net.sf.drawbridge.exec; +import static org.testng.Assert.assertEquals; + +import java.sql.Connection; +import java.sql.DriverManager; import java.sql.Types; import java.util.ArrayList; import java.util.List; import java.util.Map; -import junit.framework.TestCase; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Driver; import net.sf.drawbridge.vo.QueryParam; @@ -30,20 +33,32 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.SingleConnectionDataSource; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; -public class DefaultJobExecuterTest extends TestCase { +public class DefaultJobExecuterTest { private DefaultJobExecuter target=new DefaultJobExecuter(); - public void testShouldExecuteJob() throws Exception{ - SingleConnectionDataSource ds=new SingleConnectionDataSource("org.hsqldb.jdbcDriver","jdbc:hsqldb:.","sa","",true); + @BeforeTest + public void beforeTest() { + try { + Class.forName("org.hsqldb.jdbcDriver"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Test + public void shouldExecuteJob() throws Exception{ + SingleConnectionDataSource ds=new SingleConnectionDataSource("jdbc:hsqldb:mem:.;shutdown=true","sa","",true); JdbcTemplate template=new JdbcTemplate(ds); template.execute("create table default_job_executer (id integer, name varchar(20), modOn date, accessTs timestamp, modBy varchar(20))"); - template.execute("insert into default_job_executer values (1, 'adam', SYSDATE, SYSDATE, 'adam')"); - template.execute("insert into default_job_executer values (2, 'ben', SYSDATE, SYSDATE, 'adam')"); - template.execute("insert into default_job_executer values (3, 'chris', SYSDATE, SYSDATE, 'dwight')"); - template.execute("insert into default_job_executer values (4, 'dwight', SYSDATE, SYSDATE, 'dwight')"); - template.execute("insert into default_job_executer values (5, 'eric', SYSDATE, SYSDATE, 'adam')"); + template.execute("insert into default_job_executer values (1, 'adam', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'adam')"); + template.execute("insert into default_job_executer values (2, 'ben', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'adam')"); + template.execute("insert into default_job_executer values (3, 'chris', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'dwight')"); + template.execute("insert into default_job_executer values (4, 'dwight', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'dwight')"); + template.execute("insert into default_job_executer values (5, 'eric', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'adam')"); String query="select * from default_job_executer where id=? and name=? and modOn>? and accessTs>? and modBy=?"; List<QueryParam> params=new ArrayList<QueryParam>(); @@ -60,8 +75,9 @@ query, params); - assertEquals(1,results.size()); - assertEquals("adam",results.get(0).get("name")); + assertEquals(results.size(), 1); + assertEquals(results.get(0).get("NAME"), "adam"); + ds.destroy(); } } Modified: trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzCronValidatorTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzCronValidatorTest.java 2008-11-16 04:26:03 UTC (rev 60) +++ trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzCronValidatorTest.java 2009-06-30 03:45:39 UTC (rev 61) @@ -64,7 +64,8 @@ } public void testShouldReturnNullIfCronExpressionIsValid() { - assertNull("cron expression is not valid", target.getErrorMessage("* 0 0 14 5 * *")); + String message = target.getErrorMessage("* 0 0 ? 5 * *"); + assertNull("cron expression is not valid '" + message + "'", message); } public void testShouldReturnFalseIfCronExpressionIsNotValid() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ac...@us...> - 2008-11-16 04:26:13
|
Revision: 60 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=60&view=rev Author: acresse Date: 2008-11-16 04:26:03 +0000 (Sun, 16 Nov 2008) Log Message: ----------- hopefully resolve missed checkins Modified Paths: -------------- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml trunk/drawbridge/src/java/net/sf/drawbridge/domain/DefaultDrawbridgeService.java trunk/drawbridge/src/java/net/sf/drawbridge/exec/DefaultJobExecuter.java trunk/drawbridge/src/java/net/sf/drawbridge/exec/JobExecuter.java trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java trunk/drawbridge/src/sql/create_drawbridge_schema.sql trunk/drawbridge/src/sql/example_data.sql trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java trunk/drawbridge/src/test/net/sf/drawbridge/exec/DefaultJobExecuterTest.java trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java 2008-11-16 04:26:03 UTC (rev 60) @@ -21,6 +21,7 @@ import javax.servlet.http.HttpServletResponse; import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.JobType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -44,6 +45,7 @@ } mav.addObject("runAsList", drawbridgeService.listRunAsAccounts(databaseId)); mav.addObject("handlerList", drawbridgeService.listResultHandlers()); + mav.addObject("jobTypeList", JobType.values()); return mav; } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java 2008-11-16 04:26:03 UTC (rev 60) @@ -76,7 +76,7 @@ job=new Job(null, name, account, - JobType.QUERY, //TODO: read JobType from JSP + JobType.getJobType(request.getParameter("jobType")), request.getParameter("query"), user, Calendar.getInstance(), null, null, @@ -103,7 +103,7 @@ job=new Job(new Long(jobIdStr), name, account, - JobType.QUERY, // TODO: Read JobType from JSP + JobType.getJobType(request.getParameter("jobType")), request.getParameter("query"), user, Calendar.getInstance(), null, null, Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml 2008-11-16 04:26:03 UTC (rev 60) @@ -16,7 +16,7 @@ lazy="false" /> - <property name="jobType" type="net.sf.drawbridge.dao.hibernate.JobTypeUserType" column="JOB_TYPE"/> + <property name="jobType" type="net.sf.drawbridge.dao.hibernate.JobTypeUserType" column="JOB_TYPE" not-null="true"/> <property name="query" type="string" length="1024" not-null="true"> <column name="QUERY"/> Modified: trunk/drawbridge/src/java/net/sf/drawbridge/domain/DefaultDrawbridgeService.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/domain/DefaultDrawbridgeService.java 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/java/net/sf/drawbridge/domain/DefaultDrawbridgeService.java 2008-11-16 04:26:03 UTC (rev 60) @@ -39,6 +39,7 @@ import net.sf.drawbridge.vo.ExecutionContext; import net.sf.drawbridge.vo.Group; import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.JobType; import net.sf.drawbridge.vo.QueryParam; import net.sf.drawbridge.vo.RunAsAccount; import net.sf.drawbridge.vo.User; @@ -195,8 +196,8 @@ RunAsAccount runAsAccount = job.getRunAsAccount(); Database database = runAsAccount.getDatabase(); Driver driver = database.getDriver(); - return executer.executeJob(driver, database, runAsAccount, - parser.getPreparedStatementQuery(job.getQuery()), params); + JobType jobType = job.getJobType(); + return executer.executeQueryJob(driver, database, runAsAccount, parser.getPreparedStatementQuery(job.getQuery()), params); } catch (Exception ex) { ex.printStackTrace(); return null; Modified: trunk/drawbridge/src/java/net/sf/drawbridge/exec/DefaultJobExecuter.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/exec/DefaultJobExecuter.java 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/java/net/sf/drawbridge/exec/DefaultJobExecuter.java 2008-11-16 04:26:03 UTC (rev 60) @@ -38,7 +38,7 @@ private static final String TIMESTAMP_FORMAT_STR=DATE_FORMAT_STR+" HH:mm:ss"; @SuppressWarnings("unchecked") - public List<Map<String, Object>> executeJob(Driver driver, Database database, RunAsAccount runAsAccount, String query, List<QueryParam> params) throws Exception{ + public List<Map<String, Object>> executeQueryJob(Driver driver, Database database, RunAsAccount runAsAccount, String query, List<QueryParam> params) throws Exception{ SingleConnectionDataSource dataSource=new SingleConnectionDataSource(); dataSource.setDriverClassName(driver.getClassName()); dataSource.setUrl(database.getJdbcUrl()); @@ -82,4 +82,14 @@ return converted; } + public List<Map<String, Object>> executeProcedureJob(Driver driver, Database database, RunAsAccount runAsAccount, String query, List<QueryParam> params) throws Exception { + // TODO Auto-generated method stub + return null; + } + + public int executeUpdateJob(Driver driver, Database database, RunAsAccount runAsAccount, String query, List<QueryParam> params) throws Exception { + // TODO Auto-generated method stub + return 0; + } + } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/exec/JobExecuter.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/exec/JobExecuter.java 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/java/net/sf/drawbridge/exec/JobExecuter.java 2008-11-16 04:26:03 UTC (rev 60) @@ -28,6 +28,10 @@ public interface JobExecuter { public static final String BEAN_NAME="JobExecuter"; - public List<Map<String, Object>> executeJob(Driver driver, Database database, RunAsAccount runAsAccount, String query, List<QueryParam> params) throws Exception; + public List<Map<String, Object>> executeQueryJob(Driver driver, Database database, RunAsAccount runAsAccount, String query, List<QueryParam> params) throws Exception; + public int executeUpdateJob(Driver driver, Database database, RunAsAccount runAsAccount, String query, List<QueryParam> params) throws Exception; + + public List<Map<String, Object>> executeProcedureJob(Driver driver, Database database, RunAsAccount runAsAccount, String query, List<QueryParam> params) throws Exception; + } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java 2008-11-16 04:26:03 UTC (rev 60) @@ -96,7 +96,7 @@ String handlerParams = job.getHandlerParams(); List<QueryParam> params = Collections.emptyList(); try { - List<Map<String, Object>> results = executer.executeJob(driver, db, runAs, query, params); + List<Map<String, Object>> results = executer.executeQueryJob(driver, db, runAs, query, params); handler.handleQuery(results, propConverter.convertToProperties(handlerParams)); ctx.setResult(Boolean.TRUE); } catch (Exception e) { Modified: trunk/drawbridge/src/sql/create_drawbridge_schema.sql =================================================================== --- trunk/drawbridge/src/sql/create_drawbridge_schema.sql 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/sql/create_drawbridge_schema.sql 2008-11-16 04:26:03 UTC (rev 60) @@ -86,7 +86,8 @@ CONSTRAINT FK_DB_JOB_REVIEWED_BY FOREIGN KEY FK_DB_JOB_REVIEWED_BY (REVIEWED_BY) REFERENCES DB_USER (ID), CONSTRAINT FK_DB_JOB_APPROVED_BY FOREIGN KEY FK_DB_JOB_APPROVED_BY (APPROVED_BY) REFERENCES DB_USER (ID), CONSTRAINT UNQ_DB_JOB UNIQUE (NAME), - CONSTRAINT CHK_DB_JOB_ACTIVE CHECK ACTIVE IN ('Y','N') + CONSTRAINT CHK_DB_JOB_ACTIVE CHECK ACTIVE IN ('Y','N'), + CONSTRAINT CHK_DB_JOB_JOB_TYPE CHECK ACTIVE IN ('Q','U','P') ) TYPE=InnoDB; CREATE TABLE DB_SCHEDULE( Modified: trunk/drawbridge/src/sql/example_data.sql =================================================================== --- trunk/drawbridge/src/sql/example_data.sql 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/sql/example_data.sql 2008-11-16 04:26:03 UTC (rev 60) @@ -14,6 +14,6 @@ INSERT INTO DB_USER_GROUP (USER_ID,GROUP_ID) VALUES (-1,-1); -INSERT INTO DB_JOB (ID,NAME,RUN_AS_ID,QUERY,SUBMITTED_BY,SUBMITTED_ON,REVIEWED_BY,REVIEWED_ON,APPROVED_BY,APPROVED_ON,ACTIVE,HANDLER,HANDLER_PARAMS) VALUES (-1,'all jobs',-2,'SELECT * FROM DB_JOB',-1,{d '2008-03-19'},null,null,null,null,'Y','NoOpResultHandler',null); +INSERT INTO DB_JOB (ID,NAME,RUN_AS_ID,JOB_TYPE,QUERY,SUBMITTED_BY,SUBMITTED_ON,REVIEWED_BY,REVIEWED_ON,APPROVED_BY,APPROVED_ON,ACTIVE,HANDLER,HANDLER_PARAMS) VALUES (-1,'all jobs',-2,'Q','SELECT * FROM DB_JOB',-1,{d '2008-03-19'},null,null,null,null,'Y','NoOpResultHandler',null); COMMIT; \ No newline at end of file Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java 2008-11-16 04:26:03 UTC (rev 60) @@ -71,7 +71,12 @@ model.put("job", job); model.put("runAsList", runAsList); model.put("handlerList", handlerList); + model.put("jobTypeList", JobType.values()); + assertEquals(model.keySet(),mav.getModel().keySet()); + JobType[] jobTypeList = (JobType[])(mav.getModel().remove("jobTypeList")); + model.remove("jobTypeList"); + assertJobTypeList(jobTypeList); assertEquals(model,mav.getModel()); } @@ -94,8 +99,20 @@ Map<String,Object> model=new HashMap<String,Object>(); model.put("runAsList", runAsList); model.put("handlerList", handlerList); + model.put("jobTypeList", JobType.values()); + assertEquals(model.keySet(),mav.getModel().keySet()); + JobType[] jobTypeList = (JobType[])(mav.getModel().remove("jobTypeList")); + model.remove("jobTypeList"); + assertJobTypeList(jobTypeList); assertEquals(model,mav.getModel()); } + + private void assertJobTypeList(JobType[] jobTypeList){ + assertEquals(3, jobTypeList.length); + assertEquals(JobType.QUERY, jobTypeList[0]); + assertEquals(JobType.UPDATE, jobTypeList[1]); + assertEquals(JobType.PROCEDURE, jobTypeList[2]); + } } Modified: trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2008-11-16 04:26:03 UTC (rev 60) @@ -87,7 +87,7 @@ try { User submitter = userDao.get(0); RunAsAccount account = runAsAccountDao.get(0); - Job job = new Job(null, "A new job", account, JobType.QUERY, "select count(*) from dual", submitter, Calendar.getInstance(), null, null, null, null, true, "handler", params); + Job job = new Job(null, "A new job", account, JobType.QUERY, "select count(*) from dual", submitter, Calendar.getInstance(), null, null, null, null, true, "handler", params); target.create(job); assertNotNull("id is still null", job.getId()); } finally { Modified: trunk/drawbridge/src/test/net/sf/drawbridge/exec/DefaultJobExecuterTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/exec/DefaultJobExecuterTest.java 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/test/net/sf/drawbridge/exec/DefaultJobExecuterTest.java 2008-11-16 04:26:03 UTC (rev 60) @@ -23,7 +23,6 @@ import java.util.Map; import junit.framework.TestCase; -import net.sf.drawbridge.exec.DefaultJobExecuter; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Driver; import net.sf.drawbridge.vo.QueryParam; @@ -54,10 +53,10 @@ params.add(new QueryParam(Types.TIMESTAMP,"acessTs","01/01/1970 00:00:00")); params.add(new QueryParam(Types.VARCHAR,"modBy","adam")); - List<Map<String, Object>> results=target.executeJob( + List<Map<String, Object>> results=target.executeQueryJob( new Driver(null,null,"org.hsqldb.jdbcDriver"), new Database(null,null,"jdbc:hsqldb:.",null), - new RunAsAccount(null,"sa","",null), + new RunAsAccount(null,"sa","",null), query, params); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java 2008-11-16 03:51:07 UTC (rev 59) +++ trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java 2008-11-16 04:26:03 UTC (rev 60) @@ -80,7 +80,7 @@ public void testShouldExecuteJobAndSendResultsToHandler() throws Exception { Job job = getJob(); - mockJobExecuter.expects(once()).method("executeJob"); + mockJobExecuter.expects(once()).method("executeQueryJob"); mockBeanFactory.expects(once()).method("getBean").with(eq("SomeHandler")).will(returnValue(mockHandler.proxy())); mockPropConverter.expects(once()).method("convertToProperties").will(returnValue(new Properties())); mockHandler.expects(once()).method("handleQuery"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-11-16 03:51:16
|
Revision: 59 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=59&view=rev Author: blamonica Date: 2008-11-16 03:51:07 +0000 (Sun, 16 Nov 2008) Log Message: ----------- Fix schema to work with the modified hibernate mapping file. Modified Paths: -------------- trunk/drawbridge/src/sql/create_drawbridge_schema.sql Removed Paths: ------------- trunk/drawbridge/src/test/net/sf/drawbridge/controller/helper/ Modified: trunk/drawbridge/src/sql/create_drawbridge_schema.sql =================================================================== --- trunk/drawbridge/src/sql/create_drawbridge_schema.sql 2008-11-16 02:01:38 UTC (rev 58) +++ trunk/drawbridge/src/sql/create_drawbridge_schema.sql 2008-11-16 03:51:07 UTC (rev 59) @@ -1,15 +1,15 @@ -DROP TABLE IF EXISTS DB_USER; -DROP TABLE IF EXISTS DB_GROUP; -DROP TABLE IF EXISTS DB_USER_GROUP; -DROP TABLE IF EXISTS DB_DRIVER; -DROP TABLE IF EXISTS DB_DATABASE; -DROP TABLE IF EXISTS DB_RUN_AS; +DROP TABLE IF EXISTS DB_RUN_AS_PERMISSION; +DROP TABLE IF EXISTS DB_DATABASE_PERMISSION; +DROP TABLE IF EXISTS DB_SYSTEM_PERMISSION; +DROP TABLE IF EXISTS DB_PERMISSION_LIST; DROP TABLE IF EXISTS DB_SCHEDULE; DROP TABLE IF EXISTS DB_JOB; -DROP TABLE IF EXISTS DB_PERMISSION_LIST; -DROP TABLE IF EXISTS DB_SYSTEM_PERMISSION; -DROP TABLE IF EXISTS DB_DATABASE_PERMISSION; -DROP TABLE IF EXISTS DB_RUN_AS_PERMISSION; +DROP TABLE IF EXISTS DB_RUN_AS; +DROP TABLE IF EXISTS DB_DATABASE; +DROP TABLE IF EXISTS DB_DRIVER; +DROP TABLE IF EXISTS DB_USER_GROUP; +DROP TABLE IF EXISTS DB_GROUP; +DROP TABLE IF EXISTS DB_USER; CREATE TABLE DB_USER( ID INTEGER NOT NULL AUTO_INCREMENT, @@ -68,6 +68,7 @@ ID INTEGER NOT NULL AUTO_INCREMENT, NAME VARCHAR(64) NOT NULL, RUN_AS_ID INTEGER NOT NULL, + JOB_TYPE VARCHAR(1) NOT NULL, QUERY VARCHAR(1024) NOT NULL, SUBMITTED_BY INTEGER NOT NULL, SUBMITTED_ON TIMESTAMP NOT NULL, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-11-16 02:01:42
|
Revision: 58 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=58&view=rev Author: blamonica Date: 2008-11-16 02:01:38 +0000 (Sun, 16 Nov 2008) Log Message: ----------- Fix Unit Tests, waiting for check-ins from Adam. Modified Paths: -------------- trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml 2008-11-16 00:06:11 UTC (rev 57) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml 2008-11-16 02:01:38 UTC (rev 58) @@ -7,9 +7,7 @@ <generator class="native"/> </id> - <property name="name" type="string" length="64" not-null="true"> - <column name="NAME"/> - </property> + <property name="name" type="string" length="64" not-null="true" column="NAME"/> <many-to-one name="runAsAccount" column="RUN_AS_ID" @@ -18,6 +16,8 @@ lazy="false" /> + <property name="jobType" type="net.sf.drawbridge.dao.hibernate.JobTypeUserType" column="JOB_TYPE"/> + <property name="query" type="string" length="1024" not-null="true"> <column name="QUERY"/> </property> Modified: trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java 2008-11-16 00:06:11 UTC (rev 57) +++ trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java 2008-11-16 02:01:38 UTC (rev 58) @@ -80,7 +80,7 @@ public void testShouldExecuteJobAndSendResultsToHandler() throws Exception { Job job = getJob(); - mockJobExecuter.expects(once()).method("executeQueryJob"); + mockJobExecuter.expects(once()).method("executeJob"); mockBeanFactory.expects(once()).method("getBean").with(eq("SomeHandler")).will(returnValue(mockHandler.proxy())); mockPropConverter.expects(once()).method("convertToProperties").will(returnValue(new Properties())); mockHandler.expects(once()).method("handleQuery"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-11-16 00:06:15
|
Revision: 57 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=57&view=rev Author: blamonica Date: 2008-11-16 00:06:11 +0000 (Sun, 16 Nov 2008) Log Message: ----------- Fixed unit test for QuartzDrawbridgeScheduleLoaderTest and also added unit test to JobDaoTest to test the getAllActive() method. Fixed random compilation errors as a result of an incomplete checkin from Adam ;). Modified Paths: -------------- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoaderTest.java Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java 2008-11-15 03:27:12 UTC (rev 56) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java 2008-11-16 00:06:11 UTC (rev 57) @@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse; import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.JobType; import net.sf.drawbridge.vo.RunAsAccount; import net.sf.drawbridge.vo.Status; import net.sf.drawbridge.vo.StatusMessage; @@ -75,6 +76,7 @@ job=new Job(null, name, account, + JobType.QUERY, //TODO: read JobType from JSP request.getParameter("query"), user, Calendar.getInstance(), null, null, @@ -101,6 +103,7 @@ job=new Job(new Long(jobIdStr), name, account, + JobType.QUERY, // TODO: Read JobType from JSP request.getParameter("query"), user, Calendar.getInstance(), null, null, Modified: trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java 2008-11-15 03:27:12 UTC (rev 56) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java 2008-11-16 00:06:11 UTC (rev 57) @@ -96,7 +96,7 @@ String handlerParams = job.getHandlerParams(); List<QueryParam> params = Collections.emptyList(); try { - List<Map<String, Object>> results = executer.executeQueryJob(driver, db, runAs, query, params); + List<Map<String, Object>> results = executer.executeJob(driver, db, runAs, query, params); handler.handleQuery(results, propConverter.convertToProperties(handlerParams)); ctx.setResult(Boolean.TRUE); } catch (Exception e) { Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java 2008-11-15 03:27:12 UTC (rev 56) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java 2008-11-16 00:06:11 UTC (rev 57) @@ -26,6 +26,7 @@ import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Driver; import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.JobType; import net.sf.drawbridge.vo.RunAsAccount; import org.jmock.Mock; @@ -54,7 +55,7 @@ List<String> handlerList=new ArrayList<String>(); handlerList.add("TestResultHandler"); - Job job=new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,null,params); + Job job=new Job(1L,"name",runAsAccount, JobType.QUERY, "query",null,null,null,null,null,null,true,null,params); mockDrawbridgeService.expects(atLeastOnce()).method("getJob").with(eq(new Long(1))).will(returnValue(job)); mockDrawbridgeService.expects(once()).method("listRunAsAccounts").will(returnValue(runAsList)); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java 2008-11-15 03:27:12 UTC (rev 56) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java 2008-11-16 00:06:11 UTC (rev 57) @@ -26,6 +26,7 @@ import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Driver; import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.JobType; import net.sf.drawbridge.vo.RunAsAccount; import net.sf.drawbridge.vo.Status; import net.sf.drawbridge.vo.StatusMessage; @@ -54,7 +55,7 @@ } public void testShouldAddJobAndReturnSuccessMessage() throws Exception{ - Job job=new Job(null,"name",account,"query",null,null,null,null,null,null,true,"handler",params); + Job job=new Job(null,"name",account, JobType.QUERY,"query",null,null,null,null,null,null,true,"handler",params); mockDrawbridgeService.expects(once()).method("addJob").with(new JobConstraint(job)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); mockDrawbridgeService.expects(once()).method("getUser").with(eq(new Integer(-1))).will(returnValue(user)); @@ -79,7 +80,7 @@ } public void testShouldEditJobAndReturnSuccessMessage() throws Exception{ - Job job=new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"handler",params); + Job job=new Job(1L,"name",account, JobType.QUERY,"query",null,null,null,null,null,null,true,"handler",params); mockDrawbridgeService.expects(once()).method("updateJob").with(new JobConstraint(job)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); mockDrawbridgeService.expects(once()).method("getUser").with(eq(new Integer(-1))).will(returnValue(user)); @@ -106,7 +107,7 @@ @SuppressWarnings("unchecked") public void testShouldAddJobAndReturnFailureMessageOnException() throws Exception{ - Job job=new Job(null,"name",account,"query",null,null,null,null,null,null,true,null,params); + Job job=new Job(null,"name",account, JobType.QUERY,"query",null,null,null,null,null,null,true,null,params); RuntimeException ex=new RuntimeException("The Spanish Inquisition"); mockDrawbridgeService.expects(once()).method("addJob").with(new JobConstraint(job)).will(throwException(ex)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); @@ -139,7 +140,7 @@ @SuppressWarnings("unchecked") public void testShouldEditJobAndReturnFailureMessageOnException() throws Exception{ - Job job=new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"handler",params); + Job job=new Job(1L,"name",account, JobType.QUERY,"query",null,null,null,null,null,null,true,"handler",params); RuntimeException ex=new RuntimeException("The Spanish Inquisition"); mockDrawbridgeService.expects(once()).method("updateJob").with(new JobConstraint(job)).will(throwException(ex)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java 2008-11-15 03:27:12 UTC (rev 56) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java 2008-11-16 00:06:11 UTC (rev 57) @@ -25,6 +25,7 @@ import net.sf.drawbridge.domain.DrawbridgeService; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.JobType; import net.sf.drawbridge.vo.RunAsAccount; import net.sf.drawbridge.vo.Status; import net.sf.drawbridge.vo.StatusMessage; @@ -50,7 +51,7 @@ User user = new User(2, "acresse", "Adam", "Cresse", true); Database db = new Database(new Integer(1), "name", "jdbcUrl", null); RunAsAccount runAsAccount = new RunAsAccount(2,"userName","password",db); - Job job=new Job(1L,"name",runAsAccount,"query",user,null,null,null,null,null,true,"handler",params); + Job job=new Job(1L,"name",runAsAccount, JobType.QUERY,"query",user,null,null,null,null,null,true,"handler",params); mockDrawbridgeService.expects(once()).method("getJob").with(eq(new Long(1))).will(returnValue(job)); mockDrawbridgeService.expects(once()).method("deleteJob").with(eq(new Long(1))); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java 2008-11-15 03:27:12 UTC (rev 56) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java 2008-11-16 00:06:11 UTC (rev 57) @@ -25,6 +25,7 @@ import net.sf.drawbridge.domain.DrawbridgeService; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.JobType; import net.sf.drawbridge.vo.RunAsAccount; import org.jmock.Mock; @@ -47,7 +48,7 @@ List<Job> jobList=new ArrayList<Job>(); Database db = new Database(1,"name", "jdbcUrl", null); RunAsAccount runAsAccount = new RunAsAccount(1,"userName","password",db); - jobList.add(new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,"handler",params)); + jobList.add(new Job(1L,"name",runAsAccount, JobType.QUERY,"query",null,null,null,null,null,null,true,"handler",params)); List<RunAsAccount> runAsList=new ArrayList<RunAsAccount>(); runAsList.add(runAsAccount); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java 2008-11-15 03:27:12 UTC (rev 56) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java 2008-11-16 00:06:11 UTC (rev 57) @@ -27,6 +27,7 @@ import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Driver; import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.JobType; import net.sf.drawbridge.vo.QueryParam; import net.sf.drawbridge.vo.RunAsAccount; @@ -50,7 +51,7 @@ Driver driver = new Driver(4,"name","class"); Database database=new Database(3,"name","url",driver); RunAsAccount runAsAccount = new RunAsAccount(2,"userName","password",database); - Job job = new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,"handler",params); + Job job = new Job(1L,"name",runAsAccount, JobType.QUERY,"query",null,null,null,null,null,null,true,"handler",params); List<QueryParam> queryParams=new ArrayList<QueryParam>(); queryParams.add(new QueryParam(Types.VARCHAR,"name","value")); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java 2008-11-15 03:27:12 UTC (rev 56) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java 2008-11-16 00:06:11 UTC (rev 57) @@ -27,6 +27,7 @@ import net.sf.drawbridge.domain.DrawbridgeService; import net.sf.drawbridge.exec.handler.ResultHandler; import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.JobType; import net.sf.drawbridge.vo.QueryParam; import net.sf.drawbridge.vo.RunAsAccount; @@ -53,7 +54,7 @@ public void testShouldReturnViewWithResults() throws Exception{ RunAsAccount account = new RunAsAccount(2, "username", "password", null); - Job job = new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"handler",paramsStr); + Job job = new Job(1L,"name",account, JobType.QUERY,"query",null,null,null,null,null,null,true,"handler",paramsStr); List<QueryParam> queryParams=new ArrayList<QueryParam>(); queryParams.add(new QueryParam(Types.VARCHAR,"name","value")); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2008-11-15 03:27:12 UTC (rev 56) +++ trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2008-11-16 00:06:11 UTC (rev 57) @@ -26,6 +26,7 @@ import junit.framework.TestCase; import net.sf.drawbridge.test.TestBeanFactory; import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.JobType; import net.sf.drawbridge.vo.RunAsAccount; import net.sf.drawbridge.vo.User; @@ -86,7 +87,7 @@ try { User submitter = userDao.get(0); RunAsAccount account = runAsAccountDao.get(0); - Job job = new Job(null, "A new job", account, "select count(*) from dual", submitter, Calendar.getInstance(), null, null, null, null, true, "handler", params); + Job job = new Job(null, "A new job", account, JobType.QUERY, "select count(*) from dual", submitter, Calendar.getInstance(), null, null, null, null, true, "handler", params); target.create(job); assertNotNull("id is still null", job.getId()); } finally { @@ -152,4 +153,17 @@ txManager.rollback(tx); } } + + public void testShouldRetriveAllActiveJobs() throws Exception { + TransactionStatus tx = txManager.getTransaction(new DefaultTransactionDefinition()); + try { + List<Job> jobs = target.getAllActive(); + assertTrue(jobs.size() > 0); + for (Job job : jobs) { + assertTrue("job " + job.getId() + " is not active, but should be.", job.isActive()); + } + } finally { + txManager.rollback(tx); + } + } } Modified: trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoaderTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoaderTest.java 2008-11-15 03:27:12 UTC (rev 56) +++ trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoaderTest.java 2008-11-16 00:06:11 UTC (rev 57) @@ -56,21 +56,14 @@ public void testShouldScheduleActiveJobs() throws Exception{ List<Job> jobs = getJobs(true); - mockJobDao.expects(once()).method("getAll").will(returnValue(jobs)); + mockJobDao.expects(once()).method("getAllActive").will(returnValue(jobs)); mockScheduler.expects(once()).method("scheduleJob"); target.loadSchedule(); } - public void testShouldNotScheduleInActiveJobs() throws Exception{ - List<Job> jobs = getJobs(false); - mockJobDao.expects(once()).method("getAll").will(returnValue(jobs)); - mockScheduler.expects(never()).method("scheduleJob"); - target.loadSchedule(); - } - public void testShouldLogErrorIfExceptionThrownWhileSchedulingJob() throws Exception { List<Job> jobs = getJobs(true); - mockJobDao.expects(once()).method("getAll").will(returnValue(jobs)); + mockJobDao.expects(once()).method("getAllActive").will(returnValue(jobs)); mockScheduler.expects(once()).method("scheduleJob").will(throwException(new SchedulerException("The Spanish Inquisition!!"))); try { target.loadSchedule(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ac...@us...> - 2008-11-15 03:27:17
|
Revision: 56 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=56&view=rev Author: acresse Date: 2008-11-15 03:27:12 +0000 (Sat, 15 Nov 2008) Log Message: ----------- add jobType field Modified Paths: -------------- trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java trunk/drawbridge/src/test/db.script trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java Added Paths: ----------- trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/JobTypeUserType.java trunk/drawbridge/src/java/net/sf/drawbridge/vo/JobType.java Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp 2008-11-13 03:54:04 UTC (rev 55) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp 2008-11-15 03:27:12 UTC (rev 56) @@ -64,8 +64,22 @@ </td> </tr> <tr> - <td align="right">Query:</td> + <td align="right">Job Type:</td> <td> + <select name="jobType"> + <c:forEach items="${jobTypeList}" var="jobType"> + <c:set var="selected" value="${NULL}"/> + <c:if test="${jobType eq job.jobType}"> + <c:set var="selected" value="SELECTED"/> + </c:if> + <option value="<c:out value="${jobType.code}"/>" <c:out value="${selected}"/>><c:out value="${jobType}"/></option> + </c:forEach> + </select> + </td> + </tr> + <tr valign="top"> + <td align="right">SQL:</td> + <td> <textarea rows="10" cols="40" name="query"><c:out value="${job.query}"/></textarea> </td> </tr> @@ -224,7 +238,7 @@ </select> </td> </tr> - <tr> + <tr valign="top"> <td align="right">Result Handler Params:</td> <td><textarea name="handlerParams" rows="10" cols="40"><c:out value="${job.handlerParams}"/></textarea></td> </tr> Added: trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/JobTypeUserType.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/JobTypeUserType.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/JobTypeUserType.java 2008-11-15 03:27:12 UTC (rev 56) @@ -0,0 +1,78 @@ +package net.sf.drawbridge.dao.hibernate; + +import java.io.Serializable; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Types; + +import net.sf.drawbridge.vo.JobType; + +import org.hibernate.HibernateException; +import org.hibernate.usertype.UserType; + +public class JobTypeUserType implements UserType { + + private static final int[] SQL_TYPES = {Types.VARCHAR}; + + public Object assemble(Serializable cached, Object owner) throws HibernateException { + return cached; + } + + public Object deepCopy(Object value) throws HibernateException{ + return value; + } + + public Serializable disassemble(Object value) throws HibernateException { + return (Serializable)value; + } + + public boolean equals(Object x, Object y) throws HibernateException { + if (x == y){ + return true; + } else if (null == x || null == y) { + return false; + } else { + return x.equals(y); + } + } + + public int hashCode(Object x) throws HibernateException { + return x.hashCode(); + } + + public boolean isMutable() { + return false; + } + + public JobType nullSafeGet(ResultSet resultSet, String[] names, Object owner) throws HibernateException, SQLException { + String code = resultSet.getString(names[0]); + JobType result = null; + if (!resultSet.wasNull()) { + result = JobType.getJobType(code); + } + return result; + } + + public void nullSafeSet(PreparedStatement preparedStatement, Object value, int index) throws HibernateException, SQLException { + if (null == value) { + preparedStatement.setNull(index, Types.VARCHAR); + } else { + preparedStatement.setString(index, ((JobType)value).getCode()); + } + } + + public Object replace(Object original, Object target, Object owner) throws HibernateException { + return original; + } + + public Class<JobType> returnedClass() { + return JobType.class; + } + + public int[] sqlTypes() { + return SQL_TYPES; + } + +} + Modified: trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java 2008-11-13 03:54:04 UTC (rev 55) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java 2008-11-15 03:27:12 UTC (rev 56) @@ -96,7 +96,7 @@ String handlerParams = job.getHandlerParams(); List<QueryParam> params = Collections.emptyList(); try { - List<Map<String, Object>> results = executer.executeJob(driver, db, runAs, query, params); + List<Map<String, Object>> results = executer.executeQueryJob(driver, db, runAs, query, params); handler.handleQuery(results, propConverter.convertToProperties(handlerParams)); ctx.setResult(Boolean.TRUE); } catch (Exception e) { Modified: trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java 2008-11-13 03:54:04 UTC (rev 55) +++ trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java 2008-11-15 03:27:12 UTC (rev 56) @@ -28,6 +28,7 @@ private String name; private RunAsAccount runAsAccount; + private JobType jobType; private String query; private User submittedBy; private Calendar submittedOn; @@ -42,13 +43,14 @@ public Job() { } - public Job(Long id, String name, RunAsAccount runAs, String query, + public Job(Long id, String name, RunAsAccount runAs, JobType jobType, String query, User submittedBy, Calendar submittedOn, User reviewedBy, Calendar reviewedOn, User approvedBy, Calendar approvedOn, boolean active, String handler, String handlerParams) { super(id); setName(name); setRunAsAccount(runAs); + setJobType(jobType); setQuery(query); setSubmittedBy(submittedBy); setSubmittedOn(submittedOn); @@ -69,6 +71,14 @@ this.name = name; } + public JobType getJobType(){ + return jobType; + } + + public void setJobType(JobType jobType){ + this.jobType = jobType; + } + public String getQuery() { return query; } @@ -146,6 +156,38 @@ this.handlerParams = handlerParams; } + public RunAsAccount getRunAsAccount() { + return runAsAccount; + } + + public void setRunAsAccount(RunAsAccount runAsAccount) { + this.runAsAccount = runAsAccount; + } + + public User getSubmittedBy() { + return submittedBy; + } + + public void setSubmittedBy(User submittedBy) { + this.submittedBy = submittedBy; + } + + public User getReviewedBy() { + return reviewedBy; + } + + public void setReviewedBy(User reviewedBy) { + this.reviewedBy = reviewedBy; + } + + public User getApprovedBy() { + return approvedBy; + } + + public void setApprovedBy(User approvedBy) { + this.approvedBy = approvedBy; + } + public Date getNextFireDate() { Date nextFireDate = null; if (isActive() && !getSchedules().isEmpty()) { @@ -160,6 +202,7 @@ return nextFireDate; } + @Override public int hashCode() { final int prime = 31; @@ -167,6 +210,9 @@ result = prime * result + ((active == null) ? 0 : active.hashCode()); result = prime * result + ((approvedBy == null) ? 0 : approvedBy.hashCode()); result = prime * result + ((approvedOn == null) ? 0 : approvedOn.hashCode()); + result = prime * result + ((handler == null) ? 0 : handler.hashCode()); + result = prime * result + ((handlerParams == null) ? 0 : handlerParams.hashCode()); + result = prime * result + ((jobType == null) ? 0 : jobType.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((query == null) ? 0 : query.hashCode()); result = prime * result + ((reviewedBy == null) ? 0 : reviewedBy.hashCode()); @@ -175,8 +221,6 @@ result = prime * result + ((schedule == null) ? 0 : schedule.hashCode()); result = prime * result + ((submittedBy == null) ? 0 : submittedBy.hashCode()); result = prime * result + ((submittedOn == null) ? 0 : submittedOn.hashCode()); - result = prime * result + ((handler == null) ? 0 : handler.hashCode()); - result = prime * result + ((handlerParams == null) ? 0 : handlerParams.hashCode()); return result; } @@ -204,6 +248,21 @@ return false; } else if (!approvedOn.equals(other.approvedOn)) return false; + if (handler == null) { + if (other.handler != null) + return false; + } else if (!handler.equals(other.handler)) + return false; + if (handlerParams == null) { + if (other.handlerParams != null) + return false; + } else if (!handlerParams.equals(other.handlerParams)) + return false; + if (jobType == null) { + if (other.jobType != null) + return false; + } else if (!jobType.equals(other.jobType)) + return false; if (name == null) { if (other.name != null) return false; @@ -244,51 +303,9 @@ return false; } else if (!submittedOn.equals(other.submittedOn)) return false; - if (handler == null) { - if (other.handler != null) - return false; - } else if (!handler.equals(other.handler)) - return false; - if (handlerParams == null) { - if (other.handlerParams != null) - return false; - } else if (!handlerParams.equals(other.handlerParams)) - return false; return true; } - public RunAsAccount getRunAsAccount() { - return runAsAccount; - } - - public void setRunAsAccount(RunAsAccount runAsAccount) { - this.runAsAccount = runAsAccount; - } - - public User getSubmittedBy() { - return submittedBy; - } - - public void setSubmittedBy(User submittedBy) { - this.submittedBy = submittedBy; - } - - public User getReviewedBy() { - return reviewedBy; - } - - public void setReviewedBy(User reviewedBy) { - this.reviewedBy = reviewedBy; - } - - public User getApprovedBy() { - return approvedBy; - } - - public void setApprovedBy(User approvedBy) { - this.approvedBy = approvedBy; - } - public String toString(){ StringBuilder retValue = new StringBuilder(); @@ -296,6 +313,7 @@ .append("id = ").append(this.id).append(", ") .append("name = ").append(this.name).append(", ") .append("runAsId = ").append(this.runAsAccount).append(", ") + .append("jobType = ").append(this.jobType).append(", ") .append("query = ").append(this.query).append(", ") .append("submittedBy = ").append(this.submittedBy).append(", ") .append("submittedOn = ").append(this.submittedOn).append(", ") @@ -312,6 +330,4 @@ return retValue.toString(); } - - } Added: trunk/drawbridge/src/java/net/sf/drawbridge/vo/JobType.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/vo/JobType.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/vo/JobType.java 2008-11-15 03:27:12 UTC (rev 56) @@ -0,0 +1,32 @@ +package net.sf.drawbridge.vo; + +import java.util.HashMap; +import java.util.Map; + +public enum JobType { + + QUERY("Q"), + UPDATE("U"), + PROCEDURE("P"); + + private static Map<String, JobType> jobTypes = new HashMap<String, JobType>(){{ + put(QUERY.getCode(), QUERY); + put(UPDATE.getCode(), UPDATE); + put(PROCEDURE.getCode(), PROCEDURE); + }}; + + private String code; + + private JobType(String code){ + this.code = code; + } + + public String getCode(){ + return code; + } + + public static JobType getJobType(String code){ + return jobTypes.get(code); + } + +} Modified: trunk/drawbridge/src/test/db.script =================================================================== --- trunk/drawbridge/src/test/db.script 2008-11-13 03:54:04 UTC (rev 55) +++ trunk/drawbridge/src/test/db.script 2008-11-15 03:27:12 UTC (rev 56) @@ -7,7 +7,7 @@ CREATE MEMORY TABLE DB_DRIVER(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,NAME VARCHAR(32) NOT NULL,CLASS_NAME VARCHAR(128) NOT NULL,CONSTRAINT UNQ_DB_DRIVER UNIQUE(NAME)) CREATE MEMORY TABLE DB_DATABASE(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,NAME VARCHAR(32) NOT NULL,JDBC_URL VARCHAR(128) NOT NULL,DRIVER_ID INTEGER NOT NULL,CONSTRAINT FK_DB_DATABASE_DB_DRIVER FOREIGN KEY(DRIVER_ID) REFERENCES PUBLIC.DB_DRIVER(ID),CONSTRAINT UNQ_DB_DATABASE UNIQUE(NAME)) CREATE MEMORY TABLE DB_RUN_AS(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,USER_NAME VARCHAR(16) NOT NULL,ENC_PASSWORD VARCHAR(32) NOT NULL,DATABASE_ID INTEGER NOT NULL,CONSTRAINT FK_DB_RUN_AS_DB_DATABASE FOREIGN KEY(DATABASE_ID) REFERENCES PUBLIC.DB_DATABASE(ID),CONSTRAINT UNQ_DB_RUN_AS UNIQUE(USER_NAME,DATABASE_ID)) -CREATE MEMORY TABLE DB_JOB(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,RUN_AS_ID INTEGER NOT NULL,QUERY VARCHAR(1024) NOT NULL,SUBMITTED_BY INTEGER NOT NULL,SUBMITTED_ON TIMESTAMP NOT NULL,REVIEWED_BY INTEGER,REVIEWED_ON TIMESTAMP,APPROVED_BY INTEGER,APPROVED_ON TIMESTAMP,ACTIVE VARCHAR(1) NOT NULL,HANDLER VARCHAR(128),HANDLER_PARAMS VARCHAR(512),CONSTRAINT FK_DB_JOB_DB_RUN_AS FOREIGN KEY(RUN_AS_ID) REFERENCES PUBLIC.DB_RUN_AS(ID),CONSTRAINT FK_DB_JOB_SUBMITTED_BY FOREIGN KEY(SUBMITTED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_REVIEWED_BY FOREIGN KEY(REVIEWED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_APPROVED_BY FOREIGN KEY(APPROVED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT UNQ_DB_JOB UNIQUE(NAME),CONSTRAINT CHK_DB_JOB_ACTIVE CHECK((DB_JOB.ACTIVE) IN (('Y'),('N')))) +CREATE MEMORY TABLE DB_JOB(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,RUN_AS_ID INTEGER NOT NULL,JOB_TYPE VARCHAR(1) NOT NULL,QUERY VARCHAR(1024) NOT NULL,SUBMITTED_BY INTEGER NOT NULL,SUBMITTED_ON TIMESTAMP NOT NULL,REVIEWED_BY INTEGER,REVIEWED_ON TIMESTAMP,APPROVED_BY INTEGER,APPROVED_ON TIMESTAMP,ACTIVE VARCHAR(1) NOT NULL,HANDLER VARCHAR(128),HANDLER_PARAMS VARCHAR(512),CONSTRAINT FK_DB_JOB_DB_RUN_AS FOREIGN KEY(RUN_AS_ID) REFERENCES PUBLIC.DB_RUN_AS(ID),CONSTRAINT FK_DB_JOB_SUBMITTED_BY FOREIGN KEY(SUBMITTED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_REVIEWED_BY FOREIGN KEY(REVIEWED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_APPROVED_BY FOREIGN KEY(APPROVED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT UNQ_DB_JOB UNIQUE(NAME),CONSTRAINT CHK_DB_JOB_ACTIVE CHECK((DB_JOB.ACTIVE) IN (('Y'),('N'))),CONSTRAINT CHK_DB_JOB_JOB_TYPE CHECK((DB_JOB.JOB_TYPE) IN (('Q'),('U'),('P')))) CREATE MEMORY TABLE DB_SCHEDULE(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,JOB_ID INTEGER NOT NULL,START_DATE DATE,STOP_DATE DATE,SCHEDULE VARCHAR(128) NOT NULL,VERSION INTEGER DEFAULT 0 NOT NULL,CONSTRAINT FK_DB_SCHEDULE_DB_JOB FOREIGN KEY(JOB_ID) REFERENCES PUBLIC.DB_JOB(ID)) CREATE MEMORY TABLE DB_PERMISSION_LIST(ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,PERMISSION_TYPE VARCHAR(1) NOT NULL,CONSTRAINT UNQ_DB_PERMISSION UNIQUE(NAME,PERMISSION_TYPE),CONSTRAINT CHK_DB_PERMISSION_LIST_PERMISSION_TYPE CHECK((DB_PERMISSION_LIST.PERMISSION_TYPE) IN (('S'),('D'),('R')))) CREATE MEMORY TABLE DB_SYSTEM_PERMISSION(GROUP_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,PRIMARY KEY(GROUP_ID,PERMISSION_ID),CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE) @@ -50,8 +50,8 @@ INSERT INTO DB_DATABASE VALUES(0,'HSQLDB In-Memory Database','jdbc:hsqldb:mem:.',0) INSERT INTO DB_RUN_AS VALUES(0,'sa','base64',0) INSERT INTO DB_RUN_AS VALUES(1,'dev','base64',0) -INSERT INTO DB_JOB VALUES(0,'Job 1',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','handler','testKey1=testVal1\u000atestKey2=testVal2') -INSERT INTO DB_JOB VALUES(1,'Job 2',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','handler','testKey1=testVal1\u000atestKey2=testVal2') +INSERT INTO DB_JOB VALUES(0,'Job 1',0,'Q','select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','handler','testKey1=testVal1\u000atestKey2=testVal2') +INSERT INTO DB_JOB VALUES(1,'Job 2',0,'Q','select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','handler','testKey1=testVal1\u000atestKey2=testVal2') INSERT INTO DB_SCHEDULE VALUES(0,0,NULL,NULL,'0/60 * * * * ?',0) INSERT INTO DB_SCHEDULE VALUES(1,1,NULL,NULL,'0/60 * * * * ?',0) INSERT INTO DB_PERMISSION_LIST VALUES(1,'ADD USER','S') Modified: trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java 2008-11-13 03:54:04 UTC (rev 55) +++ trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java 2008-11-15 03:27:12 UTC (rev 56) @@ -80,7 +80,7 @@ public void testShouldExecuteJobAndSendResultsToHandler() throws Exception { Job job = getJob(); - mockJobExecuter.expects(once()).method("executeJob"); + mockJobExecuter.expects(once()).method("executeQueryJob"); mockBeanFactory.expects(once()).method("getBean").with(eq("SomeHandler")).will(returnValue(mockHandler.proxy())); mockPropConverter.expects(once()).method("convertToProperties").will(returnValue(new Properties())); mockHandler.expects(once()).method("handleQuery"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-11-13 03:54:10
|
Revision: 55 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=55&view=rev Author: blamonica Date: 2008-11-13 03:54:04 +0000 (Thu, 13 Nov 2008) Log Message: ----------- * Added a way for Jobs to show their next scheduled time to run. * Added unit tests for the Schedule and Job classes in order to test the getNextFireTime methods. * Added the "Schedule" column back to the manage.jsp for Jobs, this will now show the next time the job is scheduled to run (or blank if it is disabled or has no schedule). * Fixed the Scheduler so that it only loads jobs that are active. Modified Paths: -------------- trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp trunk/drawbridge/src/java/net/sf/drawbridge/dao/JobDao.java trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/HibernateJobDaoImpl.java trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java trunk/drawbridge/src/java/net/sf/drawbridge/vo/Schedule.java Added Paths: ----------- trunk/drawbridge/src/test/net/sf/drawbridge/vo/ trunk/drawbridge/src/test/net/sf/drawbridge/vo/JobTest.java trunk/drawbridge/src/test/net/sf/drawbridge/vo/ScheduleTest.java Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp 2008-11-13 02:16:25 UTC (rev 54) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp 2008-11-13 03:54:04 UTC (rev 55) @@ -28,9 +28,7 @@ <display:column property="name" title="Name" sortable="true"/> <display:column title="Run As" sortable="true"><c:out value="${row.runAsAccount.userName}"/></display:column> <display:column property="active" title="Active" sortable="true"/> - <%-- TODO: find a way to display the schedule, perhaps display the next time it's scheduled to run? - <display:column title="Schedule" sortable="true"><c:out value="${row.schedule}" default="none"/></display:column> - --%> + <display:column title="Scheduled" sortable="true"><fmt:formatDate type="both" value="${row.nextFireDate}" dateStyle="yyyy-MM-dd HH:mm"/></display:column> <display:column title="Handler" sortable="true"><c:out value="${row.handler}" default="none"/></display:column> <display:column title="Action" style="text-align: center;"> <a href="RunJob.do?jobId=<c:out value="${row.id}"/>"><img src="images/icons/22x22/emblem-system.png" title="Run" border="0"></a> Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/JobDao.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/JobDao.java 2008-11-13 02:16:25 UTC (rev 54) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/JobDao.java 2008-11-13 03:54:04 UTC (rev 55) @@ -25,5 +25,7 @@ public static final String BEAN_NAME = "JobDao"; List<Job> getJobsForDatabase(Integer databaseId); + + List<Job> getAllActive(); } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/HibernateJobDaoImpl.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/HibernateJobDaoImpl.java 2008-11-13 02:16:25 UTC (rev 54) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/HibernateJobDaoImpl.java 2008-11-13 03:54:04 UTC (rev 55) @@ -40,4 +40,12 @@ criteria.addOrder(Order.asc("name")); return getHibernateTemplate().findByCriteria(criteria); } + + @SuppressWarnings("unchecked") + public List<Job> getAllActive() { + DetachedCriteria criteria = DetachedCriteria.forClass(voClass); + criteria.add(Expression.eq("active", "Y")); + criteria.addOrder(Order.asc("id")); + return (List<Job>) getHibernateTemplate().findByCriteria(criteria); + } } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java 2008-11-13 02:16:25 UTC (rev 54) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java 2008-11-13 03:54:04 UTC (rev 55) @@ -53,38 +53,32 @@ } public void loadSchedule() throws Exception{ - List<Job> jobs = jobDao.getAll(); + List<Job> jobs = jobDao.getAllActive(); for (Job job : jobs) { - if (job.isActive()) { - if (log.isDebugEnabled()) { - log.debug("Scheduling Job #" + job.getId() + ": " + job.getName() + "."); + if (log.isDebugEnabled()) { + log.debug("Scheduling Job #" + job.getId() + ": " + job.getName() + "."); + } + + String jobId = String.valueOf(job.getId()); + String jobGroupId = String.valueOf(job.getRunAsAccount().getId()); + JobDetail detail = new JobDetail(jobId, jobGroupId, jobClass); + detail.setDescription(job.getName()); + for (Schedule schedule : job.getSchedules()) { + Trigger trigger = new CronTrigger( + String.valueOf(schedule.getId()), // trigger id + jobId, // trigger group + jobId, // job id + jobGroupId, // job group id + schedule.getStartDate(), // start time + schedule.getStopDate(), // stop time + schedule.getSchedule()); // cron expression + + try { + scheduler.scheduleJob(detail, trigger); + } catch (SchedulerException e) { + log.error("Unable to schedule Job #" + job.getId() + ": " + job.getName() + ".", e); } - - String jobId = String.valueOf(job.getId()); - String jobGroupId = String.valueOf(job.getRunAsAccount().getId()); - JobDetail detail = new JobDetail(jobId, jobGroupId, jobClass); - detail.setDescription(job.getName()); - for (Schedule schedule : job.getSchedules()) { - Trigger trigger = new CronTrigger( - String.valueOf(schedule.getId()), // trigger id - jobId, // trigger group - jobId, // job id - jobGroupId, // job group id - schedule.getStartDate(), // start time - schedule.getStopDate(), // stop time - schedule.getSchedule()); // cron expression - - try { - scheduler.scheduleJob(detail, trigger); - } catch (SchedulerException e) { - log.error("Unable to schedule Job #" + job.getId() + ": " + job.getName() + ".", e); - } - } - } else { - if (log.isDebugEnabled()) { - log.debug("Job #" + job.getId() + ": " + job.getName() + " is not active, will not schedule."); - } } } } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java 2008-11-13 02:16:25 UTC (rev 54) +++ trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java 2008-11-13 03:54:04 UTC (rev 55) @@ -20,6 +20,7 @@ import java.util.Calendar; import java.util.Collection; import java.util.Collections; +import java.util.Date; import java.util.HashSet; import java.util.Set; @@ -145,6 +146,20 @@ this.handlerParams = handlerParams; } + public Date getNextFireDate() { + Date nextFireDate = null; + if (isActive() && !getSchedules().isEmpty()) { + for (Schedule schedule : getSchedules()) { + Date fireDate = schedule.getNextFireDate(); + // find the min(fireDate) + if (nextFireDate == null || (fireDate != null && nextFireDate.after(fireDate))) { + nextFireDate = fireDate; + } + } + } + + return nextFireDate; + } @Override public int hashCode() { final int prime = 31; Modified: trunk/drawbridge/src/java/net/sf/drawbridge/vo/Schedule.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/vo/Schedule.java 2008-11-13 02:16:25 UTC (rev 54) +++ trunk/drawbridge/src/java/net/sf/drawbridge/vo/Schedule.java 2008-11-13 03:54:04 UTC (rev 55) @@ -19,6 +19,8 @@ import java.util.Date; +import org.quartz.CronExpression; + public class Schedule extends ValueObject<Long> { private Long jobId; private String schedule; @@ -67,7 +69,37 @@ public void setStopDate(Date stopDate) { this.stopDate = stopDate; } + + public Date getNextFireDate() { + Date nextFireDate = null; + Date triggerTime = null; + Date now = new Date(); + + try { + // take max(startDate, now) and use that for the triggerTime + if (getStartDate() == null || getStartDate().before(now)) { + triggerTime = now; + } else { + triggerTime = getStartDate(); + } + CronExpression exp = new CronExpression(getSchedule()); + // if the current date is between the start and the stop dates, then get the next fire date. + if (getStopDate() == null || getStopDate().after(now)) { + nextFireDate = exp.getNextValidTimeAfter(triggerTime); + + // we're not goign to fire if it is after the stop date + if (getStopDate() != null && getStopDate().before(nextFireDate)) { + nextFireDate = null; + } + } + } catch (Exception e) { + // do nothing, we don't have a the necessary information to figure out the next date. + } + + return nextFireDate; + } + @Override public int hashCode() { final int prime = 31; Added: trunk/drawbridge/src/test/net/sf/drawbridge/vo/JobTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/vo/JobTest.java (rev 0) +++ trunk/drawbridge/src/test/net/sf/drawbridge/vo/JobTest.java 2008-11-13 03:54:04 UTC (rev 55) @@ -0,0 +1,51 @@ +/* + * This file is part of DrawBridge. + * Copyright 2008 Ben La Monica + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package net.sf.drawbridge.vo; + +import java.text.SimpleDateFormat; + +import junit.framework.TestCase; + +public class JobTest extends TestCase { + + public void testShouldReturnNullForNextFireDateIfJobNotActive() { + Job target = new Job(); + target.setActive("N"); + assertNull(target.getNextFireDate()); + } + + public void testShouldReturnNullForNextFireDateIfNoSchedulesAreDefined() { + Job target = new Job(); + target.setActive("Y"); + assertEquals(0, target.getSchedules().size()); + assertNull(target.getNextFireDate()); + } + + public void testShouldReturnEarliestNextFireDateFromMultipleSchedules() { + Job target = new Job(); + target.setId(-1L); + Schedule sched1 = new Schedule(1, 1, "* * 5 ? * * 2080", null, null); + Schedule sched2 = new Schedule(2, 1, "* * 5 ? * * 2079", null, null); + target.setActive("Y"); + target.addSchedule(sched1); + target.addSchedule(sched2); + SimpleDateFormat df = new SimpleDateFormat("yyyy"); + assertEquals("2079", df.format(target.getNextFireDate())); + } +} Added: trunk/drawbridge/src/test/net/sf/drawbridge/vo/ScheduleTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/vo/ScheduleTest.java (rev 0) +++ trunk/drawbridge/src/test/net/sf/drawbridge/vo/ScheduleTest.java 2008-11-13 03:54:04 UTC (rev 55) @@ -0,0 +1,69 @@ +/* + * This file is part of DrawBridge. + * Copyright 2008 Ben La Monica + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package net.sf.drawbridge.vo; + +import java.util.Calendar; +import java.util.Date; + +import junit.framework.TestCase; + +public class ScheduleTest extends TestCase { + + public void testShouldReturnNullIfNotEnoughInformationIsAvailableToDetermineNextFireDate() throws Exception { + Schedule target = new Schedule(); + assertNull("should return null because there is no cron expression set", target.getNextFireDate()); + } + + public void testShouldReturnNullIfTodayIsAfterStopDate() throws Exception { + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, -1); + Schedule target = new Schedule(); + target.setStopDate(cal.getTime()); + target.setSchedule("* 0 0 ? 2 * *"); + assertNull(target.getNextFireDate()); + } + + public void testShouldReturnNextFireDate() throws Exception { + Schedule target = new Schedule(); + target.setSchedule("* 0 0 ? 2 * *"); + assertNotNull("should return null because there is no cron expression set", target.getNextFireDate()); + } + + public void testShouldUseStartDateWhenFiguringTheNextFireDate() throws Exception { + Schedule startDateSet = new Schedule(); + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, 2); + startDateSet.setStartDate(cal.getTime()); + startDateSet.setSchedule("* 0 5 ? * * *"); + Date result = startDateSet.getNextFireDate(); + Schedule noStartDateSet = new Schedule(); + noStartDateSet.setSchedule("* 0 5 ? * * *"); + Date result2 = noStartDateSet.getNextFireDate(); + assertTrue("the result with a start date should be after the result without a start date", result2.before(result)); + } + + public void testShouldReturnNullIfNextFireDateIsAfterStopDate() throws Exception { + Schedule target = new Schedule(); + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, 2); + target.setStopDate(cal.getTime()); + target.setSchedule("* 0 5 ? * * 2080"); + assertNull("should be null since the fire date would be in the year 2080, but the stop date is 2 days from now.", target.getNextFireDate()); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-11-13 02:16:28
|
Revision: 54 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=54&view=rev Author: blamonica Date: 2008-11-13 02:16:25 +0000 (Thu, 13 Nov 2008) Log Message: ----------- Added a way to check the validity of cron expressions. Still needs to be added to the jsps. Modified Paths: -------------- trunk/drawbridge/WebContent/WEB-INF/dwr.xml trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrDrawbridgeFacade.java trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrDrawbridgeFacade.java trunk/drawbridge/src/java/net/sf/drawbridge/sched/DrawbridgeScheduleLoader.java trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java Added Paths: ----------- trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrCronValidatorFacade.java trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrCronValidatorFacade.java trunk/drawbridge/src/java/net/sf/drawbridge/sched/CronValidator.java trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzCronValidator.java trunk/drawbridge/src/test/net/sf/drawbridge/dwr/ trunk/drawbridge/src/test/net/sf/drawbridge/dwr/WrapperDwrCronValidatorFacadeTest.java trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzCronValidatorTest.java Modified: trunk/drawbridge/WebContent/WEB-INF/dwr.xml =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/dwr.xml 2008-11-11 22:59:42 UTC (rev 53) +++ trunk/drawbridge/WebContent/WEB-INF/dwr.xml 2008-11-13 02:16:25 UTC (rev 54) @@ -5,6 +5,9 @@ <create creator="spring" javascript="DrawbridgeService"> <param name="beanName" value="DwrDrawbridgeFacade"/> </create> + <create creator="spring" javascript="CronValidator"> + <param name="beanName" value="CronValidator"/> + </create> <convert converter="bean" match="net.sf.drawbridge.vo.RunAsAccount"/> </allow> </dwr> \ No newline at end of file Added: trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrCronValidatorFacade.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrCronValidatorFacade.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrCronValidatorFacade.java 2008-11-13 02:16:25 UTC (rev 54) @@ -0,0 +1,24 @@ +/* + * This file is part of DrawBridge. + * Copyright 2008 Ben La Monica + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package net.sf.drawbridge.dwr; + +public interface DwrCronValidatorFacade { + String getNextRun(String startDate, String stopDate, String cronExpression); + String[] getNextRuns(String startDate, String stopDate, String cronExpression, int numRuns); +} Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrDrawbridgeFacade.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrDrawbridgeFacade.java 2008-11-11 22:59:42 UTC (rev 53) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrDrawbridgeFacade.java 2008-11-13 02:16:25 UTC (rev 54) @@ -1,3 +1,21 @@ +/* + * This file is part of DrawBridge. + * Copyright 2008 Adam Cresse + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. + */ + package net.sf.drawbridge.dwr; import java.util.List; @@ -5,7 +23,5 @@ import net.sf.drawbridge.vo.RunAsAccount; public interface DwrDrawbridgeFacade { - public List<RunAsAccount> listRunAsAccounts(Integer databaseId); - } Added: trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrCronValidatorFacade.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrCronValidatorFacade.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrCronValidatorFacade.java 2008-11-13 02:16:25 UTC (rev 54) @@ -0,0 +1,102 @@ +/* + * This file is part of DrawBridge. + * Copyright 2008 Ben La Monica + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package net.sf.drawbridge.dwr; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import net.sf.drawbridge.sched.CronValidator; + +/** + * Provides a wrapper around the CronValidator service so that the formatting on the page will be easier. + */ +public class WrapperDwrCronValidatorFacade implements DwrCronValidatorFacade { + + private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm"; + + private CronValidator validator; + + public WrapperDwrCronValidatorFacade(CronValidator validator) { + this.validator = validator; + } + + private Date getDate(final SimpleDateFormat df, final String inDate) { + if (inDate != null && !"NOW".equalsIgnoreCase(inDate) && !"NEVER".equalsIgnoreCase(inDate)) { + try { + return df.parse(inDate); + } catch (Exception e) { + // unable to parse date + } + } + return null; + } + + public String getNextRun(final String inStartDate, final String inStopDate, final String inCronExpression) { + String nextRun = ""; + String errorMessage = validator.getErrorMessage(inCronExpression); + + if (errorMessage == null) { + SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT); + Date startDate = getDate(df, inStartDate); + Date stopDate = getDate(df, inStopDate); + Date nextRunDate = validator.getNextRun(startDate, stopDate, inCronExpression); + + if (nextRunDate == null) { + errorMessage = "Unable to determine next run date, are the start/stop dates correct?"; + } else { + nextRun = df.format(nextRunDate); + } + } + + if (errorMessage != null) { + return "Error: " + errorMessage; + } else { + return nextRun; + } + } + + public String[] getNextRuns(final String inStartDate, final String inStopDate, final String inCronExpression, final int numRuns) { + String[] nextRuns = {""}; + String errorMessage = validator.getErrorMessage(inCronExpression); + + if (errorMessage == null) { + SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT); + Date startDate = getDate(df, inStartDate); + Date stopDate = getDate(df, inStopDate); + List<Date> nextRunDates = validator.getNextRuns(startDate, stopDate, inCronExpression, numRuns); + + if (nextRunDates.isEmpty()) { + errorMessage = "Unable to determine next run date, are the start/stop dates correct?"; + } else { + nextRuns = new String[nextRunDates.size()]; + int i = 0; + for (Date nextRunDate : nextRunDates) { + nextRuns[i++] = df.format(nextRunDate); + } + } + } + + if (errorMessage != null) { + return new String[] {"Error: " + errorMessage}; + } else { + return nextRuns; + } + } +} Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrDrawbridgeFacade.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrDrawbridgeFacade.java 2008-11-11 22:59:42 UTC (rev 53) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrDrawbridgeFacade.java 2008-11-13 02:16:25 UTC (rev 54) @@ -1,3 +1,21 @@ +/* + * This file is part of DrawBridge. + * Copyright 2008 Adam Cresse + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. + */ + package net.sf.drawbridge.dwr; import java.util.List; @@ -20,6 +38,4 @@ } return accounts; } - - } Added: trunk/drawbridge/src/java/net/sf/drawbridge/sched/CronValidator.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/CronValidator.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/CronValidator.java 2008-11-13 02:16:25 UTC (rev 54) @@ -0,0 +1,28 @@ +/* + * This file is part of DrawBridge. + * Copyright 2008 Ben La Monica + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package net.sf.drawbridge.sched; + +import java.util.Date; +import java.util.List; + +public interface CronValidator { + Date getNextRun(Date startDate, Date stopDate, String cronExpression); + String getErrorMessage(String cronExpression); + List<Date> getNextRuns(Date startDate, Date stopDate, String cronExpression, int numRuns); +} Modified: trunk/drawbridge/src/java/net/sf/drawbridge/sched/DrawbridgeScheduleLoader.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/DrawbridgeScheduleLoader.java 2008-11-11 22:59:42 UTC (rev 53) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/DrawbridgeScheduleLoader.java 2008-11-13 02:16:25 UTC (rev 54) @@ -18,7 +18,5 @@ package net.sf.drawbridge.sched; public interface DrawbridgeScheduleLoader { - void loadSchedule() throws Exception; - } Added: trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzCronValidator.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzCronValidator.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzCronValidator.java 2008-11-13 02:16:25 UTC (rev 54) @@ -0,0 +1,92 @@ +/* + * This file is part of DrawBridge. + * Copyright 2008 Ben La Monica + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package net.sf.drawbridge.sched; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.quartz.CronExpression; + +public class QuartzCronValidator implements CronValidator { + + private static final Log log = LogFactory.getLog(QuartzCronValidator.class); + + /** + * Will return the next date that will trigger the cron expression + */ + public Date getNextRun(Date startDate, final Date stopDate, final String cronExpression) { + Date nextRunTime = null; + try { + if (startDate == null) { + // use today's date, since it obviously isn't going to execute before today. + startDate = new Date(); + } + CronExpression exp = new CronExpression(cronExpression); + if (stopDate == null || (stopDate != null && startDate.before(stopDate))) { + nextRunTime = exp.getNextValidTimeAfter(startDate); + } + } catch (Exception e) { + if (log.isDebugEnabled()) { + log.debug("Caught " + e.getClass().getSimpleName() + " [" + e.getLocalizedMessage() + "] Invalid Cron Expression: '" + cronExpression + "'."); + } + } + return nextRunTime; + } + + /** + * Will return the next numRuns dates that will trigger the cron expression + */ + public List<Date> getNextRuns(final Date startDate, final Date stopDate, final String cronExpression, final int numRuns) { + List<Date> nextRunTimes = new ArrayList<Date>(); + try { + CronExpression exp = new CronExpression(cronExpression); + Date lastRun = startDate != null ? startDate : new Date(); + for (int i = 0; i < numRuns && (stopDate == null || lastRun.before(stopDate)); i++) { + lastRun = exp.getNextValidTimeAfter(lastRun); + nextRunTimes.add(lastRun); + } + } catch (Exception e) { + if (log.isDebugEnabled()) { + log.debug("Caught " + e.getClass().getSimpleName() + " [" + e.getLocalizedMessage() + "] Invalid Cron Expression: '" + cronExpression + "'."); + } + } + return nextRunTimes; + } + + /** + * Returns error message if cronExpression is not formed correctly + * @param cronExpression + * @return + */ + public String getErrorMessage(String cronExpression) { + String message = null; + + try { + new CronExpression(cronExpression); + } catch (ParseException e) { + message = e.getLocalizedMessage(); + } + + return message; + } +} Modified: trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java 2008-11-11 22:59:42 UTC (rev 53) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java 2008-11-13 02:16:25 UTC (rev 54) @@ -1,6 +1,7 @@ /* * This file is part of DrawBridge. * Copyright 2008 Adam Cresse + * Copyright 2008 Ben La Monica * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License Added: trunk/drawbridge/src/test/net/sf/drawbridge/dwr/WrapperDwrCronValidatorFacadeTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/dwr/WrapperDwrCronValidatorFacadeTest.java (rev 0) +++ trunk/drawbridge/src/test/net/sf/drawbridge/dwr/WrapperDwrCronValidatorFacadeTest.java 2008-11-13 02:16:25 UTC (rev 54) @@ -0,0 +1,125 @@ +/* + * This file is part of DrawBridge. + * Copyright 2008 Adam Cresse + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package net.sf.drawbridge.dwr; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import net.sf.drawbridge.sched.CronValidator; + +import org.jmock.Mock; +import org.jmock.MockObjectTestCase; + +public class WrapperDwrCronValidatorFacadeTest extends MockObjectTestCase { + + private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + + private Mock mockCronValidator = mock(CronValidator.class); + + private WrapperDwrCronValidatorFacade target = new WrapperDwrCronValidatorFacade((CronValidator) mockCronValidator.proxy()); + + public void testShouldReturnNextFireDateAsStringGivenCorrectCronParameters() throws Exception { + String cronExp = "* 0 0 2 ? * *"; + String startDate = "2007-01-12 14:30"; + String stopDate = "2008-09-28 18:38"; + String nextRun = "2007-10-12 15:07"; + mockCronValidator.expects(once()).method("getErrorMessage").with(eq(cronExp)).will(returnValue(null)); + mockCronValidator.expects(once()).method("getNextRun").with(eq(df.parse(startDate)), eq(df.parse(stopDate)), eq(cronExp)).will(returnValue(df.parse(nextRun))); + String result = target.getNextRun(startDate, stopDate, cronExp); + assertEquals(nextRun, result); + } + + public void testShouldReturnNextFireDateAsStringGivenWhenStartDateIsNowAndStopDateIsNever() throws Exception { + String cronExp = "* 0 0 2 ? * *"; + String nextRun = "2007-10-12 15:07"; + mockCronValidator.expects(once()).method("getErrorMessage").with(eq(cronExp)).will(returnValue(null)); + mockCronValidator.expects(once()).method("getNextRun").with(eq(null), eq(null), eq(cronExp)).will(returnValue(df.parse(nextRun))); + String result = target.getNextRun("Now", "Never", cronExp); + assertEquals(nextRun, result); + } + + public void testShouldTreatAnInvalidDateAsNull() throws Exception { + String cronExp = "* 0 0 2 ? * *"; + String nextRun = "2007-10-12 15:07"; + mockCronValidator.expects(once()).method("getErrorMessage").with(eq(cronExp)).will(returnValue(null)); + mockCronValidator.expects(once()).method("getNextRun").with(eq(null), eq(null), eq(cronExp)).will(returnValue(df.parse(nextRun))); + String result = target.getNextRun("blah invalid start blah", "blah invalid stop blah", cronExp); + assertEquals(nextRun, result); + } + + public void testShouldReturnErrorMessageIfUnableToGetNextRunTime() throws Exception { + String cronExp = "blah invlalid cron exp blah"; + mockCronValidator.expects(once()).method("getErrorMessage").with(eq(cronExp)).will(returnValue(null)); + mockCronValidator.expects(once()).method("getNextRun").with(eq(null), eq(null), eq(cronExp)).will(returnValue(null)); + String result = target.getNextRun("Now", "Never", cronExp); + assertTrue(result.contains("Error: Unable")); + } + + public void testShouldReturnNextNRunsFireDateAsStringGivenCorrectCronParameters() throws Exception { + String cronExp = "* 0 0 2 ? * *"; + String startDate = "2007-01-12 14:30"; + String stopDate = "2008-09-28 18:38"; + String nextRun = "2007-10-12 15:07"; + List<Date> dates = new ArrayList<Date>(); + dates.add(df.parse(nextRun)); + dates.add(df.parse(startDate)); + mockCronValidator.expects(once()).method("getErrorMessage").with(eq(cronExp)).will(returnValue(null)); + mockCronValidator.expects(once()).method("getNextRuns").with(eq(df.parse(startDate)), eq(df.parse(stopDate)), eq(cronExp), eq(20)).will(returnValue(dates)); + String[] result = target.getNextRuns(startDate, stopDate, cronExp, 20); + assertEquals(dates.size(), result.length); + } + + public void testShouldReturnNextNRunsFireDateAsStringGivenWhenStartDateIsNowAndStopDateIsNever() throws Exception { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String cronExp = "* 0 0 2 ? * *"; + String startDate = "2007-01-12 14:30"; + String nextRun = "2007-10-12 15:07"; + List<Date> dates = new ArrayList<Date>(); + dates.add(df.parse(nextRun)); + dates.add(df.parse(startDate)); + mockCronValidator.expects(once()).method("getErrorMessage").with(eq(cronExp)).will(returnValue(null)); + mockCronValidator.expects(once()).method("getNextRuns").with(eq(null), eq(null), eq(cronExp), eq(20)).will(returnValue(dates)); + String[] result = target.getNextRuns("Now", "Never", cronExp, 20); + assertEquals(dates.size(), result.length); + } + + public void testShouldTreatAnInvalidDateAsNullWhenRetrievingMultipleRuns() throws Exception { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String cronExp = "* 0 0 2 ? * *"; + String nextRun = "2007-10-12 15:07"; + List<Date> dates = new ArrayList<Date>(); + dates.add(df.parse(nextRun)); + mockCronValidator.expects(once()).method("getErrorMessage").with(eq(cronExp)).will(returnValue(null)); + mockCronValidator.expects(once()).method("getNextRuns").with(eq(null), eq(null), eq(cronExp), eq(20)).will(returnValue(dates)); + String[] result = target.getNextRuns("blah invalid start blah", "blah invalid stop blah", cronExp, 20); + assertEquals(nextRun, result[0]); + } + + public void testShouldReturnErrorMessageIfUnableToGetNextNRunTimes() throws Exception { + String cronExp = "blah invlalid cron exp blah"; + mockCronValidator.expects(once()).method("getErrorMessage").with(eq(cronExp)).will(returnValue(null)); + mockCronValidator.expects(once()).method("getNextRuns").with(eq(null), eq(null), eq(cronExp), eq(20)).will(returnValue(Collections.emptyList())); + String[] result = target.getNextRuns("Now", "Never", cronExp, 20); + assertTrue(result[0].contains("Error: Unable")); + } + +} Added: trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzCronValidatorTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzCronValidatorTest.java (rev 0) +++ trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzCronValidatorTest.java 2008-11-13 02:16:25 UTC (rev 54) @@ -0,0 +1,73 @@ +package net.sf.drawbridge.sched; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import junit.framework.TestCase; + +public class QuartzCronValidatorTest extends TestCase { + + private QuartzCronValidator target = new QuartzCronValidator(); + + private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + + public void testShouldReturnNullIfInvalidCronExpression() { + assertNull("returned something even though the cron expression should be invalid", target.getNextRun(null, null, "5 2 1 blah blahblahblah")); + } + + public void testShouldReturnNullIfStartDateIsAfterStopDate() throws Exception { + Date startDate = df.parse("2008-09-28"); + Date stopDate = df.parse("2007-01-12"); + assertNull("returned something even though the cron expression should be invalid", target.getNextRun(startDate, stopDate, "* 0 0 14 5 * *")); + } + + public void testShouldReturnDateOfNextFireDate() throws Exception { + String fireDate = "2007-02-01"; + Date startDate = df.parse("2007-01-12"); + Date stopDate = df.parse("2008-09-28"); + Date nextFireDate = target.getNextRun(startDate, stopDate, "* 0 0 ? 2 * *"); + assertEquals(fireDate, df.format(nextFireDate)); + } + + public void testShouldReturnNullIfStartDateIsNullAndStopDateIsBeforeToday() throws Exception { + Date stopDate = df.parse("2008-09-28"); + Date nextFireDate = target.getNextRun(null, stopDate, "* 0 0 ? 2 * *"); + assertNull(nextFireDate); + } + + public void testShouldReturnDateOfNextFireDateIfStartDateIsNullAndStopDateIsAfterToday() throws Exception { + Date stopDate = df.parse("2050-09-28"); + Date nextFireDate = target.getNextRun(null, stopDate, "* 0 0 ? 2 * *"); + assertNotNull(nextFireDate); + } + + public void testShouldReturnEmptyListIfInvalidCronExpression() { + assertEquals(0, target.getNextRuns(null, null, "blah blah blahblah", 20).size()); + } + + public void testShouldReturnEmptyListIfStartDateIsAfterStopDate() throws Exception { + Date stopDate = df.parse("2007-01-12"); + Date startDate = df.parse("2008-09-28"); + assertEquals(0, target.getNextRuns(startDate, stopDate, "* 0 0 ? 2 * *", 20).size()); + } + + public void testShouldReturnSpecifiedNumberOfNextFireTiems() throws Exception { + Date stopDate = df.parse("2007-01-12"); + Date startDate = df.parse("2008-09-28"); + assertEquals(0, target.getNextRuns(startDate, stopDate, "* 0 0 ? 2 * *", 20).size()); + } + + public void testShouldOnlyIncludeFireTimesWithinStartStopRangeRegardlessOfNumberRequested() throws Exception { + Date startDate = df.parse("2007-01-12"); + Date stopDate = df.parse("2008-09-28"); + assertEquals(20, target.getNextRuns(startDate, stopDate, "* 0 0 ? 2 * *", 20).size()); + } + + public void testShouldReturnNullIfCronExpressionIsValid() { + assertNull("cron expression is not valid", target.getErrorMessage("* 0 0 14 5 * *")); + } + + public void testShouldReturnFalseIfCronExpressionIsNotValid() { + assertEquals("cron expression is valid, but should not be", "Illegal characters for this position: 'BLA'", target.getErrorMessage("5 2 1 blah blahblahblah")); + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-11-11 22:59:44
|
Revision: 53 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=53&view=rev Author: blamonica Date: 2008-11-11 22:59:42 +0000 (Tue, 11 Nov 2008) Log Message: ----------- Make sure there is at least one schedule on the screen. Modified Paths: -------------- trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp trunk/drawbridge/WebContent/css/drawbridge.css Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp 2008-11-11 03:54:43 UTC (rev 52) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp 2008-11-11 22:59:42 UTC (rev 53) @@ -91,7 +91,7 @@ <td id="schedules"> <input type="hidden" id="num_schedules" name="num_schedules" value="0"/> <div id="schedule_template" style="display:none;"> - <table class="schedule"> + <table name="schedule" class="schedule"> <tbody> <tr><td>Start Date:</td> <td> @@ -115,7 +115,7 @@ </table> </div> <c:forEach items="${job.schedules}" var="schedule"> - <table class="schedule"> + <table name="schedule" class="schedule"> <tbody> <tr><td>Start Date:</td> <td> @@ -177,6 +177,13 @@ } } + function add_add_action() { + var addButtons = document.getElementsByName('add_button'); + for (var i = 0; i < addButtons.length; i++) { + addButtons[i].onclick=function() {add_schedule()}; + } + } + function add_schedule() { var newSchedule = scheduleHtml.replace(/@id@/g, scheduleNumber); var newScheduleElement = document.createElement('DIV'); @@ -193,15 +200,12 @@ function del_schedule(delImg) { var toDelete = delImg.parentNode.parentNode.parentNode.parentNode; //img.td.tr.tbody.table.div toDelete.parentNode.removeChild(toDelete); - } - - function add_add_action() { - var addButtons = document.getElementsByName('add_button'); - for (var i = 0; i < addButtons.length; i++) { - addButtons[i].onclick=function() {add_schedule()}; + + if (document.getElementsByName("schedule").length == 1) { + add_schedule(); } } - + add_add_action(); add_del_action(); add_schedule(); Modified: trunk/drawbridge/WebContent/css/drawbridge.css =================================================================== --- trunk/drawbridge/WebContent/css/drawbridge.css 2008-11-11 03:54:43 UTC (rev 52) +++ trunk/drawbridge/WebContent/css/drawbridge.css 2008-11-11 22:59:42 UTC (rev 53) @@ -52,6 +52,7 @@ .schedule { border: 1px solid darkgray; + margin-bottom: 2px; } .icon { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-11-11 03:54:47
|
Revision: 52 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=52&view=rev Author: blamonica Date: 2008-11-11 03:54:43 +0000 (Tue, 11 Nov 2008) Log Message: ----------- Begin fixing jsps to support multiple schedules. Also fixed a bug with the script tags preventing the page from displaying properly in firefox. Modified Paths: -------------- trunk/drawbridge/WebContent/WEB-INF/jsp/database/manage.jsp trunk/drawbridge/WebContent/WEB-INF/jsp/driver/manage.jsp trunk/drawbridge/WebContent/WEB-INF/jsp/group/addOrEdit.jsp trunk/drawbridge/WebContent/WEB-INF/jsp/group/manage.jsp trunk/drawbridge/WebContent/WEB-INF/jsp/header.jsp trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp trunk/drawbridge/WebContent/WEB-INF/jsp/runAs/manage.jsp trunk/drawbridge/WebContent/WEB-INF/jsp/user/addOrEdit.jsp trunk/drawbridge/WebContent/WEB-INF/jsp/user/manage.jsp trunk/drawbridge/WebContent/css/drawbridge.css Added Paths: ----------- trunk/drawbridge/WebContent/calendar/ trunk/drawbridge/WebContent/calendar/ChangeLog trunk/drawbridge/WebContent/calendar/README trunk/drawbridge/WebContent/calendar/calendar-blue.css trunk/drawbridge/WebContent/calendar/calendar-setup_stripped.js trunk/drawbridge/WebContent/calendar/calendar_stripped.js trunk/drawbridge/WebContent/calendar/img.gif trunk/drawbridge/WebContent/calendar/lang/ trunk/drawbridge/WebContent/calendar/lang/calendar-af.js trunk/drawbridge/WebContent/calendar/lang/calendar-al.js trunk/drawbridge/WebContent/calendar/lang/calendar-bg.js trunk/drawbridge/WebContent/calendar/lang/calendar-big5-utf8.js trunk/drawbridge/WebContent/calendar/lang/calendar-big5.js trunk/drawbridge/WebContent/calendar/lang/calendar-br.js trunk/drawbridge/WebContent/calendar/lang/calendar-ca.js trunk/drawbridge/WebContent/calendar/lang/calendar-cs-utf8.js trunk/drawbridge/WebContent/calendar/lang/calendar-cs-win.js trunk/drawbridge/WebContent/calendar/lang/calendar-da.js trunk/drawbridge/WebContent/calendar/lang/calendar-de.js trunk/drawbridge/WebContent/calendar/lang/calendar-du.js trunk/drawbridge/WebContent/calendar/lang/calendar-el.js trunk/drawbridge/WebContent/calendar/lang/calendar-en.js trunk/drawbridge/WebContent/calendar/lang/calendar-es.js trunk/drawbridge/WebContent/calendar/lang/calendar-fi.js trunk/drawbridge/WebContent/calendar/lang/calendar-fr.js trunk/drawbridge/WebContent/calendar/lang/calendar-he-utf8.js trunk/drawbridge/WebContent/calendar/lang/calendar-hr-utf8.js trunk/drawbridge/WebContent/calendar/lang/calendar-hr.js trunk/drawbridge/WebContent/calendar/lang/calendar-hu.js trunk/drawbridge/WebContent/calendar/lang/calendar-it.js trunk/drawbridge/WebContent/calendar/lang/calendar-jp.js trunk/drawbridge/WebContent/calendar/lang/calendar-ko-utf8.js trunk/drawbridge/WebContent/calendar/lang/calendar-ko.js trunk/drawbridge/WebContent/calendar/lang/calendar-lt-utf8.js trunk/drawbridge/WebContent/calendar/lang/calendar-lt.js trunk/drawbridge/WebContent/calendar/lang/calendar-lv.js trunk/drawbridge/WebContent/calendar/lang/calendar-nl.js trunk/drawbridge/WebContent/calendar/lang/calendar-no.js trunk/drawbridge/WebContent/calendar/lang/calendar-pl-utf8.js trunk/drawbridge/WebContent/calendar/lang/calendar-pl.js trunk/drawbridge/WebContent/calendar/lang/calendar-pt.js trunk/drawbridge/WebContent/calendar/lang/calendar-ro.js trunk/drawbridge/WebContent/calendar/lang/calendar-ru.js trunk/drawbridge/WebContent/calendar/lang/calendar-ru_win_.js trunk/drawbridge/WebContent/calendar/lang/calendar-si.js trunk/drawbridge/WebContent/calendar/lang/calendar-sk.js trunk/drawbridge/WebContent/calendar/lang/calendar-sp.js trunk/drawbridge/WebContent/calendar/lang/calendar-sv.js trunk/drawbridge/WebContent/calendar/lang/calendar-tr.js trunk/drawbridge/WebContent/calendar/lang/calendar-zh.js trunk/drawbridge/WebContent/calendar/lang/cn_utf8.js trunk/drawbridge/WebContent/calendar/menuarrow.gif trunk/drawbridge/WebContent/calendar/menuarrow2.gif trunk/drawbridge/WebContent/images/icons/16x16/office-calendar.png trunk/drawbridge/WebContent/images/icons/22x22/office-calendar.png trunk/drawbridge/WebContent/images/icons/32x32/office-calendar.png trunk/drawbridge/WebContent/images/icons/add.png trunk/drawbridge/WebContent/images/icons/delete.png Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/database/manage.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/database/manage.jsp 2008-10-11 01:48:39 UTC (rev 51) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/database/manage.jsp 2008-11-11 03:54:43 UTC (rev 52) @@ -19,7 +19,7 @@ <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@taglib prefix="display" uri="http://displaytag.sf.net"%> <%@ include file="../header.jsp" %> -<script language="JavaScript" src="js/drawbridge.js" /> +<script language="JavaScript" src="js/drawbridge.js"></script> Click an action below to edit or delete database, or <a href="AddDatabase.do">create a new database</a>.<br> <br> Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/driver/manage.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/driver/manage.jsp 2008-10-11 01:48:39 UTC (rev 51) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/driver/manage.jsp 2008-11-11 03:54:43 UTC (rev 52) @@ -19,7 +19,7 @@ <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@taglib prefix="display" uri="http://displaytag.sf.net"%> <%@ include file="../header.jsp" %> -<script language="JavaScript" src="js/drawbridge.js" /> +<script language="JavaScript" src="js/drawbridge.js"></script> Click an action below to edit or delete driver, or <a href="AddDriver.do">create a new driver</a>.<br> <br> Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/group/addOrEdit.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/group/addOrEdit.jsp 2008-10-11 01:48:39 UTC (rev 51) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/group/addOrEdit.jsp 2008-11-11 03:54:43 UTC (rev 52) @@ -19,7 +19,7 @@ <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@taglib prefix="display" uri="http://displaytag.sf.net"%> <%@ include file="../header.jsp" %> -<script language="JavaScript" src="js/multiple_select.js" /> +<script language="JavaScript" src="js/multiple_select.js"></script> Please enter settings for group.<br> <br> Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/group/manage.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/group/manage.jsp 2008-10-11 01:48:39 UTC (rev 51) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/group/manage.jsp 2008-11-11 03:54:43 UTC (rev 52) @@ -19,7 +19,7 @@ <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@taglib prefix="display" uri="http://displaytag.sf.net"%> <%@ include file="../header.jsp" %> -<script language="JavaScript" src="js/drawbridge.js" /> +<script language="JavaScript" src="js/drawbridge.js"></script> Click an action below to edit or delete groups, or <a href="AddGroup.do">create a new group</a>.<br> <br> Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/header.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/header.jsp 2008-10-11 01:48:39 UTC (rev 51) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/header.jsp 2008-11-11 03:54:43 UTC (rev 52) @@ -19,10 +19,10 @@ <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <html> <head> -<title>DrawBridge - Database Administration Tool</title> + <title>DrawBridge - Database Administration Tool</title> + <link href="css/drawbridge.css" rel="stylesheet" type="text/css"/> + <link href="css/displaytag.css" rel="stylesheet" type="text/css"/> </head> -<LINK href="css/drawbridge.css" rel="stylesheet" type="text/css"/> -<LINK href="css/displaytag.css" rel="stylesheet" type="text/css"/> <body> <table width="100%" cellspacing="0"> <tr height="100" valign="bottom" class="headercell"> Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp 2008-10-11 01:48:39 UTC (rev 51) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp 2008-11-11 03:54:43 UTC (rev 52) @@ -1,6 +1,7 @@ <%-- This file is part of DrawBridge. Copyright 2008 Adam Cresse +Copyright 2008 Ben La Monica This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -19,7 +20,25 @@ <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@taglib prefix="display" uri="http://displaytag.sf.net"%> <%@ include file="../header.jsp" %> - +<%-- Calendar Include Files --%> +<link rel="stylesheet" type="text/css" media="all" href="calendar/calendar-blue.css" title="blue" /> +<script type="text/javascript" src="calendar/calendar_stripped.js"></script> +<script type="text/javascript" src="calendar/lang/calendar-en.js"></script> +<script type="text/javascript" src="calendar/calendar-setup_stripped.js"></script> +<script type="text/javascript"> +function setup_calendar(inputField) { + Calendar.setup({ + inputField : inputField, + ifFormat : "%Y-%m-%d %H:%M", + displayArea : inputField+"_d", + daFormat : "%Y-%m-%d %H:%M", + showsTime : true, + timeFormat : "24", + button : inputField + "_d", + singleClick : true + }); +} +</script> Please enter settings for job.<br> <br> <form action="AddOrEditJobSubmit.do" method="post" name="jobForm"> @@ -68,9 +87,125 @@ </td> </tr> <tr> - <td align="right">Schedule:</td> - <td><input type="text" name="schedule" maxlength="128" size="40" value="<c:out value="${job.schedule}"/>"></td> + <td align="right" valign="top">Schedule:</td> + <td id="schedules"> + <input type="hidden" id="num_schedules" name="num_schedules" value="0"/> + <div id="schedule_template" style="display:none;"> + <table class="schedule"> + <tbody> + <tr><td>Start Date:</td> + <td> + <input type="hidden" id="sched_start_@id@" name="sched_start_@id@" value=""/> + <input type="hidden" id="sched_stop_@id@" name="sched_stop_@id@" value=""/> + <input type="hidden" name="schedule_id" value="-1"/> + <span class="date" id="sched_start_@id@_d">Now</span> + </td> + <td rowspan="2" valign="top"> + <img name="add_button" class="icon" src="images/icons/add.png"/> + <img name="del_button" class="icon" src="images/icons/delete.png"/> + <td> + </tr> + <tr> + <td>Stop Date:</td> + <td><span class="date" id="sched_stop_@id@_d">Never</span></td> + </tr> + <tr><td colspan="2">Cron Expression:</td></tr> + <tr><td colspan="2"><input type="text" name="schedule_@id@" maxlength="128" size="40" value=""/></td></tr> + </tbody> + </table> + </div> + <c:forEach items="${job.schedules}" var="schedule"> + <table class="schedule"> + <tbody> + <tr><td>Start Date:</td> + <td> + <input type="hidden" id="sched_start_<c:out value="${schedule.id}"/>" name="sched_start_<c:out value="${schedule.id}"/>" value="<fmt:formatDate type="both" value="${schedule.startDate}" dateStyle="yyyy-MM-dd HH:mm"/>"/> + <input type="hidden" id="sched_stop_<c:out value="${schedule.id}"/>" name="sched_stop_<c:out value="${schedule.id}"/>" value="<fmt:formatDate type="both" value="${schedule.stopDate}" dateStyle="yyyy-MM-dd HH:mm"/>"/> + <input type="hidden" name="schedule_id" value="<c:out value="${schedule.id}"/>"/> + <span class="date" id="sched_start_<c:out value="${schedule.id}"/>_d"> + <c:choose> + <c:when test="${schedule.startDate}"> + <fmt:formatDate type="both" value="${schedule.startDate}" dateStyle="yyyy-MM-dd HH:mm"/> + </c:when> + <c:otherwise> + Now + </c:otherwise> + </c:choose> + </span> + <script type="text/javascript"> + setup_calendar("sched_start_<c:out value="${schedule.id}"/>"); + </script> + </td> + <td rowspan="2" valign="top"> + <img name="add_button" class="icon" src="images/icons/add.png"/> + <img name="del_button" class="icon" src="images/icons/delete.png"/> + <td> + </tr> + <tr> + <td>Stop Date:</td> + <td><span class="date" id="sched_stop_<c:out value="${schedule.id}"/>_d"> + <c:choose> + <c:when test="${schedule.stopDate}"> + <fmt:formatDate type="both" value="${schedule.stopDate}" dateStyle="yyyy-MM-dd HH:mm"/> + </c:when> + <c:otherwise> + Never + </c:otherwise> + </c:choose> + </span> + <script type="text/javascript"> + setup_calendar("sched_stop_<c:out value="${schedule.id}"/>"); + </script> + </td> + </tr> + <tr><td colspan="2">Cron Expression:</td></tr> + <tr><td colspan="2"><input type="text" name="schedule_<c:out value="${schedule.id}"/>" maxlength="128" size="40" value=""/></td></tr> + </tbody> + </table> + </c:forEach> + </td> </tr> + <script type="text/javascript"> + var scheduleHtml = document.getElementById("schedule_template").innerHTML; + + var scheduleNumber = 0; + + function add_del_action() { + var delButtons = document.getElementsByName('del_button'); + for (var i = 0; i < delButtons.length; i++) { + delButtons[i].onclick=function() {del_schedule(this)}; + } + } + + function add_schedule() { + var newSchedule = scheduleHtml.replace(/@id@/g, scheduleNumber); + var newScheduleElement = document.createElement('DIV'); + document.getElementById("num_schedules").value++; + document.getElementById("schedules").appendChild(newScheduleElement); + newScheduleElement.innerHTML=newSchedule; + setup_calendar("sched_start_"+scheduleNumber); + setup_calendar("sched_stop_"+scheduleNumber); + scheduleNumber++; + add_del_action(); + add_add_action(); + } + + function del_schedule(delImg) { + var toDelete = delImg.parentNode.parentNode.parentNode.parentNode; //img.td.tr.tbody.table.div + toDelete.parentNode.removeChild(toDelete); + } + + function add_add_action() { + var addButtons = document.getElementsByName('add_button'); + for (var i = 0; i < addButtons.length; i++) { + addButtons[i].onclick=function() {add_schedule()}; + } + } + + add_add_action(); + add_del_action(); + add_schedule(); + </script> <tr> <td align="right">Result Handler:</td> <td> Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp 2008-10-11 01:48:39 UTC (rev 51) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp 2008-11-11 03:54:43 UTC (rev 52) @@ -19,7 +19,7 @@ <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@taglib prefix="display" uri="http://displaytag.sf.net"%> <%@ include file="../header.jsp" %> -<script language="JavaScript" src="js/drawbridge.js" /> +<script language="JavaScript" src="js/drawbridge.js"></script> Click an action below to edit, delete, or run a job, or <a href="AddJob.do?databaseId=<c:out value="${databaseId}"/>">create a new job</a>.<br> <br> @@ -28,7 +28,9 @@ <display:column property="name" title="Name" sortable="true"/> <display:column title="Run As" sortable="true"><c:out value="${row.runAsAccount.userName}"/></display:column> <display:column property="active" title="Active" sortable="true"/> + <%-- TODO: find a way to display the schedule, perhaps display the next time it's scheduled to run? <display:column title="Schedule" sortable="true"><c:out value="${row.schedule}" default="none"/></display:column> + --%> <display:column title="Handler" sortable="true"><c:out value="${row.handler}" default="none"/></display:column> <display:column title="Action" style="text-align: center;"> <a href="RunJob.do?jobId=<c:out value="${row.id}"/>"><img src="images/icons/22x22/emblem-system.png" title="Run" border="0"></a> Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/runAs/manage.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/runAs/manage.jsp 2008-10-11 01:48:39 UTC (rev 51) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/runAs/manage.jsp 2008-11-11 03:54:43 UTC (rev 52) @@ -19,7 +19,7 @@ <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@taglib prefix="display" uri="http://displaytag.sf.net"%> <%@ include file="../header.jsp" %> -<script language="JavaScript" src="js/drawbridge.js" /> +<script language="JavaScript" src="js/drawbridge.js"></script> Click an action below to edit or delete run-as account, or <a href="AddRunAsAccount.do">create a new run-as account</a>.<br> <br> Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/user/addOrEdit.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/user/addOrEdit.jsp 2008-10-11 01:48:39 UTC (rev 51) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/user/addOrEdit.jsp 2008-11-11 03:54:43 UTC (rev 52) @@ -19,7 +19,7 @@ <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@taglib prefix="display" uri="http://displaytag.sf.net"%> <%@ include file="../header.jsp" %> -<script language="JavaScript" src="js/multiple_select.js" /> +<script language="JavaScript" src="js/multiple_select.js"></script> Please enter settings for user.<br> <br> Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/user/manage.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/user/manage.jsp 2008-10-11 01:48:39 UTC (rev 51) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/user/manage.jsp 2008-11-11 03:54:43 UTC (rev 52) @@ -19,7 +19,7 @@ <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@taglib prefix="display" uri="http://displaytag.sf.net"%> <%@ include file="../header.jsp" %> -<script language="JavaScript" src="js/drawbridge.js" /> +<script language="JavaScript" src="js/drawbridge.js"></script> Click an action below to edit or delete users, or <a href="AddUser.do">create a new user</a>.<br> <br> Added: trunk/drawbridge/WebContent/calendar/ChangeLog =================================================================== --- trunk/drawbridge/WebContent/calendar/ChangeLog (rev 0) +++ trunk/drawbridge/WebContent/calendar/ChangeLog 2008-11-11 03:54:43 UTC (rev 52) @@ -0,0 +1,761 @@ +2005-03-07 Mihai Bazon <mih...@ya...> + + * skins/aqua/theme.css: *** empty log message *** + + * release-notes.html: updated release notes + + * calendar-setup.js: + use a better approach to initialize the calendar--don't call _init twice, + it's the most time consuming function in the calendar. Instead, determine + the date beforehand if possible and pass it to the calendar at constructor. + + * calendar.js: + avoid keyboard operation when 'multiple dates' is set (very buggy for now) + + * calendar.js: + fixed keyboard handling problems: now it works fine when "showsOtherMonths" + is passed; it also seems to be fine with disabled dates (won't normally + allow selection)--however this area is still likely to be buggy, i.e. in a + month that has all the dates disabled. + + * calendar.js: + some trivial performance improvements in the _init function + Added Date.parseDate (old Calendar.prototype.parseDate now calls this one) + +2005-03-05 Mihai Bazon <mih...@ya...> + + * release-notes.html: updated release notes + + * dayinfo.html: *** empty log message *** + + * calendar-setup.js: + bugfix--update an inputField even if flat calendar is selected + + * calendar.js: + fixed bugs in parseDate function (if for some reason the input string is + totally broken, then check numbers for NaN and use values from the current + date instead) + + * make-release.pl: copy the skins subdirectory and all skins + + * index.html: added Aqua skin + + * skins/aqua/active-bg.gif, skins/aqua/dark-bg.gif, skins/aqua/hover-bg.gif, skins/aqua/menuarrow.gif, skins/aqua/normal-bg.gif, skins/aqua/rowhover-bg.gif, skins/aqua/status-bg.gif, skins/aqua/theme.css, skins/aqua/title-bg.gif, skins/aqua/today-bg.gif: + in the future, skins will go to this directory, each in a separate subdir; for now there's only Aqua, an excellent new skin + + * calendar.js: workaround IE bug, needed in the Aqua theme + don't hide select elements unless browser is IE or Opera + + * lang/calendar-bg.js, lang/calendar-big5-utf8.js, lang/calendar-big5.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-utf8.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-de.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fi.js, lang/calendar-fr.js, lang/calendar-he-utf8.js, lang/calendar-hu.js, lang/calendar-it.js, lang/calendar-ko-utf8.js, lang/calendar-ko.js, lang/calendar-lt-utf8.js, lang/calendar-lt.js, lang/calendar-lv.js, lang/calendar-nl.js, lang/calendar-no.js, lang/calendar-pl-utf8.js, lang/calendar-pl.js, lang/calendar-pt.js, lang/calendar-ro.js, lang/calendar-ru.js, lang/calendar-ru_win_.js, lang/calendar-si.js, lang/calendar-sk.js, lang/calendar-sp.js, lang/calendar-sv.js, lang/calendar-zh.js, lang/cn_utf8.js: + updated urls, copyright notices + + * doc/reference.tex: updated documentation + + * calendar.js, index.html: + renamed the global variable to _dynarch_popupCalendar to avoid name clashes + + * multiple-dates.html: start with an empty array + + * calendar.js: + fixed bugs in the time selector (12:XX pm was wrongfully understood as 12:XX am) + + * calendar.js: + using innerHTML instead of text nodes; works better in Safari and also makes + a smaller, cleaner code + +2005-03-04 Mihai Bazon <mih...@ya...> + + * calendar.js: + fixed a performance regression that occurred after adding support for multiple dates + fixed the time selection bug (now it keeps time correctly) + clicking today will close the calendar if "today" is already selected + + * lang/cn_utf8.js: new translation + +2005-02-17 Mihai Bazon <mih...@ya...> + + * lang/calendar-ar-utf8.zip: Added arabic translation + +2004-10-19 Mihai Bazon <mih...@ya...> + + * lang/calendar-zh.js: updated + +2004-09-20 Mihai Bazon <mih...@ya...> + + * lang/calendar-no.js: updated (Daniel Holmen) + +2004-09-20 Mihai Bazon <mih...@ya...> + + * lang/calendar-no.js: updated (Daniel Holmen) + +2004-08-11 Mihai Bazon <mih...@ya...> + + * lang/calendar-nl.js: updated language file (thanks to Arjen Duursma) + + * lang/calendar-sp.js: updated (thanks to Rafael Velasco) + +2004-07-21 Mihai Bazon <mih...@ya...> + + * lang/calendar-br.js: updated + + * calendar-setup.js: fixed bug (dateText) + +2004-07-21 Mihai Bazon <mih...@ya...> + + * lang/calendar-br.js: updated + + * calendar-setup.js: fixed bug (dateText) + +2004-07-04 Mihai Bazon <mih...@ya...> + + * lang/calendar-lv.js: + added LV translation (thanks to Juris Valdovskis) + +2004-06-25 Mihai Bazon <mih...@ya...> + + * calendar.js: + fixed bug in IE (el.calendar.tooltips is null or not an object) + +2004-06-24 Mihai Bazon <mih...@ya...> + + * doc/reference.tex: fixed latex compilation + + * index.html: linking other sample files + + * calendar-setup.js, calendar.js, dayinfo.html: + ability to display day info (dateText parameter) + sample file + +2004-06-23 Mihai Bazon <mih...@ya...> + + * doc/reference.tex, lang/calendar-bg.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-ko-utf8.js, lang/calendar-ko.js, lang/calendar-nl.js, lang/calendar-sv.js, README, calendar.js, index.html: + email address changed + +2004-06-14 Mihai Bazon <mih...@ya...> + + * lang/calendar-cs-utf8.js, lang/calendar-cs-win.js: + updated translations + + * calendar-system.css: added z-index to drop downs + + * lang/calendar-en.js: + first day of week can now be part of the language file + + * lang/calendar-es.js: + updated language file (thanks to Servilio Afre Puentes) + + * calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar-blue.css: + added z-index property to drop downs (fixes bug) + +2004-06-13 Mihai Bazon <mih...@ya...> + + * calendar-setup.js: fixed bug (apply showOthers to flat calendars too) + +2004-06-06 Mihai Bazon <mih...@ya...> + + * calendar-setup.js: + firstDay defaults to "null", in which case the value in the language file + will be used + + * calendar.js: + firstDayOfWeek can now default to a value specified in the language definition file + + * index.html: first day of week is now numeric + +2004-06-02 Mihai Bazon <mih...@ya...> + + * calendar.js: added date tooltip function + +2004-05-28 Mihai Bazon <mih...@ya...> + + * lang/calendar-br.js: updated (thanks to Marcos Pont) + + * calendar-setup.js: fixed small bug + +2004-05-01 Mihai Bazon <mih...@ya...> + + * calendar-setup.js: returns the calendar object + +2004-04-28 Mihai Bazon <mih...@ya...> + + * calendar-setup.js: + patch to read the date value from the inputField, according to ifFormat (if + both are passed), for flat calendars. (thanks Colin T. Hill) + +2004-04-20 Mihai Bazon <mih...@ya...> + + * calendar-setup.js, calendar.js, multiple-dates.html: + added support for multiple dates selection + + * lang/calendar-nl.js: + updated Dutch translation, thanks to Jeroen Wolsink + + * lang/calendar-big5-utf8.js, lang/calendar-big5.js: + Traditional Chinese language (thanks GaryFu) + +2004-03-26 Mihai Bazon <mih...@ya...> + + * lang/calendar-fr.js, lang/calendar-pt.js: updated + + * lang/calendar-ru_win_.js, lang/calendar-ru.js: + updated, thanks to Sly Golovanov + +2004-03-25 Mihai Bazon <mih...@ya...> + + * lang/calendar-fr.js: updated (thanks to David Duret) + +2004-03-24 Mihai Bazon <mih...@ya...> + + * lang/calendar-da.js: updated (thanks to Michael Thingmand Henriksen) + +2004-03-21 Mihai Bazon <mih...@ya...> + + * lang/calendar-ca.js: updated (thanks to David Valls) + +2004-03-17 Mihai Bazon <mih...@ya...> + + * lang/calendar-de.js: updated to UTF8 (thanks to Jack (tR)) + +2004-03-09 Mihai Bazon <mih...@ya...> + + * lang/calendar-bg.js: Bulgarian translation + +2004-03-08 Mihai Bazon <mih...@ya...> + + * lang/calendar-he-utf8.js: Hebrew translation (thanks to Idan Sofer) + + * lang/calendar-hu.js: updated (thanks to Istvan Karaszi) + +2004-02-27 Mihai Bazon <mih...@ya...> + + * lang/calendar-it.js: updated (thanks to Fabio Di Bernardini) + +2004-02-25 Mihai Bazon <mih...@ya...> + + * calendar.js: fix for Safari (thanks to Olivier Chirouze / XPWeb) + +2004-02-22 Mihai Bazon <mih...@ya...> + + * lang/calendar-al.js: Albanian language file + +2004-02-17 Mihai Bazon <mih...@ya...> + + * lang/calendar-fr.js: fixed + + * lang/calendar-fr.js: + FR translation updated (thanks to SIMON Alexandre) + + * lang/calendar-es.js: ES translation updated, thanks to David Gonzales + +2004-02-10 Mihai Bazon <mih...@ya...> + + * lang/calendar-pt.js: + updated Portugese translation, thanks to Elcio Ferreira + +2004-02-09 Mihai Bazon <mih...@ya...> + + * TODO: updated + +2004-02-06 Mihai Bazon <mih...@ya...> + + * README: describe the PHP files + + * make-release.pl: includes php files + + * make-release.pl: ChangeLog included in the distribution (if found) + + * calendar.js, doc/reference.tex, index.html: switched to version 0.9.6 + + * doc/Calendar.setup.tex, doc/reference.tex: updated documentation + + * release-notes.html: updated release notes + + * calendar.js: Fixed bug: Feb/29 and year change now keeps Feb in view + + * calendar.js: fixed the "ESC" problem (call the close handler) + + * calendar.js: fixed day of year range (1 to 366 instead of 0 to 365) + + * calendar.js: fixed week number calculations + + * doc/reference.tex: fixed (date input format) + + * calendar.php: removed comment + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js: + workaround for IE bug (you can't normally specify through CSS the style for + an element having two classes or more; we had to change a classname) + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + smaller fonts on days that are in neighbor months + +2004-02-04 Mihai Bazon <mih...@ya...> + + * index.html: first demo shows the "showOtherMonths" capability + + * calendar-setup.js: support new parameters in the calendar. + added: firstDay, showOthers, cache. + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js, lang/calendar-en.js, lang/calendar-ro.js: + new parameters: firstDayOfWeek, showsOtherMonths; removed mondayFirst. + This adds support for setting any day to be the first day of week (by just + clicking the day name in the display); also, if showsOtherMonths is enabled + then dates belonging to adjacent months that are in the current view will be + displayed and the calendar will have a fixed height. + + all themes updated. + + * test.php: test for calendar.php + + * calendar.php: fixed bug (pass numeric values as numbers) + +2004-02-01 Mihai Bazon <mih...@ya...> + + * calendar.php: added PHP wrapper + + * img.gif: icon updated + + * TODO: updated TODO list + +2004-01-27 Mihai Bazon <mih...@ya...> + + * calendar.js: + Janusz Piwowarski sent over a patch for IE5 compatibility which is much more + elegant than the atrocities that I had wrote :-D I'm gettin' old.. Thanks Janusz! + + * lang/calendar-fi.js: updated + +2004-01-15 Mihai Bazon <mih...@ya...> + + * TODO: updated TODO list + + * calendar-setup.js: default align changed to "Br" + + * doc/reference.tex: changed default value for "align" + + * calendar-setup.js: calling onchange event handler, if available + + * calendar-setup.js: added "position" option + + * simple-1.html: demonstrates "step" option + + * calendar-setup.js: added "step" option + + * calendar.js: added yearStep config parameter + + * calendar.js: + fixed parseDate routine (the NaN bug which occurred when there was a space + after the date and no time) + +2004-01-14 Mihai Bazon <mih...@ya...> + + * lang/calendar-en.js: added "Time:" + + * test-position.html: test for the new position algorithm + + * index.html: do not destroy() the calendar + avoid bug in parseDate (%p must be separated by non-word characters) + + * menuarrow2.gif: for calendar-blue2.css + + * calendar-setup.js: honor "date" parameter if passed + + * calendar.js: IE5 support is back + performance improvements in IE6 (mouseover combo boxes) + display "Time:" beside the clock area, if defined in the language file + new positioning algorithm (try to keep the calendar in page) + rewrote parseDate a little cleaner + + * lang/calendar-el.js: + updated Greek translation (thanks Alexandros Pappas) + +2004-01-13 Mihai Bazon <mih...@ya...> + + * index.html: added style blue2, using utf-8 instead of iso-8859-2 + + * calendar.js: performance under IE (which sucks, by the way) + + * doc/reference.tex: Sunny added to sponsor list + + * doc/Calendar.setup.tex: documenting parameter 'electric' + + * calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + fixed IE text size problems + +2004-01-08 Mihai Bazon <mih...@ya...> + + * lang/calendar-pl.js: + Polish translation updated to UTF-8 (thanks to Artur Filipiak) + +2004-01-07 Mihai Bazon <mih...@ya...> + + * lang/calendar-si.js: updated (David Milost) + + * lang/calendar-si.js: Slovenian translation (thanks to David Milost) + +2003-12-21 Mihai Bazon <mih...@ya...> + + * TODO: updated TODO list + + * lang/calendar-de.js: German translation (thanks to Peter Strotmann) + +2003-12-19 Mihai Bazon <mih...@ya...> + + * doc/reference.tex: Thank you, Ian Barrak + +2003-12-18 Mihai Bazon <mih...@ya...> + + * doc/reference.tex: fixed documentation bug (thanks Mike) + +2003-12-05 Mihai Bazon <mih...@ya...> + + * lang/calendar-ko-utf8.js: + UTF8 version of the Korean language (hopefully correct) + + * lang/calendar-pl-utf8.js, lang/calendar-pl.js: + updated Polish translation (thanks to Janusz Piwowarski) + +2003-12-04 Mihai Bazon <mih...@ya...> + + * lang/calendar-fr.js: + French translation updated (thanks to Angiras Rama) + +2003-11-22 Mihai Bazon <mih...@ya...> + + * lang/calendar-da.js: updated (thanks to Jesper M. Christensen) + +2003-11-20 Mihai Bazon <mih...@ya...> + + * calendar-blue2.css, calendar-tas.css: + new styles (thanks to Wendall Mosemann for blue2, Mark Lynch for tas) + + * lang/calendar-lt-utf8.js, lang/calendar-lt.js: + Lithuanian translation (thanks to Martynas Majeris) + + * lang/calendar-sp.js: updated + +2003-11-17 Mihai Bazon <mih...@ya...> + + * TODO: added TODO list + +2003-11-14 Mihai Bazon <mih...@ya...> + + * lang/calendar-ko.js: Korean translation (thanks to Yourim Yi) + +2003-11-12 Mihai Bazon <mih...@ya...> + + * lang/calendar-jp.js: small bug fixed (thanks to TAHARA Yusei) + +2003-11-10 Mihai Bazon <mih...@ya...> + + * lang/calendar-fr.js: translation updated, thanks to Florent Ramiere + + * calendar-setup.js: + added new parameter: electric (if false then the field will not get updated on each move) + + * index.html: fixed DOCTYPE + +2003-11-07 Mihai Bazon <mih...@ya...> + + * calendar-setup.js: + fixed minor problem (maybe we're passing object reference instead of ID for + the flat calendar parent) + +2003-11-06 Mihai Bazon <mih...@ya...> + + * lang/calendar-fi.js: + added Finnish translation (thanks to Antti Tuppurainen) + +2003-11-05 Mihai Bazon <mih...@ya...> + + * release-notes.html: fixed typo + + * doc/reference.tex, index.html, calendar.js: 0.9.5 + + * README: fixed license statement + + * release-notes.html: updated release notes (0.9.5) + +2003-11-03 Mihai Bazon <mih...@ya...> + + * lang/calendar-de.js: + updated German translation (thanks to Gerhard Neiner) + + * calendar-setup.js: fixed license statement + + * calendar.js: whitespace + + * calendar.js: fixed license statement + + * calendar.js: + fixed positioning problem when input field is inside scrolled divs + +2003-11-01 Mihai Bazon <mih...@ya...> + + * lang/calendar-af.js: Afrikaan language (thanks to Derick Olivier) + +2003-10-31 Mihai Bazon <mih...@ya...> + + * lang/calendar-it.js: + updated IT translation (thanks to Christian Blaser) + + * lang/calendar-es.js: updated ES translation, thanks to Raul + +2003-10-30 Mihai Bazon <mih...@ya...> + + * lang/calendar-hu.js: updated thanks to Istvan Karaszi + + * index.html, simple-1.html, simple-2.html, simple-3.html: + switched to utf-8 all encodings + + * lang/calendar-sk.js: + added Slovak translation (thanks to Peter Valach) + + * lang/calendar-ro.js: switched to utf-8 + +2003-10-29 Mihai Bazon <mih...@ya...> + + * lang/calendar-es.js: + updated translation, thanks to Jose Ma. Martinez Miralles + + * doc/reference.tex: + fixed the footnote problem (thanks Dominique de Waleffe for the tip) + + * lang/calendar-ro.js: fixed typo + + * lang/calendar-sv.js: oops, license should be LGPL + + * lang/calendar-sw.js: new swedish translation is calendar-sv.js + + * menuarrow.gif, menuarrow.png: + oops, forgot little drop-down menu arrows + + * lang/calendar-sv.js: swedish translation thanks to Leonard Norrgard + + * index.html: oops, some other minor changes + + * index.html, release-notes.html: + latest changes in release-notes and index page for 0.9.4 + + * doc/reference.tex, calendar.js: + added %s date format (# of seconds since Epoch) + + * calendar.js: + A click on TODAY will not close the calendar, even in single-click mode + +2003-10-28 Mihai Bazon <mih...@ya...> + + * index.html: previous cal.html + + * cal.html: moved to index.html + + * README, cal.html, doc/reference.tex, lang/calendar-de.js, lang/calendar-en.js, lang/calendar-ro.js, release-notes.html: + LGPL license, forever. + + * doc/Calendar.setup.tex, simple-1.html: + doc updated for the onUpdate parameter to Calendar.setup + +2003-10-26 Mihai Bazon <mih...@ya...> + + * calendar.js: fixed bug (correct display of the dropdown menus) + + * doc/Calendar.setup.tex, doc/reference.tex, lang/calendar-de.js, lang/calendar-en.js, lang/calendar-ro.js, README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-setup.js, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js, release-notes.html, simple-1.html, simple-3.html: + lots of changes for the 0.9.4 release (see the release-notes.html) + +2003-10-15 Mihai Bazon <mih...@ya...> + + * doc/reference.tex: + documentation updated for 0.9.4 (not yet finished though) + +2003-10-07 Mihai Bazon <mih...@ya...> + + * calendar.js, doc/reference.tex, release-notes.html, README, cal.html, calendar-setup.js: + modified project website + +2003-10-06 Mihai Bazon <mih...@ya...> + + * calendar-setup.js: + added some properties (onSelect, onClose, date) (thanks altblue) + +2003-09-24 Mihai Bazon <mih...@ya...> + + * simple-3.html: dateIsSpecial does not need the "date" argument ;-) + +2003-09-24 fsoft <fsoft@mishoo> + + * calendar.js, simple-3.html: + added year, month, day to getDateStatus() function + +2003-09-24 Mihai Bazon <mih...@ya...> + + * simple-3.html: example on how to use special dates + + * calendar-setup.js, calendar.js, simple-1.html: + support for special dates (thanks fabio) + +2003-09-17 Mihai Bazon <mih...@ya...> + + * doc/reference.tex: fixed error in section 3. + +2003-08-01 Mihai Bazon <mih...@ya...> + + * lang/calendar-jp.js: added Japanese translation + +2003-07-16 Mihai Bazon <mih...@ya...> + + * simple-1.html: fixed problem with first example [IE,Opera] + +2003-07-09 Mihai Bazon <mih...@ya...> + + * doc/Calendar.setup.tex: fixed typo (closing parenthesis) + + * lang/calendar-de.js: + added German translation, thanks to Hartwig Weinkauf + +2003-07-08 Mihai Bazon <mih...@ya...> + + * cal.html: added link to release-notes + + * release-notes.html: 0.9.3 release notes + + * make-release.pl: + Script to create distribution archive. It needs some additional packages: + + - LaTeX + - tex2page + - jscrunch (JS compressor) + + * doc/html/makedoc.sh, doc/html/reference.css, doc/reference.tex, doc/makedoc.sh: + documentation updates... + + * calendar.js: added semicolon to make the code "compressible" + +2003-07-06 Mihai Bazon <mih...@ya...> + + * doc/reference.tex: spell checked + + * doc/reference.tex: [minor] changed credits order + + * doc/reference.tex: various improvements and additions + + * doc/html/reference.css: minor eye-candy tweaks + +2003-07-05 Mihai Bazon <mih...@ya...> + + * doc/html/Calendar.setup.html.tex, doc/html/makedoc.sh, doc/html/reference.css, doc/html/reference.t2p, doc/hyperref.cfg, doc/makedoc.sh, doc/reference.tex, doc/Calendar.setup.tex, doc/Calendar.setup.pdf.tex: + full documentation in LaTeX, for PDF and HTML formats + + * simple-2.html: + added demonstration of flat calendar with Calendar.setup + + * simple-1.html: + modified some links, added link to documentation, added demonstration of + disableFunc property + + * calendar-setup.js: added the ability to create flat calendar too + + * cal.html: added links to documentation and simple-[12].html pages + + * README: up-to-date... + + * calendar-setup.html: removed: the documentation is unified + +2003-07-03 Mihai Bazon <mih...@ya...> + + * cal.html: some links to newly added files + + * calendar-setup.html, calendar-setup.js, img.gif, simple-1.html: + added some files to simplify calendar creation for non-(JS)-programmers + + * lang/calendar-zh.js: added simplified chinese (thanks ATang) + +2003-07-02 Mihai Bazon <mih...@ya...> + + * calendar.js: * "yy"-related... [small fix] + + * calendar.js: + * #721833 fixed (yy format will understand years prior to 29 as 20xx) + + * calendar.js: * added refresh() function + + * calendar.js: * fixed bug when in single click mode + * added alignment options to "showAtElement" member function + +2003-06-25 Mihai Bazon <mih...@ya...> + + * lang/calendar-pt.js: + added portugese translation (thanks Nuno Barreto) + +2003-06-24 Mihai Bazon <mih...@ya...> + + * calendar.js: + call user handler when the date was changed using the keyboard + + * bugtest-hidden-selects.html: + file to test bug with hidden select-s (thanks Ying Zhang for reporting and for this test file) + + * lang/calendar-hr-utf8.js: + added croatian translation in utf8 (thanks Krunoslav Zubrinic) + +2003-06-23 Mihai Bazon <mih...@ya...> + + * lang/calendar-hu.js: added hungarian translation + + * lang/calendar-hr.js: + added croatian translation (thanks to Krunoslav Zubrinic) + +2003-06-22 Mihai Bazon <mih...@ya...> + + * calendar.js: + * #723335 fixed (clicking TODAY will not select the today date if the + disabledHandler rejects it) + + * cal.html: * new code for to work with fix for bug #703238 + * switch to new version + + * calendar.js: + * some patches to make code compatible with Opera 7 (well, almost compatible) + * bug #703238 fixed (fix breaks compatibility with older code that uses + calendar in single-click mode) + * bug #703814 fixed + +2003-04-09 Mihai Bazon <mih...@ya...> + + * lang/calendar-tr.js: added turkish lang file + +2003-03-19 Mihai Bazon <mih...@ya...> + + * lang/calendar-ru.js: russian translation added + + * lang/calendar-no.js: norwegian translation added + +2003-03-15 Mihai Bazon <mih...@ya...> + + * lang/calendar-no.js: norwegian translation + +2003-03-12 Mihai Bazon <mih...@ya...> + + * lang/calendar-pl.js: added polish translation + +2003-03-11 Mihai Bazon <mih...@ya...> + + * calendar.js: + bugfix in parseDate (added base to parseInt, thanks Alan!) + +2003-03-05 Mihai Bazon <mih...@ya...> + + * calendar.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-du.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-nl.js, lang/calendar-ro.js, lang/calendar-sp.js, lang/calendar-sw.js: + New file. + + * calendar.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-du.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-nl.js, lang/calendar-ro.js, lang/calendar-sp.js, lang/calendar-sw.js: + moved to CVS at sourceforge.net + release: 0.9.2 + new language packs + + + * README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + New file. + + * README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css: + moved to CVS at sourceforge.net + release: 0.9.2 + new language packs + + Added: trunk/drawbridge/WebContent/calendar/README =================================================================== --- trunk/drawbridge/WebContent/calendar/README (rev 0) +++ trunk/drawbridge/WebContent/calendar/README 2008-11-11 03:54:43 UTC (rev 52) @@ -0,0 +1,33 @@ +The DHTML Calendar +------------------- + + Author: Mihai Bazon, <mih...@ya...> + http://dynarch.com/mishoo/ + + This program is free software published under the + terms of the GNU Lesser General Public License. + + For the entire license text please refer to + http://www.gnu.org/licenses/lgpl.html + +Contents +--------- + + calendar.js -- the main program file + lang/*.js -- internalization files + *.css -- color themes + cal.html -- example usage file + doc/ -- documentation, in PDF and HTML + simple-1.html -- quick setup examples [popup calendars] + simple-2.html -- quick setup example for flat calendar + calendar.php -- PHP wrapper + test.php -- test file for the PHP wrapper + +Homepage +--------- + + For details and latest versions please refer to calendar + homepage, located on my website: + + http://dynarch.com/mishoo/calendar.epl + Added: trunk/drawbridge/WebContent/calendar/calendar-blue.css =================================================================== --- trunk/drawbridge/WebContent/calendar/calendar-blue.css (rev 0) +++ trunk/drawbridge/WebContent/calendar/calendar-blue.css 2008-11-11 03:54:43 UTC (rev 52) @@ -0,0 +1,232 @@ +/* The main calendar widget. DIV containing a table. */ + +div.calendar { position: relative; } + +.calendar, .calendar table { + border: 1px solid #556; + font-size: 11px; + color: #000; + cursor: default; + background: #eef; + font-family: tahoma,verdana,sans-serif; +} + +/* Header part -- contains navigation buttons and day names. */ + +.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ +} + +.calendar .nav { + background: #778 url(menuarrow.gif) no-repeat 100% 100%; +} + +.calendar thead .title { /* This holds the current "month, year" */ + font-weight: bold; /* Pressing it will take you to the current date */ + text-align: center; + background: #fff; + color: #000; + padding: 2px; +} + +.calendar thead .headrow { /* Row <TR> containing navigation buttons */ + background: #778; + color: #fff; +} + +.calendar thead .daynames { /* Row <TR> containing the day names */ + background: #bdf; +} + +.calendar thead .name { /* Cells <TD> containing the day names */ + border-bottom: 1px solid #556; + padding: 2px; + text-align: center; + color: #000; +} + +.calendar thead .weekend { /* How a weekend day name shows in header */ + color: #a66; +} + +.calendar thead .hilite { /* How do the buttons in header appear when hover */ + background-color: #aaf; + color: #000; + border: 1px solid #04f; + padding: 1px; +} + +.calendar thead .active { /* Active (pressed) buttons in header */ + background-color: #77c; + padding: 2px 0px 0px 2px; +} + +/* The body part -- contains all the days in month. */ + +.calendar tbody .day { /* Cells <TD> containing month days dates */ + width: 2em; + color: #456; + text-align: right; + padding: 2px 4px 2px 2px; +} +.calendar tbody .day.othermonth { + font-size: 80%; + color: #bbb; +} +.calendar tbody .day.othermonth.oweekend { + color: #fbb; +} + +.calendar table .wn { + padding: 2px 3px 2px 2px; + border-right: 1px solid #000; + background: #bdf; +} + +.calendar tbody .rowhilite td { + background: #def; +} + +.calendar tbody .rowhilite td.wn { + background: #eef; +} + +.calendar tbody td.hilite { /* Hovered cells <TD> */ + background: #def; + padding: 1px 3px 1px 1px; + border: 1px solid #bbb; +} + +.calendar tbody td.active { /* Active (pressed) cells <TD> */ + background: #cde; + padding: 2px 2px 0px 2px; +} + +.calendar tbody td.selected { /* Cell showing today date */ + font-weight: bold; + border: 1px solid #000; + padding: 1px 3px 1px 1px; + background: #fff; + color: #000; +} + +.calendar tbody td.weekend { /* Cells showing weekend days */ + color: #a66; +} + +.calendar tbody td.today { /* Cell showing selected date */ + font-weight: bold; + color: #00f; +} + +.calendar tbody .disabled { color: #999; } + +.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ + visibility: hidden; +} + +.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ + display: none; +} + +/* The footer part -- status bar and "Close" button */ + +.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */ + text-align: center; + background: #556; + color: #fff; +} + +.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */ + background: #fff; + color: #445; + border-top: 1px solid #556; + padding: 1px; +} + +.calendar tfoot .hilite { /* Hover style for buttons in footer */ + background: #aaf; + border: 1px solid #04f; + color: #000; + padding: 1px; +} + +.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ + background: #77c; + padding: 2px 0px 0px 2px; +} + +/* Combo boxes (menus that display months/years for direct selection) */ + +.calendar .combo { + position: absolute; + display: none; + top: 0px; + left: 0px; + width: 4em; + cursor: default; + border: 1px solid #655; + background: #def; + color: #000; + font-size: 90%; + z-index: 100; +} + +.calendar .combo .label, +.calendar .combo .label-IEfix { + text-align: center; + padding: 1px; +} + +.calendar .combo .label-IEfix { + width: 4em; +} + +.calendar .combo .hilite { + background: #acf; +} + +.calendar .combo .active { + border-top: 1px solid #46a; + border-bottom: 1px solid #46a; + background: #eef; + font-weight: bold; +} + +.calendar td.time { + border-top: 1px solid #000; + padding: 1px 0px; + text-align: center; + background-color: #f4f0e8; +} + +.calendar td.time .hour, +.calendar td.time .minute, +.calendar td.time .ampm { + padding: 0px 3px 0px 4px; + border: 1px solid #889; + font-weight: bold; + background-color: #fff; +} + +.calendar td.time .ampm { + text-align: center; +} + +.calendar td.time .colon { + padding: 0px 2px 0px 3px; + font-weight: bold; +} + +.calendar td.time span.hilite { + border-color: #000; + background-color: #667; + color: #fff; +} + +.calendar td.time span.active { + border-color: #f00; + background-color: #000; + color: #0f0; +} Added: trunk/drawbridge/WebContent/calendar/calendar-setup_stripped.js =================================================================== --- trunk/drawbridge/WebContent/calendar/calendar-setup_stripped.js (rev 0) +++ trunk/drawbridge/WebContent/calendar/calendar-setup_stripped.js 2008-11-11 03:54:43 UTC (rev 52) @@ -0,0 +1,21 @@ +/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/ + * --------------------------------------------------------------------------- + * + * The DHTML Calendar + * + * Details and latest version at: + * http://dynarch.com/mishoo/calendar.epl + * + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html + * + * This file defines helper functions for setting up the calendar. They are + * intended to help non-programmers get a working calendar on their site + * quickly. This script should not be seen as part of the calendar. It just + * shows you what one can do with the calendar, while in the same time + * providing a quick and simple method for setting it up. If you need + * exhaustive customization of the calendar creation process feel free to + * modify this code to suit your needs (this is recommended and much better + * than modifying calendar.js itself). + */ + Calendar.setup=function(params){function param_default(pname,def){if(typeof params[pname]=="undefined"){params[pname]=def;}};param_default("inputField",null);param_default("displayArea",null);param_default("button",null);param_default("eventName","click");param_default("ifFormat","%Y/%m/%d");param_default("daFormat","%Y/%m/%d");param_default("singleClick",true);param_default("disableFunc",null);param_default("dateStatusFunc",params["disableFunc"]);param_default("dateText",null);param_default("firstDay",null);param_default("align","Br");param_default("range",[1900,2999]);param_default("weekNumbers",true);param_default("flat",null);param_default("flatCallback",null);param_default("onSelect",null);param_default("onClose",null);param_default("onUpdate",null);param_default("date",null);param_default("showsTime",false);param_default("timeFormat","24");param_default("electric",true);param_default("step",2);param_default("position",null);param_default("cache",false);param_default("showOthers",false);param_default("multiple",null);var tmp=["inputField","displayArea","button"];for(var i in tmp){if(typeof params[tmp[i]]=="string"){params[tmp[i]]=document.getElementById(params[tmp[i]]);}}if(!(params.flat||params.multiple||params.inputField||params.displayArea||params.button)){alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");return false;}function onSelect(cal){var p=cal.params;var update=(cal.dateClicked||p.electric);if(update&&p.inputField){p.inputField.value=cal.date.print(p.ifFormat);if(typeof p.inputField.onchange=="function")p.inputField.onchange();}if(update&&p.displayArea)p.displayArea.innerHTML=cal.date.print(p.daFormat);if(update&&typeof p.onUpdate=="function")p.onUpdate(cal);if(update&&p.flat){if(typeof p.flatCallback=="function")p.flatCallback(cal);}if(update&&p.singleClick&&cal.dateClicked)cal.callCloseHandler();};if(params.flat!=null){if(typeof params.flat=="string")params.flat=document.getElementById(params.flat);if(!params.flat){alert("Calendar.setup:\n Flat specified but can't find parent.");return false;}var cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect);cal.showsOtherMonths=params.showOthers;cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.params=params;cal.weekNumbers=params.weekNumbers;cal.setRange(params.range[0],params.range[1]);cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;if(params.ifFormat){cal.setDateFormat(params.ifFormat);}if(params.inputField&&typeof params.inputField.value=="string"){cal.parseDate(params.inputField.value);}cal.create(params.flat);cal.show();return false;}var triggerEl=params.button||params.displayArea||params.inputField;triggerEl["on"+params.eventName]=function(){var dateEl=params.inputField||params.displayArea;var dateFmt=params.inputField?params.ifFormat:params.daFormat;var mustCreate=false;var cal=window.calendar;if(dateEl)params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,dateFmt);if(!(cal&¶ms.cache)){window.calendar=cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal){cal.hide();});cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.weekNumbers=params.weekNumbers;mustCreate=true;}else{if(params.date)cal.setDate(params.date);cal.hide();}if(params.multiple){cal.multiple={};for(var i=params.multiple.length;--i>=0;){var d=params.multiple[i];var ds=d.print("%Y%m%d");cal.multiple[ds]=d;}}cal.showsOtherMonths=params.showOthers;cal.yearStep=params.step;cal.setRange(params.range[0],params.range[1]);cal.params=params;cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;cal.setDateFormat(dateFmt);if(mustCreate)cal.create();cal.refresh();if(!params.position)cal.showAtElement(params.button||params.displayArea||params.inputField,params.align);else cal.showAt(params.position[0],params.position[1]);return false;};return cal;}; \ No newline at end of file Added: trunk/drawbridge/WebContent/calendar/calendar_stripped.js =================================================================== --- trunk/drawbridge/WebContent/calendar/calendar_stripped.js (rev 0) +++ trunk/drawbridge/WebContent/calendar/calendar_stripped.js 2008-11-11 03:54:43 UTC (rev 52) @@ -0,0 +1,14 @@ +/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo + * ----------------------------------------------------------- + * + * The DHTML Calendar, version 1.0 "It is happening again" + * + * Details and latest version at: + * www.dynarch.com/projects/calendar + * + * This script is developed by Dynarch.com. Visit us at www.dynarch.com. + * + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html + */ + Calendar=function(firstDayOfWeek,dateStr,onSelected,onClose){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.getDateToolTip=null;this.getDateText=null;this.timeout=null;this.onSelected=onSelected||null;this.onClose=onClose||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=Calendar._TT["DEF_DATE_FORMAT"];this.ttDateFormat=Calendar._TT["TT_DATE_FORMAT"];this.isPopup=true;this.weekNumbers=true;this.firstDayOfWeek=typeof firstDayOfWeek=="number"?firstDayOfWeek:Calendar._FD;this.showsOtherMonths=false;this.dateStr=dateStr;this.ar_days=null;this.showsTime=false;this.time24=true;this.yearStep=2;this.hiliteToday=true;this.multiple=null;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof Calendar._SDN=="undefined"){if(typeof Calendar._SDN_len=="undefined")Calendar._SDN_len=3;var ar=new Array();for(var i=8;i>0;){ar[--i]=Calendar._DN[i].substr(0,Calendar._SDN_len);}Calendar._SDN=ar;if(typeof Calendar._SMN_len=="undefined")Calendar._SMN_len=3;ar=new Array();for(var i=12;i>0;){ar[--i]=Calendar._MN[i].substr(0,Calendar._SMN_len);}Calendar._SMN=ar;}};Calendar._C=null;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_ie5=(Calendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.getAbsolutePos=function(el){var SL=0,ST=0;var is_div=/^div$/i.test(el.tagName);if(is_div&&el.scrollLeft)SL=el.scrollLeft;if(is_div&&el.scrollTop)ST=el.scrollTop;var r={x:el.offsetLeft-SL,y:el.offsetTop-ST};if(el.offsetParent){var tmp=this.getAbsolutePos(el.offsetParent);r.x+=tmp.x;r.y+=tmp.y;}return r;};Calendar.isRelated=function(el,evt){var related=evt.relatedTarget;if(!related){var type=evt.type;if(type=="mouseover"){related=evt.fromElement;}else if(type=="mouseout"){related=evt.toElement;}}while(related){if(related==el){return true;}related=related.parentNode;}return false;};Calendar.removeClass=function(el,className){if(!(el&&el.className)){return;}var cls=el.className.split(" ");var ar=new Array();for(var i=cls.length;i>0;){if(cls[--i]!=className){ar[ar.length]=cls[i];}}el.className=ar.join(" ");};Calendar.addClass=function(el,className){Calendar.removeClass(el,className);el.className+=" "+className;};Calendar.getElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.currentTarget;while(f.nodeType!=1||/^div$/i.test(f.tagName))f=f.parentNode;return f;};Calendar.getTargetElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.target;while(f.nodeType!=1)f=f.parentNode;return f;};Calendar.stopEvent=function(ev){ev||(ev=window.event);if(Calendar.is_ie){ev.cancelBu... [truncated message content] |
From: <bla...@us...> - 2008-10-11 01:48:47
|
Revision: 51 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=51&view=rev Author: blamonica Date: 2008-10-11 01:48:39 +0000 (Sat, 11 Oct 2008) Log Message: ----------- Implement Quartz Scheduling of Jobs Modified Paths: -------------- trunk/drawbridge/.settings/org.springframework.ide.eclipse.core.prefs trunk/drawbridge/.springBeans trunk/drawbridge/WebContent/WEB-INF/classes/drawbridge.properties trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml trunk/drawbridge/WebContent/WEB-INF/web.xml trunk/drawbridge/src/java/drawbridge-core-spring.xml trunk/drawbridge/src/java/drawbridge-env-spring.xml trunk/drawbridge/src/java/net/sf/drawbridge/dao/JobDao.java trunk/drawbridge/src/java/net/sf/drawbridge/exec/JobExecuter.java trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java trunk/drawbridge/src/java/net/sf/drawbridge/util/StringPropertiesConverter.java trunk/drawbridge/src/sql/create_drawbridge_schema.sql trunk/drawbridge/src/sql/example_data.sql trunk/drawbridge/src/test/db.script trunk/drawbridge/src/test/drawbridge.properties trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoaderTest.java Added Paths: ----------- trunk/drawbridge/src/java/beanRefFactory.xml trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java trunk/drawbridge/src/java/net/sf/drawbridge/sched/drawbridge-quartz-spring.xml trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java Removed Paths: ------------- trunk/drawbridge/src/java/net/sf/drawbridge/sched/HeartBeatJob.java Modified: trunk/drawbridge/.settings/org.springframework.ide.eclipse.core.prefs =================================================================== --- trunk/drawbridge/.settings/org.springframework.ide.eclipse.core.prefs 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/.settings/org.springframework.ide.eclipse.core.prefs 2008-10-11 01:48:39 UTC (rev 51) @@ -1,9 +1,10 @@ -#Tue Mar 11 20:22:15 CDT 2008 +#Thu Oct 09 12:37:40 CDT 2008 eclipse.preferences.version=1 org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true +org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=false org.springframework.ide.eclipse.core.enable.project.preferences=false org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=true +org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=false org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true @@ -17,7 +18,7 @@ org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=false org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true Modified: trunk/drawbridge/.springBeans =================================================================== --- trunk/drawbridge/.springBeans 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/.springBeans 2008-10-11 01:48:39 UTC (rev 51) @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <beansProjectDescription> <version>1</version> - <pluginVersion><![CDATA[2.0.3.v200802061800]]></pluginVersion> + <pluginVersion><![CDATA[2.2.0.v200809261800]]></pluginVersion> <configSuffixes> <configSuffix><![CDATA[xml]]></configSuffix> </configSuffixes> @@ -12,6 +12,8 @@ <config>src/java/net/sf/drawbridge/dao/drawbridge-dao-spring.xml</config> <config>src/test/drawbridge-test-spring.xml</config> <config>WebContent/WEB-INF/drawbridge-servlet.xml</config> + <config>src/java/net/sf/drawbridge/sched/drawbridge-quartz-spring.xml</config> + <config>src/java/beanRefFactory.xml</config> </configs> <configSets> </configSets> Modified: trunk/drawbridge/WebContent/WEB-INF/classes/drawbridge.properties =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/classes/drawbridge.properties 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/WebContent/WEB-INF/classes/drawbridge.properties 2008-10-11 01:48:39 UTC (rev 51) @@ -1,2 +1,5 @@ drawbridge.hibernate.dialect=org.hibernate.dialect.MySQLDialect -drawbridge.hibernate.show_sql=true \ No newline at end of file +drawbridge.hibernate.show_sql=true +#drawbridge.quartz.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate +drawbridge.quartz.driverDelegateClass=org.quartz.impl.jdbcjobstore.HSQLDBDelegate +drawbridge.quartz.selectWithLockSQL=SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE \ No newline at end of file Modified: trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml 2008-10-11 01:48:39 UTC (rev 51) @@ -6,10 +6,7 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> - <import resource="classpath:drawbridge-core-spring.xml"/> - <import resource="classpath:drawbridge-env-spring.xml"/> <context:component-scan base-package="net.sf.drawbridge.controller"/> - <context:property-placeholder location="classpath:drawbridge.properties"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> Modified: trunk/drawbridge/WebContent/WEB-INF/web.xml =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/web.xml 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/WebContent/WEB-INF/web.xml 2008-10-11 01:48:39 UTC (rev 51) @@ -6,6 +6,16 @@ <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/drawbridge-servlet.xml</param-value> </context-param> + + <context-param> + <param-name>locatorFactorySelector</param-name> + <param-value>classpath*:beanRefFactory.xml</param-value> + </context-param> + + <context-param> + <param-name>parentContextKey</param-name> + <param-value>drawbridge</param-value> + </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> Added: trunk/drawbridge/src/java/beanRefFactory.xml =================================================================== --- trunk/drawbridge/src/java/beanRefFactory.xml (rev 0) +++ trunk/drawbridge/src/java/beanRefFactory.xml 2008-10-11 01:48:39 UTC (rev 51) @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> + +<beans> + + <bean id="drawbridge" class="org.springframework.context.support.ClassPathXmlApplicationContext"> + <constructor-arg> + <list> + <value>drawbridge-core-spring.xml</value> + <value>drawbridge-env-spring.xml</value> + </list> + </constructor-arg> + </bean> + +</beans> \ No newline at end of file Modified: trunk/drawbridge/src/java/drawbridge-core-spring.xml =================================================================== --- trunk/drawbridge/src/java/drawbridge-core-spring.xml 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/java/drawbridge-core-spring.xml 2008-10-11 01:48:39 UTC (rev 51) @@ -3,7 +3,8 @@ <beans> <import resource="net/sf/drawbridge/dao/drawbridge-dao-spring.xml"/> - + <import resource="net/sf/drawbridge/sched/drawbridge-quartz-spring.xml"/> + <bean id="DrawbridgeService" class="net.sf.drawbridge.domain.SecureDrawbridgeService"> <constructor-arg> <bean id="DefaultDrawbridgeService" class="net.sf.drawbridge.domain.DefaultDrawbridgeService"> @@ -23,18 +24,6 @@ <bean id="SecurityService" class="net.sf.drawbridge.security.DefaultSecurityService"/> - <bean id="Scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> - <property name="autoStartup" value="true"/> - <property name="globalJobListeners"> - <list></list> - </property> - <property name="overwriteExistingJobs" value="true"/> - </bean> - - <bean id="ScheduleLoader" class="net.sf.drawbridge.sched.QuartzDrawbridgeScheduleLoader"> - <constructor-arg ref="Scheduler"/> - </bean> - <bean id="QueryParser" class="net.sf.drawbridge.exec.DefaultQueryParser"/> <bean id="JobExecuter" class="net.sf.drawbridge.exec.DefaultJobExecuter"/> Modified: trunk/drawbridge/src/java/drawbridge-env-spring.xml =================================================================== --- trunk/drawbridge/src/java/drawbridge-env-spring.xml 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/java/drawbridge-env-spring.xml 2008-10-11 01:48:39 UTC (rev 51) @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:p="http://www.springframework.org/schema/p" + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> -<beans> + <context:property-placeholder location="classpath:drawbridge.properties"/> + <bean id="DataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:/comp/env/jdbc/DrawbridgeDataSource"/> </bean> -</beans> +</beans> \ No newline at end of file Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/JobDao.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/JobDao.java 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/JobDao.java 2008-10-11 01:48:39 UTC (rev 51) @@ -22,7 +22,8 @@ import net.sf.drawbridge.vo.Job; public interface JobDao extends Dao<Job, Long>{ - + public static final String BEAN_NAME = "JobDao"; + List<Job> getJobsForDatabase(Integer databaseId); } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/exec/JobExecuter.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/exec/JobExecuter.java 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/java/net/sf/drawbridge/exec/JobExecuter.java 2008-10-11 01:48:39 UTC (rev 51) @@ -26,6 +26,7 @@ import net.sf.drawbridge.vo.RunAsAccount; public interface JobExecuter { + public static final String BEAN_NAME="JobExecuter"; public List<Map<String, Object>> executeJob(Driver driver, Database database, RunAsAccount runAsAccount, String query, List<QueryParam> params) throws Exception; Added: trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/ExecuteQueryJob.java 2008-10-11 01:48:39 UTC (rev 51) @@ -0,0 +1,121 @@ +/* + * This file is part of DrawBridge. + * Copyright 2008 Ben La Monica + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. + */ +package net.sf.drawbridge.sched; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import net.sf.drawbridge.dao.JobDao; +import net.sf.drawbridge.exec.JobExecuter; +import net.sf.drawbridge.exec.handler.ResultHandler; +import net.sf.drawbridge.util.StringPropertiesConverter; +import net.sf.drawbridge.vo.Database; +import net.sf.drawbridge.vo.Driver; +import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.QueryParam; +import net.sf.drawbridge.vo.RunAsAccount; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.quartz.SchedulerException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.access.SingletonBeanFactoryLocator; + +public class ExecuteQueryJob implements org.quartz.Job { + + private static final Log log = LogFactory.getLog(ExecuteQueryJob.class); + + private JobExecuter executer; + + private JobDao jobDao; + + private StringPropertiesConverter propConverter; + + static BeanFactory factory; + + private static synchronized BeanFactory getFactory() { + if (factory == null) { + factory = SingletonBeanFactoryLocator.getInstance().useBeanFactory("drawbridge").getFactory(); + } + return factory; + } + + private static Object getBean(String name) { + Object bean = getFactory().getBean(name); + if (bean == null) { + throw new IllegalArgumentException("Unable to look up the bean with name: " + name); + } + + return bean; + } + + /** + * Default constructor, will retrieve necessary dependencies from the Spring context. + * NOTE: Do not use this constructor if you are using this within a spring config, or you will + * cause a circular dependency and it will throw an exception on startup. + */ + public ExecuteQueryJob() { + this((JobDao) getBean(JobDao.BEAN_NAME), + (JobExecuter) getBean(JobExecuter.BEAN_NAME), + (StringPropertiesConverter) getBean(StringPropertiesConverter.BEAN_NAME)); + } + + public ExecuteQueryJob(JobDao jobDao, JobExecuter executer, StringPropertiesConverter propConverter) { + this.jobDao = jobDao; + this.executer = executer; + this.propConverter = propConverter; + } + + public void execute(JobExecutionContext ctx) throws JobExecutionException { + Job job = jobDao.get(new Long(ctx.getJobDetail().getName())); + + if (job != null && job.isActive()) { + RunAsAccount runAs = job.getRunAsAccount(); + Database db = runAs.getDatabase(); + Driver driver = db.getDriver(); + String query = job.getQuery(); + ResultHandler handler = (ResultHandler) getBean(job.getHandler()); + String handlerParams = job.getHandlerParams(); + List<QueryParam> params = Collections.emptyList(); + try { + List<Map<String, Object>> results = executer.executeJob(driver, db, runAs, query, params); + handler.handleQuery(results, propConverter.convertToProperties(handlerParams)); + ctx.setResult(Boolean.TRUE); + } catch (Exception e) { + ctx.setResult(e); + log.error("Unable to run job #" + job.getId() + ": " + job.getName(), e); + } + } else { + // job either doesn't exist in the database or is inactive, so we should not have it in the scheduler + try { + if (log.isDebugEnabled()) { + log.debug("Attempting to remove job [" + ctx.getJobDetail() + "] from Scheduler."); + } + ctx.getScheduler().deleteJob(ctx.getJobDetail().getName(), ctx.getJobDetail().getGroup()); + } catch (SchedulerException e) { + if (log.isWarnEnabled()) { + log.warn("Unable to remove job from scheduler because of '" + e.getLocalizedMessage() + "'."); + } + } + } + } + +} Deleted: trunk/drawbridge/src/java/net/sf/drawbridge/sched/HeartBeatJob.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/HeartBeatJob.java 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/HeartBeatJob.java 2008-10-11 01:48:39 UTC (rev 51) @@ -1,34 +0,0 @@ -/* - * This file is part of DrawBridge. - * Copyright 2008 Adam Cresse - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. - */ -package net.sf.drawbridge.sched; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.quartz.Job; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; - -public class HeartBeatJob implements Job{ - - private static final Log log=LogFactory.getLog(HeartBeatJob.class); - - public void execute(JobExecutionContext ctx) throws JobExecutionException { - log.debug("Scheduler is still up and running."); - } - -} Modified: trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java 2008-10-11 01:48:39 UTC (rev 51) @@ -17,28 +17,74 @@ */ package net.sf.drawbridge.sched; +import java.util.List; + +import net.sf.drawbridge.dao.JobDao; +import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.Schedule; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.Trigger; public class QuartzDrawbridgeScheduleLoader implements DrawbridgeScheduleLoader { + + private static final Log log = LogFactory.getLog(QuartzDrawbridgeScheduleLoader.class); + private JobDao jobDao; + private Scheduler scheduler; - public QuartzDrawbridgeScheduleLoader(Scheduler scheduler) throws Exception{ + private Class<? extends org.quartz.Job> jobClass; + + public QuartzDrawbridgeScheduleLoader(Scheduler scheduler, JobDao jobDao) { + this(scheduler, jobDao, ExecuteQueryJob.class); + } + + public QuartzDrawbridgeScheduleLoader(Scheduler scheduler, JobDao jobDao, Class<? extends org.quartz.Job> jobClass) { this.scheduler=scheduler; - loadSchedule(); + this.jobDao = jobDao; + this.jobClass = jobClass; } public void loadSchedule() throws Exception{ - JobDetail jobDetail=new JobDetail("heartbeat","system",HeartBeatJob.class); - CronTrigger trigger = new CronTrigger("heartbeat-trigger", "system", "heartbeat", "system", "0/60 * * * * ?"); - try{ - //this is getting called twice because 2 contexts are being created after the context loader listener was added - //dwr needs the context loader listener - scheduler.scheduleJob(jobDetail,trigger); - } catch(Exception ex){ - ex.printStackTrace(); + List<Job> jobs = jobDao.getAll(); + + for (Job job : jobs) { + if (job.isActive()) { + if (log.isDebugEnabled()) { + log.debug("Scheduling Job #" + job.getId() + ": " + job.getName() + "."); + } + + String jobId = String.valueOf(job.getId()); + String jobGroupId = String.valueOf(job.getRunAsAccount().getId()); + JobDetail detail = new JobDetail(jobId, jobGroupId, jobClass); + detail.setDescription(job.getName()); + for (Schedule schedule : job.getSchedules()) { + Trigger trigger = new CronTrigger( + String.valueOf(schedule.getId()), // trigger id + jobId, // trigger group + jobId, // job id + jobGroupId, // job group id + schedule.getStartDate(), // start time + schedule.getStopDate(), // stop time + schedule.getSchedule()); // cron expression + + try { + scheduler.scheduleJob(detail, trigger); + } catch (SchedulerException e) { + log.error("Unable to schedule Job #" + job.getId() + ": " + job.getName() + ".", e); + } + } + } else { + if (log.isDebugEnabled()) { + log.debug("Job #" + job.getId() + ": " + job.getName() + " is not active, will not schedule."); + } + } } } Added: trunk/drawbridge/src/java/net/sf/drawbridge/sched/drawbridge-quartz-spring.xml =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/drawbridge-quartz-spring.xml (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/drawbridge-quartz-spring.xml 2008-10-11 01:48:39 UTC (rev 51) @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> + +<beans> + <bean id="Scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> + <property name="autoStartup" value="true"/> + <property name="dataSource" ref="DataSource"/> + <property name="quartzProperties"> + <props> + <prop key="org.quartz.jobStore.driverDelegateClass">${drawbridge.quartz.driverDelegateClass}</prop> + <prop key="org.quartz.jobStore.selectWithLockSQL">${drawbridge.quartz.selectWithLockSQL}</prop> + </props> + </property> + </bean> + + <bean id="ScheduleLoader" class="net.sf.drawbridge.sched.QuartzDrawbridgeScheduleLoader" init-method="loadSchedule"> + <constructor-arg ref="Scheduler"/> + <constructor-arg ref="JobDao"/> + </bean> +</beans> Modified: trunk/drawbridge/src/java/net/sf/drawbridge/util/StringPropertiesConverter.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/util/StringPropertiesConverter.java 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/java/net/sf/drawbridge/util/StringPropertiesConverter.java 2008-10-11 01:48:39 UTC (rev 51) @@ -3,7 +3,8 @@ import java.util.Properties; public interface StringPropertiesConverter { - + public static final String BEAN_NAME = "StringPropertiesConverter"; + public String convertToString(Properties properties); public Properties convertToProperties(String string) throws Exception; Modified: trunk/drawbridge/src/sql/create_drawbridge_schema.sql =================================================================== --- trunk/drawbridge/src/sql/create_drawbridge_schema.sql 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/sql/create_drawbridge_schema.sql 2008-10-11 01:48:39 UTC (rev 51) @@ -1,14 +1,15 @@ -DROP TABLE DB_USER; -DROP TABLE DB_GROUP; -DROP TABLE DB_USER_GROUP; -DROP TABLE DB_DRIVER; -DROP TABLE DB_DATABASE; -DROP TABLE DB_RUN_AS; -DROP TABLE DB_JOB; -DROP TABLE DB_PERMISSION_LIST; -DROP TABLE DB_SYSTEM_PERMISSION; -DROP TABLE DB_DATABASE_PERMISSION; -DROP TABLE DB_RUN_AS_PERMISSION; +DROP TABLE IF EXISTS DB_USER; +DROP TABLE IF EXISTS DB_GROUP; +DROP TABLE IF EXISTS DB_USER_GROUP; +DROP TABLE IF EXISTS DB_DRIVER; +DROP TABLE IF EXISTS DB_DATABASE; +DROP TABLE IF EXISTS DB_RUN_AS; +DROP TABLE IF EXISTS DB_SCHEDULE; +DROP TABLE IF EXISTS DB_JOB; +DROP TABLE IF EXISTS DB_PERMISSION_LIST; +DROP TABLE IF EXISTS DB_SYSTEM_PERMISSION; +DROP TABLE IF EXISTS DB_DATABASE_PERMISSION; +DROP TABLE IF EXISTS DB_RUN_AS_PERMISSION; CREATE TABLE DB_USER( ID INTEGER NOT NULL AUTO_INCREMENT, @@ -18,14 +19,14 @@ ACTIVE VARCHAR(1) NOT NULL DEFAULT 'Y', PRIMARY KEY (ID), CONSTRAINT UNQ_DB_USER UNIQUE (USER_NAME) -); +) TYPE=InnoDB; CREATE TABLE DB_GROUP( ID INTEGER NOT NULL AUTO_INCREMENT, GROUP_NAME VARCHAR(16) NOT NULL, PRIMARY KEY (ID), CONSTRAINT UNQ_DB_GROUP UNIQUE (GROUP_NAME) -); +) TYPE=InnoDB; CREATE TABLE DB_USER_GROUP( USER_ID INTEGER NOT NULL, @@ -33,7 +34,7 @@ PRIMARY KEY (USER_ID, GROUP_ID), CONSTRAINT FK_DB_USER_GROUP_DB_USER FOREIGN KEY FK_DB_USER_GROUP_DB_USER (USER_ID) REFERENCES DB_USER (ID) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_DB_USER_GROUP_DB_GROUP FOREIGN KEY FK_DB_USER_GROUP_DB_GROUP (GROUP_ID) REFERENCES DB_GROUP (ID) ON DELETE CASCADE ON UPDATE CASCADE -); +) TYPE=InnoDB; CREATE TABLE DB_DRIVER( ID INTEGER NOT NULL AUTO_INCREMENT, @@ -41,7 +42,7 @@ CLASS_NAME VARCHAR(128) NOT NULL, PRIMARY KEY (ID), CONSTRAINT UNQ_DB_DRIVER UNIQUE (NAME) -); +) TYPE=InnoDB; CREATE TABLE DB_DATABASE( ID INTEGER NOT NULL AUTO_INCREMENT, @@ -51,7 +52,7 @@ PRIMARY KEY (ID), CONSTRAINT FK_DB_DATABASE_DB_DRIVER FOREIGN KEY FK_DB_DATABASE_DB_DRIVER (DRIVER_ID) REFERENCES DB_DRIVER (ID), CONSTRAINT UNQ_DB_DATABASE UNIQUE (NAME) -); +) TYPE=InnoDB; CREATE TABLE DB_RUN_AS( ID INTEGER NOT NULL AUTO_INCREMENT, @@ -61,7 +62,7 @@ PRIMARY KEY (ID), CONSTRAINT FK_DB_RUN_AS_DB_DATABASE FOREIGN KEY FK_DB_RUN_AS_DB_DATABASE (DATABASE_ID) REFERENCES DB_DATABASE (ID), CONSTRAINT UNQ_DB_RUN_AS UNIQUE (USER_NAME, DATABASE_ID) -); +) TYPE=InnoDB; CREATE TABLE DB_JOB( ID INTEGER NOT NULL AUTO_INCREMENT, @@ -85,7 +86,7 @@ CONSTRAINT FK_DB_JOB_APPROVED_BY FOREIGN KEY FK_DB_JOB_APPROVED_BY (APPROVED_BY) REFERENCES DB_USER (ID), CONSTRAINT UNQ_DB_JOB UNIQUE (NAME), CONSTRAINT CHK_DB_JOB_ACTIVE CHECK ACTIVE IN ('Y','N') -); +) TYPE=InnoDB; CREATE TABLE DB_SCHEDULE( ID INTEGER NOT NULL AUTO_INCREMENT, @@ -96,7 +97,7 @@ VERSION INTEGER NOT NULL DEFAULT 0, PRIMARY KEY(ID), CONSTRAINT FK_DB_SCHEDULE_DB_JOB FOREIGN KEY FK_DB_SCHEDULE_DB_JOB (JOB_ID) REFERENCES DB_JOB(ID) -); +) TYPE=InnoDB; CREATE TABLE DB_PERMISSION_LIST( ID INTEGER NOT NULL, @@ -105,7 +106,7 @@ PRIMARY KEY (ID), CONSTRAINT UNQ_DB_PERMISSION UNIQUE (NAME, PERMISSION_TYPE), CONSTRAINT CHK_DB_PERMISSION_LIST_PERMISSION_TYPE CHECK PERMISSION_TYPE IN ('S','D','R') -); +) TYPE=InnoDB; CREATE TABLE DB_SYSTEM_PERMISSION( ID INTEGER NOT NULL AUTO_INCREMENT, @@ -115,7 +116,7 @@ CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_GROUP FOREIGN KEY FK_DB_SYSTEM_PERMISSION_DB_GROUP (GROUP_ID) REFERENCES DB_GROUP (ID) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY FK_DB_SYSTEM_PERMISSION_DB_PERMISSION_LIST (PERMISSION_ID) REFERENCES DB_PERMISSION_LIST (ID) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT UNQ_DB_SYSTEM_PERMISSION UNIQUE (GROUP_ID, PERMISSION_ID) -); +) TYPE=InnoDB; CREATE TABLE DB_DATABASE_PERMISSION( ID INTEGER NOT NULL AUTO_INCREMENT, @@ -127,7 +128,7 @@ CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_DATABASE FOREIGN KEY FK_DB_DATABASE_PERMISSION_DB_DATABASE (DATABASE_ID) REFERENCES DB_DATABASE (ID) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY FK_DB_DATABASE_PERMISSION_DB_PERMISSION_LIST (PERMISSION_ID) REFERENCES DB_PERMISSION_LIST (ID) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT UNQ_DB_GRAP UNIQUE (GROUP_ID, DATABASE_ID, PERMISSION_ID) -); +) TYPE=InnoDB; CREATE TABLE DB_RUN_AS_PERMISSION( ID INTEGER NOT NULL AUTO_INCREMENT, @@ -139,7 +140,7 @@ CONSTRAINT FK_DB_RUN_AS_PERMISSION_DB_RUN_AS FOREIGN KEY FK_DB_RUN_AS_PERMISSION_DB_RUN_AS (RUN_AS_ID) REFERENCES DB_RUN_AS (ID) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_DB_RUN_AS_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY FK_DB_RUN_AS_PERMISSION_DB_PERMISSION_LIST (PERMISSION_ID) REFERENCES DB_PERMISSION_LIST (ID) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT UNQ_DB_GRAP UNIQUE (GROUP_ID, RUN_AS_ID, PERMISSION_ID) -); +) TYPE=InnoDB; INSERT INTO DB_PERMISSION_LIST (ID, NAME, PERMISSION_TYPE) VALUES (1,'ADD USER','S'); INSERT INTO DB_PERMISSION_LIST (ID, NAME, PERMISSION_TYPE) VALUES (2,'EDIT USER','S'); @@ -179,4 +180,151 @@ INSERT INTO DB_PERMISSION_LIST (ID, NAME, PERMISSION_TYPE) VALUES (209,'DOES NOT REQUIRE APPROVAL FOR RUN-AS','R'); INSERT INTO DB_PERMISSION_LIST (ID, NAME, PERMISSION_TYPE) VALUES (210,'GRANT PERMISSIONS FOR RUN-AS','R'); -COMMIT; \ No newline at end of file +COMMIT; + +DROP TABLE IF EXISTS QRTZ_JOB_LISTENERS; +DROP TABLE IF EXISTS QRTZ_TRIGGER_LISTENERS; +DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; +DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; +DROP TABLE IF EXISTS QRTZ_LOCKS; +DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; +DROP TABLE IF EXISTS QRTZ_CALENDARS; + +CREATE TABLE QRTZ_JOB_DETAILS( +JOB_NAME VARCHAR(200) NOT NULL, +JOB_GROUP VARCHAR(200) NOT NULL, +DESCRIPTION VARCHAR(250) NULL, +JOB_CLASS_NAME VARCHAR(250) NOT NULL, +IS_DURABLE VARCHAR(1) NOT NULL, +IS_VOLATILE VARCHAR(1) NOT NULL, +IS_STATEFUL VARCHAR(1) NOT NULL, +REQUESTS_RECOVERY VARCHAR(1) NOT NULL, +JOB_DATA BLOB NULL, +PRIMARY KEY (JOB_NAME,JOB_GROUP)) +TYPE=InnoDB; + +CREATE TABLE QRTZ_JOB_LISTENERS ( +JOB_NAME VARCHAR(200) NOT NULL, +JOB_GROUP VARCHAR(200) NOT NULL, +JOB_LISTENER VARCHAR(200) NOT NULL, +PRIMARY KEY (JOB_NAME,JOB_GROUP,JOB_LISTENER), +INDEX (JOB_NAME, JOB_GROUP), +FOREIGN KEY (JOB_NAME,JOB_GROUP) +REFERENCES QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)) +TYPE=InnoDB; + +CREATE TABLE QRTZ_TRIGGERS ( +TRIGGER_NAME VARCHAR(200) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +JOB_NAME VARCHAR(200) NOT NULL, +JOB_GROUP VARCHAR(200) NOT NULL, +IS_VOLATILE VARCHAR(1) NOT NULL, +DESCRIPTION VARCHAR(250) NULL, +NEXT_FIRE_TIME BIGINT(13) NULL, +PREV_FIRE_TIME BIGINT(13) NULL, +PRIORITY INTEGER NULL, +TRIGGER_STATE VARCHAR(16) NOT NULL, +TRIGGER_TYPE VARCHAR(8) NOT NULL, +START_TIME BIGINT(13) NOT NULL, +END_TIME BIGINT(13) NULL, +CALENDAR_NAME VARCHAR(200) NULL, +MISFIRE_INSTR SMALLINT(2) NULL, +JOB_DATA BLOB NULL, +PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), +INDEX (JOB_NAME, JOB_GROUP), +FOREIGN KEY (JOB_NAME,JOB_GROUP) +REFERENCES QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)) +TYPE=InnoDB; + +CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( +TRIGGER_NAME VARCHAR(200) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +REPEAT_COUNT BIGINT(7) NOT NULL, +REPEAT_INTERVAL BIGINT(12) NOT NULL, +TIMES_TRIGGERED BIGINT(7) NOT NULL, +PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), +INDEX (TRIGGER_NAME, TRIGGER_GROUP), +FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) +REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +TYPE=InnoDB; + +CREATE TABLE QRTZ_CRON_TRIGGERS ( +TRIGGER_NAME VARCHAR(200) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +CRON_EXPRESSION VARCHAR(120) NOT NULL, +TIME_ZONE_ID VARCHAR(80), +PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), +INDEX (TRIGGER_NAME, TRIGGER_GROUP), +FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) +REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +TYPE=InnoDB; + +CREATE TABLE QRTZ_BLOB_TRIGGERS ( +TRIGGER_NAME VARCHAR(200) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +BLOB_DATA BLOB NULL, +PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), +INDEX (TRIGGER_NAME, TRIGGER_GROUP), +FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) +REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +TYPE=InnoDB; + +CREATE TABLE QRTZ_TRIGGER_LISTENERS ( +TRIGGER_NAME VARCHAR(200) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +TRIGGER_LISTENER VARCHAR(200) NOT NULL, +PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_LISTENER), +INDEX (TRIGGER_NAME, TRIGGER_GROUP), +FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) +REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +TYPE=InnoDB; + +CREATE TABLE QRTZ_CALENDARS ( +CALENDAR_NAME VARCHAR(200) NOT NULL, +CALENDAR BLOB NOT NULL, +PRIMARY KEY (CALENDAR_NAME)) +TYPE=InnoDB; + +CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( +TRIGGER_GROUP VARCHAR(200) NOT NULL, +PRIMARY KEY (TRIGGER_GROUP)) +TYPE=InnoDB; + +CREATE TABLE QRTZ_FIRED_TRIGGERS ( +ENTRY_ID VARCHAR(95) NOT NULL, +TRIGGER_NAME VARCHAR(200) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +IS_VOLATILE VARCHAR(1) NOT NULL, +INSTANCE_NAME VARCHAR(200) NOT NULL, +PRIORITY INTEGER NOT NULL, +STATE VARCHAR(16) NOT NULL, +JOB_NAME VARCHAR(200) NULL, +JOB_GROUP VARCHAR(200) NULL, +IS_STATEFUL VARCHAR(1) NULL, +REQUESTS_RECOVERY VARCHAR(1) NULL, +PRIMARY KEY (ENTRY_ID)) +TYPE=InnoDB; + +CREATE TABLE QRTZ_SCHEDULER_STATE ( +INSTANCE_NAME VARCHAR(200) NOT NULL, +LAST_CHECKIN_TIME BIGINT(13) NOT NULL, +CHECKIN_INTERVAL BIGINT(13) NOT NULL, +PRIMARY KEY (INSTANCE_NAME)) +TYPE=InnoDB; + +CREATE TABLE QRTZ_LOCKS ( +LOCK_NAME VARCHAR(40) NOT NULL, +PRIMARY KEY (LOCK_NAME)) +TYPE=InnoDB; + +INSERT INTO QRTZ_LOCKS values('TRIGGER_ACCESS'); +INSERT INTO QRTZ_LOCKS values('JOB_ACCESS'); +INSERT INTO QRTZ_LOCKS values('CALENDAR_ACCESS'); +INSERT INTO QRTZ_LOCKS values('STATE_ACCESS'); +INSERT INTO QRTZ_LOCKS values('MISFIRE_ACCESS'); +commit; \ No newline at end of file Modified: trunk/drawbridge/src/sql/example_data.sql =================================================================== --- trunk/drawbridge/src/sql/example_data.sql 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/sql/example_data.sql 2008-10-11 01:48:39 UTC (rev 51) @@ -14,6 +14,6 @@ INSERT INTO DB_USER_GROUP (USER_ID,GROUP_ID) VALUES (-1,-1); -INSERT INTO DB_JOB (ID,NAME,RUN_AS_ID,QUERY,SUBMITTED_BY,SUBMITTED_ON,REVIEWED_BY,REVIEWED_ON,APPROVED_BY,APPROVED_ON,ACTIVE,SCHEDULE,HANDLER,HANDLER_PARAMS) VALUES (-1,'all jobs',-2,'SELECT * FROM DB_JOB',-1,{d '2008-03-19'},null,null,null,null,'Y',null,'NoOpResultHandler',null); +INSERT INTO DB_JOB (ID,NAME,RUN_AS_ID,QUERY,SUBMITTED_BY,SUBMITTED_ON,REVIEWED_BY,REVIEWED_ON,APPROVED_BY,APPROVED_ON,ACTIVE,HANDLER,HANDLER_PARAMS) VALUES (-1,'all jobs',-2,'SELECT * FROM DB_JOB',-1,{d '2008-03-19'},null,null,null,null,'Y','NoOpResultHandler',null); COMMIT; \ No newline at end of file Modified: trunk/drawbridge/src/test/db.script =================================================================== --- trunk/drawbridge/src/test/db.script 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/test/db.script 2008-10-11 01:48:39 UTC (rev 51) @@ -13,6 +13,18 @@ CREATE MEMORY TABLE DB_SYSTEM_PERMISSION(GROUP_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,PRIMARY KEY(GROUP_ID,PERMISSION_ID),CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE) CREATE MEMORY TABLE DB_DATABASE_PERMISSION(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,GROUP_ID INTEGER NOT NULL,DATABASE_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_DATABASE FOREIGN KEY(DATABASE_ID) REFERENCES PUBLIC.DB_DATABASE(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT UNQ_DB_GRAP UNIQUE(GROUP_ID,DATABASE_ID,PERMISSION_ID)) CREATE MEMORY TABLE DB_RUN_AS_PERMISSION(GROUP_ID INTEGER NOT NULL,RUN_AS_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,PRIMARY KEY(GROUP_ID,RUN_AS_ID,PERMISSION_ID),CONSTRAINT FK_DB_RUN_AS_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_RUN_AS_PERMISSION_DB_RUN_AS FOREIGN KEY(RUN_AS_ID) REFERENCES PUBLIC.DB_RUN_AS(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_RUN_AS_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE) +CREATE MEMORY TABLE QRTZ_JOB_DETAILS(JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250),JOB_CLASS_NAME VARCHAR(250) NOT NULL,IS_DURABLE BOOLEAN NOT NULL,IS_VOLATILE BOOLEAN NOT NULL,IS_STATEFUL BOOLEAN NOT NULL,REQUESTS_RECOVERY BOOLEAN NOT NULL,JOB_DATA BINARY,PRIMARY KEY(JOB_NAME,JOB_GROUP)) +CREATE MEMORY TABLE QRTZ_JOB_LISTENERS(JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,JOB_LISTENER VARCHAR(200) NOT NULL,PRIMARY KEY(JOB_NAME,JOB_GROUP,JOB_LISTENER),FOREIGN KEY(JOB_NAME,JOB_GROUP) REFERENCES PUBLIC.QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)) +CREATE MEMORY TABLE QRTZ_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,IS_VOLATILE BOOLEAN NOT NULL,DESCRIPTION VARCHAR(250),NEXT_FIRE_TIME NUMERIC(13,0),PREV_FIRE_TIME NUMERIC(13,0),PRIORITY INTEGER,TRIGGER_STATE VARCHAR(16) NOT NULL,TRIGGER_TYPE VARCHAR(8) NOT NULL,START_TIME NUMERIC(13,0) NOT NULL,END_TIME NUMERIC(13,0),CALENDAR_NAME VARCHAR(200),MISFIRE_INSTR NUMERIC(2,0),JOB_DATA BINARY,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(JOB_NAME,JOB_GROUP) REFERENCES PUBLIC.QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)) +CREATE MEMORY TABLE QRTZ_SIMPLE_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,REPEAT_COUNT NUMERIC(7,0) NOT NULL,REPEAT_INTERVAL NUMERIC(12,0) NOT NULL,TIMES_TRIGGERED NUMERIC(7,0) NOT NULL,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +CREATE MEMORY TABLE QRTZ_CRON_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,CRON_EXPRESSION VARCHAR(120) NOT NULL,TIME_ZONE_ID VARCHAR(80),PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +CREATE MEMORY TABLE QRTZ_BLOB_TRIGGERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,BLOB_DATA BINARY,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +CREATE MEMORY TABLE QRTZ_TRIGGER_LISTENERS(TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,TRIGGER_LISTENER VARCHAR(200) NOT NULL,PRIMARY KEY(TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_LISTENER),FOREIGN KEY(TRIGGER_NAME,TRIGGER_GROUP) REFERENCES PUBLIC.QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)) +CREATE MEMORY TABLE QRTZ_CALENDARS(CALENDAR_NAME VARCHAR(200) NOT NULL PRIMARY KEY,CALENDAR BINARY NOT NULL) +CREATE MEMORY TABLE QRTZ_PAUSED_TRIGGER_GRPS(TRIGGER_GROUP VARCHAR(200) NOT NULL PRIMARY KEY) +CREATE MEMORY TABLE QRTZ_FIRED_TRIGGERS(ENTRY_ID VARCHAR(95) NOT NULL PRIMARY KEY,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,IS_VOLATILE BOOLEAN NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,FIRED_TIME NUMERIC(13,0) NOT NULL,PRIORITY INTEGER NOT NULL,STATE VARCHAR(16) NOT NULL,JOB_NAME VARCHAR(200),JOB_GROUP VARCHAR(200),IS_STATEFUL BOOLEAN,REQUESTS_RECOVERY BOOLEAN) +CREATE MEMORY TABLE QRTZ_SCHEDULER_STATE(INSTANCE_NAME VARCHAR(200) NOT NULL PRIMARY KEY,LAST_CHECKIN_TIME NUMERIC(13,0) NOT NULL,CHECKIN_INTERVAL NUMERIC(13,0) NOT NULL) +CREATE MEMORY TABLE QRTZ_LOCKS(LOCK_NAME VARCHAR(40) NOT NULL PRIMARY KEY) ALTER TABLE DB_USER ALTER COLUMN ID RESTART WITH 2 ALTER TABLE DB_GROUP ALTER COLUMN ID RESTART WITH 3 ALTER TABLE DB_DRIVER ALTER COLUMN ID RESTART WITH 1 @@ -40,8 +52,8 @@ INSERT INTO DB_RUN_AS VALUES(1,'dev','base64',0) INSERT INTO DB_JOB VALUES(0,'Job 1',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','handler','testKey1=testVal1\u000atestKey2=testVal2') INSERT INTO DB_JOB VALUES(1,'Job 2',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','handler','testKey1=testVal1\u000atestKey2=testVal2') -INSERT INTO DB_SCHEDULE VALUES(0,0,NULL,NULL,'schedule',0) -INSERT INTO DB_SCHEDULE VALUES(1,1,NULL,NULL,'schedule',0) +INSERT INTO DB_SCHEDULE VALUES(0,0,NULL,NULL,'0/60 * * * * ?',0) +INSERT INTO DB_SCHEDULE VALUES(1,1,NULL,NULL,'0/60 * * * * ?',0) INSERT INTO DB_PERMISSION_LIST VALUES(1,'ADD USER','S') INSERT INTO DB_PERMISSION_LIST VALUES(2,'EDIT USER','S') INSERT INTO DB_PERMISSION_LIST VALUES(3,'DELETE USER','S') @@ -72,3 +84,8 @@ INSERT INTO DB_PERMISSION_LIST VALUES(208,'DOES NOT REQUIRE REVIEW FOR RUN-AS','R') INSERT INTO DB_PERMISSION_LIST VALUES(209,'DOES NOT REQUIRE APPROVAL FOR RUN-AS','R') INSERT INTO DB_PERMISSION_LIST VALUES(210,'GRANT PERMISSIONS FOR RUN-AS','R') +INSERT INTO QRTZ_LOCKS VALUES('CALENDAR_ACCESS') +INSERT INTO QRTZ_LOCKS VALUES('JOB_ACCESS') +INSERT INTO QRTZ_LOCKS VALUES('MISFIRE_ACCESS') +INSERT INTO QRTZ_LOCKS VALUES('STATE_ACCESS') +INSERT INTO QRTZ_LOCKS VALUES('TRIGGER_ACCESS') Modified: trunk/drawbridge/src/test/drawbridge.properties =================================================================== --- trunk/drawbridge/src/test/drawbridge.properties 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/test/drawbridge.properties 2008-10-11 01:48:39 UTC (rev 51) @@ -1,2 +1,4 @@ drawbridge.hibernate.dialect=org.hibernate.dialect.HSQLDialect +drawbridge.quartz.driverDelegateClass=org.quartz.impl.jdbcjobstore.HSQLDBDelegate +drawbridge.quartz.selectWithLockSQL=SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? drawbridge.hibernate.show_sql=true \ No newline at end of file Modified: trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2008-10-11 01:48:39 UTC (rev 51) @@ -76,7 +76,7 @@ assertEquals("approvedOn", "03-20-2008 18:00:01", df.format(result.getApprovedOn().getTime())); assertTrue("active", result.isActive()); assertEquals("schedule", 1, result.getSchedules().size()); - assertEquals("schedule", "schedule", result.getSchedules().iterator().next().getSchedule()); + assertEquals("schedule", "0/60 * * * * ?", result.getSchedules().iterator().next().getSchedule()); assertEquals("handler", "handler", result.getHandler()); assertEquals("handlerParams", params, result.getHandlerParams()); } @@ -142,7 +142,7 @@ TransactionStatus tx = txManager.getTransaction(new DefaultTransactionDefinition()); try { Job job = target.get(0L); - jdbc.update("update DB_SCHEDULE set VERSION=3 where ID=" + job.getId()); + jdbc.update("update DB_SCHEDULE set VERSION=100 where ID=" + job.getId()); job.getSchedules().iterator().next().setSchedule("blah"); sessionFactory.getCurrentSession().flush(); fail("should have thrown a stale object exception"); Added: trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java (rev 0) +++ trunk/drawbridge/src/test/net/sf/drawbridge/sched/ExecuteQueryJobTest.java 2008-10-11 01:48:39 UTC (rev 51) @@ -0,0 +1,104 @@ +package net.sf.drawbridge.sched; + +import java.util.Date; +import java.util.Properties; + +import net.sf.drawbridge.dao.JobDao; +import net.sf.drawbridge.exec.JobExecuter; +import net.sf.drawbridge.exec.handler.ResultHandler; +import net.sf.drawbridge.util.StringPropertiesConverter; +import net.sf.drawbridge.vo.Database; +import net.sf.drawbridge.vo.Driver; +import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.RunAsAccount; + +import org.jmock.Mock; +import org.jmock.MockObjectTestCase; +import org.quartz.CronTrigger; +import org.quartz.JobDetail; +import org.quartz.JobExecutionContext; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.spi.TriggerFiredBundle; +import org.springframework.beans.factory.BeanFactory; + +public class ExecuteQueryJobTest extends MockObjectTestCase { + + private Mock mockJobDao = mock(JobDao.class); + + private Mock mockJobExecuter = mock(JobExecuter.class); + + private Mock mockPropConverter = mock(StringPropertiesConverter.class); + + private Mock mockHandler = mock(ResultHandler.class); + + private Mock mockBeanFactory = mock(BeanFactory.class); + + private Mock mockScheduler = mock(Scheduler.class); + + protected void setUp() { + ExecuteQueryJob.factory = (BeanFactory) mockBeanFactory.proxy(); + } + + private ExecuteQueryJob target = new ExecuteQueryJob((JobDao) mockJobDao.proxy(), + (JobExecuter) mockJobExecuter.proxy(), + (StringPropertiesConverter) mockPropConverter.proxy()); + + public void testShouldRemoveJobFromSchedulerIfNoLongerExistsInDatabase() throws Exception { + mockScheduler.expects(once()).method("deleteJob").with(eq("1"), eq("2")).will(returnValue(true)); + mockJobDao.expects(once()).method("get").with(eq(new Long(1))).will(returnValue(null)); + target.execute(getContext()); + } + + public void testShouldRemoveJobFromSchedulerIfJobIsInactive() throws Exception { + mockScheduler.expects(once()).method("deleteJob").with(eq("1"), eq("2")).will(returnValue(true)); + Job job = new Job(); + job.setActive("N"); + mockJobDao.expects(once()).method("get").with(eq(new Long(1))).will(returnValue(new Job())); + target.execute(getContext()); + } + + private Job getJob() { + Job job = new Job(); + RunAsAccount runAs = new RunAsAccount(); + Driver driver = new Driver(); + Database db = new Database(); + db.setDriver(driver); + runAs.setDatabase(db); + job.setRunAsAccount(runAs); + job.setName("Unit Test Job"); + job.setId(1L); + job.setActive("Y"); + job.setHandler("SomeHandler"); + job.setHandlerParams("SomeParams"); + job.setQuery("select * from dual"); + + runAs.setId(2); + db.setId(3); + return job; + } + + public void testShouldExecuteJobAndSendResultsToHandler() throws Exception { + Job job = getJob(); + mockJobExecuter.expects(once()).method("executeJob"); + mockBeanFactory.expects(once()).method("getBean").with(eq("SomeHandler")).will(returnValue(mockHandler.proxy())); + mockPropConverter.expects(once()).method("convertToProperties").will(returnValue(new Properties())); + mockHandler.expects(once()).method("handleQuery"); + mockJobDao.expects(once()).method("get").with(eq(new Long(1))).will(returnValue(job)); + target.execute(getContext()); + } + + private JobExecutionContext getContext() { + TriggerFiredBundle triggerBundle = new TriggerFiredBundle(new JobDetail("1","2",ExecuteQueryJob.class), new CronTrigger(), null, false, new Date(), new Date(), new Date(), new Date()); + JobExecutionContext ctx = new JobExecutionContext((Scheduler) mockScheduler.proxy(), triggerBundle, null); + return ctx; + } + + public void testShouldLogErrorMessageIfUnableToDeleteJobFromScheduler() throws Exception { + mockScheduler.expects(once()).method("deleteJob").with(eq("1"), eq("2")).will(throwException(new SchedulerException("The Spanish Inquisition!!"))); + Job job = new Job(); + job.setActive("N"); + mockJobDao.expects(once()).method("get").with(eq(new Long(1))).will(returnValue(new Job())); + target.execute(getContext()); + } +} Modified: trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoaderTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoaderTest.java 2008-10-08 19:05:02 UTC (rev 50) +++ trunk/drawbridge/src/test/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoaderTest.java 2008-10-11 01:48:39 UTC (rev 51) @@ -1,6 +1,7 @@ /* * This file is part of DrawBridge. * Copyright 2008 Adam Cresse + * Copyright 2008 Ben La Monica * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -17,25 +18,65 @@ */ package net.sf.drawbridge.sched; -import net.sf.drawbridge.sched.QuartzDrawbridgeScheduleLoader; +import java.util.ArrayList; +import java.util.List; +import net.sf.drawbridge.dao.JobDao; +import net.sf.drawbridge.vo.Job; +import net.sf.drawbridge.vo.RunAsAccount; +import net.sf.drawbridge.vo.Schedule; + +import org.jmock.Mock; import org.jmock.MockObjectTestCase; import org.quartz.Scheduler; -import org.springframework.scheduling.quartz.SchedulerFactoryBean; +import org.quartz.SchedulerException; public class QuartzDrawbridgeScheduleLoaderTest extends MockObjectTestCase { - public void testShouldRunJobs() throws Exception{ - SchedulerFactoryBean schedFact=new SchedulerFactoryBean(); - schedFact.setAutoStartup(true); - schedFact.setOverwriteExistingJobs(true); - schedFact.afterPropertiesSet(); - Scheduler sched=(Scheduler) schedFact.getObject(); - sched.deleteJob("heartbeat","system");//clear incase previously loaded - assertNotNull(sched); - new QuartzDrawbridgeScheduleLoader(sched); - Thread.sleep(2000); - sched.shutdown(); + private Mock mockJobDao = mock(JobDao.class); + + private Mock mockScheduler = mock(Scheduler.class); + + private QuartzDrawbridgeScheduleLoader target = new QuartzDrawbridgeScheduleLoader((Scheduler) mockScheduler.proxy(), (JobDao) mockJobDao.proxy()); + + private List<Job> getJobs(boolean isActive) { + List<Job> jobs = new ArrayList<Job>(); + Job job = new Job(); + RunAsAccount runAs = new RunAsAccount(); + runAs.setId(100); + job.setRunAsAccount(runAs); + job.setId(1L); + job.setName("Test job"); + job.setActive(isActive?"Y":"N"); + jobs.add(job); + Schedule s = new Schedule(1,1,"0/60 * * * * ?", null, null); + job.addSchedule(s); + return jobs; } + + public void testShouldScheduleActiveJobs() throws Exception{ + List<Job> jobs = getJobs(true); + mockJobDao.expects(once()).method("getAll").will(returnValue(jobs)); + mockScheduler.expects(once()).method("scheduleJob"); + target.loadSchedule(); + } + public void testShouldNotScheduleInActiveJobs() throws Exception{ + List<Job> jobs = getJobs(false); + mockJobDao.expects(once()).method("getAll").will(returnValue(jobs)); + mockScheduler.expects(never()).method("scheduleJob"); + target.loadSchedule(); + } + + public void testShouldLogErrorIfExceptionThrownWhileSchedulingJob() throws Exception { + List<Job> jobs = getJobs(true); + mockJobDao.expects(once()).method("getAll").will(returnValue(jobs)); + mockScheduler.expects(once()).method("scheduleJob").will(throwException(new SchedulerException("The Spanish Inquisition!!"))); + try { + target.loadSchedule(); + } catch (Exception e) { + fail("should not throw an exception."); + } + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-10-08 19:05:13
|
Revision: 50 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=50&view=rev Author: blamonica Date: 2008-10-08 19:05:02 +0000 (Wed, 08 Oct 2008) Log Message: ----------- Made the schedules a one-to-many relationship, each job can have multiple schedules. Modified Paths: -------------- trunk/drawbridge/WebContent/META-INF/context.xml trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/dao/drawbridge-dao-spring.xml trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java trunk/drawbridge/src/sql/create_drawbridge_schema.sql trunk/drawbridge/src/test/db.script trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java Added Paths: ----------- trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Schedule.hbm.xml trunk/drawbridge/src/java/net/sf/drawbridge/vo/Schedule.java Modified: trunk/drawbridge/WebContent/META-INF/context.xml =================================================================== --- trunk/drawbridge/WebContent/META-INF/context.xml 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/WebContent/META-INF/context.xml 2008-10-08 19:05:02 UTC (rev 50) @@ -1,4 +1,8 @@ -<Context docBase="drawbridge" path="/drawbridge" reloadable="true" source="org.eclipse.jst.jee.server:drawbridge"> +<Context docBase="drawbridge" path="/drawbridge" reloadable="true" debug="1" source="org.eclipse.jst.jee.server:drawbridge"> + <Resource name="jdbc/DrawbridgeDataSource" auth="Container" type="javax.sql.DataSource" + maxActive="30" maxIdle="30" maxWait="10000" + username="drawbridge_user" password="drawbridge" driverClassName="com.mysql.jdbc.Driver" + url="jdbc:mysql://localhost:3306/drawbridge"/> </Context> Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java 2008-10-08 19:05:02 UTC (rev 50) @@ -80,7 +80,6 @@ null, null, null, null, new Boolean(request.getParameter("active")), - request.getParameter("schedule"), request.getParameter("handler"), request.getParameter("handlerParams")); drawbridgeService.addJob(job); @@ -107,7 +106,6 @@ null, null, null, null, new Boolean(request.getParameter("active")), - request.getParameter("schedule"), request.getParameter("handler"), request.getParameter("handlerParams")); drawbridgeService.updateJob(job); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/drawbridge-dao-spring.xml =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/drawbridge-dao-spring.xml 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/drawbridge-dao-spring.xml 2008-10-08 19:05:02 UTC (rev 50) @@ -10,6 +10,7 @@ <value>net/sf/drawbridge/dao/hibernate/hbm/RunAsAccount.hbm.xml</value> <value>net/sf/drawbridge/dao/hibernate/hbm/User.hbm.xml</value> <value>net/sf/drawbridge/dao/hibernate/hbm/Group.hbm.xml</value> + <value>net/sf/drawbridge/dao/hibernate/hbm/Schedule.hbm.xml</value> <value>net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml</value> </list> </property> Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml 2008-10-08 19:05:02 UTC (rev 50) @@ -59,9 +59,10 @@ <column name="ACTIVE"/> </property> - <property name="schedule" type="string" length="128"> - <column name="SCHEDULE"/> - </property> + <set name="schedule" access="field" lazy="false"> + <key foreign-key="JOB_ID" column="ID"/> + <one-to-many class="net.sf.drawbridge.vo.Schedule"/> + </set> <property name="handler" type="string" length="128"> <column name="HANDLER"/> Added: trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Schedule.hbm.xml =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Schedule.hbm.xml (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Schedule.hbm.xml 2008-10-08 19:05:02 UTC (rev 50) @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + +<hibernate-mapping> + <class name="net.sf.drawbridge.vo.Schedule" optimistic-lock="version" table="DB_SCHEDULE"> + <id name="id" type="long" column="ID"> + <generator class="native"/> + </id> + + <version + column="VERSION" + name="version" + type="integer" + access="field" + /> + + <property name="jobId" type="long" not-null="true"> + <column name="JOB_ID"/> + </property> + + <property name="schedule" type="string" length="128" not-null="true"> + <column name="SCHEDULE"/> + </property> + + <property name="startDate" type="date"> + <column name="START_DATE"/> + </property> + + <property name="stopDate" type="date"> + <column name="STOP_DATE"/> + </property> + </class> +</hibernate-mapping> \ No newline at end of file Modified: trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java 2008-10-08 19:05:02 UTC (rev 50) @@ -18,6 +18,10 @@ package net.sf.drawbridge.vo; import java.util.Calendar; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; public class Job extends ValueObject<Long> { @@ -31,7 +35,7 @@ private User approvedBy; private Calendar approvedOn; private String active; - private String schedule; + private Set<Schedule> schedule = new HashSet<Schedule>(2); private String handler; private String handlerParams; @@ -40,7 +44,7 @@ public Job(Long id, String name, RunAsAccount runAs, String query, User submittedBy, Calendar submittedOn, User reviewedBy, Calendar reviewedOn, User approvedBy, Calendar approvedOn, - boolean active, String schedule, String handler, String handlerParams) { + boolean active, String handler, String handlerParams) { super(id); setName(name); setRunAsAccount(runAs); @@ -52,7 +56,6 @@ setApprovedBy(approvedBy); setApprovedOn(approvedOn); setActive(active?"Y":"N"); - setSchedule(schedule); setHandler(handler); setHandlerParams(handlerParams); } @@ -109,18 +112,27 @@ return active; } - public String getSchedule() { - return schedule; + public String getHandler() { + return handler; } - public void setSchedule(String schedule) { - this.schedule = schedule; + public void addSchedule(Schedule s) { + s.setJobId(getId()); + schedule.add(s); } - - public String getHandler() { - return handler; + + public void removeSchedule(Schedule s) { + schedule.remove(s); } - + + public void clearSchedule() { + schedule.clear(); + } + + public Collection<Schedule> getSchedules() { + return Collections.unmodifiableSet(schedule); + } + public void setHandler(String handler) { this.handler = handler; } Added: trunk/drawbridge/src/java/net/sf/drawbridge/vo/Schedule.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/vo/Schedule.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/vo/Schedule.java 2008-10-08 19:05:02 UTC (rev 50) @@ -0,0 +1,113 @@ +/* + * This file is part of DrawBridge. + * Copyright 2008 Adam Cresse, Ben La Monica + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. + */ +package net.sf.drawbridge.vo; + +import java.util.Date; + +public class Schedule extends ValueObject<Long> { + private Long jobId; + private String schedule; + private Date startDate; + private Date stopDate; + private long version = 0; + + public Schedule() { } + + public Schedule(long id, long jobId, String schedule, Date startDate, Date stopDate) { + super(id); + setJobId(jobId); + setSchedule(schedule); + setStartDate(startDate); + setStopDate(stopDate); + } + + public Long getJobId() { + return jobId; + } + + public void setJobId(Long jobId) { + this.jobId = jobId; + } + + public String getSchedule() { + return schedule; + } + + public void setSchedule(String schedule) { + this.schedule = schedule; + } + + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Date getStopDate() { + return stopDate; + } + + public void setStopDate(Date stopDate) { + this.stopDate = stopDate; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + (int) (jobId ^ (jobId >>> 32)); + result = prime * result + + ((schedule == null) ? 0 : schedule.hashCode()); + result = prime * result + + ((startDate == null) ? 0 : startDate.hashCode()); + result = prime * result + + ((stopDate == null) ? 0 : stopDate.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + final Schedule other = (Schedule) obj; + if (jobId != other.jobId) + return false; + if (schedule == null) { + if (other.schedule != null) + return false; + } else if (!schedule.equals(other.schedule)) + return false; + if (startDate == null) { + if (other.startDate != null) + return false; + } else if (!startDate.equals(other.startDate)) + return false; + if (stopDate == null) { + if (other.stopDate != null) + return false; + } else if (!stopDate.equals(other.stopDate)) + return false; + return true; + } +} Modified: trunk/drawbridge/src/sql/create_drawbridge_schema.sql =================================================================== --- trunk/drawbridge/src/sql/create_drawbridge_schema.sql 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/sql/create_drawbridge_schema.sql 2008-10-08 19:05:02 UTC (rev 50) @@ -87,6 +87,17 @@ CONSTRAINT CHK_DB_JOB_ACTIVE CHECK ACTIVE IN ('Y','N') ); +CREATE TABLE DB_SCHEDULE( + ID INTEGER NOT NULL AUTO_INCREMENT, + JOB_ID INTEGER NOT NULL, + START_DATE DATE, + STOP_DATE DATE, + SCHEDULE VARCHAR(128) NOT NULL, + VERSION INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY(ID), + CONSTRAINT FK_DB_SCHEDULE_DB_JOB FOREIGN KEY FK_DB_SCHEDULE_DB_JOB (JOB_ID) REFERENCES DB_JOB(ID) +); + CREATE TABLE DB_PERMISSION_LIST( ID INTEGER NOT NULL, NAME VARCHAR(64) NOT NULL, Modified: trunk/drawbridge/src/test/db.script =================================================================== --- trunk/drawbridge/src/test/db.script 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/test/db.script 2008-10-08 19:05:02 UTC (rev 50) @@ -7,7 +7,8 @@ CREATE MEMORY TABLE DB_DRIVER(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,NAME VARCHAR(32) NOT NULL,CLASS_NAME VARCHAR(128) NOT NULL,CONSTRAINT UNQ_DB_DRIVER UNIQUE(NAME)) CREATE MEMORY TABLE DB_DATABASE(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,NAME VARCHAR(32) NOT NULL,JDBC_URL VARCHAR(128) NOT NULL,DRIVER_ID INTEGER NOT NULL,CONSTRAINT FK_DB_DATABASE_DB_DRIVER FOREIGN KEY(DRIVER_ID) REFERENCES PUBLIC.DB_DRIVER(ID),CONSTRAINT UNQ_DB_DATABASE UNIQUE(NAME)) CREATE MEMORY TABLE DB_RUN_AS(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,USER_NAME VARCHAR(16) NOT NULL,ENC_PASSWORD VARCHAR(32) NOT NULL,DATABASE_ID INTEGER NOT NULL,CONSTRAINT FK_DB_RUN_AS_DB_DATABASE FOREIGN KEY(DATABASE_ID) REFERENCES PUBLIC.DB_DATABASE(ID),CONSTRAINT UNQ_DB_RUN_AS UNIQUE(USER_NAME,DATABASE_ID)) -CREATE MEMORY TABLE DB_JOB(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,RUN_AS_ID INTEGER NOT NULL,QUERY VARCHAR(1024) NOT NULL,SUBMITTED_BY INTEGER NOT NULL,SUBMITTED_ON TIMESTAMP NOT NULL,REVIEWED_BY INTEGER,REVIEWED_ON TIMESTAMP,APPROVED_BY INTEGER,APPROVED_ON TIMESTAMP,ACTIVE VARCHAR(1) NOT NULL,SCHEDULE VARCHAR(128),HANDLER VARCHAR(128),HANDLER_PARAMS VARCHAR(512),CONSTRAINT FK_DB_JOB_DB_RUN_AS FOREIGN KEY(RUN_AS_ID) REFERENCES PUBLIC.DB_RUN_AS(ID),CONSTRAINT FK_DB_JOB_SUBMITTED_BY FOREIGN KEY(SUBMITTED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_REVIEWED_BY FOREIGN KEY(REVIEWED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_APPROVED_BY FOREIGN KEY(APPROVED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT UNQ_DB_JOB UNIQUE(NAME),CONSTRAINT CHK_DB_JOB_ACTIVE CHECK((DB_JOB.ACTIVE) IN (('Y'),('N')))) +CREATE MEMORY TABLE DB_JOB(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,RUN_AS_ID INTEGER NOT NULL,QUERY VARCHAR(1024) NOT NULL,SUBMITTED_BY INTEGER NOT NULL,SUBMITTED_ON TIMESTAMP NOT NULL,REVIEWED_BY INTEGER,REVIEWED_ON TIMESTAMP,APPROVED_BY INTEGER,APPROVED_ON TIMESTAMP,ACTIVE VARCHAR(1) NOT NULL,HANDLER VARCHAR(128),HANDLER_PARAMS VARCHAR(512),CONSTRAINT FK_DB_JOB_DB_RUN_AS FOREIGN KEY(RUN_AS_ID) REFERENCES PUBLIC.DB_RUN_AS(ID),CONSTRAINT FK_DB_JOB_SUBMITTED_BY FOREIGN KEY(SUBMITTED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_REVIEWED_BY FOREIGN KEY(REVIEWED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_APPROVED_BY FOREIGN KEY(APPROVED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT UNQ_DB_JOB UNIQUE(NAME),CONSTRAINT CHK_DB_JOB_ACTIVE CHECK((DB_JOB.ACTIVE) IN (('Y'),('N')))) +CREATE MEMORY TABLE DB_SCHEDULE(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,JOB_ID INTEGER NOT NULL,START_DATE DATE,STOP_DATE DATE,SCHEDULE VARCHAR(128) NOT NULL,VERSION INTEGER DEFAULT 0 NOT NULL,CONSTRAINT FK_DB_SCHEDULE_DB_JOB FOREIGN KEY(JOB_ID) REFERENCES PUBLIC.DB_JOB(ID)) CREATE MEMORY TABLE DB_PERMISSION_LIST(ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,PERMISSION_TYPE VARCHAR(1) NOT NULL,CONSTRAINT UNQ_DB_PERMISSION UNIQUE(NAME,PERMISSION_TYPE),CONSTRAINT CHK_DB_PERMISSION_LIST_PERMISSION_TYPE CHECK((DB_PERMISSION_LIST.PERMISSION_TYPE) IN (('S'),('D'),('R')))) CREATE MEMORY TABLE DB_SYSTEM_PERMISSION(GROUP_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,PRIMARY KEY(GROUP_ID,PERMISSION_ID),CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE) CREATE MEMORY TABLE DB_DATABASE_PERMISSION(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,GROUP_ID INTEGER NOT NULL,DATABASE_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_DATABASE FOREIGN KEY(DATABASE_ID) REFERENCES PUBLIC.DB_DATABASE(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT UNQ_DB_GRAP UNIQUE(GROUP_ID,DATABASE_ID,PERMISSION_ID)) @@ -18,6 +19,7 @@ ALTER TABLE DB_DATABASE ALTER COLUMN ID RESTART WITH 1 ALTER TABLE DB_RUN_AS ALTER COLUMN ID RESTART WITH 2 ALTER TABLE DB_JOB ALTER COLUMN ID RESTART WITH 2 +ALTER TABLE DB_SCHEDULE ALTER COLUMN ID RESTART WITH 2 ALTER TABLE DB_DATABASE_PERMISSION ALTER COLUMN ID RESTART WITH 0 SET SCHEMA PUBLIC GRANT DBA TO SA @@ -36,8 +38,10 @@ INSERT INTO DB_DATABASE VALUES(0,'HSQLDB In-Memory Database','jdbc:hsqldb:mem:.',0) INSERT INTO DB_RUN_AS VALUES(0,'sa','base64',0) INSERT INTO DB_RUN_AS VALUES(1,'dev','base64',0) -INSERT INTO DB_JOB VALUES(0,'Job 1',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','schedule','handler','testKey1=testVal1\u000atestKey2=testVal2') -INSERT INTO DB_JOB VALUES(1,'Job 2',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','schedule','handler','testKey1=testVal1\u000atestKey2=testVal2') +INSERT INTO DB_JOB VALUES(0,'Job 1',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','handler','testKey1=testVal1\u000atestKey2=testVal2') +INSERT INTO DB_JOB VALUES(1,'Job 2',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','handler','testKey1=testVal1\u000atestKey2=testVal2') +INSERT INTO DB_SCHEDULE VALUES(0,0,NULL,NULL,'schedule',0) +INSERT INTO DB_SCHEDULE VALUES(1,1,NULL,NULL,'schedule',0) INSERT INTO DB_PERMISSION_LIST VALUES(1,'ADD USER','S') INSERT INTO DB_PERMISSION_LIST VALUES(2,'EDIT USER','S') INSERT INTO DB_PERMISSION_LIST VALUES(3,'DELETE USER','S') Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java 2008-10-08 19:05:02 UTC (rev 50) @@ -54,7 +54,7 @@ List<String> handlerList=new ArrayList<String>(); handlerList.add("TestResultHandler"); - Job job=new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,null,null,params); + Job job=new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,null,params); mockDrawbridgeService.expects(atLeastOnce()).method("getJob").with(eq(new Long(1))).will(returnValue(job)); mockDrawbridgeService.expects(once()).method("listRunAsAccounts").will(returnValue(runAsList)); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java 2008-10-08 19:05:02 UTC (rev 50) @@ -54,7 +54,7 @@ } public void testShouldAddJobAndReturnSuccessMessage() throws Exception{ - Job job=new Job(null,"name",account,"query",null,null,null,null,null,null,true,"schedule","handler",params); + Job job=new Job(null,"name",account,"query",null,null,null,null,null,null,true,"handler",params); mockDrawbridgeService.expects(once()).method("addJob").with(new JobConstraint(job)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); mockDrawbridgeService.expects(once()).method("getUser").with(eq(new Integer(-1))).will(returnValue(user)); @@ -79,7 +79,7 @@ } public void testShouldEditJobAndReturnSuccessMessage() throws Exception{ - Job job=new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"schedule","handler",params); + Job job=new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"handler",params); mockDrawbridgeService.expects(once()).method("updateJob").with(new JobConstraint(job)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); mockDrawbridgeService.expects(once()).method("getUser").with(eq(new Integer(-1))).will(returnValue(user)); @@ -106,7 +106,7 @@ @SuppressWarnings("unchecked") public void testShouldAddJobAndReturnFailureMessageOnException() throws Exception{ - Job job=new Job(null,"name",account,"query",null,null,null,null,null,null,true,"schedule",null,params); + Job job=new Job(null,"name",account,"query",null,null,null,null,null,null,true,null,params); RuntimeException ex=new RuntimeException("The Spanish Inquisition"); mockDrawbridgeService.expects(once()).method("addJob").with(new JobConstraint(job)).will(throwException(ex)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); @@ -139,7 +139,7 @@ @SuppressWarnings("unchecked") public void testShouldEditJobAndReturnFailureMessageOnException() throws Exception{ - Job job=new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"schedule","handler",params); + Job job=new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"handler",params); RuntimeException ex=new RuntimeException("The Spanish Inquisition"); mockDrawbridgeService.expects(once()).method("updateJob").with(new JobConstraint(job)).will(throwException(ex)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); @@ -185,7 +185,7 @@ job.getRunAsAccount().equals(other.getRunAsAccount()) && job.getQuery().equals(other.getQuery()) && job.isActive()==other.isActive() && - job.getSchedule().equals(other.getSchedule()); + job.getSchedules().equals(other.getSchedules()); } private boolean equals(Object obj1, Object obj2){ Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java 2008-10-08 19:05:02 UTC (rev 50) @@ -50,7 +50,7 @@ User user = new User(2, "acresse", "Adam", "Cresse", true); Database db = new Database(new Integer(1), "name", "jdbcUrl", null); RunAsAccount runAsAccount = new RunAsAccount(2,"userName","password",db); - Job job=new Job(1L,"name",runAsAccount,"query",user,null,null,null,null,null,true,"schedule","handler",params); + Job job=new Job(1L,"name",runAsAccount,"query",user,null,null,null,null,null,true,"handler",params); mockDrawbridgeService.expects(once()).method("getJob").with(eq(new Long(1))).will(returnValue(job)); mockDrawbridgeService.expects(once()).method("deleteJob").with(eq(new Long(1))); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java 2008-10-08 19:05:02 UTC (rev 50) @@ -47,7 +47,7 @@ List<Job> jobList=new ArrayList<Job>(); Database db = new Database(1,"name", "jdbcUrl", null); RunAsAccount runAsAccount = new RunAsAccount(1,"userName","password",db); - jobList.add(new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,null,"handler",params)); + jobList.add(new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,"handler",params)); List<RunAsAccount> runAsList=new ArrayList<RunAsAccount>(); runAsList.add(runAsAccount); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java 2008-10-08 19:05:02 UTC (rev 50) @@ -50,7 +50,7 @@ Driver driver = new Driver(4,"name","class"); Database database=new Database(3,"name","url",driver); RunAsAccount runAsAccount = new RunAsAccount(2,"userName","password",database); - Job job = new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,null,"handler",params); + Job job = new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,"handler",params); List<QueryParam> queryParams=new ArrayList<QueryParam>(); queryParams.add(new QueryParam(Types.VARCHAR,"name","value")); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java 2008-10-08 19:05:02 UTC (rev 50) @@ -53,7 +53,7 @@ public void testShouldReturnViewWithResults() throws Exception{ RunAsAccount account = new RunAsAccount(2, "username", "password", null); - Job job = new Job(1L,"name",account,"query",null,null,null,null,null,null,true,null,"handler",paramsStr); + Job job = new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"handler",paramsStr); List<QueryParam> queryParams=new ArrayList<QueryParam>(); queryParams.add(new QueryParam(Types.VARCHAR,"name","value")); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2008-08-29 03:12:07 UTC (rev 49) +++ trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2008-10-08 19:05:02 UTC (rev 50) @@ -21,12 +21,17 @@ import java.util.Calendar; import java.util.List; +import javax.sql.DataSource; + import junit.framework.TestCase; import net.sf.drawbridge.test.TestBeanFactory; import net.sf.drawbridge.vo.Job; import net.sf.drawbridge.vo.RunAsAccount; import net.sf.drawbridge.vo.User; +import org.hibernate.SessionFactory; +import org.hibernate.StaleObjectStateException; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.AbstractPlatformTransactionManager; import org.springframework.transaction.support.DefaultTransactionDefinition; @@ -40,12 +45,18 @@ private RunAsAccountDao runAsAccountDao; private AbstractPlatformTransactionManager txManager; + + private JdbcTemplate jdbc; private String params="testKey1=testVal1\ntestKey2=testVal2"; + private SessionFactory sessionFactory; + protected void setUp() { txManager = (AbstractPlatformTransactionManager) TestBeanFactory.getBean("TxManager"); target = (JobDao) TestBeanFactory.getBean("JobDao"); + sessionFactory = (SessionFactory) TestBeanFactory.getBean("SessionFactory"); + jdbc = new JdbcTemplate((DataSource) TestBeanFactory.getBean("DataSource")); runAsAccountDao = (RunAsAccountDao) TestBeanFactory.getBean("RunAsAccountDao"); userDao = (UserDao) TestBeanFactory.getBean("UserDao"); } @@ -64,7 +75,8 @@ assertEquals("approvedBy", new Integer(1), result.getApprovedBy().getId()); assertEquals("approvedOn", "03-20-2008 18:00:01", df.format(result.getApprovedOn().getTime())); assertTrue("active", result.isActive()); - assertEquals("schedule", "schedule", result.getSchedule()); + assertEquals("schedule", 1, result.getSchedules().size()); + assertEquals("schedule", "schedule", result.getSchedules().iterator().next().getSchedule()); assertEquals("handler", "handler", result.getHandler()); assertEquals("handlerParams", params, result.getHandlerParams()); } @@ -74,7 +86,7 @@ try { User submitter = userDao.get(0); RunAsAccount account = runAsAccountDao.get(0); - Job job = new Job(null, "A new job", account, "select count(*) from dual", submitter, Calendar.getInstance(), null, null, null, null, true, "schedule", "handler", params); + Job job = new Job(null, "A new job", account, "select count(*) from dual", submitter, Calendar.getInstance(), null, null, null, null, true, "handler", params); target.create(job); assertNotNull("id is still null", job.getId()); } finally { @@ -125,5 +137,19 @@ public void testShouldRetrieveAllJobsBasedOnDatabaseId() throws Exception { assertEquals(2, target.getJobsForDatabase(0).size()); } - + + public void testShouldThrowStaleObjectExceptionIfVersionChangesInScheduleRow() throws Exception { + TransactionStatus tx = txManager.getTransaction(new DefaultTransactionDefinition()); + try { + Job job = target.get(0L); + jdbc.update("update DB_SCHEDULE set VERSION=3 where ID=" + job.getId()); + job.getSchedules().iterator().next().setSchedule("blah"); + sessionFactory.getCurrentSession().flush(); + fail("should have thrown a stale object exception"); + } catch (StaleObjectStateException e) { + // success + } finally { + txManager.rollback(tx); + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ac...@us...> - 2008-08-29 03:12:13
|
Revision: 49 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=49&view=rev Author: acresse Date: 2008-08-29 03:12:07 +0000 (Fri, 29 Aug 2008) Log Message: ----------- add result handlers and csv output - still need to add it to scheduled jobs Modified Paths: -------------- trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp trunk/drawbridge/src/java/drawbridge-core-spring.xml trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml trunk/drawbridge/src/java/net/sf/drawbridge/domain/DefaultDrawbridgeService.java trunk/drawbridge/src/java/net/sf/drawbridge/domain/DrawbridgeService.java trunk/drawbridge/src/java/net/sf/drawbridge/domain/SecureDrawbridgeService.java trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java trunk/drawbridge/src/java/net/sf/drawbridge/vo/ValueObject.java trunk/drawbridge/src/sql/create_drawbridge_schema.sql trunk/drawbridge/src/sql/example_data.sql trunk/drawbridge/src/test/db.script trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/AddOrEditUserSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/DeleteUserSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java Added Paths: ----------- trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/ trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/FileOutputResultHandler.java trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/NoOpResultHandler.java trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/ResultHandler.java trunk/drawbridge/src/java/net/sf/drawbridge/exec/output/ trunk/drawbridge/src/java/net/sf/drawbridge/exec/output/CsvResultWriter.java trunk/drawbridge/src/java/net/sf/drawbridge/exec/output/ResultWriter.java trunk/drawbridge/src/java/net/sf/drawbridge/util/DateService.java trunk/drawbridge/src/java/net/sf/drawbridge/util/DefaultStringPropertiesConverter.java trunk/drawbridge/src/java/net/sf/drawbridge/util/StringPropertiesConverter.java trunk/drawbridge/src/java/net/sf/drawbridge/util/SystemDateService.java trunk/drawbridge/src/test/net/sf/drawbridge/exec/handler/ trunk/drawbridge/src/test/net/sf/drawbridge/exec/handler/FileOutputResultHandlerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/exec/output/ trunk/drawbridge/src/test/net/sf/drawbridge/exec/output/CsvResultWriterTest.java trunk/drawbridge/src/test/net/sf/drawbridge/util/DefaultStringPropertiesConverterTest.java Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/job/addOrEdit.jsp 2008-08-29 03:12:07 UTC (rev 49) @@ -72,6 +72,24 @@ <td><input type="text" name="schedule" maxlength="128" size="40" value="<c:out value="${job.schedule}"/>"></td> </tr> <tr> + <td align="right">Result Handler:</td> + <td> + <select name="handler"> + <c:forEach items="${handlerList}" var="handler"> + <c:set var="selected" value="${NULL}"/> + <c:if test="${handler eq job.handler}"> + <c:set var="selected" value="SELECTED"/> + </c:if> + <option value="<c:out value="${handler}"/>" <c:out value="${selected}"/>><c:out value="${handler}"/></option> + </c:forEach> + </select> + </td> + </tr> + <tr> + <td align="right">Result Handler Params:</td> + <td><textarea name="handlerParams" rows="10" cols="40"><c:out value="${job.handlerParams}"/></textarea></td> + </tr> + <tr> <td colspan="2" align="right"><input type="submit" value="Submit"></td> </tr> </table> Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/job/manage.jsp 2008-08-29 03:12:07 UTC (rev 49) @@ -29,6 +29,7 @@ <display:column title="Run As" sortable="true"><c:out value="${row.runAsAccount.userName}"/></display:column> <display:column property="active" title="Active" sortable="true"/> <display:column title="Schedule" sortable="true"><c:out value="${row.schedule}" default="none"/></display:column> + <display:column title="Handler" sortable="true"><c:out value="${row.handler}" default="none"/></display:column> <display:column title="Action" style="text-align: center;"> <a href="RunJob.do?jobId=<c:out value="${row.id}"/>"><img src="images/icons/22x22/emblem-system.png" title="Run" border="0"></a> <a href="EditJob.do?jobId=<c:out value="${row.id}"/>"><img src="images/icons/22x22/accessories-text-editor.png" title="Edit" border="0"></a> Modified: trunk/drawbridge/src/java/drawbridge-core-spring.xml =================================================================== --- trunk/drawbridge/src/java/drawbridge-core-spring.xml 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/java/drawbridge-core-spring.xml 2008-08-29 03:12:07 UTC (rev 49) @@ -15,6 +15,7 @@ <constructor-arg ref="DriverDao"/> <constructor-arg ref="QueryParser"/> <constructor-arg ref="JobExecuter"/> + <constructor-arg ref="StringPropertiesConverter"/> </bean> </constructor-arg> <constructor-arg ref="SecurityService"/> @@ -38,8 +39,14 @@ <bean id="JobExecuter" class="net.sf.drawbridge.exec.DefaultJobExecuter"/> + <bean id="StringPropertiesConverter" class="net.sf.drawbridge.util.DefaultStringPropertiesConverter"/> + <bean id="EncryptionUtil" class="net.sf.drawbridge.util.AESEncryptionUtil"> <constructor-arg value="1234567890abcdef"/> </bean> + + <bean id="FileOutputResultHandler" class="net.sf.drawbridge.exec.handler.FileOutputResultHandler"/> + + <bean id="NoOpResultHandler" class="net.sf.drawbridge.exec.handler.NoOpResultHandler"/> </beans> Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java 2008-08-29 03:12:07 UTC (rev 49) @@ -20,8 +20,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import net.sf.drawbridge.domain.DrawbridgeService; - import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java 2008-08-29 03:12:07 UTC (rev 49) @@ -43,6 +43,7 @@ databaseId=new Integer(request.getParameter("databaseId")); } mav.addObject("runAsList", drawbridgeService.listRunAsAccounts(databaseId)); + mav.addObject("handlerList", drawbridgeService.listResultHandlers()); return mav; } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java 2008-08-29 03:12:07 UTC (rev 49) @@ -40,7 +40,7 @@ public class AddOrEditJobSubmitController extends AbstractJobController { private static final Log LOG=LogFactory.getLog(AddOrEditJobSubmitController.class); - + @RequestMapping(value="/AddOrEditJobSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav=new ModelAndView("redirect:/ManageJobs.do"); @@ -80,7 +80,9 @@ null, null, null, null, new Boolean(request.getParameter("active")), - request.getParameter("schedule")); + request.getParameter("schedule"), + request.getParameter("handler"), + request.getParameter("handlerParams")); drawbridgeService.addJob(job); messages.add(new StatusMessage(Status.SUCCESS,"Successfully created job: "+name,null)); } catch(Exception ex){ @@ -105,7 +107,9 @@ null, null, null, null, new Boolean(request.getParameter("active")), - request.getParameter("schedule")); + request.getParameter("schedule"), + request.getParameter("handler"), + request.getParameter("handlerParams")); drawbridgeService.updateJob(job); messages.add(new StatusMessage(Status.SUCCESS,"Successfully updated job: "+name,null)); } catch(Exception ex){ Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobSubmitController.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobSubmitController.java 2008-08-29 03:12:07 UTC (rev 49) @@ -18,10 +18,13 @@ package net.sf.drawbridge.controller.job; import java.util.List; +import java.util.Map; +import java.util.Properties; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import net.sf.drawbridge.exec.handler.ResultHandler; import net.sf.drawbridge.vo.Job; import net.sf.drawbridge.vo.QueryParam; @@ -40,7 +43,13 @@ Job job = drawbridgeService.getJob(jobId); List<QueryParam> queryParams = drawbridgeService.getQueryParams(job.getQuery(),true); fillInValues(queryParams,request); - mav.addObject("results",drawbridgeService.executeJob(jobId, queryParams)); + List<Map<String, Object>> results = drawbridgeService.executeJob(jobId, queryParams); + mav.addObject("results",results); + + ResultHandler handler = drawbridgeService.getResultHandler(job.getHandler()); + Properties params = drawbridgeService.getHandlerParams(job.getHandlerParams()); + handler.handleQuery(results, params); + return mav; } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/hibernate/hbm/Job.hbm.xml 2008-08-29 03:12:07 UTC (rev 49) @@ -62,5 +62,14 @@ <property name="schedule" type="string" length="128"> <column name="SCHEDULE"/> </property> + + <property name="handler" type="string" length="128"> + <column name="HANDLER"/> + </property> + + <property name="handlerParams" type="string" length="512"> + <column name="HANDLER_PARAMS"/> + </property> + </class> </hibernate-mapping> \ No newline at end of file Modified: trunk/drawbridge/src/java/net/sf/drawbridge/domain/DefaultDrawbridgeService.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/domain/DefaultDrawbridgeService.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/java/net/sf/drawbridge/domain/DefaultDrawbridgeService.java 2008-08-29 03:12:07 UTC (rev 49) @@ -17,9 +17,11 @@ */ package net.sf.drawbridge.domain; +import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; import net.sf.drawbridge.dao.DatabaseDao; @@ -30,6 +32,8 @@ import net.sf.drawbridge.dao.UserDao; import net.sf.drawbridge.exec.JobExecuter; import net.sf.drawbridge.exec.QueryParser; +import net.sf.drawbridge.exec.handler.ResultHandler; +import net.sf.drawbridge.util.StringPropertiesConverter; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Driver; import net.sf.drawbridge.vo.ExecutionContext; @@ -39,8 +43,12 @@ import net.sf.drawbridge.vo.RunAsAccount; import net.sf.drawbridge.vo.User; -public class DefaultDrawbridgeService implements DrawbridgeService { +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +public class DefaultDrawbridgeService implements DrawbridgeService, ApplicationContextAware { + private final UserDao userDao; private final GroupDao groupDao; @@ -57,9 +65,13 @@ private final JobExecuter executer; + private ApplicationContext context; + + private StringPropertiesConverter stringPropertiesConverter; + public DefaultDrawbridgeService(UserDao userDao, GroupDao groupDao, RunAsAccountDao runAsAccountDao, DatabaseDao databaseDao, JobDao jobDao, DriverDao driverDao, QueryParser queryParser, - JobExecuter jobExecuter) { + JobExecuter jobExecuter, StringPropertiesConverter stringPropertiesConverter) { this.userDao = userDao; this.groupDao = groupDao; this.runAsAccountDao = runAsAccountDao; @@ -68,8 +80,13 @@ this.driverDao = driverDao; this.parser = queryParser; this.executer = jobExecuter; + this.stringPropertiesConverter = stringPropertiesConverter; } + public void setApplicationContext(ApplicationContext context) throws BeansException { + this.context = context; + } + private void setJobActive(Long jobId, boolean isActive) { Job job = jobDao.get(jobId); if (job != null) { @@ -300,4 +317,17 @@ public List<QueryParam> getQueryParams(String query, boolean returnDuplicates) { return parser.getQueryParams(query, returnDuplicates); } + + public List<String> listResultHandlers() { + return Arrays.asList(context.getBeanNamesForType(ResultHandler.class)); + } + + public ResultHandler getResultHandler(String name) { + return (ResultHandler) context.getBean(name); + } + + public Properties getHandlerParams(String handlerParams) throws Exception{ + return stringPropertiesConverter.convertToProperties(handlerParams); + } + } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/domain/DrawbridgeService.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/domain/DrawbridgeService.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/java/net/sf/drawbridge/domain/DrawbridgeService.java 2008-08-29 03:12:07 UTC (rev 49) @@ -19,8 +19,10 @@ import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; +import net.sf.drawbridge.exec.handler.ResultHandler; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Driver; import net.sf.drawbridge.vo.ExecutionContext; @@ -90,5 +92,8 @@ public List<QueryParam> getQueryParams(String query, boolean returnDuplicates); public String getPreparedStatementQuery(String query); + public List<String> listResultHandlers(); + public ResultHandler getResultHandler(String name); + public Properties getHandlerParams(String handlerParams) throws Exception; } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/domain/SecureDrawbridgeService.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/domain/SecureDrawbridgeService.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/java/net/sf/drawbridge/domain/SecureDrawbridgeService.java 2008-08-29 03:12:07 UTC (rev 49) @@ -2,9 +2,11 @@ import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; import net.sf.drawbridge.DrawbridgeRuntimeException; +import net.sf.drawbridge.exec.handler.ResultHandler; import net.sf.drawbridge.security.SecurityService; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Driver; @@ -233,4 +235,16 @@ insecureService.updateRunAsAccount(newRunAsAccount); } + public List<String> listResultHandlers() { + return insecureService.listResultHandlers(); + } + + public ResultHandler getResultHandler(String name) { + return insecureService.getResultHandler(name); + } + + public Properties getHandlerParams(String handlerParams) throws Exception { + return insecureService.getHandlerParams(handlerParams); + } + } Added: trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/FileOutputResultHandler.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/FileOutputResultHandler.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/FileOutputResultHandler.java 2008-08-29 03:12:07 UTC (rev 49) @@ -0,0 +1,48 @@ +package net.sf.drawbridge.exec.handler; + +import java.io.File; +import java.io.PrintStream; +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import net.sf.drawbridge.exec.output.CsvResultWriter; +import net.sf.drawbridge.exec.output.ResultWriter; +import net.sf.drawbridge.util.DateService; +import net.sf.drawbridge.util.SystemDateService; + +public class FileOutputResultHandler implements ResultHandler { + + private String dateFormat = "yyyyMMddHHmmssSSS"; + private ResultWriter writer; + private DateService dateService; + + public FileOutputResultHandler(){ + this(new CsvResultWriter(), new SystemDateService()); + } + + public FileOutputResultHandler(ResultWriter writer, DateService dateService){ + this.writer = writer; + this.dateService = dateService; + } + + public void handleQuery(List<Map<String, Object>> results, Properties params) throws Exception { + System.out.println(params); + String fileDir = params.getProperty("fileDir","."); + String filePrefix = params.getProperty("filePrefix"); + String fileSuffix = params.getProperty("fileSuffix","txt"); + SimpleDateFormat format = new SimpleDateFormat(dateFormat); + String date=format.format(dateService.getDate()); + File file=new File(fileDir, filePrefix+"_"+date+"."+fileSuffix); + System.out.println(file.getAbsolutePath()); + PrintStream out = null; + try{ + out = new PrintStream(file); + writer.writeResults(results, out); + } finally{ + try{ out.close(); } catch(Exception ex){ex.printStackTrace();} + } + } + +} Added: trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/NoOpResultHandler.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/NoOpResultHandler.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/NoOpResultHandler.java 2008-08-29 03:12:07 UTC (rev 49) @@ -0,0 +1,11 @@ +package net.sf.drawbridge.exec.handler; + +import java.util.List; +import java.util.Map; +import java.util.Properties; + +public class NoOpResultHandler implements ResultHandler { + + public void handleQuery(List<Map<String, Object>> results, Properties params) throws Exception {} + +} Added: trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/ResultHandler.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/ResultHandler.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/exec/handler/ResultHandler.java 2008-08-29 03:12:07 UTC (rev 49) @@ -0,0 +1,11 @@ +package net.sf.drawbridge.exec.handler; + +import java.util.List; +import java.util.Map; +import java.util.Properties; + +public interface ResultHandler { + + public void handleQuery(List<Map<String, Object>> results, Properties params) throws Exception; + +} Added: trunk/drawbridge/src/java/net/sf/drawbridge/exec/output/CsvResultWriter.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/exec/output/CsvResultWriter.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/exec/output/CsvResultWriter.java 2008-08-29 03:12:07 UTC (rev 49) @@ -0,0 +1,53 @@ +package net.sf.drawbridge.exec.output; + +import java.io.PrintStream; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class CsvResultWriter implements ResultWriter { + + public void writeResults(List<Map<String, Object>> results, PrintStream out) throws Exception { + if(results!=null){ + Set<String> cols = results.get(0).keySet(); + writeHeader(cols, out); + + for (Map<String, Object> row : results) { + boolean first=true; + for (String col : cols) { + if(!first){ + out.print(","); + } + out.print(format(row.get(col))); + first=false; + } + out.print("\n"); + } + } + } + + private void writeHeader(Set<String> cols, PrintStream out) { + boolean first=true; + for (String col : cols) { + if(!first){ + out.print(","); + } + out.print(col); + first=false; + } + out.print("\n"); + } + + private String format(Object object) { + if(object==null){ + return ""; + } else { + String text = object.toString(); + if(text.indexOf(',')!=-1){ + text='"'+text+'"'; + } + return text; + } + } + +} Added: trunk/drawbridge/src/java/net/sf/drawbridge/exec/output/ResultWriter.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/exec/output/ResultWriter.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/exec/output/ResultWriter.java 2008-08-29 03:12:07 UTC (rev 49) @@ -0,0 +1,11 @@ +package net.sf.drawbridge.exec.output; + +import java.io.PrintStream; +import java.util.List; +import java.util.Map; + +public interface ResultWriter { + + public void writeResults(List<Map<String, Object>> results, PrintStream out) throws Exception; + +} Added: trunk/drawbridge/src/java/net/sf/drawbridge/util/DateService.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/util/DateService.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/util/DateService.java 2008-08-29 03:12:07 UTC (rev 49) @@ -0,0 +1,12 @@ +package net.sf.drawbridge.util; + +import java.util.Date; + +/** + * This interface is used so that unit tests can inject a date instead of using the system date; + */ +public interface DateService { + + public Date getDate(); + +} Added: trunk/drawbridge/src/java/net/sf/drawbridge/util/DefaultStringPropertiesConverter.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/util/DefaultStringPropertiesConverter.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/util/DefaultStringPropertiesConverter.java 2008-08-29 03:12:07 UTC (rev 49) @@ -0,0 +1,31 @@ +package net.sf.drawbridge.util; + +import java.io.ByteArrayInputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Properties; + +public class DefaultStringPropertiesConverter implements StringPropertiesConverter { + + public Properties convertToProperties(String string) throws Exception{ + Properties props = new Properties(); + + ByteArrayInputStream in = new ByteArrayInputStream(string.getBytes()); + props.load(in); + + return props; + } + + @SuppressWarnings("unchecked") + public String convertToString(Properties props) { + ArrayList<String> keys = new ArrayList(props.keySet()); + Collections.sort(keys); + + StringBuilder buff = new StringBuilder(); + for (String key : keys) { + buff.append(key).append("=").append(props.getProperty(key)).append("\n"); + } + return buff.toString().trim(); + } + +} Added: trunk/drawbridge/src/java/net/sf/drawbridge/util/StringPropertiesConverter.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/util/StringPropertiesConverter.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/util/StringPropertiesConverter.java 2008-08-29 03:12:07 UTC (rev 49) @@ -0,0 +1,11 @@ +package net.sf.drawbridge.util; + +import java.util.Properties; + +public interface StringPropertiesConverter { + + public String convertToString(Properties properties); + + public Properties convertToProperties(String string) throws Exception; + +} Added: trunk/drawbridge/src/java/net/sf/drawbridge/util/SystemDateService.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/util/SystemDateService.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/util/SystemDateService.java 2008-08-29 03:12:07 UTC (rev 49) @@ -0,0 +1,11 @@ +package net.sf.drawbridge.util; + +import java.util.Date; + +public class SystemDateService implements DateService { + + public Date getDate() { + return new Date(); + } + +} Modified: trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/java/net/sf/drawbridge/vo/Job.java 2008-08-29 03:12:07 UTC (rev 49) @@ -32,13 +32,15 @@ private Calendar approvedOn; private String active; private String schedule; + private String handler; + private String handlerParams; public Job() { } public Job(Long id, String name, RunAsAccount runAs, String query, User submittedBy, Calendar submittedOn, User reviewedBy, Calendar reviewedOn, User approvedBy, Calendar approvedOn, - boolean active, String schedule) { + boolean active, String schedule, String handler, String handlerParams) { super(id); setName(name); setRunAsAccount(runAs); @@ -51,6 +53,8 @@ setApprovedOn(approvedOn); setActive(active?"Y":"N"); setSchedule(schedule); + setHandler(handler); + setHandlerParams(handlerParams); } public String getName() { @@ -113,6 +117,22 @@ this.schedule = schedule; } + public String getHandler() { + return handler; + } + + public void setHandler(String handler) { + this.handler = handler; + } + + public String getHandlerParams() { + return handlerParams; + } + + public void setHandlerParams(String handlerParams) { + this.handlerParams = handlerParams; + } + @Override public int hashCode() { final int prime = 31; @@ -128,6 +148,8 @@ result = prime * result + ((schedule == null) ? 0 : schedule.hashCode()); result = prime * result + ((submittedBy == null) ? 0 : submittedBy.hashCode()); result = prime * result + ((submittedOn == null) ? 0 : submittedOn.hashCode()); + result = prime * result + ((handler == null) ? 0 : handler.hashCode()); + result = prime * result + ((handlerParams == null) ? 0 : handlerParams.hashCode()); return result; } @@ -195,6 +217,16 @@ return false; } else if (!submittedOn.equals(other.submittedOn)) return false; + if (handler == null) { + if (other.handler != null) + return false; + } else if (!handler.equals(other.handler)) + return false; + if (handlerParams == null) { + if (other.handlerParams != null) + return false; + } else if (!handlerParams.equals(other.handlerParams)) + return false; return true; } @@ -246,6 +278,8 @@ .append("approvedOn = ").append(this.approvedOn).append(", ") .append("active = ").append(this.active).append(", ") .append("schedule = ").append(this.schedule) + .append("handler = ").append(this.handler) + .append("handlerParams = ").append(this.handlerParams) .append("]"); return retValue.toString(); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/vo/ValueObject.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/vo/ValueObject.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/java/net/sf/drawbridge/vo/ValueObject.java 2008-08-29 03:12:07 UTC (rev 49) @@ -42,6 +42,7 @@ return result; } + @SuppressWarnings("unchecked") @Override public boolean equals(Object obj) { if (this == obj) @@ -50,7 +51,7 @@ return false; if (getClass() != obj.getClass()) return false; - final ValueObject other = (ValueObject) obj; + final ValueObject<I> other = (ValueObject<I>) obj; if (id == null) { if (other.id != null) return false; Modified: trunk/drawbridge/src/sql/create_drawbridge_schema.sql =================================================================== --- trunk/drawbridge/src/sql/create_drawbridge_schema.sql 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/sql/create_drawbridge_schema.sql 2008-08-29 03:12:07 UTC (rev 49) @@ -76,6 +76,8 @@ APPROVED_ON TIMESTAMP, ACTIVE VARCHAR(1) NOT NULL, SCHEDULE VARCHAR(128), + HANDLER VARCHAR(128), + HANDLER_PARAMS VARCHAR(512), PRIMARY KEY (ID), CONSTRAINT FK_DB_JOB_DB_RUN_AS FOREIGN KEY FK_DB_JOB_DB_RUN_AS (RUN_AS_ID) REFERENCES DB_RUN_AS (ID), CONSTRAINT FK_DB_JOB_SUBMITTED_BY FOREIGN KEY FK_DB_JOB_SUBMITTED_BY (SUBMITTED_BY) REFERENCES DB_USER (ID), Modified: trunk/drawbridge/src/sql/example_data.sql =================================================================== --- trunk/drawbridge/src/sql/example_data.sql 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/sql/example_data.sql 2008-08-29 03:12:07 UTC (rev 49) @@ -14,6 +14,6 @@ INSERT INTO DB_USER_GROUP (USER_ID,GROUP_ID) VALUES (-1,-1); -INSERT INTO DB_JOB (ID,NAME,RUN_AS_ID,QUERY,SUBMITTED_BY,SUBMITTED_ON,REVIEWED_BY,REVIEWED_ON,APPROVED_BY,APPROVED_ON,ACTIVE,SCHEDULE) VALUES (-1,'all jobs',-2,'SELECT * FROM DB_JOB',-1,{d '2008-03-19'},null,null,null,null,'Y',null); +INSERT INTO DB_JOB (ID,NAME,RUN_AS_ID,QUERY,SUBMITTED_BY,SUBMITTED_ON,REVIEWED_BY,REVIEWED_ON,APPROVED_BY,APPROVED_ON,ACTIVE,SCHEDULE,HANDLER,HANDLER_PARAMS) VALUES (-1,'all jobs',-2,'SELECT * FROM DB_JOB',-1,{d '2008-03-19'},null,null,null,null,'Y',null,'NoOpResultHandler',null); COMMIT; \ No newline at end of file Modified: trunk/drawbridge/src/test/db.script =================================================================== --- trunk/drawbridge/src/test/db.script 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/test/db.script 2008-08-29 03:12:07 UTC (rev 49) @@ -7,7 +7,7 @@ CREATE MEMORY TABLE DB_DRIVER(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,NAME VARCHAR(32) NOT NULL,CLASS_NAME VARCHAR(128) NOT NULL,CONSTRAINT UNQ_DB_DRIVER UNIQUE(NAME)) CREATE MEMORY TABLE DB_DATABASE(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,NAME VARCHAR(32) NOT NULL,JDBC_URL VARCHAR(128) NOT NULL,DRIVER_ID INTEGER NOT NULL,CONSTRAINT FK_DB_DATABASE_DB_DRIVER FOREIGN KEY(DRIVER_ID) REFERENCES PUBLIC.DB_DRIVER(ID),CONSTRAINT UNQ_DB_DATABASE UNIQUE(NAME)) CREATE MEMORY TABLE DB_RUN_AS(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,USER_NAME VARCHAR(16) NOT NULL,ENC_PASSWORD VARCHAR(32) NOT NULL,DATABASE_ID INTEGER NOT NULL,CONSTRAINT FK_DB_RUN_AS_DB_DATABASE FOREIGN KEY(DATABASE_ID) REFERENCES PUBLIC.DB_DATABASE(ID),CONSTRAINT UNQ_DB_RUN_AS UNIQUE(USER_NAME,DATABASE_ID)) -CREATE MEMORY TABLE DB_JOB(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,RUN_AS_ID INTEGER NOT NULL,QUERY VARCHAR(1024) NOT NULL,SUBMITTED_BY INTEGER NOT NULL,SUBMITTED_ON TIMESTAMP NOT NULL,REVIEWED_BY INTEGER,REVIEWED_ON TIMESTAMP,APPROVED_BY INTEGER,APPROVED_ON TIMESTAMP,ACTIVE VARCHAR(1) NOT NULL,SCHEDULE VARCHAR(128),CONSTRAINT FK_DB_JOB_DB_RUN_AS FOREIGN KEY(RUN_AS_ID) REFERENCES PUBLIC.DB_RUN_AS(ID),CONSTRAINT FK_DB_JOB_SUBMITTED_BY FOREIGN KEY(SUBMITTED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_REVIEWED_BY FOREIGN KEY(REVIEWED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_APPROVED_BY FOREIGN KEY(APPROVED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT UNQ_DB_JOB UNIQUE(NAME),CONSTRAINT CHK_DB_JOB_ACTIVE CHECK((DB_JOB.ACTIVE) IN (('Y'),('N')))) +CREATE MEMORY TABLE DB_JOB(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 2) NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,RUN_AS_ID INTEGER NOT NULL,QUERY VARCHAR(1024) NOT NULL,SUBMITTED_BY INTEGER NOT NULL,SUBMITTED_ON TIMESTAMP NOT NULL,REVIEWED_BY INTEGER,REVIEWED_ON TIMESTAMP,APPROVED_BY INTEGER,APPROVED_ON TIMESTAMP,ACTIVE VARCHAR(1) NOT NULL,SCHEDULE VARCHAR(128),HANDLER VARCHAR(128),HANDLER_PARAMS VARCHAR(512),CONSTRAINT FK_DB_JOB_DB_RUN_AS FOREIGN KEY(RUN_AS_ID) REFERENCES PUBLIC.DB_RUN_AS(ID),CONSTRAINT FK_DB_JOB_SUBMITTED_BY FOREIGN KEY(SUBMITTED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_REVIEWED_BY FOREIGN KEY(REVIEWED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT FK_DB_JOB_APPROVED_BY FOREIGN KEY(APPROVED_BY) REFERENCES PUBLIC.DB_USER(ID),CONSTRAINT UNQ_DB_JOB UNIQUE(NAME),CONSTRAINT CHK_DB_JOB_ACTIVE CHECK((DB_JOB.ACTIVE) IN (('Y'),('N')))) CREATE MEMORY TABLE DB_PERMISSION_LIST(ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(64) NOT NULL,PERMISSION_TYPE VARCHAR(1) NOT NULL,CONSTRAINT UNQ_DB_PERMISSION UNIQUE(NAME,PERMISSION_TYPE),CONSTRAINT CHK_DB_PERMISSION_LIST_PERMISSION_TYPE CHECK((DB_PERMISSION_LIST.PERMISSION_TYPE) IN (('S'),('D'),('R')))) CREATE MEMORY TABLE DB_SYSTEM_PERMISSION(GROUP_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,PRIMARY KEY(GROUP_ID,PERMISSION_ID),CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_SYSTEM_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE) CREATE MEMORY TABLE DB_DATABASE_PERMISSION(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,GROUP_ID INTEGER NOT NULL,DATABASE_ID INTEGER NOT NULL,PERMISSION_ID INTEGER NOT NULL,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_GROUP FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.DB_GROUP(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_DATABASE FOREIGN KEY(DATABASE_ID) REFERENCES PUBLIC.DB_DATABASE(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_DB_DATABASE_PERMISSION_DB_PERMISSION_LIST FOREIGN KEY(PERMISSION_ID) REFERENCES PUBLIC.DB_PERMISSION_LIST(ID) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT UNQ_DB_GRAP UNIQUE(GROUP_ID,DATABASE_ID,PERMISSION_ID)) @@ -36,8 +36,8 @@ INSERT INTO DB_DATABASE VALUES(0,'HSQLDB In-Memory Database','jdbc:hsqldb:mem:.',0) INSERT INTO DB_RUN_AS VALUES(0,'sa','base64',0) INSERT INTO DB_RUN_AS VALUES(1,'dev','base64',0) -INSERT INTO DB_JOB VALUES(0,'Job 1',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','schedule') -INSERT INTO DB_JOB VALUES(1,'Job 2',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','schedule') +INSERT INTO DB_JOB VALUES(0,'Job 1',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','schedule','handler','testKey1=testVal1\u000atestKey2=testVal2') +INSERT INTO DB_JOB VALUES(1,'Job 2',0,'select count(*) from dual',0,'2008-03-19 19:00:00.000000',1,'2008-03-20 18:00:00.000000',1,'2008-03-20 18:00:01.000000','Y','schedule','handler','testKey1=testVal1\u000atestKey2=testVal2') INSERT INTO DB_PERMISSION_LIST VALUES(1,'ADD USER','S') INSERT INTO DB_PERMISSION_LIST VALUES(2,'EDIT USER','S') INSERT INTO DB_PERMISSION_LIST VALUES(3,'DELETE USER','S') Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) @@ -22,7 +22,6 @@ import java.util.List; import java.util.Map; -import net.sf.drawbridge.controller.job.AddOrEditJobController; import net.sf.drawbridge.domain.DrawbridgeService; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Driver; @@ -41,6 +40,7 @@ private Driver driver = new Driver(1, "oracle", "oracle.jdbc.JdbcDriver"); private Database db = new Database(1, "db", "jdbc:db", driver); private RunAsAccount runAsAccount = new RunAsAccount(1,"userName","password",db); + private String params="testKey1=testVal1\ntestKey2=testVal2"; public void setUp(){ target=new AddOrEditJobController(); @@ -51,10 +51,14 @@ List<RunAsAccount> runAsList=new ArrayList<RunAsAccount>(); runAsList.add(runAsAccount); - Job job=new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,null); + List<String> handlerList=new ArrayList<String>(); + handlerList.add("TestResultHandler"); + Job job=new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,null,null,params); + mockDrawbridgeService.expects(atLeastOnce()).method("getJob").with(eq(new Long(1))).will(returnValue(job)); mockDrawbridgeService.expects(once()).method("listRunAsAccounts").will(returnValue(runAsList)); + mockDrawbridgeService.expects(once()).method("listResultHandlers").will(returnValue(handlerList)); MockHttpServletRequest mockRequest=new MockHttpServletRequest(); mockRequest.setParameter("jobId", "1"); @@ -65,6 +69,7 @@ Map<String,Object> model=new HashMap<String,Object>(); model.put("job", job); model.put("runAsList", runAsList); + model.put("handlerList", handlerList); assertEquals(model,mav.getModel()); } @@ -73,7 +78,11 @@ List<RunAsAccount> runAsList=new ArrayList<RunAsAccount>(); runAsList.add(runAsAccount); + List<String> handlerList=new ArrayList<String>(); + handlerList.add("TestResultHandler"); + mockDrawbridgeService.expects(once()).method("listRunAsAccounts").will(returnValue(runAsList)); + mockDrawbridgeService.expects(once()).method("listResultHandlers").will(returnValue(handlerList)); MockHttpServletRequest mockRequest=new MockHttpServletRequest(); mockRequest.setParameter("databaseId", "1"); @@ -83,6 +92,7 @@ Map<String,Object> model=new HashMap<String,Object>(); model.put("runAsList", runAsList); + model.put("handlerList", handlerList); assertEquals(model,mav.getModel()); } Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) @@ -22,7 +22,6 @@ import java.util.List; import net.sf.drawbridge.controller.AbstractDrawbridgeController; -import net.sf.drawbridge.controller.job.AddOrEditJobSubmitController; import net.sf.drawbridge.domain.DrawbridgeService; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Driver; @@ -40,12 +39,14 @@ public class AddOrEditJobSubmitControllerTest extends MockObjectTestCase { + private Mock mockDrawbridgeService=mock(DrawbridgeService.class); + private AddOrEditJobSubmitController target; + private User user = new User(0, "adam", "Adam", "Cresse", true); private Driver driver = new Driver(1, "oracle", "oracle.jdbc.JdbcOracle"); private Database db = new Database(1, "oracle", "jdbc:db", driver); private RunAsAccount account = new RunAsAccount(1,"userName","password",db); - private Mock mockDrawbridgeService=mock(DrawbridgeService.class); - private AddOrEditJobSubmitController target; + private String params="testKey1=testVal1\ntestKey2=testVal2"; public void setUp(){ target=new AddOrEditJobSubmitController(); @@ -53,7 +54,7 @@ } public void testShouldAddJobAndReturnSuccessMessage() throws Exception{ - Job job=new Job(null,"name",account,"query",null,null,null,null,null,null,true,"schedule"); + Job job=new Job(null,"name",account,"query",null,null,null,null,null,null,true,"schedule","handler",params); mockDrawbridgeService.expects(once()).method("addJob").with(new JobConstraint(job)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); mockDrawbridgeService.expects(once()).method("getUser").with(eq(new Integer(-1))).will(returnValue(user)); @@ -64,6 +65,7 @@ mockRequest.setParameter("query", "query"); mockRequest.setParameter("active", "true"); mockRequest.setParameter("schedule", "schedule"); + mockRequest.setParameter("handler", "handler"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); assertEquals("redirect:/ManageJobs.do",mav.getViewName()); @@ -77,7 +79,7 @@ } public void testShouldEditJobAndReturnSuccessMessage() throws Exception{ - Job job=new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"schedule"); + Job job=new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"schedule","handler",params); mockDrawbridgeService.expects(once()).method("updateJob").with(new JobConstraint(job)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); mockDrawbridgeService.expects(once()).method("getUser").with(eq(new Integer(-1))).will(returnValue(user)); @@ -89,6 +91,7 @@ mockRequest.setParameter("query", "query"); mockRequest.setParameter("active", "true"); mockRequest.setParameter("schedule", "schedule"); + mockRequest.setParameter("handler", "handler"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); assertEquals("redirect:/ManageJobs.do",mav.getViewName()); @@ -103,7 +106,7 @@ @SuppressWarnings("unchecked") public void testShouldAddJobAndReturnFailureMessageOnException() throws Exception{ - Job job=new Job(null,"name",account,"query",null,null,null,null,null,null,true,"schedule"); + Job job=new Job(null,"name",account,"query",null,null,null,null,null,null,true,"schedule",null,params); RuntimeException ex=new RuntimeException("The Spanish Inquisition"); mockDrawbridgeService.expects(once()).method("addJob").with(new JobConstraint(job)).will(throwException(ex)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); @@ -116,6 +119,7 @@ mockRequest.setParameter("query", "query"); mockRequest.setParameter("active", "true"); mockRequest.setParameter("schedule", "schedule"); + mockRequest.setParameter("handler", "handler"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); assertEquals("redirect:/ManageJobs.do",mav.getViewName()); @@ -135,7 +139,7 @@ @SuppressWarnings("unchecked") public void testShouldEditJobAndReturnFailureMessageOnException() throws Exception{ - Job job=new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"schedule"); + Job job=new Job(1L,"name",account,"query",null,null,null,null,null,null,true,"schedule","handler",params); RuntimeException ex=new RuntimeException("The Spanish Inquisition"); mockDrawbridgeService.expects(once()).method("updateJob").with(new JobConstraint(job)).will(throwException(ex)); mockDrawbridgeService.expects(once()).method("getRunAsAccount").with(eq(1)).will(returnValue(account)); @@ -148,6 +152,7 @@ mockRequest.setParameter("query", "query"); mockRequest.setParameter("active", "true"); mockRequest.setParameter("schedule", "schedule"); + mockRequest.setParameter("handler", "handler"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); assertEquals("redirect:/ManageJobs.do",mav.getViewName()); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) @@ -22,7 +22,6 @@ import java.util.List; import net.sf.drawbridge.controller.AbstractDrawbridgeController; -import net.sf.drawbridge.controller.job.DeleteJobSubmitController; import net.sf.drawbridge.domain.DrawbridgeService; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Job; @@ -40,6 +39,7 @@ private Mock mockDrawbridgeService=mock(DrawbridgeService.class); private DeleteJobSubmitController target; + private String params="testKey1=testVal1\ntestKey2=testVal2"; public void setUp(){ target=new DeleteJobSubmitController(); @@ -50,7 +50,7 @@ User user = new User(2, "acresse", "Adam", "Cresse", true); Database db = new Database(new Integer(1), "name", "jdbcUrl", null); RunAsAccount runAsAccount = new RunAsAccount(2,"userName","password",db); - Job job=new Job(1L,"name",runAsAccount,"query",user,null,null,null,null,null,true,"schedule"); + Job job=new Job(1L,"name",runAsAccount,"query",user,null,null,null,null,null,true,"schedule","handler",params); mockDrawbridgeService.expects(once()).method("getJob").with(eq(new Long(1))).will(returnValue(job)); mockDrawbridgeService.expects(once()).method("deleteJob").with(eq(new Long(1))); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/ManagesJobControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) @@ -22,7 +22,6 @@ import java.util.List; import java.util.Map; -import net.sf.drawbridge.controller.job.ManageJobsController; import net.sf.drawbridge.domain.DrawbridgeService; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Job; @@ -37,6 +36,7 @@ private Mock mockDrawbridgeService=mock(DrawbridgeService.class); private ManageJobsController target; + private String params="testKey1=testVal1\ntestKey2=testVal2"; public void setUp(){ target=new ManageJobsController(); @@ -47,7 +47,7 @@ List<Job> jobList=new ArrayList<Job>(); Database db = new Database(1,"name", "jdbcUrl", null); RunAsAccount runAsAccount = new RunAsAccount(1,"userName","password",db); - jobList.add(new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,null)); + jobList.add(new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,null,"handler",params)); List<RunAsAccount> runAsList=new ArrayList<RunAsAccount>(); runAsList.add(runAsAccount); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) @@ -23,7 +23,6 @@ import java.util.List; import java.util.Map; -import net.sf.drawbridge.controller.job.RunJobController; import net.sf.drawbridge.domain.DrawbridgeService; import net.sf.drawbridge.vo.Database; import net.sf.drawbridge.vo.Driver; @@ -40,6 +39,7 @@ private Mock mockDrawbridgeService=mock(DrawbridgeService.class); private RunJobController target; + private String params="testKey1=testVal1\ntestKey2=testVal2"; public void setUp(){ target=new RunJobController(); @@ -50,7 +50,7 @@ Driver driver = new Driver(4,"name","class"); Database database=new Database(3,"name","url",driver); RunAsAccount runAsAccount = new RunAsAccount(2,"userName","password",database); - Job job = new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,null); + Job job = new Job(1L,"name",runAsAccount,"query",null,null,null,null,null,null,true,null,"handler",params); List<QueryParam> queryParams=new ArrayList<QueryParam>(); queryParams.add(new QueryParam(Types.VARCHAR,"name","value")); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/RunJobSubmitControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) @@ -22,9 +22,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Properties; -import net.sf.drawbridge.controller.job.RunJobSubmitController; import net.sf.drawbridge.domain.DrawbridgeService; +import net.sf.drawbridge.exec.handler.ResultHandler; import net.sf.drawbridge.vo.Job; import net.sf.drawbridge.vo.QueryParam; import net.sf.drawbridge.vo.RunAsAccount; @@ -37,16 +38,22 @@ public class RunJobSubmitControllerTest extends MockObjectTestCase { private Mock mockDrawbridgeService=mock(DrawbridgeService.class); + private Mock mockResultHandler=mock(ResultHandler.class); private RunJobSubmitController target; + private String paramsStr="testKey1=testVal1\ntestKey2=testVal2"; + Properties params=new Properties(); public void setUp(){ + params.setProperty("testKey1", "testVal1"); + params.setProperty("testKey2", "testVal2"); + target=new RunJobSubmitController(); target.setDrawbridgeService((DrawbridgeService) mockDrawbridgeService.proxy()); } public void testShouldReturnViewWithResults() throws Exception{ RunAsAccount account = new RunAsAccount(2, "username", "password", null); - Job job = new Job(1L,"name",account,"query",null,null,null,null,null,null,true,null); + Job job = new Job(1L,"name",account,"query",null,null,null,null,null,null,true,null,"handler",paramsStr); List<QueryParam> queryParams=new ArrayList<QueryParam>(); queryParams.add(new QueryParam(Types.VARCHAR,"name","value")); @@ -57,7 +64,9 @@ mockDrawbridgeService.expects(once()).method("getJob").with(eq(new Long(1))).will(returnValue(job)); mockDrawbridgeService.expects(once()).method("getQueryParams").with(eq("query"),eq(true)).will(returnValue(queryParams)); mockDrawbridgeService.expects(once()).method("executeJob").with(eq(new Long(1)),eq(queryParams)).will(returnValue(results)); - + mockDrawbridgeService.expects(once()).method("getResultHandler").with(eq("handler")).will(returnValue(mockResultHandler.proxy())); + mockDrawbridgeService.expects(once()).method("getHandlerParams").with(eq(paramsStr)).will(returnValue(params)); + mockResultHandler.expects(once()).method("handleQuery").with(eq(results),eq(params)); MockHttpServletRequest mockRequest=new MockHttpServletRequest(); mockRequest.setParameter("jobId", "1"); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/AddOrEditUserSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/AddOrEditUserSubmitControllerTest.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/AddOrEditUserSubmitControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) @@ -23,7 +23,6 @@ import net.sf.drawbridge.controller.AbstractControllerTest; import net.sf.drawbridge.controller.AbstractDrawbridgeController; -import net.sf.drawbridge.controller.user.AddOrEditUserSubmitController; import net.sf.drawbridge.domain.DrawbridgeService; import net.sf.drawbridge.vo.ExecutionContext; import net.sf.drawbridge.vo.Status; @@ -31,7 +30,6 @@ import net.sf.drawbridge.vo.User; import org.jmock.Mock; -import org.jmock.MockObjectTestCase; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.web.servlet.ModelAndView; Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/DeleteUserSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/DeleteUserSubmitControllerTest.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/DeleteUserSubmitControllerTest.java 2008-08-29 03:12:07 UTC (rev 49) @@ -27,7 +27,6 @@ import net.sf.drawbridge.vo.ExecutionContext; import net.sf.drawbridge.vo.Status; import net.sf.drawbridge.vo.StatusMessage; -import net.sf.drawbridge.vo.User; import org.jmock.Mock; import org.springframework.mock.web.MockHttpServletRequest; Modified: trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2008-04-24 01:43:24 UTC (rev 48) +++ trunk/drawbridge/src/test/net/sf/drawbridge/dao/JobDaoTest.java 2008-08-29 03:12:07 UTC (rev 49) @@ -40,6 +40,8 @@ private RunAsAccountDao runAsAccountDao; private AbstractPlatformTransactionManager txManager; + + private String params="testKey1=testVal1\ntestKey2=testVal2"; protected void setUp() { txManager = (AbstractPlatformTransactionManager) TestBeanFactory.getBean("TxManager"); @@ -48,21 +50,23 @@ userDao = (UserDao) TestBeanFactory.getBean("UserDao"); } - public void testShouldGetJobObject() throws Exception { - Job result = target.get(0L); - SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss"); - assertNotNull("result is null", result); - assertEquals("id", new Long(0), result.getId()); - assertEquals("name", "Job 1", result.getName()); - assertEquals("runAsAcount", new Integer(0), result.getRunAsAccount().getId()); - assertEquals("submittedBy", new Integer(0), result.getSubmittedBy().getId()); - assertEquals("submittedOn", "03-19-2008 19:00:00", df.format(result.getSubmittedOn().getTime())); - assertEquals("reviewedBy", new Integer(1), result.getReviewedBy().getId()); - assertEquals("reviewedOn", "03-20-2008 18:00:00", df.format(result.getReviewedOn().getTime())); - assertEquals("approvedBy", new Integer(1), result.getApprovedBy().getId()); - assertEquals("approvedOn", "03-20-2008 18:00:01", df.format(result.getApprovedOn().getTime())); - assertTrue("active", result.isActive()); - assertEquals("schedule", "schedule", result.getSchedule()); + public void testShouldGetJobObject() throws Exception { + Job result = target.get(0L); + SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss"); + assertNotNull("result is null", result); + assertEquals("id", new Long(0), result.getId()); + assertEquals("name", "Job 1", result.getName()); + assertEquals("runAsAcount", new Integer(0), result.getRunAsAccount().getId()); + assertEquals("submittedBy", new Integer(0), result.getSubmittedBy().getId()); + assertEquals("submittedOn", "03-19-2008 19:00:00", df.format(result.getSubmittedOn().getTime())); + assertEquals("reviewedBy", new Integer(1), result.getReviewedBy().getId()); + assertEquals("reviewedOn", "03-20-2008 18:00:00", df.format(result.getReviewedOn().getTime())); + assertEquals("approvedBy", new Integer(1), result.getApprovedBy().getId()); + assertEquals("approvedOn", "03-20-2008 18:00:01", df.format(result.getApprovedOn().getTime())); + assertTrue("active", result.isActive()); + assertEquals("schedule", "schedule", result.getSchedule()); + assertEquals("handler", "handler", result.getHandler()); + assertEquals("handlerParams", params, result.getHandlerParams()); } public void testShouldCreateNewJobObject() throws Exception { @@ -70,7 +74,7 @@ try { User submitter = userDao.get(0); RunAsAccount account = runAsAccountDao.get(0); - Job job = new Job(null, "A new job", account, "select count(*) from dual", submitter, Calendar.getInstance(), null, null, null, null, true, "schedule"); + Job job = new Job(null, "A new job", account, "select count(*) from dual", submitter, Calendar.getInstance(), null, null, null, null, true, "schedule", "handler", params); target.create(job); assertNotNull("id is still null", job.getId()); } finally { @@ -121,4 +125,5 @@ public void testShouldRetrieveAllJobsBasedOnDatabaseId() throws Exception { assertEquals(2, target.getJobsForDatabase(0).size()); } + } Added: trunk/drawbridge/src/test/net/sf/drawbridge/exec/handler/FileOutputResultHandlerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/exec/handler/FileOutputResultHandlerTest.java (rev 0) +++ trunk/drawbridge/src/test/net/sf/drawbridge/exec/handler/FileOutputResultHandlerTest.java 2008-08-29 03:12:07 UTC (rev 49) @@ -0,0 +1,70 @@ +package net.sf.drawbridge.exec.handler; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import net.sf.drawbridge.exec.output.ResultWriter; +import net.sf.drawbridge.util.DateService; + +import org.jmock.Mock; +import org.jmock.MockObjectTestCase; + +public class FileOutputResultHandlerTest extends MockObjectTestCase { + + public void testShouldWriteResultsToFile() throws Exception{ + String dir = System.getProperty("java.io.tmpdir"); + + File outputFile=new File(dir,"test_19700101000000000.log"); + outputFile.delete(); + + ResultWriter writer = new ResultWriter(){ + + public void writeResults(List<Map<String, Object>> results, PrintStream out) throws Exception { + out.println("test"); + } + + }; + + Mock mockDateService = mock(DateService.class); + Calendar cal = Calendar.getInstance(); + cal.set(1970, Calendar.JANUARY, 1, 0, 0, 0); + cal.set(Calendar.MILLISECOND, 0); + mockDateService.expects(once()).method("getDate").will(returnValue(cal.getTime())); + + List<Map<String, Object>> results = new ArrayList<Map<String,Object>>(); + Map<String, Object> row1=new LinkedHashMap<String, Object>(); + row1.put("col1", "val1"); + row1.put("col2", new Integer(100)); + row1.put("col3", null); + results.add(row1); + + Map<String, Object> row2=new LinkedHashMap<String, Object>(); + row2.put("col1", "val2"); + row2.put("col2", null); + row2.put("col3", "123,456"); + results.add(row2); + + FileOutputResultHandler target = new FileOutputResultHandler(writer, (DateService) mockDateService.proxy()); + + Properties params = new Properties(); + params.setProperty("fileDir",dir); + params.setProperty("filePrefix","test"); + params.setProperty("fileSuffix","log"); + + target.handleQuery(results, params); + + BufferedReader in=new BufferedReader(new FileReader(outputFile)); + assertEquals("test",in.readLine()); + in.close(); + + } + +} Added: trunk/drawbridge/src/test/net/sf/drawbridge/exec/output/CsvResultWriterTest.java =================================================================== --- tru... [truncated message content] |
From: <ac...@us...> - 2008-04-24 01:43:34
|
Revision: 48 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=48&view=rev Author: acresse Date: 2008-04-23 18:43:24 -0700 (Wed, 23 Apr 2008) Log Message: ----------- dwr the permissions Modified Paths: -------------- trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml trunk/drawbridge/WebContent/WEB-INF/jsp/permissions/manage.jsp trunk/drawbridge/WebContent/WEB-INF/web.xml trunk/drawbridge/WebContent/js/drawbridge.js trunk/drawbridge/build.xml trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java Added Paths: ----------- trunk/drawbridge/WebContent/WEB-INF/dwr.xml trunk/drawbridge/src/java/net/sf/drawbridge/dwr/ trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrDrawbridgeFacade.java trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrDrawbridgeFacade.java Modified: trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml 2008-04-23 00:48:51 UTC (rev 47) +++ trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml 2008-04-24 01:43:24 UTC (rev 48) @@ -26,4 +26,8 @@ <property name="defaultErrorView" value="error"/> </bean> + <bean id="DwrDrawbridgeFacade" class="net.sf.drawbridge.dwr.WrapperDwrDrawbridgeFacade"> + <constructor-arg ref="DrawbridgeService"/> + </bean> + </beans> Added: trunk/drawbridge/WebContent/WEB-INF/dwr.xml =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/dwr.xml (rev 0) +++ trunk/drawbridge/WebContent/WEB-INF/dwr.xml 2008-04-24 01:43:24 UTC (rev 48) @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"> +<dwr> + <allow> + <create creator="spring" javascript="DrawbridgeService"> + <param name="beanName" value="DwrDrawbridgeFacade"/> + </create> + <convert converter="bean" match="net.sf.drawbridge.vo.RunAsAccount"/> + </allow> +</dwr> \ No newline at end of file Modified: trunk/drawbridge/WebContent/WEB-INF/jsp/permissions/manage.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/permissions/manage.jsp 2008-04-23 00:48:51 UTC (rev 47) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/permissions/manage.jsp 2008-04-24 01:43:24 UTC (rev 48) @@ -20,8 +20,10 @@ <%@taglib prefix="display" uri="http://displaytag.sf.net"%> <%@page import="net.sf.drawbridge.vo.Permission"%> <%@ include file="../header.jsp" %> -<script language="JavaScript" src="js/drawbridge.js" /> - +<script language="JavaScript" src="js/drawbridge.js"></script> +<script type='text/javascript' src='/drawbridge/dwr/interface/DrawbridgeService.js'></script> +<script type='text/javascript' src='/drawbridge/dwr/engine.js'></script> +<script type='text/javascript' src='/drawbridge/dwr/util.js'></script> <div id="instructions"> Please choose a group to continue. </div> Modified: trunk/drawbridge/WebContent/WEB-INF/web.xml =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/web.xml 2008-04-23 00:48:51 UTC (rev 47) +++ trunk/drawbridge/WebContent/WEB-INF/web.xml 2008-04-24 01:43:24 UTC (rev 48) @@ -2,16 +2,39 @@ <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>drawbridge</display-name> + <context-param> + <param-name>contextConfigLocation</param-name> + <param-value>/WEB-INF/drawbridge-servlet.xml</param-value> + </context-param> + + <listener> + <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> + </listener> + <servlet> <servlet-name>drawbridge</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> + <servlet> + <servlet-name>dwr-invoker</servlet-name> + <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> + <init-param> + <param-name>debug</param-name> + <param-value>true</param-value> + </init-param> + </servlet> + <servlet-mapping> <servlet-name>drawbridge</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> + <servlet-mapping> + <servlet-name>dwr-invoker</servlet-name> + <url-pattern>/dwr/*</url-pattern> + </servlet-mapping> + <welcome-file-list> <welcome-file>MainMenu.do</welcome-file> </welcome-file-list> Modified: trunk/drawbridge/WebContent/js/drawbridge.js =================================================================== --- trunk/drawbridge/WebContent/js/drawbridge.js 2008-04-23 00:48:51 UTC (rev 47) +++ trunk/drawbridge/WebContent/js/drawbridge.js 2008-04-24 01:43:24 UTC (rev 48) @@ -4,32 +4,50 @@ function handleGroupChange(){ isFirst=isFirstSelected('groupSelect'); - setVisibility('systemDiv',isFirst); - setVisibility('databaseDiv',isFirst); - setVisibility('submitDiv',isFirst); if(isFirst){ + setVisibility('systemDiv',false); + setVisibility('databaseDiv',false); + setVisibility('submitDiv',false); setVisibility('runAsDiv',false); setVisibility('permissionsDiv',false); + select=document.getElementById('databaseSelect'); + select.selectedIndex=0 + } else { + setVisibility('systemDiv',true); + setVisibility('databaseDiv',true); + setVisibility('submitDiv',true); } } +var populateRunAs = function(data){ + dwr.util.addOptions('runAsSelect', data, 'userName'); +} + function handleDatabaseChange(){ isFirst=isFirstSelected('databaseSelect'); - setVisibility('runAsDiv',isFirst); + dwr.util.removeAllOptions('runAsSelect'); + option=new Array(); + option[0]='Please choose an account'; + dwr.util.addOptions('runAsSelect',option); if(isFirst){ + setVisibility('runAsDiv',false); setVisibility('permissionsDiv',false); + } else { + select=document.getElementById('databaseSelect'); + DrawbridgeService.listRunAsAccounts(dwr.util.getValue('databaseSelect'), populateRunAs); + setVisibility('runAsDiv',true); } } function handleRunAsChange(){ isFirst=isFirstSelected('runAsSelect'); - setVisibility('permissionsDiv',isFirst); + setVisibility('permissionsDiv',!isFirst); } function isFirstSelected(id){ select=document.getElementById(id); index=select.selectedIndex; - return index!=0; + return index==0; } function setVisibility(id, isVisible){ Modified: trunk/drawbridge/build.xml =================================================================== --- trunk/drawbridge/build.xml 2008-04-23 00:48:51 UTC (rev 47) +++ trunk/drawbridge/build.xml 2008-04-24 01:43:24 UTC (rev 48) @@ -27,6 +27,7 @@ <get-dependency dep="${jar.commons.logging}"/> <get-dependency dep="${jar.displaytag}"/> <get-dependency dep="${jar.dom4j}"/> + <get-dependency dep="${jar.dwr}"/> <get-dependency dep="${jar.hibernate}"/> <get-dependency dep="${jar.hsqldb}"/> <get-dependency dep="${jar.jmock}"/> @@ -54,7 +55,7 @@ <delete dir="${env.JAR_REPO}/@{dep}"/> </else> </if> - <get dest="${env.JAR_REPO}/@{dep}" src="http://www.pojo.us/drawbridge/@{dep}" usetimestamp="true" verbose="off"/> + <get dest="${env.JAR_REPO}/@{dep}" src="http://www.pojo.us/drawbridge/@{dep}" usetimestamp="true" verbose="on" ignoreerrors="true"/> </sequential> </macrodef> @@ -147,6 +148,7 @@ <file file="${env.JAR_REPO}/${jar.commons.logging}"/> <file file="${env.JAR_REPO}/${jar.displaytag}"/> <file file="${env.JAR_REPO}/${jar.dom4j}"/> + <file file="${env.JAR_REPO}/${jar.dwr}"/> <file file="${env.JAR_REPO}/${jar.hibernate}"/> <file file="${env.JAR_REPO}/${jar.jstl}"/> <file file="${env.JAR_REPO}/${jar.jta}"/> Added: trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrDrawbridgeFacade.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrDrawbridgeFacade.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dwr/DwrDrawbridgeFacade.java 2008-04-24 01:43:24 UTC (rev 48) @@ -0,0 +1,11 @@ +package net.sf.drawbridge.dwr; + +import java.util.List; + +import net.sf.drawbridge.vo.RunAsAccount; + +public interface DwrDrawbridgeFacade { + + public List<RunAsAccount> listRunAsAccounts(Integer databaseId); + +} Added: trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrDrawbridgeFacade.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrDrawbridgeFacade.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dwr/WrapperDwrDrawbridgeFacade.java 2008-04-24 01:43:24 UTC (rev 48) @@ -0,0 +1,25 @@ +package net.sf.drawbridge.dwr; + +import java.util.List; + +import net.sf.drawbridge.domain.DrawbridgeService; +import net.sf.drawbridge.vo.RunAsAccount; + +public class WrapperDwrDrawbridgeFacade implements DwrDrawbridgeFacade { + + private DrawbridgeService drawbridgeService; + + public WrapperDwrDrawbridgeFacade(DrawbridgeService drawbridgeService){ + this.drawbridgeService = drawbridgeService; + } + + public List<RunAsAccount> listRunAsAccounts(Integer databaseId) { + List<RunAsAccount> accounts = drawbridgeService.listRunAsAccounts(databaseId); + for (RunAsAccount account : accounts) { + account.setPassword("********"); + } + return accounts; + } + + +} Modified: trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java 2008-04-23 00:48:51 UTC (rev 47) +++ trunk/drawbridge/src/java/net/sf/drawbridge/sched/QuartzDrawbridgeScheduleLoader.java 2008-04-24 01:43:24 UTC (rev 48) @@ -33,7 +33,13 @@ public void loadSchedule() throws Exception{ JobDetail jobDetail=new JobDetail("heartbeat","system",HeartBeatJob.class); CronTrigger trigger = new CronTrigger("heartbeat-trigger", "system", "heartbeat", "system", "0/60 * * * * ?"); - scheduler.scheduleJob(jobDetail,trigger); + try{ + //this is getting called twice because 2 contexts are being created after the context loader listener was added + //dwr needs the context loader listener + scheduler.scheduleJob(jobDetail,trigger); + } catch(Exception ex){ + ex.printStackTrace(); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ac...@us...> - 2008-04-23 00:48:53
|
Revision: 47 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=47&view=rev Author: acresse Date: 2008-04-22 17:48:51 -0700 (Tue, 22 Apr 2008) Log Message: ----------- how you like them permissions? Modified Paths: -------------- trunk/drawbridge/WebContent/js/drawbridge.js trunk/drawbridge/src/java/net/sf/drawbridge/domain/SecureDrawbridgeService.java trunk/drawbridge/src/java/net/sf/drawbridge/vo/Permission.java trunk/drawbridge/src/test/net/sf/drawbridge/domain/SecureDrawbridgeServiceTest.java Added Paths: ----------- trunk/drawbridge/WebContent/WEB-INF/jsp/permissions/ trunk/drawbridge/WebContent/WEB-INF/jsp/permissions/manage.jsp trunk/drawbridge/src/java/net/sf/drawbridge/controller/permissions/ trunk/drawbridge/src/java/net/sf/drawbridge/controller/permissions/ManagePermissionsController.java Added: trunk/drawbridge/WebContent/WEB-INF/jsp/permissions/manage.jsp =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/jsp/permissions/manage.jsp (rev 0) +++ trunk/drawbridge/WebContent/WEB-INF/jsp/permissions/manage.jsp 2008-04-23 00:48:51 UTC (rev 47) @@ -0,0 +1,94 @@ +<%-- +This file is part of DrawBridge. +Copyright 2008 Adam Cresse + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +version 2 as published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation,Inc.,51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA. +--%> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@taglib prefix="display" uri="http://displaytag.sf.net"%> +<%@page import="net.sf.drawbridge.vo.Permission"%> +<%@ include file="../header.jsp" %> +<script language="JavaScript" src="js/drawbridge.js" /> + +<div id="instructions"> +Please choose a group to continue. +</div> +<br> +<form action="AddOrEditPermissionsSubmit.do" method="post"> +<table cellspacing="10"> + <tr valign="top"> + <td> + Group: + <select id="groupSelect" name="groupId" onchange="handleGroupChange()"> + <option>Select a Group</option> + <c:forEach items="${groupList}" var="group"> + <option value="<c:out value="${group.id}"/>" ><c:out value="${group.groupName}"/></option> + </c:forEach> + </select> + <br> + <div id="databaseDiv" style="visibility: hidden"> + Database: + <select id="databaseSelect" name="databaseId" onchange="handleDatabaseChange()"> + <option>Select a Database</option> + <c:forEach items="${databaseList}" var="database"> + <option value="<c:out value="${database.id}"/>" ><c:out value="${database.name}"/></option> + </c:forEach> + </select> + </div> + <div id="runAsDiv" style="visibility: hidden"> + Run-as Account: + <select id="runAsSelect" name="runAsId" onchange="handleRunAsChange()"> + <option>Select an Account</option> + <option>Select an Account</option> + <%-- + <c:forEach items="${runAsList}" var="runAs"> + <option value="<c:out value="${runAs.id}"/>" ><c:out value="${runAs.userName}"/></option> + </c:forEach> + --%> + </select> + </div> + <div id="submitDiv" style="visibility: hidden"> + <input type="Submit" value="Update Permissions"/> + </div> + </td> + <td> + <div id="systemDiv" style="visibility: hidden"> + System Permissions:<br> + <ul> + <c:forEach items="${systemPermissionList}" var="permission"> + <input type="checkbox" value="<c:out value="${permission.id}"/>" ><c:out value="${permission.name}"/><br/> + </c:forEach> + </ul> + </div> + </td> + <td> + <div id="permissionsDiv" style="visibility: hidden"> + Run-as Account Permissions:<br> + <ul> + <c:forEach items="${runAsPermissionList}" var="permission"> + <input type="checkbox" value="<c:out value="${permission.id}"/>" ><c:out value="${permission.name}"/><br/> + </c:forEach> + </ul> + </div> + </td> + </tr> + <tr> + <td colspan="2" align="right"> + </td> + </tr> +</table> +</form> + +<%@ include file="../footer.jsp" %> \ No newline at end of file Modified: trunk/drawbridge/WebContent/js/drawbridge.js =================================================================== --- trunk/drawbridge/WebContent/js/drawbridge.js 2008-04-22 02:06:41 UTC (rev 46) +++ trunk/drawbridge/WebContent/js/drawbridge.js 2008-04-23 00:48:51 UTC (rev 47) @@ -1,3 +1,38 @@ function confirmDelete(type, name){ return window.confirm('Are you sure you want to delete '+type+': '+name+"?"); } + +function handleGroupChange(){ + isFirst=isFirstSelected('groupSelect'); + setVisibility('systemDiv',isFirst); + setVisibility('databaseDiv',isFirst); + setVisibility('submitDiv',isFirst); + if(isFirst){ + setVisibility('runAsDiv',false); + setVisibility('permissionsDiv',false); + } +} + +function handleDatabaseChange(){ + isFirst=isFirstSelected('databaseSelect'); + setVisibility('runAsDiv',isFirst); + if(isFirst){ + setVisibility('permissionsDiv',false); + } +} + +function handleRunAsChange(){ + isFirst=isFirstSelected('runAsSelect'); + setVisibility('permissionsDiv',isFirst); +} + +function isFirstSelected(id){ + select=document.getElementById(id); + index=select.selectedIndex; + return index!=0; +} + +function setVisibility(id, isVisible){ + div=document.getElementById(id); + div.style.visibility=isVisible?'visible':'hidden'; +} Added: trunk/drawbridge/src/java/net/sf/drawbridge/controller/permissions/ManagePermissionsController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/permissions/ManagePermissionsController.java (rev 0) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/permissions/ManagePermissionsController.java 2008-04-23 00:48:51 UTC (rev 47) @@ -0,0 +1,46 @@ +package net.sf.drawbridge.controller.permissions; + +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import net.sf.drawbridge.controller.AbstractDrawbridgeController; +import net.sf.drawbridge.vo.Permission; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +@Controller +public class ManagePermissionsController extends AbstractDrawbridgeController { + + @RequestMapping(value="/ManagePermissions.do") + protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { + ModelAndView mav=new ModelAndView("permissions/manage"); + mav.addObject("groupList", drawbridgeService.listGroups()); + mav.addObject("databaseList", drawbridgeService.listDatabases()); + + List<Permission> systemPermissionList=new ArrayList<Permission>(); + systemPermissionList.add(Permission.SYSTEM_USER_MANAGE); + systemPermissionList.add(Permission.SYSTEM_USER_GRANT); + systemPermissionList.add(Permission.SYSTEM_DATABASE_MANAGE); + systemPermissionList.add(Permission.SYSTEM_DATABASE_GRANT); + mav.addObject("systemPermissionList", systemPermissionList); + + List<Permission> runAsPermissionList=new ArrayList<Permission>(); + runAsPermissionList.add(Permission.RUNAS_JOB_SUBMIT); + runAsPermissionList.add(Permission.RUNAS_JOB_RUN); + runAsPermissionList.add(Permission.RUNAS_JOB_REVIEW); + runAsPermissionList.add(Permission.RUNAS_JOB_APPROVE); + runAsPermissionList.add(Permission.RUNAS_JOB_DELETE); + runAsPermissionList.add(Permission.RUNAS_JOB_ACTIVATE); + runAsPermissionList.add(Permission.RUNAS_JOB_NO_REVIEW_NEEDED); + runAsPermissionList.add(Permission.RUNAS_JOB_NO_APPROVAL_NEEDED); + mav.addObject("runAsPermissionList", runAsPermissionList); + + return mav; + } + +} Modified: trunk/drawbridge/src/java/net/sf/drawbridge/domain/SecureDrawbridgeService.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/domain/SecureDrawbridgeService.java 2008-04-22 02:06:41 UTC (rev 46) +++ trunk/drawbridge/src/java/net/sf/drawbridge/domain/SecureDrawbridgeService.java 2008-04-23 00:48:51 UTC (rev 47) @@ -34,73 +34,73 @@ } public void addUser(User user, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_USER_ADD)){ + if(checkPermission(context, Permission.SYSTEM_USER_MANAGE)){ insecureService.addUser(user, context); } } public void updateUser(User newUser, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_USER_EDIT)){ + if(checkPermission(context, Permission.SYSTEM_USER_MANAGE)){ insecureService.updateUser(newUser, context); } } public void deleteUser(Integer userId, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_USER_DELETE)){ + if(checkPermission(context, Permission.SYSTEM_USER_MANAGE)){ insecureService.deleteUser(userId, context); } } public void addGroup(Group group, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_GROUP_ADD)){ + if(checkPermission(context, Permission.SYSTEM_USER_MANAGE)){ insecureService.addGroup(group, context); } } public void updateGroup(Group newGroup, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_GROUP_EDIT)){ + if(checkPermission(context, Permission.SYSTEM_USER_MANAGE)){ insecureService.updateGroup(newGroup, context); } } public void deleteGroup(Integer groupId, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_GROUP_DELETE)){ + if(checkPermission(context, Permission.SYSTEM_USER_MANAGE)){ insecureService.deleteGroup(groupId, context); } } public void addDriver(Driver driver, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_DRIVER_ADD)){ + if(checkPermission(context, Permission.SYSTEM_DATABASE_MANAGE)){ insecureService.addDriver(driver, context); } } public void updateDriver(Driver newDriver, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_DRIVER_EDIT)){ + if(checkPermission(context, Permission.SYSTEM_DATABASE_MANAGE)){ insecureService.updateDriver(newDriver, context); } } public void deleteDriver(Integer driverId, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_DRIVER_DELETE)){ + if(checkPermission(context, Permission.SYSTEM_DATABASE_MANAGE)){ insecureService.deleteDriver(driverId, context); } } public void addDatabase(Database database, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_DATABASE_ADD)){ + if(checkPermission(context, Permission.SYSTEM_DATABASE_MANAGE)){ insecureService.addDatabase(database, context); } } public void updateDatabase(Database newDatabase, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_DATABASE_EDIT)){ + if(checkPermission(context, Permission.SYSTEM_DATABASE_MANAGE)){ insecureService.updateDatabase(newDatabase, context); } } public void deleteDatabase(Integer databaseId, ExecutionContext context) { - if(checkPermission(context, Permission.SYSTEM_DATABASE_DELETE)){ + if(checkPermission(context, Permission.SYSTEM_DATABASE_MANAGE)){ insecureService.deleteDatabase(databaseId, context); } } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/vo/Permission.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/vo/Permission.java 2008-04-22 02:06:41 UTC (rev 46) +++ trunk/drawbridge/src/java/net/sf/drawbridge/vo/Permission.java 2008-04-23 00:48:51 UTC (rev 47) @@ -1,40 +1,22 @@ package net.sf.drawbridge.vo; + public enum Permission { + + SYSTEM_USER_MANAGE(1,"User Setup",'S'), + SYSTEM_DATABASE_MANAGE(2,"Database Setup",'S'), + SYSTEM_USER_GRANT(3,"Grant User Setup",'S'), + SYSTEM_DATABASE_GRANT(4,"Grant Database Setup",'S'), - SYSTEM_USER_ADD(1,"ADD USER",'S'),// - SYSTEM_USER_EDIT(2,"EDIT USER",'S'),// - SYSTEM_USER_DELETE(3,"DELETE USER",'S'),// - SYSTEM_GROUP_ADD(4,"ADD GROUP",'S'),// - SYSTEM_GROUP_EDIT(5,"EDIT GROUP",'S'),// - SYSTEM_GROUP_DELETE(6,"DELETE GROUP",'S'),// - SYSTEM_USER_GROUP_ADD(7,"ADD USER TO GROUP",'S'), - SYSTEM_USER_GROUP_DELETE(8,"REMOVE USER FROM GROUP",'S'), - SYSTEM_DRIVER_ADD(9,"ADD DRIVER",'S'),// - SYSTEM_DRIVER_EDIT(10,"EDIT DRIVER",'S'),// - SYSTEM_DRIVER_DELETE(11,"DELETE DRIVER",'S'),// - SYSTEM_DATABASE_ADD(12,"ADD DATABASE",'S'),// - SYSTEM_DATABASE_EDIT(13,"EDIT DATABASE",'S'),// - SYSTEM_DATABASE_DELETE(14,"DELETE DATABASE",'S'),// - SYSTEM_GRANT(15,"GRANT PERMISSIONS FOR SYSTEM",'S'), + RUNAS_JOB_SUBMIT(101,"Submit Job",'R'), + RUNAS_JOB_REVIEW(102,"Review Job",'R'), + RUNAS_JOB_APPROVE(103,"Approve Job",'R'), + RUNAS_JOB_DELETE(104,"Delete Job",'R'), + RUNAS_JOB_ACTIVATE(105,"Start/Stop Job",'R'), + RUNAS_JOB_RUN(106,"Run Job",'R'), + RUNAS_JOB_NO_REVIEW_NEEDED(107,"No Review Needed",'R'), + RUNAS_JOB_NO_APPROVAL_NEEDED(108,"No Approval Needed",'R'); - DATABASE_RUNAS_ADD(100,"ADD RUN-AS USER FOR DATABASE",'D'), - DATABASE_RUNAS_EDIT(101,"EDIT RUN-AS USER FOR DATABASE",'D'), - DATABASE_RUNAS_DELETE(102,"DELETE RUN-AS USER FOR DATABASE",'D'), - DATABASE_GRANT(103,"GRANT PERMISSIONS FOR DATABASE",'D'), - - RUNAS_JOB_SUBMIT(200,"SUBMIT JOB FOR RUN-AS",'R'), - RUNAS_JOB_REVIEW(201,"REVIEW JOB FOR RUN-AS",'R'), - RUNAS_JOB_APPROVE(202,"APPROVE JOB FOR RUN-AS",'R'), - RUNAS_JOB_DELETE_UNAPPROVED(203,"DELETE UNAPPROVED JOB FOR RUN-AS",'R'), - RUNAS_JOB_DELETE_APPROVED(204,"DELETE APPROVED JOB FOR RUN-AS",'R'), - RUNAS_JOB_DEACTIVATE(205,"DEACTIVATE APPROVED JOB FOR RUN-AS",'R'), - RUNAS_JOB_ACTIVATE(206,"ACTIVATE APPROVED JOB FOR RUN-AS",'R'), - RUNAS_JOB_RUN(207,"RUN APPROVED JOB FOR RUN-AS",'R'), - RUNAS_JOB_NO_REVIEW_NEEDED(208,"DOES NOT REQUIRE REVIEW FOR RUN-AS",'R'), - RUNAS_JOB_NO_APPROVAL_NEEDED(209,"DOES NOT REQUIRE APPROVAL FOR RUN-AS",'R'), - RUNAS_GRANT(210,"GRANT PERMISSIONS FOR RUN-AS",'R'); - private Integer id; private String name; private Character type; @@ -63,5 +45,5 @@ append(name).append(", ") .append(type).append("]").toString(); } - + } Modified: trunk/drawbridge/src/test/net/sf/drawbridge/domain/SecureDrawbridgeServiceTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/domain/SecureDrawbridgeServiceTest.java 2008-04-22 02:06:41 UTC (rev 46) +++ trunk/drawbridge/src/test/net/sf/drawbridge/domain/SecureDrawbridgeServiceTest.java 2008-04-23 00:48:51 UTC (rev 47) @@ -24,11 +24,11 @@ private static ExecutionContext context=new ExecutionContext(1,1,1); public void testCheckPermissionsForAddUser() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_ADD)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("addUser").with(eq(user),eq(context)); target.addUser(user, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_ADD)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("addUser").with(eq(user),eq(context)); try { target.addUser(user, context); @@ -37,11 +37,11 @@ } public void testCheckPermissionsForUpdateUser() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_EDIT)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("updateUser").with(eq(user),eq(context)); target.updateUser(user, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_EDIT)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("updateUser").with(eq(user),eq(context)); try{ target.updateUser(user, context); @@ -50,11 +50,11 @@ } public void testCheckPermissionsForDeleteUser() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_DELETE)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("deleteUser").with(eq(1),eq(context)); target.deleteUser(1, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_DELETE)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("deleteUser").with(eq(1),eq(context)); try{ target.deleteUser(1, context); @@ -63,11 +63,11 @@ } public void testCheckPermissionsForAddGroup() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_GROUP_ADD)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("addGroup").with(eq(group),eq(context)); target.addGroup(group, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_GROUP_ADD)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("addGroup").with(eq(group),eq(context)); try{ target.addGroup(group, context); @@ -76,11 +76,11 @@ } public void testCheckPermissionsForUpdateGroup() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_GROUP_EDIT)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("updateGroup").with(eq(group),eq(context)); target.updateGroup(group, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_GROUP_EDIT)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("updateGroup").with(eq(group),eq(context)); try{ target.updateGroup(group, context); @@ -89,11 +89,11 @@ } public void testCheckPermissionsForDeleteGroup() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_GROUP_DELETE)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("deleteGroup").with(eq(1),eq(context)); target.deleteGroup(1, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_GROUP_DELETE)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_USER_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("deleteGroup").with(eq(1),eq(context)); try{ target.deleteGroup(1, context); @@ -102,11 +102,11 @@ } public void testCheckPermissionsForAddDriver() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DRIVER_ADD)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("addDriver").with(eq(driver),eq(context)); target.addDriver(driver, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DRIVER_ADD)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("addDriver").with(eq(driver),eq(context)); try{ target.addDriver(driver, context); @@ -115,11 +115,11 @@ } public void testCheckPermissionsForUpdateDriver() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DRIVER_EDIT)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("updateDriver").with(eq(driver),eq(context)); target.updateDriver(driver, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DRIVER_EDIT)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("updateDriver").with(eq(driver),eq(context)); try{ target.updateDriver(driver, context); @@ -128,11 +128,11 @@ } public void testCheckPermissionsForDeleteDriver() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DRIVER_DELETE)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("deleteDriver").with(eq(1),eq(context)); target.deleteDriver(1, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DRIVER_DELETE)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("deleteDriver").with(eq(1),eq(context)); try{ target.deleteDriver(1, context); @@ -141,11 +141,11 @@ } public void testCheckPermissionsForAddDatabase() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_ADD)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("addDatabase").with(eq(database),eq(context)); target.addDatabase(database, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_ADD)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("addDatabase").with(eq(database),eq(context)); try{ target.addDatabase(database, context); @@ -154,11 +154,11 @@ } public void testCheckPermissionsForUpdateDatabase() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_EDIT)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("updateDatabase").with(eq(database),eq(context)); target.updateDatabase(database, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_EDIT)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("updateDatabase").with(eq(database),eq(context)); try{ target.updateDatabase(database, context); @@ -167,11 +167,11 @@ } public void testCheckPermissionsForDeleteDatabase() { - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_DELETE)).will(returnValue(true)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(true)); mockInsecureService.expects(once()).method("deleteDatabase").with(eq(1),eq(context)); target.deleteDatabase(1, context); - mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_DELETE)).will(returnValue(false)); + mockSecurityService.expects(once()).method("hasPermission").with(eq(context),eq(Permission.SYSTEM_DATABASE_MANAGE)).will(returnValue(false)); mockInsecureService.expects(never()).method("deleteDatabase").with(eq(1),eq(context)); try{ target.deleteDatabase(1, context); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ac...@us...> - 2008-04-22 02:06:46
|
Revision: 46 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=46&view=rev Author: acresse Date: 2008-04-21 19:06:41 -0700 (Mon, 21 Apr 2008) Log Message: ----------- I shoulda remembered the unit tests Modified Paths: -------------- trunk/drawbridge/src/java/net/sf/drawbridge/controller/AbstractDrawbridgeController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/database/AddOrEditDatabaseSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/database/DeleteDatabaseSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/driver/AddOrEditDriverSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/driver/DeleteDriverSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/group/AddOrEditGroupSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/group/DeleteGroupSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/runas/AddOrEditRunAsSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/runas/DeleteRunAsSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/AddOrEditUserSubmitControllerTest.java trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/DeleteUserSubmitControllerTest.java Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/AbstractDrawbridgeController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/AbstractDrawbridgeController.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/AbstractDrawbridgeController.java 2008-04-22 02:06:41 UTC (rev 46) @@ -32,6 +32,10 @@ @Autowired protected DrawbridgeService drawbridgeService; + + public void setDrawbridgeService(DrawbridgeService drawbridgeService) { + this.drawbridgeService=drawbridgeService; + } protected String getValueFromRequestOrSession(String name, HttpServletRequest request){ return getValueFromRequestOrSession(name, request, true); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java 2008-04-22 02:06:41 UTC (rev 46) @@ -20,6 +20,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import net.sf.drawbridge.domain.DrawbridgeService; + import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/database/AddOrEditDatabaseSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/database/AddOrEditDatabaseSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/database/AddOrEditDatabaseSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -58,7 +58,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDatabasesRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDatabases.do",mav.getViewName()); assertEquals(new HashMap<String, Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -81,7 +81,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDatabasesRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDatabases.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -105,7 +105,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDatabasesRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDatabases.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -129,7 +129,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDatabasesRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDatabases.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/database/DeleteDatabaseSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/database/DeleteDatabaseSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/database/DeleteDatabaseSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -51,7 +51,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDatabasesRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDatabases.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -70,7 +70,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDatabasesRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDatabases.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/driver/AddOrEditDriverSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/driver/AddOrEditDriverSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/driver/AddOrEditDriverSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -55,7 +55,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDriversRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDrivers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -76,7 +76,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDriversRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDrivers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -98,7 +98,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDriversRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDrivers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -120,7 +120,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDriversRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDrivers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/driver/DeleteDriverSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/driver/DeleteDriverSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/driver/DeleteDriverSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -51,7 +51,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDriversRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDrivers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -70,7 +70,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageDriversRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageDrivers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/group/AddOrEditGroupSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/group/AddOrEditGroupSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/group/AddOrEditGroupSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -60,7 +60,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageGroupsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageGroups.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -86,7 +86,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageGroupsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageGroups.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -109,7 +109,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageGroupsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageGroups.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -132,7 +132,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageGroupsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageGroups.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/group/DeleteGroupSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/group/DeleteGroupSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/group/DeleteGroupSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -51,7 +51,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageGroupsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageGroups.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -70,7 +70,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageGroupsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageGroups.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/AddOrEditJobSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -66,7 +66,7 @@ mockRequest.setParameter("schedule", "schedule"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageJobsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageJobs.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -91,7 +91,7 @@ mockRequest.setParameter("schedule", "schedule"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageJobsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageJobs.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -118,7 +118,7 @@ mockRequest.setParameter("schedule", "schedule"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageJobsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageJobs.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> expected=new ArrayList<StatusMessage>(); @@ -150,7 +150,7 @@ mockRequest.setParameter("schedule", "schedule"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageJobsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageJobs.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> expected=new ArrayList<StatusMessage>(); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/job/DeleteJobSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -58,7 +58,7 @@ mockRequest.setParameter("jobId", "1"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageJobsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageJobs.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -76,7 +76,7 @@ mockRequest.setParameter("jobId", "1"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageJobsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageJobs.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/runas/AddOrEditRunAsSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/runas/AddOrEditRunAsSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/runas/AddOrEditRunAsSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -56,7 +56,7 @@ mockRequest.setParameter("databaseId", "1"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageRunAsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageRunAsAccounts.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -77,7 +77,7 @@ mockRequest.setParameter("databaseId", "1"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageRunAsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageRunAsAccounts.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -99,7 +99,7 @@ mockRequest.setParameter("databaseId", "1"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageRunAsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageRunAsAccounts.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -121,7 +121,7 @@ mockRequest.setParameter("databaseId", "1"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageRunAsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageRunAsAccounts.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/runas/DeleteRunAsSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/runas/DeleteRunAsSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/runas/DeleteRunAsSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -49,7 +49,7 @@ mockRequest.setParameter("runAsId", "1"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageRunAsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageRunAsAccounts.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -66,7 +66,7 @@ mockRequest.setParameter("runAsId", "1"); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageRunAsRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageRunAsAccounts.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/AddOrEditUserSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/AddOrEditUserSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/AddOrEditUserSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -66,7 +66,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageUsersRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageUsers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -95,7 +95,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageUsersRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageUsers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -121,7 +121,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageUsersRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageUsers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -147,7 +147,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageUsersRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageUsers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); Modified: trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/DeleteUserSubmitControllerTest.java =================================================================== --- trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/DeleteUserSubmitControllerTest.java 2008-04-22 01:45:33 UTC (rev 45) +++ trunk/drawbridge/src/test/net/sf/drawbridge/controller/user/DeleteUserSubmitControllerTest.java 2008-04-22 02:06:41 UTC (rev 46) @@ -52,7 +52,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageUsersRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageUsers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); @@ -71,7 +71,7 @@ login(mockRequest); ModelAndView mav=target.handleRequestInternal(mockRequest, null); - assertEquals("manageUsersRedirectView",mav.getViewName()); + assertEquals("redirect:/ManageUsers.do",mav.getViewName()); assertEquals(new HashMap<String,Object>(),mav.getModel()); List<StatusMessage> messageList=new ArrayList<StatusMessage>(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ac...@us...> - 2008-04-22 01:45:35
|
Revision: 45 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=45&view=rev Author: acresse Date: 2008-04-21 18:45:33 -0700 (Mon, 21 Apr 2008) Log Message: ----------- switch to annotations Modified Paths: -------------- trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml trunk/drawbridge/src/java/drawbridge-core-spring.xml trunk/drawbridge/src/java/net/sf/drawbridge/controller/AbstractDrawbridgeController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/AdminController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/FakeLoginController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/AddOrEditDatabaseController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/AddOrEditDatabaseSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/DeleteDatabaseSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/ManageDatabasesController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/AddOrEditDriverController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/AddOrEditDriverSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/DeleteDriverSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/ManageDriversController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/AddOrEditGroupController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/AddOrEditGroupSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/DeleteGroupSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/ManageGroupsController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/DeleteJobSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/ManageJobsController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/AddOrEditRunAsController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/AddOrEditRunAsSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/DeleteRunAsSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/ManageRunAsController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/AddOrEditUserController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/AddOrEditUserSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/DeleteUserSubmitController.java trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/ManageUsersController.java Modified: trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml =================================================================== --- trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/WebContent/WEB-INF/drawbridge-servlet.xml 2008-04-22 01:45:33 UTC (rev 45) @@ -1,151 +1,22 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:p="http://www.springframework.org/schema/p" + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> -<beans> - <import resource="classpath:drawbridge-core-spring.xml"/> <import resource="classpath:drawbridge-env-spring.xml"/> + <context:component-scan base-package="net.sf.drawbridge.controller"/> + <context:property-placeholder location="classpath:drawbridge.properties"/> - <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> - <property name="location" value="classpath:drawbridge.properties"/> - </bean> - - <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> - <property name="mappings"> - <props> - <prop key="/MainMenu.do">mainMenuController</prop> - <prop key="/Admin.do">adminController</prop> - <prop key="/FakeLogin.do">fakeLoginController</prop> - - <prop key="/ManageDatabases.do">manageDatabasesController</prop> - <prop key="/AddDatabase.do">addOrEditDatabaseController</prop> - <prop key="/EditDatabase.do">addOrEditDatabaseController</prop> - <prop key="/AddOrEditDatabaseSubmit.do">addOrEditDatabaseSubmitController</prop> - <prop key="/DeleteDatabaseSubmit.do">deleteDatabaseSubmitController</prop> - - <prop key="/ManageDrivers.do">manageDriversController</prop> - <prop key="/AddDriver.do">addOrEditDriverController</prop> - <prop key="/EditDriver.do">addOrEditDriverController</prop> - <prop key="/AddOrEditDriverSubmit.do">addOrEditDriverSubmitController</prop> - <prop key="/DeleteDriverSubmit.do">deleteDriverSubmitController</prop> - - <prop key="/ManageUsers.do">manageUsersController</prop> - <prop key="/AddUser.do">addOrEditUserController</prop> - <prop key="/EditUser.do">addOrEditUserController</prop> - <prop key="/AddOrEditUserSubmit.do">addOrEditUserSubmitController</prop> - <prop key="/DeleteUserSubmit.do">deleteUserSubmitController</prop> - - <prop key="/ManageGroups.do">manageGroupsController</prop> - <prop key="/AddGroup.do">addOrEditGroupController</prop> - <prop key="/EditGroup.do">addOrEditGroupController</prop> - <prop key="/AddOrEditGroupSubmit.do">addOrEditGroupSubmitController</prop> - <prop key="/DeleteGroupSubmit.do">deleteGroupSubmitController</prop> - - <prop key="/ManageRunAsAccounts.do">manageRunAsController</prop> - <prop key="/AddRunAsAccount.do">addOrEditRunAsController</prop> - <prop key="/EditRunAsAccount.do">addOrEditRunAsController</prop> - <prop key="/AddOrEditRunAsAccountSubmit.do">addOrEditRunAsSubmitController</prop> - <prop key="/DeleteRunAsAccountSubmit.do">deleteRunAsSubmitController</prop> - - <prop key="/ManageJobs.do">manageJobsController</prop> - <prop key="/AddJob.do">addOrEditJobController</prop> - <prop key="/EditJob.do">addOrEditJobController</prop> - <prop key="/AddOrEditJobSubmit.do">addOrEditJobSubmitController</prop> - <prop key="/DeleteJobSubmit.do">deleteJobSubmitController</prop> - <prop key="/RunJob.do">runJobController</prop> - <prop key="/RunJobSubmit.do">runJobSubmitController</prop> - - </props> - </property> - </bean> - - <bean id="abstractController" class="net.sf.drawbridge.controller.AbstractDrawbridgeController" abstract="true"> - <property name="drawbridgeService" ref="DrawbridgeService"/> - </bean> - - <bean id="mainMenuController" class="net.sf.drawbridge.controller.MainMenuController" parent="abstractController"/> - <bean id="adminController" class="net.sf.drawbridge.controller.AdminController" parent="abstractController"/> - <bean id="fakeLoginController" class="net.sf.drawbridge.controller.FakeLoginController" parent="abstractController"/> - - <bean id="manageDatabasesController" class="net.sf.drawbridge.controller.database.ManageDatabasesController" parent="abstractController"/> - <bean id="addOrEditDatabaseController" class="net.sf.drawbridge.controller.database.AddOrEditDatabaseController" parent="abstractController"/> - <bean id="addOrEditDatabaseSubmitController" class="net.sf.drawbridge.controller.database.AddOrEditDatabaseSubmitController" parent="abstractController"/> - <bean id="deleteDatabaseSubmitController" class="net.sf.drawbridge.controller.database.DeleteDatabaseSubmitController" parent="abstractController"/> - - <bean id="manageDriversController" class="net.sf.drawbridge.controller.driver.ManageDriversController" parent="abstractController"/> - <bean id="addOrEditDriverController" class="net.sf.drawbridge.controller.driver.AddOrEditDriverController" parent="abstractController"/> - <bean id="addOrEditDriverSubmitController" class="net.sf.drawbridge.controller.driver.AddOrEditDriverSubmitController" parent="abstractController"/> - <bean id="deleteDriverSubmitController" class="net.sf.drawbridge.controller.driver.DeleteDriverSubmitController" parent="abstractController"/> - - <bean id="manageUsersController" class="net.sf.drawbridge.controller.user.ManageUsersController" parent="abstractController"/> - <bean id="addOrEditUserController" class="net.sf.drawbridge.controller.user.AddOrEditUserController" parent="abstractController"/> - <bean id="addOrEditUserSubmitController" class="net.sf.drawbridge.controller.user.AddOrEditUserSubmitController" parent="abstractController"/> - <bean id="deleteUserSubmitController" class="net.sf.drawbridge.controller.user.DeleteUserSubmitController" parent="abstractController"/> - - <bean id="manageGroupsController" class="net.sf.drawbridge.controller.group.ManageGroupsController" parent="abstractController"/> - <bean id="addOrEditGroupController" class="net.sf.drawbridge.controller.group.AddOrEditGroupController" parent="abstractController"/> - <bean id="addOrEditGroupSubmitController" class="net.sf.drawbridge.controller.group.AddOrEditGroupSubmitController" parent="abstractController"/> - <bean id="deleteGroupSubmitController" class="net.sf.drawbridge.controller.group.DeleteGroupSubmitController" parent="abstractController"/> - - <bean id="manageRunAsController" class="net.sf.drawbridge.controller.runas.ManageRunAsController" parent="abstractController"/> - <bean id="addOrEditRunAsController" class="net.sf.drawbridge.controller.runas.AddOrEditRunAsController" parent="abstractController"/> - <bean id="addOrEditRunAsSubmitController" class="net.sf.drawbridge.controller.runas.AddOrEditRunAsSubmitController" parent="abstractController"/> - <bean id="deleteRunAsSubmitController" class="net.sf.drawbridge.controller.runas.DeleteRunAsSubmitController" parent="abstractController"/> - - <bean id="manageJobsController" class="net.sf.drawbridge.controller.job.ManageJobsController" parent="abstractController"/> - <bean id="addOrEditJobController" class="net.sf.drawbridge.controller.job.AddOrEditJobController" parent="abstractController"/> - <bean id="addOrEditJobSubmitController" class="net.sf.drawbridge.controller.job.AddOrEditJobSubmitController" parent="abstractController"/> - <bean id="deleteJobSubmitController" class="net.sf.drawbridge.controller.job.DeleteJobSubmitController" parent="abstractController"/> - <bean id="runJobController" class="net.sf.drawbridge.controller.job.RunJobController" parent="abstractController"/> - <bean id="runJobSubmitController" class="net.sf.drawbridge.controller.job.RunJobSubmitController" parent="abstractController"/> - - <bean id="urlFilenameViewController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/> - <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> - <bean id="redirectResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"> - <property name="order" value="1"/> - </bean> - - <bean id="mainMenuRedirectView" class="org.springframework.web.servlet.view.RedirectView"> - <property name="contextRelative" value="true"/> - <property name="url" value="MainMenu.do"/> - </bean> - - <bean id="manageDriversRedirectView" class="org.springframework.web.servlet.view.RedirectView"> - <property name="contextRelative" value="true"/> - <property name="url" value="ManageDrivers.do"/> - </bean> - - <bean id="manageDatabasesRedirectView" class="org.springframework.web.servlet.view.RedirectView"> - <property name="contextRelative" value="true"/> - <property name="url" value="ManageDatabases.do"/> - </bean> - - <bean id="manageUsersRedirectView" class="org.springframework.web.servlet.view.RedirectView"> - <property name="contextRelative" value="true"/> - <property name="url" value="ManageUsers.do"/> - </bean> - - <bean id="manageGroupsRedirectView" class="org.springframework.web.servlet.view.RedirectView"> - <property name="contextRelative" value="true"/> - <property name="url" value="ManageGroups.do"/> - </bean> - - <bean id="manageRunAsRedirectView" class="org.springframework.web.servlet.view.RedirectView"> - <property name="contextRelative" value="true"/> - <property name="url" value="ManageRunAsAccounts.do"/> - </bean> - - <bean id="manageJobsRedirectView" class="org.springframework.web.servlet.view.RedirectView"> - <property name="contextRelative" value="true"/> - <property name="url" value="ManageJobs.do"/> - </bean> - <bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver" /> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> Modified: trunk/drawbridge/src/java/drawbridge-core-spring.xml =================================================================== --- trunk/drawbridge/src/java/drawbridge-core-spring.xml 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/drawbridge-core-spring.xml 2008-04-22 01:45:33 UTC (rev 45) @@ -5,21 +5,21 @@ <import resource="net/sf/drawbridge/dao/drawbridge-dao-spring.xml"/> <bean id="DrawbridgeService" class="net.sf.drawbridge.domain.SecureDrawbridgeService"> - <constructor-arg ref="DefaultDrawbridgeService"/> + <constructor-arg> + <bean id="DefaultDrawbridgeService" class="net.sf.drawbridge.domain.DefaultDrawbridgeService"> + <constructor-arg ref="UserDao"/> + <constructor-arg ref="GroupDao"/> + <constructor-arg ref="RunAsAccountDao"/> + <constructor-arg ref="DatabaseDao"/> + <constructor-arg ref="JobDao"/> + <constructor-arg ref="DriverDao"/> + <constructor-arg ref="QueryParser"/> + <constructor-arg ref="JobExecuter"/> + </bean> + </constructor-arg> <constructor-arg ref="SecurityService"/> </bean> - - <bean id="DefaultDrawbridgeService" class="net.sf.drawbridge.domain.DefaultDrawbridgeService"> - <constructor-arg ref="UserDao"/> - <constructor-arg ref="GroupDao"/> - <constructor-arg ref="RunAsAccountDao"/> - <constructor-arg ref="DatabaseDao"/> - <constructor-arg ref="JobDao"/> - <constructor-arg ref="DriverDao"/> - <constructor-arg ref="QueryParser"/> - <constructor-arg ref="JobExecuter"/> - </bean> - + <bean id="SecurityService" class="net.sf.drawbridge.security.DefaultSecurityService"/> <bean id="Scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/AbstractDrawbridgeController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/AbstractDrawbridgeController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/AbstractDrawbridgeController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -23,19 +23,16 @@ import net.sf.drawbridge.vo.ExecutionContext; import net.sf.drawbridge.vo.User; -import org.springframework.web.servlet.mvc.AbstractController; +import org.springframework.beans.factory.annotation.Autowired; -public abstract class AbstractDrawbridgeController extends AbstractController{ +public abstract class AbstractDrawbridgeController { public static final String LOGGED_IN_USER = "loggedInUser"; public static final String MESSAGE_LIST="messageList"; + @Autowired protected DrawbridgeService drawbridgeService; - public void setDrawbridgeService(DrawbridgeService drawbridgeService){ - this.drawbridgeService=drawbridgeService; - } - protected String getValueFromRequestOrSession(String name, HttpServletRequest request){ return getValueFromRequestOrSession(name, request, true); } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/AdminController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/AdminController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/AdminController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -20,13 +20,16 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AdminController extends AbstractDrawbridgeController { + @RequestMapping(value="/Admin.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav = new ModelAndView("admin"); - return mav; + return new ModelAndView("admin"); } } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/FakeLoginController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/FakeLoginController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/FakeLoginController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -22,29 +22,33 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import net.sf.drawbridge.vo.Status; import net.sf.drawbridge.vo.StatusMessage; import net.sf.drawbridge.vo.User; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class FakeLoginController extends AbstractDrawbridgeController { + @RequestMapping(value="/FakeLogin.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav = new ModelAndView("mainMenu"); - + ModelAndView mav=new ModelAndView("mainMenu"); User user = null; List<StatusMessage> messages=new ArrayList<StatusMessage>(); try{ - Integer userId = new Integer(request.getParameter(LOGGED_IN_USER)); - user = this.drawbridgeService.getUser(userId); + user = this.drawbridgeService.getUser(new Integer(request.getParameter(LOGGED_IN_USER))); } catch(Exception ex){ ex.printStackTrace(); } - request.getSession().setAttribute(LOGGED_IN_USER, user); + HttpSession session=request.getSession(); + session.setAttribute(LOGGED_IN_USER, user); messages.add(new StatusMessage(Status.INFO, "Logged in as: "+user, null)); - mav.addObject(MESSAGE_LIST,messages); + session.setAttribute(MESSAGE_LIST,messages); mav.addObject("databaseList", drawbridgeService.listDatabases()); return mav; Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/MainMenuController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -20,12 +20,16 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class MainMenuController extends AbstractDrawbridgeController { + @RequestMapping(value="/MainMenu.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav = new ModelAndView("mainMenu"); + ModelAndView mav=new ModelAndView("mainMenu"); mav.addObject("databaseList", drawbridgeService.listDatabases()); return mav; } Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/AddOrEditDatabaseController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/AddOrEditDatabaseController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/AddOrEditDatabaseController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -22,10 +22,14 @@ import net.sf.drawbridge.controller.AbstractDrawbridgeController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditDatabaseController extends AbstractDrawbridgeController { + @RequestMapping(value={"/AddDatabase.do","/EditDatabase.do"}) protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav=new ModelAndView("database/addOrEdit"); String databaseId=request.getParameter("databaseId"); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/AddOrEditDatabaseSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/AddOrEditDatabaseSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/AddOrEditDatabaseSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -31,14 +31,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditDatabaseSubmitController extends AbstractDrawbridgeController { private static final Log LOG=LogFactory.getLog(AddOrEditDatabaseSubmitController.class); + @RequestMapping(value="/AddOrEditDatabaseSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageDatabasesRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageDatabases.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); request.getSession().setAttribute(MESSAGE_LIST, messages); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/DeleteDatabaseSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/DeleteDatabaseSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/DeleteDatabaseSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -29,14 +29,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class DeleteDatabaseSubmitController extends AbstractDrawbridgeController { private static final Log LOG=LogFactory.getLog(DeleteDatabaseSubmitController.class); + @RequestMapping(value="/DeleteDatabaseSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageDatabasesRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageDatabases.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); String databaseIdStr = request.getParameter("databaseId"); try{ Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/ManageDatabasesController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/ManageDatabasesController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/database/ManageDatabasesController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -22,10 +22,14 @@ import net.sf.drawbridge.controller.AbstractDrawbridgeController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class ManageDatabasesController extends AbstractDrawbridgeController { + @RequestMapping(value="/ManageDatabases.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("database/manage"); mav.addObject("databaseList", drawbridgeService.listDatabases()); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/AddOrEditDriverController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/AddOrEditDriverController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/AddOrEditDriverController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -22,10 +22,14 @@ import net.sf.drawbridge.controller.AbstractDrawbridgeController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditDriverController extends AbstractDrawbridgeController { + @RequestMapping(value={"/AddDriver.do","/EditDriver.do"}) protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav=new ModelAndView("driver/addOrEdit"); String driverId=request.getParameter("driverId"); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/AddOrEditDriverSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/AddOrEditDriverSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/AddOrEditDriverSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -30,14 +30,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditDriverSubmitController extends AbstractDrawbridgeController { private static final Log LOG=LogFactory.getLog(AddOrEditDriverSubmitController.class); + @RequestMapping(value="/AddOrEditDriverSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageDriversRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageDrivers.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); request.getSession().setAttribute(MESSAGE_LIST, messages); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/DeleteDriverSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/DeleteDriverSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/DeleteDriverSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -29,14 +29,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class DeleteDriverSubmitController extends AbstractDrawbridgeController { private static final Log LOG=LogFactory.getLog(DeleteDriverSubmitController.class); + @RequestMapping(value="/DeleteDriverSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageDriversRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageDrivers.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); String driverIdStr = request.getParameter("driverId"); try{ Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/ManageDriversController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/ManageDriversController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/driver/ManageDriversController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -22,10 +22,14 @@ import net.sf.drawbridge.controller.AbstractDrawbridgeController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class ManageDriversController extends AbstractDrawbridgeController { + @RequestMapping(value="/ManageDrivers.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("driver/manage"); mav.addObject("driverList", drawbridgeService.listDrivers()); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/AddOrEditGroupController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/AddOrEditGroupController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/AddOrEditGroupController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -26,10 +26,14 @@ import net.sf.drawbridge.controller.AbstractDrawbridgeController; import net.sf.drawbridge.vo.User; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditGroupController extends AbstractDrawbridgeController { + @RequestMapping(value={"/AddGroup.do","/EditGroup.do"}) protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav=new ModelAndView("group/addOrEdit"); String groupIdStr=request.getParameter("groupId"); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/AddOrEditGroupSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/AddOrEditGroupSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/AddOrEditGroupSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -30,14 +30,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditGroupSubmitController extends AbstractDrawbridgeController { private static final Log LOG=LogFactory.getLog(AddOrEditGroupSubmitController.class); + @RequestMapping(value="/AddOrEditGroupSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageGroupsRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageGroups.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); request.getSession().setAttribute(MESSAGE_LIST, messages); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/DeleteGroupSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/DeleteGroupSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/DeleteGroupSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -29,14 +29,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class DeleteGroupSubmitController extends AbstractDrawbridgeController { private static final Log LOG=LogFactory.getLog(DeleteGroupSubmitController.class); + @RequestMapping(value="/DeleteGroupSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageGroupsRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageGroups.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); String groupIdStr = request.getParameter("groupId"); try{ Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/ManageGroupsController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/ManageGroupsController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/group/ManageGroupsController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -22,10 +22,14 @@ import net.sf.drawbridge.controller.AbstractDrawbridgeController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class ManageGroupsController extends AbstractDrawbridgeController { + @RequestMapping(value="/ManageGroups.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("group/manage"); mav.addObject("groupList", drawbridgeService.listGroups()); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -22,10 +22,14 @@ import net.sf.drawbridge.vo.Job; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditJobController extends AbstractJobController { + @RequestMapping(value={"/AddJob.do","/EditJob.do"}) protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav=new ModelAndView("job/addOrEdit"); String jobIdStr=request.getParameter("jobId"); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/AddOrEditJobSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -32,14 +32,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditJobSubmitController extends AbstractJobController { private static final Log LOG=LogFactory.getLog(AddOrEditJobSubmitController.class); + @RequestMapping(value="/AddOrEditJobSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageJobsRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageJobs.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); request.getSession().setAttribute(MESSAGE_LIST, messages); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/DeleteJobSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/DeleteJobSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/DeleteJobSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -28,14 +28,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class DeleteJobSubmitController extends AbstractJobController { private static final Log LOG=LogFactory.getLog(DeleteJobSubmitController.class); + @RequestMapping(value="/DeleteJobSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageJobsRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageJobs.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); String jobIdStr = request.getParameter("jobId"); Integer databaseId=null; Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/ManageJobsController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/ManageJobsController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/ManageJobsController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -20,10 +20,14 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class ManageJobsController extends AbstractJobController { + @RequestMapping(value="/ManageJobs.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("job/manage"); String databaseIdStr=getValueFromRequestOrSession("databaseId", request, false); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -23,10 +23,14 @@ import net.sf.drawbridge.vo.Job; import net.sf.drawbridge.vo.RunAsAccount; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class RunJobController extends AbstractJobController { + @RequestMapping(value="/RunJob.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("job/run"); try{ Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/job/RunJobSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -25,10 +25,14 @@ import net.sf.drawbridge.vo.Job; import net.sf.drawbridge.vo.QueryParam; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class RunJobSubmitController extends AbstractJobController { + @RequestMapping(value="/RunJobSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("job/results"); String jobIdStr=request.getParameter("jobId"); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/AddOrEditRunAsController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/AddOrEditRunAsController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/AddOrEditRunAsController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -22,10 +22,14 @@ import net.sf.drawbridge.controller.AbstractDrawbridgeController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditRunAsController extends AbstractDrawbridgeController { + @RequestMapping(value={"/AddRunAsAccount.do","/EditRunAsAccount.do"}) protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav=new ModelAndView("runAs/addOrEdit"); String runAsIdStr=request.getParameter("runAsId"); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/AddOrEditRunAsSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/AddOrEditRunAsSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/AddOrEditRunAsSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -31,14 +31,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditRunAsSubmitController extends AbstractDrawbridgeController { private static final Log LOG=LogFactory.getLog(AddOrEditRunAsSubmitController.class); + @RequestMapping(value="/AddOrEditRunAsAccountSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageRunAsRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageRunAsAccounts.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); request.getSession().setAttribute(MESSAGE_LIST, messages); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/DeleteRunAsSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/DeleteRunAsSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/DeleteRunAsSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -29,14 +29,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class DeleteRunAsSubmitController extends AbstractDrawbridgeController { private static final Log LOG=LogFactory.getLog(DeleteRunAsSubmitController.class); + @RequestMapping(value="/DeleteRunAsAccountSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageRunAsRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageRunAsAccounts.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); String runAsIdStr = request.getParameter("runAsId"); try{ Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/ManageRunAsController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/ManageRunAsController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/runas/ManageRunAsController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -22,10 +22,14 @@ import net.sf.drawbridge.controller.AbstractDrawbridgeController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class ManageRunAsController extends AbstractDrawbridgeController { + @RequestMapping(value="/ManageRunAsAccounts.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("runAs/manage"); mav.addObject("runAsList", drawbridgeService.listRunAsAccounts(null)); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/AddOrEditUserController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/AddOrEditUserController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/AddOrEditUserController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -26,10 +26,14 @@ import net.sf.drawbridge.controller.AbstractDrawbridgeController; import net.sf.drawbridge.vo.Group; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditUserController extends AbstractDrawbridgeController { + @RequestMapping(value={"/AddUser.do","/EditUser.do"}) protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav=new ModelAndView("user/addOrEdit"); String userIdStr=request.getParameter("userId"); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/AddOrEditUserSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/AddOrEditUserSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/AddOrEditUserSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -30,14 +30,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class AddOrEditUserSubmitController extends AbstractDrawbridgeController { private static final Log LOG=LogFactory.getLog(AddOrEditUserSubmitController.class); + @RequestMapping(value="/AddOrEditUserSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageUsersRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageUsers.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); request.getSession().setAttribute(MESSAGE_LIST, messages); Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/DeleteUserSubmitController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/DeleteUserSubmitController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/DeleteUserSubmitController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -29,14 +29,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class DeleteUserSubmitController extends AbstractDrawbridgeController { private static final Log LOG=LogFactory.getLog(DeleteUserSubmitController.class); + @RequestMapping(value="/DeleteUserSubmit.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { - ModelAndView mav=new ModelAndView("manageUsersRedirectView"); + ModelAndView mav=new ModelAndView("redirect:/ManageUsers.do"); List<StatusMessage> messages=new ArrayList<StatusMessage>(); String userIdStr = request.getParameter("userId"); try{ Modified: trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/ManageUsersController.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/ManageUsersController.java 2008-04-20 02:11:55 UTC (rev 44) +++ trunk/drawbridge/src/java/net/sf/drawbridge/controller/user/ManageUsersController.java 2008-04-22 01:45:33 UTC (rev 45) @@ -22,10 +22,14 @@ import net.sf.drawbridge.controller.AbstractDrawbridgeController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +@Controller public class ManageUsersController extends AbstractDrawbridgeController { + @RequestMapping(value="/ManageUsers.do") protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("user/manage"); mav.addObject("userList", drawbridgeService.listUsers()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: Benjamin La M. <ben...@gm...> - 2008-04-20 02:19:56
|
Hi Adam and Jim, I made the change to get Drawbridge working when deploying to tomcat, but now the datasource needs to be set up at the server level instead of the war level (which is how it should be anyway). Make sure you copy your mysql connector jar into the $TOMCAT_HOME/lib folder. Hopefully this works for you. You can use the attached context file in the $TOMCAT_HOME/conf/context.xml so that all you have to do is drop the war in the webapps directory and it should work. --Ben |
From: <bla...@us...> - 2008-04-20 02:11:57
|
Revision: 44 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=44&view=rev Author: blamonica Date: 2008-04-19 19:11:55 -0700 (Sat, 19 Apr 2008) Log Message: ----------- Fix build. Modified Paths: -------------- trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java 2008-04-20 01:28:05 UTC (rev 43) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java 2008-04-20 02:11:55 UTC (rev 44) @@ -19,8 +19,6 @@ import java.util.List; -blah - public interface Dao<T, I> { void create(T vo); T get(I id); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-04-20 01:28:08
|
Revision: 43 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=43&view=rev Author: blamonica Date: 2008-04-19 18:28:05 -0700 (Sat, 19 Apr 2008) Log Message: ----------- test Modified Paths: -------------- trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java 2008-04-20 01:26:21 UTC (rev 42) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java 2008-04-20 01:28:05 UTC (rev 43) @@ -19,6 +19,8 @@ import java.util.List; +blah + public interface Dao<T, I> { void create(T vo); T get(I id); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-04-20 01:26:24
|
Revision: 42 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=42&view=rev Author: blamonica Date: 2008-04-19 18:26:21 -0700 (Sat, 19 Apr 2008) Log Message: ----------- Fix build to see if it sends e-mail. Modified Paths: -------------- trunk/drawbridge/src/cruise/config.xml trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java Modified: trunk/drawbridge/src/cruise/config.xml =================================================================== --- trunk/drawbridge/src/cruise/config.xml 2008-04-20 01:11:31 UTC (rev 41) +++ trunk/drawbridge/src/cruise/config.xml 2008-04-20 01:26:21 UTC (rev 42) @@ -32,7 +32,7 @@ returnaddress="${email.returnaddress}" username="${email.username}" password="${email.password}" usessl="${email.ssl}" buildresultsurl="http://pojo.is-a-geek.net:8751/buildresults/drawbridge" - skipusers="false" spamwhilebroken="false"> + skipusers="true" spamwhilebroken="false"> <failure address="dra...@li..." reportWhenFixed="true"/> </email> </publishers> Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java 2008-04-20 01:11:31 UTC (rev 41) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java 2008-04-20 01:26:21 UTC (rev 42) @@ -19,8 +19,6 @@ import java.util.List; -blah - public interface Dao<T, I> { void create(T vo); T get(I id); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-04-20 01:11:38
|
Revision: 41 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=41&view=rev Author: blamonica Date: 2008-04-19 18:11:31 -0700 (Sat, 19 Apr 2008) Log Message: ----------- Intentionally breaking the build to see if cruise is working. Modified Paths: -------------- trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java Modified: trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java =================================================================== --- trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java 2008-04-20 01:03:45 UTC (rev 40) +++ trunk/drawbridge/src/java/net/sf/drawbridge/dao/Dao.java 2008-04-20 01:11:31 UTC (rev 41) @@ -19,6 +19,8 @@ import java.util.List; +blah + public interface Dao<T, I> { void create(T vo); T get(I id); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-04-20 01:03:58
|
Revision: 40 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=40&view=rev Author: blamonica Date: 2008-04-19 18:03:45 -0700 (Sat, 19 Apr 2008) Log Message: ----------- Got e-mail working for the build loop. Fixed an errant } in the canoo ant script. Modified Paths: -------------- trunk/drawbridge/src/canoo/build.xml trunk/drawbridge/src/cruise/config.xml Added Paths: ----------- trunk/drawbridge/src/cruise/email.properties Modified: trunk/drawbridge/src/canoo/build.xml =================================================================== --- trunk/drawbridge/src/canoo/build.xml 2008-04-19 23:16:00 UTC (rev 39) +++ trunk/drawbridge/src/canoo/build.xml 2008-04-20 01:03:45 UTC (rev 40) @@ -13,7 +13,7 @@ <import file="definitions.xml" description="Import custom definitions (if any)"/> <import file="${webtest.home}/webtest.xml" description="Import all functionalities for a full build"/> - <property name="wt.testInWork" value="${basedir}}/tests/allTests.xml"/> + <property name="wt.testInWork" value="${basedir}/tests/allTests.xml"/> <!-- run in headless mode --> <property name="wt.headless" value="true"/> Modified: trunk/drawbridge/src/cruise/config.xml =================================================================== --- trunk/drawbridge/src/cruise/config.xml 2008-04-19 23:16:00 UTC (rev 39) +++ trunk/drawbridge/src/cruise/config.xml 2008-04-20 01:03:45 UTC (rev 40) @@ -14,7 +14,7 @@ </modificationset> <!-- Configures the actual build loop, how often and which build file/target --> - <schedule interval="60"> + <schedule interval="360"> <ant antscript="/usr/bin/ant" buildfile="cruise-build.xml" target="all" @@ -31,10 +31,9 @@ <email mailhost="${email.host}" mailport="${email.port}" returnaddress="${email.returnaddress}" username="${email.username}" password="${email.password}" usessl="${email.ssl}" - buildresultsurl="http://pojo.is-a-geek.net:8751/cc/buildresults/drawbridge" - skipusers="true" spamwhilebroken="false"> - <always address="ben...@gm..."/> - <!--always address="dra...@li..."/--> + buildresultsurl="http://pojo.is-a-geek.net:8751/buildresults/drawbridge" + skipusers="false" spamwhilebroken="false"> + <failure address="dra...@li..." reportWhenFixed="true"/> </email> </publishers> Added: trunk/drawbridge/src/cruise/email.properties =================================================================== --- trunk/drawbridge/src/cruise/email.properties (rev 0) +++ trunk/drawbridge/src/cruise/email.properties 2008-04-20 01:03:45 UTC (rev 40) @@ -0,0 +1,6 @@ +email.host=mail.pojo.us +email.port=587 +email.ssl=false +email.username=cruisecontrol +email.password=<removed for security> +email.returnaddress=dra...@li... This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-04-19 23:16:04
|
Revision: 39 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=39&view=rev Author: blamonica Date: 2008-04-19 16:16:00 -0700 (Sat, 19 Apr 2008) Log Message: ----------- Please put the database setup in the servers context.xml. Got cruise working. Modified Paths: -------------- trunk/drawbridge/WebContent/META-INF/context.xml trunk/drawbridge/src/canoo/build.xml trunk/drawbridge/src/cruise/config.xml trunk/drawbridge/src/cruise/cruise-build.xml Modified: trunk/drawbridge/WebContent/META-INF/context.xml =================================================================== --- trunk/drawbridge/WebContent/META-INF/context.xml 2008-04-17 00:54:37 UTC (rev 38) +++ trunk/drawbridge/WebContent/META-INF/context.xml 2008-04-19 23:16:00 UTC (rev 39) @@ -1,9 +1,4 @@ <Context docBase="drawbridge" path="/drawbridge" reloadable="true" source="org.eclipse.jst.jee.server:drawbridge"> - <Resource name="jdbc/DrawbridgeDataSource" auth="Container" type="javax.sql.DataSource" - maxActive="100" maxIdle="30" maxWait="10000" - username="drawbridge_user" password="drawbridge" driverClassName="com.mysql.jdbc.Driver" - url="jdbc:mysql://localhost:3306/drawbridge"/> - </Context> Modified: trunk/drawbridge/src/canoo/build.xml =================================================================== --- trunk/drawbridge/src/canoo/build.xml 2008-04-17 00:54:37 UTC (rev 38) +++ trunk/drawbridge/src/canoo/build.xml 2008-04-19 23:16:00 UTC (rev 39) @@ -4,7 +4,7 @@ This is a (nearly) empty WebTest project containing just a few examples for a quick start --> -<project name="example" default="wt.full"> +<project name="drawbridge.webtest" default="wt.full"> <property environment="env"/> @@ -13,12 +13,15 @@ <import file="definitions.xml" description="Import custom definitions (if any)"/> <import file="${webtest.home}/webtest.xml" description="Import all functionalities for a full build"/> - <property name="wt.testInWork" value="tests/allTests.xml"/> + <property name="wt.testInWork" value="${basedir}}/tests/allTests.xml"/> -<!-- + <!-- run in headless mode --> + <property name="wt.headless" value="true"/> + + <!-- Activate this if you are behind a proxy and want to test a server outside your local network See http://ant.apache.org/manual/OptionalTasks/setproxy.html <setproxy proxyhost="myProxy" proxyport="1234"/> ---> + --> </project> Modified: trunk/drawbridge/src/cruise/config.xml =================================================================== --- trunk/drawbridge/src/cruise/config.xml 2008-04-17 00:54:37 UTC (rev 38) +++ trunk/drawbridge/src/cruise/config.xml 2008-04-19 23:16:00 UTC (rev 39) @@ -1,3 +1,42 @@ <cruisecontrol> + <project name="drawbridge" buildafterfailed="true"> + <property file="email.properties"/> + <listeners> + <currentbuildstatuslistener file="logs/drawbridge/buildstatus.txt"/> + </listeners> + <bootstrappers> + </bootstrappers> + + <!-- Defines where cruise looks for changes, to decide whether to run the build --> + <modificationset quietperiod="10"> + <svn localworkingcopy="checkout/drawbridge"/> + </modificationset> + + <!-- Configures the actual build loop, how often and which build file/target --> + <schedule interval="60"> + <ant antscript="/usr/bin/ant" + buildfile="cruise-build.xml" + target="all" + uselogger="true" + usedebug="false"/> + </schedule> + + <!-- directory to write build logs to --> + <log dir="logs/drawbridge"/> + + <!-- Publishers are run *after* a build completes --> + <publishers> + <currentbuildstatuspublisher file="logs/drawbridge/buildstatus.txt"/> + <email mailhost="${email.host}" mailport="${email.port}" + returnaddress="${email.returnaddress}" username="${email.username}" + password="${email.password}" usessl="${email.ssl}" + buildresultsurl="http://pojo.is-a-geek.net:8751/cc/buildresults/drawbridge" + skipusers="true" spamwhilebroken="false"> + <always address="ben...@gm..."/> + <!--always address="dra...@li..."/--> + </email> + </publishers> + + </project> </cruisecontrol> Modified: trunk/drawbridge/src/cruise/cruise-build.xml =================================================================== --- trunk/drawbridge/src/cruise/cruise-build.xml 2008-04-17 00:54:37 UTC (rev 38) +++ trunk/drawbridge/src/cruise/cruise-build.xml 2008-04-19 23:16:00 UTC (rev 39) @@ -1,7 +1,7 @@ <project name="drawbridge" default="all" basedir="."> <property file="./db.properties"/> - <target name="all" depends="sync,build,reset.database,deploy"/> + <target name="all" depends="sync,build,reset.database,deploy,webtest"/> <target name="sync"> <exec executable="svn"> @@ -12,7 +12,7 @@ </target> <target name="build"> - <ant dir="checkout/drawbridge" antfile="build.xml" inheritall="false"/> + <ant dir="checkout/drawbridge" antfile="build.xml" inheritall="false"/> </target> <target name="reset.database"> @@ -27,7 +27,18 @@ </exec> </target> + <property name="tomcat.webapps" value="/opt/tomcat6/webapps"/> + <target name="deploy"> - <copy tofile="/opt/tomcat6/webapps/drawbridge.war" file="checkout/drawbridge/target/drawbridge.war"/> + <echo>Deploying drawbridge to local tomcat.</echo> + <delete dir="${tomcat.webapps}/drawbridge.war"/> + <delete dir="${tomcat.webapps}/drawbridge"/> + <copy tofile="${tomcat.webapps}/drawbridge.war" file="checkout/drawbridge/target/drawbridge.war"/> </target> + + <target name="webtest"> + <echo>Sleeping for 10 seconds so that tomcat deploys correctly.</echo> + <sleep seconds="10"/> + <ant dir="checkout/drawbridge" antfile="build.xml" inheritall="false" target="webtest"/> + </target> </project> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bla...@us...> - 2008-04-17 00:54:40
|
Revision: 38 http://drawbridge.svn.sourceforge.net/drawbridge/?rev=38&view=rev Author: blamonica Date: 2008-04-16 17:54:37 -0700 (Wed, 16 Apr 2008) Log Message: ----------- Fix problem with building from different directories. Modified Paths: -------------- trunk/drawbridge/build.xml trunk/drawbridge/src/cruise/cruise-build.xml Modified: trunk/drawbridge/build.xml =================================================================== --- trunk/drawbridge/build.xml 2008-04-16 02:30:04 UTC (rev 37) +++ trunk/drawbridge/build.xml 2008-04-17 00:54:37 UTC (rev 38) @@ -114,7 +114,7 @@ <fileset dir="src/test" includes="**/*" excludes="**/*.java"/> </copy> - <junit showoutput="false" haltonfailure="true" haltonerror="true" fork="false"> + <junit showoutput="false" haltonfailure="true" haltonerror="true" fork="yes" forkmode="once" dir="${basedir}"> <batchtest> <fileset dir="target/test-classes" includes="**/*Test.class" excludes="**/Abstract*"/> </batchtest> Modified: trunk/drawbridge/src/cruise/cruise-build.xml =================================================================== --- trunk/drawbridge/src/cruise/cruise-build.xml 2008-04-16 02:30:04 UTC (rev 37) +++ trunk/drawbridge/src/cruise/cruise-build.xml 2008-04-17 00:54:37 UTC (rev 38) @@ -12,7 +12,7 @@ </target> <target name="build"> - <exec dir="checkout/drawbridge" executable="ant"/> + <ant dir="checkout/drawbridge" antfile="build.xml" inheritall="false"/> </target> <target name="reset.database"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |