X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Futils%2FNormalizedNodeAggregator.java;h=4a17978f1ca6b81ff737eaa838886c82e29caa1e;hp=f587889ec0648d64dd20e48832ddaaa78b5c50dc;hb=1d5ca4009be6c61d7b61989799037ad8f1ab7a75;hpb=20a32e6459fd1e27e7669bf1ebc7742b96787b94 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregator.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregator.java index f587889ec0..4a17978f1c 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregator.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregator.java @@ -7,65 +7,64 @@ */ package org.opendaylight.controller.cluster.datastore.utils; -import com.google.common.base.Optional; import java.util.List; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import java.util.Optional; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; -import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.data.tree.api.DataTree; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeConfiguration; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification; +import org.opendaylight.yangtools.yang.data.tree.api.DataValidationFailedException; +import org.opendaylight.yangtools.yang.data.tree.impl.di.InMemoryDataTreeFactory; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; public final class NormalizedNodeAggregator { private final YangInstanceIdentifier rootIdentifier; - private final List>> nodes; + private final List> nodes; private final DataTree dataTree; private NormalizedNodeAggregator(final YangInstanceIdentifier rootIdentifier, - final List>> nodes, final SchemaContext schemaContext, + final List> nodes, final EffectiveModelContext schemaContext, final LogicalDatastoreType logicalDatastoreType) { this.rootIdentifier = rootIdentifier; this.nodes = nodes; - this.dataTree = new InMemoryDataTreeFactory().create( - logicalDatastoreType == LogicalDatastoreType.CONFIGURATION ? DataTreeConfiguration.DEFAULT_CONFIGURATION - : DataTreeConfiguration.DEFAULT_OPERATIONAL); - this.dataTree.setSchemaContext(schemaContext); + dataTree = new InMemoryDataTreeFactory().create(logicalDatastoreType == LogicalDatastoreType.CONFIGURATION + ? DataTreeConfiguration.DEFAULT_CONFIGURATION : DataTreeConfiguration.DEFAULT_OPERATIONAL); + dataTree.setEffectiveModelContext(schemaContext); } /** * Combine data from all the nodes in the list into a tree with root as rootIdentifier. */ - public static Optional> aggregate(final YangInstanceIdentifier rootIdentifier, - final List>> nodes, final SchemaContext schemaContext, + public static Optional aggregate(final YangInstanceIdentifier rootIdentifier, + final List> nodes, final EffectiveModelContext schemaContext, final LogicalDatastoreType logicalDatastoreType) throws DataValidationFailedException { return new NormalizedNodeAggregator(rootIdentifier, nodes, schemaContext, logicalDatastoreType).aggregate(); } - private Optional> aggregate() throws DataValidationFailedException { - return combine().getRootNode(); - } - - private NormalizedNodeAggregator combine() throws DataValidationFailedException { + private Optional aggregate() throws DataValidationFailedException { final DataTreeModification mod = dataTree.takeSnapshot().newModification(); + boolean nodePresent = false; - for (final Optional> node : nodes) { + for (final Optional node : nodes) { if (node.isPresent()) { - mod.merge(rootIdentifier, node.get()); + mod.merge(rootIdentifier, node.orElseThrow()); + nodePresent = true; } } + + if (!nodePresent) { + return Optional.empty(); + } + + mod.ready(); dataTree.validate(mod); final DataTreeCandidate candidate = dataTree.prepare(mod); dataTree.commit(candidate); - return this; - } - - private Optional> getRootNode() { - return Optional.fromJavaUtil(dataTree.takeSnapshot().readNode(rootIdentifier)); + return dataTree.takeSnapshot().readNode(rootIdentifier); } }