From bb424d41ccd511c3426d8e4844cc6e97bed18fcc Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 20 Apr 2020 13:18:09 +0200 Subject: [PATCH] Split out BaseYangTypesProvider 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 --- .../dom/codec/impl/UnionTypeCodec.java | 4 +- .../yang/types/AbstractTypeProvider.java | 11 ++- .../binding/generator/util/BaseYangTypes.java | 79 +-------------- .../generator/util/BaseYangTypesProvider.java | 98 +++++++++++++++++++ .../generator/util/BaseYangTypesTest.java | 4 +- 5 files changed, 109 insertions(+), 87 deletions(-) create mode 100644 binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypesProvider.java diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/UnionTypeCodec.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/UnionTypeCodec.java index 14065cc718..e0dbff9c09 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/UnionTypeCodec.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/UnionTypeCodec.java @@ -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 diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java index 34a57700e1..4a4fae7267 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java @@ -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); } diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypes.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypes.java index 3c48f95df3..834f6e3272 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypes.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypes.java @@ -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 Type value to which is YANG type - * mapped. - * - * @param type - * type definition representation of YANG type - * @return java Type representation of type. - * If type isn't found then null 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 index 0000000000..36b534e512 --- /dev/null +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypesProvider.java @@ -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 Type value to which is YANG type + * mapped. + * + * @param type + * type definition representation of YANG type + * @return java Type representation of type. + * If type isn't found then null 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 diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypesTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypesTest.java index 254fb943d6..661480bcd2 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypesTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/generator/util/BaseYangTypesTest.java @@ -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)); -- 2.36.6