From 1044a08a4ec523640c1cb687c26bacef0033a144 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 18 Sep 2015 01:56:29 +0200 Subject: [PATCH] BUG-1862: Incorrect type transformation in TypeProviderImpl added new interface and implementation, introduced new type Change-Id: I70c625c0a182fb01147fdb14f48ea4c0b904b3a7 Signed-off-by: Robert Varga Signed-off-by: Filip Gregor --- .../model/api/BaseTypeWithRestrictions.java | 16 ++++ .../sal/binding/yang/types/BaseYangTypes.java | 31 +------ .../binding/yang/types/TypeProviderTest.java | 8 +- .../binding/generator/util/Types.java | 80 ++++++++++++++++++- 4 files changed, 97 insertions(+), 38 deletions(-) create mode 100644 binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/BaseTypeWithRestrictions.java diff --git a/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/BaseTypeWithRestrictions.java b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/BaseTypeWithRestrictions.java new file mode 100644 index 0000000000..703c58d70b --- /dev/null +++ b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/BaseTypeWithRestrictions.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2016 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.sal.binding.model.api; + +/** + * The BaseTypeWithRestrictions is marker interface that encapsulates definition of java + * concrete type only with changed restriction values. + */ +public interface BaseTypeWithRestrictions extends ConcreteType { + +} \ No newline at end of file diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/BaseYangTypes.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/BaseYangTypes.java index ef65b6c8cc..26325c16b8 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/BaseYangTypes.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/BaseYangTypes.java @@ -7,13 +7,10 @@ */ package org.opendaylight.yangtools.sal.binding.yang.types; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import java.math.BigDecimal; import java.math.BigInteger; -import java.util.Collections; -import java.util.List; import java.util.Map; import org.opendaylight.yangtools.binding.generator.util.Types; import org.opendaylight.yangtools.sal.binding.generator.spi.TypeProvider; @@ -24,10 +21,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint; -import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; -import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint; -import org.opendaylight.yangtools.yang.model.util.BaseConstraints; public final class BaseYangTypes { /** @@ -226,28 +219,7 @@ public final class BaseYangTypes { }; private static Restrictions singleRangeRestrictions(final T min, final T max) { - return new Restrictions() { - @Override - public boolean isEmpty() { - return false; - } - - @Override - public List getRangeConstraints() { - return Collections.singletonList(BaseConstraints.newRangeConstraint(min, max, - Optional. absent(), Optional. absent())); - } - - @Override - public List getPatternConstraints() { - return Collections.emptyList(); - } - - @Override - public List getLengthConstraints() { - return Collections.emptyList(); - } - }; + return Types.getDefaultRestrictions(min, max); } public static final class UnionType implements Type { @@ -264,5 +236,4 @@ public final class BaseYangTypes { return "Union"; } } - } diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderTest.java index 59c07fcb58..004b007969 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderTest.java @@ -25,6 +25,7 @@ import org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil; import org.opendaylight.yangtools.binding.generator.util.ReferencedTypeImpl; import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl; import org.opendaylight.yangtools.sal.binding.generator.spi.TypeProvider; +import org.opendaylight.yangtools.sal.binding.model.api.BaseTypeWithRestrictions; import org.opendaylight.yangtools.sal.binding.model.api.ConcreteType; import org.opendaylight.yangtools.sal.binding.model.api.Enumeration; import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject; @@ -224,10 +225,6 @@ public class TypeProviderTest { return result; } - /** - * FIXME: Remove @Ignore annotation once the bug https://bugs.opendaylight.org/show_bug.cgi?id=1862 is fixed - */ - @Ignore @Test public void bug1862RestrictedTypedefTransformationTest() { final TypeProvider provider = new TypeProviderImpl(schemaContext); @@ -237,8 +234,7 @@ public class TypeProviderTest { final Restrictions restrictions = BindingGeneratorUtil.getRestrictions(leafType); final Type result = provider.javaTypeForSchemaDefinitionType(leafType, leaf, restrictions); assertNotNull(result); - assertTrue(result instanceof GeneratedTransferObject); - //TODO: complete test after bug 1862 is fixed + assertTrue(result instanceof BaseTypeWithRestrictions); } @Test diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/Types.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/Types.java index 383618c612..26277e87f2 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/Types.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/Types.java @@ -8,16 +8,20 @@ package org.opendaylight.yangtools.binding.generator.util; import com.google.common.base.CharMatcher; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; import com.google.common.base.Splitter; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.collect.Iterables; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.Future; import javax.annotation.Nullable; +import org.opendaylight.yangtools.sal.binding.model.api.BaseTypeWithRestrictions; import org.opendaylight.yangtools.sal.binding.model.api.ConcreteType; import org.opendaylight.yangtools.sal.binding.model.api.ParameterizedType; import org.opendaylight.yangtools.sal.binding.model.api.Restrictions; @@ -25,6 +29,10 @@ import org.opendaylight.yangtools.sal.binding.model.api.Type; import org.opendaylight.yangtools.sal.binding.model.api.WildcardType; import org.opendaylight.yangtools.yang.binding.Augmentable; import org.opendaylight.yangtools.yang.binding.Augmentation; +import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint; +import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; +import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint; +import org.opendaylight.yangtools.yang.model.util.BaseConstraints; public final class Types { private static final CacheLoader, ConcreteType> TYPE_LOADER = @@ -96,7 +104,11 @@ public final class Types { public static ConcreteType typeForClass(final Class cls, final Restrictions restrictions) { if (restrictions != null) { - return new ConcreteTypeImpl(cls.getPackage().getName(), cls.getSimpleName(), restrictions); + if (restrictions instanceof DefaultRestrictions) { + return new ConcreteTypeImpl(cls.getPackage().getName(), cls.getSimpleName(), restrictions); + } else { + return new BaseTypeWithRestrictionsImpl(cls.getPackage().getName(), cls.getSimpleName(), restrictions); + } } else { return typeForClass(cls); } @@ -246,6 +258,34 @@ public final class Types { } } + /** + * + * Represents concrete JAVA type with changed restriction values. + * + */ + private static final class BaseTypeWithRestrictionsImpl extends AbstractBaseType implements BaseTypeWithRestrictions { + private final Restrictions restrictions; + + /** + * Creates instance of this class with package pkName and + * with the type name name. + * + * @param pkName + * string with package name + * @param name + * string with the name of the type + */ + private BaseTypeWithRestrictionsImpl(final String pkName, final String name, final Restrictions restrictions) { + super(pkName, name); + this.restrictions = Preconditions.checkNotNull(restrictions); + } + + @Override + public Restrictions getRestrictions() { + return restrictions; + } + } + /** * * Represents parametrized JAVA type. @@ -309,4 +349,40 @@ public final class Types { } } -} + public static DefaultRestrictions getDefaultRestrictions(final T min, final T max) { + return new DefaultRestrictions(min, max); + } + + private static final class DefaultRestrictions implements Restrictions { + private final T min; + private final T max; + private final List rangeConstraints; + + private DefaultRestrictions(final T min, final T max) { + this.min = Preconditions.checkNotNull(min); + this.max = Preconditions.checkNotNull(max); + this.rangeConstraints = Collections.singletonList(BaseConstraints.newRangeConstraint(min, max, Optional + .absent(), Optional.absent())); + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public List getRangeConstraints() { + return rangeConstraints; + } + + @Override + public List getPatternConstraints() { + return Collections.emptyList(); + } + + @Override + public List getLengthConstraints() { + return Collections.emptyList(); + } + } +} \ No newline at end of file -- 2.36.6