From d23f4be2c62a8fbab984fc7dea8ec2e317b8a662 Mon Sep 17 00:00:00 2001 From: Maros Marsalek Date: Tue, 14 Jun 2016 10:48:26 +0200 Subject: HONEYCOMB-92: Process modifications recursively + Fix update subtree, child writer lookup + Change initializers operation to merge Change-Id: I6ece7eb3d17d5a0b4a413189ddd383567d7e2270 Signed-off-by: Maros Marsalek --- .../impl/write/AbstractCompositeWriter.java | 29 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'v3po/translate-impl') diff --git a/v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/write/AbstractCompositeWriter.java b/v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/write/AbstractCompositeWriter.java index 2a08da12c..0212c086b 100644 --- a/v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/write/AbstractCompositeWriter.java +++ b/v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/write/AbstractCompositeWriter.java @@ -220,11 +220,16 @@ public abstract class AbstractCompositeWriter implements W private void writeSubtree(final InstanceIdentifier id, final DataObject dataAfter, final WriteContext ctx) throws WriteFailedException { LOG.debug("{}: Writing subtree: {}", this, id); - final Writer> writer = getNextWriter(id); + + final Writer> writer = getNextChildWriter(id); + final Writer> augWriter = getNextAgumentationWriter(id); if (writer != null) { LOG.debug("{}: Writing subtree: {} in: {}", this, id, writer); writer.update(id, null, dataAfter, ctx); + } else if (augWriter != null) { + LOG.debug("{}: Updating augmented subtree: {} in: {}", this, id, augWriter); + augWriter.update(id, null, dataAfter, ctx); } else { // If there's no dedicated writer, use write current // But we need current data after to do so @@ -243,12 +248,17 @@ public abstract class AbstractCompositeWriter implements W private void deleteSubtree(final InstanceIdentifier id, final DataObject dataBefore, final WriteContext ctx) throws WriteFailedException { LOG.debug("{}: Deleting subtree: {}", this, id); - final Writer> writer = getNextWriter(id); + + final Writer> writer = getNextChildWriter(id); + final Writer> augWriter = getNextAgumentationWriter(id); if (writer != null) { LOG.debug("{}: Deleting subtree: {} in: {}", this, id, writer); writer.update(id, dataBefore, null, ctx); - } else { + } else if (augWriter != null) { + LOG.debug("{}: Updating augmented subtree: {} in: {}", this, id, augWriter); + augWriter.update(id, dataBefore, null, ctx); + } else { updateSubtreeFromCurrent(id, ctx); } } @@ -270,21 +280,30 @@ public abstract class AbstractCompositeWriter implements W final DataObject dataAfter, final WriteContext ctx) throws WriteFailedException { LOG.debug("{}: Updating subtree: {}", this, id); - final Writer> writer = getNextWriter(id); + final Writer> writer = getNextChildWriter(id); + final Writer> augWriter = getNextAgumentationWriter(id); if (writer != null) { LOG.debug("{}: Updating subtree: {} in: {}", this, id, writer); writer.update(id, dataBefore, dataAfter, ctx); + } else if (augWriter != null) { + LOG.debug("{}: Updating augmented subtree: {} in: {}", this, id, augWriter); + augWriter.update(id, dataBefore, dataAfter, ctx); } else { updateSubtreeFromCurrent(id, ctx); } } - private Writer> getNextWriter(final InstanceIdentifier id) { + private Writer> getNextChildWriter(final InstanceIdentifier id) { final Class next = RWUtils.getNextId(id, getManagedDataObjectType()).getType(); return childWriters.get(next); } + private Writer> getNextAgumentationWriter(final InstanceIdentifier id) { + final Class next = RWUtils.getNextId(id, getManagedDataObjectType()).getType(); + return augWriters.get(next); + } + private static List reverseCollection(final Collection original) { // TODO find a better reverse mechanism (probably a different collection for child writers is necessary) final ArrayList list = Lists.newArrayList(original); -- cgit 1.2.3-korg