X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fstructure%2Ftree%2FTreeSPath.java;h=daa160626c5ad73336429da3abe5ce5a35bf195f;hb=62ef12a06742ee09256c18e8db90fe83a108c116;hp=94d22b592b6195ca6789e1569ea9a4d8fe8a3a06;hpb=2d2e8673ee9a9c610dcd831833cb67c3a508c372;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java index 94d22b592..daa160626 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java @@ -1,10 +1,19 @@ package org.argeo.slc.core.structure.tree; +import java.util.List; import java.util.StringTokenizer; +import java.util.Vector; import org.argeo.slc.core.structure.StructurePath; +import org.argeo.slc.core.structure.StructureRegistry; -public class TreeSPath implements StructurePath { +/** + * Path for tree based StructureRegistry implementations. + * + * @see TreeSRegistry + */ +public class TreeSPath implements StructurePath, Comparable { + /** Default character to use a separator: #. */ public static Character DEFAULT_SEPARATOR = '#'; private TreeSPath parent; @@ -15,43 +24,79 @@ public class TreeSPath implements StructurePath { String parentStr = parent != null ? parent.getAsUniqueString() : ""; return parentStr + separator + name; } + + public void setAsUniqueString(String str){ + TreeSPath twin = parseToCreatePath(str, getSeparator()); + name = twin.name; + parent = twin.parent; + } + /** The separator actually used by this path. */ public Character getSeparator() { return separator; } + /** Gets the parent path. */ public TreeSPath getParent() { return parent; } + /** Gets the name part of the path. */ public String getName() { return name; } - public static TreeSPath createChild(TreeSPath parent, String name) { + /** Create a path without parent. */ + public static TreeSPath createRootPath(String name) { TreeSPath path = new TreeSPath(); - path.parent = parent; + path.parent = null; path.name = name; return path; } - public static TreeSPath createTreeSPath(String path, Character separator) { + /** Create a child . */ + public TreeSPath createChild(String name) { + TreeSPath path = new TreeSPath(); + path.parent = this; + path.name = name; + return path; + } + + /** Parses a string to a path. */ + public static TreeSPath parseToCreatePath(String path, Character separator) { StringTokenizer st = new StringTokenizer(path, Character .toString(separator)); TreeSPath currPath = null; while (st.hasMoreTokens()) { if (currPath == null) {// begin - currPath = createChild(null, st.nextToken()); + currPath = createRootPath(st.nextToken()); } else { - currPath = createChild(currPath, st.nextToken()); + currPath = currPath.createChild(st.nextToken()); } } return currPath; } + + public List listChildren(StructureRegistry registry){ + return listChildrenPaths(registry, this); + } + public static List listChildrenPaths(StructureRegistry registry, + TreeSPath path) { + List paths = new Vector(); + List allPaths = registry.listPaths(); + for (StructurePath sPath : allPaths) { + TreeSPath pathT = (TreeSPath) sPath; + if (pathT.parent != null && pathT.parent.equals(path)) { + paths.add(pathT); + } + } + return paths; + } + @Override - public String toString(){ + public String toString() { return getAsUniqueString(); } @@ -63,6 +108,10 @@ public class TreeSPath implements StructurePath { } return false; } - + + public int compareTo(StructurePath o) { + return getAsUniqueString().compareTo(o.getAsUniqueString()); + } + }