Promote AbstractStringInstanceIdentifierCodec 33/108033/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 28 Sep 2023 21:40:57 +0000 (23:40 +0200)
committerRobert Varga <nite@hq.sk>
Thu, 5 Oct 2023 12:54:04 +0000 (12:54 +0000)
Integrate AbstractModuleStringInstanceIdentifierCodec, which is the only
subclass in active use. Drop @Beta moniker.

Change-Id: I5fe285feefd7db75fa73d8903f9d866390f9365f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONInstanceIdentifierCodec.java
codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/AbstractInstanceIdentifierCodec.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractModuleStringInstanceIdentifierCodec.java [deleted file]
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractStringInstanceIdentifierCodec.java

index aff416f6d462b20e790d22e246b4758199df0a2f..ad1989cb1b55f010122e47312e20636804945d85 100644 (file)
@@ -17,7 +17,7 @@ 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.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.util.AbstractModuleStringInstanceIdentifierCodec;
+import org.opendaylight.yangtools.yang.data.util.AbstractStringInstanceIdentifierCodec;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
@@ -26,7 +26,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.util.LeafrefResolver;
 
-abstract sealed class JSONInstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec
+abstract sealed class JSONInstanceIdentifierCodec extends AbstractStringInstanceIdentifierCodec
         implements JSONCodec<YangInstanceIdentifier> {
     static final class Lhotka02 extends JSONInstanceIdentifierCodec {
         Lhotka02(final EffectiveModelContext context, final JSONCodecFactory jsonCodecFactory) {
index bebcd2ffcf0974d6219c8e5a444b546b4a718bb2..9c52da63fb1023c906069d375e5c7596a114bef2 100644 (file)
@@ -10,10 +10,10 @@ package org.opendaylight.yangtools.yang.data.codec.xml;
 import static java.util.Objects.requireNonNull;
 
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.data.util.AbstractModuleStringInstanceIdentifierCodec;
+import org.opendaylight.yangtools.yang.data.util.AbstractStringInstanceIdentifierCodec;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
 
-abstract sealed class AbstractInstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec
+abstract sealed class AbstractInstanceIdentifierCodec extends AbstractStringInstanceIdentifierCodec
         permits InstanceIdentifierDeserializer, InstanceIdentifierSerializer {
     private final @NonNull DataSchemaContextTree dataContextTree;
 
diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractModuleStringInstanceIdentifierCodec.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractModuleStringInstanceIdentifierCodec.java
deleted file mode 100644 (file)
index dd943f6..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.util;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import com.google.common.annotations.Beta;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
-
-/**
- * Extension of {@link AbstractStringInstanceIdentifierCodec}, which instantiates
- * QNames by first resolving the namespace and then looking the target namespace
- * in the list of currently-subscribed modules.
- */
-@Beta
-public abstract class AbstractModuleStringInstanceIdentifierCodec extends AbstractStringInstanceIdentifierCodec {
-    /**
-     * Resolve a string prefix into the corresponding module.
-     *
-     * @param prefix Prefix
-     * @return module mapped to prefix, or null if the module cannot be resolved
-     */
-    protected abstract @Nullable ModuleEffectiveStatement moduleForPrefix(@NonNull String prefix);
-
-    @Override
-    protected final QName createQName(final String prefix, final String localName) {
-        final var module = moduleForPrefix(prefix);
-        checkArgument(module != null, "Failed to lookup prefix %s", prefix);
-        return QName.create(module.localQNameModule(), localName);
-    }
-}
index aff334bfb63f3eb7df5dc835f0c37ccdb6df641f..be923a7de23862d3c0e76257c4364d6395710953 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.data.util;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import com.google.common.escape.Escaper;
 import com.google.common.escape.Escapers;
 import java.util.Set;
@@ -25,13 +24,13 @@ import org.opendaylight.yangtools.yang.data.api.codec.InstanceIdentifierCodec;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContext.Composite;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContext.PathMixin;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.util.LeafrefResolver;
 
 /**
  * Abstract utility class for representations which encode {@link YangInstanceIdentifier} as a
  * prefix:name tuple. Typical uses are RESTCONF/JSON (module:name) and XML (prefix:name).
  */
-@Beta
 public abstract class AbstractStringInstanceIdentifierCodec extends AbstractNamespaceCodec<YangInstanceIdentifier>
         implements InstanceIdentifierCodec<String> {
     // Escaper as per https://www.rfc-editor.org/rfc/rfc7950#section-6.1.3
@@ -177,6 +176,23 @@ public abstract class AbstractStringInstanceIdentifierCodec extends AbstractName
         return createQName(XMLConstants.DEFAULT_NS_PREFIX, localName);
     }
 
+    @Override
+    protected final QName createQName(final String prefix, final String localName) {
+        final var module = moduleForPrefix(prefix);
+        if (module != null) {
+            return QName.create(module.localQNameModule(), localName);
+        }
+        throw new IllegalArgumentException("Failed to lookup prefix " + prefix);
+    }
+
+    /**
+     * Resolve a string prefix into the corresponding module.
+     *
+     * @param prefix Prefix
+     * @return module mapped to prefix, or null if the module cannot be resolved
+     */
+    protected abstract @Nullable ModuleEffectiveStatement moduleForPrefix(@NonNull String prefix);
+
     // FIXME: YANGTOOLS-1426: this will not be necessary when we have dedicated bits type
     private static @NonNull String checkBitsItem(final Object obj) {
         if (obj instanceof String str) {