summaryrefslogtreecommitdiffstats
path: root/v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/read/AbstractCompositeReader.java
diff options
context:
space:
mode:
authorMaros Marsalek <mmarsale@cisco.com>2016-04-12 10:13:37 +0200
committerMaros Marsalek <mmarsale@cisco.com>2016-04-12 10:13:37 +0200
commit28208ac2b1b9e068c51eee79cf1bfedc6a818195 (patch)
tree4bb01d13f3a070ddb7b6b4bd22393a61a527dad8 /v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/read/AbstractCompositeReader.java
parent1c690387dcfe8730ca9c0d4fc5ea732b172ae249 (diff)
HONEYCOMB-9: Migrate Interface listener
Change-Id: Iffde1ee21b749a8c8efa96c243f7f8bb0811b4c7 Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
Diffstat (limited to 'v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/read/AbstractCompositeReader.java')
-rw-r--r--v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/read/AbstractCompositeReader.java41
1 files changed, 29 insertions, 12 deletions
diff --git a/v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/read/AbstractCompositeReader.java b/v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/read/AbstractCompositeReader.java
index f9fa0eeaa..e8d79c538 100644
--- a/v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/read/AbstractCompositeReader.java
+++ b/v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/read/AbstractCompositeReader.java
@@ -22,6 +22,7 @@ import com.google.common.annotations.Beta;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
+import io.fd.honeycomb.v3po.translate.impl.TraversalType;
import io.fd.honeycomb.v3po.translate.util.ReflectionUtils;
import io.fd.honeycomb.v3po.translate.util.RWUtils;
import io.fd.honeycomb.v3po.translate.read.ChildReader;
@@ -52,10 +53,13 @@ abstract class AbstractCompositeReader<D extends DataObject, B extends Builder<D
private final Map<Class<? extends DataObject>, ChildReader<? extends ChildOf<D>>> childReaders;
private final Map<Class<? extends DataObject>, ChildReader<? extends Augmentation<D>>> augReaders;
private final InstanceIdentifier<D> instanceIdentifier;
+ private final TraversalType traversalType;
AbstractCompositeReader(final Class<D> managedDataObjectType,
final List<ChildReader<? extends ChildOf<D>>> childReaders,
- final List<ChildReader<? extends Augmentation<D>>> augReaders) {
+ final List<ChildReader<? extends Augmentation<D>>> augReaders,
+ final TraversalType traversalType) {
+ this.traversalType = traversalType;
this.childReaders = RWUtils.uniqueLinkedIndex(childReaders, RWUtils.MANAGER_CLASS_FUNCTION);
this.augReaders = RWUtils.uniqueLinkedIndex(augReaders, RWUtils.MANAGER_CLASS_AUG_FUNCTION);
this.instanceIdentifier = InstanceIdentifier.create(managedDataObjectType);
@@ -78,9 +82,31 @@ abstract class AbstractCompositeReader<D extends DataObject, B extends Builder<D
// Cache empty value to determine if anything has changed later TODO cache in a field
final D emptyValue = builder.build();
- LOG.trace("{}: Reading current attributes", this);
- readCurrentAttributes(id, builder, ctx);
+ switch (traversalType) {
+ case PREORDER: {
+ LOG.trace("{}: Reading current attributes", this);
+ readCurrentAttributes(id, builder, ctx);
+ readChildren(id, ctx, builder);
+ }
+ case POSTORDER: {
+ readChildren(id, ctx, builder);
+ LOG.trace("{}: Reading current attributes", this);
+ readCurrentAttributes(id, builder, ctx);
+ }
+ }
+
+ // Need to check whether anything was filled in to determine if data is present or not.
+ final D built = builder.build();
+ final Optional<D> read = built.equals(emptyValue)
+ ? Optional.<D>absent()
+ : Optional.of(built);
+
+ LOG.debug("{}: Current node read successfully. Result: {}", this, read);
+ return read;
+ }
+ private void readChildren(final InstanceIdentifier<D> id, final @Nonnull ReadContext ctx, final B builder)
+ throws ReadFailedException {
// TODO expect exceptions from reader
for (ChildReader<? extends ChildOf<D>> child : childReaders.values()) {
LOG.debug("{}: Reading child from: {}", this, child);
@@ -91,15 +117,6 @@ abstract class AbstractCompositeReader<D extends DataObject, B extends Builder<D
LOG.debug("{}: Reading augment from: {}", this, child);
child.read(id, builder, ctx);
}
-
- // Need to check whether anything was filled in to determine if data is present or not.
- final D built = builder.build();
- final Optional<D> read = built.equals(emptyValue)
- ? Optional.<D>absent()
- : Optional.of(built);
-
- LOG.debug("{}: Current node read successfully. Result: {}", this, read);
- return read;
}
@Nonnull