X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fstructure%2Ftree%2FTreeSPath.java;h=e38d0e3ddff6103f9771f02651a6a0a3a002b4ec;hb=e860e15db1fd6dc797205de434c75a22f6e5f9a4;hp=c8564cb9a491f738c3c57ac954ed580d837aac14;hpb=f92c2606ca48ffd9baaa140478ef11fe7d3bfd66;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java index c8564cb9a..e38d0e3dd 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java @@ -19,12 +19,17 @@ public class TreeSPath implements StructurePath, Comparable { private String name; private Character separator = DEFAULT_SEPARATOR; + private String asUniqueString; + /** For ORM */ private Long tid; public String getAsUniqueString() { - String parentStr = parent != null ? parent.getAsUniqueString() : ""; - return parentStr + separator + name; + if (asUniqueString == null) { + String parentStr = parent != null ? parent.getAsUniqueString() : ""; + asUniqueString = parentStr + separator + name; + } + return asUniqueString; } /** Sets all the required data from a string. */ @@ -32,6 +37,7 @@ public class TreeSPath implements StructurePath, Comparable { TreeSPath twin = parseToCreatePath(str, getSeparator()); name = twin.name; parent = twin.parent; + asUniqueString = getAsUniqueString(); } /** The separator actually used by this path. */ @@ -123,7 +129,7 @@ public class TreeSPath implements StructurePath, Comparable { return depthImpl(this); } - private static int depthImpl(TreeSPath path) { + protected int depthImpl(TreeSPath path) { if (path.getParent() == null) { return 1; } else { @@ -131,6 +137,21 @@ public class TreeSPath implements StructurePath, Comparable { } } + public List getHierarchyAsList() { + List lst = new Vector(); + addParentToList(lst, this); + lst.add(this); + return lst; + } + + protected void addParentToList(List lst, TreeSPath current) { + TreeSPath parent = current.getParent(); + if (parent != null) { + addParentToList(lst, parent); + lst.add(parent); + } + } + @Override public String toString() { return getAsUniqueString(); @@ -145,11 +166,16 @@ public class TreeSPath implements StructurePath, Comparable { return false; } + @Override + public int hashCode() { + return getAsUniqueString().hashCode(); + } + public int compareTo(StructurePath o) { return getAsUniqueString().compareTo(o.getAsUniqueString()); } - Long getTid() { + public Long getTid() { return tid; } @@ -157,7 +183,11 @@ public class TreeSPath implements StructurePath, Comparable { this.tid = tid; } - /** Sets the separator character to use. */ + /** + * Sets the separator character to use. + * + * @deprecated + */ public void setSeparator(Character separator) { this.separator = separator; }