Fix findbugs violations in hwvtepsouthbound-impl
[ovsdb.git] / hwvtepsouthbound / hwvtepsouthbound-impl / src / main / java / org / opendaylight / ovsdb / hwvtepsouthbound / transactions / md / HwvtepManagerUpdateCommand.java
index 8c8710baf489fad1f3948d706b1f061219ebbb60..3555583f4c4f2b44fe05aa8a1c1ccec4a4c50796 100644 (file)
@@ -8,33 +8,96 @@
 
 package org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md;
 
+import com.google.common.base.Optional;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepConnectionInstance;
+import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundUtil;
 import org.opendaylight.ovsdb.lib.message.TableUpdates;
 import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
 import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
 import org.opendaylight.ovsdb.schema.hardwarevtep.Manager;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.Managers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.ManagersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.managers.ManagerOtherConfigs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.managers.ManagerOtherConfigsBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class HwvtepManagerUpdateCommand extends AbstractTransactionCommand {
 
     private static final Logger LOG = LoggerFactory.getLogger(HwvtepManagerUpdateCommand.class);
-    private Map<UUID, Manager> updatedMgrRows;
-    private Map<UUID, Manager> oldMgrRows;
+    private final Map<UUID, Manager> updatedMgrRows;
+    private final Map<UUID, Manager> oldMgrRows;
 
-    public HwvtepManagerUpdateCommand(HwvtepConnectionInstance key, TableUpdates updates,
-            DatabaseSchema dbSchema) {
+    public HwvtepManagerUpdateCommand(HwvtepConnectionInstance key, TableUpdates updates, DatabaseSchema dbSchema) {
         super(key, updates, dbSchema);
-        updatedMgrRows = TyperUtils.extractRowsUpdated(Manager.class, getUpdates(),getDbSchema());
-        oldMgrRows = TyperUtils.extractRowsOld(Manager.class, getUpdates(),getDbSchema());
+        updatedMgrRows = TyperUtils.extractRowsUpdated(Manager.class, getUpdates(), getDbSchema());
+        oldMgrRows = TyperUtils.extractRowsOld(Manager.class, getUpdates(), getDbSchema());
     }
 
     @Override
     public void execute(ReadWriteTransaction transaction) {
-        // TODO Auto-generated method stub
+        for (Manager manager : updatedMgrRows.values()) {
+            updateManager(transaction, manager);
+        }
     }
 
+    private void updateManager(ReadWriteTransaction transaction, Manager manager) {
+        final InstanceIdentifier<Node> connectionIId = getOvsdbConnectionInstance().getInstanceIdentifier();
+        Optional<Node> connection = HwvtepSouthboundUtil.readNode(transaction, connectionIId);
+        if (connection.isPresent()) {
+            LOG.debug("Connection {} is present", connection.get());
+            Node connectionNode = buildConnectionNode(manager);
+            transaction.merge(LogicalDatastoreType.OPERATIONAL, connectionIId, connectionNode);
+            // TODO: Delete entries that are no longer needed
+        }
+    }
+
+    private Node buildConnectionNode(Manager manager) {
+        // Update node with Manager reference
+        NodeBuilder connectionNode = new NodeBuilder();
+        connectionNode.setNodeId(getOvsdbConnectionInstance().getNodeId());
+        ManagersBuilder managersBuilder = new ManagersBuilder();
+        if (manager.getTargetColumn().getData() != null && !manager.getTargetColumn().getData().isEmpty()) {
+            managersBuilder.setTarget(new Uri(manager.getTargetColumn().getData()));
+        }
+        if (manager.getIsConnectedColumn().getData() != null) {
+            managersBuilder.setIsConnected(manager.getIsConnectedColumn().getData());
+        }
+        ManagerOtherConfigsBuilder mocBuilder = new ManagerOtherConfigsBuilder();
+        if (manager.getOtherConfigColumn().getData() != null && !manager.getOtherConfigColumn().getData().isEmpty()) {
+            List<ManagerOtherConfigs> mocList = new ArrayList<>();
+            Map<String, String> ocList = manager.getOtherConfigColumn().getData();
+            for (Entry<String, String> otherConfigEntry : ocList.entrySet()) {
+                mocBuilder.setOtherConfigKey(otherConfigEntry.getKey());
+                mocBuilder.setOtherConfigValue(otherConfigEntry.getValue());
+                mocList.add(mocBuilder.build());
+            }
+            managersBuilder.setManagerOtherConfigs(mocList);
+        }
+        managersBuilder.setManagerUuid(new Uuid(manager.getUuid().toString()));
+        List<Managers> managersList = new ArrayList<>();
+        managersList.add(managersBuilder.build());
+
+        HwvtepGlobalAugmentationBuilder hgAugmentationBuilder = new HwvtepGlobalAugmentationBuilder();
+        hgAugmentationBuilder.setManagers(managersList);
+        connectionNode.addAugmentation(HwvtepGlobalAugmentation.class, hgAugmentationBuilder.build());
+        return connectionNode.build();
+        // TODO Deletion of other config
+    }
 }
+
+