package org.argeo.slc.core.structure.tree;\r
\r
+import java.util.List;\r
import java.util.StringTokenizer;\r
+import java.util.Vector;\r
\r
import org.argeo.slc.core.structure.StructurePath;\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
\r
-public class TreeSPath implements StructurePath {\r
+/**\r
+ * Path for tree based <code>StructureRegistry</code> implementations.\r
+ * \r
+ * @see TreeSRegistry\r
+ */\r
+public class TreeSPath implements StructurePath, Comparable<StructurePath> {\r
+ /** Default character to use a separator: #. */\r
public static Character DEFAULT_SEPARATOR = '#';\r
\r
private TreeSPath parent;\r
String parentStr = parent != null ? parent.getAsUniqueString() : "";\r
return parentStr + separator + name;\r
}\r
+ \r
+ public void setAsUniqueString(String str){\r
+ TreeSPath twin = parseToCreatePath(str, getSeparator());\r
+ name = twin.name;\r
+ parent = twin.parent;\r
+ }\r
\r
+ /** The separator actually used by this path. */\r
public Character getSeparator() {\r
return separator;\r
}\r
\r
+ /** Gets the parent path. */\r
public TreeSPath getParent() {\r
return parent;\r
}\r
\r
+ /** Gets the name part of the path. */\r
public String getName() {\r
return name;\r
}\r
\r
- public static TreeSPath createChild(TreeSPath parent, String name) {\r
+ /** Create a path without parent. */\r
+ public static TreeSPath createRootPath(String name) {\r
TreeSPath path = new TreeSPath();\r
- path.parent = parent;\r
+ path.parent = null;\r
path.name = name;\r
return path;\r
}\r
\r
- public static TreeSPath createTreeSPath(String path, Character separator) {\r
+ /** Create a child . */\r
+ public TreeSPath createChild(String name) {\r
+ TreeSPath path = new TreeSPath();\r
+ path.parent = this;\r
+ path.name = name;\r
+ return path;\r
+ }\r
+\r
+ /** Parses a string to a path. */\r
+ public static TreeSPath parseToCreatePath(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
+ currPath = createRootPath(st.nextToken());\r
} else {\r
- currPath = createChild(currPath, st.nextToken());\r
+ currPath = currPath.createChild(st.nextToken());\r
}\r
}\r
return currPath;\r
}\r
+\r
+ public List<TreeSPath> listChildren(StructureRegistry registry){\r
+ return listChildrenPaths(registry, this);\r
+ }\r
\r
+ public static List<TreeSPath> listChildrenPaths(StructureRegistry registry,\r
+ TreeSPath path) {\r
+ List<TreeSPath> paths = new Vector<TreeSPath>();\r
+ List<StructurePath> allPaths = registry.listPaths();\r
+ for (StructurePath sPath : allPaths) {\r
+ TreeSPath pathT = (TreeSPath) sPath;\r
+ if (pathT.parent != null && pathT.parent.equals(path)) {\r
+ paths.add(pathT);\r
+ }\r
+ }\r
+ return paths;\r
+ }\r
+\r
@Override\r
- public String toString(){\r
+ public String toString() {\r
return getAsUniqueString();\r
}\r
\r
}\r
return false;\r
}\r
- \r
+\r
+ public int compareTo(StructurePath o) {\r
+ return getAsUniqueString().compareTo(o.getAsUniqueString());\r
+ }\r
+\r
\r
}\r