1 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
3 import java.util.HashMap;
5 import java.util.Map.Entry;
6 import java.util.concurrent.ExecutionException;
8 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
9 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
10 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
11 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
12 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
15 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
16 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
17 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
18 import org.opendaylight.yangtools.yang.binding.DataObject;
19 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
23 import com.google.common.base.Optional;
24 import com.google.common.util.concurrent.CheckedFuture;
26 public class BridgeOperationalState {
27 private static final Logger LOG = LoggerFactory.getLogger(BridgeOperationalState.class);
28 private DataBroker db;
29 private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes;
30 private Map<InstanceIdentifier<Node>, Node> operationalNodes = new HashMap<InstanceIdentifier<Node>, Node>();
32 public BridgeOperationalState(DataBroker db, AsyncDataChangeEvent<InstanceIdentifier<?>,
33 DataObject> changes) {
35 this.changes = changes;
36 ReadOnlyTransaction transaction = db.newReadOnlyTransaction();
37 Map<InstanceIdentifier<Node>, Node> nodeCreateOrUpdate =
38 TransactUtils.extractCreatedOrUpdatedOrRemoved(changes, Node.class);
39 if (nodeCreateOrUpdate != null) {
40 for (Entry<InstanceIdentifier<Node>, Node> entry: nodeCreateOrUpdate.entrySet()) {
41 CheckedFuture<Optional<Node>, ReadFailedException> nodeFuture =
42 transaction.read(LogicalDatastoreType.OPERATIONAL, entry.getKey());
44 Optional<Node> nodeOptional = nodeFuture.get();
45 if (nodeOptional.isPresent()) {
46 operationalNodes.put(entry.getKey(), nodeOptional.get());
48 } catch (InterruptedException e) {
49 LOG.warn("Error reading from datastore",e);
50 } catch (ExecutionException e) {
51 LOG.warn("Error reading from datastore",e);
58 public Optional<Node> getBridgeNode(InstanceIdentifier<?> iid) {
59 InstanceIdentifier<Node> nodeIid = iid.firstIdentifierOf(Node.class);
60 if (operationalNodes.containsKey(nodeIid)) {
61 return Optional.of(operationalNodes.get(nodeIid));
63 return Optional.absent();
66 public Optional<OvsdbBridgeAugmentation> getOvsdbBridgeAugmentation(InstanceIdentifier<?> iid) {
67 Optional<Node> nodeOptional = getBridgeNode(iid);
68 if (nodeOptional.isPresent() && nodeOptional.get().getAugmentation(OvsdbBridgeAugmentation.class) != null) {
69 return Optional.of(nodeOptional.get().getAugmentation(OvsdbBridgeAugmentation.class));
71 return Optional.absent();
74 public Optional<TerminationPoint> getBrideTermiationPoint(InstanceIdentifier<?> iid) {
75 Optional<Node> nodeOptional = getBridgeNode(iid);
76 if (nodeOptional.isPresent()) {
77 TerminationPointKey key = iid.firstKeyOf(TerminationPoint.class, TerminationPointKey.class);
79 for (TerminationPoint tp:nodeOptional.get().getTerminationPoint()) {
80 if (tp.getKey().equals(key)) {
81 return Optional.of(tp);
86 return Optional.absent();
89 public Optional<OvsdbTerminationPointAugmentation> getOvsdbTerminationPointAugmentation(InstanceIdentifier<?> iid) {
90 Optional<TerminationPoint> tpOptional = getBrideTermiationPoint(iid);
91 if (tpOptional.isPresent()
92 && tpOptional.get().getAugmentation(OvsdbTerminationPointAugmentation.class) != null) {
93 return Optional.of(tpOptional.get().getAugmentation(OvsdbTerminationPointAugmentation.class));
95 return Optional.absent();