--- /dev/null
+package org.argeo.slc.core.structure.tree;\r
+\r
+import java.util.StringTokenizer;\r
+\r
+import org.argeo.slc.core.structure.StructurePath;\r
+\r
+public class TreeSPath implements StructurePath {\r
+ public static Character DEFAULT_SEPARATOR = '#';\r
+\r
+ private TreeSPath parent;\r
+ private String name;\r
+ private Character separator = DEFAULT_SEPARATOR;\r
+\r
+ public String getAsUniqueString() {\r
+ String parentStr = parent != null ? parent.getAsUniqueString() : "";\r
+ return parentStr + separator + name;\r
+ }\r
+\r
+ public Character getSeparator() {\r
+ return separator;\r
+ }\r
+\r
+ public TreeSPath getParent() {\r
+ return parent;\r
+ }\r
+\r
+ public String getName() {\r
+ return name;\r
+ }\r
+\r
+ public static TreeSPath createChild(TreeSPath parent, String name) {\r
+ TreeSPath path = new TreeSPath();\r
+ path.parent = parent;\r
+ path.name = name;\r
+ return path;\r
+ }\r
+\r
+ public static TreeSPath createTreeSPath(String path, Character separator) {\r
+ StringTokenizer st = new StringTokenizer(path, Character\r
+ .toString(separator));\r
+\r
+ TreeSPath currPath = null;\r
+ while (st.hasMoreTokens()) {\r
+ if (currPath == null) {// begin\r
+ currPath = createChild(null, st.nextToken());\r
+ } else {\r
+ currPath = createChild(currPath, st.nextToken());\r
+ }\r
+ }\r
+ return currPath;\r
+ }\r
+ \r
+ @Override\r
+ public String toString(){\r
+ return getAsUniqueString();\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (obj instanceof StructurePath) {\r
+ StructurePath path = (StructurePath) obj;\r
+ return getAsUniqueString().equals(path.getAsUniqueString());\r
+ }\r
+ return false;\r
+ }\r
+ \r
+ \r
+}\r