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=b00d1cf9443bd6351258f36b6d88de01db3077ca;hb=c228c125b7f40d1716911dd66971c720dc9478b5;hp=fb66c300b4fe6e12872875cb7709c25b011c2456;hpb=d62a44995fa4bc758ab3b3e6e7ffe7b79c8684ef;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 fb66c300b..b00d1cf94 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
@@ -4,15 +4,14 @@ import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;
+import org.argeo.slc.core.SlcException;
import org.argeo.slc.core.structure.StructurePath;
import org.argeo.slc.core.structure.StructureRegistry;
/**
* Path for tree based StructureRegistry
implementations.
- *
- * @see TreeSRegistry
*/
-public class TreeSPath implements StructurePath {
+public class TreeSPath implements StructurePath, Comparable {
/** Default character to use a separator: #. */
public static Character DEFAULT_SEPARATOR = '#';
@@ -20,11 +19,20 @@ public class TreeSPath implements StructurePath {
private String name;
private Character separator = DEFAULT_SEPARATOR;
+ /** For ORM */
+ private Long tid;
+
public String getAsUniqueString() {
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;
@@ -50,6 +58,10 @@ public class TreeSPath implements StructurePath {
/** Create a child . */
public TreeSPath createChild(String name) {
+ if (name.indexOf(separator) > -1) {
+ throw new SlcException("Tree path name '" + name
+ + "' contains separator character " + separator);
+ }
TreeSPath path = new TreeSPath();
path.parent = this;
path.name = name;
@@ -72,10 +84,10 @@ public class TreeSPath implements StructurePath {
return currPath;
}
- public List listChildren(StructureRegistry registry){
+ public List listChildren(StructureRegistry registry) {
return listChildrenPaths(registry, this);
}
-
+
public static List listChildrenPaths(StructureRegistry registry,
TreeSPath path) {
List paths = new Vector();
@@ -89,6 +101,14 @@ public class TreeSPath implements StructurePath {
return paths;
}
+ public TreeSPath getRoot(){
+ TreeSPath root = this;
+ while(root.getParent()!=null){
+ root = root.getParent();
+ }
+ return root;
+ }
+
@Override
public String toString() {
return getAsUniqueString();
@@ -103,4 +123,28 @@ public class TreeSPath implements StructurePath {
return false;
}
+ public int compareTo(StructurePath o) {
+ return getAsUniqueString().compareTo(o.getAsUniqueString());
+ }
+
+ Long getTid() {
+ return tid;
+ }
+
+ void setTid(Long tid) {
+ this.tid = tid;
+ }
+
+ public void setSeparator(Character separator) {
+ this.separator = separator;
+ }
+
+ protected void setParent(TreeSPath parent) {
+ this.parent = parent;
+ }
+
+ protected void setName(String name) {
+ this.name = name;
+ }
+
}