package edu.uw.zookeeper.data;
import static com.google.common.base.Preconditions.*;
public abstract class ZNodeName implements CharSequence, Comparable<ZNodeName> {
public static final char SLASH = '/';
@Serializes(from=String.class, to=ZNodeName.class)
public static ZNodeName fromString(String label) {
if (label.indexOf(SLASH) >= 0) {
return ZNodeLabelVector.fromString(label);
} else {
return AbstractZNodeLabel.fromString(label);
}
}
private final String name;
protected ZNodeName(String label) {
this.name = checkNotNull(label);
}
public boolean startsWith(ZNodeName prefix) {
return name.equals(prefix.name);
}
@Override
public int length() {
return name.length();
}
@Override
public char charAt(int arg0) {
return name.charAt(arg0);
}
@Override
public CharSequence subSequence(int arg0, int arg1) {
return name.subSequence(arg0, arg1);
}
@Override
public int compareTo(ZNodeName other) {
return name.compareTo(other.name);
}
@Serializes(from=ZNodeName.class, to=String.class)
@Override
public String toString() {
return name;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (! (obj instanceof ZNodeName)) {
return false;
}
ZNodeName other = (ZNodeName) obj;
return name.equals(other.name);
}
@Override
public int hashCode() {
return name.hashCode();
}
}