X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=inline;f=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fstructure%2Ftree%2FTreeSPath.java;fp=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fstructure%2Ftree%2FTreeSPath.java;h=e38d0e3ddff6103f9771f02651a6a0a3a002b4ec;hb=02b464f4fceaee1d65c711c868259879b02001b5;hp=3003069965588982c7cac8e97b600326a8d91590;hpb=4be456f18c71bf293632d365d790a2ef32728157;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 300306996..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,6 +166,11 @@ 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()); } @@ -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; }