Remove IPV4 addresses

Tested: Able to remove existing IPV4
   addresses.

Change-Id: I772bee6ad6b68bc0a69351f3e5386acc659241ef
Signed-off-by: beccabroek <beccabroek@gmail.com>
diff --git a/app/configuration/controllers/network-controller.js b/app/configuration/controllers/network-controller.js
index 4d11ae5..a9546d4 100644
--- a/app/configuration/controllers/network-controller.js
+++ b/app/configuration/controllers/network-controller.js
@@ -24,6 +24,7 @@
       $scope.selectedInterface = '';
       $scope.confirm_settings = false;
       $scope.loading = false;
+      $scope.IPV4s_to_delete = [];
 
       loadNetworkInfo();
 
@@ -43,6 +44,15 @@
         $scope.interface.Nameservers.splice(index, 1);
       };
 
+      $scope.removeIpv4Address = function(index) {
+        // Check if the IPV4 being removed has an id. This indicates that it is
+        // an existing address and needs to be removed in the back end.
+        if ($scope.interface.ipv4.values[index].id) {
+          $scope.IPV4s_to_delete.push($scope.interface.ipv4.values[index]);
+        }
+        $scope.interface.ipv4.values.splice(index, 1);
+      };
+
       $scope.setNetworkSettings = function() {
         // Hides the confirm network settings modal
         $scope.confirm_settings = false;
@@ -79,6 +89,9 @@
 
         // Set IPV4 IP Addresses, Netmask Prefix Lengths, and Gateways
         if (!$scope.interface.DHCPEnabled) {
+          // Delete existing IPV4 addresses that were removed
+          promises.push(removeIPV4s());
+          // Update any changed IPV4 addresses
           for (var i in $scope.interface.ipv4.values) {
             if (!APIUtils.validIPV4IP(
                     $scope.interface.ipv4.values[i].Address)) {
@@ -202,6 +215,18 @@
                 });
       }
 
+      function removeIPV4s() {
+        return $scope.IPV4s_to_delete.map(function(ipv4) {
+          return APIUtils.deleteIPV4($scope.selectedInterface, ipv4.id)
+              .then(
+                  function(data) {},
+                  function(error) {
+                    console.log(JSON.stringify(error));
+                    $scope.set_network_error = ipv4.Address;
+                  })
+        });
+      }
+
       function setIPV4(index) {
         // The correct way to edit an IPV4 interface is to remove it and then
         // add a new one
@@ -253,6 +278,10 @@
             // page
             $scope.old_interface = JSON.parse(JSON.stringify($scope.interface));
           }
+          // Add id values to corresponding IPV4 objects
+          for (var i = 0; i < $scope.interface.ipv4.values.length; i++) {
+            $scope.interface.ipv4.values[i].id = $scope.interface.ipv4.ids[i];
+          }
         });
       }
     }