]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Move org.argeo.slc.server
authorMathieu Baudier <mbaudier@argeo.org>
Sat, 22 Nov 2008 13:46:19 +0000 (13:46 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sat, 22 Nov 2008 13:46:19 +0000 (13:46 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1853 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

36 files changed:
runtime/org.argeo.slc.server/.classpath [new file with mode: 0644]
runtime/org.argeo.slc.server/.project [new file with mode: 0644]
runtime/org.argeo.slc.server/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
runtime/org.argeo.slc.server/pom.xml [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/test/TestManagerService.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/test/impl/TestManagerServiceImpl.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/XsltMarshallerView.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/XsltMarshallerViewResolver.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/admin/HomeController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/SlcExecutionListController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/SlcExecutionViewController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/AddResultToCollectionController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/RemoveResultFromCollectionController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultCollectionListController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultCollectionViewController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultExcelView.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultInterceptor.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultListController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultPdfView.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultViewController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/TestRunViewController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/CustomSoapExceptionResolver.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/process/SlcExecutionRequestEp.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/process/SlcExecutionStepsRequestEp.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CloseTreeTestResultRequestEp.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CreateTreeTestResultRequestEp.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/ResultPartRequestEp.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/META-INF/MANIFEST.MF [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/jmx.xml [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-doc-servlet.xml [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-ui-servlet.xml [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-web-servlet.xml [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-ws-servlet.xml [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-xslt-servlet.xml [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/transaction.xml [new file with mode: 0644]

diff --git a/runtime/org.argeo.slc.server/.classpath b/runtime/org.argeo.slc.server/.classpath
new file mode 100644 (file)
index 0000000..9653ef0
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+       <classpathentry kind="src" output="target/classes" path="src/main/java"/>\r
+       <classpathentry kind="src" output="target/classes" path="src/main/resources"/>\r
+       <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>\r
+       <classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>\r
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>\r
+       <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>\r
+       <classpathentry kind="output" path="target/classes"/>\r
+</classpath>\r
diff --git a/runtime/org.argeo.slc.server/.project b/runtime/org.argeo.slc.server/.project
new file mode 100644 (file)
index 0000000..26efbec
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+       <name>org.argeo.slc.server</name>\r
+       <comment></comment>\r
+       <projects>\r
+       </projects>\r
+       <buildSpec>\r
+               <buildCommand>\r
+                       <name>org.eclipse.jdt.core.javabuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+               <buildCommand>\r
+                       <name>org.maven.ide.eclipse.maven2Builder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+       </buildSpec>\r
+       <natures>\r
+               <nature>org.eclipse.jdt.core.javanature</nature>\r
+               <nature>org.maven.ide.eclipse.maven2Nature</nature>\r
+       </natures>\r
+</projectDescription>\r
diff --git a/runtime/org.argeo.slc.server/.settings/org.eclipse.jdt.core.prefs b/runtime/org.argeo.slc.server/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..e71a107
--- /dev/null
@@ -0,0 +1,12 @@
+#Fri Aug 29 11:25:17 CEST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/runtime/org.argeo.slc.server/pom.xml b/runtime/org.argeo.slc.server/pom.xml
new file mode 100644 (file)
index 0000000..0f629a7
--- /dev/null
@@ -0,0 +1,125 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.argeo.slc</groupId>
+               <artifactId>argeo-slc</artifactId>
+               <version>0.11.2-SNAPSHOT</version>
+               <relativePath>../org.argeo.slc</relativePath>
+       </parent>
+       <artifactId>org.argeo.slc.server</artifactId>
+       <name>Argeo SLC Server</name>
+       <description>SLC Server</description>
+       <build>
+               <plugins>
+                       <!-- Look to parent pom for inheritances -->
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-compiler-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-source-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-jar-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               <configuration>
+                                       <instructions>
+                                               <Export-Package>
+                                                       org.argeo.slc.*
+                                               </Export-Package>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.mortbay.jetty</groupId>
+                               <artifactId>maven-jetty-plugin</artifactId>
+                               <configuration>
+                                       <webAppSourceDirectory>
+                                               ../org.argeo.slc.webapp/src/main/webapp
+                                       </webAppSourceDirectory>
+                                       <jettyConfig>
+                                               ../org.argeo.slc.webapp/src/main/config/jetty/jetty-test.xml
+                                       </jettyConfig>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
+       <dependencies>
+               <dependency>
+                       <groupId>org.argeo.slc</groupId>
+                       <artifactId>org.argeo.slc.core</artifactId>
+                       <version>${project.version}</version>
+                       <exclusions>
+                               <exclusion>
+                                       <groupId>xerces</groupId>
+                                       <artifactId>xercesImpl</artifactId>
+                               </exclusion>
+                       </exclusions>
+               </dependency>
+               <dependency>
+                       <groupId>org.argeo.slc</groupId>
+                       <artifactId>org.argeo.slc.hibernate</artifactId>
+                       <version>${project.version}</version>
+                       <exclusions>
+                               <exclusion>
+                                       <groupId>xerces</groupId>
+                                       <artifactId>xercesImpl</artifactId>
+                               </exclusion>
+                       </exclusions>
+               </dependency>
+
+               <dependency>
+                       <groupId>javax.servlet</groupId>
+                       <artifactId>
+                               com.springsource.javax.servlet.jsp.jstl
+                       </artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.taglibs</groupId>
+                       <artifactId>
+                               com.springsource.org.apache.taglibs.standard
+                       </artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>javax.servlet</groupId>
+                       <artifactId>com.springsource.javax.servlet</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework.ws</groupId>
+                       <artifactId>org.springframework.ws</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework</groupId>
+                       <artifactId>org.springframework.web.servlet</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework</groupId>
+                       <artifactId>org.springframework.aop</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.aspectj</groupId>
+                       <artifactId>com.springsource.org.aspectj.weaver</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>net.sourceforge.jexcelapi</groupId>
+                       <artifactId>com.springsource.jxl</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>com.lowagie.text</groupId>
+                       <artifactId>com.springsource.com.lowagie.text</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>javax.wsdl</groupId>
+                       <artifactId>com.springsource.javax.wsdl</artifactId>
+               </dependency>
+
+       </dependencies>
+</project>
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/test/TestManagerService.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/test/TestManagerService.java
new file mode 100644 (file)
index 0000000..8e58fd2
--- /dev/null
@@ -0,0 +1,12 @@
+package org.argeo.slc.services.test;\r
+\r
+import org.argeo.slc.core.test.TestRunDescriptor;\r
+\r
+public interface TestManagerService {\r
+       public void registerTestRunDescriptor(TestRunDescriptor testRunDescriptor);\r
+\r
+       public void addResultToCollection(String collectionId, String resultUuid);\r
+\r
+       public void removeResultFromCollection(String collectionId,\r
+                       String resultUuid);\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/test/impl/TestManagerServiceImpl.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/test/impl/TestManagerServiceImpl.java
new file mode 100644 (file)
index 0000000..b9a3a70
--- /dev/null
@@ -0,0 +1,74 @@
+package org.argeo.slc.services.test.impl;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.argeo.slc.core.process.SlcExecution;\r
+import org.argeo.slc.core.test.TestRunDescriptor;\r
+import org.argeo.slc.core.test.tree.TreeTestResultCollection;\r
+import org.argeo.slc.dao.process.SlcExecutionDao;\r
+import org.argeo.slc.dao.test.TestRunDescriptorDao;\r
+import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao;\r
+import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
+import org.argeo.slc.services.test.TestManagerService;\r
+\r
+public class TestManagerServiceImpl implements TestManagerService {\r
+       private Log log = LogFactory.getLog(getClass());\r
+\r
+       private final TreeTestResultDao treeTestResultDao;\r
+       private final TestRunDescriptorDao testRunDescriptorDao;\r
+       private final SlcExecutionDao slcExecutionDao;\r
+       private final TreeTestResultCollectionDao treeTestResultCollectionDao;\r
+\r
+       public TestManagerServiceImpl(TreeTestResultDao treeTestResultDao,\r
+                       TestRunDescriptorDao testRunDescriptorDao,\r
+                       SlcExecutionDao slcExecutionDao,\r
+                       TreeTestResultCollectionDao treeTestResultCollectionDao) {\r
+               this.treeTestResultDao = treeTestResultDao;\r
+               this.testRunDescriptorDao = testRunDescriptorDao;\r
+               this.slcExecutionDao = slcExecutionDao;\r
+               this.treeTestResultCollectionDao = treeTestResultCollectionDao;\r
+       }\r
+\r
+       public void registerTestRunDescriptor(TestRunDescriptor testRunDescriptor) {\r
+               if (testRunDescriptor != null) {\r
+                       testRunDescriptorDao.saveOrUpdate(testRunDescriptor);\r
+\r
+                       // Update tree test result collection\r
+                       // TODO: optimize\r
+\r
+                       if (testRunDescriptor.getSlcExecutionUuid() != null) {\r
+                               SlcExecution slcExecution = slcExecutionDao\r
+                                               .getSlcExecution(testRunDescriptor\r
+                                                               .getSlcExecutionUuid());\r
+                               if (slcExecution != null) {\r
+                                       String collectionId = slcExecution.getUser() != null ? slcExecution\r
+                                                       .getUser()\r
+                                                       : "default";\r
+                                       addResultToCollection(collectionId, testRunDescriptor\r
+                                                       .getTestResultUuid());\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       public void addResultToCollection(String collectionId, String resultUuid) {\r
+               TreeTestResultCollection ttrc = treeTestResultCollectionDao\r
+                               .getTestResultCollection(collectionId);\r
+               if (ttrc == null) {\r
+                       ttrc = new TreeTestResultCollection(collectionId);\r
+                       treeTestResultCollectionDao.create(ttrc);\r
+               }\r
+               treeTestResultCollectionDao.addResultToCollection(ttrc, resultUuid);\r
+       }\r
+\r
+       public void removeResultFromCollection(String collectionId,\r
+                       String resultUuid) {\r
+               TreeTestResultCollection ttrc = treeTestResultCollectionDao\r
+                               .getTestResultCollection(collectionId);\r
+               if (ttrc != null) {\r
+                       treeTestResultCollectionDao.removeResultFromCollection(ttrc,\r
+                                       resultUuid);\r
+               }\r
+       }\r
+\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/XsltMarshallerView.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/XsltMarshallerView.java
new file mode 100644 (file)
index 0000000..bec44e8
--- /dev/null
@@ -0,0 +1,42 @@
+package org.argeo.slc.web.mvc;\r
+\r
+import javax.xml.parsers.DocumentBuilderFactory;\r
+import javax.xml.transform.Source;\r
+import javax.xml.transform.dom.DOMResult;\r
+import javax.xml.transform.dom.DOMSource;\r
+\r
+import org.argeo.slc.core.SlcException;\r
+import org.argeo.slc.core.process.SlcExecution;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+import org.argeo.slc.core.test.tree.TreeTestResultCollection;\r
+import org.springframework.oxm.Marshaller;\r
+import org.springframework.web.servlet.view.xslt.XsltView;\r
+import org.w3c.dom.Document;\r
+\r
+public class XsltMarshallerView extends XsltView {\r
+\r
+       private Marshaller marshaller;\r
+\r
+       @Override\r
+       protected Class<?>[] getSourceTypes() {\r
+               return new Class[] { TreeTestResult.class,\r
+                               TreeTestResultCollection.class, SlcExecution.class };\r
+       }\r
+\r
+       @Override\r
+       protected Source convertSource(Object source) throws Exception {\r
+               Document document = DocumentBuilderFactory.newInstance()\r
+                               .newDocumentBuilder().newDocument();\r
+               DOMResult result = new DOMResult(document);\r
+               if (!marshaller.supports(source.getClass()))\r
+                       throw new SlcException("Object of type " + source.getClass()\r
+                                       + " not supported.");\r
+               marshaller.marshal(source, result);\r
+               return new DOMSource(result.getNode());\r
+       }\r
+\r
+       public void setMarshaller(Marshaller marshaller) {\r
+               this.marshaller = marshaller;\r
+       }\r
+\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/XsltMarshallerViewResolver.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/XsltMarshallerViewResolver.java
new file mode 100644 (file)
index 0000000..62af08e
--- /dev/null
@@ -0,0 +1,85 @@
+package org.argeo.slc.web.mvc;\r
+\r
+import java.io.IOException;\r
+import java.util.Map;\r
+import java.util.TreeMap;\r
+\r
+import javax.xml.transform.Source;\r
+import javax.xml.transform.TransformerException;\r
+import javax.xml.transform.URIResolver;\r
+import javax.xml.transform.stream.StreamSource;\r
+\r
+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.Resource;\r
+import org.springframework.oxm.Marshaller;\r
+import org.springframework.web.servlet.view.AbstractUrlBasedView;\r
+import org.springframework.web.servlet.view.xslt.XsltViewResolver;\r
+\r
+public class XsltMarshallerViewResolver extends XsltViewResolver implements\r
+               URIResolver {\r
+       private final static Log log = LogFactory\r
+                       .getLog(XsltMarshallerViewResolver.class);\r
+\r
+       private Marshaller marshaller;\r
+       private Map<String, Source> cacheUriResolver = new TreeMap<String, Source>();\r
+\r
+       public XsltMarshallerViewResolver() {\r
+               setUriResolver(this);\r
+       }\r
+\r
+       @Override\r
+       protected AbstractUrlBasedView buildView(String viewName) throws Exception {\r
+               AbstractUrlBasedView viewT = super.buildView(viewName);\r
+               XsltMarshallerView view = (XsltMarshallerView) viewT;\r
+               view.setMarshaller(marshaller);\r
+               return view;\r
+       }\r
+\r
+       public void setMarshaller(Marshaller marshaller) {\r
+               this.marshaller = marshaller;\r
+       }\r
+\r
+       public Source resolve(String href, String base) throws TransformerException {\r
+               if (log.isTraceEnabled())\r
+                       log.trace("Resolve URI for href=" + href + " base=" + base);\r
+\r
+               Source res = null;\r
+               if (isCache())\r
+                       res = cacheUriResolver.get(href);\r
+\r
+               if (res == null)\r
+                       res = getStylesheetSource(href);\r
+\r
+               if (res == null)\r
+                       res = getStylesheetSource(getPrefix() + href);\r
+\r
+               if (res == null)\r
+                       throw new SlcException("Can't resolve URI for href=" + href\r
+                                       + " base=" + base);\r
+\r
+               if (isCache() && !cacheUriResolver.containsKey(href))\r
+                       cacheUriResolver.put(href, res);\r
+\r
+               return res;\r
+       }\r
+\r
+       protected Source getStylesheetSource(String url) {\r
+               if (log.isDebugEnabled()) {\r
+                       log.debug("Loading XSLT stylesheet from '" + url + "'");\r
+               }\r
+               try {\r
+                       final Resource stylesheetResource = getApplicationContext()\r
+                                       .getResource(url);\r
+                       String systemId = url.substring(0, url.lastIndexOf('/') + 1);\r
+                       return new StreamSource(stylesheetResource.getInputStream(),\r
+                                       systemId);\r
+               } catch (IOException e) {\r
+                       if (log.isTraceEnabled())\r
+                               log.trace("Cannot load stylesheet " + url, e);\r
+                       return null;\r
+               }\r
+       }\r
+\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/admin/HomeController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/admin/HomeController.java
new file mode 100644 (file)
index 0000000..7d294d5
--- /dev/null
@@ -0,0 +1,16 @@
+package org.argeo.slc.web.mvc.admin;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.springframework.web.servlet.ModelAndView;\r
+import org.springframework.web.servlet.mvc.ParameterizableViewController;\r
+\r
+public class HomeController extends ParameterizableViewController {\r
+       @Override\r
+       protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
+                       HttpServletResponse response) throws Exception {\r
+               ModelAndView modelAndView = new ModelAndView();\r
+               return modelAndView;\r
+       }\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/SlcExecutionListController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/SlcExecutionListController.java
new file mode 100644 (file)
index 0000000..e5cbbee
--- /dev/null
@@ -0,0 +1,37 @@
+package org.argeo.slc.web.mvc.process;\r
+\r
+import java.util.List;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.springframework.web.servlet.ModelAndView;\r
+import org.springframework.web.servlet.mvc.ParameterizableViewController;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+import org.argeo.slc.core.process.SlcExecution;\r
+import org.argeo.slc.dao.process.SlcExecutionDao;\r
+\r
+public class SlcExecutionListController extends ParameterizableViewController {\r
+       private Log log = LogFactory.getLog(getClass());\r
+\r
+       private final SlcExecutionDao slcExecutionDao;\r
+\r
+       public SlcExecutionListController(SlcExecutionDao slcExecutionDao) {\r
+               this.slcExecutionDao = slcExecutionDao;\r
+       }\r
+\r
+       @Override\r
+       protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
+                       HttpServletResponse response) throws Exception {\r
+               ModelAndView modelAndView = new ModelAndView();\r
+\r
+               List<SlcExecution> slcExecutions = slcExecutionDao.listSlcExecutions();\r
+               modelAndView.addObject("slcExecutions", slcExecutions);\r
+               modelAndView.setViewName(getViewName());\r
+               return modelAndView;\r
+       }\r
+\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/SlcExecutionViewController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/SlcExecutionViewController.java
new file mode 100644 (file)
index 0000000..8867d85
--- /dev/null
@@ -0,0 +1,57 @@
+package org.argeo.slc.web.mvc.process;\r
+\r
+import java.util.List;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.springframework.web.servlet.ModelAndView;\r
+import org.springframework.web.servlet.mvc.ParameterizableViewController;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+import org.argeo.slc.core.SlcException;\r
+import org.argeo.slc.core.process.SlcExecution;\r
+import org.argeo.slc.core.process.SlcExecutionStep;\r
+import org.argeo.slc.dao.process.SlcExecutionDao;\r
+\r
+public class SlcExecutionViewController extends ParameterizableViewController {\r
+       private Log log = LogFactory.getLog(getClass());\r
+\r
+       private final SlcExecutionDao slcExecutionDao;\r
+\r
+       public SlcExecutionViewController(SlcExecutionDao slcExecutionDao) {\r
+               this.slcExecutionDao = slcExecutionDao;\r
+       }\r
+\r
+       @Override\r
+       protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
+                       HttpServletResponse response) throws Exception {\r
+               ModelAndView modelAndView = new ModelAndView();\r
+\r
+               // List<SlcExecution> slcExecutions =\r
+               // slcExecutionDao.listSlcExecutions();\r
+               String uuid = request.getParameter("uuid");\r
+               if (uuid == null)\r
+                       throw new SlcException("Parameter uuid required.");\r
+\r
+               SlcExecution slcExecution = slcExecutionDao.getSlcExecution(uuid);\r
+\r
+               if (slcExecution == null)\r
+                       throw new SlcException("Could not find slc execution with uuid "\r
+                                       + uuid + ".");\r
+\r
+               if (log.isDebugEnabled()) {\r
+                       log.debug("SlcExecution " + slcExecution.getUuid());\r
+               }\r
+\r
+               List<SlcExecutionStep> slcExecutionSteps = slcExecution.getSteps();\r
+\r
+               modelAndView.addObject("slcExecutionSteps", slcExecutionSteps);\r
+               modelAndView.addObject("slcExecution", slcExecution);\r
+               modelAndView.setViewName(getViewName());\r
+               return modelAndView;\r
+       }\r
+\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/AddResultToCollectionController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/AddResultToCollectionController.java
new file mode 100644 (file)
index 0000000..a61101a
--- /dev/null
@@ -0,0 +1,31 @@
+package org.argeo.slc.web.mvc.result;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.argeo.slc.services.test.TestManagerService;\r
+import org.springframework.web.servlet.ModelAndView;\r
+import org.springframework.web.servlet.mvc.ParameterizableViewController;\r
+\r
+public class AddResultToCollectionController extends\r
+               ParameterizableViewController {\r
+       private final TestManagerService testManagerService;\r
+\r
+       public AddResultToCollectionController(TestManagerService testManagerService) {\r
+               this.testManagerService = testManagerService;\r
+       }\r
+\r
+       @Override\r
+       protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
+                       HttpServletResponse response) throws Exception {\r
+\r
+               String collectionId = request.getParameter("collectionId");\r
+               String resultUuid = request.getParameter("resultUuid");\r
+\r
+               testManagerService.addResultToCollection(collectionId, resultUuid);\r
+\r
+               ModelAndView modelAndView = new ModelAndView();\r
+               modelAndView.setViewName(getViewName());\r
+               return modelAndView;\r
+       }\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/RemoveResultFromCollectionController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/RemoveResultFromCollectionController.java
new file mode 100644 (file)
index 0000000..1ab784e
--- /dev/null
@@ -0,0 +1,32 @@
+package org.argeo.slc.web.mvc.result;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.argeo.slc.services.test.TestManagerService;\r
+import org.springframework.web.servlet.ModelAndView;\r
+import org.springframework.web.servlet.mvc.ParameterizableViewController;\r
+\r
+public class RemoveResultFromCollectionController extends\r
+               ParameterizableViewController {\r
+       private final TestManagerService testManagerService;\r
+\r
+       public RemoveResultFromCollectionController(\r
+                       TestManagerService testManagerService) {\r
+               this.testManagerService = testManagerService;\r
+       }\r
+\r
+       @Override\r
+       protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
+                       HttpServletResponse response) throws Exception {\r
+\r
+               String collectionId = request.getParameter("collectionId");\r
+               String resultUuid = request.getParameter("resultUuid");\r
+\r
+               testManagerService.removeResultFromCollection(collectionId, resultUuid);\r
+\r
+               ModelAndView modelAndView = new ModelAndView();\r
+               modelAndView.setViewName(getViewName());\r
+               return modelAndView;\r
+       }\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultCollectionListController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultCollectionListController.java
new file mode 100644 (file)
index 0000000..6867062
--- /dev/null
@@ -0,0 +1,34 @@
+package org.argeo.slc.web.mvc.result;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.springframework.web.servlet.ModelAndView;\r
+import org.springframework.web.servlet.mvc.ParameterizableViewController;\r
+\r
+import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao;\r
+\r
+public class ResultCollectionListController extends\r
+               ParameterizableViewController {\r
+       private final TreeTestResultCollectionDao testResultCollectionDao;\r
+\r
+       public ResultCollectionListController(\r
+                       TreeTestResultCollectionDao testResultCollectionDao) {\r
+               this.testResultCollectionDao = testResultCollectionDao;\r
+       }\r
+\r
+       @Override\r
+       protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
+                       HttpServletResponse response) throws Exception {\r
+               ModelAndView modelAndView = new ModelAndView();\r
+\r
+               // no need to retrieve since collection list is always in session\r
+\r
+               // SortedSet<TreeTestResultCollection> results = testResultCollectionDao\r
+               // .listCollections();\r
+               // modelAndView.addObject("resultCollections", results);\r
+\r
+               modelAndView.setViewName(getViewName());\r
+               return modelAndView;\r
+       }\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultCollectionViewController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultCollectionViewController.java
new file mode 100644 (file)
index 0000000..52950fd
--- /dev/null
@@ -0,0 +1,34 @@
+package org.argeo.slc.web.mvc.result;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.argeo.slc.core.test.tree.TreeTestResultCollection;\r
+import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao;\r
+import org.springframework.web.servlet.ModelAndView;\r
+import org.springframework.web.servlet.mvc.ParameterizableViewController;\r
+\r
+public class ResultCollectionViewController extends\r
+               ParameterizableViewController {\r
+       private final TreeTestResultCollectionDao testResultCollectionDao;\r
+\r
+       public ResultCollectionViewController(\r
+                       TreeTestResultCollectionDao testResultCollectionDao) {\r
+               this.testResultCollectionDao = testResultCollectionDao;\r
+       }\r
+\r
+       @Override\r
+       protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
+                       HttpServletResponse response) throws Exception {\r
+\r
+               String id = request.getParameter("id");\r
+\r
+               TreeTestResultCollection resultCollection = testResultCollectionDao\r
+                               .getTestResultCollection(id);\r
+\r
+               ModelAndView modelAndView = new ModelAndView();\r
+               modelAndView.addObject("resultCollection", resultCollection);\r
+               modelAndView.setViewName(getViewName());\r
+               return modelAndView;\r
+       }\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultExcelView.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultExcelView.java
new file mode 100644 (file)
index 0000000..5f2c9ef
--- /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 between paths
+                       }
+               } catch (Exception e) {
+                       throw new SlcException("Could not write spreadsheet.", e);
+               }
+       }
+}
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultInterceptor.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultInterceptor.java
new file mode 100644 (file)
index 0000000..5148413
--- /dev/null
@@ -0,0 +1,27 @@
+package org.argeo.slc.web.mvc.result;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.springframework.web.servlet.ModelAndView;\r
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;\r
+\r
+import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao;\r
+\r
+public class ResultInterceptor extends HandlerInterceptorAdapter {\r
+       private final TreeTestResultCollectionDao testResultCollectionDao;\r
+\r
+       public ResultInterceptor(TreeTestResultCollectionDao testResultCollectionDao) {\r
+               this.testResultCollectionDao = testResultCollectionDao;\r
+       }\r
+\r
+       @Override\r
+       public void postHandle(HttpServletRequest request,\r
+                       HttpServletResponse response, Object handler,\r
+                       ModelAndView modelAndView) throws Exception {\r
+               request.setAttribute("resultCollections", testResultCollectionDao\r
+                               .listCollections());\r
+               super.postHandle(request, response, handler, modelAndView);\r
+       }\r
+\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultListController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultListController.java
new file mode 100644 (file)
index 0000000..c522642
--- /dev/null
@@ -0,0 +1,34 @@
+package org.argeo.slc.web.mvc.result;\r
+\r
+import java.util.SortedSet;\r
+import java.util.TreeSet;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.springframework.web.servlet.ModelAndView;\r
+import org.springframework.web.servlet.mvc.ParameterizableViewController;\r
+\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
+\r
+public class ResultListController extends ParameterizableViewController {\r
+       private final TreeTestResultDao testResultDao;\r
+\r
+       public ResultListController(TreeTestResultDao testResultDao) {\r
+               this.testResultDao = testResultDao;\r
+       }\r
+\r
+       @Override\r
+       protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
+                       HttpServletResponse response) throws Exception {\r
+\r
+               ModelAndView modelAndView = new ModelAndView();\r
+\r
+               SortedSet<TreeTestResult> results = new TreeSet<TreeTestResult>();\r
+               results.addAll(testResultDao.listTestResults());\r
+               modelAndView.addObject("results", results);\r
+               modelAndView.setViewName(getViewName());\r
+               return modelAndView;\r
+       }\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultPdfView.java b/runtime/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);
+               }
+
+       }
+
+}
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultViewController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultViewController.java
new file mode 100644 (file)
index 0000000..f87f3ac
--- /dev/null
@@ -0,0 +1,114 @@
+package org.argeo.slc.web.mvc.result;\r
+\r
+import java.util.SortedMap;\r
+import java.util.TreeMap;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.springframework.web.servlet.ModelAndView;\r
+import org.springframework.web.servlet.mvc.ParameterizableViewController;\r
+\r
+import org.argeo.slc.core.structure.StructureElement;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.TestResultPart;\r
+import org.argeo.slc.core.test.TestStatus;\r
+import org.argeo.slc.core.test.tree.PartSubList;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+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
+               this.testResultDao = testResultDao;\r
+       }\r
+\r
+       @Override\r
+       protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
+                       HttpServletResponse response) throws Exception {\r
+\r
+               String uuid = request.getParameter("uuid");\r
+               TreeTestResult result = testResultDao.getTestResult(uuid);\r
+\r
+               SortedMap<TreeSPath, String> toc = generateToc(result);\r
+\r
+               SortedMap<TreeSPath, String> describedPaths = new TreeMap<TreeSPath, String>();\r
+               for (TreeSPath path : toc.keySet()) {\r
+                       describedPaths.put(path, describedPath(path, result));\r
+               }\r
+\r
+               SortedMap<TreeSPath, String> anchors = new TreeMap<TreeSPath, String>();\r
+               for (TreeSPath path : toc.keySet()) {\r
+                       anchors.put(path, anchor(path));\r
+               }\r
+\r
+               ModelAndView modelAndView = new ModelAndView();\r
+\r
+               modelAndView.addObject(MODELKEY_RESULT, result);\r
+               modelAndView.addObject("toc", toc);\r
+               modelAndView.addObject("describedPaths", describedPaths);\r
+               modelAndView.addObject("anchors", anchors);\r
+               modelAndView.setViewName(getViewName());\r
+               return modelAndView;\r
+       }\r
+\r
+       private SortedMap<TreeSPath, String> generateToc(TreeTestResult result) {\r
+               SortedMap<TreeSPath, String> toc = new TreeMap<TreeSPath, String>();\r
+               for (TreeSPath path : result.getResultParts().keySet()) {\r
+                       PartSubList subList = (PartSubList) result.getResultParts().get(\r
+                                       path);\r
+                       boolean isFailed = false;\r
+                       for (TestResultPart part : subList.getParts()) {\r
+                               if (!part.getStatus().equals(TestStatus.PASSED)) {\r
+                                       isFailed = true;\r
+                                       break;\r
+                               }\r
+                       }\r
+                       fillToc(toc, path, isFailed);\r
+               }\r
+               return toc;\r
+       }\r
+\r
+       private void fillToc(SortedMap<TreeSPath, String> toc, TreeSPath path,\r
+                       boolean isFailed) {\r
+               if (isFailed) {\r
+                       toc.put(path, "failed");\r
+               } else {\r
+                       if (!toc.containsKey(path)) {\r
+                               toc.put(path, "passed");\r
+                       }\r
+               }\r
+\r
+               if (path.getParent() != null) {\r
+                       fillToc(toc, path.getParent(), isFailed);\r
+               }\r
+       }\r
+\r
+       private static String anchor(TreeSPath path) {\r
+               return path.getAsUniqueString().replace(path.getSeparator(), '_');\r
+       }\r
+\r
+       private static String describedPath(TreeSPath path, TreeTestResult ttr) {\r
+               StringBuffer buf = new StringBuffer("");\r
+               // TODO :optimize with hierarchy\r
+               describedPath(path, buf, ttr);\r
+               return buf.toString();\r
+       }\r
+\r
+       private static void describedPath(TreeSPath path, StringBuffer buf,\r
+                       TreeTestResult ttr) {\r
+               if (path.getParent() != null) {\r
+                       describedPath(path.getParent(), buf, ttr);\r
+               }\r
+               String description = path.getName();\r
+               StructureElement element = ttr.getElements().get(path);\r
+               if (element != null) {\r
+                       description = element.getLabel();\r
+               }\r
+               buf.append('/').append(description);\r
+       }\r
+\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/TestRunViewController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/TestRunViewController.java
new file mode 100644 (file)
index 0000000..8665ffe
--- /dev/null
@@ -0,0 +1,33 @@
+package org.argeo.slc.web.mvc.result;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.springframework.web.servlet.ModelAndView;\r
+import org.springframework.web.servlet.mvc.ParameterizableViewController;\r
+\r
+import org.argeo.slc.core.test.TestRunDescriptor;\r
+import org.argeo.slc.dao.test.TestRunDescriptorDao;\r
+\r
+public class TestRunViewController extends ParameterizableViewController {\r
+       private final TestRunDescriptorDao testRunDescriptorDao;\r
+\r
+       public TestRunViewController(TestRunDescriptorDao testRunDescriptorDao) {\r
+               this.testRunDescriptorDao = testRunDescriptorDao;\r
+       }\r
+\r
+       @Override\r
+       protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
+                       HttpServletResponse response) throws Exception {\r
+\r
+               String uuid = request.getParameter("uuid");\r
+               TestRunDescriptor testRunDescriptor = testRunDescriptorDao\r
+                               .getTestRunDescriptor(uuid);\r
+\r
+               ModelAndView modelAndView = new ModelAndView();\r
+               modelAndView.addObject("testRunDescriptor", testRunDescriptor);\r
+               modelAndView.setViewName(getViewName());\r
+               return modelAndView;\r
+       }\r
+\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/CustomSoapExceptionResolver.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/CustomSoapExceptionResolver.java
new file mode 100644 (file)
index 0000000..0c59c1c
--- /dev/null
@@ -0,0 +1,28 @@
+package org.argeo.slc.ws;\r
+\r
+import javax.xml.namespace.QName;\r
+\r
+import org.springframework.ws.context.MessageContext;\r
+import org.springframework.ws.soap.SoapFault;\r
+import org.springframework.ws.soap.SoapFaultDetail;\r
+import org.springframework.ws.soap.server.endpoint.SimpleSoapExceptionResolver;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+public class CustomSoapExceptionResolver extends SimpleSoapExceptionResolver {\r
+       private Log log = LogFactory.getLog(getClass());\r
+\r
+       @Override\r
+       protected void customizeFault(MessageContext messageContext,\r
+                       Object endpoint, Exception ex, SoapFault fault) {\r
+               log.error("Exception " + ex.getMessage() + " in end point " + endpoint,\r
+                               ex);\r
+               SoapFaultDetail detail = fault.addFaultDetail();\r
+               for (StackTraceElement elem : ex.getStackTrace()) {\r
+                       detail.addFaultDetailElement(new QName("StackElement")).addText(\r
+                                       elem.toString());\r
+               }\r
+       }\r
+\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/process/SlcExecutionRequestEp.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/process/SlcExecutionRequestEp.java
new file mode 100644 (file)
index 0000000..2123989
--- /dev/null
@@ -0,0 +1,69 @@
+package org.argeo.slc.ws.process;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.argeo.slc.core.SlcException;
+import org.argeo.slc.core.process.SlcExecution;
+import org.argeo.slc.dao.process.SlcExecutionDao;
+import org.argeo.slc.msg.process.SlcExecutionRequest;
+import org.argeo.slc.msg.process.SlcExecutionStatusRequest;
+
+import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint;
+
+public class SlcExecutionRequestEp extends AbstractMarshallingPayloadEndpoint {
+
+       private Log log = LogFactory.getLog(getClass());
+
+       private final SlcExecutionDao slcExecutionDao;
+
+       public SlcExecutionRequestEp(SlcExecutionDao slcExecutionDao) {
+               this.slcExecutionDao = slcExecutionDao;
+       }
+
+       @Override
+       protected Object invokeInternal(Object requestObject) throws Exception {
+               if (requestObject instanceof SlcExecutionRequest) {
+
+                       SlcExecutionRequest msg = (SlcExecutionRequest) requestObject;
+                       SlcExecution slcExecutionMsg = msg.getSlcExecution();
+
+                       SlcExecution slcExecutionPersisted = slcExecutionDao
+                                       .getSlcExecution(slcExecutionMsg.getUuid());
+                       if (slcExecutionPersisted == null) {
+                               if (log.isTraceEnabled())
+                                       log.trace("Creating SLC execution #"
+                                                       + slcExecutionMsg.getUuid());
+
+                               slcExecutionDao.create(slcExecutionMsg);
+                       } else {
+                               if (log.isTraceEnabled())
+                                       log.trace("Updating SLC execution #"
+                                                       + slcExecutionMsg.getUuid());
+
+                               slcExecutionDao.merge(slcExecutionMsg);
+                       }
+                       return null;
+
+               } else if (requestObject instanceof SlcExecutionStatusRequest) {
+                       SlcExecutionStatusRequest msg = (SlcExecutionStatusRequest) requestObject;
+                       SlcExecution slcExecution = slcExecutionDao.getSlcExecution(msg
+                                       .getSlcExecutionUuid());
+                       if (slcExecution == null)
+                               throw new SlcException("Could not find SLC execution #"
+                                               + msg.getSlcExecutionUuid());
+
+                       slcExecution.setStatus(msg.getNewStatus());
+
+                       if (log.isTraceEnabled())
+                               log.trace("Updating status for SLC execution #"
+                                               + slcExecution.getUuid());
+
+                       slcExecutionDao.update(slcExecution);
+                       return null;
+               } else {
+                       throw new SlcException("Unrecognized request format: "
+                                       + requestObject.getClass());
+               }
+       }
+}
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/process/SlcExecutionStepsRequestEp.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/process/SlcExecutionStepsRequestEp.java
new file mode 100644 (file)
index 0000000..c15b4de
--- /dev/null
@@ -0,0 +1,47 @@
+package org.argeo.slc.ws.process;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.core.process.SlcExecutionStep;
+import org.argeo.slc.dao.process.SlcExecutionDao;
+import org.argeo.slc.msg.process.SlcExecutionStepsRequest;
+import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint;
+
+public class SlcExecutionStepsRequestEp extends
+               AbstractMarshallingPayloadEndpoint {
+
+       private Log log = LogFactory.getLog(getClass());
+
+       private final SlcExecutionDao slcExecutionDao;
+
+       public SlcExecutionStepsRequestEp(SlcExecutionDao slcExecutionDao) {
+               this.slcExecutionDao = slcExecutionDao;
+       }
+
+       @Override
+       protected Object invokeInternal(Object requestObject) throws Exception {
+               String uuid = null;
+               try {
+                       SlcExecutionStepsRequest msg = (SlcExecutionStepsRequest) requestObject;
+                       uuid = msg.getSlcExecutionUuid();
+                       if (log.isTraceEnabled()) {
+                               log.trace("Trying to add additional steps to SLC execution #"
+                                               + uuid + ":");
+                               for (SlcExecutionStep step : msg.getSteps()) {
+                                       log.trace("Step " + step.getUuid() + " (in SLC execution #"
+                                                       + uuid + ")");
+                               }
+                               log.trace("Adding " + msg.getSteps().size()
+                                               + " steps to SLC execution #" + uuid);
+                       }
+
+                       slcExecutionDao.addSteps(uuid, msg.getSteps());
+                       return null;
+               } catch (Exception e) {
+                       log.error("Could not update SLC execution #" + uuid
+                                       + " with additional steps", e);
+                       throw e;
+               }
+       }
+
+}
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CloseTreeTestResultRequestEp.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CloseTreeTestResultRequestEp.java
new file mode 100644 (file)
index 0000000..507dc34
--- /dev/null
@@ -0,0 +1,35 @@
+package org.argeo.slc.ws.test.tree;
+
+import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.argeo.slc.dao.test.tree.TreeTestResultDao;
+import org.argeo.slc.msg.test.tree.CloseTreeTestResultRequest;
+
+public class CloseTreeTestResultRequestEp extends
+               AbstractMarshallingPayloadEndpoint {
+
+       private Log log = LogFactory.getLog(getClass());
+
+       private final TreeTestResultDao treeTestResultDao;
+
+       public CloseTreeTestResultRequestEp(TreeTestResultDao treeTestResultDao) {
+               this.treeTestResultDao = treeTestResultDao;
+       }
+
+       @Override
+       protected Object invokeInternal(Object requestObject) throws Exception {
+               CloseTreeTestResultRequest msg = (CloseTreeTestResultRequest) requestObject;
+
+               if (log.isTraceEnabled())
+                       log.trace("Closing result #" + msg.getResultUuid() + " at date "
+                                       + msg.getCloseDate());
+
+               treeTestResultDao.close(msg.getResultUuid(), msg.getCloseDate());
+
+               return null;
+       }
+
+}
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CreateTreeTestResultRequestEp.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CreateTreeTestResultRequestEp.java
new file mode 100644 (file)
index 0000000..f61d866
--- /dev/null
@@ -0,0 +1,45 @@
+package org.argeo.slc.ws.test.tree;
+
+import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.argeo.slc.core.test.tree.TreeTestResult;
+import org.argeo.slc.dao.test.tree.TreeTestResultDao;
+import org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest;
+import org.argeo.slc.services.test.TestManagerService;
+
+public class CreateTreeTestResultRequestEp extends
+               AbstractMarshallingPayloadEndpoint {
+
+       private Log log = LogFactory.getLog(getClass());
+
+       private final TreeTestResultDao treeTestResultDao;
+       private final TestManagerService testManagerService;
+
+       public CreateTreeTestResultRequestEp(TreeTestResultDao treeTestResultDao,
+                       TestManagerService testManagerService) {
+               this.treeTestResultDao = treeTestResultDao;
+               this.testManagerService = testManagerService;
+       }
+
+       @Override
+       protected Object invokeInternal(Object requestObject) throws Exception {
+               CreateTreeTestResultRequest msg = (CreateTreeTestResultRequest) requestObject;
+               TreeTestResult treeTestResult = msg.getTreeTestResult();
+
+               if (log.isTraceEnabled())
+                       log.trace("Creating result #" + treeTestResult.getUuid());
+               treeTestResultDao.create(treeTestResult);
+
+               if (log.isTraceEnabled())
+                       log.trace("Registering test run descriptor #"
+                                       + msg.getTestRunDescriptor().getTestRunUuid());
+               testManagerService
+                               .registerTestRunDescriptor(msg.getTestRunDescriptor());
+
+               return null;
+       }
+
+}
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/ResultPartRequestEp.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/ResultPartRequestEp.java
new file mode 100644 (file)
index 0000000..d8ebbfd
--- /dev/null
@@ -0,0 +1,46 @@
+package org.argeo.slc.ws.test.tree;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.dao.test.tree.TreeTestResultDao;
+import org.argeo.slc.msg.test.tree.ResultPartRequest;
+import org.argeo.slc.services.test.TestManagerService;
+import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint;
+
+public class ResultPartRequestEp extends AbstractMarshallingPayloadEndpoint {
+
+       private Log log = LogFactory.getLog(getClass());
+
+       private final TreeTestResultDao treeTestResultDao;
+       private final TestManagerService testManagerService;
+
+       public ResultPartRequestEp(TreeTestResultDao treeTestResultDao,
+                       TestManagerService testManagerService) {
+               this.treeTestResultDao = treeTestResultDao;
+               this.testManagerService = testManagerService;
+       }
+
+       @Override
+       protected Object invokeInternal(Object requestObject) throws Exception {
+               ResultPartRequest msg = (ResultPartRequest) requestObject;
+
+               if (log.isTraceEnabled())
+                       log.trace("Registering test run descriptor #"
+                                       + msg.getTestRunDescriptor().getTestRunUuid());
+
+               testManagerService
+                               .registerTestRunDescriptor(msg.getTestRunDescriptor());
+
+               if (log.isTraceEnabled())
+                       log.trace("Adding result part to test result #"
+                                       + msg.getResultUuid());
+
+               treeTestResultDao.addResultPart(msg.getResultUuid(), msg.getPath(), msg
+                               .getResultPart(), msg.getRelatedElements());
+//             treeTestResultDao.updateAttributes(msg.getResultUuid(), msg
+//                             .getAttributes());
+
+               return null;
+       }
+
+}
diff --git a/runtime/org.argeo.slc.server/src/main/resources/META-INF/MANIFEST.MF b/runtime/org.argeo.slc.server/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..929d52f
--- /dev/null
@@ -0,0 +1,81 @@
+Manifest-Version: 1.0\r
+Export-Package: org.argeo.slc.web.mvc;uses:="org.springframework.oxm,o\r
+ rg.apache.commons.logging,org.springframework.web.servlet.view,org.sp\r
+ ringframework.core.io,org.springframework.context,org.argeo.slc.core.\r
+ test.tree,javax.xml.parsers,javax.xml.transform.dom,org.w3c.dom,org.a\r
+ rgeo.slc.core,javax.xml.transform,org.springframework.web.servlet.vie\r
+ w.xslt,javax.xml.transform.stream,org.argeo.slc.core.process";version\r
+ ="0.11.2.SNAPSHOT",org.argeo.slc.ws.process;uses:="org.springframewor\r
+ k.ws.server.endpoint,org.apache.commons.logging,org.argeo.slc.core,or\r
+ g.argeo.slc.core.process,org.argeo.slc.msg.process,org.argeo.slc.dao.\r
+ process";version="0.11.2.SNAPSHOT",org.argeo.slc.web.mvc.process;uses\r
+ :="org.springframework.web.servlet.mvc,org.apache.commons.logging,org\r
+ .argeo.slc.core,org.springframework.web.servlet,org.argeo.slc.core.pr\r
+ ocess,org.argeo.slc.dao.process,javax.servlet.http";version="0.11.2.S\r
+ NAPSHOT",org.argeo.slc.web.mvc.admin;uses:="org.springframework.web.s\r
+ ervlet.mvc,org.springframework.web.servlet,javax.servlet.http";versio\r
+ n="0.11.2.SNAPSHOT",org.argeo.slc.ws.test.tree;uses:="org.springframe\r
+ work.ws.server.endpoint,org.apache.commons.logging,org.argeo.slc.msg.\r
+ test.tree,org.argeo.slc.core.test.tree,org.argeo.slc.services.test,or\r
+ g.argeo.slc.dao.test.tree,org.argeo.slc.core.structure.tree,org.argeo\r
+ .slc.core.test";version="0.11.2.SNAPSHOT",org.argeo.slc.web.mvc.resul\r
+ t;uses:="org.springframework.web.servlet,com.lowagie.text.pdf,org.arg\r
+ eo.slc.services.test,org.argeo.slc.core.test.tree,com.lowagie.text,or\r
+ g.argeo.slc.dao.test.tree,org.argeo.slc.core.test,org.argeo.slc.core.\r
+ structure,jxl.write,org.springframework.web.servlet.mvc,org.argeo.slc\r
+ .dao.test,org.argeo.slc.core,org.springframework.web.servlet.handler,\r
+ org.springframework.web.servlet.view.document,org.argeo.slc.core.stru\r
+ cture.tree,javax.servlet.http";version="0.11.2.SNAPSHOT",org.argeo.sl\r
+ c.services.test.impl;uses:="org.argeo.slc.dao.test,org.apache.commons\r
+ .logging,org.argeo.slc.services.test,org.argeo.slc.core.test.tree,org\r
+ .argeo.slc.core.process,org.argeo.slc.dao.process,org.argeo.slc.dao.t\r
+ est.tree,org.argeo.slc.core.test";version="0.11.2.SNAPSHOT",org.argeo\r
+ .slc.services.test;uses:="org.argeo.slc.core.test";version="0.11.2.SN\r
+ APSHOT",org.argeo.slc.ws;uses:="org.apache.commons.logging,org.spring\r
+ framework.ws.soap,org.springframework.ws.soap.server.endpoint,org.spr\r
+ ingframework.ws.context,javax.xml.namespace";version="0.11.2.SNAPSHOT\r
+ ",org.argeo.slc.server.spring;version="0.11.2.SNAPSHOT"\r
+Tool: Bnd-0.0.255\r
+Bundle-Name: Argeo SLC Server\r
+Created-By: 1.6.0 (Sun Microsystems Inc.)\r
+Bundle-Vendor: Argeo\r
+Bundle-Version: 0.11.2.SNAPSHOT\r
+Bundle-ManifestVersion: 2\r
+Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt\r
+Bundle-Description: SLC Server\r
+Import-Package: com.lowagie.text;version="2.0",com.lowagie.text.pdf;ve\r
+ rsion="2.0",javax.servlet.http,javax.xml.namespace;version="1.3",java\r
+ x.xml.parsers;version="1.3",javax.xml.transform;version="1.3",javax.x\r
+ ml.transform.dom;version="1.3",javax.xml.transform.stream;version="1.\r
+ 3",jxl.write;version="2.6",org.apache.commons.logging;version="1.1",o\r
+ rg.argeo.slc.core;version="0.11.2.SNAPSHOT",org.argeo.slc.core.proces\r
+ s;version="0.11.2.SNAPSHOT",org.argeo.slc.core.structure;version="0.1\r
+ 1.2.SNAPSHOT",org.argeo.slc.core.structure.tree;version="0.11.2.SNAPS\r
+ HOT",org.argeo.slc.core.test;version="0.11.2.SNAPSHOT",org.argeo.slc.\r
+ core.test.tree;version="0.11.2.SNAPSHOT",org.argeo.slc.dao.process;ve\r
+ rsion="0.11.2.SNAPSHOT",org.argeo.slc.dao.test;version="0.11.2.SNAPSH\r
+ OT",org.argeo.slc.dao.test.tree;version="0.11.2.SNAPSHOT",org.argeo.s\r
+ lc.msg.process;version="0.11.2.SNAPSHOT",org.argeo.slc.msg.test.tree;\r
+ version="0.11.2.SNAPSHOT",org.argeo.slc.server.spring;version="0.11.2\r
+ .SNAPSHOT",org.argeo.slc.services.test;version="0.11.2.SNAPSHOT",org.\r
+ argeo.slc.services.test.impl;version="0.11.2.SNAPSHOT",org.argeo.slc.\r
+ web.mvc;version="0.11.2.SNAPSHOT",org.argeo.slc.web.mvc.admin;version\r
+ ="0.11.2.SNAPSHOT",org.argeo.slc.web.mvc.process;version="0.11.2.SNAP\r
+ SHOT",org.argeo.slc.web.mvc.result;version="0.11.2.SNAPSHOT",org.arge\r
+ o.slc.ws;version="0.11.2.SNAPSHOT",org.argeo.slc.ws.process;version="\r
+ 0.11.2.SNAPSHOT",org.argeo.slc.ws.test.tree;version="0.11.2.SNAPSHOT"\r
+ ,org.springframework.context;version="2.5.6.A",org.springframework.co\r
+ re.io;version="2.5.6.A",org.springframework.oxm;version="1.5.5.A",org\r
+ .springframework.web.servlet;version="2.5.6.A",org.springframework.we\r
+ b.servlet.handler;version="2.5.6.A",org.springframework.web.servlet.m\r
+ vc;version="2.5.6.A",org.springframework.web.servlet.view;version="2.\r
+ 5.6.A",org.springframework.web.servlet.view.document;version="2.5.6.A\r
+ ",org.springframework.web.servlet.view.xslt;version="2.5.6.A",org.spr\r
+ ingframework.ws.context;version="1.5.5.A",org.springframework.ws.serv\r
+ er.endpoint;version="1.5.5.A",org.springframework.ws.soap;version="1.\r
+ 5.5.A",org.springframework.ws.soap.server.endpoint;version="1.5.5.A",\r
+ org.w3c.dom;version="1.3"\r
+Bundle-SymbolicName: org.argeo.slc.server\r
+Bundle-DocURL: http://www.argeo.org\r
+Originally-Created-By: 1.6.0 (Sun Microsystems Inc.)\r
+\r
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/jmx.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/jmx.xml
new file mode 100644 (file)
index 0000000..267b598
--- /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"
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xsi:schemaLocation="
+        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
+       default-lazy-init="true">
+
+       <!-- MBeans -->
+       <bean id="hibernateStatistics"
+               class="org.hibernate.jmx.StatisticsService" lazy-init="false">
+               <property name="sessionFactory" ref="sessionFactory" />
+       </bean>
+
+       <!-- JMX -->
+       <bean id="jmxExporter"
+               class="org.springframework.jmx.export.MBeanExporter"
+               lazy-init="false">
+               <property name="beans">
+                       <map>
+                               <entry
+                                       key="bean:name=hibernateStatistics,type=statistics,sessionFactory=sessionFactory"
+                                       value-ref="hibernateStatistics" />
+                       </map>
+               </property>
+       </bean>
+
+       <bean id="jxmServerConnector"
+               class="org.springframework.jmx.support.ConnectorServerFactoryBean"
+               lazy-init="false" depends-on="rmiRegistry">
+               <property name="objectName" value="connector:name=rmi" />
+               <property name="serviceUrl"
+                       value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/springconnector" />
+       </bean>
+
+       <bean id="rmiRegistry"
+               class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"
+               lazy-init="false">
+               <property name="port" value="1099" />
+       </bean>
+</beans>
\ No newline at end of file
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml
new file mode 100644 (file)
index 0000000..69dffa7
--- /dev/null
@@ -0,0 +1,154 @@
+<?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"
+    xmlns:tx="http://www.springframework.org/schema/tx"
+    xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
+       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
+    default-lazy-init="true">
+
+    <import
+        resource="classpath:/org/argeo/slc/hibernate/spring/applicationContext.xml" />
+    <import resource="transaction.xml" />
+
+    <!--  Properties -->
+    <bean
+        class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"
+        lazy-init="false">
+        <property name="contextOverride" value="true" />
+        <property name="properties">
+            <props>
+                <prop key="sessionFactoryParentBean">
+                    slcServerDefault.sessionFactory.HSQLTest
+                </prop>
+            </props>
+        </property>
+    </bean>
+
+    <!-- Use session factories -->
+    <bean id="sessionFactory" parent="${sessionFactoryParentBean}" />
+
+    <!--  JNDI data source  -->
+    <bean id="slcDefault.jndiTemplate"
+        class="org.springframework.jndi.JndiTemplate">
+    </bean>
+
+    <bean id="slcDefaut.dataSourceJndi"
+        class="org.springframework.jndi.JndiObjectFactoryBean">
+        <property name="jndiTemplate" ref="slcDefault.jndiTemplate" />
+        <property name="jndiName" value="java:comp/env/jdbc/mainDs" />
+    </bean>
+
+    <!-- DB types -->
+    <bean id="slcServerDefault.sessionFactory.HSQL"
+        parent="slcTemplates.sessionFactory.hibernateBasic">
+        <property name="dataSource" ref="slcDefaut.dataSourceJndi" />
+        <property name="hibernateProperties">
+            <value><![CDATA[
+                               hibernate.dialect=org.hibernate.dialect.HSQLDialect
+                               hibernate.hbm2ddl.auto=update
+                               hibernate.connection.autocommit=false
+                       ]]></value>
+        </property>
+    </bean>
+
+    <bean id="slcServerDefault.sessionFactory.HSQLTest"
+        parent="slcTemplates.sessionFactory.hibernateBasic">
+        <property name="dataSource" ref="slcDefaut.dataSourceJndi" />
+        <property name="hibernateProperties">
+            <value><![CDATA[
+                               hibernate.dialect=org.hibernate.dialect.HSQLDialect
+                               hibernate.hbm2ddl.auto=create
+                               hibernate.generate_statistics=true
+                               hibernate.connection.autocommit=false
+                       ]]></value>
+        </property>
+    </bean>
+
+    <bean id="slcServerDefault.sessionFactory.MySQL"
+        parent="slcTemplates.sessionFactory.hibernateBasic">
+        <property name="dataSource" ref="slcDefaut.dataSourceJndi" />
+        <property name="hibernateProperties">
+            <value><![CDATA[
+                               hibernate.dialect=org.hibernate.dialect.MySQLDialect
+                               hibernate.hbm2ddl.auto=update
+                               hibernate.connection.autocommit=false
+                       ]]></value>
+        </property>
+    </bean>
+
+    <bean id="slcServerDefault.sessionFactory.MySQL5"
+        parent="slcTemplates.sessionFactory.hibernateBasic">
+        <property name="dataSource" ref="slcDefaut.dataSourceJndi" />
+        <property name="hibernateProperties">
+            <value><![CDATA[
+                hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
+                hibernate.hbm2ddl.auto=update
+                hibernate.connection.autocommit=false
+            ]]></value>
+        </property>
+    </bean>
+
+    <bean id="slcServerDefault.sessionFactory.Sybase"
+        parent="slcTemplates.sessionFactory.hibernateBasic">
+        <property name="dataSource" ref="slcDefaut.dataSourceJndi" />
+        <property name="hibernateProperties">
+            <value><![CDATA[
+                hibernate.dialect=org.hibernate.dialect.SybaseDialect
+                hibernate.hbm2ddl.auto=update
+                hibernate.connection.autocommit=false
+            ]]></value>
+        </property>
+    </bean>
+
+    <!-- Services -->
+    <bean id="testManagerService"
+        class="org.argeo.slc.services.test.impl.TestManagerServiceImpl">
+        <constructor-arg ref="testResultDao" />
+        <constructor-arg ref="testRunDescriptorDao" />
+        <constructor-arg ref="slcExecutionDao" />
+        <constructor-arg ref="testResultCollectionDao" />
+    </bean>
+
+    <!-- DAOs -->
+    <bean id="hibernateTemplate"
+        class="org.springframework.orm.hibernate3.HibernateTemplate">
+        <property name="sessionFactory" ref="sessionFactory" />
+        <property name="allowCreate" value="false" />
+    </bean>
+
+    <bean id="testResultDao" parent="slcTemplates.dao.testResultDao">
+        <property name="hibernateTemplate" ref="hibernateTemplate" />
+    </bean>
+
+    <bean id="testResultCollectionDao"
+        parent="slcTemplates.dao.testResultCollectionDao">
+        <property name="hibernateTemplate" ref="hibernateTemplate" />
+    </bean>
+
+    <bean id="testRunDescriptorDao"
+        parent="slcTemplates.dao.testRunDescriptorDao">
+        <property name="hibernateTemplate" ref="hibernateTemplate" />
+    </bean>
+
+    <bean id="slcExecutionDao"
+        parent="slcTemplates.dao.slcExecutionDao">
+        <property name="hibernateTemplate" ref="hibernateTemplate" />
+    </bean>
+
+    <!-- Hibernate instrumentation -->
+    <bean id="osivInterceptor"
+        class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
+        <property name="sessionFactory" ref="sessionFactory" />
+    </bean>
+
+    <!-- Transaction -->
+    <bean id="transactionManager"
+        class="org.springframework.orm.hibernate3.HibernateTransactionManager"
+        lazy-init="false">
+        <property name="sessionFactory" ref="sessionFactory" />
+    </bean>
+
+</beans>
\ No newline at end of file
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-doc-servlet.xml b/runtime/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
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-ui-servlet.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-ui-servlet.xml
new file mode 100644 (file)
index 0000000..4376621
--- /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">
+
+       <bean name="/resultList.ui"
+               class="org.argeo.slc.web.mvc.result.ResultListController">
+               <constructor-arg ref="testResultDao" />
+               <property name="viewName" value="resultList" />
+       </bean>
+
+       <bean id="handlerMapping"
+               class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
+               <property name="interceptors">
+                       <list>
+                               <ref bean="resultInterceptor" />
+                               <ref bean="osivInterceptor" />
+                       </list>
+               </property>
+       </bean>
+
+       <bean id="resultInterceptor"
+               class="org.argeo.slc.web.mvc.result.ResultInterceptor">
+               <constructor-arg ref="testResultCollectionDao" />
+       </bean>
+
+       <bean id="viewResolver"
+               class="org.springframework.web.servlet.view.InternalResourceViewResolver">
+               <property name="viewClass">
+                       <value>org.springframework.web.servlet.view.JstlView</value>
+               </property>
+               <property name="prefix">
+                       <value>WEB-INF/slc-ui/</value>
+               </property>
+               <property name="suffix">
+                       <value>.jsp</value>
+               </property>
+       </bean>
+
+
+</beans>
\ No newline at end of file
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-web-servlet.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-web-servlet.xml
new file mode 100644 (file)
index 0000000..06d7ceb
--- /dev/null
@@ -0,0 +1,95 @@
+<?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">
+
+       <bean name="/home.web"
+               class="org.argeo.slc.web.mvc.admin.HomeController">
+               <property name="viewName" value="home.jsp" />
+       </bean>
+
+       <bean name="/slcExecutionList.web"
+               class="org.argeo.slc.web.mvc.process.SlcExecutionListController">
+               <constructor-arg ref="slcExecutionDao" />
+               <property name="viewName" value="slcExecutionList" />
+       </bean>
+
+       <bean name="/slcExecutionView.web"
+               class="org.argeo.slc.web.mvc.process.SlcExecutionViewController">
+               <constructor-arg ref="slcExecutionDao" />
+               <property name="viewName" value="slcExecutionView" />
+       </bean>
+
+       <bean name="/resultList.web"
+               class="org.argeo.slc.web.mvc.result.ResultListController">
+               <constructor-arg ref="testResultDao" />
+               <property name="viewName" value="resultList" />
+       </bean>
+
+       <bean name="/resultView.web"
+               class="org.argeo.slc.web.mvc.result.ResultViewController">
+               <constructor-arg ref="testResultDao" />
+               <property name="viewName" value="resultView" />
+       </bean>
+
+       <bean name="/resultCollectionList.web"
+               class="org.argeo.slc.web.mvc.result.ResultCollectionListController">
+               <constructor-arg ref="testResultCollectionDao" />
+               <property name="viewName" value="resultCollectionList" />
+       </bean>
+
+       <bean name="/resultCollectionView.web"
+               class="org.argeo.slc.web.mvc.result.ResultCollectionViewController">
+               <constructor-arg ref="testResultCollectionDao" />
+               <property name="viewName" value="resultCollectionView" />
+       </bean>
+
+       <bean name="/addResultToCollection.web"
+               class="org.argeo.slc.web.mvc.result.AddResultToCollectionController">
+               <constructor-arg ref="testManagerService" />
+               <property name="viewName" value="addResultToCollectionS" />
+       </bean>
+
+       <bean name="/removeResultFromCollection.web"
+               class="org.argeo.slc.web.mvc.result.RemoveResultFromCollectionController">
+               <constructor-arg ref="testManagerService" />
+               <property name="viewName" value="removeResultFromCollectionS" />
+       </bean>
+
+       <bean name="/testRunView.web"
+               class="org.argeo.slc.web.mvc.result.TestRunViewController">
+               <constructor-arg ref="testRunDescriptorDao" />
+               <property name="viewName" value="testRunView" />
+       </bean>
+
+       <bean id="handlerMapping"
+               class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
+               <property name="interceptors">
+                       <list>
+                               <ref bean="resultInterceptor" />
+                               <ref bean="osivInterceptor" />
+                       </list>
+               </property>
+       </bean>
+
+       <bean id="resultInterceptor"
+               class="org.argeo.slc.web.mvc.result.ResultInterceptor">
+               <constructor-arg ref="testResultCollectionDao" />
+       </bean>
+
+       <bean id="viewResolver"
+               class="org.springframework.web.servlet.view.InternalResourceViewResolver">
+               <property name="viewClass">
+                       <value>org.springframework.web.servlet.view.JstlView</value>
+               </property>
+               <property name="prefix">
+                       <value>WEB-INF/slc-jsp/</value>
+               </property>
+               <property name="suffix">
+                       <value>.jsp</value>
+               </property>
+       </bean>
+
+
+</beans>
\ No newline at end of file
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-ws-servlet.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-ws-servlet.xml
new file mode 100644 (file)
index 0000000..e5300af
--- /dev/null
@@ -0,0 +1,119 @@
+<?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"
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xsi:schemaLocation="
+        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
+     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
+
+       <import
+               resource="classpath:/org/argeo/slc/castor/spring/applicationContext.xml" />
+       <import
+               resource="classpath:/org/argeo/slc/xml/spring/applicationContext.xml" />
+
+       <bean name="slcExecutionRequestEp"
+               class="org.argeo.slc.ws.process.SlcExecutionRequestEp">
+               <constructor-arg ref="slcExecutionDao" />
+               <property name="marshaller" ref="slcDefault.castor.marshaller" />
+               <property name="unmarshaller"
+                       ref="slcDefault.castor.marshaller" />
+       </bean>
+
+       <bean name="slcExecutionStepsRequestEp"
+               class="org.argeo.slc.ws.process.SlcExecutionStepsRequestEp">
+               <constructor-arg ref="slcExecutionDao" />
+               <property name="marshaller" ref="slcDefault.castor.marshaller" />
+               <property name="unmarshaller"
+                       ref="slcDefault.castor.marshaller" />
+       </bean>
+
+       <bean name="createTreeTestResultRequestEp"
+               class="org.argeo.slc.ws.test.tree.CreateTreeTestResultRequestEp">
+               <constructor-arg ref="testResultDao" />
+        <constructor-arg ref="testManagerService" />
+               <property name="marshaller" ref="slcDefault.castor.marshaller" />
+               <property name="unmarshaller"
+                       ref="slcDefault.castor.marshaller" />
+       </bean>
+
+       <bean name="closeTreeTestResultRequestEp"
+               class="org.argeo.slc.ws.test.tree.CloseTreeTestResultRequestEp">
+               <constructor-arg ref="testResultDao" />
+               <property name="marshaller" ref="slcDefault.castor.marshaller" />
+               <property name="unmarshaller"
+                       ref="slcDefault.castor.marshaller" />
+       </bean>
+
+       <bean name="resultPartRequestEp"
+               class="org.argeo.slc.ws.test.tree.ResultPartRequestEp">
+               <constructor-arg ref="testResultDao" />
+               <constructor-arg ref="testManagerService" />
+               <property name="marshaller" ref="slcDefault.castor.marshaller" />
+               <property name="unmarshaller"
+                       ref="slcDefault.castor.marshaller" />
+       </bean>
+
+       <bean id="endPointMapping"
+               class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
+               <property name="mappings">
+
+                       <props>
+                               <prop
+                                       key="{http://argeo.org/projects/slc/schemas}slc-execution-request">
+                                       slcExecutionRequestEp
+                               </prop>
+                               <prop
+                                       key="{http://argeo.org/projects/slc/schemas}slc-execution-status-request">
+                                       slcExecutionRequestEp
+                               </prop>
+                               <prop
+                                       key="{http://argeo.org/projects/slc/schemas}slc-execution-steps-request">
+                                       slcExecutionStepsRequestEp
+                               </prop>
+                               <prop
+                                       key="{http://argeo.org/projects/slc/schemas}create-tree-test-result-request">
+                                       createTreeTestResultRequestEp
+                               </prop>
+                               <prop
+                                       key="{http://argeo.org/projects/slc/schemas}close-tree-test-result-request">
+                                       closeTreeTestResultRequestEp
+                               </prop>
+                               <prop
+                                       key="{http://argeo.org/projects/slc/schemas}result-part-request">
+                                       resultPartRequestEp
+                               </prop>
+                       </props>
+               </property>
+
+               <property name="interceptors">
+                       <bean
+                               class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor" />
+               </property>
+       </bean>
+
+       <bean id="slcDefinition"
+               class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
+               <property name="schema" ref="slcDefault.xml.xsdSchema" />
+               <property name="portTypeName" value="Slc" />
+               <property name="targetNamespace"
+                       value="http://argeo.org/projects/slc/definitions" />
+               <property name="requestSuffix" value="-request" />
+       </bean>
+
+       <bean class="org.argeo.slc.ws.CustomSoapExceptionResolver" />
+       
+       <!-- Web Services transactions -->
+       <aop:config>
+               <aop:pointcut id="epMethods"
+                       expression="execution(* org.springframework.ws.server.endpoint.MessageEndpoint.invoke(..))" />
+               <aop:advisor advice-ref="epAdvice" pointcut-ref="epMethods" />
+       </aop:config>
+
+       <tx:advice id="epAdvice" transaction-manager="transactionManager">
+               <tx:attributes>
+                       <tx:method name="*" propagation="REQUIRED" />
+               </tx:attributes>
+       </tx:advice>
+</beans>
\ No newline at end of file
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-xslt-servlet.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-xslt-servlet.xml
new file mode 100644 (file)
index 0000000..35afb02
--- /dev/null
@@ -0,0 +1,35 @@
+<?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">
+
+       <import
+               resource="classpath:/org/argeo/slc/castor/spring/applicationContext.xml" />
+
+       <bean
+               class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
+               <property name="interceptors">
+                       <list>
+                               <ref bean="osivInterceptor" />
+                       </list>
+               </property>
+       </bean>
+
+
+       <bean id="viewResolverXslt"
+               class="org.argeo.slc.web.mvc.XsltMarshallerViewResolver">
+               <property name="viewClass">
+                       <value>org.argeo.slc.web.mvc.XsltMarshallerView</value>
+               </property>
+               <property name="prefix">
+                       <value>WEB-INF/xslt/</value>
+               </property>
+               <property name="suffix">
+                       <value>.xsl</value>
+               </property>
+               <property name="marshaller" ref="slcDefault.castor.marshaller" />
+       </bean>
+
+</beans>
\ No newline at end of file
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/transaction.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/transaction.xml
new file mode 100644 (file)
index 0000000..43cabb8
--- /dev/null
@@ -0,0 +1,51 @@
+<?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"
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
+       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
+
+       <!-- Transaction -->
+       <bean id="transactionManager"
+               class="org.springframework.orm.hibernate3.HibernateTransactionManager"
+               lazy-init="false">
+               <property name="sessionFactory" ref="sessionFactory" />
+       </bean>
+
+       <!-- DAO transactions -->
+       <aop:config>
+               <aop:pointcut id="daoProcessMethods"
+                       expression="execution(* org.argeo.slc.dao.process.*.*(..))" />
+               <aop:advisor advice-ref="daoAdvice"
+                       pointcut-ref="daoProcessMethods" />
+       </aop:config>
+
+       <aop:config>
+               <aop:pointcut id="daoTestMethods"
+                       expression="execution(* org.argeo.slc.dao.test.*.*(..))" />
+               <aop:advisor advice-ref="daoAdvice"
+                       pointcut-ref="daoTestMethods" />
+       </aop:config>
+
+       <aop:config>
+               <aop:pointcut id="daoTestTreeMethods"
+                       expression="execution(* org.argeo.slc.dao.test.tree.*.*(..))" />
+               <aop:advisor advice-ref="daoAdvice"
+                       pointcut-ref="daoTestTreeMethods" />
+       </aop:config>
+
+       <tx:advice id="daoAdvice"
+               transaction-manager="transactionManager">
+               <tx:attributes>
+                       <tx:method name="get*" propagation="REQUIRED"
+                               read-only="true" />
+                       <tx:method name="list*" propagation="REQUIRED"
+                               read-only="true" />
+                       <tx:method name="*" propagation="REQUIRED" />
+               </tx:attributes>
+       </tx:advice>
+
+</beans>
\ No newline at end of file