+ /**
+ * Return this path as a {@link SchemaNodeIdentifier}.
+ *
+ * @return A SchemaNodeIdentifier.
+ * @throws IllegalStateException if this path is empty
+ */
+ public final SchemaNodeIdentifier asSchemaNodeIdentifier() {
+ checkState(qname != null, "Cannot convert empty %s", this);
+ final List<QName> path = getPathFromRoot();
+ return isAbsolute() ? Absolute.of(path) : Descendant.of(path);
+ }
+
+ /**
+ * Return this path as an {@link Absolute} SchemaNodeIdentifier.
+ *
+ * @return An SchemaNodeIdentifier.
+ * @throws IllegalStateException if this path is empty or is not absolute.
+ */
+ public final Absolute asAbsolute() {
+ final SchemaNodeIdentifier ret = asSchemaNodeIdentifier();
+ if (ret instanceof Absolute) {
+ return (Absolute) ret;
+ }
+ throw new IllegalStateException("Path " + this + " is relative");
+ }
+
+ /**
+ * Return this path as an {@link Descendant} SchemaNodeIdentifier.
+ *
+ * @return An SchemaNodeIdentifier.
+ * @throws IllegalStateException if this path is empty or is not relative.
+ */
+ public final Descendant asDescendant() {
+ final SchemaNodeIdentifier ret = asSchemaNodeIdentifier();
+ if (ret instanceof Descendant) {
+ return (Descendant) ret;
+ }
+ throw new IllegalStateException("Path " + this + " is absolute");
+ }
+