|
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] |