Added host power on/off functionality to button.

Change-Id: I8942444c7686851c1cf2db9a6125654a5fa399d9
Signed-off-by: Iftekharul Islam <iislam@us.ibm.com>
diff --git a/src/js/controllers.js b/src/js/controllers.js
index 1b5df0f..1c2dd82 100644
--- a/src/js/controllers.js
+++ b/src/js/controllers.js
@@ -1,185 +1,158 @@
-angular
-    .module('app.controllers', [])
-    .controller('loginController', ['$scope', '$window', 'APIUtils', 'dataService', 'userModel', function ($scope, $window, APIUtils, dataService, userModel) {
-        $scope.dataService = dataService;
-
-        $scope.tryLogin = function (username, password, event) {
-            if (event.keyCode === 13) {
-                $scope.login(username, password);
-            }
-        };
-        $scope.login = function (username, password) {
-            $scope.error = false;
-            if (!username || username == "" || !password || password == "") {
-                return false;
-            } else {
-                if (userModel.login(username, password)) {
-                    $window.location.hash = '#/system-overview';
-                } else {
-                    $scope.error = true;
-                }
+ angular
+ .module('app.controllers', [])
+   .controller('loginController', ['$scope', '$window', 'APIUtils', 'dataService', 'userModel', function($scope, $window, APIUtils, dataService, userModel){
+    $scope.dataService = dataService;
+    
+    $scope.tryLogin = function(username, password, event){
+        if(event.keyCode === 13){
+            $scope.login(username, password);
+        }
+    }; 
+    $scope.login = function(username, password){
+        $scope.error = false;
+        if(!username || username == "" ||
+           !password || password == ""){
+            return false;
+        }else{
+            if(userModel.login(username, password)){
+                $window.location.hash = '#/system-overview';
+            }else{
+                $scope.error = true;
             }
         }
-    }])
-    .controller('dashboardController', ['$scope', 'dataService', function ($scope, dataService) {
-        $scope.dataService = dataService;
-    }])
-    .controller('systemOverviewController', ['$scope', 'dataService', function ($scope, dataService) {
-        $scope.dataService = dataService;
-    }])
-    .controller('unitIDController', ['$scope', 'dataService', function ($scope, dataService) {
-        $scope.dataService = dataService;
-    }])
-    .controller('bmcRebootController', ['$scope', 'dataService', function ($scope, dataService) {
-        $scope.dataService = dataService;
-        $scope.bmcReboot_confirm = false;
+    }
+ }])
+ .controller('dashboardController', ['$scope', 'dataService', function($scope, dataService){
+    $scope.dataService = dataService;
+ }])
+ .controller('systemOverviewController', ['$scope', 'dataService', function($scope, dataService){
+    $scope.dataService = dataService;
+ }])
+ .controller('unitIDController', ['$scope', 'dataService', function($scope, dataService){
+    $scope.dataService = dataService;
+ }])
+ .controller('bmcRebootController', ['$scope', 'dataService', function($scope, dataService){
+    $scope.dataService = dataService;
+ }])
+  .controller('powerOperationsController', ['$scope', 'APIUtils', 'dataService', '$timeout', function($scope, APIUtils, dataService, $timeout){
+    $scope.dataService = dataService;
+    $scope.confirm = false;
+    $scope.power_confirm = false;
+    $scope.warmboot_confirm = false;
+    $scope.coldboot_confirm = false;
+    $scope.orderly_confirm = false;
+    $scope.immediately_confirm = false;
 
-        // BMC reboot
-        $scope.bmcReboot = function () {
-            //@TODO:show progress
-            APIUtils.bmcReboot(function (response) {
-                if (response) {
-                    //@TODO: set proper server state
-                } else {
-                    //@TODO:show error message
+    //@TODO: call api and get proper state
+    $scope.toggleState = function(){
+        dataService.server_state = (dataService.server_state == 'Running') ? 'Off': 'Running';
+    }
+
+    $scope.togglePower = function(){
+        var method = (dataService.server_state == 'Running') ? 'hostPowerOff' : 'hostPowerOn';
+         //@TODO: show progress or set class orange
+        APIUtils[method](function(response){
+            //update state based on response
+            //error case?
+            if(response == null){
+                console.log("Failed request.");
+            }else{
+                //@TODO::need to get the server status
+                if(dataService.server_state == 'Running'){
+                    dataService.setPowerOffState();
+                }else{
+                    dataService.setPowerOnState();
                 }
-                //@TODO:hide progress
-            });
-        };
-        $scope.bmcRebootConfirm = function () {
-            if ($scope.confirm) {
-                return;
             }
-            $scope.confirm = true;
-            $scope.bmcReboot_confirm = true;
-        };
-    }])
-    .controller('powerOperationsController', ['$scope', 'APIUtils', 'dataService', function ($scope, APIUtils, dataService) {
-        $scope.dataService = dataService;
-        $scope.confirm = false;
-        $scope.power_confirm = false;
-        $scope.warmboot_confirm = false;
-        $scope.coldboot_confirm = false;
-        $scope.orderly_confirm = false;
-        $scope.immediately_confirm = false;
-
-        //@TODO: call api and get proper state
-        $scope.toggleState = function () {
-            dataService.server_state = (dataService.server_state == 'On') ? 'Off' : 'On';
-        };
-
-        $scope.togglePower = function () {
-            var method = (dataService.server_state == 'On') ? 'chassisPowerOff' : 'chassisPowerOn';
-            //@TODO: show progress or set class orange
-            APIUtils[method](function (response) {
-                //update state based on response
-                //error case?
-                if (response == null) {
-                    console.log("Failed request.");
-                } else {
-                    dataService.server_state = response;
-                }
-            });
+        });
+    }
+    $scope.powerOnConfirm = function(){
+        if($scope.confirm) {
+            return;
         }
-        $scope.powerOnConfirm = function () {
-            if ($scope.confirm) {
-                return;
+        $scope.confirm = true;
+        $scope.power_confirm = true;
+    };
+    $scope.warmReboot = function(){
+        //@TODO:show progress
+        dataService.loading = true;
+        APIUtils.hostPowerOff(function(response){
+            if(response){
+                dataService.setPowerOffState();
+                APIUtils.hostPowerOn(function(response){
+                    if(response){
+                        dataService.setPowerOnState();
+                    }else{
+                        //@TODO:show error message
+                    }
+                    //@TODO:hide progress, set proper server state
+                    dataService.loading = false;
+                });
+            }else{
+                //@TODO:hide progress & show error message
+                dataService.loading = false;
             }
-            $scope.confirm = true;
-            $scope.power_confirm = true;
-        };
-        $scope.warmReboot = function () {
-            //@TODO:show progress
-            APIUtils.hostPowerOff(function (response) {
-                if (response) {
-                    APIUtils.hostPowerOn(function (response) {
-                        if (response) {
+        });
+    };
+    $scope.testState = function(){
+        //@TODO:show progress
+        dataService.loading = true;
 
-                        } else {
-                            //@TODO:show error message
-                        }
-                        //@TODO:hide progress, set proper server state
-                    });
-                } else {
-                    //@TODO:hide progress & show error message
-                }
-            });
-        };
-        $scope.warmRebootConfirm = function () {
-            if ($scope.confirm) {
-                return;
+        $timeout(function(){
+            dataService.setPowerOffState();
+            $timeout(function(){
+                dataService.setPowerOnState();
+                dataService.loading = false;
+            }, 2000);
+        }, 1000);
+    };
+    $scope.warmRebootConfirm = function(){
+        if($scope.confirm) {
+            return;
+        }
+        $scope.confirm = true;
+        $scope.warmboot_confirm = true;
+    };
+
+    $scope.coldReboot = function(){
+        $scope.warmReboot();
+    };
+    $scope.coldRebootConfirm = function(){
+        if($scope.confirm) {
+            return;
+        }
+        $scope.confirm = true;
+        $scope.coldboot_confirm = true;
+    };
+
+    $scope.orderlyShutdown = function(){
+        //@TODO:show progress
+        dataService.loading = true;
+        APIUtils.hostPowerOff(function(response){
+            if(response){
+                dataService.setPowerOffState();
+            }else{
+                //@TODO:hide progress & show error message
             }
-            $scope.confirm = true;
-            $scope.warmboot_confirm = true;
-        };
+            dataService.loading = false;
+        });
+    };
+    $scope.orderlyShutdownConfirm = function(){
+        if($scope.confirm) {
+            return;
+        }
+        $scope.confirm = true;
+        $scope.orderly_confirm = true;
+    };
 
-        $scope.coldReboot = function () {
-            //@TODO:show progress
-            APIUtils.chassisPowerOff(function (response) {
-                if (response) {
-                    APIUtils.chassisPowerOn(function (response) {
-                        if (response) {
-
-                        } else {
-                            //@TODO:show error message
-                        }
-                        //@TODO:hide progress, set proper server state
-                    });
-                } else {
-                    //@TODO:hide progress & show error message
-                }
-            });
-        };
-        $scope.coldRebootConfirm = function () {
-            if ($scope.confirm) {
-                return;
-            }
-            $scope.confirm = true;
-            $scope.coldboot_confirm = true;
-        };
-
-        $scope.orderlyShutdown = function () {
-            //@TODO:show progress
-            APIUtils.hostPowerOff(function (response) {
-                if (response) {
-                    APIUtils.chassisPowerOff(function (response) {
-                        if (response) {
-
-                        } else {
-                            //@TODO:show error message
-                        }
-                        //@TODO:hide progress, set proper server state
-                    });
-                } else {
-                    //@TODO:hide progress & show error message
-                }
-            });
-        };
-        $scope.orderlyShutdownConfirm = function () {
-            if ($scope.confirm) {
-                return;
-            }
-            $scope.confirm = true;
-            $scope.orderly_confirm = true;
-        };
-
-        $scope.immediateShutdown = function () {
-            //@TODO:show progress
-            APIUtils.chassisPowerOff(function (response) {
-                if (response) {
-                    //@TODO: set proper server state
-                } else {
-                    //@TODO:show error message
-                }
-                //@TODO:hide progress
-            });
-        };
-        $scope.immediateShutdownConfirm = function () {
-            if ($scope.confirm) {
-                return;
-            }
-            $scope.confirm = true;
-            $scope.immediately_confirm = true;
-        };
-
-    }]);
+    $scope.immediateShutdown = function(){
+        $scope.orderlyShutdown();
+    };
+    $scope.immediateShutdownConfirm = function(){
+        if($scope.confirm) {
+            return;
+        }
+        $scope.confirm = true;
+        $scope.immediately_confirm = true;
+    };
+ }]);
diff --git a/src/js/directives.js b/src/js/directives.js
index 79224f0..913d686 100644
--- a/src/js/directives.js
+++ b/src/js/directives.js
@@ -13,17 +13,23 @@
         'controller': ['$scope','dataService', 'userModel', '$location', function($scope, dataService, userModel, $location){
             $scope.server_status = 01;
             $scope.dataService = dataService;
-            APIUtils.login(function(){
-                APIUtils.getHostState(function(status){
-                    if(status == 'xyz.openbmc_project.State.Host.HostState.Off'){
-                        $scope.server_status = -1;
-                    }else if(status == 'xyz.openbmc_project.State.Host.HostState.Running'){
-                        $scope.server_status = 1;
-                    }else{
-                        $scope.server_status = 0;
-                    }
+
+            $scope.loadServerStatus = function(){
+                $scope.dataService.loading = true;
+                APIUtils.login(function(){
+                    APIUtils.getHostState(function(status){
+                        if(status == 'xyz.openbmc_project.State.Host.HostState.Off'){
+                            dataService.setPowerOffState();
+                        }else if(status == 'xyz.openbmc_project.State.Host.HostState.Running'){
+                            dataService.setPowerOnState();
+                        }else{
+                            dataService.setBootingState();
+                        }
+                        dataService.loading = false;
+                    });
                 });
-            });
+            }
+            $scope.loadServerStatus();
 
             $scope.logout = function(){
                 userModel.logout();
@@ -31,7 +37,7 @@
             };
 
             $scope.refresh = function(){
-                console.log("--refresh status--");
+                $scope.loadServerStatus();
             }
         }]
     };
diff --git a/src/js/services.js b/src/js/services.js
index db44ae9..dbf8dc4 100644
--- a/src/js/services.js
+++ b/src/js/services.js
@@ -10,24 +10,46 @@
 **/
 angular
  .module('app.services', [])
- .service('dataService', function(){
+ .service('dataService', ['APIUtils', function(APIUtils){
     this.app_version = "openBMC V.0.0.1";
-    this.server_health = 'Good';
-    this.server_state = 'On';
+    this.server_health = 'Error';
+    this.server_state = 'Unreachable';
+    this.server_status = -2;
     this.chassis_state = 'On';
-    this.server_id = "Server BLZ_109284.209.01";
+    this.server_id = "Server 9.3.164.147";
     this.last_updated = new Date();
-
+    
+    this.loading = false;
+    this.loading_message = "";
     this.showNavigation = false;
     this.bodyStyle = {};
     this.path = '';
 
- })
+    this.setPowerOnState = function(){
+        this.server_state = APIUtils.HOST_STATE_TEXT.on;
+        this.server_status = APIUtils.HOST_STATE.on;
+    },
+
+    this.setPowerOffState = function(){
+        this.server_state = APIUtils.HOST_STATE_TEXT.off;
+        this.server_status = APIUtils.HOST_STATE.off;
+    },
+
+    this.setBootingState = function(){
+        this.server_state = APIUtils.HOST_STATE_TEXT.booting;
+        this.server_status = APIUtils.HOST_STATE.booting;
+    },
+
+    this.setUnreachableState = function(){
+        this.server_state = APIUtils.HOST_STATE_TEXT.unreachable;
+        this.server_status = APIUtils.HOST_STATE.unreachable;
+    }
+ }])
  .factory('APIUtils', ['$http', function($http){
     var SERVICE = {
         LOGIN_CREDENTIALS: {
-            username: "test",
-            password: "testpass",
+            username: "root",
+            password: "0penBmc",
         },
         API_CREDENTIALS: {
             user: 'root',
@@ -38,10 +60,17 @@
             on: 'On',
             off: 'Off'
         },
-        HOST_STATE: {
+        HOST_STATE_TEXT: {
             on: 'Running',
             off: 'Off',
-            booting: 'Quiesced'
+            booting: 'Quiesced',
+            unreachable: 'Unreachable'
+        },
+        HOST_STATE: {
+            on: 1,
+            off: -1,
+            booting: 0,
+            unreachable: -2
         },
         getChassisState: function(callback){
           $http({
@@ -144,20 +173,26 @@
           });
         },
         hostPowerOn: function(callback){
+          /**
+          curl -c cjar -b cjar -k -H "Content-Type: application/json" -d 
+          "{\"data\": \"xyz.openbmc_project.State.Host.Transition.Off\"}" 
+          -X PUT  
+          https://9.3.164.147/xyz/openbmc_project/state/host0/attr/RequestedHostTransition 
+          **/
           $http({
-            method: 'POST',
-            url: SERVICE.API_CREDENTIALS.host + "xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
+            method: 'PUT',
+            url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
             headers: {
                 'Accept': 'application/json',
                 'Content-Type': 'application/json'
             },
             withCredentials: true,
-            data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
+            data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.On"})
           }).success(function(response){
                 var json = JSON.stringify(response);
                 var content = JSON.parse(json);
                 if(callback){
-                    return callback(content.data.CurrentHostState);
+                    return callback(content.status);
                 }
           }).error(function(error){
             if(callback){
@@ -169,19 +204,19 @@
         },
         hostPowerOff: function(callback){
           $http({
-            method: 'POST',
-            url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
+            method: 'PUT',
+            url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
             headers: {
                 'Accept': 'application/json',
                 'Content-Type': 'application/json'
             },
             withCredentials: true,
-            data: JSON.stringify({"data": []}),
+            data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
           }).success(function(response){
                 var json = JSON.stringify(response);
                 var content = JSON.parse(json);
                 if(callback){
-                    return callback(content.data.CurrentHostState);
+                    return callback(content.status);
                 }
           }).error(function(error){
             if(callback){