Bug 6414: Fixed DataNodeIterator's traverseModule method
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / SchemaNodeUtils.java
index f00a5555167cd71aa8be43ba19f902efff851810..eaa6b9d92019e14644e34830fb368e7c96bfd0ec 100644 (file)
@@ -7,11 +7,16 @@
  */
 package org.opendaylight.yangtools.yang.model.util;
 
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 
-import com.google.common.base.Optional;
-
 public class SchemaNodeUtils {
 
     private SchemaNodeUtils() {
@@ -36,4 +41,24 @@ public class SchemaNodeUtils {
         }
         return previous.orNull();
     }
+
+    /**
+     * Returns RPC input or output schema based on supplied QName
+     *
+     * @param rpc RPC Definition
+     * @param qname input or output QName with namespace same as RPC
+     * @return input or output schema. Returns null if RPC does not have input/output specified.
+     */
+    @Nullable public static ContainerSchemaNode getRpcDataSchema(@Nonnull final RpcDefinition rpc, @Nonnull final QName qname) {
+        Preconditions.checkNotNull(rpc, "Rpc Schema must not be null");
+        Preconditions.checkNotNull(qname,"QName must not be null");
+        switch (qname.getLocalName()) {
+           case "input":
+               return rpc.getInput();
+           case "output":
+               return rpc.getOutput();
+           default:
+               throw new IllegalArgumentException("Supplied qname " + qname + " does not represent rpc input or output.");
+           }
+       }
 }