Scripted update of if statements
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / SchemaNodeUtils.java
index f00a5555167cd71aa8be43ba19f902efff851810..5121da0ec7d75ce02d776572b0567ce16903b1fd 100644 (file)
@@ -7,19 +7,24 @@
  */
 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() {
         throw new UnsupportedOperationException("Utility class");
     }
 
-    public static final Optional<SchemaNode> getOriginalIfPossible(final SchemaNode node) {
-        if(node instanceof DerivableSchemaNode) {
+    public static Optional<SchemaNode> getOriginalIfPossible(final SchemaNode node) {
+        if (node instanceof DerivableSchemaNode) {
             @SuppressWarnings("unchecked")
             final Optional<SchemaNode> ret  = (Optional<SchemaNode>) (((DerivableSchemaNode) node).getOriginal());
             return ret;
@@ -27,13 +32,33 @@ public class SchemaNodeUtils {
         return Optional.absent();
     }
 
-    public static final  SchemaNode getRootOriginalIfPossible(final SchemaNode data) {
+    public static SchemaNode getRootOriginalIfPossible(final SchemaNode data) {
         Optional<SchemaNode> previous = Optional.absent();
         Optional<SchemaNode> next = getOriginalIfPossible(data);
-        while(next.isPresent()) {
+        while (next.isPresent()) {
             previous = next;
             next = getOriginalIfPossible(next.get());
         }
         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.");
+           }
+       }
 }