Split out BaseYangTypesProvider 43/89143/4
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 20 Apr 2020 11:18:09 +0000 (13:18 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 20 Apr 2020 12:26:05 +0000 (14:26 +0200)
BaseYangTypes is related to binding.model.api, while the type provider
is related to binding.generator.api. Split out
BaseYangTypes.BASE_YANG_TYPES_PROVIDER as a BaseYangTypesProvider.INSTANCE,
separating these two concerns.

Change-Id: I61dc6ed7f39ba233017bb9938eaab151a7c41e3e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/UnionTypeCodec.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypes.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypesProvider.java [new file with mode: 0644]
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypesTest.java

index 14065cc718f95e4da27075aa6242bc8087b159d4..e0dbff9c09ea663b032c511f9dbadfb0cd8598f6 100644 (file)
@@ -12,7 +12,7 @@ import java.lang.reflect.Method;
 import java.util.LinkedHashSet;
 import java.util.Set;
 import java.util.concurrent.Callable;
-import org.opendaylight.mdsal.binding.generator.util.BaseYangTypes;
+import org.opendaylight.mdsal.binding.generator.util.BaseYangTypesProvider;
 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
 import org.opendaylight.yangtools.concepts.IllegalArgumentCodec;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
@@ -87,7 +87,7 @@ final class UnionTypeCodec extends ReflectionBasedCodec {
         final LeafSchemaNode typeNode = (LeafSchemaNode) dataNode;
 
         // prepare name of type form return type of referenced leaf
-        final String typeName = BindingMapping.getClassName(BaseYangTypes.BASE_YANG_TYPES_PROVIDER
+        final String typeName = BindingMapping.getClassName(BaseYangTypesProvider.INSTANCE
                 .javaTypeForSchemaDefinitionType(typeNode.getType(), typeNode).getName());
 
         // get method via reflection from generated code according to
index 34a57700e1d3043a7a2b49827375bb38e67930d9..4a4fae7267c5fcb782d7cd12fdefa6f0382a4f2d 100644 (file)
@@ -35,6 +35,7 @@ import java.util.TreeMap;
 import java.util.regex.Pattern;
 import org.opendaylight.mdsal.binding.generator.spi.TypeProvider;
 import org.opendaylight.mdsal.binding.generator.util.BaseYangTypes;
+import org.opendaylight.mdsal.binding.generator.util.BaseYangTypesProvider;
 import org.opendaylight.mdsal.binding.model.api.AccessModifier;
 import org.opendaylight.mdsal.binding.model.api.ConcreteType;
 import org.opendaylight.mdsal.binding.model.api.Enumeration;
@@ -188,7 +189,7 @@ public abstract class AbstractTypeProvider implements TypeProvider {
             // and generated an enclosing ExtendedType to hold any range constraints. The new parser instantiates
             // a base type which holds these constraints.
             if (typeDefinition instanceof DecimalTypeDefinition) {
-                final Type ret = BaseYangTypes.BASE_YANG_TYPES_PROVIDER.javaTypeForSchemaDefinitionType(typeDefinition,
+                final Type ret = BaseYangTypesProvider.INSTANCE.javaTypeForSchemaDefinitionType(typeDefinition,
                     parentNode, restrictions, lenientRelativeLeafrefs);
                 if (ret != null) {
                     return ret;
@@ -332,8 +333,8 @@ public abstract class AbstractTypeProvider implements TypeProvider {
                         returnType = genTOs.get(typedefName);
                     }
                     if (returnType == null) {
-                        returnType = BaseYangTypes.BASE_YANG_TYPES_PROVIDER.javaTypeForSchemaDefinitionType(
-                                baseTypeDef, typeDefinition, r, lenient);
+                        returnType = BaseYangTypesProvider.INSTANCE.javaTypeForSchemaDefinitionType(baseTypeDef,
+                            typeDefinition, r, lenient);
                     }
                 }
             }
@@ -1014,8 +1015,8 @@ public abstract class AbstractTypeProvider implements TypeProvider {
 
         final TypeDefinition<?> baseType = baseTypeDefForExtendedType(unionSubtype);
         if (unionTypeName.equals(baseType.getQName().getLocalName())) {
-            final Type javaType = BaseYangTypes.BASE_YANG_TYPES_PROVIDER.javaTypeForSchemaDefinitionType(baseType,
-                parentNode, BindingGeneratorUtil.getRestrictions(unionSubtype));
+            final Type javaType = BaseYangTypesProvider.INSTANCE.javaTypeForSchemaDefinitionType(baseType, parentNode,
+                BindingGeneratorUtil.getRestrictions(unionSubtype));
             if (javaType != null) {
                 updateUnionTypeAsProperty(parentUnionGenTOBuilder, javaType, unionTypeName);
             }
index 3c48f95df38c02c5a28481906e4201bb94827f3a..834f6e3272f82cb692b9e817b8c77605c57ab1d2 100644 (file)
@@ -9,20 +9,14 @@ package org.opendaylight.mdsal.binding.generator.util;
 
 import com.google.common.collect.ImmutableMap;
 import java.math.BigDecimal;
-import org.opendaylight.mdsal.binding.generator.spi.TypeProvider;
-import org.opendaylight.mdsal.binding.model.api.Restrictions;
 import org.opendaylight.mdsal.binding.model.api.Type;
 import org.opendaylight.mdsal.binding.model.util.Types;
-import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint64;
 import org.opendaylight.yangtools.yang.common.Uint8;
-import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 
 public final class BaseYangTypes {
     /**
@@ -121,7 +115,7 @@ public final class BaseYangTypes {
      * It is undesirable to create instance of this class.
      */
     private BaseYangTypes() {
-        throw new UnsupportedOperationException();
+
     }
 
     /**
@@ -135,75 +129,4 @@ public final class BaseYangTypes {
     public static Type javaTypeForYangType(final String type) {
         return TYPE_MAP.get(type);
     }
-
-    public static final TypeProvider BASE_YANG_TYPES_PROVIDER = new TypeProvider() {
-        /**
-         * Searches <code>Type</code> value to which is YANG <code>type</code>
-         * mapped.
-         *
-         * @param type
-         *            type definition representation of YANG type
-         * @return java <code>Type</code> representation of <code>type</code>.
-         *         If <code>type</code> isn't found then <code>null</code> is
-         *         returned.
-         */
-        @Override
-        public Type javaTypeForSchemaDefinitionType(final TypeDefinition<?> type, final SchemaNode parentNode,
-                final boolean lenientRelativeLeafrefs) {
-            if (type != null) {
-                return TYPE_MAP.get(type.getQName().getLocalName());
-            }
-
-            return null;
-        }
-
-        @Override
-        public Type javaTypeForSchemaDefinitionType(final TypeDefinition<?> type, final SchemaNode parentNode,
-                final Restrictions restrictions, final boolean lenientRelativeLeafrefs) {
-            String typeName = type.getQName().getLocalName();
-            switch (typeName) {
-                case "binary":
-                    return restrictions == null ? Types.BYTE_ARRAY : Types.typeForClass(byte[].class, restrictions);
-                case "decimal64":
-                    return Types.typeForClass(BigDecimal.class, restrictions);
-                case "enumeration":
-                    return Types.typeForClass(Enum.class, restrictions);
-                case "int8":
-                    return Types.typeForClass(Byte.class, restrictions);
-                case "int16":
-                    return Types.typeForClass(Short.class, restrictions);
-                case "int32":
-                    return Types.typeForClass(Integer.class, restrictions);
-                case "int64":
-                    return Types.typeForClass(Long.class, restrictions);
-                case "string":
-                    return Types.typeForClass(String.class, restrictions);
-                case "uint8":
-                    return Types.typeForClass(Uint8.class, restrictions);
-                case "uint16":
-                    return Types.typeForClass(Uint16.class, restrictions);
-                case "uint32":
-                    return Types.typeForClass(Uint32.class, restrictions);
-                case "uint64":
-                    return Types.typeForClass(Uint64.class, restrictions);
-                default:
-                    return javaTypeForSchemaDefinitionType(type, parentNode, lenientRelativeLeafrefs);
-            }
-        }
-
-        @Override
-        public String getTypeDefaultConstruction(final LeafSchemaNode node) {
-            return null;
-        }
-
-        @Override
-        public String getConstructorPropertyName(final SchemaNode node) {
-            return null;
-        }
-
-        @Override
-        public String getParamNameFromType(final TypeDefinition<?> type) {
-            return "_" + BindingMapping.getPropertyName(type.getQName().getLocalName());
-        }
-    };
 }
diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypesProvider.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypesProvider.java
new file mode 100644 (file)
index 0000000..36b534e
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, 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.mdsal.binding.generator.util;
+
+import com.google.common.annotations.Beta;
+import java.math.BigDecimal;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.generator.spi.TypeProvider;
+import org.opendaylight.mdsal.binding.model.api.Restrictions;
+import org.opendaylight.mdsal.binding.model.api.Type;
+import org.opendaylight.mdsal.binding.model.util.Types;
+import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
+import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.opendaylight.yangtools.yang.common.Uint8;
+import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+
+@Beta
+public final class BaseYangTypesProvider implements TypeProvider {
+    public static final @NonNull BaseYangTypesProvider INSTANCE = new BaseYangTypesProvider();
+
+    private BaseYangTypesProvider() {
+        // Hidden on purpose
+    }
+
+    /**
+     * Searches <code>Type</code> value to which is YANG <code>type</code>
+     * mapped.
+     *
+     * @param type
+     *            type definition representation of YANG type
+     * @return java <code>Type</code> representation of <code>type</code>.
+     *         If <code>type</code> isn't found then <code>null</code> is
+     *         returned.
+     */
+    @Override
+    public Type javaTypeForSchemaDefinitionType(final TypeDefinition<?> type, final SchemaNode parentNode,
+            final boolean lenientRelativeLeafrefs) {
+        return type == null ? null : BaseYangTypes.javaTypeForYangType(type.getQName().getLocalName());
+    }
+
+    @Override
+    public Type javaTypeForSchemaDefinitionType(final TypeDefinition<?> type, final SchemaNode parentNode,
+            final Restrictions restrictions, final boolean lenientRelativeLeafrefs) {
+        final String typeName = type.getQName().getLocalName();
+        switch (typeName) {
+            case "binary":
+                return restrictions == null ? Types.BYTE_ARRAY : Types.typeForClass(byte[].class, restrictions);
+            case "decimal64":
+                return Types.typeForClass(BigDecimal.class, restrictions);
+            case "enumeration":
+                return Types.typeForClass(Enum.class, restrictions);
+            case "int8":
+                return Types.typeForClass(Byte.class, restrictions);
+            case "int16":
+                return Types.typeForClass(Short.class, restrictions);
+            case "int32":
+                return Types.typeForClass(Integer.class, restrictions);
+            case "int64":
+                return Types.typeForClass(Long.class, restrictions);
+            case "string":
+                return Types.typeForClass(String.class, restrictions);
+            case "uint8":
+                return Types.typeForClass(Uint8.class, restrictions);
+            case "uint16":
+                return Types.typeForClass(Uint16.class, restrictions);
+            case "uint32":
+                return Types.typeForClass(Uint32.class, restrictions);
+            case "uint64":
+                return Types.typeForClass(Uint64.class, restrictions);
+            default:
+                return javaTypeForSchemaDefinitionType(type, parentNode, lenientRelativeLeafrefs);
+        }
+    }
+
+    @Override
+    public String getTypeDefaultConstruction(final LeafSchemaNode node) {
+        return null;
+    }
+
+    @Override
+    public String getConstructorPropertyName(final SchemaNode node) {
+        return null;
+    }
+
+    @Override
+    public String getParamNameFromType(final TypeDefinition<?> type) {
+        return "_" + BindingMapping.getPropertyName(type.getQName().getLocalName());
+    }
+}
\ No newline at end of file
index 254fb943d6acf2ed1167659beb44aca08bf86d15..661480bcd2ac94f1be7056eaa8782b6e70d5b6be 100644 (file)
@@ -133,7 +133,7 @@ public class BaseYangTypesTest {
 
     @Test
     public void javaTypeForSchemaDefinitionTypeTest() {
-        final TypeProvider typeProvider = BaseYangTypes.BASE_YANG_TYPES_PROVIDER;
+        final TypeProvider typeProvider = BaseYangTypesProvider.INSTANCE;
 
         Type javaType = typeProvider.javaTypeForSchemaDefinitionType(binary, binary);
         assertNotNull(javaType);
@@ -194,7 +194,7 @@ public class BaseYangTypesTest {
 
     @Test
     public void javaTypeForRestrictedSchemaDefinitionTypeTest() {
-        final TypeProvider typeProvider = BaseYangTypes.BASE_YANG_TYPES_PROVIDER;
+        final TypeProvider typeProvider = BaseYangTypesProvider.INSTANCE;
 
         Type javaType = typeProvider.javaTypeForSchemaDefinitionType(binary, binary,
             BindingGeneratorUtil.getRestrictions(binary));