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