Binding2 - Implement RpcActionProviderService
[mdsal.git] / binding2 / mdsal-binding2-runtime / src / main / java / org / opendaylight / mdsal / binding / javav2 / runtime / context / BindingRuntimeContext.java
index 6ed1f56444ea63637cc48384e5e2b46eb34836e7..868a93412198e43d5a6c3789c4a230af4e6e056c 100755 (executable)
@@ -8,7 +8,6 @@
 package org.opendaylight.mdsal.binding.javav2.runtime.context;
 
 import com.google.common.annotations.Beta;
-import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
@@ -26,6 +25,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Optional;
 import java.util.Set;
 import javax.annotation.Nullable;
 import org.opendaylight.mdsal.binding.javav2.generator.api.ClassLoadingStrategy;
@@ -41,10 +41,13 @@ import org.opendaylight.mdsal.binding.javav2.model.api.Type;
 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder;
 import org.opendaylight.mdsal.binding.javav2.runtime.context.util.BindingSchemaContextUtils;
 import org.opendaylight.mdsal.binding.javav2.runtime.reflection.BindingReflections;
+import org.opendaylight.mdsal.binding.javav2.spec.base.Action;
+import org.opendaylight.mdsal.binding.javav2.spec.base.Rpc;
 import org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentation;
 import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
+import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
@@ -52,8 +55,10 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
+import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
@@ -92,7 +97,7 @@ public class BindingRuntimeContext implements Immutable {
     private final Multimap<Type, AugmentationSchemaNode> augmentationToSchemas = HashMultimap.create();
     private final BiMap<SchemaPath,Type> targetToAugmentation = HashBiMap.create();
 
-    private final BiMap<Type, Object> typeToDefiningSchema = HashBiMap.create();
+    private final BiMap<Type, WithStatus> typeToDefiningSchema = HashBiMap.create();
     private final Multimap<Type, Type> choiceToCases = HashMultimap.create();
     private final Map<QName, Type> identities = new HashMap<>();
 
@@ -222,6 +227,14 @@ public class BindingRuntimeContext implements Immutable {
         return (DataSchemaNode) this.typeToDefiningSchema.get(referencedType(cls));
     }
 
+    public RpcDefinition getRpcDefinition(final Class<? extends Rpc<?, ?>> cls) {
+        return (RpcDefinition) typeToDefiningSchema.get(referencedType(cls));
+    }
+
+    public ActionDefinition getActionDefinition(final Class<? extends Action<?, ?, ?, ?>> cls) {
+        return (ActionDefinition) typeToDefiningSchema.get(referencedType(cls));
+    }
+
     /**
      * Returns defining {@link AugmentationSchemaNode} of target for supplied class.
      *
@@ -281,7 +294,7 @@ public class BindingRuntimeContext implements Immutable {
      *            - resolved parent choice schema
      * @param childClass
      *            - class representing case.
-     * @return Optionally a resolved case schema, absent if the choice is not
+     * @return Optionally a resolved case schema,.empty if the choice is not
      *         legal in the given context.
      * @throws IllegalArgumentException
      *             - if supplied class does not represent case