Reduce reliance on yang.model.api.Module 47/106947/3
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 21 Jul 2023 08:00:28 +0000 (10:00 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 21 Jul 2023 09:14:01 +0000 (11:14 +0200)
Look up ModuleEffectiveStatement instead and derive returns from there.

JIRA: YANGTOOLS-1525
Change-Id: Ic6d61a69b50c938512a4cf6614777ac6bd46438a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/IdentityrefJSONCodec.java
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONInstanceIdentifierCodec.java
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterContext.java
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonParserStream.java
codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/IdentityrefXmlCodec.java
codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java
codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlStringInstanceIdentifierCodec.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractMountPointContextFactory.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ModuleStringIdentityrefCodec.java
model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleNameNamespaceContext.java

index 893d9045d2169d354269f131cc18dab1609d7fb4..b2a2df6aace7d9593682847d11db0b6efda650cf 100644 (file)
@@ -18,7 +18,6 @@ import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.data.util.codec.IdentityCodecUtil;
 import org.opendaylight.yangtools.yang.data.util.codec.QNameCodecUtil;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
 
 final class IdentityrefJSONCodec implements JSONCodec<QName> {
     private final @NonNull EffectiveModelContext context;
@@ -41,9 +40,9 @@ final class IdentityrefJSONCodec implements JSONCodec<QName> {
                 return parentModule;
             }
 
-            final var modules = context.findModules(prefix).iterator();
+            final var modules = context.findModuleStatements(prefix).iterator();
             checkArgument(modules.hasNext(), "Could not find module %s", prefix);
-            return modules.next().getQNameModule();
+            return modules.next().localQNameModule();
         }).getQName();
     }
 
@@ -55,8 +54,8 @@ final class IdentityrefJSONCodec implements JSONCodec<QName> {
      */
     @Override
     public void writeValue(final JsonWriter writer, final QName value) throws IOException {
-        final String str = QNameCodecUtil.encodeQName(value, uri -> context.findModule(uri)
-            .map(Module::getName).orElseThrow(() -> new IllegalArgumentException("Cannot find module for " + uri)));
-        writer.value(str);
+        writer.value(QNameCodecUtil.encodeQName(value, uri -> context.findModuleStatement(uri)
+            .map(module -> module.argument().getLocalName())
+            .orElseThrow(() -> new IllegalArgumentException("Cannot find module for " + uri))));
     }
 }
index ad89e039f6f767413dbebc399f5eb34c423f6e18..9fbd13da9a76a86615781004644a9e15b56ee14e 100644 (file)
@@ -70,8 +70,8 @@ abstract sealed class JSONInstanceIdentifierCodec extends AbstractModuleStringIn
 
     @Override
     protected final String prefixForNamespace(final XMLNamespace namespace) {
-        final var modules = context.findModules(namespace).iterator();
-        return modules.hasNext() ? modules.next().getName() : null;
+        final var modules = context.findModuleStatements(namespace).iterator();
+        return modules.hasNext() ? modules.next().argument().getLocalName() : null;
     }
 
     @Override
index 7cbc38fc7b1eacf7ad22433a814fca9e33078ba6..216ccd3c62581c53ef62988cbf08337dd237c872 100644 (file)
@@ -18,7 +18,6 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
 
 /**
  * Abstract base class for a single level of {@link JSONNormalizedNodeStreamWriter} recursion. Provides the base API
@@ -65,8 +64,8 @@ abstract class JSONStreamWriterContext {
         // Prepend module name if namespaces do not match
         final QNameModule module = qname.getModule();
         if (!module.getNamespace().equals(getNamespace())) {
-            final var name = schema.findModule(module)
-                .map(Module::getName)
+            final var name = schema.findModuleStatement(module)
+                .map(mod -> mod.argument().getLocalName())
                 .orElseThrow(() -> new IllegalArgumentException("Could not find module for namespace " + module));
             sb.append(name).append(':');
         }
index df7d4d12aa003971e048c3bf3b0022ee6b8256bc..0913ec517e041161ce8d4001b7915b6e5c57af95 100644 (file)
@@ -24,7 +24,6 @@ import java.util.AbstractMap.SimpleImmutableEntry;
 import java.util.ArrayDeque;
 import java.util.Deque;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Map.Entry;
 import java.util.Set;
 import javax.xml.transform.dom.DOMSource;
@@ -49,7 +48,6 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
 import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode;
@@ -389,9 +387,8 @@ public final class JsonParserStream implements Closeable, Flushable {
             moduleNamePart = childName.substring(0, lastIndexOfColon);
             nodeNamePart = childName.substring(lastIndexOfColon + 1);
 
-            final Iterator<? extends Module> m = codecs.getEffectiveModelContext().findModules(moduleNamePart)
-                    .iterator();
-            namespace = m.hasNext() ? m.next().getNamespace() : null;
+            final var m = codecs.getEffectiveModelContext().findModuleStatements(moduleNamePart).iterator();
+            namespace = m.hasNext() ? m.next().localQNameModule().getNamespace() : null;
         } else {
             nodeNamePart = childName;
         }
@@ -416,10 +413,11 @@ public final class JsonParserStream implements Closeable, Flushable {
 
     private String toModuleNames(final Set<XMLNamespace> potentialUris) {
         final StringBuilder builder = new StringBuilder();
-        for (final XMLNamespace potentialUri : potentialUris) {
+        for (var potentialUri : potentialUris) {
             builder.append('\n');
-            //FIXME how to get information about revision from JSON input? currently first available is used.
-            builder.append(codecs.getEffectiveModelContext().findModules(potentialUri).iterator().next().getName());
+            // FIXME how to get information about revision from JSON input? currently first available is used.
+            builder.append(codecs.getEffectiveModelContext().findModuleStatements(potentialUri).iterator().next()
+                .argument().getLocalName());
         }
         return builder.toString();
     }
index cb931bf53eec102f310e27fcf495522cbebf998a..fedb06261aecaaba271505e3bc26a7b9a030fbb7 100644 (file)
@@ -47,9 +47,9 @@ final class IdentityrefXmlCodec implements XmlCodec<QName> {
             final var prefixedNS = ctx.getNamespaceURI(prefix);
             checkArgument(prefixedNS != null, "Failed to resolve prefix %s", prefix);
 
-            final var modules = context.findModules(XMLNamespace.of(prefixedNS)).iterator();
+            final var modules = context.findModuleStatements(XMLNamespace.of(prefixedNS)).iterator();
             checkArgument(modules.hasNext(), "Could not find module for namespace %s", prefixedNS);
-            return modules.next().getQNameModule();
+            return modules.next().localQNameModule();
         }).getQName();
     }
 
index fbbfdff4eb6a2b0f7dd719fc7a74ed6ec3b3197f..169c06b08d1a10629c3b6a6bf03a93e27685a143 100644 (file)
@@ -713,8 +713,8 @@ public final class XmlParserStream implements Closeable, Flushable {
 
     private Optional<QNameModule> resolveXmlNamespace(final String xmlNamespace) {
         return resolvedNamespaces.computeIfAbsent(xmlNamespace, nsUri -> {
-            final var it = codecs.getEffectiveModelContext().findModules(XMLNamespace.of(nsUri)).iterator();
-            return it.hasNext() ? Optional.of(it.next().getQNameModule()) : Optional.empty();
+            final var it = codecs.getEffectiveModelContext().findModuleStatements(XMLNamespace.of(nsUri)).iterator();
+            return it.hasNext() ? Optional.of(it.next().localQNameModule()) : Optional.empty();
         });
     }
 
index 3e592e551b556a08c14005250ea0ec5790dc302d..63e7d80fdef4e254cab7d2efe2294869179d107b 100644 (file)
@@ -50,8 +50,8 @@ final class XmlStringInstanceIdentifierCodec extends AbstractModuleStringInstanc
 
     @Override
     protected String prefixForNamespace(final XMLNamespace namespace) {
-        final var modules = context.findModules(namespace).iterator();
-        return modules.hasNext() ? modules.next().getName() : null;
+        final var modules = context.findModuleStatements(namespace).iterator();
+        return modules.hasNext() ? modules.next().argument().getLocalName() : null;
     }
 
     @Override
index c70c49469c8446d8d36099751bd5455d28e744ef..f559e50e13a9ccedf8372aea6c7705f95fc46bd1 100644 (file)
@@ -12,7 +12,6 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableSet;
-import java.util.Iterator;
 import java.util.stream.Collectors;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.yangtools.concepts.Immutable;
@@ -29,7 +28,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext;
 import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -98,9 +96,9 @@ public abstract class AbstractMountPointContextFactory extends AbstractDynamicMo
                 checkArgument(value instanceof String, "Unexpected module leaf value %s", value);
                 return (String) value;
             }).orElseThrow(() -> new IllegalArgumentException("Mount module missing in " + entry));
-            final Iterator<? extends Module> it = schemaContext.findModules(moduleName).iterator();
+            final var it = schemaContext.findModuleStatements(moduleName).iterator();
             checkArgument(it.hasNext(), "Failed to find a module named %s", moduleName);
-            final QNameModule module = it.next().getQNameModule();
+            final QNameModule module = it.next().localQNameModule();
 
             return new MountPointDefinition(
                 new MountPointLabel(QName.create(module, entry.findChildByArg(LABEL).map(lbl -> {
index 30573d92574e5e0136d7c9bbb3e108303b3890af..d331ff488424c8916270c6d1d62601e786486394 100644 (file)
@@ -10,13 +10,11 @@ package org.opendaylight.yangtools.yang.data.util;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
-import java.util.Iterator;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider;
-import org.opendaylight.yangtools.yang.model.api.Module;
 
 /**
  * Base class for implementing identityref codecs on based on module names.
@@ -24,8 +22,8 @@ import org.opendaylight.yangtools.yang.model.api.Module;
 @Beta
 public abstract class ModuleStringIdentityrefCodec extends AbstractModuleStringIdentityrefCodec
         implements EffectiveModelContextProvider {
-    private final EffectiveModelContext context;
-    private final QNameModule parentModule;
+    private final @NonNull EffectiveModelContext context;
+    private final @NonNull QNameModule parentModule;
 
     protected ModuleStringIdentityrefCodec(final @NonNull EffectiveModelContext context,
             final @NonNull QNameModule parentModule) {
@@ -44,7 +42,7 @@ public abstract class ModuleStringIdentityrefCodec extends AbstractModuleStringI
 
     @Override
     protected String prefixForNamespace(final XMLNamespace namespace) {
-        final Iterator<? extends Module> modules = context.findModules(namespace).iterator();
-        return modules.hasNext() ? modules.next().getName() : null;
+        final var modules = context.findModuleStatements(namespace).iterator();
+        return modules.hasNext() ? modules.next().argument().getLocalName() : null;
     }
 }
index fee7619a543de86af906b476f2c7dc4205fcceb5..053fd411556dc0cdfdeb5d8daade37f09bf0af8e 100644 (file)
@@ -14,7 +14,6 @@ import org.opendaylight.yangtools.yang.common.BiMapYangNamespaceContext;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.YangNamespaceContext;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.spi.AbstractEffectiveModelContextProvider;
 
 /**
@@ -53,13 +52,15 @@ public final class ModuleNameNamespaceContext extends AbstractEffectiveModelCont
 
     @Override
     public QNameModule namespaceForPrefix(final String prefix) {
-        return getEffectiveModelContext().findModules(prefix).stream().findFirst().map(Module::getQNameModule)
-            .orElse(null);
+        final var modules = getEffectiveModelContext().findModuleStatements(prefix).iterator();
+        return modules.hasNext() ? modules.next().localQNameModule() : null;
     }
 
     @Override
     public String prefixForNamespace(final QNameModule namespace) {
-        return getEffectiveModelContext().findModule(namespace).map(Module::getName).orElse(null);
+        return getEffectiveModelContext().findModuleStatement(namespace)
+            .map(module -> module.argument().getLocalName())
+            .orElse(null);
     }
 
     @java.io.Serial