diff options
author | Marek Gradzki <mgradzki@cisco.com> | 2017-08-24 13:08:49 +0200 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2017-09-08 13:00:47 +0200 |
commit | f100b1a7d1689194f08bb22e1b849c4d840dadd0 (patch) | |
tree | b06370518b7665bae23540ee6a320dd7f4c12090 /vpp-common/vpp-translate-utils/src/main | |
parent | 0db62436d36cb05b6402a7b043db9ea9f1977f58 (diff) |
NamingContext.getNameIfPresent should not fail if name is missing
Also makes InterfaceChangeNotificationProducer notification translation
code more defensive.
The issue was revealed by HC2VPP-216 and HC2VPP-220.
Change-Id: I20792a51743ae621d86c1b9066d680bc2303ed82
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
Diffstat (limited to 'vpp-common/vpp-translate-utils/src/main')
-rw-r--r-- | vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/NamingContext.java | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/NamingContext.java b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/NamingContext.java index 5e0eea71b..8965de616 100644 --- a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/NamingContext.java +++ b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/NamingContext.java @@ -22,7 +22,9 @@ import static com.google.common.base.Preconditions.checkState; import com.google.common.base.Optional; import io.fd.honeycomb.translate.MappingContext; import io.fd.honeycomb.translate.util.RWUtils; +import java.util.List; import java.util.stream.Collector; +import java.util.stream.Collectors; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.Contexts; import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.NamingContextKey; @@ -92,13 +94,21 @@ public final class NamingContext implements AutoCloseable { public synchronized Optional<String> getNameIfPresent(final int index, @Nonnull final MappingContext mappingContext) { final Optional<Mappings> read = mappingContext.read(namingContextIid.child(Mappings.class)); + if (!read.isPresent()) { + return Optional.absent(); + } - return read.isPresent() - ? Optional.of(read.get().getMapping().stream() + final List<Mapping> mappings = read.get().getMapping().stream() .filter(mapping -> mapping.getIndex().equals(index)) - .collect(SINGLE_ITEM_COLLECTOR) - .getName()) - : Optional.absent(); + .collect(Collectors.toList()); + + if (mappings.size() > 1) { + throw new IllegalStateException("Multiple mappings defined with index=" + index + ": " + mappings); + } else if (mappings.size() == 1) { + return Optional.of(mappings.get(0).getName()); + } else { + return Optional.absent(); + } } /** |