diff options
author | Maros Marsalek <mmarsale@cisco.com> | 2016-04-12 10:13:37 +0200 |
---|---|---|
committer | Maros Marsalek <mmarsale@cisco.com> | 2016-04-12 10:13:37 +0200 |
commit | 28208ac2b1b9e068c51eee79cf1bfedc6a818195 (patch) | |
tree | 4bb01d13f3a070ddb7b6b4bd22393a61a527dad8 /v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/read/AbstractCompositeReader.java | |
parent | 1c690387dcfe8730ca9c0d4fc5ea732b172ae249 (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.java | 41 |
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 |