Change BindingRuntimeTypes.findIdentity()
[mdsal.git] / binding / mdsal-binding-generator / src / main / java / org / opendaylight / mdsal / binding / generator / impl / rt / DefaultBindingRuntimeTypes.java
index 9bd748f7ddb1933c88cc94e9e75e51a2cef149e4..13c49461c2f7925caa727a56c654941abedc02e1 100644 (file)
@@ -11,21 +11,28 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSetMultimap;
 import com.google.common.collect.ImmutableSortedMap;
 import com.google.common.collect.Maps;
+import com.google.common.collect.SetMultimap;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
 import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeTypes;
+import org.opendaylight.mdsal.binding.runtime.api.CaseRuntimeType;
+import org.opendaylight.mdsal.binding.runtime.api.ChoiceRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.GeneratedRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.IdentityRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.InputRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.ModuleRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.OutputRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.RuntimeType;
+import org.opendaylight.mdsal.binding.runtime.api.YangDataRuntimeType;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.YangDataName;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 /**
@@ -33,6 +40,7 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
  */
 public final class DefaultBindingRuntimeTypes implements BindingRuntimeTypes {
     private final @NonNull EffectiveModelContext context;
+    private final ImmutableSetMultimap<JavaTypeName, CaseRuntimeType> choiceToCases;
     private final ImmutableMap<QNameModule, ModuleRuntimeType> modulesByNamespace;
     private final ImmutableSortedMap<String, ModuleRuntimeType> modulesByPackage;
     private final ImmutableMap<QName, IdentityRuntimeType> identities;
@@ -43,12 +51,14 @@ public final class DefaultBindingRuntimeTypes implements BindingRuntimeTypes {
     public DefaultBindingRuntimeTypes(final EffectiveModelContext context,
             final Map<QNameModule, ModuleRuntimeType> modules, final Map<JavaTypeName, RuntimeType> types,
             final Map<QName, IdentityRuntimeType> identities, final Map<QName, InputRuntimeType> rpcInputs,
-            final Map<QName, OutputRuntimeType> rpcOutputs) {
+            final Map<QName, OutputRuntimeType> rpcOutputs,
+            final SetMultimap<JavaTypeName, CaseRuntimeType> choiceToCases) {
         this.context = requireNonNull(context);
         this.identities = ImmutableMap.copyOf(identities);
         this.types = ImmutableMap.copyOf(types);
         this.rpcInputs = ImmutableMap.copyOf(rpcInputs);
         this.rpcOutputs = ImmutableMap.copyOf(rpcOutputs);
+        this.choiceToCases = ImmutableSetMultimap.copyOf(choiceToCases);
 
         modulesByNamespace = ImmutableMap.copyOf(modules);
         modulesByPackage = ImmutableSortedMap.copyOf(Maps.uniqueIndex(modules.values(),
@@ -61,8 +71,8 @@ public final class DefaultBindingRuntimeTypes implements BindingRuntimeTypes {
     }
 
     @Override
-    public Optional<IdentityRuntimeType> findIdentity(final QName qname) {
-        return Optional.ofNullable(identities.get(requireNonNull(qname)));
+    public IdentityRuntimeType identityChild(final QName qname) {
+        return identities.get(requireNonNull(qname));
     }
 
     @Override
@@ -93,6 +103,17 @@ public final class DefaultBindingRuntimeTypes implements BindingRuntimeTypes {
         return Optional.ofNullable(rpcOutputs.get(requireNonNull(rpcName)));
     }
 
+    @Override
+    public Optional<YangDataRuntimeType> findYangData(final YangDataName templateName) {
+        final var module = modulesByNamespace.get(templateName.module());
+        return module == null ? Optional.empty() : Optional.ofNullable(module.yangDataChild(templateName));
+    }
+
+    @Override
+    public Set<CaseRuntimeType> allCaseChildren(final ChoiceRuntimeType choiceType) {
+        return choiceToCases.get(choiceType.getIdentifier());
+    }
+
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)