public class UnsupportedException extends SlcException {\r
static final long serialVersionUID = 1l;\r
\r
+ public UnsupportedException() {\r
+ this("Action not supported");\r
+ }\r
+\r
public UnsupportedException(String message) {\r
super(message);\r
}\r
+ elements.size() + ")");\r
}\r
\r
- // public void register(StructurePath path,StructureAware structureAware) {\r
- // register(path,structureAware.getElement());\r
- // structureAware.onRegister(this,path);\r
- // }\r
-\r
public StructureElement getElement(StructurePath path) {\r
int index = paths.indexOf(path);\r
if (index >= 0) {\r
* @see TreeSPath\r
*/\r
public class SimpleSElement implements StructureElement {\r
+ /** For ORM */\r
+ private Long tid;\r
private String description;\r
\r
+ /** For ORM */\r
+ public SimpleSElement() {\r
+ }\r
+\r
public SimpleSElement(String description) {\r
this.description = description;\r
}\r
this.description = description;\r
}\r
\r
+ Long getTid() {\r
+ return tid;\r
+ }\r
+\r
+ void setTid(Long tid) {\r
+ this.tid = tid;\r
+ }\r
+\r
}\r
import java.util.StringTokenizer;\r
import java.util.Vector;\r
\r
+import org.argeo.slc.core.SlcException;\r
import org.argeo.slc.core.structure.StructurePath;\r
import org.argeo.slc.core.structure.StructureRegistry;\r
\r
private String name;\r
private Character separator = DEFAULT_SEPARATOR;\r
\r
+ /** For ORM */\r
+ private Long tid;\r
+\r
public String getAsUniqueString() {\r
String parentStr = parent != null ? parent.getAsUniqueString() : "";\r
return parentStr + separator + name;\r
\r
/** Create a child . */\r
public TreeSPath createChild(String name) {\r
+ if (name.indexOf(separator) > -1) {\r
+ throw new SlcException("Tree path name '" + name\r
+ + "' contains separator character " + separator);\r
+ }\r
TreeSPath path = new TreeSPath();\r
path.parent = this;\r
path.name = name;\r
return paths;\r
}\r
\r
+ public TreeSPath getRoot(){\r
+ TreeSPath root = this;\r
+ while(root.getParent()!=null){\r
+ root = root.getParent();\r
+ }\r
+ return root;\r
+ }\r
+ \r
@Override\r
public String toString() {\r
return getAsUniqueString();\r
return getAsUniqueString().compareTo(o.getAsUniqueString());\r
}\r
\r
+ Long getTid() {\r
+ return tid;\r
+ }\r
+\r
+ void setTid(Long tid) {\r
+ this.tid = tid;\r
+ }\r
+\r
+ public void setSeparator(Character separator) {\r
+ this.separator = separator;\r
+ }\r
+\r
+ protected void setParent(TreeSPath parent) {\r
+ this.parent = parent;\r
+ }\r
+\r
+ protected void setName(String name) {\r
+ this.name = name;\r
+ }\r
+\r
}\r
--- /dev/null
+package org.argeo.slc.core.structure.tree;\r
+\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.TreeMap;\r
+import java.util.Vector;\r
+\r
+import org.argeo.slc.core.UnsupportedException;\r
+import org.argeo.slc.core.structure.SimpleSElement;\r
+import org.argeo.slc.core.structure.StructureElement;\r
+import org.argeo.slc.core.structure.StructurePath;\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
+\r
+public class TreeSRegistry implements StructureRegistry {\r
+ /** For ORM */\r
+ private Long tid;\r
+ private TreeSPath root;\r
+ private Map<TreeSPath, SimpleSElement> elements = new TreeMap<TreeSPath, SimpleSElement>();\r
+\r
+ private String mode = StructureRegistry.ALL;\r
+\r
+ private List<StructurePath> activePaths;\r
+\r
+ public StructureElement getElement(StructurePath path) {\r
+ return elements.get(path);\r
+ }\r
+\r
+ public List<StructureElement> listElements() {\r
+ return new Vector<StructureElement>(elements.values());\r
+ }\r
+\r
+ public List<StructurePath> listPaths() {\r
+ return new Vector<StructurePath>(elements.keySet());\r
+ }\r
+\r
+ public void register(StructurePath path, StructureElement element) {\r
+ final SimpleSElement simpleSElement;\r
+ if (element instanceof SimpleSElement){\r
+ simpleSElement = (SimpleSElement)element;\r
+ }else{\r
+ simpleSElement = new SimpleSElement(element.getDescription());\r
+ }\r
+ \r
+ if (!(path instanceof TreeSPath))\r
+ throw new UnsupportedException("path", path);\r
+\r
+ elements.put((TreeSPath) path, simpleSElement);\r
+\r
+ }\r
+\r
+ public String getMode() {\r
+ return mode;\r
+ }\r
+\r
+ public void setMode(String mode) {\r
+ this.mode = mode;\r
+ }\r
+\r
+ public List<StructurePath> getActivePaths() {\r
+ return activePaths;\r
+ }\r
+\r
+ public void setActivePaths(List<StructurePath> activePaths) {\r
+ this.activePaths = activePaths;\r
+ }\r
+\r
+ public TreeSPath getRoot() {\r
+ return root;\r
+ }\r
+\r
+ public void setRoot(TreeSPath root) {\r
+ this.root = root;\r
+ }\r
+\r
+ public Map<TreeSPath, SimpleSElement> getElements() {\r
+ return elements;\r
+ }\r
+\r
+ public void setElements(Map<TreeSPath, SimpleSElement> elements) {\r
+ this.elements = elements;\r
+ }\r
+\r
+ Long getTid() {\r
+ return tid;\r
+ }\r
+\r
+ void setTid(Long tid) {\r
+ this.tid = tid;\r
+ }\r
+\r
+}\r
import java.io.IOException;\r
import java.util.List;\r
\r
+import org.argeo.slc.core.SlcException;\r
import org.argeo.slc.core.structure.StructureAware;\r
import org.argeo.slc.core.structure.StructureElement;\r
import org.argeo.slc.core.structure.StructurePath;\r
import org.argeo.slc.core.structure.StructureRegistry;\r
import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.structure.tree.TreeSRegistry;\r
import org.argeo.slc.core.test.SimpleResultPart;\r
import org.argeo.slc.core.test.SimpleTestResult;\r
import org.argeo.slc.core.test.TestStatus;\r
import org.argeo.slc.core.test.TestReport;\r
import org.argeo.slc.core.test.TestResult;\r
import org.argeo.slc.core.test.TestResultPart;\r
+import org.argeo.slc.dao.structure.tree.TreeSRegistryDao;\r
import org.argeo.slc.dao.test.TestResultDao;\r
\r
/**\r
*/\r
public class FullHtmlTreeReport implements TestReport, StructureAware {\r
private TestResultDao testResultDao;\r
+ private TreeSRegistryDao treeSRegistryDao;\r
private File reportDir;\r
\r
private StructureRegistry registry;\r
\r
public void generateTestReport(TestResult testResult) {\r
+ \r
if (testResultDao == null) {\r
TreeTestResult result = (TreeTestResult) testResult;\r
+ initRegistry(result.getResultParts().firstKey());\r
generateResultPage(getResultFile(result), result);\r
} else {\r
if (reportDir.exists()) {\r
\r
List<TestResult> list = testResultDao.listTestResults();\r
for (TestResult testRes : list) {\r
- TreeTestResult res = (TreeTestResult) testRes;\r
+ TreeTestResult result = (TreeTestResult) testRes;\r
+ initRegistry(result.getResultParts().firstKey());\r
\r
- File file = getResultFile(res);\r
+ File file = getResultFile(result);\r
index.append("<tr><td><a href=\"").append(file.getName())\r
.append("\">");\r
- index.append(res.getTestResultId()).append("</a></td></tr>\n");\r
- generateResultPage(file, res);\r
+ index.append(result.getTestResultId()).append("</a></td></tr>\n");\r
+ generateResultPage(file, result);\r
}\r
\r
index.append("</table>\n</body></html>");\r
this.testResultDao = testResultDao;\r
}\r
\r
+ public void setTreeSRegistryDao(TreeSRegistryDao treeSRegistryDao) {\r
+ this.treeSRegistryDao = treeSRegistryDao;\r
+ }\r
+\r
/** Sets the directory where to generate all the data. */\r
public void setReportDir(File reportDir) {\r
this.reportDir = reportDir;\r
}\r
\r
+ protected void initRegistry(TreeSPath path){\r
+ if(treeSRegistryDao != null){\r
+ registry = treeSRegistryDao.getTreeSRegistry(path);\r
+ }\r
+ if(registry==null){\r
+ throw new SlcException("No structure registry available");\r
+ }\r
+ }\r
+ \r
public void notifyCurrentPath(StructureRegistry registry, StructurePath path) {\r
this.registry = registry;\r
}\r
import java.util.List;\r
import java.util.SortedMap;\r
import java.util.TreeMap;\r
+import java.util.Vector;\r
\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
private Long tid;\r
\r
private NumericTRId testResultId;\r
- private List<TestResultListener> listeners;\r
+ private List<TestResultListener> listeners = new Vector<TestResultListener>();\r
\r
private TreeSPath currentPath;\r
\r
\r
private SortedMap<TreeSPath, PartSubList> resultParts = new TreeMap<TreeSPath, PartSubList>();\r
\r
+ private StructureRegistry registry;\r
+ \r
public TestResultId getTestResultId() {\r
return testResultId;\r
}\r
\r
public void notifyCurrentPath(StructureRegistry registry, StructurePath path) {\r
currentPath = (TreeSPath) path;\r
+ this.registry = registry;\r
}\r
\r
public TreeSPath getCurrentPath() {\r
this.tid = tid;\r
}\r
\r
+ public StructureRegistry getRegistry() {\r
+ return registry;\r
+ }\r
+\r
+ public void setRegistry(StructureRegistry registry) {\r
+ this.registry = registry;\r
+ }\r
+\r
}\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
\r
+import org.argeo.slc.core.structure.SimpleSElement;\r
+import org.argeo.slc.core.structure.StructureElement;\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.structure.tree.TreeSRegistry;\r
+import org.argeo.slc.dao.structure.tree.TreeSPathDao;\r
+import org.argeo.slc.dao.structure.tree.TreeSRegistryDao;\r
import org.argeo.slc.dao.test.TestResultDao;\r
\r
/**\r
private static Log log = LogFactory.getLog(TreeTestResultPersister.class);\r
\r
private TestResultDao testResultDao;\r
+ private TreeSPathDao treeSPathDao;\r
+ private TreeSRegistryDao treeSRegistryDao;\r
\r
@Override\r
protected void resultPartAdded(PartStruct partStruct) {\r
try {\r
TreeTestResult persistedResult = (TreeTestResult) testResultDao\r
.getTestResult(partStruct.resultId);\r
+\r
+ TreeSPath path = treeSPathDao.getOrCreate(partStruct.path);\r
+\r
+ TreeSRegistry registry = getOrCreateTreeSRegistry(path);\r
+ if (registry.getElement(path) == null) {\r
+ StructureRegistry localRegistry = partStruct.result\r
+ .getRegistry();\r
+ if (localRegistry != null) {\r
+ registry.register(path, localRegistry.getElement(path));\r
+ } else {\r
+ registry.register(path, new SimpleSElement(path.getName()));\r
+ }\r
+ }\r
+\r
if (persistedResult == null) {\r
persistedResult = new TreeTestResult();\r
persistedResult.setNumericResultId(partStruct.resultId);\r
PartSubList subList = new PartSubList();\r
subList.getParts().add(partStruct.part);\r
- persistedResult.getResultParts().put(partStruct.path, subList);\r
+ persistedResult.getResultParts().put(path, subList);\r
\r
testResultDao.create(persistedResult);\r
} else {\r
- PartSubList subList = persistedResult.getResultParts().get(\r
- partStruct.path);\r
+ PartSubList subList = persistedResult.getResultParts()\r
+ .get(path);\r
if (subList == null) {\r
subList = new PartSubList();\r
- persistedResult.getResultParts().put(partStruct.path,\r
- subList);\r
+ persistedResult.getResultParts().put(path, subList);\r
}\r
- persistedResult.getResultParts().get(partStruct.path)\r
- .getParts().add(partStruct.part);\r
+ persistedResult.getResultParts().get(path).getParts().add(\r
+ partStruct.part);\r
\r
if (log.isTraceEnabled()) {\r
log.trace("ResultId:" + persistedResult.getTestResultId());\r
}\r
}\r
\r
+ private TreeSRegistry getOrCreateTreeSRegistry(TreeSPath path) {\r
+ TreeSRegistry registry = treeSRegistryDao.getTreeSRegistry(path);\r
+ if (registry == null) {\r
+ registry = new TreeSRegistry();\r
+ TreeSPath root = treeSPathDao.getOrCreate(path.getRoot());\r
+ registry.setRoot(root);\r
+ treeSRegistryDao.create(registry);\r
+ return treeSRegistryDao.getTreeSRegistry(path);\r
+ } else {\r
+ return registry;\r
+ }\r
+ }\r
+\r
/** Sets the dao to use in order to persist the results. */\r
public void setTestResultDao(TestResultDao testResultDao) {\r
this.testResultDao = testResultDao;\r
}\r
\r
+ public void setTreeSPathDao(TreeSPathDao treeSPathDao) {\r
+ this.treeSPathDao = treeSPathDao;\r
+ }\r
+\r
+ public void setTreeSRegistryDao(TreeSRegistryDao treeSRegistryDao) {\r
+ this.treeSRegistryDao = treeSRegistryDao;\r
+ }\r
+\r
}\r
--- /dev/null
+package org.argeo.slc.dao.structure;\r
+\r
+public interface SimpleSElementDao {\r
+\r
+}\r
--- /dev/null
+package org.argeo.slc.dao.structure.tree;\r
+\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+\r
+public interface TreeSPathDao {\r
+ public void create(TreeSPath path);\r
+ public TreeSPath getTreeSPath(String pathString);\r
+ public TreeSPath getOrCreate(TreeSPath pathTransient);\r
+}\r
--- /dev/null
+package org.argeo.slc.dao.structure.tree;\r
+\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.structure.tree.TreeSRegistry;\r
+\r
+public interface TreeSRegistryDao {\r
+ public TreeSRegistry getTreeSRegistry(TreeSPath treeSPath);\r
+ public void create(TreeSRegistry registry);\r
+}\r
--- /dev/null
+<?xml version="1.0"?>\r
+<!DOCTYPE hibernate-mapping PUBLIC\r
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"\r
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">\r
+<hibernate-mapping package="org.argeo.slc.core.structure">\r
+ <class name="SimpleSElement" table="SIMPLE_SELEMENT">\r
+ <id name="tid" column="T_ID">\r
+ <generator class="native" />\r
+ </id>\r
+ <property name="description" column="DESCRIPTION"\r
+ not-null="true" />\r
+ </class>\r
+</hibernate-mapping>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0"?>\r
+<!DOCTYPE hibernate-mapping PUBLIC\r
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"\r
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">\r
+<hibernate-mapping package="org.argeo.slc.core.structure.tree">\r
+ <class name="TreeSPath" table="TREE_SPATH">\r
+ <id name="tid" column="T_ID">\r
+ <generator class="native" />\r
+ </id>\r
+ <property name="asUniqueString" column="PATH" not-null="true"\r
+ unique="true" />\r
+ <property name="separator" column="SEPARATOR" not-null="true" />\r
+ </class>\r
+</hibernate-mapping>
\ No newline at end of file
--- /dev/null
+package org.argeo.slc.hibernate.structure.tree;\r
+\r
+import java.util.List;\r
+\r
+import org.springframework.orm.hibernate3.support.HibernateDaoSupport;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+import org.argeo.slc.dao.structure.tree.TreeSPathDao;\r
+\r
+/**\r
+ * The Hibernate implementation for tree-based result of the test result dao.\r
+ * \r
+ * @see TreeTestResult\r
+ */\r
+public class TreeSPathDaoHibernate extends HibernateDaoSupport implements\r
+ TreeSPathDao {\r
+\r
+ private static Log log = LogFactory.getLog(TreeSPathDaoHibernate.class);\r
+\r
+ public void create(TreeSPath path) {\r
+ createImpl(path);\r
+ }\r
+\r
+ \r
+ protected void createImpl(TreeSPath path) {\r
+ if (path.getParent() != null) {\r
+ TreeSPath parent = getTreeSPath(path.getParent()\r
+ .getAsUniqueString());\r
+ if (parent == null) {\r
+ createImpl(path.getParent());\r
+ }\r
+ }\r
+ getHibernateTemplate().save(path);\r
+ if (log.isTraceEnabled())\r
+ log.trace("Saved TreeSPath " + path.getAsUniqueString());\r
+ }\r
+\r
+ public TreeSPath getTreeSPath(String pathString) {\r
+ if (log.isTraceEnabled())\r
+ log.trace("Query path: " + pathString);\r
+ List<?> list = getHibernateTemplate().find(\r
+ "from TreeSPath where asUniqueString=?", pathString);\r
+ if (list.size() == 0) {\r
+ return null;\r
+ } else {\r
+ return (TreeSPath) list.get(0);\r
+ }\r
+ }\r
+\r
+ public TreeSPath getOrCreate(TreeSPath pathTransient) {\r
+ TreeSPath path = getTreeSPath(pathTransient\r
+ .getAsUniqueString());\r
+ if (path != null) {\r
+ return path;\r
+ } else {\r
+ create(pathTransient);\r
+ // TODO: optimize\r
+ return getTreeSPath(pathTransient.getAsUniqueString());\r
+ }\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+<?xml version="1.0"?>\r
+<!DOCTYPE hibernate-mapping PUBLIC\r
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"\r
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">\r
+<hibernate-mapping package="org.argeo.slc.core.structure.tree">\r
+ <class name="TreeSRegistry" table="TREE_SREGISTRY">\r
+ <id name="tid" column="T_ID">\r
+ <generator class="native" />\r
+ </id>\r
+\r
+ <many-to-one name="root" column="ROOT_PATH_ID" unique="true"\r
+ not-null="true" />\r
+ \r
+ <map name="elements" table="REGISTRY_ELEMENTS" cascade="all"\r
+ lazy="false" sort="natural">\r
+ <key column="PARENT_ID" />\r
+ <map-key-many-to-many class="TreeSPath" column="PATH" />\r
+\r
+ <many-to-many\r
+ class="org.argeo.slc.core.structure.SimpleSElement"\r
+ column="ELEMENT_ID" unique="true" lazy="false" />\r
+ </map>\r
+\r
+ </class>\r
+</hibernate-mapping>
\ No newline at end of file
--- /dev/null
+package org.argeo.slc.hibernate.structure.tree;\r
+\r
+import java.util.List;\r
+\r
+import org.springframework.orm.hibernate3.support.HibernateDaoSupport;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.structure.tree.TreeSRegistry;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+import org.argeo.slc.dao.structure.tree.TreeSPathDao;\r
+import org.argeo.slc.dao.structure.tree.TreeSRegistryDao;\r
+\r
+/**\r
+ * The Hibernate implementation for tree-based result of the test result dao.\r
+ * \r
+ * @see TreeTestResult\r
+ */\r
+public class TreeSRegistryDaoHibernate extends HibernateDaoSupport implements\r
+ TreeSRegistryDao {\r
+\r
+ //private static Log log = LogFactory.getLog(TreeSRegistryDaoHibernate.class);\r
+\r
+ public void create(TreeSRegistry registry) {\r
+ getHibernateTemplate().save(registry);\r
+ }\r
+\r
+ public TreeSRegistry getTreeSRegistry(TreeSPath treeSPath) {\r
+ List<?> list = getHibernateTemplate().find(\r
+ "from TreeSRegistry where root.asUniqueString=?",\r
+ treeSPath.getRoot().getAsUniqueString());\r
+ if (list.size() == 0) {\r
+ return null;\r
+ } else {\r
+ return (TreeSRegistry) list.get(0);\r
+ }\r
+ }\r
+\r
+}\r
</id>\r
\r
<many-to-one name="numericResultId" unique="true"\r
- not-null="true" column="TEST_RESULT_ID" cascade="all" lazy="false"/>\r
+ not-null="true" column="TEST_RESULT_ID" cascade="all" lazy="false" />\r
\r
- <map name="resultParts" table="RESULT_PARTS_MAP"\r
- cascade="all" lazy="false" sort="natural">\r
+ <map name="resultParts" table="RESULT_PARTS_MAP" cascade="all"\r
+ lazy="false" sort="natural">\r
<key column="PARENT_ID" />\r
- <composite-map-key\r
- class="org.argeo.slc.core.structure.tree.TreeSPath">\r
- <key-property name="asUniqueString" column="PATH" />\r
- </composite-map-key>\r
+ <map-key-many-to-many\r
+ class="org.argeo.slc.core.structure.tree.TreeSPath" column="PATH" />\r
<many-to-many class="PartSubList" column="PART_SUB_LIST_ID"\r
- unique="true" lazy="false"/>\r
+ unique="true" lazy="false" />\r
</map>\r
</class>\r
</hibernate-mapping>
\ No newline at end of file
* Helper to make db vendor independent tests using DbUnit data sets. Based on\r
* {@link DbModel}.\r
*/\r
-public class IndependentDbTestCase extends SpringBasedTestCase {\r
+public abstract class IndependentDbTestCase extends SpringBasedTestCase {\r
private IDatabaseTester databaseTester;\r
\r
/** Creates the DDL of the data model and loads the data. */\r
import junit.framework.TestCase;\r
\r
/** Helper for tests using a Spring application co,text. */\r
-public class SpringBasedTestCase extends TestCase {\r
+public abstract class SpringBasedTestCase extends TestCase {\r
private ApplicationContext context;\r
\r
/**\r
--- /dev/null
+# Set root logger level to DEBUG and its only appender to A1.\r
+log4j.rootLogger=INFO, console\r
+\r
+## Levels\r
+# Slc\r
+log4j.logger.org.argeo.slc=DEBUG\r
+# Spring\r
+log4j.logger.org.springframework=INFO\r
+# Hibernate\r
+log4j.logger.org.hibernate=WARN\r
+#log4j.logger.org.hibernate.SQL=TRACE\r
+#log4j.logger.org.hibernate.tool.hbm2ddl=TRACE\r
+#log4j.logger.org.hibernate.type=TRACE\r
+\r
+\r
+## Appenders\r
+# A1 is set to be a ConsoleAppender.\r
+log4j.appender.console=org.apache.log4j.ConsoleAppender\r
+\r
+# A1 uses PatternLayout.\r
+log4j.appender.console.layout=org.apache.log4j.PatternLayout\r
+log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c %n\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<beans xmlns="http://www.springframework.org/schema/beans"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">\r
+\r
+ <!-- Results -->\r
+ <bean id="dataSource"\r
+ class="org.springframework.jdbc.datasource.SingleConnectionDataSource"\r
+ destroy-method="destroy">\r
+ <property name="driverClassName" value="org.hsqldb.jdbcDriver" />\r
+ <property name="url" value="jdbc:hsqldb:mem:test" />\r
+ <property name="username" value="sa" />\r
+ <property name="password" value="" />\r
+ <property name="suppressClose" value="true" />\r
+ </bean>\r
+\r
+ <bean id="sessionFactory"\r
+ class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">\r
+ <property name="dataSource" ref="dataSource" />\r
+ <property name="mappingResources">\r
+ <list>\r
+ <value>\r
+ org/argeo/slc/hibernate/structure/SimpleSElement.hbm.xml\r
+ </value>\r
+ <value>\r
+ org/argeo/slc/hibernate/structure/tree/TreeSPath.hbm.xml\r
+ </value>\r
+ <value>\r
+ org/argeo/slc/hibernate/structure/tree/TreeSRegistry.hbm.xml\r
+ </value>\r
+ <value>\r
+ org/argeo/slc/hibernate/test/NumericTRId.hbm.xml\r
+ </value>\r
+ <value>\r
+ org/argeo/slc/hibernate/test/SimpleResultPart.hbm.xml\r
+ </value>\r
+ <value>\r
+ org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml\r
+ </value>\r
+ <value>\r
+ org/argeo/slc/hibernate/test/tree/PartSubList.hbm.xml\r
+ </value>\r
+ </list>\r
+ </property>\r
+ <property name="hibernateProperties">\r
+ <value>\r
+ hibernate.dialect=org.hibernate.dialect.HSQLDialect\r
+ hibernate.hbm2ddl.auto=create\r
+ </value>\r
+ </property>\r
+ </bean>\r
+\r
+ <bean id="treeSPathDao"\r
+ class="org.argeo.slc.hibernate.structure.tree.TreeSPathDaoHibernate">\r
+ <property name="sessionFactory" ref="sessionFactory" />\r
+ </bean>\r
+ \r
+ <bean id="treeSRegistryDao"\r
+ class="org.argeo.slc.hibernate.structure.tree.TreeSRegistryDaoHibernate">\r
+ <property name="sessionFactory" ref="sessionFactory" />\r
+ </bean>\r
+ \r
+ <bean id="testResultDao"\r
+ class="org.argeo.slc.hibernate.test.tree.TestResultDaoHibernate">\r
+ <property name="sessionFactory" ref="sessionFactory" />\r
+ </bean>\r
+</beans>
\ No newline at end of file
--- /dev/null
+package org.argeo.slc.hibernate.structure.tree;\r
+\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.dao.structure.tree.TreeSPathDao;\r
+import org.argeo.slc.unit.SpringBasedTestCase;\r
+\r
+public class TreeSPathDaoHibernateTest extends SpringBasedTestCase {\r
+\r
+ public void testCreate() {\r
+ TreeSPathDao treeSPathDao = (TreeSPathDao) getContext().getBean(\r
+ "treeSPathDao");\r
+ \r
+ String pathParentStr = "#root#testParent";\r
+ String pathStr = pathParentStr+"#test";\r
+ TreeSPath path = TreeSPath.parseToCreatePath(pathStr, '#');\r
+ treeSPathDao.create(path);\r
+ \r
+ TreeSPath pathChild = treeSPathDao.getTreeSPath(pathStr);\r
+ assertEquals(path, pathChild);\r
+ \r
+ TreeSPath pathParent = treeSPathDao.getTreeSPath(pathParentStr);\r
+ assertEquals(path.getParent(), pathParent);\r
+ }\r
+\r
+ @Override\r
+ protected String getApplicationContextLocation() {\r
+ return "org/argeo/slc/hibernate/applicationContext.xml";\r
+ }\r
+ \r
+ \r
+}\r
--- /dev/null
+package org.argeo.slc.hibernate.structure.tree;\r
+\r
+import org.argeo.slc.core.structure.SimpleSElement;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.structure.tree.TreeSRegistry;\r
+import org.argeo.slc.dao.structure.tree.TreeSPathDao;\r
+import org.argeo.slc.dao.structure.tree.TreeSRegistryDao;\r
+import org.argeo.slc.unit.SpringBasedTestCase;\r
+\r
+public class TreeSRegistryDaoHibernateTest extends SpringBasedTestCase {\r
+\r
+ public void testCreate() {\r
+ TreeSRegistryDao treeSRegistryDao = (TreeSRegistryDao) getContext()\r
+ .getBean("treeSRegistryDao");\r
+ \r
+ TreeSPathDao treeSPathDao = (TreeSPathDao) getContext().getBean(\r
+ "treeSPathDao");\r
+\r
+ TreeSPath root = TreeSPath.parseToCreatePath("#root", '#');\r
+ TreeSPath path = root.createChild("test");\r
+ \r
+ treeSPathDao.create(root);\r
+ treeSPathDao.create(path);\r
+ \r
+ TreeSRegistry registry = new TreeSRegistry();\r
+ registry.setRoot(root);\r
+ String desc= "desc";\r
+ registry.register(path, new SimpleSElement(desc));\r
+ \r
+ treeSRegistryDao.create(registry);\r
+ \r
+ TreeSRegistry registry2 = treeSRegistryDao.getTreeSRegistry(path);\r
+ SimpleSElement element = registry2.getElements().get(path);\r
+ assertEquals(desc, element.getDescription());\r
+ }\r
+\r
+ @Override\r
+ protected String getApplicationContextLocation() {\r
+ return "org/argeo/slc/hibernate/applicationContext.xml";\r
+ }\r
+\r
+}\r
--- /dev/null
+package org.argeo.slc.hibernate.test.tree;\r
+\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.NumericTRId;\r
+import org.argeo.slc.core.test.SimpleResultPart;\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.structure.tree.TreeSPathDao;\r
+import org.argeo.slc.dao.test.TestResultDao;\r
+import org.argeo.slc.unit.SpringBasedTestCase;\r
+\r
+public class TreeTestResultDaoHibernateTest extends SpringBasedTestCase {\r
+\r
+ public void testCreate() {\r
+ TreeSPathDao treeSPathDao = (TreeSPathDao) getContext().getBean(\r
+ "treeSPathDao");\r
+\r
+ TestResultDao testResultDao = (TestResultDao) getContext().getBean(\r
+ "testResultDao");\r
+\r
+ String pathParentStr = "#root#testParent";\r
+ String pathStr = pathParentStr + "#test";\r
+ TreeSPath path = TreeSPath.parseToCreatePath(pathStr, '#');\r
+ treeSPathDao.create(path);\r
+\r
+ TreeTestResult treeTestResult = new TreeTestResult();\r
+ SimpleResultPart partPassed = new SimpleResultPart();\r
+ String msgPassed = "message";\r
+ partPassed.setStatus(TestStatus.PASSED);\r
+ partPassed.setMessage(msgPassed);\r
+\r
+ SimpleResultPart partFailed = new SimpleResultPart();\r
+ String msgFailed = "too bad";\r
+ partFailed.setStatus(TestStatus.FAILED);\r
+ partFailed.setMessage(msgFailed);\r
+\r
+ NumericTRId trId = new NumericTRId();\r
+ trId.setValue(1l);\r
+ treeTestResult.setNumericResultId(trId);\r
+ treeTestResult.notifyCurrentPath(null, path);\r
+ treeTestResult.addResultPart(partPassed);\r
+ treeTestResult.addResultPart(partFailed);\r
+\r
+ testResultDao.create(treeTestResult);\r
+\r
+ TreeTestResult treeTestResult2 = (TreeTestResult) testResultDao\r
+ .getTestResult(trId);\r
+ PartSubList list = treeTestResult2.getResultParts().get(path);\r
+ \r
+ assertEquals(2,list.getParts().size());\r
+ SimpleResultPart part0 = (SimpleResultPart)list.getParts().get(0);\r
+ assertEquals(TestStatus.PASSED, (int)part0.getStatus());\r
+ assertEquals(msgPassed,part0.getMessage());\r
+ \r
+ SimpleResultPart part1 = (SimpleResultPart)list.getParts().get(1);\r
+ assertEquals(TestStatus.FAILED, (int)part1.getStatus());\r
+ assertEquals(msgFailed,part1.getMessage());\r
+ \r
+ \r
+ }\r
+\r
+ @Override\r
+ protected String getApplicationContextLocation() {\r
+ return "org/argeo/slc/hibernate/applicationContext.xml";\r
+ }\r
+\r
+}\r
<property name="dataSource" ref="dataSourceResults" />\r
<property name="mappingResources">\r
<list>\r
+ <value>\r
+ org/argeo/slc/hibernate/structure/SimpleSElement.hbm.xml\r
+ </value>\r
+ <value>\r
+ org/argeo/slc/hibernate/structure/tree/TreeSPath.hbm.xml\r
+ </value>\r
+ <value>\r
+ org/argeo/slc/hibernate/structure/tree/TreeSRegistry.hbm.xml\r
+ </value>\r
<value>\r
org/argeo/slc/hibernate/test/NumericTRId.hbm.xml\r
</value>\r
org/argeo/slc/hibernate/test/SimpleResultPart.hbm.xml\r
</value>\r
<value>\r
- org/argeo/slc/hibernate/test/tree/PartSubList.hbm.xml\r
+ org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml\r
</value>\r
<value>\r
- org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml\r
+ org/argeo/slc/hibernate/test/tree/PartSubList.hbm.xml\r
</value>\r
</list>\r
</property>\r
<value>\r
hibernate.dialect=org.hibernate.dialect.HSQLDialect\r
cache.provider_class=org.hibernate.cache.NoCacheProvider\r
- cache.use_query_cache=false cache.use_minimal_puts=false\r
- max_fetch_depth=3 current_session_context_class=thread\r
+ cache.use_query_cache=false\r
+ cache.use_minimal_puts=false\r
+ max_fetch_depth=3\r
+ current_session_context_class=thread\r
hibernate.hbm2ddl.auto=update\r
</value>\r
</property>\r
class="org.argeo.slc.hibernate.test.tree.TestResultDaoHibernate">\r
<property name="sessionFactory" ref="sessionFactoryResults" />\r
</bean>\r
+\r
+ <bean id="treeSPathDao"\r
+ class="org.argeo.slc.hibernate.structure.tree.TreeSPathDaoHibernate">\r
+ <property name="sessionFactory" ref="sessionFactoryResults" />\r
+ </bean>\r
+\r
+ <bean id="treeSRegistryDao"\r
+ class="org.argeo.slc.hibernate.structure.tree.TreeSRegistryDaoHibernate">\r
+ <property name="sessionFactory" ref="sessionFactoryResults" />\r
+ </bean>\r
+\r
+\r
</beans>
\ No newline at end of file
class="org.argeo.slc.core.test.tree.TreeTestResultPersister"\r
init-method="init">\r
<property name="testResultDao" ref="testResultDao" />\r
+ <property name="treeSPathDao" ref="treeSPathDao" />\r
+ <property name="treeSRegistryDao" ref="treeSRegistryDao" />\r
</bean>\r
\r
<bean id="report"\r
class="org.argeo.slc.core.test.tree.FullHtmlTreeReport">\r
<property name="testResultDao" ref="testResultDao" />\r
+ <property name="treeSRegistryDao" ref="treeSRegistryDao" />\r
<property name="reportDir"\r
value="${slc.workDir}/results/report" />\r
</bean>\r