Hide StringModuleInstanceIdentifierCodec 13/97213/5
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 14 Aug 2021 00:49:18 +0000 (02:49 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 14 Aug 2021 12:14:58 +0000 (14:14 +0200)
This is a package-internal utility class, hide it from outside view and
optimize its dispatch. This entire class is quite dubious and needs to
be re-evaluated in terms of what it really provides -- it is not even
covered by UT.

Change-Id: I62a974f82b0ad5db6e7df7c4b09a1379ff23d7c6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/RestCodec.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/StringModuleInstanceIdentifierCodec.java

index 3e276c42464568f98e3072508921294f46e91969..7ede7a042c808582cd5b6a3c9f90a86bb3de14ea 100644 (file)
@@ -56,11 +56,12 @@ import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+// FIXME: what is this class even trying to do?
 public final class RestCodec {
-
     private static final Logger LOG = LoggerFactory.getLogger(RestCodec.class);
 
     private RestCodec() {
+        // Hidden on purpose
     }
 
     // FIXME: IllegalArgumentCodec is not quite accurate
@@ -115,6 +116,7 @@ public final class RestCodec {
                     return null;
                 } else if (type instanceof InstanceIdentifierTypeDefinition) {
                     return input instanceof IdentityValuesDTO ? instanceIdentifier.deserialize(input)
+                        // FIXME: what is it that we are trying to decode here and why?
                         : new StringModuleInstanceIdentifierCodec(schemaContext).deserialize((String) input);
                 } else {
                     final TypeDefinitionAwareCodec<Object, ? extends TypeDefinition<?>> typeAwarecodec =
index af152c3219fe1f818959c0c37c6194945c4781fa..344eb84c9732073361af9a6ccd1cc55cc04eabe6 100644 (file)
@@ -10,48 +10,37 @@ package org.opendaylight.restconf.nb.rfc8040.codecs;
 import static java.util.Objects.requireNonNull;
 
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.data.util.AbstractModuleStringInstanceIdentifierCodec;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
 
-public final class StringModuleInstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec {
-    private final @NonNull DataSchemaContextTree dataContextTree;
-    private final @Nullable String defaultPrefix;
+final class StringModuleInstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec {
     private final EffectiveModelContext context;
 
-    private StringModuleInstanceIdentifierCodec(final @Nullable String defaultPrefix,
-            final EffectiveModelContext context) {
-        // FIXME: what does the empty string mean, exactly?
-        this.defaultPrefix = defaultPrefix;
-        this.context = requireNonNull(context);
-        this.dataContextTree = DataSchemaContextTree.from(context);
-    }
+    private volatile DataSchemaContextTree dataContextTree;
 
-    public StringModuleInstanceIdentifierCodec(final EffectiveModelContext context) {
-        this(null, context);
-    }
-
-    public StringModuleInstanceIdentifierCodec(final EffectiveModelContext context,
-            final @NonNull String defaultPrefix) {
-        this(defaultPrefix.isEmpty() ? null : defaultPrefix, context);
+    StringModuleInstanceIdentifierCodec(final @NonNull EffectiveModelContext context) {
+        this.context = requireNonNull(context);
     }
 
     @Override
     protected Module moduleForPrefix(final String prefix) {
-        final String moduleName = prefix.isEmpty() && defaultPrefix != null ? defaultPrefix : prefix;
-        return context.findModules(moduleName).stream().findFirst().orElse(null);
+        return context.findModules(prefix).stream().findFirst().orElse(null);
     }
 
     @Override
-    public DataSchemaContextTree getDataContextTree() {
-        return dataContextTree;
+    protected DataSchemaContextTree getDataContextTree() {
+        DataSchemaContextTree local = dataContextTree;
+        if (local == null) {
+            dataContextTree = local = DataSchemaContextTree.from(context);
+        }
+        return local;
     }
 
     @Override
     protected String prefixForNamespace(final XMLNamespace namespace) {
-        return this.context.findModules(namespace).stream().findFirst().map(Module::getName).orElse(null);
+        return context.findModules(namespace).stream().findFirst().map(Module::getName).orElse(null);
     }
 }