Merge dev/fluorine work across to master
[unimgr.git] / ovs-driver / src / main / java / org / opendaylight / unimgr / mef / nrp / ovs / util / MdsalUtilsExt.java
diff --git a/ovs-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/ovs/util/MdsalUtilsExt.java b/ovs-driver/src/main/java/org/opendaylight/unimgr/mef/nrp/ovs/util/MdsalUtilsExt.java
new file mode 100644 (file)
index 0000000..aa49b3b
--- /dev/null
@@ -0,0 +1,51 @@
+package org.opendaylight.unimgr.mef.nrp.ovs.util;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Utility functions.
+ * @author bartosz.michalik@amartus.com
+ */
+public class MdsalUtilsExt {
+    private static final Logger LOG = LoggerFactory.getLogger(MdsalUtilsExt.class);
+
+    /**
+     * Read a specific Link from a specific datastore.
+     * @param dataBroker The dataBroker instance to create transactions
+     * @param store The datastore type.
+     * @param topologyName The topology name.
+     * @return An Optional Link instance
+     */
+    public static final Optional<Topology> readTopology(DataBroker dataBroker,
+                                                        LogicalDatastoreType store,
+                                                        String topologyName) {
+        final ReadTransaction read = dataBroker.newReadOnlyTransaction();
+        final TopologyId topologyId = new TopologyId(topologyName);
+        InstanceIdentifier<Topology> topologyInstanceId
+                = InstanceIdentifier.builder(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(topologyId))
+                .build();
+        final CheckedFuture<Optional<Topology>, ReadFailedException> topologyFuture =
+                read.read(store, topologyInstanceId);
+
+        try {
+            return topologyFuture.checkedGet();
+        } catch (final ReadFailedException e) {
+            LOG.info("Unable to read topology with Iid {}", topologyInstanceId, e);
+        }
+        return Optional.absent();
+    }
+}