From: Mathieu Baudier Date: Sat, 17 Nov 2007 19:14:25 +0000 (+0000) Subject: Persist path and registry X-Git-Tag: argeo-slc-2.1.7~3173 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=6eb8dbec55c0cb31407907860ba6de627243b8af;p=gpl%2Fargeo-slc.git Persist path and registry git-svn-id: https://svn.argeo.org/slc/trunk@712 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/UnsupportedException.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/UnsupportedException.java index b113b2cb0..2399a2989 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/UnsupportedException.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/UnsupportedException.java @@ -3,6 +3,10 @@ package org.argeo.slc.core; public class UnsupportedException extends SlcException { static final long serialVersionUID = 1l; + public UnsupportedException() { + this("Action not supported"); + } + public UnsupportedException(String message) { super(message); } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java index 84814f307..f59fc65b7 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java @@ -33,11 +33,6 @@ public class DefaultSRegistry implements StructureRegistry { + elements.size() + ")"); } - // public void register(StructurePath path,StructureAware structureAware) { - // register(path,structureAware.getElement()); - // structureAware.onRegister(this,path); - // } - public StructureElement getElement(StructurePath path) { int index = paths.indexOf(path); if (index >= 0) { diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/SimpleSElement.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/SimpleSElement.java index 12c65d550..54bdccf98 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/SimpleSElement.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/SimpleSElement.java @@ -8,8 +8,14 @@ import org.argeo.slc.core.structure.tree.TreeSPath; * @see TreeSPath */ public class SimpleSElement implements StructureElement { + /** For ORM */ + private Long tid; private String description; + /** For ORM */ + public SimpleSElement() { + } + public SimpleSElement(String description) { this.description = description; } @@ -26,4 +32,12 @@ public class SimpleSElement implements StructureElement { this.description = description; } + Long getTid() { + return tid; + } + + void setTid(Long tid) { + this.tid = tid; + } + } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java index 37d615f9a..b00d1cf94 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.StringTokenizer; import java.util.Vector; +import org.argeo.slc.core.SlcException; import org.argeo.slc.core.structure.StructurePath; import org.argeo.slc.core.structure.StructureRegistry; @@ -18,6 +19,9 @@ public class TreeSPath implements StructurePath, Comparable { private String name; private Character separator = DEFAULT_SEPARATOR; + /** For ORM */ + private Long tid; + public String getAsUniqueString() { String parentStr = parent != null ? parent.getAsUniqueString() : ""; return parentStr + separator + name; @@ -54,6 +58,10 @@ public class TreeSPath implements StructurePath, Comparable { /** Create a child . */ public TreeSPath createChild(String name) { + if (name.indexOf(separator) > -1) { + throw new SlcException("Tree path name '" + name + + "' contains separator character " + separator); + } TreeSPath path = new TreeSPath(); path.parent = this; path.name = name; @@ -93,6 +101,14 @@ public class TreeSPath implements StructurePath, Comparable { return paths; } + public TreeSPath getRoot(){ + TreeSPath root = this; + while(root.getParent()!=null){ + root = root.getParent(); + } + return root; + } + @Override public String toString() { return getAsUniqueString(); @@ -111,4 +127,24 @@ public class TreeSPath implements StructurePath, Comparable { return getAsUniqueString().compareTo(o.getAsUniqueString()); } + Long getTid() { + return tid; + } + + void setTid(Long tid) { + this.tid = tid; + } + + public void setSeparator(Character separator) { + this.separator = separator; + } + + protected void setParent(TreeSPath parent) { + this.parent = parent; + } + + protected void setName(String name) { + this.name = name; + } + } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSRegistry.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSRegistry.java new file mode 100644 index 000000000..c7945cebf --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSRegistry.java @@ -0,0 +1,91 @@ +package org.argeo.slc.core.structure.tree; + +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.Vector; + +import org.argeo.slc.core.UnsupportedException; +import org.argeo.slc.core.structure.SimpleSElement; +import org.argeo.slc.core.structure.StructureElement; +import org.argeo.slc.core.structure.StructurePath; +import org.argeo.slc.core.structure.StructureRegistry; + +public class TreeSRegistry implements StructureRegistry { + /** For ORM */ + private Long tid; + private TreeSPath root; + private Map elements = new TreeMap(); + + private String mode = StructureRegistry.ALL; + + private List activePaths; + + public StructureElement getElement(StructurePath path) { + return elements.get(path); + } + + public List listElements() { + return new Vector(elements.values()); + } + + public List listPaths() { + return new Vector(elements.keySet()); + } + + public void register(StructurePath path, StructureElement element) { + final SimpleSElement simpleSElement; + if (element instanceof SimpleSElement){ + simpleSElement = (SimpleSElement)element; + }else{ + simpleSElement = new SimpleSElement(element.getDescription()); + } + + if (!(path instanceof TreeSPath)) + throw new UnsupportedException("path", path); + + elements.put((TreeSPath) path, simpleSElement); + + } + + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + public List getActivePaths() { + return activePaths; + } + + public void setActivePaths(List activePaths) { + this.activePaths = activePaths; + } + + public TreeSPath getRoot() { + return root; + } + + public void setRoot(TreeSPath root) { + this.root = root; + } + + public Map getElements() { + return elements; + } + + public void setElements(Map elements) { + this.elements = elements; + } + + Long getTid() { + return tid; + } + + void setTid(Long tid) { + this.tid = tid; + } + +} diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/FullHtmlTreeReport.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/FullHtmlTreeReport.java index 1144e2793..eac9fce9b 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/FullHtmlTreeReport.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/FullHtmlTreeReport.java @@ -5,17 +5,20 @@ import java.io.FileWriter; import java.io.IOException; import java.util.List; +import org.argeo.slc.core.SlcException; import org.argeo.slc.core.structure.StructureAware; import org.argeo.slc.core.structure.StructureElement; import org.argeo.slc.core.structure.StructurePath; import org.argeo.slc.core.structure.StructureRegistry; import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.structure.tree.TreeSRegistry; import org.argeo.slc.core.test.SimpleResultPart; import org.argeo.slc.core.test.SimpleTestResult; import org.argeo.slc.core.test.TestStatus; import org.argeo.slc.core.test.TestReport; import org.argeo.slc.core.test.TestResult; import org.argeo.slc.core.test.TestResultPart; +import org.argeo.slc.dao.structure.tree.TreeSRegistryDao; import org.argeo.slc.dao.test.TestResultDao; /** @@ -25,13 +28,16 @@ import org.argeo.slc.dao.test.TestResultDao; */ public class FullHtmlTreeReport implements TestReport, StructureAware { private TestResultDao testResultDao; + private TreeSRegistryDao treeSRegistryDao; private File reportDir; private StructureRegistry registry; public void generateTestReport(TestResult testResult) { + if (testResultDao == null) { TreeTestResult result = (TreeTestResult) testResult; + initRegistry(result.getResultParts().firstKey()); generateResultPage(getResultFile(result), result); } else { if (reportDir.exists()) { @@ -48,13 +54,14 @@ public class FullHtmlTreeReport implements TestReport, StructureAware { List list = testResultDao.listTestResults(); for (TestResult testRes : list) { - TreeTestResult res = (TreeTestResult) testRes; + TreeTestResult result = (TreeTestResult) testRes; + initRegistry(result.getResultParts().firstKey()); - File file = getResultFile(res); + File file = getResultFile(result); index.append(""); - index.append(res.getTestResultId()).append("\n"); - generateResultPage(file, res); + index.append(result.getTestResultId()).append("\n"); + generateResultPage(file, result); } index.append("\n"); @@ -153,11 +160,24 @@ public class FullHtmlTreeReport implements TestReport, StructureAware { this.testResultDao = testResultDao; } + public void setTreeSRegistryDao(TreeSRegistryDao treeSRegistryDao) { + this.treeSRegistryDao = treeSRegistryDao; + } + /** Sets the directory where to generate all the data. */ public void setReportDir(File reportDir) { this.reportDir = reportDir; } + protected void initRegistry(TreeSPath path){ + if(treeSRegistryDao != null){ + registry = treeSRegistryDao.getTreeSRegistry(path); + } + if(registry==null){ + throw new SlcException("No structure registry available"); + } + } + public void notifyCurrentPath(StructureRegistry registry, StructurePath path) { this.registry = registry; } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java index 75df94dac..5b8411540 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java @@ -3,6 +3,7 @@ package org.argeo.slc.core.test.tree; import java.util.List; import java.util.SortedMap; import java.util.TreeMap; +import java.util.Vector; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -28,7 +29,7 @@ public class TreeTestResult implements TestResult, StructureAware { private Long tid; private NumericTRId testResultId; - private List listeners; + private List listeners = new Vector(); private TreeSPath currentPath; @@ -36,6 +37,8 @@ public class TreeTestResult implements TestResult, StructureAware { private SortedMap resultParts = new TreeMap(); + private StructureRegistry registry; + public TestResultId getTestResultId() { return testResultId; } @@ -77,6 +80,7 @@ public class TreeTestResult implements TestResult, StructureAware { public void notifyCurrentPath(StructureRegistry registry, StructurePath path) { currentPath = (TreeSPath) path; + this.registry = registry; } public TreeSPath getCurrentPath() { @@ -117,4 +121,12 @@ public class TreeTestResult implements TestResult, StructureAware { this.tid = tid; } + public StructureRegistry getRegistry() { + return registry; + } + + public void setRegistry(StructureRegistry registry) { + this.registry = registry; + } + } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultPersister.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultPersister.java index 12c97fa46..0c32a1a4c 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultPersister.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultPersister.java @@ -3,6 +3,13 @@ package org.argeo.slc.core.test.tree; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.argeo.slc.core.structure.SimpleSElement; +import org.argeo.slc.core.structure.StructureElement; +import org.argeo.slc.core.structure.StructureRegistry; +import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.structure.tree.TreeSRegistry; +import org.argeo.slc.dao.structure.tree.TreeSPathDao; +import org.argeo.slc.dao.structure.tree.TreeSRegistryDao; import org.argeo.slc.dao.test.TestResultDao; /** @@ -14,30 +21,45 @@ public class TreeTestResultPersister extends AsynchronousTreeTestResultListener private static Log log = LogFactory.getLog(TreeTestResultPersister.class); private TestResultDao testResultDao; + private TreeSPathDao treeSPathDao; + private TreeSRegistryDao treeSRegistryDao; @Override protected void resultPartAdded(PartStruct partStruct) { try { TreeTestResult persistedResult = (TreeTestResult) testResultDao .getTestResult(partStruct.resultId); + + TreeSPath path = treeSPathDao.getOrCreate(partStruct.path); + + TreeSRegistry registry = getOrCreateTreeSRegistry(path); + if (registry.getElement(path) == null) { + StructureRegistry localRegistry = partStruct.result + .getRegistry(); + if (localRegistry != null) { + registry.register(path, localRegistry.getElement(path)); + } else { + registry.register(path, new SimpleSElement(path.getName())); + } + } + if (persistedResult == null) { persistedResult = new TreeTestResult(); persistedResult.setNumericResultId(partStruct.resultId); PartSubList subList = new PartSubList(); subList.getParts().add(partStruct.part); - persistedResult.getResultParts().put(partStruct.path, subList); + persistedResult.getResultParts().put(path, subList); testResultDao.create(persistedResult); } else { - PartSubList subList = persistedResult.getResultParts().get( - partStruct.path); + PartSubList subList = persistedResult.getResultParts() + .get(path); if (subList == null) { subList = new PartSubList(); - persistedResult.getResultParts().put(partStruct.path, - subList); + persistedResult.getResultParts().put(path, subList); } - persistedResult.getResultParts().get(partStruct.path) - .getParts().add(partStruct.part); + persistedResult.getResultParts().get(path).getParts().add( + partStruct.part); if (log.isTraceEnabled()) { log.trace("ResultId:" + persistedResult.getTestResultId()); @@ -54,9 +76,30 @@ public class TreeTestResultPersister extends AsynchronousTreeTestResultListener } } + private TreeSRegistry getOrCreateTreeSRegistry(TreeSPath path) { + TreeSRegistry registry = treeSRegistryDao.getTreeSRegistry(path); + if (registry == null) { + registry = new TreeSRegistry(); + TreeSPath root = treeSPathDao.getOrCreate(path.getRoot()); + registry.setRoot(root); + treeSRegistryDao.create(registry); + return treeSRegistryDao.getTreeSRegistry(path); + } else { + return registry; + } + } + /** Sets the dao to use in order to persist the results. */ public void setTestResultDao(TestResultDao testResultDao) { this.testResultDao = testResultDao; } + public void setTreeSPathDao(TreeSPathDao treeSPathDao) { + this.treeSPathDao = treeSPathDao; + } + + public void setTreeSRegistryDao(TreeSRegistryDao treeSRegistryDao) { + this.treeSRegistryDao = treeSRegistryDao; + } + } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/dao/structure/SimpleSElementDao.java b/org.argeo.slc/src/main/java/org/argeo/slc/dao/structure/SimpleSElementDao.java new file mode 100644 index 000000000..bed950ff3 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/dao/structure/SimpleSElementDao.java @@ -0,0 +1,5 @@ +package org.argeo.slc.dao.structure; + +public interface SimpleSElementDao { + +} diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/dao/structure/tree/TreeSPathDao.java b/org.argeo.slc/src/main/java/org/argeo/slc/dao/structure/tree/TreeSPathDao.java new file mode 100644 index 000000000..379f826db --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/dao/structure/tree/TreeSPathDao.java @@ -0,0 +1,9 @@ +package org.argeo.slc.dao.structure.tree; + +import org.argeo.slc.core.structure.tree.TreeSPath; + +public interface TreeSPathDao { + public void create(TreeSPath path); + public TreeSPath getTreeSPath(String pathString); + public TreeSPath getOrCreate(TreeSPath pathTransient); +} diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/dao/structure/tree/TreeSRegistryDao.java b/org.argeo.slc/src/main/java/org/argeo/slc/dao/structure/tree/TreeSRegistryDao.java new file mode 100644 index 000000000..dc852de23 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/dao/structure/tree/TreeSRegistryDao.java @@ -0,0 +1,9 @@ +package org.argeo.slc.dao.structure.tree; + +import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.structure.tree.TreeSRegistry; + +public interface TreeSRegistryDao { + public TreeSRegistry getTreeSRegistry(TreeSPath treeSPath); + public void create(TreeSRegistry registry); +} diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/SimpleSElement.hbm.xml b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/SimpleSElement.hbm.xml new file mode 100644 index 000000000..ed1d80cc1 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/SimpleSElement.hbm.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSPath.hbm.xml b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSPath.hbm.xml new file mode 100644 index 000000000..d9934ee33 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSPath.hbm.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSPathDaoHibernate.java b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSPathDaoHibernate.java new file mode 100644 index 000000000..7eb235806 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSPathDaoHibernate.java @@ -0,0 +1,67 @@ +package org.argeo.slc.hibernate.structure.tree; + +import java.util.List; + +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.test.tree.TreeTestResult; +import org.argeo.slc.dao.structure.tree.TreeSPathDao; + +/** + * The Hibernate implementation for tree-based result of the test result dao. + * + * @see TreeTestResult + */ +public class TreeSPathDaoHibernate extends HibernateDaoSupport implements + TreeSPathDao { + + private static Log log = LogFactory.getLog(TreeSPathDaoHibernate.class); + + public void create(TreeSPath path) { + createImpl(path); + } + + + protected void createImpl(TreeSPath path) { + if (path.getParent() != null) { + TreeSPath parent = getTreeSPath(path.getParent() + .getAsUniqueString()); + if (parent == null) { + createImpl(path.getParent()); + } + } + getHibernateTemplate().save(path); + if (log.isTraceEnabled()) + log.trace("Saved TreeSPath " + path.getAsUniqueString()); + } + + public TreeSPath getTreeSPath(String pathString) { + if (log.isTraceEnabled()) + log.trace("Query path: " + pathString); + List list = getHibernateTemplate().find( + "from TreeSPath where asUniqueString=?", pathString); + if (list.size() == 0) { + return null; + } else { + return (TreeSPath) list.get(0); + } + } + + public TreeSPath getOrCreate(TreeSPath pathTransient) { + TreeSPath path = getTreeSPath(pathTransient + .getAsUniqueString()); + if (path != null) { + return path; + } else { + create(pathTransient); + // TODO: optimize + return getTreeSPath(pathTransient.getAsUniqueString()); + } + + } + +} diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistry.hbm.xml b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistry.hbm.xml new file mode 100644 index 000000000..9ae3d7604 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistry.hbm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernate.java b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernate.java new file mode 100644 index 000000000..f202c5e36 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernate.java @@ -0,0 +1,41 @@ +package org.argeo.slc.hibernate.structure.tree; + +import java.util.List; + +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.structure.tree.TreeSRegistry; +import org.argeo.slc.core.test.tree.TreeTestResult; +import org.argeo.slc.dao.structure.tree.TreeSPathDao; +import org.argeo.slc.dao.structure.tree.TreeSRegistryDao; + +/** + * The Hibernate implementation for tree-based result of the test result dao. + * + * @see TreeTestResult + */ +public class TreeSRegistryDaoHibernate extends HibernateDaoSupport implements + TreeSRegistryDao { + + //private static Log log = LogFactory.getLog(TreeSRegistryDaoHibernate.class); + + public void create(TreeSRegistry registry) { + getHibernateTemplate().save(registry); + } + + public TreeSRegistry getTreeSRegistry(TreeSPath treeSPath) { + List list = getHibernateTemplate().find( + "from TreeSRegistry where root.asUniqueString=?", + treeSPath.getRoot().getAsUniqueString()); + if (list.size() == 0) { + return null; + } else { + return (TreeSRegistry) list.get(0); + } + } + +} diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml index 4060e0090..f01505bfa 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml +++ b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml @@ -9,17 +9,15 @@ + not-null="true" column="TEST_RESULT_ID" cascade="all" lazy="false" /> - + - - - + + unique="true" lazy="false" /> \ No newline at end of file diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java b/org.argeo.slc/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java index baf611ef6..8a0b07e90 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java @@ -23,7 +23,7 @@ import org.argeo.slc.core.SlcException; * Helper to make db vendor independent tests using DbUnit data sets. Based on * {@link DbModel}. */ -public class IndependentDbTestCase extends SpringBasedTestCase { +public abstract class IndependentDbTestCase extends SpringBasedTestCase { private IDatabaseTester databaseTester; /** Creates the DDL of the data model and loads the data. */ diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/unit/SpringBasedTestCase.java b/org.argeo.slc/src/main/java/org/argeo/slc/unit/SpringBasedTestCase.java index b607825f0..589edfd02 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/unit/SpringBasedTestCase.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/unit/SpringBasedTestCase.java @@ -6,7 +6,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; import junit.framework.TestCase; /** Helper for tests using a Spring application co,text. */ -public class SpringBasedTestCase extends TestCase { +public abstract class SpringBasedTestCase extends TestCase { private ApplicationContext context; /** diff --git a/org.argeo.slc/src/test/java/log4j.properties b/org.argeo.slc/src/test/java/log4j.properties new file mode 100644 index 000000000..551c14c6f --- /dev/null +++ b/org.argeo.slc/src/test/java/log4j.properties @@ -0,0 +1,23 @@ +# Set root logger level to DEBUG and its only appender to A1. +log4j.rootLogger=INFO, console + +## Levels +# Slc +log4j.logger.org.argeo.slc=DEBUG +# Spring +log4j.logger.org.springframework=INFO +# Hibernate +log4j.logger.org.hibernate=WARN +#log4j.logger.org.hibernate.SQL=TRACE +#log4j.logger.org.hibernate.tool.hbm2ddl=TRACE +#log4j.logger.org.hibernate.type=TRACE + + +## Appenders +# A1 is set to be a ConsoleAppender. +log4j.appender.console=org.apache.log4j.ConsoleAppender + +# A1 uses PatternLayout. +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c %n + diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/applicationContext.xml b/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/applicationContext.xml new file mode 100644 index 000000000..cf320fdb5 --- /dev/null +++ b/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/applicationContext.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + org/argeo/slc/hibernate/structure/SimpleSElement.hbm.xml + + + org/argeo/slc/hibernate/structure/tree/TreeSPath.hbm.xml + + + org/argeo/slc/hibernate/structure/tree/TreeSRegistry.hbm.xml + + + org/argeo/slc/hibernate/test/NumericTRId.hbm.xml + + + org/argeo/slc/hibernate/test/SimpleResultPart.hbm.xml + + + org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml + + + org/argeo/slc/hibernate/test/tree/PartSubList.hbm.xml + + + + + + hibernate.dialect=org.hibernate.dialect.HSQLDialect + hibernate.hbm2ddl.auto=create + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/structure/tree/TreeSPathDaoHibernateTest.java b/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/structure/tree/TreeSPathDaoHibernateTest.java new file mode 100644 index 000000000..66447030d --- /dev/null +++ b/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/structure/tree/TreeSPathDaoHibernateTest.java @@ -0,0 +1,31 @@ +package org.argeo.slc.hibernate.structure.tree; + +import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.dao.structure.tree.TreeSPathDao; +import org.argeo.slc.unit.SpringBasedTestCase; + +public class TreeSPathDaoHibernateTest extends SpringBasedTestCase { + + public void testCreate() { + TreeSPathDao treeSPathDao = (TreeSPathDao) getContext().getBean( + "treeSPathDao"); + + String pathParentStr = "#root#testParent"; + String pathStr = pathParentStr+"#test"; + TreeSPath path = TreeSPath.parseToCreatePath(pathStr, '#'); + treeSPathDao.create(path); + + TreeSPath pathChild = treeSPathDao.getTreeSPath(pathStr); + assertEquals(path, pathChild); + + TreeSPath pathParent = treeSPathDao.getTreeSPath(pathParentStr); + assertEquals(path.getParent(), pathParent); + } + + @Override + protected String getApplicationContextLocation() { + return "org/argeo/slc/hibernate/applicationContext.xml"; + } + + +} diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernateTest.java b/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernateTest.java new file mode 100644 index 000000000..7ed268458 --- /dev/null +++ b/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernateTest.java @@ -0,0 +1,42 @@ +package org.argeo.slc.hibernate.structure.tree; + +import org.argeo.slc.core.structure.SimpleSElement; +import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.structure.tree.TreeSRegistry; +import org.argeo.slc.dao.structure.tree.TreeSPathDao; +import org.argeo.slc.dao.structure.tree.TreeSRegistryDao; +import org.argeo.slc.unit.SpringBasedTestCase; + +public class TreeSRegistryDaoHibernateTest extends SpringBasedTestCase { + + public void testCreate() { + TreeSRegistryDao treeSRegistryDao = (TreeSRegistryDao) getContext() + .getBean("treeSRegistryDao"); + + TreeSPathDao treeSPathDao = (TreeSPathDao) getContext().getBean( + "treeSPathDao"); + + TreeSPath root = TreeSPath.parseToCreatePath("#root", '#'); + TreeSPath path = root.createChild("test"); + + treeSPathDao.create(root); + treeSPathDao.create(path); + + TreeSRegistry registry = new TreeSRegistry(); + registry.setRoot(root); + String desc= "desc"; + registry.register(path, new SimpleSElement(desc)); + + treeSRegistryDao.create(registry); + + TreeSRegistry registry2 = treeSRegistryDao.getTreeSRegistry(path); + SimpleSElement element = registry2.getElements().get(path); + assertEquals(desc, element.getDescription()); + } + + @Override + protected String getApplicationContextLocation() { + return "org/argeo/slc/hibernate/applicationContext.xml"; + } + +} diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernateTest.java b/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernateTest.java new file mode 100644 index 000000000..f983a89fe --- /dev/null +++ b/org.argeo.slc/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernateTest.java @@ -0,0 +1,68 @@ +package org.argeo.slc.hibernate.test.tree; + +import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.test.NumericTRId; +import org.argeo.slc.core.test.SimpleResultPart; +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.argeo.slc.dao.structure.tree.TreeSPathDao; +import org.argeo.slc.dao.test.TestResultDao; +import org.argeo.slc.unit.SpringBasedTestCase; + +public class TreeTestResultDaoHibernateTest extends SpringBasedTestCase { + + public void testCreate() { + TreeSPathDao treeSPathDao = (TreeSPathDao) getContext().getBean( + "treeSPathDao"); + + TestResultDao testResultDao = (TestResultDao) getContext().getBean( + "testResultDao"); + + String pathParentStr = "#root#testParent"; + String pathStr = pathParentStr + "#test"; + TreeSPath path = TreeSPath.parseToCreatePath(pathStr, '#'); + treeSPathDao.create(path); + + TreeTestResult treeTestResult = new TreeTestResult(); + SimpleResultPart partPassed = new SimpleResultPart(); + String msgPassed = "message"; + partPassed.setStatus(TestStatus.PASSED); + partPassed.setMessage(msgPassed); + + SimpleResultPart partFailed = new SimpleResultPart(); + String msgFailed = "too bad"; + partFailed.setStatus(TestStatus.FAILED); + partFailed.setMessage(msgFailed); + + NumericTRId trId = new NumericTRId(); + trId.setValue(1l); + treeTestResult.setNumericResultId(trId); + treeTestResult.notifyCurrentPath(null, path); + treeTestResult.addResultPart(partPassed); + treeTestResult.addResultPart(partFailed); + + testResultDao.create(treeTestResult); + + TreeTestResult treeTestResult2 = (TreeTestResult) testResultDao + .getTestResult(trId); + PartSubList list = treeTestResult2.getResultParts().get(path); + + assertEquals(2,list.getParts().size()); + SimpleResultPart part0 = (SimpleResultPart)list.getParts().get(0); + assertEquals(TestStatus.PASSED, (int)part0.getStatus()); + assertEquals(msgPassed,part0.getMessage()); + + SimpleResultPart part1 = (SimpleResultPart)list.getParts().get(1); + assertEquals(TestStatus.FAILED, (int)part1.getStatus()); + assertEquals(msgFailed,part1.getMessage()); + + + } + + @Override + protected String getApplicationContextLocation() { + return "org/argeo/slc/hibernate/applicationContext.xml"; + } + +} diff --git a/org.argeo.slc/src/test/slc/conf/data.xml b/org.argeo.slc/src/test/slc/conf/data.xml index 6688a83c6..6e4ce5cde 100644 --- a/org.argeo.slc/src/test/slc/conf/data.xml +++ b/org.argeo.slc/src/test/slc/conf/data.xml @@ -20,6 +20,15 @@ + + org/argeo/slc/hibernate/structure/SimpleSElement.hbm.xml + + + org/argeo/slc/hibernate/structure/tree/TreeSPath.hbm.xml + + + org/argeo/slc/hibernate/structure/tree/TreeSRegistry.hbm.xml + org/argeo/slc/hibernate/test/NumericTRId.hbm.xml @@ -27,10 +36,10 @@ org/argeo/slc/hibernate/test/SimpleResultPart.hbm.xml - org/argeo/slc/hibernate/test/tree/PartSubList.hbm.xml + org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml - org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml + org/argeo/slc/hibernate/test/tree/PartSubList.hbm.xml @@ -38,8 +47,10 @@ hibernate.dialect=org.hibernate.dialect.HSQLDialect cache.provider_class=org.hibernate.cache.NoCacheProvider - cache.use_query_cache=false cache.use_minimal_puts=false - max_fetch_depth=3 current_session_context_class=thread + cache.use_query_cache=false + cache.use_minimal_puts=false + max_fetch_depth=3 + current_session_context_class=thread hibernate.hbm2ddl.auto=update @@ -49,4 +60,16 @@ class="org.argeo.slc.hibernate.test.tree.TestResultDaoHibernate"> + + + + + + + + + + \ No newline at end of file diff --git a/org.argeo.slc/src/test/slc/conf/slc.xml b/org.argeo.slc/src/test/slc/conf/slc.xml index c520dc650..9ec452b68 100644 --- a/org.argeo.slc/src/test/slc/conf/slc.xml +++ b/org.argeo.slc/src/test/slc/conf/slc.xml @@ -54,11 +54,14 @@ class="org.argeo.slc.core.test.tree.TreeTestResultPersister" init-method="init"> + + +