}
@Override
- protected SchemaNodeIdentifier createInstance(final SchemaNodeIdentifier parent, final QName qname) {
- return new Absolute(parent, requireNonNull(qname));
+ public Absolute createChild(final QName element) {
+ return new Absolute(this, requireNonNull(element));
}
}
}
@Override
- protected SchemaNodeIdentifier createInstance(final SchemaNodeIdentifier parent, final QName qname) {
- return new Relative(parent, requireNonNull(qname));
+ public Relative createChild(final QName element) {
+ return new Relative(this, requireNonNull(element));
}
}
/**
* Shared instance of the conceptual root schema node.
*/
- public static final SchemaNodeIdentifier ROOT = new Absolute(null, null);
+ public static final Absolute ROOT = new Absolute(null, null);
/**
* Shared instance of the "same" relative schema node.
*/
- public static final SchemaNodeIdentifier SAME = new Relative(null, null);
+ public static final Relative SAME = new Relative(null, null);
/**
* Parent path.
*/
private volatile SchemaPath schemaPath;
- protected SchemaNodeIdentifier(final SchemaNodeIdentifier parent, final QName qname) {
+ SchemaNodeIdentifier(final SchemaNodeIdentifier parent, final QName qname) {
this.parent = parent;
this.qname = qname;
return create(Arrays.asList(path), absolute);
}
- /**
- * Create a new instance.
- *
- * @param parent Parent schema node identifier
- * @param qname next path element
- * @return A new SchemaPath instance
- */
- protected abstract SchemaNodeIdentifier createInstance(SchemaNodeIdentifier parent, QName qname);
-
/**
* Create a child path based on concatenation of this path and a relative path.
*
SchemaNodeIdentifier parentNode = this;
for (QName qname : relative) {
- parentNode = parentNode.createInstance(parentNode, qname);
+ parentNode = parentNode.createChild(qname);
}
return parentNode;
*/
public SchemaNodeIdentifier createChild(final SchemaNodeIdentifier relative) {
checkArgument(!relative.isAbsolute(), "Child creation requires relative path");
-
- SchemaNodeIdentifier parentNode = this;
- for (QName qname : relative.getPathFromRoot()) {
- parentNode = parentNode.createInstance(parentNode, qname);
- }
-
- return parentNode;
+ return createChild(relative.getPathFromRoot());
}
+ /**
+ * Create a child path based on concatenation of this path and an additional path element.
+ *
+ * @param element Next SchemaPath element
+ * @return A new child path
+ */
+ public abstract SchemaNodeIdentifier createChild(QName element);
+
/**
* Create a child path based on concatenation of this path and additional
* path elements.
}
@Override
- public boolean equals(final Object obj) {
+ public final boolean equals(final Object obj) {
if (this == obj) {
return true;
}