Specialize JSONInstanceIdentifierCodec 64/84964/1
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 5 Oct 2019 11:16:57 +0000 (13:16 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 7 Oct 2019 10:01:47 +0000 (12:01 +0200)
We do not want to force RFC7951 to instantiate the old lhotka-02
codec if we are not using it. Make JSONInstanceIdentifierCodec
an abstract class and specialize it as
Lhotka02JSONInstanceIdentifierCodec, so we have two distinct
concrete classes.

Change-Id: Icb30d97ec9134e8dc368775e48b93ef042ed9121
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit f8325877a6b29e3791b3dd945881b9cf1e648ea4)

yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONCodecFactorySupplier.java
yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONInstanceIdentifierCodec.java
yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/Lhotka02JSONInstanceIdentifierCodec.java [new file with mode: 0644]

index 0c43f915fb7cf5a0bda0e5833c705fe4275d05b1..23f01a76b3afd8bdded180669bf9c3d529f46da9 100644 (file)
@@ -44,7 +44,7 @@ public enum JSONCodecFactorySupplier {
     /**
      * Source of {@link JSONCodecFactory} instances compliant with RFC7951.
      */
-    DRAFT_LHOTKA_NETMOD_YANG_JSON_02(JSONInstanceIdentifierCodec::new);
+    DRAFT_LHOTKA_NETMOD_YANG_JSON_02(Lhotka02JSONInstanceIdentifierCodec::new);
 
     private static final Logger LOG = LoggerFactory.getLogger(JSONCodecFactorySupplier.class);
 
index 350acef4117c6e52ca807204a4e94e173918503e..4d54a8f55bf0e3ac78a9cc3f614f8d0fc6194a4b 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
-class JSONInstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec
+abstract class JSONInstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec
         implements JSONCodec<YangInstanceIdentifier> {
     private final DataSchemaContextTree dataContextTree;
     private final JSONCodecFactory codecFactory;
@@ -35,24 +35,24 @@ class JSONInstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifier
     }
 
     @Override
-    protected Module moduleForPrefix(final String prefix) {
+    protected final Module moduleForPrefix(final String prefix) {
         final Iterator<Module> modules = context.findModules(prefix).iterator();
         return modules.hasNext() ? modules.next() : null;
     }
 
     @Override
-    protected String prefixForNamespace(final URI namespace) {
+    protected final String prefixForNamespace(final URI namespace) {
         final Iterator<Module> modules = context.findModules(namespace).iterator();
         return modules.hasNext() ? modules.next().getName() : null;
     }
 
     @Override
-    protected DataSchemaContextTree getDataContextTree() {
+    protected final DataSchemaContextTree getDataContextTree() {
         return dataContextTree;
     }
 
     @Override
-    protected Object deserializeKeyValue(final DataSchemaNode schemaNode, final String value) {
+    protected final Object deserializeKeyValue(final DataSchemaNode schemaNode, final String value) {
         requireNonNull(schemaNode, "schemaNode cannot be null");
         checkArgument(schemaNode instanceof LeafSchemaNode, "schemaNode must be of type LeafSchemaNode");
         final JSONCodec<?> objectJSONCodec = codecFactory.codecFor((LeafSchemaNode) schemaNode);
@@ -60,17 +60,17 @@ class JSONInstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifier
     }
 
     @Override
-    public Class<YangInstanceIdentifier> getDataType() {
+    public final Class<YangInstanceIdentifier> getDataType() {
         return YangInstanceIdentifier.class;
     }
 
     @Override
-    public YangInstanceIdentifier parseValue(final Object ctx, final String str) {
+    public final YangInstanceIdentifier parseValue(final Object ctx, final String str) {
         return deserialize(str);
     }
 
     @Override
-    public void writeValue(final JsonWriter ctx, final YangInstanceIdentifier value) throws IOException {
+    public final void writeValue(final JsonWriter ctx, final YangInstanceIdentifier value) throws IOException {
         ctx.value(serialize(value));
     }
 }
diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/Lhotka02JSONInstanceIdentifierCodec.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/Lhotka02JSONInstanceIdentifierCodec.java
new file mode 100644 (file)
index 0000000..c8ff720
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.codec.gson;
+
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+
+final class Lhotka02JSONInstanceIdentifierCodec extends JSONInstanceIdentifierCodec {
+    Lhotka02JSONInstanceIdentifierCodec(final SchemaContext context, final JSONCodecFactory jsonCodecFactory) {
+        super(context, jsonCodecFactory);
+    }
+}