package org.argeo.slc.core.structure;\r
\r
+import java.util.Map;\r
+import java.util.TreeMap;\r
\r
/**\r
* Basic implementation of <code>StructureElement</code>.\r
/** For ORM */\r
private Long tid;\r
private String label;\r
+ private Map<String, String> tags = new TreeMap<String, String>();\r
\r
/** For ORM */\r
public SimpleSElement() {\r
this.tid = tid;\r
}\r
\r
+ public Map<String, String> getTags() {\r
+ return tags;\r
+ }\r
+\r
+ public void setTags(Map<String, String> tags) {\r
+ this.tags = tags;\r
+ }\r
+\r
}\r
private boolean isClosed = false;\r
\r
private SortedMap<TreeSPath, PartSubList> resultParts = new TreeMap<TreeSPath, PartSubList>();\r
- private SortedMap<TreeSPath, String> pathNames = new TreeMap<TreeSPath, String>();\r
+ private SortedMap<TreeSPath, StructureElement> elements = new TreeMap<TreeSPath, StructureElement>();\r
\r
private StructureRegistry<TreeSPath> registry;\r
\r
TreeSPath path) {\r
if (registry != null) {\r
for (TreeSPath p : path.getHierarchyAsList()) {\r
- if (!pathNames.containsKey(p)) {\r
+ if (!elements.containsKey(p)) {\r
StructureElement elem = registry.getElement(p);\r
if (elem != null) {\r
- pathNames.put(p, elem.getLabel());\r
+ // elements.put(p, elem.getLabel());\r
+ elements.put(p, elem);\r
+ } else {\r
+ log.warn("An element is already registered for path "\r
+ + p);\r
}\r
}\r
}\r
}\r
}\r
\r
- public SortedMap<TreeSPath, String> getPathNames() {\r
- return pathNames;\r
+ public SortedMap<TreeSPath, StructureElement> getElements() {\r
+ return elements;\r
}\r
\r
- public void setPathNames(SortedMap<TreeSPath, String> pathNames) {\r
- this.pathNames = pathNames;\r
+ public void setElements(SortedMap<TreeSPath, StructureElement> pathNames) {\r
+ this.elements = pathNames;\r
}\r
\r
}\r
import static junit.framework.Assert.assertNull;\r
import static junit.framework.Assert.fail;\r
\r
+import org.argeo.slc.core.structure.SimpleSElement;\r
import org.argeo.slc.core.structure.tree.TreeSPath;\r
import org.argeo.slc.core.test.SimpleResultPart;\r
import org.argeo.slc.core.test.TestResultPart;\r
assertPartSubList(lstExpected, lstReached);\r
}\r
\r
- assertEquals(expected.getPathNames().size(), reached.getPathNames()\r
+ assertEquals(expected.getElements().size(), reached.getElements()\r
.size());\r
- for (TreeSPath path : expected.getPathNames().keySet()) {\r
- String nameExpected = expected.getPathNames().get(path);\r
- String nameReached = expected.getPathNames().get(path);\r
- assertNotNull(nameReached);\r
- assertEquals(nameExpected, nameReached);\r
+ for (TreeSPath path : expected.getElements().keySet()) {\r
+ // String nameExpected = expected.getElements().get(path);\r
+ // String nameReached = expected.getElements().get(path);\r
+ SimpleSElement elemExpected = (SimpleSElement) expected\r
+ .getElements().get(path);\r
+ SimpleSElement elemReached = (SimpleSElement) expected\r
+ .getElements().get(path);\r
+ assertNotNull(elemReached);\r
+ assertElements(elemExpected, elemReached);\r
}\r
\r
}\r
\r
+ public static void assertElements(SimpleSElement expected,\r
+ SimpleSElement reached) {\r
+ assertEquals(expected.getLabel(), reached.getLabel());\r
+ assertEquals(expected.getTags().size(), reached.getTags().size());\r
+ for (String tagName : expected.getTags().keySet()) {\r
+ String expectedTagValue = expected.getTags().get(tagName);\r
+ String reachedTagValue = reached.getTags().get(tagName);\r
+ assertNotNull(reachedTagValue);\r
+ assertEquals(expectedTagValue, reachedTagValue);\r
+ }\r
+ }\r
+\r
public static void assertPartSubList(PartSubList lstExpected,\r
PartSubList lstReached) {\r
if (lstExpected.getSlcExecutionUuid() == null) {\r
</class>\r
</bind-xml>\r
</field>\r
- <field name="pathNames" collection="map">\r
- <bind-xml name="path-name" location="path-names">\r
+ <field name="elements" collection="map">\r
+ <bind-xml name="element" location="elements">\r
<class name="org.exolab.castor.mapping.MapItem">\r
<field name="key"\r
type="org.argeo.slc.core.structure.tree.TreeSPath">\r
<bind-xml name="path" node="attribute" />\r
</field>\r
- <field name="value" type="string">\r
- <bind-xml name="name" />\r
+ <field name="value"\r
+ type="org.argeo.slc.core.structure.SimpleSElement">\r
+ <bind-xml name="simpleSElement" />\r
</field>\r
</class>\r
</bind-xml>\r
<field name="asUniqueString" type="string" />\r
</class>\r
\r
+ <class name="org.argeo.slc.core.structure.SimpleSElement"\r
+ auto-complete="false">\r
+ <field name="label" type="string" />\r
+ <field name="tags" collection="map">\r
+ <bind-xml name="tag" location="tags">\r
+ <class name="org.exolab.castor.mapping.MapItem">\r
+ <field name="key" type="string">\r
+ <bind-xml name="name" node="attribute" />\r
+ </field>\r
+ <field name="value" type="string">\r
+ <bind-xml name="value" />\r
+ </field>\r
+ </class>\r
+ </bind-xml>\r
+ </field>\r
+ </class>\r
+\r
<class name="java.lang.StackTraceElement" auto-complete="false"\r
verify-constructable="false">\r
<field name="declaringClass" type="string" set-method="%1"\r
<id name="tid" column="T_ID">\r
<generator class="native" />\r
</id>\r
- <property name="label" column="LABEL"\r
- not-null="true" />\r
+ <property name="label" column="LABEL" not-null="true" />\r
+ <map name="tags" table="SIMPLE_SELEMENT_TAGS" cascade="all"\r
+ lazy="false" sort="natural">\r
+ <key column="PARENT_ID" />\r
+ <map-key type="string" column="NAME" />\r
+ <element type="string" column="VALUE" />\r
+ </map>\r
</class>\r
</hibernate-mapping>
\ No newline at end of file
unique="true" lazy="false" />\r
</map>\r
\r
- <map name="pathNames" table="RESULT_PATH_NAMES_MAP"\r
+ <map name="elements" table="RESULT_ELEMENTS_MAP"\r
cascade="all" 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
- <element column="NAME" type="string" />\r
+ <!-- element column="NAME" type="string" /-->\r
+ <many-to-many class="org.argeo.slc.core.structure.SimpleSElement" column="ELEMENT_ID"\r
+ unique="true" lazy="false" />\r
</map>\r
</class>\r
</hibernate-mapping>
\ No newline at end of file
TreeSPath path = TreeSPath.parseToCreatePath(pathStr);\r
\r
TreeSRegistry registry = new TreeSRegistry();\r
- registry.register(path, new SimpleSElement("Unit Test"));\r
+ SimpleSElement elem = new SimpleSElement("Unit Test");\r
+ elem.getTags().put("myTag", "myTagValue");\r
+ registry.register(path, elem);\r
\r
TreeTestResult ttr = createSimpleTreeTestResult();\r
ttr.notifySlcExecution(slcExecution);\r