BUG-4295: instantiate MERGE operations lazily 53/26853/40
authorPeter Kajsa <pkajsa@cisco.com>
Tue, 5 Jan 2016 09:14:00 +0000 (10:14 +0100)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 20 Jan 2016 11:21:20 +0000 (11:21 +0000)
commitf29f6b8445fae2505bce3feedfb3d005695adcdd
tree02278e63338b7814ca081473f32aea58e93e6c45
parent0d275f948acbeaaa85864c886580fbc87e157089
BUG-4295: instantiate MERGE operations lazily

This patch reworks how merges are done in a DataTreeModification by
moving the logic to SchemaAwareApplyOperation, which is the final
recipient of the resulting ModifiedNode.

This way the code is co-located and can be specialized based on
information available for that particular node, and the container merge
code is cleanly separated from the leaf node code, which turns each
merge into a write.

When a merge occurs on a previously-written node, we graft all merged
children onto the write, using recursion only when necessary.

checkPresentChild method renamed.
Fix of ModifiedNode and added unit test.

Change-Id: I674e3d2150e796472e831abdcfa0fad582b69759
Signed-off-by: Robert Varga <rovarga@cisco.com>
Signed-off-by: Filip.Gregor <fgregor@cisco.com>
Signed-off-by: Peter Kajsa <pkajsa@cisco.com>
23 files changed:
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractNodeContainerModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractValueNodeModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AlwaysFailOperation.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AugmentationModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ChoiceModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ContainerModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ListEntryModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MinMaxElementsValidation.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ModificationApplyOperation.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ModifiedNode.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/OperationWithModification.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/OrderedLeafSetModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/OrderedMapModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/RootModificationApplyOperation.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/SchemaAwareApplyOperation.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/StructuralContainerModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/UnkeyedListItemModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/UnkeyedListModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/UnorderedLeafSetModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/UnorderedMapModificationStrategy.java
yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/Bug4295Test.java [new file with mode: 0644]
yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/Bug4454Test.java
yang/yang-data-impl/src/test/resources/bug-4295/foo.yang [new file with mode: 0644]