Introduce PDF/Excel views
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 4 Jul 2008 13:21:20 +0000 (13:21 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 4 Jul 2008 13:21:20 +0000 (13:21 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1353 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.server/pom.xml
org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/XsltMarshallerViewResolver.java
org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultExcelView.java [new file with mode: 0644]
org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultPdfView.java [new file with mode: 0644]
org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultViewController.java
org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-doc-servlet.xml [new file with mode: 0644]

index 4056370db38643a642bb8aa9ae2564563173ee25..48fa79974fdbfdbbee5efb1ad59733616b4c22e4 100644 (file)
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjweaver</artifactId>
                </dependency>
+               <dependency>
+                       <groupId>net.sourceforge.jexcelapi</groupId>
+                       <artifactId>jxl</artifactId>
+                       <version>2.6.3</version>
+               </dependency>
+               <dependency>
+                       <groupId>com.lowagie</groupId>
+                       <artifactId>itext</artifactId>
+                       <version>2.1.2</version>
+               </dependency>
        </dependencies>
 </project>
\ No newline at end of file
index 13e2e8fedca1c5a679c287d8d4668e8946adbe8d..9acbc94cdfb6f53841592a2aac5280241fbda214 100644 (file)
@@ -12,7 +12,6 @@ import javax.xml.transform.stream.StreamSource;
 import org.apache.commons.logging.Log;\r
 import org.apache.commons.logging.LogFactory;\r
 import org.argeo.slc.core.SlcException;\r
-import org.springframework.core.io.DefaultResourceLoader;\r
 import org.springframework.core.io.Resource;\r
 import org.springframework.oxm.Marshaller;\r
 import org.springframework.web.servlet.view.AbstractUrlBasedView;\r
diff --git a/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultExcelView.java b/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultExcelView.java
new file mode 100644 (file)
index 0000000..c3a8901
--- /dev/null
@@ -0,0 +1,51 @@
+package org.argeo.slc.web.mvc.result;
+
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import jxl.write.Label;
+import jxl.write.WritableSheet;
+import jxl.write.WritableWorkbook;
+
+import org.argeo.slc.core.SlcException;
+import org.argeo.slc.core.structure.tree.TreeSPath;
+import org.argeo.slc.core.test.SlcTestUtils;
+import org.argeo.slc.core.test.TestResultPart;
+import org.argeo.slc.core.test.tree.PartSubList;
+import org.argeo.slc.core.test.tree.TreeTestResult;
+import org.springframework.web.servlet.view.document.AbstractJExcelView;
+
+public class ResultExcelView extends AbstractJExcelView {
+       protected void buildExcelDocument(Map model, WritableWorkbook workbook,
+                       HttpServletRequest request, HttpServletResponse response) {
+               try {
+                       if (workbook.getNumberOfSheets() == 0) {
+                               workbook.createSheet("SLC", 0);
+                       }
+                       WritableSheet sheet = workbook.getSheet("SLC");
+
+                       TreeTestResult ttr = (TreeTestResult) model
+                                       .get(ResultViewController.MODELKEY_RESULT);
+
+                       sheet.addCell(new Label(0, 0, "Result " + ttr.getUuid()));
+
+                       int currentRow = 1;
+                       for (TreeSPath path : ttr.getResultParts().keySet()) {
+                               PartSubList lst = ttr.getResultParts().get(path);
+                               sheet.addCell(new Label(0, currentRow, "Path " + path));
+                               currentRow++;
+                               for (TestResultPart part : lst.getParts()) {
+                                       sheet.addCell(new Label(0, currentRow, SlcTestUtils
+                                                       .statusToString(part.getStatus())));
+                                       sheet.addCell(new Label(1, currentRow, part.getMessage()));
+                                       currentRow++;
+                               }
+                               currentRow++;// add an empty line betweeb paths
+                       }
+               } catch (Exception e) {
+                       throw new SlcException("Could not write spreadsheet.", e);
+               }
+       }
+}
diff --git a/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultPdfView.java b/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultPdfView.java
new file mode 100644 (file)
index 0000000..36d3b89
--- /dev/null
@@ -0,0 +1,59 @@
+package org.argeo.slc.web.mvc.result;
+
+import java.awt.Color;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.argeo.slc.core.structure.tree.TreeSPath;
+import org.argeo.slc.core.test.SlcTestUtils;
+import org.argeo.slc.core.test.TestResultPart;
+import org.argeo.slc.core.test.TestStatus;
+import org.argeo.slc.core.test.tree.PartSubList;
+import org.argeo.slc.core.test.tree.TreeTestResult;
+import org.springframework.web.servlet.view.document.AbstractPdfView;
+
+import com.lowagie.text.Cell;
+import com.lowagie.text.Document;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.Table;
+import com.lowagie.text.pdf.PdfWriter;
+
+public class ResultPdfView extends AbstractPdfView {
+
+       @Override
+       protected void buildPdfDocument(Map model, Document document,
+                       PdfWriter writer, HttpServletRequest request,
+                       HttpServletResponse response) throws Exception {
+               TreeTestResult ttr = (TreeTestResult) model
+                               .get(ResultViewController.MODELKEY_RESULT);
+
+               document.addTitle("Result " + ttr.getUuid());
+               document.add(new Paragraph("Result " + ttr.getUuid()));
+
+               for (TreeSPath path : ttr.getResultParts().keySet()) {
+                       PartSubList lst = ttr.getResultParts().get(path);
+                       document.add(new Paragraph("Path " + path));
+                       Table table = new Table(2, lst.getParts().size());
+                       for (TestResultPart part : lst.getParts()) {
+                               Integer status = part.getStatus();
+                               Cell statusCell = new Cell(SlcTestUtils.statusToString(status));
+                               final Color color;
+                               if (status.equals(TestStatus.PASSED))
+                                       color = Color.GREEN;
+                               else if (status.equals(TestStatus.FAILED))
+                                       color = Color.RED;
+                               else
+                                       color = Color.MAGENTA;
+
+                               statusCell.setBackgroundColor(color);
+                               table.addCell(statusCell);
+                               table.addCell(part.getMessage());
+                       }
+                       document.add(table);
+               }
+
+       }
+
+}
index 87445557107eef2bb38af84910df20a5af2612f5..f87f3acc6e07cdc1814d450a89ae930ba9e2f3d3 100644 (file)
@@ -18,6 +18,8 @@ import org.argeo.slc.core.test.tree.TreeTestResult;
 import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
 \r
 public class ResultViewController extends ParameterizableViewController {\r
+       public final static String MODELKEY_RESULT = "result";\r
+\r
        private final TreeTestResultDao testResultDao;\r
 \r
        public ResultViewController(TreeTestResultDao testResultDao) {\r
@@ -45,7 +47,7 @@ public class ResultViewController extends ParameterizableViewController {
 \r
                ModelAndView modelAndView = new ModelAndView();\r
 \r
-               modelAndView.addObject("result", result);\r
+               modelAndView.addObject(MODELKEY_RESULT, result);\r
                modelAndView.addObject("toc", toc);\r
                modelAndView.addObject("describedPaths", describedPaths);\r
                modelAndView.addObject("anchors", anchors);\r
diff --git a/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-doc-servlet.xml b/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-doc-servlet.xml
new file mode 100644 (file)
index 0000000..18e5f6f
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:aop="http://www.springframework.org/schema/aop"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
+       default-lazy-init="true">
+
+       <bean name="/resultView.xls"
+               class="org.argeo.slc.web.mvc.result.ResultViewController">
+               <constructor-arg ref="testResultDao" />
+               <property name="viewName" value="resultExcelView" />
+       </bean>
+
+       <bean name="resultExcelView"
+               class="org.argeo.slc.web.mvc.result.ResultExcelView">
+       </bean>
+
+       <bean name="/resultView.pdf"
+               class="org.argeo.slc.web.mvc.result.ResultViewController">
+               <constructor-arg ref="testResultDao" />
+               <property name="viewName" value="resultPdfView" />
+       </bean>
+
+       <bean name="resultPdfView"
+               class="org.argeo.slc.web.mvc.result.ResultPdfView">
+       </bean>
+
+       <bean
+               class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
+               <property name="interceptors">
+                       <list>
+                               <ref bean="osivInterceptor" />
+                       </list>
+               </property>
+       </bean>
+
+
+       <bean id="viewResolverXls"
+               class="org.springframework.web.servlet.view.BeanNameViewResolver">
+       </bean>
+
+</beans>
\ No newline at end of file