From: Lukas Sedlak Date: Wed, 22 Oct 2014 12:58:46 +0000 (+0000) Subject: Merge "Resolved some sonar issues: Simplify Boolean Expression" X-Git-Tag: release/lithium~462 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=2c3fdd4d2e1d00fdbb86511f00097c7d9f7c2899;hp=0c5bc1ee1d4f2e193ddc1ce630bc399d13483100;p=yangtools.git Merge "Resolved some sonar issues: Simplify Boolean Expression" --- diff --git a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java index 0b45713b56..f8abb348e6 100644 --- a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java +++ b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java @@ -1209,9 +1209,8 @@ public class BindingGeneratorImpl implements BindingGenerator { genCtx.get(module).addChoiceToCaseMapping(refChoiceType, caseTypeBuilder, caseNode); final Iterable caseChildNodes = caseNode.getChildNodes(); if (caseChildNodes != null) { - Object parentNode = null; final SchemaPath nodeSp = choiceNode.getPath(); - parentNode = findDataSchemaNode(schemaContext, nodeSp.getParent()); + final Object parentNode = findDataSchemaNode(schemaContext, nodeSp.getParent()); SchemaNode parent; if (parentNode instanceof AugmentationSchema) { @@ -1234,14 +1233,15 @@ public class BindingGeneratorImpl implements BindingGenerator { final SchemaPath sp = choiceNode.getPath(); parent = findDataSchemaNode(schemaContext, sp.getParent()); } - GeneratedTypeBuilder childOfType = findChildNodeByPath(parent.getPath()); - if (childOfType == null) { - childOfType = findGroupingByPath(parent.getPath()); + if (parent != null) { + GeneratedTypeBuilder childOfType = findChildNodeByPath(parent.getPath()); + if (childOfType == null) { + childOfType = findGroupingByPath(parent.getPath()); + } + resolveDataSchemaNodes(module, basePackageName, caseTypeBuilder, childOfType, caseChildNodes); } - resolveDataSchemaNodes(module, basePackageName, caseTypeBuilder, childOfType, caseChildNodes); } } - processUsesAugments(caseNode, module); } } @@ -1928,7 +1928,7 @@ public class BindingGeneratorImpl implements BindingGenerator { } final GeneratedPropertyBuilder genPropBuilder = resultTOBuilder.addProperty("value"); - genPropBuilder.setReturnType(Types.primitiveType("char[]", null)); + genPropBuilder.setReturnType(Types.CHAR_ARRAY); resultTOBuilder.addEqualsIdentity(genPropBuilder); resultTOBuilder.addHashIdentity(genPropBuilder); resultTOBuilder.addToStringProperty(genPropBuilder); diff --git a/code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/Types.java b/code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/Types.java index 91d56a3562..605c989bba 100644 --- a/code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/Types.java +++ b/code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/Types.java @@ -7,6 +7,9 @@ */ package org.opendaylight.yangtools.binding.generator.util; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -21,6 +24,16 @@ import org.opendaylight.yangtools.yang.binding.Augmentable; import org.opendaylight.yangtools.yang.binding.Augmentation; public final class Types { + private static final CacheLoader, ConcreteType> TYPE_LOADER = + new CacheLoader, ConcreteType>() { + @Override + public ConcreteType load(final Class key) { + return new ConcreteTypeImpl(key.getPackage().getName(), key.getSimpleName(), null); + } + }; + private static final LoadingCache, ConcreteType> TYPE_CACHE = + CacheBuilder.newBuilder().weakKeys().softValues().build(TYPE_LOADER); + private static final Type SET_TYPE = typeForClass(Set.class); private static final Type LIST_TYPE = typeForClass(List.class); private static final Type MAP_TYPE = typeForClass(Map.class); @@ -29,6 +42,8 @@ public final class Types { public static final ConcreteType FUTURE = typeForClass(Future.class); public static final ConcreteType STRING = typeForClass(String.class); public static final ConcreteType VOID = typeForClass(Void.class); + public static final ConcreteType BYTE_ARRAY = primitiveType("byte[]", null); + public static final ConcreteType CHAR_ARRAY = primitiveType("char[]", null); /** * It is not desirable to create instance of this class @@ -55,12 +70,12 @@ public final class Types { * doesn't exist. * * @param primitiveType - * string containing programaticall construction based on + * string containing programmatic construction based on * primitive type (e.g byte[]) - * @return ConcreteType instance which represents programatic + * @return ConcreteType instance which represents programmatic * construction with primitive JAVA type */ - public static Type primitiveType(final String primitiveType, final Restrictions restrictions) { + public static ConcreteType primitiveType(final String primitiveType, final Restrictions restrictions) { return new ConcreteTypeImpl("", primitiveType, restrictions); } @@ -71,12 +86,16 @@ public final class Types { * Class to describe * @return Description of class */ - public static ConcreteType typeForClass(Class cls) { - return typeForClass(cls, null); + public static ConcreteType typeForClass(final Class cls) { + return TYPE_CACHE.getUnchecked(cls); } - public static ConcreteType typeForClass(Class cls, Restrictions restrictions) { - return new ConcreteTypeImpl(cls.getPackage().getName(), cls.getSimpleName(), restrictions); + public static ConcreteType typeForClass(final Class cls, final Restrictions restrictions) { + if (restrictions != null) { + return new ConcreteTypeImpl(cls.getPackage().getName(), cls.getSimpleName(), restrictions); + } else { + return typeForClass(cls); + } } /** @@ -89,7 +108,7 @@ public final class Types { * Value Type * @return Description of generic type instance */ - public static ParameterizedType mapTypeFor(Type keyType, Type valueType) { + public static ParameterizedType mapTypeFor(final Type keyType, final Type valueType) { return parameterizedTypeFor(MAP_TYPE, keyType, valueType); } @@ -101,7 +120,7 @@ public final class Types { * Value Type * @return Description of generic type instance of Set */ - public static ParameterizedType setTypeFor(Type valueType) { + public static ParameterizedType setTypeFor(final Type valueType) { return parameterizedTypeFor(SET_TYPE, valueType); } @@ -113,7 +132,7 @@ public final class Types { * Value Type * @return Description of type instance of List */ - public static ParameterizedType listTypeFor(Type valueType) { + public static ParameterizedType listTypeFor(final Type valueType) { return parameterizedTypeFor(LIST_TYPE, valueType); } @@ -129,7 +148,7 @@ public final class Types { * @return ParametrizedType reprezentation of type * and its parameters parameters */ - public static ParameterizedType parameterizedTypeFor(Type type, Type... parameters) { + public static ParameterizedType parameterizedTypeFor(final Type type, final Type... parameters) { return new ParametrizedTypeImpl(type, parameters); } @@ -142,10 +161,10 @@ public final class Types { * string with the package name * @param typeName * string with the type name - * @return WildcardType reprezentation of + * @return WildcardType representation of * packageName and typeName */ - public static WildcardType wildcardTypeFor(String packageName, String typeName) { + public static WildcardType wildcardTypeFor(final String packageName, final String typeName) { return new WildcardTypeImpl(packageName, typeName); } @@ -158,11 +177,11 @@ public final class Types { * * @param valueType * JAVA Type with actual parameter - * @return ParametrizedType reprezentation of raw type + * @return ParametrizedType representation of raw type * Augmentable with actual parameter * valueType */ - public static ParameterizedType augmentableTypeFor(Type valueType) { + public static ParameterizedType augmentableTypeFor(final Type valueType) { final Type augmentable = typeForClass(Augmentable.class); return parameterizedTypeFor(augmentable, valueType); } @@ -180,7 +199,7 @@ public final class Types { * Augmentation with actual parameter * valueType */ - public static ParameterizedType augmentationTypeFor(Type valueType) { + public static ParameterizedType augmentationTypeFor(final Type valueType) { final Type augmentation = typeForClass(Augmentation.class); return parameterizedTypeFor(augmentation, valueType); } @@ -202,7 +221,7 @@ public final class Types { * @param name * string with the name of the type */ - private ConcreteTypeImpl(String pkName, String name, Restrictions restrictions) { + private ConcreteTypeImpl(final String pkName, final String name, final Restrictions restrictions) { super(pkName, name); this.restrictions = restrictions; } @@ -222,12 +241,12 @@ public final class Types { /** * Array of JAVA actual type parameters. */ - private Type[] actualTypes; + private final Type[] actualTypes; /** * JAVA raw type (like List, Set, Map...) */ - private Type rawType; + private final Type rawType; @Override public Type[] getActualTypeArguments() { @@ -249,7 +268,7 @@ public final class Types { * @param actTypes * array of actual parameters */ - public ParametrizedTypeImpl(Type rawType, Type[] actTypes) { + public ParametrizedTypeImpl(final Type rawType, final Type[] actTypes) { super(rawType.getPackageName(), rawType.getName()); this.rawType = rawType; this.actualTypes = Arrays.copyOf(actTypes, actTypes.length); @@ -271,7 +290,7 @@ public final class Types { * @param typeName * string with the name of type */ - public WildcardTypeImpl(String packageName, String typeName) { + public WildcardTypeImpl(final String packageName, final String typeName) { super(packageName, typeName); } } diff --git a/code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java b/code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java index b80ada0f2f..3c82dea870 100644 --- a/code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java +++ b/code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java @@ -88,6 +88,7 @@ abstract class AbstractGeneratedTypeBuilder> impleme if (getClass() != obj.getClass()) { return false; } - MethodSignatureBuilderImpl other = (MethodSignatureBuilderImpl) obj; + AbstractTypeMemberBuilder other = (AbstractTypeMemberBuilder) obj; if (getName() == null) { if (other.getName() != null) { return false; diff --git a/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/BindingGeneratorUtilTest.java b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/BindingGeneratorUtilTest.java index ef268c7ed9..413856eb65 100644 --- a/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/BindingGeneratorUtilTest.java +++ b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/BindingGeneratorUtilTest.java @@ -7,24 +7,45 @@ */ package org.opendaylight.yangtools.binding.generator.util; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.*; import java.io.File; import java.io.IOException; +import java.io.Serializable; +import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Set; + +import com.google.common.base.Optional; + import org.junit.Test; +import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTypeBuilderImpl; +import org.opendaylight.yangtools.sal.binding.model.api.AccessModifier; +import org.opendaylight.yangtools.sal.binding.model.api.Restrictions; +import org.opendaylight.yangtools.sal.binding.model.api.type.builder.MethodSignatureBuilder; import org.opendaylight.yangtools.yang.binding.BindingMapping; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition; +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.api.type.UnsignedIntegerTypeDefinition; import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser; +import org.opendaylight.yangtools.yang.model.util.BaseConstraints; import org.opendaylight.yangtools.yang.model.util.DataNodeIterator; +import org.opendaylight.yangtools.yang.model.util.Decimal64; +import org.opendaylight.yangtools.yang.model.util.ExtendedType; +import org.opendaylight.yangtools.yang.model.util.ExtendedType.Builder; +import org.opendaylight.yangtools.yang.model.util.Int16; +import org.opendaylight.yangtools.yang.model.util.StringType; +import org.opendaylight.yangtools.yang.model.util.Uint16; import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleBuilder; import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl; @@ -162,4 +183,129 @@ public class BindingGeneratorUtilTest { BindingGeneratorUtil.parseToValidParamName(" 0some-testing_parameter name ")); } + @Test + public void computeDefaultSUIDTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + MethodSignatureBuilder method = generatedTypeBuilder.addMethod("myMethodName"); + method.setAccessModifier(AccessModifier.PUBLIC); + generatedTypeBuilder.addProperty("myProperty"); + generatedTypeBuilder.addImplementsType(Types.typeForClass(Serializable.class)); + + assertEquals(6788238694991761868L, BindingGeneratorUtil.computeDefaultSUID(generatedTypeBuilder)); + + } + + @Test + public void getRestrictionsTest() { + + Optional absent = Optional.absent(); + + Builder extTypeBuilder = ExtendedType.builder(new QName(URI.create("namespace"), "localName"), + Int16.getInstance(), absent, absent, SchemaPath.create(true, QName.create("/root"))); + + ArrayList lenght = new ArrayList(); + ArrayList range = new ArrayList(); + ArrayList pattern = new ArrayList(); + + lenght.add(BaseConstraints.newLengthConstraint(1, 2, absent, absent)); + range.add(BaseConstraints.newRangeConstraint(1, 2, absent, absent)); + pattern.add(BaseConstraints.newPatternConstraint(".*", absent, absent)); + + extTypeBuilder.lengths(lenght); + extTypeBuilder.ranges(range); + extTypeBuilder.patterns(pattern); + + Restrictions restrictions = BindingGeneratorUtil.getRestrictions(extTypeBuilder.build()); + + assertNotNull(restrictions); + + assertEquals(1, restrictions.getLengthConstraints().size()); + assertEquals(1, restrictions.getRangeConstraints().size()); + assertEquals(1, restrictions.getPatternConstraints().size()); + + assertFalse(restrictions.isEmpty()); + assertTrue(restrictions.getLengthConstraints().contains( + BaseConstraints.newLengthConstraint(1, 2, absent, absent))); + assertTrue(restrictions.getRangeConstraints() + .contains(BaseConstraints.newRangeConstraint(1, 2, absent, absent))); + assertTrue(restrictions.getPatternConstraints().contains( + BaseConstraints.newPatternConstraint(".*", absent, absent))); + } + + @Test + public void getEmptyRestrictionsTest() { + + Optional absent = Optional.absent(); + + Builder extTypeBuilder = ExtendedType.builder(new QName(URI.create("namespace"), "localName"), + StringType.getInstance(), absent, absent, SchemaPath.create(true, QName.create("/root"))); + + Restrictions restrictions = BindingGeneratorUtil.getRestrictions(extTypeBuilder.build()); + + assertNotNull(restrictions); + assertTrue(restrictions.isEmpty()); + + } + + @Test + public void getDefaultIntegerRestrictionsTest() { + + Optional absent = Optional.absent(); + + Builder extTypeBuilder = ExtendedType.builder(new QName(URI.create("namespace"), "localName"), + Int16.getInstance(), absent, absent, SchemaPath.create(true, QName.create("/root"))); + + ExtendedType extType = extTypeBuilder.build(); + Restrictions restrictions = BindingGeneratorUtil.getRestrictions(extType); + + assertNotNull(restrictions); + assertFalse(restrictions.isEmpty()); + assertEquals(((IntegerTypeDefinition) extType.getBaseType()).getRangeConstraints(), + restrictions.getRangeConstraints()); + assertTrue(restrictions.getLengthConstraints().isEmpty()); + assertTrue(restrictions.getPatternConstraints().isEmpty()); + + } + + @Test + public void getDefaultUnsignedIntegerRestrictionsTest() { + + Optional absent = Optional.absent(); + + Builder extTypeBuilder = ExtendedType.builder(new QName(URI.create("namespace"), "localName"), + Uint16.getInstance(), absent, absent, SchemaPath.create(true, QName.create("/root"))); + + ExtendedType extType = extTypeBuilder.build(); + Restrictions restrictions = BindingGeneratorUtil.getRestrictions(extType); + + assertNotNull(restrictions); + assertFalse(restrictions.isEmpty()); + assertEquals(((UnsignedIntegerTypeDefinition) extType.getBaseType()).getRangeConstraints(), + restrictions.getRangeConstraints()); + assertTrue(restrictions.getLengthConstraints().isEmpty()); + assertTrue(restrictions.getPatternConstraints().isEmpty()); + } + + @Test + public void getDefaultDecimalRestrictionsTest() { + + Optional absent = Optional.absent(); + SchemaPath path = SchemaPath.create(true, QName.create("/root")); + + Builder extTypeBuilder = ExtendedType.builder(new QName(URI.create("namespace"), "localName"), + Decimal64.create(path, 10), absent, absent, path); + + ExtendedType extType = extTypeBuilder.build(); + Restrictions restrictions = BindingGeneratorUtil.getRestrictions(extType); + + assertNotNull(restrictions); + assertFalse(restrictions.isEmpty()); + assertEquals(((DecimalTypeDefinition) extType.getBaseType()).getRangeConstraints(), + restrictions.getRangeConstraints()); + assertTrue(restrictions.getLengthConstraints().isEmpty()); + assertTrue(restrictions.getPatternConstraints().isEmpty()); + + } + } diff --git a/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractGeneratedTypeBuilderTest.java b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractGeneratedTypeBuilderTest.java new file mode 100644 index 0000000000..0841f80aab --- /dev/null +++ b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractGeneratedTypeBuilderTest.java @@ -0,0 +1,76 @@ +/** + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + */ +package org.opendaylight.yangtools.binding.generator.util.generated.type.builder; + +import java.io.Serializable; + +import org.junit.Test; +import org.opendaylight.yangtools.binding.generator.util.Types; + +public class AbstractGeneratedTypeBuilderTest { + + @Test(expected = IllegalArgumentException.class) + public void addPropertyIllegalArgumentTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addProperty(null); + } + + @Test(expected = IllegalArgumentException.class) + public void addPropertyIllegalArgumentTest2() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addProperty("myName"); + generatedTypeBuilder.addProperty("myName"); + } + + @Test(expected = IllegalArgumentException.class) + public void addEnclosingTransferObjectArgumentTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addEnclosingTransferObject(new GeneratedTOBuilderImpl("my.package", "myName")); + generatedTypeBuilder.addEnclosingTransferObject(new GeneratedTOBuilderImpl("my.package", "myName")); + } + + @Test(expected = IllegalArgumentException.class) + public void addEnclosingTransferObjectArgumentTest2() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addEnclosingTransferObject("myName"); + generatedTypeBuilder.addEnclosingTransferObject("myName"); + } + + @Test(expected = IllegalArgumentException.class) + public void addImplementsTypeIllegalArgumentTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addImplementsType(Types.typeForClass(Serializable.class)); + generatedTypeBuilder.addImplementsType(Types.typeForClass(Serializable.class)); + } + + @Test(expected = IllegalArgumentException.class) + public void addConstantIllegalArgumentTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addConstant(Types.STRING, "myName", "Value"); + generatedTypeBuilder.addConstant(Types.BOOLEAN, "myName", true); + } + + @Test(expected = IllegalArgumentException.class) + public void addAnnotationIllegalArgumentTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addAnnotation("my.package", "myName"); + generatedTypeBuilder.addAnnotation("my.package", "myName"); + } + + @Test(expected = IllegalArgumentException.class) + public void addEnumerationIllegalArgumentTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addEnumeration("myName"); + generatedTypeBuilder.addEnumeration("myName"); + } + +} diff --git a/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AnnotationBuilderTest.java b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AnnotationBuilderTest.java index f71399441d..d8668dd50c 100644 --- a/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AnnotationBuilderTest.java +++ b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AnnotationBuilderTest.java @@ -7,10 +7,7 @@ */ package org.opendaylight.yangtools.binding.generator.util.generated.type.builder; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; @@ -18,6 +15,7 @@ import java.util.List; import org.junit.Test; import org.opendaylight.yangtools.binding.generator.util.Types; import org.opendaylight.yangtools.sal.binding.model.api.AnnotationType; +import org.opendaylight.yangtools.sal.binding.model.api.AnnotationType.Parameter; import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject; import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType; import org.opendaylight.yangtools.sal.binding.model.api.type.builder.AnnotationTypeBuilder; @@ -30,12 +28,11 @@ public class AnnotationBuilderTest { @Test public void generatedTypeAnnotationTest() { - final GeneratedTypeBuilder genTypeBuilder = new GeneratedTypeBuilderImpl( - "org.opendaylight.controller", "AnnotInterface"); + final GeneratedTypeBuilder genTypeBuilder = new GeneratedTypeBuilderImpl("org.opendaylight.controller", + "AnnotInterface"); genTypeBuilder.addAnnotation("javax.management", "MXBean"); - final AnnotationTypeBuilder annotDesc = genTypeBuilder.addAnnotation( - "javax.management", "Description"); + final AnnotationTypeBuilder annotDesc = genTypeBuilder.addAnnotation("javax.management", "Description"); annotDesc.addParameter("description", "some sort of interface"); final GeneratedType genType = genTypeBuilder.toInstance(); @@ -46,17 +43,14 @@ public class AnnotationBuilderTest { int annotCount = 0; for (final AnnotationType annotation : genType.getAnnotations()) { - if (annotation.getPackageName().equals("javax.management") - && annotation.getName().equals("MXBean")) { + if (annotation.getPackageName().equals("javax.management") && annotation.getName().equals("MXBean")) { annotCount++; assertEquals(0, annotation.getParameters().size()); } - if (annotation.getPackageName().equals("javax.management") - && annotation.getName().equals("Description")) { + if (annotation.getPackageName().equals("javax.management") && annotation.getName().equals("Description")) { annotCount++; assertEquals(1, annotation.getParameters().size()); - AnnotationType.Parameter param = annotation - .getParameter("description"); + AnnotationType.Parameter param = annotation.getParameter("description"); assertNotNull(param); assertEquals("description", param.getName()); assertNotNull(param.getValue()); @@ -70,24 +64,21 @@ public class AnnotationBuilderTest { @Test public void methodSignatureAnnotationTest() { - final GeneratedTypeBuilder genTypeBuilder = new GeneratedTypeBuilderImpl( - "org.opendaylight.controller", "TransferObject"); + final GeneratedTypeBuilder genTypeBuilder = new GeneratedTypeBuilderImpl("org.opendaylight.controller", + "TransferObject"); - final MethodSignatureBuilder methodBuilder = genTypeBuilder - .addMethod("simpleMethod"); + final MethodSignatureBuilder methodBuilder = genTypeBuilder.addMethod("simpleMethod"); methodBuilder.setReturnType(Types.typeForClass(Integer.class)); - final AnnotationTypeBuilder annotManAttr = methodBuilder - .addAnnotation("org.springframework.jmx.export.annotation", - "ManagedAttribute"); + final AnnotationTypeBuilder annotManAttr = methodBuilder.addAnnotation( + "org.springframework.jmx.export.annotation", "ManagedAttribute"); annotManAttr.addParameter("description", "\"The Name Attribute\""); annotManAttr.addParameter("currencyTimeLimit", "20"); annotManAttr.addParameter("defaultValue", "\"bar\""); annotManAttr.addParameter("persistPolicy", "\"OnUpdate\""); - final AnnotationTypeBuilder annotManProp = methodBuilder - .addAnnotation("org.springframework.jmx.export.annotation", - "ManagedOperation"); + final AnnotationTypeBuilder annotManProp = methodBuilder.addAnnotation( + "org.springframework.jmx.export.annotation", "ManagedOperation"); final List typeValues = new ArrayList(); typeValues.add("\"val1\""); @@ -102,8 +93,7 @@ public class AnnotationBuilderTest { assertNotNull(genType.getMethodDefinitions()); assertNotNull(genType.getMethodDefinitions().get(0)); assertNotNull(genType.getMethodDefinitions().get(0).getAnnotations()); - final List annotations = genType.getMethodDefinitions() - .get(0).getAnnotations(); + final List annotations = genType.getMethodDefinitions().get(0).getAnnotations(); assertEquals(2, annotations.size()); int annotCount = 0; @@ -136,24 +126,21 @@ public class AnnotationBuilderTest { @Test public void generatedPropertyAnnotationTest() { - final GeneratedTOBuilder genTOBuilder = new GeneratedTOBuilderImpl( - "org.opendaylight.controller", "AnnotInterface"); + final GeneratedTOBuilder genTOBuilder = new GeneratedTOBuilderImpl("org.opendaylight.controller", + "AnnotInterface"); - final GeneratedPropertyBuilder propertyBuilder = genTOBuilder - .addProperty("simpleProperty"); + final GeneratedPropertyBuilder propertyBuilder = genTOBuilder.addProperty("simpleProperty"); propertyBuilder.setReturnType(Types.typeForClass(Integer.class)); - final AnnotationTypeBuilder annotManAttr = propertyBuilder - .addAnnotation("org.springframework.jmx.export.annotation", - "ManagedAttribute"); + final AnnotationTypeBuilder annotManAttr = propertyBuilder.addAnnotation( + "org.springframework.jmx.export.annotation", "ManagedAttribute"); annotManAttr.addParameter("description", "\"The Name Attribute\""); annotManAttr.addParameter("currencyTimeLimit", "20"); annotManAttr.addParameter("defaultValue", "\"bar\""); annotManAttr.addParameter("persistPolicy", "\"OnUpdate\""); - final AnnotationTypeBuilder annotManProp = propertyBuilder - .addAnnotation("org.springframework.jmx.export.annotation", - "ManagedOperation"); + final AnnotationTypeBuilder annotManProp = propertyBuilder.addAnnotation( + "org.springframework.jmx.export.annotation", "ManagedOperation"); final List typeValues = new ArrayList(); typeValues.add("\"val1\""); @@ -168,8 +155,7 @@ public class AnnotationBuilderTest { assertNotNull(genTransObj.getProperties()); assertNotNull(genTransObj.getProperties().get(0)); assertNotNull(genTransObj.getProperties().get(0).getAnnotations()); - final List annotations = genTransObj.getProperties() - .get(0).getAnnotations(); + final List annotations = genTransObj.getProperties().get(0).getAnnotations(); assertEquals(2, annotations.size()); int annotCount = 0; @@ -202,18 +188,16 @@ public class AnnotationBuilderTest { @Test public void generatedTransfeObjectAnnotationTest() { - final GeneratedTOBuilder genTypeBuilder = new GeneratedTOBuilderImpl( - "org.opendaylight.controller", "AnnotClassCache"); + final GeneratedTOBuilder genTypeBuilder = new GeneratedTOBuilderImpl("org.opendaylight.controller", + "AnnotClassCache"); genTypeBuilder.addAnnotation("javax.management", "MBean"); - final AnnotationTypeBuilder annotNotify = genTypeBuilder.addAnnotation( - "javax.management", "NotificationInfo"); + final AnnotationTypeBuilder annotNotify = genTypeBuilder.addAnnotation("javax.management", "NotificationInfo"); final List notifyList = new ArrayList(); notifyList.add("\"my.notif.type\""); annotNotify.addParameters("types", notifyList); - annotNotify.addParameter("description", - "@Description(\"my notification\")"); + annotNotify.addParameter("description", "@Description(\"my notification\")"); GeneratedTransferObject genTO = genTypeBuilder.toInstance(); @@ -223,8 +207,7 @@ public class AnnotationBuilderTest { int annotCount = 0; for (final AnnotationType annotation : genTO.getAnnotations()) { - if (annotation.getPackageName().equals("javax.management") - && annotation.getName().equals("MBean")) { + if (annotation.getPackageName().equals("javax.management") && annotation.getName().equals("MBean")) { annotCount++; assertEquals(0, annotation.getParameters().size()); } @@ -232,8 +215,7 @@ public class AnnotationBuilderTest { && annotation.getName().equals("NotificationInfo")) { annotCount++; assertEquals(2, annotation.getParameters().size()); - AnnotationType.Parameter param = annotation - .getParameter("types"); + AnnotationType.Parameter param = annotation.getParameter("types"); assertNotNull(param); assertEquals("types", param.getName()); assertNull(param.getValue()); @@ -245,10 +227,180 @@ public class AnnotationBuilderTest { assertNotNull(param); assertEquals("description", param.getName()); assertNotNull(param.getValue()); - assertEquals("@Description(\"my notification\")", - param.getValue()); + assertEquals("@Description(\"my notification\")", param.getValue()); } } assertEquals(2, annotCount); } + + @Test + public void annotationTypeBuilderAddAnnotationTest() { + AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl("my.package", "MyName"); + + assertNull(annotationTypeBuilder.addAnnotation("my.package", null)); + assertNull(annotationTypeBuilder.addAnnotation(null, "MyName")); + + assertNotNull(annotationTypeBuilder.addAnnotation("", "")); + + assertNotNull(annotationTypeBuilder.addAnnotation("my.package2", "MyName2")); + assertNull(annotationTypeBuilder.addAnnotation("my.package2", "MyName2")); + + AnnotationType annotationTypeInstance = annotationTypeBuilder.toInstance(); + + assertEquals(2, annotationTypeInstance.getAnnotations().size()); + + assertEquals("my.package", annotationTypeInstance.getPackageName()); + assertEquals("MyName", annotationTypeInstance.getName()); + + } + + @Test + public void annotationTypeBuilderEqualsTest() { + AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl("my.package", "MyName"); + AnnotationTypeBuilder annotationTypeBuilder2 = new AnnotationTypeBuilderImpl("my.package2", "MyName"); + AnnotationTypeBuilder annotationTypeBuilder3 = new AnnotationTypeBuilderImpl("my.package", "MyName2"); + AnnotationTypeBuilder annotationTypeBuilder4 = new AnnotationTypeBuilderImpl("my.package", "MyName"); + + assertFalse(annotationTypeBuilder.equals(null)); + assertFalse(annotationTypeBuilder.equals(new Object())); + + assertTrue(annotationTypeBuilder.equals(annotationTypeBuilder)); + + assertTrue(annotationTypeBuilder.equals(annotationTypeBuilder4)); + assertFalse(annotationTypeBuilder.equals(annotationTypeBuilder2)); + assertFalse(annotationTypeBuilder.equals(annotationTypeBuilder3)); + + AnnotationType instance = annotationTypeBuilder.toInstance(); + AnnotationType instance2 = annotationTypeBuilder2.toInstance(); + AnnotationType instance3 = annotationTypeBuilder3.toInstance(); + AnnotationType instance4 = annotationTypeBuilder4.toInstance(); + + assertFalse(instance.equals(null)); + assertFalse(instance.equals(new Object())); + assertTrue(instance.equals(instance)); + + assertFalse(instance.equals(instance2)); + assertFalse(instance.equals(instance3)); + assertTrue(instance.equals(instance4)); + + annotationTypeBuilder.addParameter("myName", "myValue1"); + annotationTypeBuilder.addParameter("myName2", "myValue2"); + annotationTypeBuilder2.addParameter("myName", "myValue3"); + + instance = annotationTypeBuilder.toInstance(); + instance2 = annotationTypeBuilder2.toInstance(); + + Parameter parameter = instance.getParameter("myName"); + Parameter parameter2 = instance.getParameter("myName2"); + Parameter parameter3 = instance2.getParameter("myName"); + + assertFalse(parameter.equals(null)); + assertFalse(parameter.equals(new Object())); + assertTrue(parameter.equals(parameter)); + assertTrue(parameter.equals(parameter3)); + assertFalse(parameter.equals(parameter2)); + } + + @Test + public void annotationTypeBuilderHashCodeTest() { + AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl("my.package", "MyName"); + AnnotationTypeBuilder annotationTypeBuilder2 = new AnnotationTypeBuilderImpl("my.package2", "MyName"); + AnnotationTypeBuilder annotationTypeBuilder3 = new AnnotationTypeBuilderImpl("my.package", "MyName2"); + AnnotationTypeBuilder annotationTypeBuilder4 = new AnnotationTypeBuilderImpl("my.package", "MyName"); + + assertFalse(annotationTypeBuilder.hashCode() == annotationTypeBuilder2.hashCode()); + assertFalse(annotationTypeBuilder.hashCode() == annotationTypeBuilder3.hashCode()); + + assertTrue(annotationTypeBuilder.hashCode() == annotationTypeBuilder4.hashCode()); + assertTrue(annotationTypeBuilder.hashCode() == annotationTypeBuilder.hashCode()); + + AnnotationType instance = annotationTypeBuilder.toInstance(); + AnnotationType instance2 = annotationTypeBuilder2.toInstance(); + AnnotationType instance3 = annotationTypeBuilder3.toInstance(); + AnnotationType instance4 = annotationTypeBuilder4.toInstance(); + + assertFalse(instance.hashCode() == instance2.hashCode()); + assertFalse(instance.hashCode() == instance3.hashCode()); + + assertTrue(instance.hashCode() == instance4.hashCode()); + assertTrue(instance.hashCode() == instance.hashCode()); + + annotationTypeBuilder.addParameter("myName", "myValue1"); + annotationTypeBuilder.addParameter("myName2", "myValue2"); + annotationTypeBuilder2.addParameter("myName", "myValue3"); + + instance = annotationTypeBuilder.toInstance(); + instance2 = annotationTypeBuilder2.toInstance(); + + Parameter parameter = instance.getParameter("myName"); + Parameter parameter2 = instance.getParameter("myName2"); + Parameter parameter3 = instance2.getParameter("myName"); + + assertTrue(parameter.hashCode() == parameter.hashCode()); + assertTrue(parameter.hashCode() == parameter3.hashCode()); + assertFalse(parameter.hashCode() == parameter2.hashCode()); + + } + + @Test + public void annotationTypeBuilderAddParameterTest() { + AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl("my.package", "MyName"); + + assertFalse(annotationTypeBuilder.addParameter(null, "myValue")); + assertFalse(annotationTypeBuilder.addParameter("myName", null)); + + assertFalse(annotationTypeBuilder.addParameters(null, new ArrayList())); + assertFalse(annotationTypeBuilder.addParameters("myName", null)); + + assertTrue(annotationTypeBuilder.addParameter("myName", "myValue")); + assertFalse(annotationTypeBuilder.addParameter("myName", "myValue")); + assertFalse(annotationTypeBuilder.addParameters("myName", new ArrayList())); + + ArrayList values = new ArrayList(); + values.add("myValue"); + assertTrue(annotationTypeBuilder.addParameters("myName2", values)); + + AnnotationType annotationTypeInstance = annotationTypeBuilder.toInstance(); + assertTrue(annotationTypeInstance.containsParameters()); + assertEquals(2, annotationTypeInstance.getParameters().size()); + assertEquals(2, annotationTypeInstance.getParameterNames().size()); + assertTrue(annotationTypeInstance.getParameterNames().contains("myName")); + assertTrue(annotationTypeInstance.getParameterNames().contains("myName2")); + assertFalse(annotationTypeInstance.getParameterNames().contains("myName3")); + + Parameter parameter = annotationTypeInstance.getParameter("myName"); + Parameter parameter2 = annotationTypeInstance.getParameter("myName2"); + Parameter parameter3 = annotationTypeInstance.getParameter("myName3"); + + assertNotNull(parameter); + assertNotNull(parameter2); + assertNull(parameter3); + + assertEquals(parameter.getValue(), "myValue"); + assertTrue(parameter.getValues().isEmpty()); + + assertEquals(1, parameter2.getValues().size()); + assertTrue(parameter2.getValues().contains("myValue")); + + } + + @Test + public void annotationTypeBuilderToStringTest() { + AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl("my.package", "MyAnnotationName"); + annotationTypeBuilder.addAnnotation("my.package", "MySubAnnotationName"); + annotationTypeBuilder.addParameter("MyParameter", "myValue"); + + assertEquals( + "AnnotationTypeBuilder [packageName=my.package, name=MyAnnotationName, annotationBuilders=[AnnotationTypeBuilder [packageName=my.package, name=MySubAnnotationName, annotationBuilders=[], parameters=[]]], parameters=[ParameterImpl [name=MyParameter, value=myValue, values=[]]]]", + annotationTypeBuilder.toString()); + + AnnotationType annotationTypeInstance = annotationTypeBuilder.toInstance(); + + assertEquals("my.package.MyAnnotationName", annotationTypeInstance.getFullyQualifiedName()); + assertEquals( + "AnnotationType [packageName=my.package, name=MyAnnotationName, annotations=[AnnotationType [packageName=my.package, name=MySubAnnotationName, annotations=[], parameters=[]]], parameters=[ParameterImpl [name=MyParameter, value=myValue, values=[]]]]", + annotationTypeInstance.toString()); + + } + } diff --git a/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/EnumerationBuilderImplTest.java b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/EnumerationBuilderImplTest.java new file mode 100644 index 0000000000..bddfd42101 --- /dev/null +++ b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/EnumerationBuilderImplTest.java @@ -0,0 +1,286 @@ +/* + * 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.binding.generator.util.generated.type.builder; + +import com.google.common.base.Optional; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.yangtools.sal.binding.model.api.Enumeration; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.Status; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; +import org.opendaylight.yangtools.yang.model.util.EnumerationType; + +import java.util.Collections; +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +public class EnumerationBuilderImplTest { + + private EnumerationBuilderImpl enumerationBuilder; + private EnumerationBuilderImpl enumerationBuilderSame; + private EnumerationBuilderImpl enumerationBuilderOtherName; + private EnumerationBuilderImpl enumerationBuilderOtherPackage; + private final String DESCRIPTION = "Test description of Enum"; + private final String packageName = "org.opendaylight.test"; + private final String name = "TestName"; + private final String moduleName = "TestModuleName"; + private final String reference = "TestRef"; + private final String valueName = "TestValue"; + private final String valueDescription = "Value used for test"; + private int value = 12; + private Enumeration enumeration; + private QName qName = QName.create("TestQName", "10-10-2014", "TestLocalQName"); + + + @Before + public void setup() { + enumerationBuilder = new EnumerationBuilderImpl(packageName, name); + enumerationBuilder.setDescription(DESCRIPTION); + enumerationBuilder.setModuleName(moduleName); + enumerationBuilder.setReference(reference); + enumerationBuilder.setSchemaPath(Collections.singletonList(qName)); + enumerationBuilder.addValue(valueName, value, valueDescription); + enumerationBuilder.addAnnotation(packageName, "TestAnnotation"); + enumerationBuilderSame = new EnumerationBuilderImpl(packageName, name); + enumerationBuilderOtherName = new EnumerationBuilderImpl(packageName, "SomeOtherName"); + enumerationBuilderOtherPackage = new EnumerationBuilderImpl("org.opendaylight.other", name); + enumeration = enumerationBuilder.toInstance(enumerationBuilder); + } + + @Test + public void testAddNullAnnotation() { + assertNull(enumerationBuilder.addAnnotation(null, null)); + assertNull(enumerationBuilder.addAnnotation(null, "test")); + assertNull(enumerationBuilder.addAnnotation(packageName, null)); + } + + @Test + public void testEnumerationBuilder() { + assertEquals(packageName + "." + name, enumerationBuilder.getFullyQualifiedName()); + assertEquals(name , enumerationBuilder.getName()); + assertEquals(packageName, enumerationBuilder.getPackageName()); + + assertNotEquals(enumerationBuilder, null); + assertEquals(enumerationBuilder, enumerationBuilder); + assertNotEquals(enumerationBuilder, "string"); + assertNotEquals(enumerationBuilder, enumerationBuilderOtherName); + assertNotEquals(enumerationBuilder, enumerationBuilderOtherPackage); + assertEquals(enumerationBuilder,enumerationBuilderSame); + } + + @Test + public void testEnumeration() { + assertEquals(name, enumeration.getName()); + assertEquals(packageName, enumeration.getPackageName()); + assertEquals(null, enumeration.getComment()); + assertEquals(enumerationBuilder, enumeration.getParentType()); + assertEquals(DESCRIPTION, enumeration.getDescription()); + assertEquals(moduleName, enumeration.getModuleName()); + assertEquals(packageName + '.' + name, enumeration.getFullyQualifiedName()); + assertEquals(reference, enumeration.getReference()); + assertEquals(Collections.singletonList(qName), enumeration.getSchemaPath()); + assertEquals(Collections.EMPTY_LIST, enumeration.getEnclosedTypes()); + assertEquals(Collections.EMPTY_LIST, enumeration.getEnumerations()); + assertEquals(Collections.EMPTY_LIST, enumeration.getMethodDefinitions()); + assertEquals(Collections.EMPTY_LIST, enumeration.getConstantDefinitions()); + assertEquals(Collections.EMPTY_LIST, enumeration.getProperties()); + assertEquals(Collections.EMPTY_LIST, enumeration.getImplements()); + assertNotNull(enumeration.getValues()); + assertNotNull(enumeration.getAnnotations()); + + assertFalse(enumeration.isAbstract()); + assertNotEquals(enumeration, null); + assertEquals(enumeration, enumeration); + assertNotEquals(enumeration, "string"); + + Enumeration enumerationOtherPackage = enumerationBuilderOtherPackage.toInstance(enumerationBuilderOtherPackage); + assertNotEquals(enumeration, enumerationOtherPackage); + + Enumeration enumerationOtherName = enumerationBuilderOtherName.toInstance(enumerationBuilderOtherName); + assertNotEquals(enumeration, enumerationOtherName); + + enumerationBuilderSame.addValue(valueName, value, valueDescription); + Enumeration enumerationSame = enumerationBuilderSame.toInstance(enumerationBuilderSame); + assertEquals(enumeration, enumerationSame); + + EnumerationBuilderImpl enumerationBuilderSame1 = new EnumerationBuilderImpl(packageName, name); + Enumeration enumerationSame1 = enumerationBuilderSame1.toInstance(enumerationBuilderSame1); + enumerationBuilderSame1.addValue(valueName, 14, valueDescription); + assertNotEquals(enumeration, enumerationSame1); + } + + @Test + public void testEnumerationToString() { + String formattedString = + "public enum " + name + " {\n" + + "\t TestValue " + "(12 );\n" + + "}"; + String s = "Enumeration [packageName="+packageName+", definingType="+packageName+"."+name+", name="+name+ + ", values=[EnumPair [name=TestValue, value=12]]]"; + + assertEquals(s, enumeration.toString()); + assertEquals(formattedString, enumeration.toFormattedString()); + + assertEquals("EnumerationBuilderImpl " + + "[packageName=org.opendaylight.test, name=TestName, " + + "values=[EnumPair [name=TestValue, value=12]]]", + enumerationBuilder.toString()); + } + + @Test + public void testUpdateEnumPairsFromEnumTypeDef() { + EnumTypeDefinition.EnumPair enumPair = EnumPairImpl.create(qName); + EnumTypeDefinition enumTypeDefinition = EnumerationType.create(SchemaPath.SAME, + Arrays.asList(enumPair), Optional.of(enumPair)); + enumerationBuilder.updateEnumPairsFromEnumTypeDef(enumTypeDefinition); + } + + /** + * Internal implementation of EnumPair. + */ + private static class EnumPairImpl implements EnumTypeDefinition.EnumPair { + private QName qname; + private SchemaPath path; + private String description; + private String reference; + private Status status; + private final List unknownNodes = Collections.emptyList(); + private String name; + private Integer value; + + private EnumPairImpl(QName qName) { + qname = qName; + path = SchemaPath.SAME; + description = "Some Other Description"; + reference = "Some other reference"; + status = Status.CURRENT; + name = "SomeName"; + value = 45; + } + + public static EnumPairImpl create(QName qName) { + return new EnumPairImpl(qName); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public String getReference() { + return reference; + } + + @Override + public Status getStatus() { + return status; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public String getName() { + return name; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + result = prime * result + ((unknownNodes == null) ? 0 : unknownNodes.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((value == null) ? 0 : value.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + EnumPairImpl other = (EnumPairImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + if (unknownNodes == null) { + if (other.unknownNodes != null) { + return false; + } + } else if (!unknownNodes.equals(other.unknownNodes)) { + return false; + } + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + if (value == null) { + if (other.value != null) { + return false; + } + } else if (!value.equals(other.value)) { + return false; + } + return true; + } + + @Override + public String toString() { + return EnumTypeDefinition.EnumPair.class.getSimpleName() + "[name=" + name + ", value=" + value + "]"; + } + } +} \ No newline at end of file diff --git a/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedPropertyBuilderImplTest.java b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedPropertyBuilderImplTest.java new file mode 100644 index 0000000000..0bcd513de6 --- /dev/null +++ b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedPropertyBuilderImplTest.java @@ -0,0 +1,75 @@ +/** + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + */ +package org.opendaylight.yangtools.binding.generator.util.generated.type.builder; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.opendaylight.yangtools.binding.generator.util.Types; +import org.opendaylight.yangtools.sal.binding.model.api.AccessModifier; +import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty; +import org.opendaylight.yangtools.sal.binding.model.api.Type; + +public class GeneratedPropertyBuilderImplTest { + + @Test + public void generatedPropertyBuilderImplTest() { + GeneratedPropertyBuilderImpl generatedPropertyBuilderImpl = new GeneratedPropertyBuilderImpl("myPropertyName"); + generatedPropertyBuilderImpl.setValue("myValue"); + generatedPropertyBuilderImpl.setReadOnly(false); + generatedPropertyBuilderImpl.setStatic(true); + generatedPropertyBuilderImpl.setComment(null); + generatedPropertyBuilderImpl.setFinal(true); + generatedPropertyBuilderImpl.setAccessModifier(AccessModifier.PUBLIC); + generatedPropertyBuilderImpl.setReturnType(Types.BOOLEAN); + + assertEquals( + "GeneratedPropertyImpl [name=myPropertyName, annotations=[], comment=null, returnType=Type (java.lang.Boolean), isFinal=true, isReadOnly=false, modifier=PUBLIC]", + generatedPropertyBuilderImpl.toString()); + + GeneratedProperty instance = generatedPropertyBuilderImpl.toInstance(null); + + assertNotNull(instance); + + assertTrue(instance.isFinal()); + assertTrue(instance.isStatic()); + assertFalse(instance.isReadOnly()); + assertEquals("myValue", instance.getValue()); + assertEquals(null, instance.getComment()); + assertEquals(AccessModifier.PUBLIC, instance.getAccessModifier()); + assertEquals(Types.BOOLEAN, instance.getReturnType()); + + } + + @Test + public void generatedPropertyBuilderImplEqualsAndHashCodeTest() { + GeneratedPropertyBuilderImpl generatedPropertyBuilderImpl = new GeneratedPropertyBuilderImpl("myPropertyName"); + GeneratedPropertyBuilderImpl generatedPropertyBuilderImpl2 = new GeneratedPropertyBuilderImpl("myPropertyName"); + GeneratedPropertyBuilderImpl generatedPropertyBuilderImpl3 = new GeneratedPropertyBuilderImpl("myPropertyName3"); + GeneratedPropertyBuilderImpl generatedPropertyBuilderImpl4 = new GeneratedPropertyBuilderImpl("myPropertyName"); + + assertNotNull(generatedPropertyBuilderImpl); + assertNotNull(generatedPropertyBuilderImpl2); + assertNotNull(generatedPropertyBuilderImpl3); + assertNotNull(generatedPropertyBuilderImpl4); + + generatedPropertyBuilderImpl.setReturnType(Types.BOOLEAN); + generatedPropertyBuilderImpl2.setReturnType(Types.BOOLEAN); + generatedPropertyBuilderImpl3.setReturnType(Types.BOOLEAN); + generatedPropertyBuilderImpl4.setReturnType(Types.STRING); + + assertFalse(generatedPropertyBuilderImpl.equals(null)); + assertFalse(generatedPropertyBuilderImpl.equals(new Object())); + assertTrue(generatedPropertyBuilderImpl.equals(generatedPropertyBuilderImpl)); + assertTrue(generatedPropertyBuilderImpl.equals(generatedPropertyBuilderImpl2)); + assertFalse(generatedPropertyBuilderImpl.equals(generatedPropertyBuilderImpl3)); + assertFalse(generatedPropertyBuilderImpl.equals(generatedPropertyBuilderImpl4)); + + assertTrue(generatedPropertyBuilderImpl.hashCode() == generatedPropertyBuilderImpl.hashCode()); + assertTrue(generatedPropertyBuilderImpl.hashCode() == generatedPropertyBuilderImpl2.hashCode()); + assertFalse(generatedPropertyBuilderImpl.hashCode() == generatedPropertyBuilderImpl3.hashCode()); + assertFalse(generatedPropertyBuilderImpl.hashCode() == generatedPropertyBuilderImpl4.hashCode()); + } + +} diff --git a/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedPropertyImplTest.java b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedPropertyImplTest.java new file mode 100644 index 0000000000..01572ab12c --- /dev/null +++ b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedPropertyImplTest.java @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + */ +package org.opendaylight.yangtools.binding.generator.util.generated.type.builder; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.opendaylight.yangtools.binding.generator.util.Types; +import org.opendaylight.yangtools.sal.binding.model.api.AccessModifier; +import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty; + +public class GeneratedPropertyImplTest { + + @Test + public void generatedPropertyImplTest() { + GeneratedPropertyBuilderImpl generatedPropertyBuilderImpl = new GeneratedPropertyBuilderImpl("myPropertyName"); + generatedPropertyBuilderImpl.setValue("myValue"); + generatedPropertyBuilderImpl.setReadOnly(false); + generatedPropertyBuilderImpl.setStatic(true); + generatedPropertyBuilderImpl.setComment("myComment"); + generatedPropertyBuilderImpl.setFinal(true); + generatedPropertyBuilderImpl.setAccessModifier(AccessModifier.PUBLIC); + generatedPropertyBuilderImpl.setReturnType(Types.BOOLEAN); + + GeneratedProperty instance = generatedPropertyBuilderImpl.toInstance(new GeneratedTypeBuilderImpl("my.package", + "myTypeName").toInstance()); + + assertNotNull(instance); + + assertTrue(instance.isFinal()); + assertTrue(instance.isStatic()); + assertFalse(instance.isReadOnly()); + assertEquals("myValue", instance.getValue()); + assertEquals("myComment", instance.getComment()); + assertEquals(AccessModifier.PUBLIC, instance.getAccessModifier()); + assertEquals(Types.BOOLEAN, instance.getReturnType()); + + assertEquals( + "GeneratedPropertyImpl [name=myPropertyName, annotations=[], comment=myComment, parent=my.package.myTypeName, returnType=Type (java.lang.Boolean), isFinal=true, isReadOnly=false, modifier=PUBLIC]", + instance.toString()); + + } + + @Test + public void generatedPropertyImplEqualsAndHashCodeTest() { + GeneratedPropertyBuilderImpl generatedPropertyBuilderImpl = new GeneratedPropertyBuilderImpl("myPropertyName"); + GeneratedPropertyBuilderImpl generatedPropertyBuilderImpl2 = new GeneratedPropertyBuilderImpl("myPropertyName"); + GeneratedPropertyBuilderImpl generatedPropertyBuilderImpl3 = new GeneratedPropertyBuilderImpl("myPropertyName3"); + GeneratedPropertyBuilderImpl generatedPropertyBuilderImpl4 = new GeneratedPropertyBuilderImpl("myPropertyName"); + + generatedPropertyBuilderImpl.setReturnType(Types.BOOLEAN); + generatedPropertyBuilderImpl2.setReturnType(Types.BOOLEAN); + generatedPropertyBuilderImpl3.setReturnType(Types.BOOLEAN); + generatedPropertyBuilderImpl4.setReturnType(Types.STRING); + + GeneratedProperty property = generatedPropertyBuilderImpl.toInstance(null); + GeneratedProperty property2 = generatedPropertyBuilderImpl2.toInstance(null); + GeneratedProperty property3 = generatedPropertyBuilderImpl3.toInstance(null); + GeneratedProperty property4 = generatedPropertyBuilderImpl4.toInstance(null); + + assertNotNull(property); + assertNotNull(property2); + assertNotNull(property3); + assertNotNull(property4); + + assertFalse(property.equals(null)); + assertFalse(property.equals(new Object())); + assertTrue(property.equals(property)); + assertTrue(property.equals(property2)); + assertFalse(property.equals(property3)); + assertFalse(property.equals(property4)); + + assertTrue(property.hashCode() == property.hashCode()); + assertTrue(property.hashCode() == property2.hashCode()); + assertFalse(property.hashCode() == property3.hashCode()); + assertFalse(property.hashCode() == property4.hashCode()); + } + +} diff --git a/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedTypeBuilderTest.java b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedTypeBuilderTest.java new file mode 100644 index 0000000000..36e329c951 --- /dev/null +++ b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedTypeBuilderTest.java @@ -0,0 +1,306 @@ +/** + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + */ +package org.opendaylight.yangtools.binding.generator.util.generated.type.builder; + +import static org.junit.Assert.*; + +import java.io.Serializable; +import java.util.List; + +import org.junit.Test; +import org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil; +import org.opendaylight.yangtools.binding.generator.util.Types; +import org.opendaylight.yangtools.sal.binding.model.api.Constant; +import org.opendaylight.yangtools.sal.binding.model.api.Enumeration; +import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty; +import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType; +import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature; +import org.opendaylight.yangtools.sal.binding.model.api.Type; +import org.opendaylight.yangtools.sal.binding.model.api.type.builder.EnumBuilder; +import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedPropertyBuilder; +import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTOBuilder; +import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTypeBuilder; +import org.opendaylight.yangtools.sal.binding.model.api.type.builder.MethodSignatureBuilder; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; + +public class GeneratedTypeBuilderTest { + + @Test + public void addConstantTest() { + GeneratedTypeBuilder generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + // assertNotNull(generatedTypeBuilder.addComment("My comment ...")); + + Constant constant = generatedTypeBuilder.addConstant(Types.typeForClass(String.class), "myConstant", + "myConstantValue"); + // Constant constantx = + // generatedTypeBuilder.addConstant(Types.typeForClass(String.class), + // "myConstant", "myConstantValue"); + Constant constant2 = generatedTypeBuilder.addConstant( + Types.primitiveType("int", BindingGeneratorUtil.getRestrictions(null)), "myIntConstant", 1); + + Constant constant3 = new ConstantImpl(generatedTypeBuilder, Types.typeForClass(String.class), "myConstant", + "myConstantValue"); + Constant constant4 = new ConstantImpl(generatedTypeBuilder, Types.typeForClass(String.class), "myConstant2", + "myConstantValue"); + Constant constant5 = new ConstantImpl(generatedTypeBuilder, Types.typeForClass(String.class), "myConstant", + "myConstantValue2"); + + assertNotNull(constant); + assertNotNull(constant2); + assertNotNull(constant3); + assertNotNull(constant4); + assertNotNull(constant5); + // assertNotNull(constantx); + // assertTrue(constant!=constantx); + + assertFalse(constant.equals(null)); + assertFalse(constant.equals(new Object())); + assertTrue(constant.equals(constant)); + assertTrue(constant.equals(constant3)); + assertFalse(constant.equals(constant2)); + assertFalse(constant.equals(constant4)); + assertFalse(constant.equals(constant5)); + + assertTrue(constant.hashCode() == constant.hashCode()); + assertTrue(constant.hashCode() == constant3.hashCode()); + assertFalse(constant.hashCode() == constant2.hashCode()); + assertFalse(constant.hashCode() == constant4.hashCode()); + assertTrue(constant.hashCode() == constant5.hashCode()); + + assertEquals( + "Constant [type=Type (java.lang.String), name=myConstant, value=myConstantValue, definingType=my.package.MyName]", + constant.toString()); + + assertEquals("Type (java.lang.String) myConstant myConstantValue", constant.toFormattedString()); + + GeneratedType instance = generatedTypeBuilder.toInstance(); + List constantDefinitions = instance.getConstantDefinitions(); + assertNotNull(constantDefinitions); + assertEquals(2, constantDefinitions.size()); + assertTrue(constantDefinitions.contains(constant)); + assertTrue(constantDefinitions.contains(constant2)); + assertTrue(constantDefinitions.contains(constant3)); + assertFalse(constantDefinitions.contains(constant4)); + assertFalse(constantDefinitions.contains(constant5)); + + assertEquals("myConstant", constant.getName()); + assertEquals("myConstantValue", constant.getValue()); + assertEquals(Types.typeForClass(String.class), constant.getType()); + assertEquals(generatedTypeBuilder, constant.getDefiningType()); + } + + @Test(expected = IllegalArgumentException.class) + public void addConstantIllegalArgumentTest() { + GeneratedTypeBuilder generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + Constant constant = generatedTypeBuilder.addConstant(Types.typeForClass(String.class), null, "myConstantValue"); + } + + @Test(expected = IllegalArgumentException.class) + public void addConstantIllegalArgumentTest2() { + GeneratedTypeBuilder generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + Constant constant = generatedTypeBuilder.addConstant(null, "myConstantName", "myConstantValue"); + } + + @Test + public void generatedTypeBuilderEqualsAndHashCodeTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + GeneratedTypeBuilderImpl generatedTypeBuilder2 = new GeneratedTypeBuilderImpl("my.package", "MyName"); + GeneratedTypeBuilderImpl generatedTypeBuilder3 = new GeneratedTypeBuilderImpl("my.package", "MyName2"); + GeneratedTypeBuilderImpl generatedTypeBuilder4 = new GeneratedTypeBuilderImpl("my.package2", "MyName"); + + assertFalse(generatedTypeBuilder.equals(null)); + assertFalse(generatedTypeBuilder.equals(new Object())); + assertTrue(generatedTypeBuilder.equals(generatedTypeBuilder)); + assertTrue(generatedTypeBuilder.equals(generatedTypeBuilder2)); + + assertTrue(generatedTypeBuilder.hashCode() == generatedTypeBuilder.hashCode()); + assertTrue(generatedTypeBuilder.hashCode() == generatedTypeBuilder2.hashCode()); + assertFalse(generatedTypeBuilder.hashCode() == generatedTypeBuilder3.hashCode()); + assertFalse(generatedTypeBuilder.hashCode() == generatedTypeBuilder4.hashCode()); + + } + + @Test + public void addPropertyTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + GeneratedPropertyBuilder propertyBuilder = generatedTypeBuilder.addProperty("myProperty"); + GeneratedPropertyBuilder propertyBuilder2 = generatedTypeBuilder.addProperty("myProperty2"); + // GeneratedPropertyBuilder propertyBuilderNull = + // generatedTypeBuilder.addProperty(null); + + assertNotNull(propertyBuilder); + assertNotNull(propertyBuilder2); + // assertNotNull(propertyBuilderNull); + + assertTrue(generatedTypeBuilder.containsProperty("myProperty")); + assertTrue(generatedTypeBuilder.containsProperty("myProperty2")); + assertFalse(generatedTypeBuilder.containsProperty("myProperty3")); + + GeneratedType instance = generatedTypeBuilder.toInstance(); + List properties = instance.getProperties(); + + assertEquals(2, properties.size()); + + assertTrue(properties.contains(propertyBuilder.toInstance(instance))); + assertTrue(properties.contains(propertyBuilder2.toInstance(instance))); + // assertTrue(properties.contains(propertyBuilderNull.toInstance(instance))); + assertFalse(properties.contains(new GeneratedPropertyBuilderImpl("myProperty3").toInstance(instance))); + + } + + @Test(expected = IllegalArgumentException.class) + public void addMethodIllegalArgumentTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addMethod(null); + } + + @Test + public void addMethodTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + MethodSignatureBuilder methodBuilder = generatedTypeBuilder.addMethod("myMethodName"); + MethodSignatureBuilder methodBuilder2 = generatedTypeBuilder.addMethod("myMethodName2"); + + assertNotNull(methodBuilder); + assertNotNull(methodBuilder2); + + assertTrue(generatedTypeBuilder.containsMethod("myMethodName")); + assertTrue(generatedTypeBuilder.containsMethod("myMethodName2")); + assertFalse(generatedTypeBuilder.containsMethod("myMethodName3")); + + GeneratedType instance = generatedTypeBuilder.toInstance(); + List methodDefinitions = instance.getMethodDefinitions(); + + assertEquals(2, methodDefinitions.size()); + + assertTrue(methodDefinitions.contains(methodBuilder.toInstance(instance))); + assertTrue(methodDefinitions.contains(methodBuilder2.toInstance(instance))); + assertFalse(methodDefinitions.contains(new MethodSignatureBuilderImpl("myMethodName3").toInstance(instance))); + + } + + @Test(expected = IllegalArgumentException.class) + public void addEnumerationIllegalArgumentTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addEnumeration(null); + } + + @Test + public void addEnumerationTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + EnumBuilder enumBuilder = generatedTypeBuilder.addEnumeration("myEnumName"); + EnumBuilder enumBuilder2 = generatedTypeBuilder.addEnumeration("myEnumName2"); + + assertNotNull(enumBuilder); + assertNotNull(enumBuilder2); + + GeneratedType instance = generatedTypeBuilder.toInstance(); + List enumerations = instance.getEnumerations(); + + assertEquals(2, enumerations.size()); + + assertTrue(enumerations.contains(enumBuilder.toInstance(instance))); + assertTrue(enumerations.contains(enumBuilder2.toInstance(instance))); + assertFalse(enumerations.contains(new EnumerationBuilderImpl("my.package", "myEnumName3").toInstance(instance))); + + } + + @Test(expected = IllegalArgumentException.class) + public void addImplementsTypeIllegalArgumentTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addImplementsType(null); + } + + @Test + public void addImplementsTypeTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + assertEquals(generatedTypeBuilder, + generatedTypeBuilder.addImplementsType(Types.typeForClass(Serializable.class))); + assertEquals(generatedTypeBuilder, generatedTypeBuilder.addImplementsType(Types.typeForClass(Runnable.class))); + + GeneratedType instance = generatedTypeBuilder.toInstance(); + List implementTypes = instance.getImplements(); + + assertEquals(2, implementTypes.size()); + + assertTrue(implementTypes.contains(Types.typeForClass(Serializable.class))); + assertTrue(implementTypes.contains(Types.typeForClass(Runnable.class))); + assertFalse(implementTypes.contains(Types.typeForClass(Throwable.class))); + + } + + @Test(expected = IllegalArgumentException.class) + public void addEnclosingTransferObjectIllegalArgumentTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addEnclosingTransferObject((String) null); + } + + @Test(expected = IllegalArgumentException.class) + public void addEnclosingTransferObjectIllegalArgumentTest2() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.addEnclosingTransferObject((GeneratedTOBuilder) null); + } + + @Test + public void addEnclosingTransferObjectTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + GeneratedTOBuilder enclosingTransferObject = generatedTypeBuilder.addEnclosingTransferObject("myTOName"); + GeneratedTOBuilder enclosingTransferObject2 = generatedTypeBuilder.addEnclosingTransferObject("myTOName2"); + assertEquals(generatedTypeBuilder, generatedTypeBuilder.addEnclosingTransferObject(new GeneratedTOBuilderImpl( + generatedTypeBuilder.getFullyQualifiedName(), "myTOName3"))); + + assertNotNull(enclosingTransferObject); + assertNotNull(enclosingTransferObject2); + + GeneratedType instance = generatedTypeBuilder.toInstance(); + List enclosedTypes = instance.getEnclosedTypes(); + + assertEquals(3, enclosedTypes.size()); + + assertTrue(enclosedTypes.contains(enclosingTransferObject.toInstance())); + assertTrue(enclosedTypes.contains(enclosingTransferObject2.toInstance())); + assertTrue(enclosedTypes.contains(new GeneratedTOBuilderImpl(generatedTypeBuilder.getFullyQualifiedName(), + "myTOName3").toInstance())); + assertFalse(enclosedTypes.contains(new GeneratedTOBuilderImpl(generatedTypeBuilder.getFullyQualifiedName(), + "myTOName4").toInstance())); + + } + + @Test + public void generatedTypeTest() { + GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName"); + + generatedTypeBuilder.setDescription("My description ..."); + generatedTypeBuilder.setModuleName("myModuleName"); + generatedTypeBuilder.setReference("myReference"); + generatedTypeBuilder.setSchemaPath(SchemaPath.create(true, QName.create("/path")).getPathFromRoot()); + assertNotNull(generatedTypeBuilder.addComment("My comment..")); + + assertEquals( + "GeneratedTransferObject [packageName=my.package, name=MyName, comment=My comment.., annotations=[], implements=[], enclosedTypes=[], constants=[], enumerations=[], properties=, methods=[]]", + generatedTypeBuilder.toString()); + + GeneratedType instance = generatedTypeBuilder.toInstance(); + + assertEquals("My description ...", instance.getDescription()); + assertEquals("myModuleName", instance.getModuleName()); + assertEquals("myReference", instance.getReference()); + assertEquals(SchemaPath.create(true, QName.create("/path")).getPathFromRoot(), instance.getSchemaPath()); + assertEquals("My comment..", instance.getComment()); + } + +} diff --git a/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/MethodSignatureBuilderTest.java b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/MethodSignatureBuilderTest.java new file mode 100644 index 0000000000..433e94ffda --- /dev/null +++ b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/MethodSignatureBuilderTest.java @@ -0,0 +1,72 @@ +/* + * 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.binding.generator.util.generated.type.builder; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.yangtools.binding.generator.util.Types; +import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature; +import org.opendaylight.yangtools.sal.binding.model.api.Type; +import org.opendaylight.yangtools.sal.binding.model.api.type.builder.MethodSignatureBuilder; + +public class MethodSignatureBuilderTest { + + MethodSignatureBuilder builder1, builder2, builder3, builder4; + int hash1, hash2, hash3; + + @Before + public void setup() { + builder1 = new MethodSignatureBuilderImpl("methodSignature"); + builder2 = new MethodSignatureBuilderImpl("otherMethodSignature"); + builder2.setReturnType(Types.STRING); + builder3 = new MethodSignatureBuilderImpl(null); + builder3.setAbstract(false); + builder4 = new MethodSignatureBuilderImpl("otherMethodSignature"); + builder4.setReturnType(Types.BOOLEAN); + + hash1 = builder1.hashCode(); + hash2 = builder2.hashCode(); + hash3 = builder3.hashCode(); + } + + @Test + public void testAddParameter() { + Type type = Types.STRING; + String name = "customParam"; + builder1.addParameter(type, name); + Type methodType = Types.voidType(); + MethodSignature signature = builder1.toInstance(methodType); + assertNotNull(signature); + } + + @Test + public void testToString() { + String toString = builder1.toString(); + assertTrue(toString.contains("MethodSignatureBuilderImpl")); + } + + @Test + public void testHashCode() { + assertEquals(hash1, hash1); + } + + @Test + public void testEquals() { + assertTrue(builder1.equals(builder1)); + assertFalse(builder1.equals(builder2)); + assertFalse(builder1.equals(null)); + assertFalse(builder1.equals("string")); + assertFalse(builder3.equals(builder2)); + assertFalse(builder4.equals(builder2)); + } +} diff --git a/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/MethodSignatureImplTest.java b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/MethodSignatureImplTest.java new file mode 100644 index 0000000000..f7ef7b18c1 --- /dev/null +++ b/code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/MethodSignatureImplTest.java @@ -0,0 +1,85 @@ +/* + * 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.binding.generator.util.generated.type.builder; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.yangtools.binding.generator.util.Types; +import org.opendaylight.yangtools.sal.binding.model.api.AccessModifier; +import org.opendaylight.yangtools.sal.binding.model.api.AnnotationType; +import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature.Parameter; +import org.opendaylight.yangtools.sal.binding.model.api.Type; + +public class MethodSignatureImplTest { + + MethodSignatureImpl signature1, signature2, signature3, signature4; + int hash1, hash4; + + @Before + public void setup() { + Type type = Types.STRING; + String name = "customMethod"; + List annotations = new ArrayList<>(); + String comment = "This is just a comment"; + AccessModifier accessModifier = AccessModifier.PUBLIC; + Type returnType = Types.STRING; + List params = new ArrayList<>(); + boolean isFinal = false; + boolean isAbstract = false; + boolean isStatic = false; + + signature1 = new MethodSignatureImpl(type, name, annotations, comment, + accessModifier, returnType, params, isFinal, isAbstract, + isStatic); + signature2 = new MethodSignatureImpl(type, name, annotations, comment, + accessModifier, returnType, params, isFinal, isAbstract, + isStatic); + returnType = null; + signature3 = new MethodSignatureImpl(type, name, annotations, comment, + accessModifier, returnType, params, isFinal, isAbstract, + isStatic); + name = null; + signature4 = new MethodSignatureImpl(type, name, annotations, comment, + accessModifier, returnType, params, isFinal, isAbstract, + isStatic); + + hash1 = signature1.hashCode(); + hash4 = signature4.hashCode(); + } + + @Test + public void testToString() { + String toString = signature1.toString(); + assertTrue(toString.contains("MethodSignatureImpl")); + } + + @Test + public void testHashCode() { + assertEquals(hash1, hash1); + assertTrue(!(hash1 == hash4)); + } + + @Test + public void testEquals() { + assertTrue(signature1.equals(signature1)); + assertTrue(signature1.equals(signature2)); + assertFalse(signature1.equals(signature3)); + assertFalse(signature3.equals(signature1)); + assertFalse(signature1.equals(null)); + assertFalse(signature1.equals(signature4)); + assertFalse(signature4.equals(signature1)); + assertFalse(signature1.equals(Types.STRING)); + } + +} diff --git a/code-generator/binding-type-provider/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/BaseYangTypes.java b/code-generator/binding-type-provider/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/BaseYangTypes.java index 86b40c027e..987850821c 100644 --- a/code-generator/binding-type-provider/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/BaseYangTypes.java +++ b/code-generator/binding-type-provider/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/BaseYangTypes.java @@ -144,7 +144,7 @@ public final class BaseYangTypes { * @return java Type representation of type */ @Override - public Type javaTypeForYangType(String type) { + public Type javaTypeForYangType(final String type) { return typeMap.get(type); } @@ -159,7 +159,7 @@ public final class BaseYangTypes { * returned. */ @Override - public Type javaTypeForSchemaDefinitionType(TypeDefinition type, SchemaNode parentNode) { + public Type javaTypeForSchemaDefinitionType(final TypeDefinition type, final SchemaNode parentNode) { if (type != null) { return typeMap.get(type.getQName().getLocalName()); } @@ -168,12 +168,12 @@ public final class BaseYangTypes { } @Override - public Type javaTypeForSchemaDefinitionType(TypeDefinition type, SchemaNode parentNode, - Restrictions restrictions) { + public Type javaTypeForSchemaDefinitionType(final TypeDefinition type, final SchemaNode parentNode, + final Restrictions restrictions) { String typeName = type.getQName().getLocalName(); switch (typeName) { case "binary": - return Types.primitiveType("byte[]", restrictions); + return restrictions == null ? Types.BYTE_ARRAY : Types.primitiveType("byte[]", restrictions); case "decimal64": return Types.typeForClass(BigDecimal.class, restrictions); case "enumeration": @@ -204,17 +204,17 @@ public final class BaseYangTypes { } @Override - public String getTypeDefaultConstruction(LeafSchemaNode node) { + public String getTypeDefaultConstruction(final LeafSchemaNode node) { return null; } @Override - public String getConstructorPropertyName(SchemaNode node) { + public String getConstructorPropertyName(final SchemaNode node) { return null; } @Override - public String getParamNameFromType(TypeDefinition type) { + public String getParamNameFromType(final TypeDefinition type) { return "_" + BindingGeneratorUtil.parseToValidParamName(type.getQName().getLocalName()); } }; diff --git a/code-generator/binding-type-provider/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImpl.java b/code-generator/binding-type-provider/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImpl.java index 8f57b987ea..dd3038baca 100644 --- a/code-generator/binding-type-provider/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImpl.java +++ b/code-generator/binding-type-provider/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImpl.java @@ -13,7 +13,6 @@ import static org.opendaylight.yangtools.binding.generator.util.BindingGenerator import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findDataSchemaNode; import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findDataSchemaNodeForRelativeXPath; import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findParentModule; - import com.google.common.base.Preconditions; import com.google.common.collect.Sets; import com.google.common.io.BaseEncoding; @@ -220,7 +219,7 @@ public final class TypeProviderImpl implements TypeProvider { return returnType; } - private GeneratedTransferObject shadedTOWithRestrictions(GeneratedTransferObject gto, Restrictions r) { + private GeneratedTransferObject shadedTOWithRestrictions(final GeneratedTransferObject gto, final Restrictions r) { GeneratedTOBuilder gtob = new GeneratedTOBuilderImpl(gto.getPackageName(), gto.getName()); GeneratedTransferObject parent = gto.getSuperType(); if (parent != null) { @@ -805,7 +804,7 @@ public final class TypeProviderImpl implements TypeProvider { } final GeneratedPropertyBuilder genPropBuilder = resultTOBuilder.addProperty("value"); - genPropBuilder.setReturnType(Types.primitiveType("char[]", null)); + genPropBuilder.setReturnType(Types.CHAR_ARRAY); resultTOBuilder.addEqualsIdentity(genPropBuilder); resultTOBuilder.addHashIdentity(genPropBuilder); resultTOBuilder.addToStringProperty(genPropBuilder); diff --git a/code-generator/maven-sal-api-gen-plugin/pom.xml b/code-generator/maven-sal-api-gen-plugin/pom.xml index f8ccd295a2..ec86246566 100644 --- a/code-generator/maven-sal-api-gen-plugin/pom.xml +++ b/code-generator/maven-sal-api-gen-plugin/pom.xml @@ -53,6 +53,13 @@ plexus-slf4j-logging + + org.sonatype.sisu + sisu-guava + 0.11.1 + runtime + + junit junit diff --git a/code-generator/pom.xml b/code-generator/pom.xml index c7f3dfd306..b0538883de 100644 --- a/code-generator/pom.xml +++ b/code-generator/pom.xml @@ -34,116 +34,6 @@ binding-data-codec - - - - - org.javassist - javassist - ${javassist.version} - - - - - org.opendaylight.yangtools - binding-test-model - ${project.version} - - - org.opendaylight.yangtools - binding-model-api - ${project.version} - - - org.opendaylight.yangtools - binding-generator-api - ${project.version} - - - org.opendaylight.yangtools - binding-generator-spi - ${project.version} - - - org.opendaylight.yangtools - binding-generator-util - ${project.version} - - - org.opendaylight.yangtools - binding-generator-impl - ${project.version} - - - org.opendaylight.yangtools - binding-java-api-generator - ${project.version} - - - org.opendaylight.yangtools - maven-sal-api-gen-plugin - ${project.version} - - - - - org.opendaylight.yangtools - yang-common - ${project.version} - - - org.opendaylight.yangtools - yang-data-api - ${project.version} - - - org.opendaylight.yangtools - yang-data-impl - ${project.version} - - - org.opendaylight.yangtools - yang-data-util - ${project.version} - - - org.opendaylight.yangtools - yang-model-api - ${project.version} - - - org.opendaylight.yangtools - yang-model-util - ${project.version} - - - org.opendaylight.yangtools - yang-binding - ${project.version} - - - org.opendaylight.yangtools - yang-parser-api - ${project.version} - - - org.opendaylight.yangtools - yang-parser-impl - ${project.version} - - - org.opendaylight.yangtools - yang-maven-plugin - ${project.version} - - - org.opendaylight.yangtools - yang-maven-plugin-spi - ${project.version} - - - - diff --git a/common/artifacts/pom.xml b/common/artifacts/pom.xml new file mode 100644 index 0000000000..a58b447674 --- /dev/null +++ b/common/artifacts/pom.xml @@ -0,0 +1,333 @@ + + + + + + 4.0.0 + org.opendaylight.yangtools + yangtools-artifacts + 0.7.0-SNAPSHOT + pom + + + 3.0.4 + + + + + 2013.10.21.7-SNAPSHOT + + + + + + org.opendaylight.yangtools + yang-data-util + ${project.version} + + + org.opendaylight.yangtools + maven-sal-api-gen-plugin + ${project.version} + + + org.opendaylight.yangtools.thirdparty + antlr4-runtime-osgi-nohead + 4.0 + + + org.opendaylight.yangtools.thirdparty + xtend-lib-osgi + 2.4.3 + + + org.opendaylight.yangtools + concepts + ${project.version} + + + org.opendaylight.yangtools + object-cache-api + ${project.version} + + + org.opendaylight.yangtools + object-cache-guava + ${project.version} + + + org.opendaylight.yangtools + object-cache-noop + ${project.version} + + + org.opendaylight.yangtools + binding-model-api + ${project.version} + + + org.opendaylight.yangtools + binding-generator-api + ${project.version} + + + org.opendaylight.yangtools + binding-generator-spi + ${project.version} + + + org.opendaylight.yangtools + binding-generator-util + ${project.version} + + + org.opendaylight.yangtools + binding-generator-impl + ${project.version} + + + org.opendaylight.yangtools + binding-java-api-generator + ${project.version} + + + org.opendaylight.yangtools + yang-common + ${project.version} + + + org.opendaylight.yangtools + yang-data-api + ${project.version} + + + org.opendaylight.yangtools + yang-data-impl + ${project.version} + + + org.opendaylight.yangtools + yang-data-codec-gson + ${project.version} + + + org.opendaylight.yangtools + yang-model-api + ${project.version} + + + org.opendaylight.yangtools + yang-model-util + ${project.version} + + + org.opendaylight.yangtools + yang-binding + ${project.version} + + + org.opendaylight.yangtools + yang-parser-api + ${project.version} + + + org.opendaylight.yangtools + yang-parser-impl + ${project.version} + + + org.opendaylight.yangtools + yang-maven-plugin + ${project.version} + + + org.opendaylight.yangtools + yang-maven-plugin-spi + ${project.version} + + + org.opendaylight.yangtools.model + ietf-inet-types + 2010.09.24.7-SNAPSHOT + + + org.opendaylight.yangtools.model + ietf-yang-types + 2010.09.24.7-SNAPSHOT + + + org.opendaylight.yangtools.model + ietf-yang-types-20130715 + 2013.07.15.7-SNAPSHOT + + + org.opendaylight.yangtools.model + ietf-restconf + 2013.10.19.7-SNAPSHOT + + + org.opendaylight.yangtools.model + ietf-ted + ${ietf.topology.version} + + + org.opendaylight.yangtools.model + ietf-topology + ${ietf.topology.version} + + + org.opendaylight.yangtools.model + ietf-topology-isis + ${ietf.topology.version} + + + org.opendaylight.yangtools.model + ietf-topology-l3-unicast-igp + ${ietf.topology.version} + + + org.opendaylight.yangtools.model + ietf-topology-ospf + ${ietf.topology.version} + + + org.opendaylight.yangtools.model + ietf-topology-l3-unicast + ${ietf.topology.version} + + + org.opendaylight.yangtools + yang-data-composite-node + ${project.version} + + + org.opendaylight.yangtools + restconf-client-api + ${project.version} + + + org.opendaylight.yangtools + restconf-common + ${project.version} + + + org.opendaylight.yangtools + restconf-util + ${project.version} + + + org.opendaylight.yangtools + restconf-test-service + ${project.version} + + + org.opendaylight.yangtools + restconf-client-impl + ${project.version} + + + org.opendaylight.yangtools + restconf-jaxrs-api + ${project.version} + + + + org.opendaylight.yangtools + bug527-test-model + ${project.version} + test + + + org.opendaylight.yangtools + bug1196-test-model + ${project.version} + test + + + + org.opendaylight.yangtools + websocket-client + ${project.version} + + + + ${project.groupId} + object-cache-api + ${project.version} + + + ${project.groupId} + object-cache-guava + ${project.version} + + + ${project.groupId} + object-cache-noop + ${project.version} + + + ${project.groupId} + util + ${project.version} + + + org.opendaylight.yangtools.model + opendaylight-l2-types + 2013.08.27.7-SNAPSHOT + + + org.opendaylight.yangtools.model + yang-ext + 2013.09.07.7-SNAPSHOT + + + org.opendaylight.yangtools + binding-type-provider + ${project.version} + + + org.opendaylight.yangtools + yang-data-operations + ${project.version} + + + org.opendaylight.yangtools + binding-data-codec + ${project.version} + + + + org.opendaylight.yangtools + features-yangtools + features + xml + ${project.version} + + + + org.opendaylight.yangtools + mockito-configuration + ${project.version} + test + + + org.opendaylight.yangtools + binding-test-model + ${project.version} + test + + + org.opendaylight.yangtools + features-test + ${project.version} + test + + + + diff --git a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Builder.java b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Builder.java index affc25b771..0484c4831e 100644 --- a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Builder.java +++ b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Builder.java @@ -12,7 +12,7 @@ package org.opendaylight.yangtools.concepts; * * @param

Product of builder * - * @author Tony Tkacik + * @author Tony Tkacik <ttkacik@cisco.com> */ public interface Builder

extends Mutable { @@ -22,7 +22,7 @@ public interface Builder

extends Mutable { * Multiple calls to this method are not required to return * same instance if the state of the builder was changed. * - * @return + * @return Newly-built instance */ P toInstance(); } diff --git a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ClassBasedPropertyBuilder.java b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ClassBasedPropertyBuilder.java index 35187ba167..85016b8e10 100644 --- a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ClassBasedPropertyBuilder.java +++ b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ClassBasedPropertyBuilder.java @@ -10,21 +10,20 @@ package org.opendaylight.yangtools.concepts; public interface ClassBasedPropertyBuilder> extends Builder

{ /** - * Sets a value of property uniquely identified by it's + * Sets a value of property uniquely identified by its * class. * * @param type Type of property to set * @param value Value of property - * @return + * @return Builder instance */ - T set(Class type,V value); + T set(Class type, V value); /** - * Gets a value of property based on it's type. + * Gets a value of property based on its type. * - * @param type - * @return + * @param type Type of property to get + * @return Builder instance */ V get(Class type); - } diff --git a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ProductAwareBuilder.java b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ProductAwareBuilder.java index b2c2d049e0..184e467d44 100644 --- a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ProductAwareBuilder.java +++ b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ProductAwareBuilder.java @@ -17,7 +17,7 @@ package org.opendaylight.yangtools.concepts; public interface ProductAwareBuilder

extends Builder

{ /** * Return the hash code of the product. This has to be equivalent - * of calling {@link #toInstance()}.{@link #hashCode()}. + * of calling {@link #toInstance()}.{@link Object#hashCode()}. * * @return the hash code of the product. */ @@ -26,7 +26,7 @@ public interface ProductAwareBuilder

extends Builder

{ /** * Check whether an instance of the product that would be created * by the builder is equal to an existing instance. This has to - * be equivalent of calling {@link #toInstance()}.{@link #equals(Object)}. + * be equivalent of calling {@link #toInstance()}.{@link Object#equals(Object)}. * * @param product Product instance * @return Return true if the product is equal to the would-be diff --git a/common/features-builder/pom.xml b/common/features-builder/pom.xml new file mode 100644 index 0000000000..0576893ad4 --- /dev/null +++ b/common/features-builder/pom.xml @@ -0,0 +1,250 @@ + + + + + 4.0.0 + + org.opendaylight.odlparent + odlparent + 1.5.0-SNAPSHOT + + + org.opendaylight.yangtools + features-builder + pom + 0.7.0-SNAPSHOT + + + features.xml + + + + + + src/main/resources + true + + + + + + + + maven-dependency-plugin + + + generate-resources + resolve + + ${project.build.directory}/dependencies.txt + + + + + + com.alexecollins.maven.plugin + script-maven-plugin + 1.0.0 + + + add-version-to-features + generate-resources + + execute + + + groovy + + + + + + + org.codehaus.groovy + groovy + 1.8.6 + + + + + org.apache.karaf.tooling + karaf-maven-plugin + ${karaf.version} + true + + + features-create-kar + + features-create-kar + + + ${project.build.directory}/classes/${features.file} + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + generate-resources + add-resource + + + + ${project.build.directory}/generated-resources/script + true + + + + + + attach-artifacts + package + + attach-artifact + + + + + ${project.build.directory}/classes/${features.file} + xml + features + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + + filter + generate-resources + + resources + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + org.opendaylight.yangtools:features-test + + + + + + + + + + + org.opendaylight.yangtools + features-test + 0.7.0-SNAPSHOT + test + + + diff --git a/common/features-test/src/main/java/org/opendaylight/yangtools/featuretest/SingleFeatureTest.java b/common/features-test/src/main/java/org/opendaylight/yangtools/featuretest/SingleFeatureTest.java index 5f46d040c8..cdcff63960 100644 --- a/common/features-test/src/main/java/org/opendaylight/yangtools/featuretest/SingleFeatureTest.java +++ b/common/features-test/src/main/java/org/opendaylight/yangtools/featuretest/SingleFeatureTest.java @@ -11,6 +11,7 @@ import static org.opendaylight.yangtools.featuretest.Constants.ORG_OPENDAYLIGHT_ import static org.opendaylight.yangtools.featuretest.Constants.ORG_OPENDAYLIGHT_FEATURETEST_FEATUREVERSION_PROP; import static org.opendaylight.yangtools.featuretest.Constants.ORG_OPENDAYLIGHT_FEATURETEST_URI_PROP; import static org.ops4j.pax.exam.CoreOptions.maven; +import static org.ops4j.pax.exam.CoreOptions.vmOptions; import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.configureConsole; import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.editConfigurationFilePut; //import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.debugConfiguration; @@ -77,6 +78,7 @@ public class SingleFeatureTest { public Option[] config() throws IOException { return new Option[] { getKarafDistroOption(), + vmOptions("-Xmx2048m","-XX:MaxPermSize=512m"), keepRuntimeFolder(), configureConsole().ignoreLocalConsole(), logLevel(LogLevel.WARN), diff --git a/common/features/pom.xml b/common/features/pom.xml index a37c36a726..a3aefd8072 100644 --- a/common/features/pom.xml +++ b/common/features/pom.xml @@ -11,75 +11,35 @@ 4.0.0 org.opendaylight.yangtools - yangtools-parent + features-builder 0.7.0-SNAPSHOT - ../parent/pom.xml + ../features-builder/pom.xml - features-yangtools + + yangtools-features jar - - features.xml - + - - - src/main/resources - true - - + - org.apache.karaf.tooling - karaf-maven-plugin - ${karaf.version} - true - - - features-create-kar - - features-create-kar - - - ${project.build.directory}/classes/${features.file} - - - - + maven-dependency-plugin - org.apache.maven.plugins - maven-resources-plugin - - - filter - generate-resources - - resources - - - + com.alexecollins.maven.plugin + script-maven-plugin + + + org.apache.karaf.tooling + karaf-maven-plugin org.codehaus.mojo build-helper-maven-plugin - - - attach-artifacts - package - - attach-artifact - - - - - ${project.build.directory}/classes/${features.file} - xml - features - - - - - + + + org.apache.maven.plugins + maven-resources-plugin org.apache.maven.plugins @@ -92,6 +52,19 @@ + + + + + org.opendaylight.yangtools + yangtools-artifacts + ${project.version} + import + pom + + + + org.opendaylight.yangtools.model @@ -117,10 +90,26 @@ org.opendaylight.yangtools.model opendaylight-l2-types + + org.opendaylight.yangtools.model + ietf-ted + org.opendaylight.yangtools.model ietf-topology + + org.opendaylight.yangtools.model + ietf-topology-isis + + + org.opendaylight.yangtools.model + ietf-topology-ospf + + + org.opendaylight.yangtools.model + ietf-topology-l3-unicast-igp + org.opendaylight.yangtools.thirdparty antlr4-runtime-osgi-nohead @@ -247,12 +236,5 @@ com.google.guava guava - - - - org.opendaylight.yangtools - features-test - test - diff --git a/common/features/src/main/resources/features.xml b/common/features/src/main/feature/features.xml similarity index 60% rename from common/features/src/main/resources/features.xml rename to common/features/src/main/feature/features.xml index baba09124c..ba174b1678 100644 --- a/common/features/src/main/resources/features.xml +++ b/common/features/src/main/feature/features.xml @@ -21,68 +21,72 @@ odl-yangtools-binding - mvn:org.opendaylight.yangtools.model/ietf-inet-types/${ietf.inet.types.version} - mvn:org.opendaylight.yangtools.model/ietf-yang-types/${ietf.yang.types.version} - mvn:org.opendaylight.yangtools.model/ietf-yang-types-20130715/${ietf.yang.types.20130715.version} - mvn:org.opendaylight.yangtools.model/ietf-restconf/${ietf.restconf.version} - mvn:org.opendaylight.yangtools.model/yang-ext/${yang.ext.version} - mvn:org.opendaylight.yangtools.model/opendaylight-l2-types/${opendaylight.l2.types.version} - mvn:org.opendaylight.yangtools.model/ietf-topology/${ietf.topology.version} + mvn:org.opendaylight.yangtools.model/ietf-inet-types/{{VERSION}} + mvn:org.opendaylight.yangtools.model/ietf-yang-types/{{VERSION}} + mvn:org.opendaylight.yangtools.model/ietf-yang-types-20130715/{{VERSION}} + mvn:org.opendaylight.yangtools.model/ietf-restconf/{{VERSION}} + mvn:org.opendaylight.yangtools.model/yang-ext/{{VERSION}} + mvn:org.opendaylight.yangtools.model/opendaylight-l2-types/{{VERSION}} + mvn:org.opendaylight.yangtools.model/ietf-ted/{{VERSION}} + mvn:org.opendaylight.yangtools.model/ietf-topology/{{VERSION}} + mvn:org.opendaylight.yangtools.model/ietf-topology-isis/{{VERSION}} + mvn:org.opendaylight.yangtools.model/ietf-topology-ospf/{{VERSION}} + mvn:org.opendaylight.yangtools.model/ietf-topology-l3-unicast-igp/{{VERSION}} odl-yangtools-binding - mvn:org.opendaylight.yangtools.thirdparty/antlr4-runtime-osgi-nohead/${antlr4.version} - mvn:commons-io/commons-io/${commons.io.version} - mvn:org.opendaylight.yangtools/yang-data-api/${project.version} - mvn:org.opendaylight.yangtools/yang-data-composite-node/${project.version} - mvn:org.opendaylight.yangtools/yang-data-impl/${project.version} - mvn:org.opendaylight.yangtools/yang-data-operations/${project.version} - mvn:org.opendaylight.yangtools/yang-data-util/${project.version} - mvn:org.opendaylight.yangtools/yang-model-api/${project.version} - mvn:org.opendaylight.yangtools/yang-model-util/${project.version} - mvn:org.opendaylight.yangtools/yang-parser-api/${project.version} - mvn:org.opendaylight.yangtools/yang-parser-impl/${project.version} + mvn:org.opendaylight.yangtools.thirdparty/antlr4-runtime-osgi-nohead/{{VERSION}} + mvn:commons-io/commons-io/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-data-api/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-data-composite-node/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-data-impl/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-data-operations/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-data-util/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-model-api/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-model-util/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-parser-api/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-parser-impl/{{VERSION}} - mvn:com.google.code.gson/gson/${gson.version} - mvn:org.opendaylight.yangtools/yang-data-codec-gson/${project.version} + mvn:com.google.code.gson/gson/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-data-codec-gson/{{VERSION}} odl-yangtools-common - mvn:org.opendaylight.yangtools/yang-binding/${project.version} - mvn:org.opendaylight.yangtools/util/${project.version} + mvn:org.opendaylight.yangtools/yang-binding/{{VERSION}} + mvn:org.opendaylight.yangtools/util/{{VERSION}} - mvn:com.google.guava/guava/${guava.version} - mvn:org.opendaylight.yangtools/concepts/${project.version} - mvn:org.opendaylight.yangtools/yang-common/${project.version} - mvn:org.opendaylight.yangtools/util/${project.version} - mvn:org.opendaylight.yangtools/object-cache-api/${project.version} - mvn:org.opendaylight.yangtools/object-cache-guava/${project.version} - mvn:org.opendaylight.yangtools/object-cache-noop/${project.version} + mvn:com.google.guava/guava/{{VERSION}} + mvn:org.opendaylight.yangtools/concepts/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-common/{{VERSION}} + mvn:org.opendaylight.yangtools/util/{{VERSION}} + mvn:org.opendaylight.yangtools/object-cache-api/{{VERSION}} + mvn:org.opendaylight.yangtools/object-cache-guava/{{VERSION}} + mvn:org.opendaylight.yangtools/object-cache-noop/{{VERSION}} odl-yangtools-data-binding - mvn:org.javassist/javassist/${javassist.version} - mvn:org.apache.commons/commons-lang3/${commons.lang3.version} - mvn:org.opendaylight.yangtools/binding-generator-api/${project.version} - mvn:org.opendaylight.yangtools/binding-generator-impl/${project.version} - mvn:org.opendaylight.yangtools/binding-generator-spi/${project.version} - mvn:org.opendaylight.yangtools/binding-generator-util/${project.version} - mvn:org.opendaylight.yangtools/binding-model-api/${project.version} - mvn:org.opendaylight.yangtools/binding-type-provider/${project.version} - mvn:org.opendaylight.yangtools/binding-data-codec/${project.version} - mvn:org.opendaylight.yangtools.thirdparty/xtend-lib-osgi/${xtend.version} - mvn:org.opendaylight.yangtools/yang-model-api/${project.version} - mvn:org.opendaylight.yangtools/yang-model-util/${project.version} - mvn:org.opendaylight.yangtools/yang-parser-api/${project.version} + mvn:org.javassist/javassist/{{VERSION}} + mvn:org.apache.commons/commons-lang3/{{VERSION}} + mvn:org.opendaylight.yangtools/binding-generator-api/{{VERSION}} + mvn:org.opendaylight.yangtools/binding-generator-impl/{{VERSION}} + mvn:org.opendaylight.yangtools/binding-generator-spi/{{VERSION}} + mvn:org.opendaylight.yangtools/binding-generator-util/{{VERSION}} + mvn:org.opendaylight.yangtools/binding-model-api/{{VERSION}} + mvn:org.opendaylight.yangtools/binding-type-provider/{{VERSION}} + mvn:org.opendaylight.yangtools/binding-data-codec/{{VERSION}} + mvn:org.opendaylight.yangtools.thirdparty/xtend-lib-osgi/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-model-api/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-model-util/{{VERSION}} + mvn:org.opendaylight.yangtools/yang-parser-api/{{VERSION}} - mvn:org.opendaylight.yangtools/restconf-client-api/${project.version} - mvn:org.opendaylight.yangtools/restconf-client-impl/${project.version} - mvn:org.opendaylight.yangtools/restconf-common/${project.version} + mvn:org.opendaylight.yangtools/restconf-client-api/{{VERSION}} + mvn:org.opendaylight.yangtools/restconf-client-impl/{{VERSION}} + mvn:org.opendaylight.yangtools/restconf-common/{{VERSION}} diff --git a/common/parent/pom.xml b/common/parent/pom.xml index dab18de6a2..4ca439428d 100644 --- a/common/parent/pom.xml +++ b/common/parent/pom.xml @@ -27,7 +27,6 @@ - 4.0 2.4 0.2.0 3.0.0 @@ -37,15 +36,7 @@ http://nexus.opendaylight.org/content 2.9.1 2.0.1 - - - 2013.10.21.7-SNAPSHOT - 2010.09.24.7-SNAPSHOT - 2010.09.24.7-SNAPSHOT - 2013.07.15.7-SNAPSHOT - 2013.10.19.7-SNAPSHOT - 2013.08.27.7-SNAPSHOT - 2013.09.07.7-SNAPSHOT + 1.2 2.4 @@ -126,188 +117,6 @@ 1.5 test - - org.opendaylight.yangtools - yang-data-util - ${yangtools.version} - - - org.opendaylight.yangtools - maven-sal-api-gen-plugin - ${yangtools.version} - - - org.opendaylight.yangtools.thirdparty - antlr4-runtime-osgi-nohead - 4.0 - test - - - org.opendaylight.yangtools.thirdparty - xtend-lib-osgi - 2.4.3 - test - - - org.opendaylight.yangtools - concepts - ${yangtools.version} - - - org.opendaylight.yangtools - object-cache-api - ${yangtools.version} - - - org.opendaylight.yangtools - object-cache-guava - ${yangtools.version} - - - org.opendaylight.yangtools - object-cache-noop - ${yangtools.version} - - - org.opendaylight.yangtools - binding-model-api - ${yangtools.version} - - - org.opendaylight.yangtools - binding-generator-api - ${yangtools.version} - - - org.opendaylight.yangtools - binding-generator-spi - ${yangtools.version} - - - org.opendaylight.yangtools - binding-generator-util - ${yangtools.version} - - - org.opendaylight.yangtools - binding-generator-impl - ${yangtools.version} - - - org.opendaylight.yangtools - binding-java-api-generator - ${yangtools.version} - - - org.opendaylight.yangtools - yang-common - ${yangtools.version} - - - org.opendaylight.yangtools - yang-data-api - ${yangtools.version} - - - org.opendaylight.yangtools - yang-data-impl - ${yangtools.version} - - - org.opendaylight.yangtools - yang-data-codec-gson - ${yangtools.version} - - - org.opendaylight.yangtools - yang-model-api - ${yangtools.version} - - - org.opendaylight.yangtools - yang-model-util - ${yangtools.version} - - - org.opendaylight.yangtools - yang-binding - ${yangtools.version} - - - org.opendaylight.yangtools - yang-parser-api - ${yangtools.version} - - - org.opendaylight.yangtools - yang-parser-impl - ${yangtools.version} - - - org.opendaylight.yangtools - yang-maven-plugin - ${yangtools.version} - - - org.opendaylight.yangtools - yang-maven-plugin-spi - ${yangtools.version} - - - org.opendaylight.yangtools.model - ietf-inet-types - ${ietf.inet.types.version} - - - org.opendaylight.yangtools.model - ietf-yang-types - ${ietf.yang.types.version} - - - org.opendaylight.yangtools.model - ietf-yang-types-20130715 - ${ietf.yang.types.20130715.version} - - - org.opendaylight.yangtools.model - ietf-restconf - ${ietf.restconf.version} - - - org.opendaylight.yangtools.model - ietf-ted - ${ietf.topology.version} - - - org.opendaylight.yangtools.model - ietf-topology - ${ietf.topology.version} - - - org.opendaylight.yangtools.model - ietf-topology-isis - ${ietf.topology.version} - - - org.opendaylight.yangtools.model - ietf-topology-l3-unicast-igp - ${ietf.topology.version} - - - org.opendaylight.yangtools.model - ietf-topology-ospf - ${ietf.topology.version} - - - org.opendaylight.yangtools.model - ietf-topology-l3-unicast - ${ietf.topology.version} - - - org.opendaylight.yangtools - yang-data-composite-node - ${yangtools.version} - org.apache.maven maven-core @@ -358,104 +167,10 @@ org.opendaylight.yangtools - restconf-client-api - ${yangtools.version} - - - org.opendaylight.yangtools - restconf-common - ${yangtools.version} - - - org.opendaylight.yangtools - restconf-util - ${yangtools.version} - - - org.opendaylight.yangtools - restconf-test-service - ${yangtools.version} - - - org.opendaylight.yangtools - restconf-client-impl + yangtools-artifacts ${yangtools.version} - - - org.opendaylight.yangtools - restconf-jaxrs-api - ${yangtools.version} - - - - org.opendaylight.yangtools - bug527-test-model - ${yangtools.version} - test - - - org.opendaylight.yangtools - bug1196-test-model - ${yangtools.version} - test - - - - org.opendaylight.yangtools - websocket-client - ${yangtools.version} - - - - ${project.groupId} - object-cache-api - ${yangtools.version} - - - ${project.groupId} - object-cache-guava - ${yangtools.version} - - - ${project.groupId} - object-cache-noop - ${yangtools.version} - - - ${project.groupId} - util - ${yangtools.version} - - - org.opendaylight.yangtools.model - opendaylight-l2-types - ${opendaylight.l2.types.version} - - - org.opendaylight.yangtools.model - yang-ext - ${yang.ext.version} - - - org.opendaylight.yangtools - binding-type-provider - ${yangtools.version} - - - org.opendaylight.yangtools - yang-data-operations - ${yangtools.version} - - - org.opendaylight.yangtools - binding-data-codec - ${yangtools.version} - - - org.opendaylight.yangtools - features-test - ${yangtools.version} - test + import + pom @@ -740,6 +455,19 @@ + + org.apache.servicemix.tooling + depends-maven-plugin + ${maven.depends.version} + + + generate-depends-file + + generate-depends-file + + + + diff --git a/common/pom.xml b/common/pom.xml index f9a2d2423f..a355d21407 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -23,9 +23,11 @@ pom + artifacts checkstyle-logging concepts features + features-builder features-test mockito-configuration object-cache-api diff --git a/integration-test/bug1196-test-model/pom.xml b/integration-test/bug1196-test-model/pom.xml index 21edf5c403..c2d2746263 100644 --- a/integration-test/bug1196-test-model/pom.xml +++ b/integration-test/bug1196-test-model/pom.xml @@ -38,16 +38,6 @@ yang-common 0.7.0-SNAPSHOT - - org.opendaylight.yangtools.model - yang-ext - ${yang.ext.version} - - - org.opendaylight.yangtools.model - ietf-inet-types - ${ietf.inet.types.version} - diff --git a/integration-test/bundle-test/pom.xml b/integration-test/bundle-test/pom.xml index fb84a0d7bc..4fde8986ea 100644 --- a/integration-test/bundle-test/pom.xml +++ b/integration-test/bundle-test/pom.xml @@ -62,10 +62,12 @@ org.opendaylight.yangtools.thirdparty antlr4-runtime-osgi-nohead + test org.opendaylight.yangtools.thirdparty xtend-lib-osgi + test diff --git a/model/ietf/pom.xml b/model/ietf/pom.xml index d50f275fa9..b2a66bb522 100644 --- a/model/ietf/pom.xml +++ b/model/ietf/pom.xml @@ -33,49 +33,4 @@ ietf-restconf - - - - - org.opendaylight.yangtools.model - ietf-inet-types - ${ietf.inet.types.version} - - - org.opendaylight.yangtools.model - ietf-yang-types - ${ietf.yang.types.version} - - - org.opendaylight.yangtools.model - ietf-restconf - ${ietf.restconf.version} - - - ${project.groupId} - ietf-ted - ${ietf.topology.version} - - - ${project.groupId} - ietf-topology - ${ietf.topology.version} - - - ${project.groupId} - ietf-topology-isis - ${ietf.topology.version} - - - ${project.groupId} - ietf-topology-l3-unicast-igp - ${ietf.topology.version} - - - ${project.groupId} - ietf-topology-ospf - ${ietf.topology.version} - - - - + diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java index 3423110bdc..c882db6693 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java @@ -316,19 +316,6 @@ public final class YangInstanceIdentifier implements Path childNames) { - this(childNames); - } - /** * Returns set of all possible child nodes * diff --git a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/InstanceIdentifierTest.java b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/InstanceIdentifierTest.java index d451d6e861..cc34224da2 100644 --- a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/InstanceIdentifierTest.java +++ b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/InstanceIdentifierTest.java @@ -168,7 +168,7 @@ public class InstanceIdentifierTest { assertEquals( "PathArg 3 node type", nodeName3, it.next().getNodeType() ); assertEquals( "PathArg 4 node type", nodeName4, it.next().getNodeType() ); - newID = YangInstanceIdentifier.builder( nodeName1 ).build(); + newID = YangInstanceIdentifier.builder().node( nodeName1 ).build(); assertNotNull( "InstanceIdentifier is null", newID ); assertEquals( "Path size", 1, Iterables.size(newID.getPathArguments()) ); diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java index 8fcc596ab4..e1bba78be0 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java @@ -11,9 +11,6 @@ import com.google.common.base.CharMatcher; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.gson.stream.JsonWriter; -import java.io.IOException; -import java.io.Writer; -import java.net.URI; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -26,6 +23,10 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import java.io.IOException; +import java.io.Writer; +import java.net.URI; + /** * This implementation will create JSON output as output stream. * @@ -43,7 +44,7 @@ public class JSONNormalizedNodeStreamWriter implements NormalizedNodeStreamWrite /** * Matcher used to check if a string needs to be escaped. */ - private static final CharMatcher QUOTES_OR_BACKSLASH = CharMatcher.anyOf("\\\""); + private static final CharMatcher JSON_ILLEGAL_STRING_CHARACTERS = CharMatcher.anyOf("\\\"\n\r"); private final SchemaTracker tracker; private final JSONCodecFactory codecs; @@ -228,14 +229,14 @@ public class JSONNormalizedNodeStreamWriter implements NormalizedNodeStreamWrite if (needQuotes) { writer.append('"'); - final int needEscape = QUOTES_OR_BACKSLASH.countIn(str); + final int needEscape = JSON_ILLEGAL_STRING_CHARACTERS.countIn(str); if (needEscape != 0) { final char[] escaped = new char[str.length() + needEscape]; int offset = 0; for (int i = 0; i < str.length(); i++) { final char c = str.charAt(i); - if (QUOTES_OR_BACKSLASH.matches(c)) { + if (JSON_ILLEGAL_STRING_CHARACTERS.matches(c)) { escaped[offset++] = '\\'; } escaped[offset++] = c; diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java index 62e7cf18cd..39a1f1bc7b 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java @@ -7,26 +7,11 @@ */ package org.opendaylight.yangtools.yang.data.codec.gson; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.opendaylight.yangtools.yang.data.codec.gson.TestUtils.childArray; -import static org.opendaylight.yangtools.yang.data.codec.gson.TestUtils.childPrimitive; -import static org.opendaylight.yangtools.yang.data.codec.gson.TestUtils.loadModules; -import static org.opendaylight.yangtools.yang.data.codec.gson.TestUtils.resolveCont1; - import com.google.common.collect.Sets; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; -import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; -import java.net.URISyntaxException; -import java.util.HashSet; -import java.util.Iterator; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; @@ -35,6 +20,22 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.net.URISyntaxException; +import java.util.HashSet; +import java.util.Iterator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.opendaylight.yangtools.yang.data.codec.gson.TestUtils.childArray; +import static org.opendaylight.yangtools.yang.data.codec.gson.TestUtils.childPrimitive; +import static org.opendaylight.yangtools.yang.data.codec.gson.TestUtils.loadModules; +import static org.opendaylight.yangtools.yang.data.codec.gson.TestUtils.resolveCont1; + /** * Each test tests whether json output obtained after transformation contains is corect. The transformation takes * normalized node data structure and transform it to json output. To make it easier validate json output it is loaded @@ -95,6 +96,32 @@ public class NormalizedNodeToJsonStreamTest { } + @Test + public void leafListNodeInContainerMultiline() throws IOException, URISyntaxException { + Writer writer = new StringWriter(); + NormalizedNode leafListNodeInContainer = TestingNormalizedNodeStructuresCreator.leafListNodeInContainerMultiline(); + String jsonOutput = normalizedNodeToJsonStreamTransformation(writer, leafListNodeInContainer); + new JsonValidator() { + + @Override + public void validate(String jsonOutput) { + JsonObject cont1 = resolveCont1(jsonOutput); + assertNotNull(cont1); + JsonArray lflst11 = childArray(cont1, "complexjson:lflst11", "lflst11"); + assertNotNull(lflst11); + + HashSet lflst11Values = Sets.newHashSet(); + for (JsonElement jsonElement : lflst11) { + assertTrue(jsonElement instanceof JsonPrimitive); + lflst11Values.add(((JsonPrimitive) jsonElement).getAsString()); + } + + assertEquals(Sets.newHashSet("lflst11 value2\r\nanother line 2", "lflst11 value1\nanother line 1"), lflst11Values); + } + }.validate(jsonOutput); + + } + @Test public void leafNodeViaAugmentationInContainer() throws IOException, URISyntaxException { Writer writer = new StringWriter(); diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestingNormalizedNodeStructuresCreator.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestingNormalizedNodeStructuresCreator.java index f1400854d9..1038ce883d 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestingNormalizedNodeStructuresCreator.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestingNormalizedNodeStructuresCreator.java @@ -9,8 +9,6 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import java.util.HashMap; -import java.util.Map; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.CompositeNode; import org.opendaylight.yangtools.yang.data.api.SimpleNode; @@ -40,6 +38,9 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; +import java.util.HashMap; +import java.util.Map; + public class TestingNormalizedNodeStructuresCreator { static NormalizedNode cont1Node( @@ -236,6 +237,22 @@ public class TestingNormalizedNodeStructuresCreator { return lflst11.build(); } + private static DataContainerChild childLflst11Multiline() { + ListNodeBuilder> lflst11 = Builders.leafSetBuilder().withNodeIdentifier( + new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lflst11"))); + lflst11.withChild(Builders + .leafSetEntryBuilder() + .withNodeIdentifier( + new NodeWithValue(QName.create("ns:complex:json", "2014-08-11", "lflst11"), "lflst11 value1\nanother line 1")) + .withValue("lflst11 value1\nanother line 1").build()); + lflst11.withChild(Builders + .leafSetEntryBuilder() + .withNodeIdentifier( + new NodeWithValue(QName.create("ns:complex:json", "2014-08-11", "lflst11"), "lflst11 value2\r\nanother line 2")) + .withValue("lflst11 value2\r\nanother line 2").build()); + return lflst11.build(); + } + private static CompositeNode prepareLf12Value() { SimpleNode anyxmlInData = NodeFactory.createImmutableSimpleNode( QName.create("ns:complex:json", "2014-08-11", "anyxml-in-data"), null, "foo"); @@ -260,6 +277,9 @@ public class TestingNormalizedNodeStructuresCreator { public static NormalizedNode leafListNodeInContainer() { return cont1Node(childLflst11()); } + public static NormalizedNode leafListNodeInContainerMultiline() { + return cont1Node(childLflst11Multiline()); + } public static NormalizedNode keyedListNodeInContainer() { return cont1Node(childLst11()); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNode.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNode.java index acfb07c49f..e90db03c64 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNode.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNode.java @@ -7,15 +7,14 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.nodes; +import com.google.common.base.Objects; +import com.google.common.base.Objects.ToStringHelper; +import com.google.common.collect.ImmutableMap; import java.util.Map; - import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.AttributesContainer; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import com.google.common.base.Objects.ToStringHelper; -import com.google.common.collect.ImmutableMap; - public abstract class AbstractImmutableNormalizedValueAttrNode extends AbstractImmutableNormalizedValueNode implements AttributesContainer { @@ -44,7 +43,7 @@ public abstract class AbstractImmutableNormalizedValueAttrNode a : attributes.entrySet()) { // result = 31 * result + a.hashCode(); @@ -54,7 +53,9 @@ public abstract class AbstractImmutableNormalizedValueAttrNode other) { - if (!getValue().equals(other.getValue())) { + // We can not call directly getValue.equals because of Empty Type Definition leaves + // which allways have NULL value + if (!Objects.equal(getValue(), other.getValue())) { return false; } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java index bd8252159a..ba49348df5 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.nodes; +import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,6 +16,7 @@ public abstract class AbstractImmutableNormalizedValueNode { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractImmutableNormalizedValueNode.class); + @Nullable private final V value; protected AbstractImmutableNormalizedValueNode(final K nodeIdentifier, final V value) { diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DerivableSchemaNode.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DerivableSchemaNode.java index 2ffc3ad973..7dd248cf37 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DerivableSchemaNode.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DerivableSchemaNode.java @@ -14,7 +14,7 @@ public interface DerivableSchemaNode extends DataSchemaNode { * grouping where it was defined. * * @return original node definition from grouping if this node is added by - * uses, null otherwise + * uses, Optional.absent otherwise */ Optional getOriginal(); diff --git a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/ModuleImportImplTest.java b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/ModuleImportImplTest.java new file mode 100644 index 0000000000..62f127ef5f --- /dev/null +++ b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/ModuleImportImplTest.java @@ -0,0 +1,70 @@ +/* + * 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.model.util; + +import static org.junit.Assert.*; + +import java.util.Date; + +import org.opendaylight.yangtools.yang.model.api.ModuleImport; +import org.junit.Before; +import org.junit.Test; + +public class ModuleImportImplTest { + + private ModuleImport module1, module2, module3, module4, module5; + private int hash1, hash2; + private Date now; + + @Before + public void setup() { + now = new Date(); + module1 = new ModuleImportImpl("myModule", now, "myPrefix"); + module2 = new ModuleImportImpl(null, null, null); + module3 = new ModuleImportImpl("myModule", null, "customPrefix"); + module4 = new ModuleImportImpl("myModule", now, null); + module5 = new ModuleImportImpl("myModule", now, "myPrefix"); + hash1 = module1.hashCode(); + hash2 = module2.hashCode(); + } + + @Test + public void testModule() { + assertNotNull(module1); + assertTrue(module1.getModuleName().equals("myModule")); + assertTrue(module1.getPrefix().equals("myPrefix")); + assertTrue(module1.getRevision().equals(now)); + assertFalse(module1.equals(module2)); + } + + @Test + public void testToString() { + String toString = module1.toString(); + assertTrue(toString.contains("ModuleImport")); + } + + @Test + public void testHashCode() { + assertTrue(!(hash1 == hash2)); + } + + @Test + public void testEquals() { + assertTrue(module1.equals(module1)); + assertFalse(module1.equals(module2)); + assertFalse(module1.equals("")); + assertFalse(module2.equals(module1)); + assertFalse(module1.equals(null)); + assertFalse(module1.equals(module3)); + assertFalse(module3.equals(module1)); + assertFalse(module1.equals(module4)); + assertFalse(module4.equals(module1)); + assertTrue(module1.equals(module5)); + } + +} diff --git a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaNodeUtilsTest.java b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaNodeUtilsTest.java new file mode 100644 index 0000000000..cdae5415c0 --- /dev/null +++ b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaNodeUtilsTest.java @@ -0,0 +1,57 @@ +/* + * 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.model.util; + +import com.google.common.base.Optional; +import org.opendaylight.yangtools.yang.model.api.SchemaNode; +import org.mockito.MockitoAnnotations; +import org.mockito.Mock; +import org.junit.Before; +import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode; +import org.junit.Test; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.doReturn; +import static org.hamcrest.CoreMatchers.instanceOf; + +public class SchemaNodeUtilsTest { + + @Mock + private DerivableSchemaNode derivableNode; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + } + + @Test + public void testHandleNullGetOriginalIfPossible() { + Optional originalIfPossible = SchemaNodeUtils + .getOriginalIfPossible(null); + assertNotNull(originalIfPossible); + assertThat(originalIfPossible, instanceOf(Optional.class)); + } + + @Test + public void testHandleNodeGetOriginalIfPossible() { + Optional of = Optional.of(derivableNode); + doReturn(of).when(derivableNode).getOriginal(); + Optional originalIfPossible = SchemaNodeUtils + .getOriginalIfPossible(derivableNode); + assertNotNull(originalIfPossible); + assertThat(originalIfPossible, instanceOf(Optional.class)); + } + + @Test + public void testHandleNullGetRootOriginalIfPossible() { + SchemaNode rootOriginalIfPossible = SchemaNodeUtils + .getRootOriginalIfPossible(null); + assertNull(rootOriginalIfPossible); + } +} diff --git a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/StringTypeTest.java b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/StringTypeTest.java new file mode 100644 index 0000000000..095fb58a79 --- /dev/null +++ b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/StringTypeTest.java @@ -0,0 +1,62 @@ +/* + * 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.model.util; + +import static org.junit.Assert.*; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import java.sql.Types; +import org.opendaylight.yangtools.yang.model.api.Status; +import org.junit.Before; +import org.junit.Test; + +public class StringTypeTest { + + private StringType string; + private int hash; + + @Before + public void setup() { + string = StringType.getInstance(); + hash = string.hashCode(); + } + + @Test + public void testGetBaseTypeShouldReturnNull() { + assertTrue(string.getBaseType() == null); + } + + @Test + public void testGetters() { + assertEquals(string.getUnits(), ""); + assertEquals(string.getDefaultValue(), ""); + assertEquals(string.getDescription(), ""); + assertEquals(string.getReference(), ""); + assertEquals(string.getQName(), BaseTypes.STRING_QNAME); + assertEquals(string.getStatus(), Status.CURRENT); + + SchemaPath path = SchemaPath.create(true, string.getQName()); + assertEquals(string.getPath(), path); + + assertNotNull(string.getLengthConstraints()); + assertNotNull(string.getPatternConstraints()); + assertNotNull(string.getUnknownSchemaNodes()); + } + + @Test + public void testToString() { + String toString = string.toString(); + assertTrue(toString.contains("StringType")); + } + + @Test + public void testEquals() { + assertTrue(string.equals(string)); + assertFalse(string.equals(null)); + assertFalse(string.equals(Types.DOUBLE)); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ChoiceCaseBuilder.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ChoiceCaseBuilder.java index c97eb14ebe..2d823c5113 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ChoiceCaseBuilder.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ChoiceCaseBuilder.java @@ -7,10 +7,13 @@ */ package org.opendaylight.yangtools.yang.parser.builder.impl; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import java.util.ArrayList; import java.util.List; import java.util.Set; - import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; @@ -22,6 +25,7 @@ import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuil import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationTargetBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.ConstraintsBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder; @@ -29,11 +33,6 @@ import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDat import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder; import org.opendaylight.yangtools.yang.parser.util.YangParseException; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; - public final class ChoiceCaseBuilder extends AbstractDocumentedDataNodeContainerBuilder implements DataSchemaNodeBuilder, AugmentationTargetBuilder { private ChoiceCaseNodeImpl instance; @@ -148,6 +147,11 @@ AugmentationTargetBuilder { throw new YangParseException(getModuleName(), typedefBuilder.getLine(), "Can not add type definition to choice case."); } + @Override + public void addGrouping(GroupingBuilder groupingBuilder) { + throw new YangParseException(getModuleName(), groupingBuilder.getLine(), "Can not add grouping to choice case."); + } + @Override public boolean isConfiguration() { return false; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java index cb72d9a2a4..6c20697ad5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java @@ -129,13 +129,6 @@ public final class CopyUtils { for (DataSchemaNodeBuilder childNode : old.getChildNodeBuilders()) { copy.addChildNode(copy(childNode, copy, updateQName)); } - copy.getGroupings().addAll(old.getGroupings()); - for (GroupingBuilder grouping : old.getGroupingBuilders()) { - copy.addGrouping(copy(grouping, copy, updateQName)); - } - for (TypeDefinitionBuilder tdb : old.getTypeDefinitionBuilders()) { - copy.addTypedef(copy(tdb, copy, updateQName)); - } for (UsesNodeBuilder oldUses : old.getUsesNodeBuilders()) { copy.addUsesNode(copyUses(oldUses, copy)); } @@ -450,10 +443,13 @@ public final class CopyUtils { private static DataBean getdata(final SchemaNodeBuilder old, final Builder newParent, final boolean updateQName) { final SchemaPath newSchemaPath; + // this check avoid NPE because if old is IdentityrefTypeBuilder, old.getQNname() return null + final boolean identityrefTypeCheck = old instanceof IdentityrefTypeBuilder ? false : updateQName; + QName newQName = null; if (newParent instanceof ModuleBuilder) { ModuleBuilder parent = (ModuleBuilder) newParent; - if (updateQName) { + if (identityrefTypeCheck) { newQName = QName.create(parent.getQNameModule(), parent.getPrefix(), old.getQName() .getLocalName()); } else { @@ -463,7 +459,7 @@ public final class CopyUtils { } else if (newParent instanceof AugmentationSchemaBuilder) { AugmentationSchemaBuilder augment = (AugmentationSchemaBuilder) newParent; ModuleBuilder parent = BuilderUtils.getParentModule(newParent); - if (updateQName) { + if (identityrefTypeCheck) { newQName = QName.create(parent.getQNameModule(), parent.getPrefix(), old.getQName() .getLocalName()); } else { @@ -473,7 +469,7 @@ public final class CopyUtils { } else if (newParent instanceof SchemaNodeBuilder) { SchemaNodeBuilder parent = (SchemaNodeBuilder) newParent; QName parentQName = parent.getQName(); - if (updateQName) { + if (identityrefTypeCheck) { newQName = QName.create(parentQName, old.getQName().getLocalName()); } else { newQName = old.getQName(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/util/AbstractDocumentedDataNodeContainerBuilder.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/util/AbstractDocumentedDataNodeContainerBuilder.java index 7226aa216b..5bc45b2e3c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/util/AbstractDocumentedDataNodeContainerBuilder.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/util/AbstractDocumentedDataNodeContainerBuilder.java @@ -154,7 +154,7 @@ public abstract class AbstractDocumentedDataNodeContainerBuilder extends Abstrac } @Override - public final void addGrouping(final GroupingBuilder grouping) { + public void addGrouping(final GroupingBuilder grouping) { checkNotSealed(); QName groupingName = grouping.getQName(); for (GroupingBuilder addedGrouping : addedGroupings) { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java index 972f4689d5..0f7de6e7d2 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java @@ -20,6 +20,7 @@ import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ModuleImport; @@ -118,8 +119,9 @@ final class DependencyResolver { } while (progress); /// Additional check only for belongs-to statement - for (final SourceIdentifier sourceIdentifier : submodules.keySet()) { - final BelongsToDependency belongs = submodules.get(sourceIdentifier); + for (final Entry submodule : submodules.entrySet()) { + final BelongsToDependency belongs = submodule.getValue(); + final SourceIdentifier sourceIdentifier = submodule.getKey(); if (!isKnown(resolved, belongs)) { LOG.debug("Source {} is missing parent {}", sourceIdentifier, belongs); pending.add(sourceIdentifier); diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/AugmentationSchemaBuilderImplTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/AugmentationSchemaBuilderImplTest.java new file mode 100644 index 0000000000..0cf99507b6 --- /dev/null +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/AugmentationSchemaBuilderImplTest.java @@ -0,0 +1,63 @@ +/* + * 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.parser.impl; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.google.common.base.Optional; +import com.google.common.collect.Iterables; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.parser.builder.impl.AugmentationSchemaBuilderImpl; + +public class AugmentationSchemaBuilderImplTest { + + private AugmentationSchemaBuilderImpl augmentSchemaBuilderImpl; + private AugmentationSchemaBuilderImpl augmentSchemaBuilderImpl2; + private AugmentationSchemaBuilderImpl augmentSchemaBuilderImpl3; + private AugmentationSchemaBuilderImpl augmentSchemaBuilderImpl4; + private AugmentationSchema augmentSchema; + + @Before + public void init() { + augmentSchemaBuilderImpl = new AugmentationSchemaBuilderImpl("test-module", 10, "augment-test/rpc", SchemaPath.ROOT, 1); + augmentSchemaBuilderImpl2 = new AugmentationSchemaBuilderImpl("test-module", 10, "augment-test/rpc2", SchemaPath.ROOT, 1); + augmentSchemaBuilderImpl3 = augmentSchemaBuilderImpl; + augmentSchemaBuilderImpl4 = new AugmentationSchemaBuilderImpl("test-module", 10, null, SchemaPath.ROOT, 1); + augmentSchema = augmentSchemaBuilderImpl.build(); + } + + @Test + public void testgetPath() { + assertTrue(Iterables.isEmpty(augmentSchemaBuilderImpl.getPath().getPathFromRoot())); + } + + @Test + public void testEquals() { + assertFalse(augmentSchemaBuilderImpl.equals("test")); + assertFalse(augmentSchemaBuilderImpl.equals(null)); + assertTrue(augmentSchemaBuilderImpl.equals(augmentSchemaBuilderImpl3)); + assertFalse(augmentSchemaBuilderImpl4.equals(augmentSchemaBuilderImpl)); + assertFalse(augmentSchemaBuilderImpl.equals(augmentSchemaBuilderImpl2)); + } + + @Test + public void testGetOriginalDefinition() { + augmentSchema = augmentSchemaBuilderImpl.build(); + Optional origDefinition = augmentSchema.getOriginalDefinition(); + assertFalse(origDefinition.isPresent()); + } + + @Test + public void testGetUnknownSchemaNodes() { + assertTrue(Iterables.isEmpty(augmentSchema.getUnknownSchemaNodes())); + } +} diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/Bug2219Test.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/Bug2219Test.java new file mode 100644 index 0000000000..5834e145f7 --- /dev/null +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/Bug2219Test.java @@ -0,0 +1,49 @@ +/* + * 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.parser.impl; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder; +import org.opendaylight.yangtools.yang.parser.builder.impl.CopyUtils; +import org.opendaylight.yangtools.yang.parser.builder.impl.IdentityrefTypeBuilder; +import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleBuilder; + +/** + * NPE is rised during use of CopyUtils.copy operation for IdentityrefTypeBuilder. + * NPE occours in private getData method in CopyUtils.java during QName.create. + * + * The reason for exception is the old.getQName returns null since IdentityrefTypeBuilder.getQName() + * by implementation returns always null. + * + */ +public class Bug2219Test { + + private ModuleBuilder moduleBuilder; + + @Before + public void init() { + moduleBuilder = new ModuleBuilder("test-module", "somePath"); + } + + @Test + public void testCopyIdentityrefTypeBuilder() { + final String typedefLocalName = "identity-ref-test-type"; + final QName typedefQname = QName.create(moduleBuilder.getNamespace(), moduleBuilder.getRevision(), typedefLocalName); + final SchemaPath typedefPath = SchemaPath.create(true, typedefQname); + final IdentityrefTypeBuilder typeBuilder = new IdentityrefTypeBuilder(moduleBuilder.getModuleName(), 12, + "base:parent-identity", typedefPath); + + final TypeDefinitionBuilder copy = CopyUtils.copy(typeBuilder, moduleBuilder, true); + assertNotNull(copy); + } +} diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/ModuleIdentifierTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/ModuleIdentifierTest.java new file mode 100644 index 0000000000..22d30c5a67 --- /dev/null +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/ModuleIdentifierTest.java @@ -0,0 +1,82 @@ +/* + * 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.parser.impl; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.google.common.base.Optional; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Date; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; +import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleIdentifierImpl; + +public class ModuleIdentifierTest { + + private ModuleIdentifier moduleIdentifier; + private ModuleIdentifier moduleIdentifier2; + private ModuleIdentifier moduleIdentifier3; + private ModuleIdentifier moduleIdentifier4; + private ModuleIdentifier moduleIdentifier5; + + @Before + public void init() throws URISyntaxException { + Optional uri = Optional.of(new URI("testURI")); + Optional uri2 = Optional.of(new URI("testURI2")); + Optional revision = Optional.absent(); + moduleIdentifier = new ModuleIdentifierImpl("test-modulue", uri, revision); + moduleIdentifier2 = new ModuleIdentifierImpl("test-modulue2", uri, revision); + moduleIdentifier3 = moduleIdentifier; + moduleIdentifier4 = new ModuleIdentifierImpl("test-modulue", uri2, revision); + moduleIdentifier5 = new ModuleIdentifierImpl("test-modulue", uri, revision); + } + + @Test + public void testGetQNameModule() { + assertEquals(null, moduleIdentifier.getQNameModule().getRevision()); + } + + @Test + public void testGetRevision() { + assertEquals(null, moduleIdentifier.getRevision()); + } + + @Test + public void testGetName() { + assertEquals("test-modulue", moduleIdentifier.getName()); + } + + @Test + public void getNamespace() throws URISyntaxException { + assertEquals(new URI("testURI"), moduleIdentifier.getNamespace()); + } + + @Test + public void toStringTest() { + assertTrue(moduleIdentifier.toString().contains("ModuleIdentifier")); + } + + @Test + public void testHashCode() { + assertFalse(moduleIdentifier.hashCode() == moduleIdentifier2.hashCode()); + } + + @Test + public void testEquals() { + assertTrue(moduleIdentifier.equals(moduleIdentifier3)); + assertFalse(moduleIdentifier.equals(null)); + assertFalse(moduleIdentifier.equals("test")); + assertFalse(moduleIdentifier.equals(moduleIdentifier2)); + assertFalse(moduleIdentifier.equals(moduleIdentifier4)); + assertTrue(moduleIdentifier.equals(moduleIdentifier5)); + } +}