/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2015, 2016 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
import static org.opendaylight.ovsdb.lib.operations.Operations.op;
+import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import javax.annotation.Nonnull;
+
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.ovsdb.lib.notation.UUID;
import org.opendaylight.ovsdb.lib.operations.Insert;
+import org.opendaylight.ovsdb.lib.operations.Mutate;
import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
import org.opendaylight.ovsdb.southbound.SouthboundConstants;
import org.opendaylight.ovsdb.southbound.SouthboundMapper;
import org.opendaylight.ovsdb.southbound.SouthboundUtil;
+import org.opendaylight.ovsdb.utils.yang.YangUtils;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeInternal;
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.BridgeExternalIds;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeOtherConfigs;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
public class BridgeUpdateCommand extends AbstractTransactCommand {
created.entrySet()) {
updateBridge(transaction, ovsdbManagedNodeEntry.getKey(), ovsdbManagedNodeEntry.getValue());
}
+ Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> updated =
+ TransactUtils.extractUpdated(getChanges(),OvsdbBridgeAugmentation.class);
+ for (Entry<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> ovsdbManagedNodeEntry:
+ updated.entrySet()) {
+ updateBridge(transaction, ovsdbManagedNodeEntry.getKey(), ovsdbManagedNodeEntry.getValue());
+ }
}
setName(bridge, ovsdbManagedNode,operationalBridgeOptional);
setPort(transaction, bridge, ovsdbManagedNode);
transaction.add(op.insert(bridge));
- } else if (bridge.getName() != null) {
+ } else {
+ String existingBridgeName = operationalBridgeOptional.get().getBridgeName().getValue();
// Name is immutable, and so we *can't* update it. So we use extraBridge for the schema stuff
Bridge extraBridge = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Bridge.class);
extraBridge.setName("");
transaction.add(op.update(bridge)
- .where(extraBridge.getNameColumn().getSchema().opEqual(bridge.getName()))
+ .where(extraBridge.getNameColumn().getSchema().opEqual(existingBridgeName))
.build());
+ stampInstanceIdentifier(transaction, iid.firstIdentifierOf(Node.class),existingBridgeName);
}
}
private void setOpenDaylightExternalIds(Bridge bridge, InstanceIdentifier<OvsdbBridgeAugmentation> iid,
OvsdbBridgeAugmentation ovsdbManagedNode) {
// Set the iid external_id
- Map<String, String> externalIdMap = new HashMap<String, String>();
+ Map<String, String> externalIdMap = new HashMap<>();
externalIdMap.put(SouthboundConstants.IID_EXTERNAL_ID_KEY, SouthboundUtil.serializeInstanceIdentifier(iid));
// Set user provided external ids
- List<BridgeExternalIds> bridgeExternalId = ovsdbManagedNode.getBridgeExternalIds();
- if (bridgeExternalId != null) {
- for (BridgeExternalIds externalId : bridgeExternalId) {
- externalIdMap.put(externalId.getBridgeExternalIdKey(), externalId.getBridgeExternalIdValue());
- }
- }
try {
- bridge.setExternalIds(ImmutableMap.copyOf(externalIdMap));
+ YangUtils.copyYangKeyValueListToMap(externalIdMap, ovsdbManagedNode.getBridgeExternalIds(),
+ BridgeExternalIds::getBridgeExternalIdKey, BridgeExternalIds::getBridgeExternalIdValue);
} catch (NullPointerException e) {
LOG.warn("Incomplete bridge external Id", e);
}
+ bridge.setExternalIds(externalIdMap);
}
- private void setOpenDaylightOtherConfig(Bridge bridge, OvsdbBridgeAugmentation ovsdbManagedNode) {
- List<BridgeOtherConfigs> bridgeOtherConfig = ovsdbManagedNode.getBridgeOtherConfigs();
- if (bridgeOtherConfig != null) {
- HashMap<String, String> otherConfigMap = new HashMap<String, String>();
- for (BridgeOtherConfigs otherConf : bridgeOtherConfig) {
- otherConfigMap.put(otherConf.getBridgeOtherConfigKey(), otherConf.getBridgeOtherConfigValue());
- }
- try {
- bridge.setOtherConfig(ImmutableMap.copyOf(otherConfigMap));
- } catch (NullPointerException e) {
- LOG.warn("Incomplete bridge other config");
- }
+ private void setOpenDaylightOtherConfig(@Nonnull Bridge bridge, @Nonnull OvsdbBridgeAugmentation ovsdbManagedNode) {
+ try {
+ bridge.setOtherConfig(YangUtils.convertYangKeyValueListToMap(ovsdbManagedNode.getBridgeOtherConfigs(),
+ BridgeOtherConfigs::getBridgeOtherConfigKey, BridgeOtherConfigs::getBridgeOtherConfigValue));
+ } catch (NullPointerException e) {
+ LOG.warn("Incomplete bridge other config", e);
}
}
}
}
-}
+ private void stampInstanceIdentifier(TransactionBuilder transaction,InstanceIdentifier<Node> iid,
+ String bridgeName) {
+ Bridge bridge = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Bridge.class);
+ bridge.setName(bridgeName);
+ bridge.setExternalIds(Collections.<String,String>emptyMap());
+ Mutate mutate = TransactUtils.stampInstanceIdentifierMutation(transaction,
+ iid,
+ bridge.getSchema(),
+ bridge.getExternalIdsColumn().getSchema());
+ transaction.add(mutate
+ .where(bridge.getNameColumn().getSchema().opEqual(bridgeName))
+ .build());
+ }
+
+}
\ No newline at end of file