]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.core/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java
TreeTestResult persistence independent from TreeSPath and registry (at last!)
[gpl/argeo-slc.git] / org.argeo.slc.core / src / main / java / org / argeo / slc / core / structure / tree / TreeSPath.java
index 3003069965588982c7cac8e97b600326a8d91590..e38d0e3ddff6103f9771f02651a6a0a3a002b4ec 100644 (file)
@@ -19,12 +19,17 @@ public class TreeSPath implements StructurePath, Comparable<StructurePath> {
        private String name;\r
        private Character separator = DEFAULT_SEPARATOR;\r
 \r
+       private String asUniqueString;\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
+               if (asUniqueString == null) {\r
+                       String parentStr = parent != null ? parent.getAsUniqueString() : "";\r
+                       asUniqueString = parentStr + separator + name;\r
+               }\r
+               return asUniqueString;\r
        }\r
 \r
        /** Sets all the required data from a string. */\r
@@ -32,6 +37,7 @@ public class TreeSPath implements StructurePath, Comparable<StructurePath> {
                TreeSPath twin = parseToCreatePath(str, getSeparator());\r
                name = twin.name;\r
                parent = twin.parent;\r
+               asUniqueString = getAsUniqueString();\r
        }\r
 \r
        /** The separator actually used by this path. */\r
@@ -123,7 +129,7 @@ public class TreeSPath implements StructurePath, Comparable<StructurePath> {
                return depthImpl(this);\r
        }\r
 \r
-       private static int depthImpl(TreeSPath path) {\r
+       protected int depthImpl(TreeSPath path) {\r
                if (path.getParent() == null) {\r
                        return 1;\r
                } else {\r
@@ -131,6 +137,21 @@ public class TreeSPath implements StructurePath, Comparable<StructurePath> {
                }\r
        }\r
 \r
+       public List<TreeSPath> getHierarchyAsList() {\r
+               List<TreeSPath> lst = new Vector<TreeSPath>();\r
+               addParentToList(lst, this);\r
+               lst.add(this);\r
+               return lst;\r
+       }\r
+\r
+       protected void addParentToList(List<TreeSPath> lst, TreeSPath current) {\r
+               TreeSPath parent = current.getParent();\r
+               if (parent != null) {\r
+                       addParentToList(lst, parent);\r
+                       lst.add(parent);\r
+               }\r
+       }\r
+\r
        @Override\r
        public String toString() {\r
                return getAsUniqueString();\r
@@ -145,6 +166,11 @@ public class TreeSPath implements StructurePath, Comparable<StructurePath> {
                return false;\r
        }\r
 \r
+       @Override\r
+       public int hashCode() {\r
+               return getAsUniqueString().hashCode();\r
+       }\r
+\r
        public int compareTo(StructurePath o) {\r
                return getAsUniqueString().compareTo(o.getAsUniqueString());\r
        }\r
@@ -157,7 +183,11 @@ public class TreeSPath implements StructurePath, Comparable<StructurePath> {
                this.tid = tid;\r
        }\r
 \r
-       /** Sets the separator character to use. */\r
+       /**\r
+        * Sets the separator character to use.\r
+        * \r
+        * @deprecated\r
+        */\r
        public void setSeparator(Character separator) {\r
                this.separator = separator;\r
        }\r