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
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
}\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