]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultPersister.java
Improve comments
[gpl/argeo-slc.git] / org.argeo.slc / src / main / java / org / argeo / slc / core / test / tree / TreeTestResultPersister.java
index 12c97fa4663d91ac388fb6bd38febc25494a5180..0621574292f2af41081d1fe1f61d23840c749f00 100644 (file)
@@ -3,6 +3,12 @@ package org.argeo.slc.core.test.tree;
 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.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
@@ -14,30 +20,46 @@ public class TreeTestResultPersister extends AsynchronousTreeTestResultListener
        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
+                               treeSRegistryDao.update(registry);\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
@@ -54,9 +76,32 @@ public class TreeTestResultPersister extends AsynchronousTreeTestResultListener
                }\r
        }\r
 \r
-       /** Sets the dao to use in order to persist the results. */\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
+       /** Sets the tree structure path DAO. */\r
+       public void setTreeSPathDao(TreeSPathDao treeSPathDao) {\r
+               this.treeSPathDao = treeSPathDao;\r
+       }\r
+\r
+       /** Sets the tree structure registry DAO. */\r
+       public void setTreeSRegistryDao(TreeSRegistryDao treeSRegistryDao) {\r
+               this.treeSRegistryDao = treeSRegistryDao;\r
+       }\r
+\r
 }\r