Cleanup StringModuleInstanceIdentifierCodec a bit 29/97229/1
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 13 Aug 2021 19:25:23 +0000 (21:25 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 17 Aug 2021 09:47:48 +0000 (11:47 +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>
(cherry picked from commit 63eba7f355bacfe2aa1f20112cf2a7f98bd2928c)

restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/StringModuleInstanceIdentifierCodec.java

index c026f7dbc32297bb68f5ab9c426a445a45608545..de9d1de208f9fc63b4364f6822f1d2fe3506608a 100644 (file)
@@ -11,39 +11,43 @@ import static java.util.Objects.requireNonNull;
 
 import java.net.URI;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 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 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