diff options
author | Jan Srnicek <jsrnicek@cisco.com> | 2017-02-24 10:39:55 +0100 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2017-02-27 11:42:19 +0000 |
commit | ec78f178f542369fdfd696fdc6e4bb872780ac87 (patch) | |
tree | 129206bdf7bb3ad62257d5cfca776e264f70fad6 /infra/translate-utils | |
parent | 309d5e1561ba42ee491fa33c3b8c24849dc003fa (diff) |
HONEYCOMB-344 - structural reader for list
Change-Id: Ia02ed73daaeea547d49c9ec2d4d7d10f4db85b5e
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
Diffstat (limited to 'infra/translate-utils')
4 files changed, 154 insertions, 34 deletions
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 @@ -73,6 +73,11 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-all</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <scope>test</scope> 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<C extends DataObject & Identifiable<K>, K extends Identifier<C>, B extends Builder<C>> +public class ReflexiveListReaderCustomizer<C extends DataObject & Identifiable<K>, K extends Identifier<C>, B extends Builder<C>> extends ReflexiveReaderCustomizer<C, B> implements ListReaderCustomizer<C, K, B> { + private final List<K> staticKeys; - public ReflexiveListReaderCustomizer(final Class<C> typeClass, final Class<B> builderClass) { + public ReflexiveListReaderCustomizer(@Nonnull final Class<C> typeClass, @Nonnull final Class<B> builderClass, + @Nonnull final List<K> 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<C extends DataObject & Ident throw new IllegalArgumentException("Unable to set " + readData + " to " + parentBuilder, e); } } + + @Nonnull + @Override + public List<K> getAllIds(@Nonnull InstanceIdentifier<C> 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<TestingListObject.TestingListKey> { + + private final TestingListKey key; + + TestingListObject(final TestingListKey key) { + this.key = key; + } + + @Override + public Class<? extends DataContainer> getImplementedInterface() { + return DataObject.class; + } + + @Override + public TestingListKey getKey() { + return key; + } + + static class TestingListKey implements Identifier<TestingListObject> { + + 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<TestingListObject> { + + 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<TestingListObject.TestingListKey> staticKeys = Arrays.asList(keyOne, keyTwo); + + final ReflexiveListReaderCustomizer<TestingListObject, TestingListObject.TestingListKey, TestingListObjectBuilder> customizer + = new ReflexiveListReaderCustomizer<>(TestingListObject.class, TestingListObjectBuilder.class, staticKeys); + + final List<TestingListObject.TestingListKey> 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<TestingListObject, TestingListObject.TestingListKey, TestingListBuilder> reflexReaderCustomizer = new ReflexiveListReaderCustomizer<TestingListObject, TestingListObject.TestingListKey, TestingListBuilder> - (TestingListObject.class, TestingListBuilder.class) { - - @Nonnull - @Override - public List<TestingListObject.TestingListKey> getAllIds( - @Nonnull final InstanceIdentifier<TestingListObject> 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<TestingListObject> readValue = Lists.newArrayList(new TestingListObject(), new TestingListObject()); |