Correct spelling of getBrideTermiationPoint()
[ovsdb.git] / southbound / southbound-impl / src / main / java / org / opendaylight / ovsdb / southbound / ovsdb / transact / BridgeOperationalState.java
1 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
2
3 import java.util.HashMap;
4 import java.util.Map;
5 import java.util.Map.Entry;
6 import java.util.concurrent.ExecutionException;
7
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.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryKey;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntryKey;
19 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
20 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
21 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
22 import org.opendaylight.yangtools.yang.binding.DataObject;
23 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 import com.google.common.base.Optional;
28 import com.google.common.util.concurrent.CheckedFuture;
29
30 public class BridgeOperationalState {
31     private static final Logger LOG = LoggerFactory.getLogger(BridgeOperationalState.class);
32     private DataBroker db;
33     private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes;
34     private Map<InstanceIdentifier<Node>, Node> operationalNodes = new HashMap<InstanceIdentifier<Node>, Node>();
35
36     public BridgeOperationalState(DataBroker db, AsyncDataChangeEvent<InstanceIdentifier<?>,
37             DataObject> changes) {
38         this.db = db;
39         this.changes = changes;
40         ReadOnlyTransaction transaction = db.newReadOnlyTransaction();
41         Map<InstanceIdentifier<Node>, Node> nodeCreateOrUpdate =
42                 TransactUtils.extractCreatedOrUpdatedOrRemoved(changes, Node.class);
43         if (nodeCreateOrUpdate != null) {
44             for (Entry<InstanceIdentifier<Node>, Node> entry: nodeCreateOrUpdate.entrySet()) {
45                 CheckedFuture<Optional<Node>, ReadFailedException> nodeFuture =
46                         transaction.read(LogicalDatastoreType.OPERATIONAL, entry.getKey());
47                 try {
48                     Optional<Node> nodeOptional = nodeFuture.get();
49                     if (nodeOptional.isPresent()) {
50                         operationalNodes.put(entry.getKey(), nodeOptional.get());
51                     }
52                 } catch (InterruptedException e) {
53                     LOG.warn("Error reading from datastore",e);
54                 } catch (ExecutionException e) {
55                     LOG.warn("Error reading from datastore",e);
56                 }
57             }
58         }
59         transaction.close();
60     }
61
62     public Optional<Node> getBridgeNode(InstanceIdentifier<?> iid) {
63         InstanceIdentifier<Node> nodeIid = iid.firstIdentifierOf(Node.class);
64         if (operationalNodes.containsKey(nodeIid)) {
65             return Optional.of(operationalNodes.get(nodeIid));
66         }
67         return Optional.absent();
68     }
69
70     public Optional<OvsdbBridgeAugmentation> getOvsdbBridgeAugmentation(InstanceIdentifier<?> iid) {
71         Optional<Node> nodeOptional = getBridgeNode(iid);
72         if (nodeOptional.isPresent() && nodeOptional.get().getAugmentation(OvsdbBridgeAugmentation.class) != null) {
73             return Optional.of(nodeOptional.get().getAugmentation(OvsdbBridgeAugmentation.class));
74         }
75         return Optional.absent();
76     }
77
78     public Optional<TerminationPoint> getBridgeTerminationPoint(InstanceIdentifier<?> iid) {
79         Optional<Node> nodeOptional = getBridgeNode(iid);
80         if (nodeOptional.isPresent()
81                 && nodeOptional.get().getTerminationPoint() != null
82                 && iid != null) {
83             TerminationPointKey key = iid.firstKeyOf(TerminationPoint.class, TerminationPointKey.class);
84             if (key != null) {
85                 for (TerminationPoint tp:nodeOptional.get().getTerminationPoint()) {
86                     if (tp.getKey().equals(key)) {
87                         return Optional.of(tp);
88                     }
89                 }
90             }
91         }
92         return Optional.absent();
93     }
94
95     public Optional<OvsdbTerminationPointAugmentation> getOvsdbTerminationPointAugmentation(InstanceIdentifier<?> iid) {
96         Optional<TerminationPoint> tpOptional = getBridgeTerminationPoint(iid);
97         if (tpOptional.isPresent()
98                 && tpOptional.get().getAugmentation(OvsdbTerminationPointAugmentation.class) != null) {
99             return Optional.of(tpOptional.get().getAugmentation(OvsdbTerminationPointAugmentation.class));
100         }
101         return Optional.absent();
102     }
103
104     public Optional<ControllerEntry> getControllerEntry(InstanceIdentifier<?> iid) {
105         Optional<OvsdbBridgeAugmentation> ovsdbBridgeOptional = getOvsdbBridgeAugmentation(iid);
106         if (ovsdbBridgeOptional.isPresent()
107                 && ovsdbBridgeOptional.get().getControllerEntry() != null
108                 && iid != null) {
109             ControllerEntryKey key = iid.firstKeyOf(ControllerEntry.class, ControllerEntryKey.class);
110             if (key != null) {
111                 for (ControllerEntry entry: ovsdbBridgeOptional.get().getControllerEntry()) {
112                     if (entry.getKey().equals(key)) {
113                         return Optional.of(entry);
114                     }
115                 }
116             }
117         }
118         return Optional.absent();
119     }
120
121     public Optional<ProtocolEntry> getProtocolEntry(InstanceIdentifier<ProtocolEntry> iid) {
122         Optional<OvsdbBridgeAugmentation> ovsdbBridgeOptional = getOvsdbBridgeAugmentation(iid);
123         if (ovsdbBridgeOptional.isPresent()
124                 && ovsdbBridgeOptional.get().getProtocolEntry() != null
125                 && iid != null) {
126             ProtocolEntryKey key = iid.firstKeyOf(ProtocolEntry.class, ProtocolEntryKey.class);
127             if (key != null) {
128                 for (ProtocolEntry entry: ovsdbBridgeOptional.get().getProtocolEntry()) {
129                     if (entry.getKey().equals(key)) {
130                         return Optional.of(entry);
131                     }
132                 }
133             }
134         }
135         return Optional.absent();
136     }
137
138 }