Cleanup StringModuleInstanceIdentifierCodec a bit 07/97207/1
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 13 Aug 2021 19:25:23 +0000 (21:25 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 13 Aug 2021 19:49:47 +0000 (21:49 +0200)
Compact the implementation a bit by reusing code paths. Also we do not
really allow null defaultPrefix, but check for it being empty.

Make this.defaultPrefix nullable, which allows us to simplify the check
in moduleForPrefix() down to a simple null check.

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

index aa34c29e281aba07bdeb48c61bbbaae77219ddf8..af152c3219fe1f818959c0c37c6194945c4781fa 100644 (file)
@@ -10,6 +10,7 @@ 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;
@@ -17,33 +18,36 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
 
 public final class StringModuleInstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec {
-
-    private final DataSchemaContextTree dataContextTree;
+    private final @NonNull DataSchemaContextTree dataContextTree;
+    private final @Nullable String defaultPrefix;
     private final EffectiveModelContext context;
-    private final String defaultPrefix;
 
-    public StringModuleInstanceIdentifierCodec(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);
-        this.defaultPrefix = "";
+    }
+
+    public StringModuleInstanceIdentifierCodec(final EffectiveModelContext context) {
+        this(null, context);
     }
 
     public StringModuleInstanceIdentifierCodec(final EffectiveModelContext context,
             final @NonNull String defaultPrefix) {
-        this.context = requireNonNull(context);
-        this.dataContextTree = DataSchemaContextTree.from(context);
-        this.defaultPrefix = defaultPrefix;
+        this(defaultPrefix.isEmpty() ? null : defaultPrefix, context);
     }
 
     @Override
     protected Module moduleForPrefix(final String prefix) {
-        final String moduleName = prefix.isEmpty() && !defaultPrefix.isEmpty() ? defaultPrefix : prefix;
+        final String moduleName = prefix.isEmpty() && defaultPrefix != null ? defaultPrefix : prefix;
         return context.findModules(moduleName).stream().findFirst().orElse(null);
     }
 
     @Override
     public DataSchemaContextTree getDataContextTree() {
-        return this.dataContextTree;
+        return dataContextTree;
     }
 
     @Override