From ec78f178f542369fdfd696fdc6e4bb872780ac87 Mon Sep 17 00:00:00 2001 From: Jan Srnicek Date: Fri, 24 Feb 2017 10:39:55 +0100 Subject: HONEYCOMB-344 - structural reader for list Change-Id: Ia02ed73daaeea547d49c9ec2d4d7d10f4db85b5e Signed-off-by: Jan Srnicek --- infra/translate-utils/pom.xml | 5 + .../util/read/ReflexiveListReaderCustomizer.java | 32 ++++-- .../read/ReflexiveListReaderCustomizerTest.java | 115 +++++++++++++++++++++ .../util/read/ReflexiveReaderCustomizerTest.java | 36 ++----- 4 files changed, 154 insertions(+), 34 deletions(-) create mode 100644 infra/translate-utils/src/test/java/io/fd/honeycomb/translate/util/read/ReflexiveListReaderCustomizerTest.java (limited to 'infra/translate-utils') diff --git a/infra/translate-utils/pom.xml b/infra/translate-utils/pom.xml index db26ac4c6..d0431505e 100644 --- a/infra/translate-utils/pom.xml +++ b/infra/translate-utils/pom.xml @@ -72,6 +72,11 @@ junit test + + org.hamcrest + hamcrest-all + test + org.mockito mockito-core diff --git a/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/read/ReflexiveListReaderCustomizer.java b/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/read/ReflexiveListReaderCustomizer.java index 62dbcd6c9..b6430a355 100644 --- a/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/read/ReflexiveListReaderCustomizer.java +++ b/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/read/ReflexiveListReaderCustomizer.java @@ -16,31 +16,39 @@ package io.fd.honeycomb.translate.util.read; -import static com.google.common.base.Preconditions.checkArgument; - import com.google.common.base.Optional; +import io.fd.honeycomb.translate.read.ReadContext; +import io.fd.honeycomb.translate.read.ReadFailedException; import io.fd.honeycomb.translate.spi.read.ListReaderCustomizer; import io.fd.honeycomb.translate.util.ReflectionUtils; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Collections; -import java.util.List; -import javax.annotation.Nonnull; import org.opendaylight.yangtools.concepts.Builder; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.Identifiable; import org.opendaylight.yangtools.yang.binding.Identifier; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +import javax.annotation.Nonnull; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Collections; +import java.util.List; + +import static com.google.common.base.Preconditions.*; /** * Might be slow. */ -public abstract class ReflexiveListReaderCustomizer, K extends Identifier, B extends Builder> +public class ReflexiveListReaderCustomizer, K extends Identifier, B extends Builder> extends ReflexiveReaderCustomizer implements ListReaderCustomizer { + private final List staticKeys; - public ReflexiveListReaderCustomizer(final Class typeClass, final Class builderClass) { + public ReflexiveListReaderCustomizer(@Nonnull final Class typeClass, @Nonnull final Class builderClass, + @Nonnull final List staticKeys) { super(typeClass, builderClass); + this.staticKeys = checkNotNull(staticKeys, "Static keys cannot be null"); + checkState(!this.staticKeys.isEmpty(), "No static keys provided"); } @Override @@ -62,4 +70,10 @@ public abstract class ReflexiveListReaderCustomizer getAllIds(@Nonnull InstanceIdentifier id, @Nonnull ReadContext context) throws ReadFailedException { + return staticKeys; + } } diff --git a/infra/translate-utils/src/test/java/io/fd/honeycomb/translate/util/read/ReflexiveListReaderCustomizerTest.java b/infra/translate-utils/src/test/java/io/fd/honeycomb/translate/util/read/ReflexiveListReaderCustomizerTest.java new file mode 100644 index 000000000..fe12ff699 --- /dev/null +++ b/infra/translate-utils/src/test/java/io/fd/honeycomb/translate/util/read/ReflexiveListReaderCustomizerTest.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.fd.honeycomb.translate.util.read; + +import io.fd.honeycomb.translate.read.ReadContext; +import io.fd.honeycomb.translate.read.ReadFailedException; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.opendaylight.yangtools.concepts.Builder; +import org.opendaylight.yangtools.yang.binding.*; + +import java.util.Arrays; +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.hasSize; + +public class ReflexiveListReaderCustomizerTest { + + static class TestingListObject implements DataObject, Identifiable { + + private final TestingListKey key; + + TestingListObject(final TestingListKey key) { + this.key = key; + } + + @Override + public Class getImplementedInterface() { + return DataObject.class; + } + + @Override + public TestingListKey getKey() { + return key; + } + + static class TestingListKey implements Identifier { + + private final String value; + + TestingListKey(final String value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + TestingListKey that = (TestingListKey) o; + + return value.equals(that.value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } + } + } + + static class TestingListObjectBuilder implements Builder { + + private final TestingListObject.TestingListKey key; + + TestingListObjectBuilder(final TestingListObject.TestingListKey key) { + this.key = key; + } + + @Override + public TestingListObject build() { + return new TestingListObject(key); + } + } + + @Mock + private ReadContext readContext; + + @Before + public void init() { + MockitoAnnotations.initMocks(this); + } + + @Test + public void testStaticKeys() throws ReadFailedException { + final TestingListObject.TestingListKey keyOne = new TestingListObject.TestingListKey("1"); + final TestingListObject.TestingListKey keyTwo = new TestingListObject.TestingListKey("2"); + final List staticKeys = Arrays.asList(keyOne, keyTwo); + + final ReflexiveListReaderCustomizer customizer + = new ReflexiveListReaderCustomizer<>(TestingListObject.class, TestingListObjectBuilder.class, staticKeys); + + final List allIds = customizer.getAllIds(InstanceIdentifier.create(TestingListObject.class), readContext); + + assertThat(allIds, hasSize(2)); + assertThat(allIds, contains(keyOne, keyTwo)); + } +} diff --git a/infra/translate-utils/src/test/java/io/fd/honeycomb/translate/util/read/ReflexiveReaderCustomizerTest.java b/infra/translate-utils/src/test/java/io/fd/honeycomb/translate/util/read/ReflexiveReaderCustomizerTest.java index 7fb67be6e..cf341a74e 100644 --- a/infra/translate-utils/src/test/java/io/fd/honeycomb/translate/util/read/ReflexiveReaderCustomizerTest.java +++ b/infra/translate-utils/src/test/java/io/fd/honeycomb/translate/util/read/ReflexiveReaderCustomizerTest.java @@ -16,26 +16,21 @@ package io.fd.honeycomb.translate.util.read; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verifyZeroInteractions; - import com.google.common.collect.Lists; import io.fd.honeycomb.translate.read.ReadContext; -import io.fd.honeycomb.translate.read.ReadFailedException; -import java.util.Collections; -import java.util.List; -import javax.annotation.Nonnull; import org.junit.Test; import org.mockito.Mock; import org.opendaylight.yangtools.concepts.Builder; -import org.opendaylight.yangtools.yang.binding.Augmentation; -import org.opendaylight.yangtools.yang.binding.DataContainer; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.Identifiable; -import org.opendaylight.yangtools.yang.binding.Identifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.*; + +import javax.annotation.Nonnull; +import java.util.Collections; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verifyZeroInteractions; public class ReflexiveReaderCustomizerTest { @@ -80,16 +75,7 @@ public class ReflexiveReaderCustomizerTest { final ReflexiveListReaderCustomizer reflexReaderCustomizer = new ReflexiveListReaderCustomizer - (TestingListObject.class, TestingListBuilder.class) { - - @Nonnull - @Override - public List getAllIds( - @Nonnull final InstanceIdentifier id, - @Nonnull final ReadContext context) throws ReadFailedException { - return Lists.newArrayList(); - } - }; + (TestingListObject.class, TestingListBuilder.class, Collections.singletonList(new TestingListObject.TestingListKey())); final TestingBuilderParent parentBuilder = new TestingBuilderParent(); final List readValue = Lists.newArrayList(new TestingListObject(), new TestingListObject()); -- cgit 1.2.3-korg