Add SchemaPath/SchemaNodeIdentifier.createChild(QName)
[yangtools.git] / yang / yang-model-api / src / main / java / org / opendaylight / yangtools / yang / model / api / SchemaPath.java
index b8b280bdfe6a9d4dfe29b57847140cc728013093..fb335dbd3f18575ddb9e3baf7aef512f2bffd0f6 100644 (file)
@@ -44,8 +44,8 @@ public abstract class SchemaPath implements Immutable {
         }
 
         @Override
-        protected SchemaPath createInstance(final SchemaPath parent, final QName qname) {
-            return new AbsoluteSchemaPath(parent, requireNonNull(qname));
+        public AbsoluteSchemaPath createChild(final QName qname) {
+            return new AbsoluteSchemaPath(this, requireNonNull(qname));
         }
     }
 
@@ -63,8 +63,8 @@ public abstract class SchemaPath implements Immutable {
         }
 
         @Override
-        protected SchemaPath createInstance(final SchemaPath parent, final QName qname) {
-            return new RelativeSchemaPath(parent, requireNonNull(qname));
+        public RelativeSchemaPath createChild(final QName qname) {
+            return new RelativeSchemaPath(this, requireNonNull(qname));
         }
     }
 
@@ -175,15 +175,6 @@ public abstract class SchemaPath implements Immutable {
         return create(Arrays.asList(path), absolute);
     }
 
-    /**
-     * Create a new instance.
-     *
-     * @param parent Parent SchemaPath
-     * @param qname next path element
-     * @return A new SchemaPath instance
-     */
-    protected abstract SchemaPath createInstance(SchemaPath parent, QName qname);
-
     /**
      * Create a child path based on concatenation of this path and a relative path.
      *
@@ -197,7 +188,7 @@ public abstract class SchemaPath implements Immutable {
 
         SchemaPath parentPath = this;
         for (QName qname : relative) {
-            parentPath = parentPath.createInstance(parentPath, qname);
+            parentPath = parentPath.createChild(qname);
         }
 
         return parentPath;
@@ -211,15 +202,17 @@ public abstract class SchemaPath implements Immutable {
      */
     public SchemaPath createChild(final SchemaPath relative) {
         checkArgument(!relative.isAbsolute(), "Child creation requires relative path");
-
-        SchemaPath parentPath = this;
-        for (QName qname : relative.getPathFromRoot()) {
-            parentPath = parentPath.createInstance(parentPath, qname);
-        }
-
-        return parentPath;
+        return createChild(relative.getPathFromRoot());
     }
 
+    /**
+     * Create a child path based on concatenation of this path and an additional path element.
+     *
+     * @param element Relative SchemaPath elements
+     * @return A new child path
+     */
+    public abstract SchemaPath createChild(QName element);
+
     /**
      * Create a child path based on concatenation of this path and additional
      * path elements.