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