X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Ftree%2FOperationWithModification.java;h=08fbcaa9a6f764ae7f46ce6e0f5c1211ce7ccbd0;hb=refs%2Fchanges%2F45%2F19145%2F7;hp=6d20d385ee194b908f6aa015679324fb5cbd3e39;hpb=ac5392a77724722de45600da3be29c4a8a8a681d;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/OperationWithModification.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/OperationWithModification.java index 6d20d385ee..08fbcaa9a6 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/OperationWithModification.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/OperationWithModification.java @@ -35,6 +35,22 @@ final class OperationWithModification { if (data instanceof NormalizedNodeContainer) { @SuppressWarnings({ "rawtypes", "unchecked" }) NormalizedNodeContainer> dataContainer = (NormalizedNodeContainer) data; + + /* + * if there was write before on this node and it is of NormalizedNodeContainer type + * merge would overwrite our changes. So we create write modifications from data children to + * retain children created by past write operation. + * These writes will then be pushed down in the tree while there are merge modifications on these children + */ + if (modification.getOperation().equals(LogicalOperation.WRITE)) { + @SuppressWarnings({ "rawtypes", "unchecked" }) + NormalizedNodeContainer> odlDataContainer = + (NormalizedNodeContainer) modification.getWrittenValue(); + for (NormalizedNode child : odlDataContainer.getValue()) { + PathArgument childId = child.getIdentifier(); + forChild(childId).write(child); + } + } for (NormalizedNode child : dataContainer.getValue()) { PathArgument childId = child.getIdentifier(); forChild(childId).recursiveMerge(child);