package org.opendaylight.ovsdb.southbound.ovsdb.transact; import static org.opendaylight.ovsdb.lib.operations.Operations.op; import java.util.Map; import java.util.Set; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; import org.opendaylight.ovsdb.lib.notation.Mutator; import org.opendaylight.ovsdb.lib.operations.TransactionBuilder; import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils; import org.opendaylight.ovsdb.schema.openvswitch.Bridge; import org.opendaylight.ovsdb.southbound.SouthboundConstants; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import com.google.common.base.Optional; import com.google.common.collect.Sets; public class ProtocolRemovedCommand extends AbstractTransactCommand { private Set> removed; private Map, ProtocolEntry> operationalProtocolEntries; private Map, OvsdbBridgeAugmentation> updatedBridges; public ProtocolRemovedCommand(BridgeOperationalState state, AsyncDataChangeEvent, DataObject> changes) { super(state, changes); removed = TransactUtils.extractRemoved(getChanges(),ProtocolEntry.class); operationalProtocolEntries = TransactUtils.extractOriginal(getChanges(),ProtocolEntry.class); updatedBridges = TransactUtils.extractCreatedOrUpdatedOrRemoved(getChanges(),OvsdbBridgeAugmentation.class); } @Override public void execute(TransactionBuilder transaction) { for (InstanceIdentifier protocolIid : removed) { InstanceIdentifier bridgeIid = protocolIid.firstIdentifierOf(OvsdbBridgeAugmentation.class); OvsdbBridgeAugmentation ovsdbBridge = updatedBridges.get(bridgeIid); Optional protocolEntryOptional = getOperationalState().getProtocolEntry(protocolIid); if (ovsdbBridge != null && protocolEntryOptional.isPresent()) { ProtocolEntry protocolEntry = protocolEntryOptional.get(); if (protocolEntry != null && protocolEntry.getProtocol() != null) { Bridge bridge = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Bridge.class); String protocolString = SouthboundConstants.OVSDB_PROTOCOL_MAP.get(protocolEntry.getProtocol()); if (protocolString != null) { bridge.setProtocols(Sets.newHashSet(protocolString)); transaction.add(op.mutate(bridge).addMutation(bridge.getProtocolsColumn().getSchema(), Mutator.DELETE, bridge.getProtocolsColumn().getData())); } } } } } }