From 23b8b21ecc698f89ad8874725fd6818d2d71f079 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 18 Nov 2015 16:06:23 +0100 Subject: [PATCH] BUG-4638: Implement enum build validation EnumPairs need to be validated fro conflicting values. Also, the parser integration code needs to assign th eproper value. Change-Id: I28a57656231b110110dff58ba69c57ec6d76e3c7 Signed-off-by: Robert Varga --- .../util/type/EnumerationTypeBuilder.java | 11 ++++++- .../type/InvalidEnumDefinitionException.java | 32 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/InvalidEnumDefinitionException.java diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/EnumerationTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/EnumerationTypeBuilder.java index 46f1aa001b..467a621736 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/EnumerationTypeBuilder.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/EnumerationTypeBuilder.java @@ -7,8 +7,10 @@ */ package org.opendaylight.yangtools.yang.model.util.type; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; +import java.util.HashMap; import java.util.Map; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.SchemaPath; @@ -23,14 +25,21 @@ public final class EnumerationTypeBuilder extends TypeBuilder map = builder.build(); + final Map positionMap = new HashMap<>(); - // FIXME: run null value checks and re-generate EnumPairs as appropriate + for (EnumPair p : map.values()) { + final EnumPair conflict = positionMap.put(p.getValue(), p); + if (conflict != null) { + throw new InvalidEnumDefinitionException(p, "Bit %s conflicts on position with bit ", conflict); + } + } return new BaseEnumerationType(getPath(), getUnknownSchemaNodes(), map.values()); } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/InvalidEnumDefinitionException.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/InvalidEnumDefinitionException.java new file mode 100644 index 0000000000..7bab7be214 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/InvalidEnumDefinitionException.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2015 Pantheon Technologies s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.model.util.type; + +import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; + +@Beta +public class InvalidEnumDefinitionException extends IllegalArgumentException { + private static final long serialVersionUID = 1L; + private final EnumPair offendingEnum; + + protected InvalidEnumDefinitionException(final EnumPair offendingEnum, final String message) { + super(message); + this.offendingEnum = Preconditions.checkNotNull(offendingEnum); + } + + public InvalidEnumDefinitionException(final EnumPair offendingEnum, final String format, + final Object... args) { + this(offendingEnum, String.format(format, args)); + } + + public EnumPair getOffendingEnum() { + return offendingEnum; + } +} -- 2.36.6