From: Tony Tkacik Date: Mon, 11 Nov 2013 13:27:23 +0000 (+0100) Subject: Fixed merge of entries in mock data store X-Git-Tag: jenkins-controller-bulk-release-prepare-only-2-1~434^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=cab23dab8fd05af0ee159c40973ce78712fa2b35 Fixed merge of entries in mock data store Change-Id: Ifdaf681ecfc846e58afe0358568e86afe1822b4e Signed-off-by: Tony Tkacik --- diff --git a/opendaylight/md-sal/sal-dom-broker/pom.xml b/opendaylight/md-sal/sal-dom-broker/pom.xml index f92d86af91..62dbe16e41 100644 --- a/opendaylight/md-sal/sal-dom-broker/pom.xml +++ b/opendaylight/md-sal/sal-dom-broker/pom.xml @@ -25,6 +25,12 @@ sal-common-util 1.0-SNAPSHOT + + + org.opendaylight.yangtools + yang-data-impl + 0.5.9-SNAPSHOT + org.opendaylight.controller sal-common-impl diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/DataUtils.xtend b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/DataUtils.xtend new file mode 100644 index 0000000000..1a2f947270 --- /dev/null +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/DataUtils.xtend @@ -0,0 +1,50 @@ +package org.opendaylight.controller.sal.dom.broker.impl + +import org.opendaylight.yangtools.yang.data.api.CompositeNode +import java.util.Map +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier +import java.util.Map.Entry +import java.util.HashSet +import java.util.ArrayList +import org.opendaylight.yangtools.yang.data.api.Node +import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl + +class DataUtils { + + static def CompositeNode read(Map map, InstanceIdentifier path) { + val root = map.get(path); + val childs = map.getChilds(path); + if(root === null && childs.empty) { + return null; + } + + return merge(path, root, childs); + } + + static def CompositeNode merge(InstanceIdentifier path, CompositeNode node, + HashSet> entries) { + val it = new ArrayList>(); + val qname = path.path.last.nodeType; + if (node != null) { + addAll(node.children); + } + for (entry : entries) { + val nesting = entry.key.path.size - path.path.size; + if (nesting === 1) { + add(entry.value); + } + } + return new CompositeNodeTOImpl(qname, null, it); + } + + static def getChilds(Map map, InstanceIdentifier path) { + val it = new HashSet>(); + for (entry : map.entrySet) { + if (path.contains(entry.key)) { + add(entry); + } + } + return it; + } + +} diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/HashMapDataStore.xtend b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/HashMapDataStore.xtend index 404842c1dc..7d57819cbf 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/HashMapDataStore.xtend +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/HashMapDataStore.xtend @@ -11,6 +11,7 @@ import org.opendaylight.controller.sal.common.util.Rpcs import java.util.Collections import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier import org.opendaylight.yangtools.yang.data.api.CompositeNode +import static extension org.opendaylight.controller.sal.dom.broker.impl.DataUtils.*; class HashMapDataStore // implements // @@ -20,12 +21,15 @@ DataReader, DataCommitHandler operational = new ConcurrentHashMap(); override readConfigurationData(InstanceIdentifier path) { - configuration.get(path); + configuration.read(path); } override readOperationalData(InstanceIdentifier path) { - operational.get(path); + operational.read(path); } + + + override requestCommit(DataModification modification) { return new HashMapDataStoreTransaction(modification, this);