Add SchemaInferenceStack.ofSchemaPath()
[yangtools.git] / model / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / SchemaInferenceStack.java
index 4a6c97a2113a23305be0c63bc617c1d68bd0bab1..91610e67880b98740ba212baeae3229fb408c143 100644 (file)
@@ -245,7 +245,7 @@ public final class SchemaInferenceStack implements Mutable, EffectiveModelContex
 
     /**
      * Create a new stack backed by an effective model, pointing to specified schema node identified by an absolute
-     * {@link SchemaPath} and its {@link SchemaPath#getPathFromRoot()}.
+     * {@link SchemaPath} and its {@link SchemaPath#getPathFromRoot()} interpreted as a schema node identifier.
      *
      * @param effectiveModel EffectiveModelContext to which this stack is attached
      * @return A new stack
@@ -262,6 +262,39 @@ public final class SchemaInferenceStack implements Mutable, EffectiveModelContex
         return ret;
     }
 
+    /**
+     * Create a new stack backed by an effective model, pointing to specified schema node identified by an absolute
+     * {@link SchemaPath} and its {@link SchemaPath#getPathFromRoot()}, interpreted as a series of steps along primarily
+     * schema tree, with grouping namespace being the alternative lookup.
+     *
+     * @param effectiveModel EffectiveModelContext to which this stack is attached
+     * @return A new stack
+     * @throws NullPointerException {@code effectiveModel} is null
+     * @throws IllegalArgumentException if {@code path} cannot be resolved in the effective model or if it is not an
+     *                                  absolute path.
+     */
+    @Deprecated
+    public static @NonNull SchemaInferenceStack ofSchemaPath(final EffectiveModelContext effectiveModel,
+            final SchemaPath path) {
+        checkArgument(path.isAbsolute(), "Cannot operate on relative path %s", path);
+        final SchemaInferenceStack ret = new SchemaInferenceStack(effectiveModel);
+
+        for (QName step : path.getPathFromRoot()) {
+            try {
+                ret.enterSchemaTree(step);
+            } catch (IllegalArgumentException schemaEx) {
+                try {
+                    ret.enterGrouping(step);
+                } catch (IllegalArgumentException ex) {
+                    ex.addSuppressed(schemaEx);
+                    throw ex;
+                }
+            }
+        }
+
+        return ret;
+    }
+
     @Override
     public EffectiveModelContext getEffectiveModelContext() {
         return effectiveModel;