Merge "Break out Protocol Update and Remove into seperate commands"
[ovsdb.git] / southbound / southbound-impl / src / main / java / org / opendaylight / ovsdb / southbound / ovsdb / transact / ProtocolRemovedCommand.java
1 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
2
3 import static org.opendaylight.ovsdb.lib.operations.Operations.op;
4
5 import java.util.Map;
6 import java.util.Set;
7
8 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
9 import org.opendaylight.ovsdb.lib.notation.Mutator;
10 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
11 import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
12 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
13 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry;
16 import org.opendaylight.yangtools.yang.binding.DataObject;
17 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
18
19 import com.google.common.base.Optional;
20 import com.google.common.collect.Sets;
21
22 public class ProtocolRemovedCommand extends AbstractTransactCommand {
23
24     private Set<InstanceIdentifier<ProtocolEntry>> removed;
25     private Map<InstanceIdentifier<ProtocolEntry>, ProtocolEntry> operationalProtocolEntries;
26     private Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> updatedBridges;
27
28     public ProtocolRemovedCommand(BridgeOperationalState state,
29             AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
30         super(state, changes);
31         removed = TransactUtils.extractRemoved(getChanges(),ProtocolEntry.class);
32         operationalProtocolEntries = TransactUtils.extractOriginal(getChanges(),ProtocolEntry.class);
33         updatedBridges = TransactUtils.extractCreatedOrUpdatedOrRemoved(getChanges(),OvsdbBridgeAugmentation.class);
34     }
35
36     @Override
37     public void execute(TransactionBuilder transaction) {
38         for (InstanceIdentifier<ProtocolEntry> protocolIid : removed) {
39             InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid =
40                     protocolIid.firstIdentifierOf(OvsdbBridgeAugmentation.class);
41             OvsdbBridgeAugmentation ovsdbBridge = updatedBridges.get(bridgeIid);
42             Optional<ProtocolEntry> protocolEntryOptional = getOperationalState().getProtocolEntry(protocolIid);
43             if (ovsdbBridge != null
44                     && protocolEntryOptional.isPresent()) {
45                 ProtocolEntry protocolEntry = protocolEntryOptional.get();
46                 if (protocolEntry != null && protocolEntry.getProtocol() != null) {
47                     Bridge bridge = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Bridge.class);
48                     String protocolString = SouthboundConstants.OVSDB_PROTOCOL_MAP.get(protocolEntry.getProtocol());
49                     if (protocolString != null) {
50                         bridge.setProtocols(Sets.newHashSet(protocolString));
51                         transaction.add(op.mutate(bridge).addMutation(bridge.getProtocolsColumn().getSchema(),
52                                 Mutator.DELETE, bridge.getProtocolsColumn().getData()));
53                     }
54                 }
55             }
56         }
57
58     }
59
60 }