Integrated with ONOS BE

Change-Id: Ide481090c843215f1084a59044c64111dba8c73a
diff --git a/mCordPortal/env/local.js b/mCordPortal/env/local.js
index c256c05..33fefbd 100644
--- a/mCordPortal/env/local.js
+++ b/mCordPortal/env/local.js
@@ -7,5 +7,6 @@
 // (works only for local environment as both application are served on the same domain)
 
 module.exports = {
-  host: 'http://xos.dev:9999/'
+  host: 'http://xos.dev:9999/',
+  onos_host: 'http://10.50.1.15:8181'
 };
diff --git a/mCordPortal/src/app/components/add-enodeb/add-enodeb.js b/mCordPortal/src/app/components/add-enodeb/add-enodeb.js
index 0b92cc0..0ce89f5 100644
--- a/mCordPortal/src/app/components/add-enodeb/add-enodeb.js
+++ b/mCordPortal/src/app/components/add-enodeb/add-enodeb.js
@@ -37,23 +37,18 @@
                 minlength: 10
               }
             },
-            GpsCoordinate: {
-              type: 'object',
-              properties: {
-                Latitude: {
-                  type: 'string',
-                  validators: {
-                    required: true
-                  }
-                },
-                Longitude: {
-                  type: 'string',
-                  validators: {
-                    required: true
-                  }
-                }
+            eNBId: {
+              type: 'number',
+              validators: {
+                required: true
               }
             },
+            IpAddr: {
+              type: 'string',
+              validators: {
+                required: true
+              }
+            }
           },
           actions: [
             {
@@ -63,6 +58,7 @@
                 // TODO validate form (wait for arpit to commit)
                 Enodeb.save(enode).$promise
                 .then(() => {
+                  // TODO add to list
                   this.modal.close();
                 })
                 .catch(e => {
diff --git a/mCordPortal/src/app/components/add-imsi/add-imsi.js b/mCordPortal/src/app/components/add-imsi/add-imsi.js
index 5308a5c..34d7733 100644
--- a/mCordPortal/src/app/components/add-imsi/add-imsi.js
+++ b/mCordPortal/src/app/components/add-imsi/add-imsi.js
@@ -30,33 +30,7 @@
         this.config = {
           formName: 'createImsi',
           fields: {
-            Enodeb: {
-              type: 'select',
-              validators: {
-                required: true
-              },
-              options: [
-                {
-                  id: 591,
-                  label: '591'
-                },
-                {
-                  id: 592,
-                  label: '592'
-                },
-                {
-                  id: 593,
-                  label: '593'
-                }
-              ]
-            },
-            DlMeasBitRate: {
-              type: 'number',
-              validators: {
-                required: true
-              }
-            },
-            UlMeasBitRate: {
+            IMSI: {
               type: 'number',
               validators: {
                 required: true
@@ -71,6 +45,7 @@
                 // TODO validate form (wait for arpit to commit)
                 Imsi.save(imsi).$promise
                 .then(() => {
+                  // TODO add to list
                   this.modal.close();
                 })
                 .catch(e => {
@@ -89,17 +64,6 @@
             }
           ]
         };
-
-        // TODO use this once merged Arpit PR
-        Enodeb.query().$promise
-        .then(enodes => {
-          this.config.fields.Enodeb.options = _.reduce(enodes, (list, enode) => {
-            return list.concat([{
-              id: enode.eNBId,
-              label: enode.eNBId.toString()
-            }]);
-          }, []);
-        })
       }
     };
   });
diff --git a/mCordPortal/src/app/components/add-profile-to-item/add-profile-to-item.js b/mCordPortal/src/app/components/add-profile-to-item/add-profile-to-item.js
index 15569d0..a4c291e 100644
--- a/mCordPortal/src/app/components/add-profile-to-item/add-profile-to-item.js
+++ b/mCordPortal/src/app/components/add-profile-to-item/add-profile-to-item.js
@@ -30,10 +30,16 @@
 
         Profile.query().$promise
         .then((profiles) => {
+          profiles = _.filter(profiles, p => {
+            console.log(p.Name, p.Name.indexOf('Default'), p.Name.indexOf('Default') === -1);
+            return p.Name.indexOf('Default') === -1
+          });
+          console.log(profiles);
           this.profiles = profiles;
           return this.item.getProfiles();
         })
         .then((itemProfiles) => {
+          console.log(this.profiles, itemProfiles);
           this.profiles = _.differenceBy(this.profiles, itemProfiles, 'Name');
         });
 
diff --git a/mCordPortal/src/app/services/rest/enodeb.js b/mCordPortal/src/app/services/rest/enodeb.js
index aa28702..d7d0f7c 100644
--- a/mCordPortal/src/app/services/rest/enodeb.js
+++ b/mCordPortal/src/app/services/rest/enodeb.js
@@ -2,7 +2,7 @@
   angular.module('mCord')
   .service('Enodeb', function($injector, $resource, $q, $http, baseUrl){
     const r = $resource(`${baseUrl}onos/progran/enodeb/:id`, {id: '@eNBId'}, {
-      save: {method: 'PUT'},
+      //save: {method: 'PUT'},
       query: {
         array: false,
         interceptor: {
@@ -23,6 +23,20 @@
       }
     });
 
+    // Override the default save method,
+    // Name is the key, so the $resource will try to update
+    r.save = function(data){
+      const d = $q.defer();
+      $http.post(`${baseUrl}onos/progran/enodeb/`, data)
+        .then(res => {
+          d.resolve(res.data);
+        })
+        .catch(err => {
+          d.reject(err)
+        });
+      return {$promise: d.promise};
+    };
+
     r.prototype.getProfiles = function(){
       const d = $q.defer();
 
@@ -37,6 +51,20 @@
       return d.promise;
     };
 
+    r.prototype.addProfile = function(data){
+      const d = $q.defer();
+      data = {'ProfileArray': [data.Name]};
+      $http.post(`${baseUrl}onos/progran/enodeb/${this.eNBId}/profile`, data)
+        .then(res => {
+          d.resolve(res.data);
+        })
+        .catch(err => {
+          d.reject(err)
+        });
+
+      return d.promise;
+    };
+
     r.prototype.getStats = function(){
       const d = $q.defer();
       $http.get(`${baseUrl}onos/progran/stats/enodeb/${this.eNBId}/10`)
diff --git a/mCordPortal/src/app/services/rest/imsi.js b/mCordPortal/src/app/services/rest/imsi.js
index 2359fe1..93bc88d 100644
--- a/mCordPortal/src/app/services/rest/imsi.js
+++ b/mCordPortal/src/app/services/rest/imsi.js
@@ -23,11 +23,40 @@
         }
       });
 
+      // Override the default save method,
+      // Name is the key, so the $resource will try to update
+      r.save = function(data){
+        const d = $q.defer();
+        $http.post(`${baseUrl}onos/progran/imsi/`, data)
+          .then(res => {
+            d.resolve(res.data);
+          })
+          .catch(err => {
+            d.reject(err)
+          });
+        return {$promise: d.promise};
+      };
+
       r.prototype.getProfiles = function(){
         const d = $q.defer();
 
         $http.get(`${baseUrl}onos/progran/imsi/${this.IMSI}/profile`)
           .then(res => {
+            d.resolve(res.data.ProfileArray);
+          })
+          .catch(err => {
+            d.reject(err)
+          });
+
+        return d.promise;
+      };
+
+      // this is under profile
+      r.prototype.addProfile = function(data){
+        const d = $q.defer();
+        let body = {'IMSIRuleArray': [this.IMSI]};
+        $http.post(`${baseUrl}onos/progran/profile/${data.Name}/imsi`, body)
+          .then(res => {
             d.resolve(res.data);
           })
           .catch(err => {
diff --git a/mCordPortal/src/app/services/rest/profiles.js b/mCordPortal/src/app/services/rest/profiles.js
index 6582784..5a7d435 100644
--- a/mCordPortal/src/app/services/rest/profiles.js
+++ b/mCordPortal/src/app/services/rest/profiles.js
@@ -2,7 +2,12 @@
   angular.module('mCord')
   .service('Profile', function($injector, $resource, $q, $http, baseUrl){
     const r = $resource(`${baseUrl}onos/progran/profile/:id`, {id: '@Name'}, {
-      save: {method: 'PUT'},
+      save: {
+        method: 'PUT'
+      },
+      $save: {
+        method: 'PUT'
+      },
       query: {
         array: false,
         interceptor: {
@@ -23,6 +28,20 @@
       }
     });
 
+    // Override the default save method,
+    // Name is the key, so the $resource will try to update
+    r.save = function(data){
+      const d = $q.defer();
+      $http.post(`${baseUrl}onos/progran/profile/`, data)
+      .then(res => {
+        d.resolve(res.data);
+      })
+      .catch(err => {
+        d.reject(err)
+      });
+      return {$promise: d.promise};
+    };
+
     r.prototype.getImsis = function(){
       const d = $q.defer();
 
@@ -37,6 +56,21 @@
       return d.promise;
     };
 
+    // this is under profile
+    r.prototype.addImsi = function(data){
+      const d = $q.defer();
+      let body = {'IMSIRuleArray': [data.IMSI]};
+      $http.post(`${baseUrl}onos/progran/profile/${this.Name}/imsi`, body)
+        .then(res => {
+          d.resolve(res.data);
+        })
+        .catch(err => {
+          d.reject(err)
+        });
+
+      return d.promise;
+    };
+
     r.prototype.deleteImsis = function(){
       const d = $q.defer();
 
@@ -96,7 +130,7 @@
     r.prototype.deleteEnode = function(id){
       const d = $q.defer();
 
-      $http.delete(`${baseUrl}onos/progran/profile/${this.Name}/enodeb/${id}`)
+      $http.delete(`${baseUrl}onos/progran/enodeb/${id}/profile/${this.Name}`)
       .then(res => {
         d.resolve(res.data);
       })
diff --git a/mCordPortal/src/app/view/enode-details/e-node-details.tpl.html b/mCordPortal/src/app/view/enode-details/e-node-details.tpl.html
index 55abba9..768d2e4 100644
--- a/mCordPortal/src/app/view/enode-details/e-node-details.tpl.html
+++ b/mCordPortal/src/app/view/enode-details/e-node-details.tpl.html
@@ -19,7 +19,7 @@
             </div>
             <div class="col-xs-9">
               <related-profiles model="vm.enode" config="{showHeader: false, colors: vm.colors}"></related-profiles>
-              <div class="row">
+              <div class="row" ng-show="vm.enode">
                 <div class="col-xs-12 text-right">
                   <a ng-click="vm.addProfile()" class="btn btn-primary-border">Add Profile</a>
                   <a href="" class="btn btn-primary-border">Create Profile</a>
diff --git a/mCordPortal/src/app/view/enode-details/enode-details.js b/mCordPortal/src/app/view/enode-details/enode-details.js
index a187893..717a8eb 100644
--- a/mCordPortal/src/app/view/enode-details/enode-details.js
+++ b/mCordPortal/src/app/view/enode-details/enode-details.js
@@ -69,9 +69,12 @@
               controller: function ($uibModalInstance) {
                 this.modal    = $uibModalInstance;
                 this.callback = (profile) => {
-                  $scope.$broadcast('profile.add', {targetId: _this.enode.eNBId, profile: profile});
-                  _this.profiles.push(profile);
-                  createChartData(_this.profiles);
+                  this.eNodeB.addProfile(profile)
+                  .then(p => {
+                    $scope.$broadcast('profile.add', {targetId: _this.enode.eNBId, profile: profile});
+                    _this.profiles.push(profile);
+                    createChartData(_this.profiles);
+                  });
                 };
                 this.eNodeB = _this.enode;
               }
diff --git a/mCordPortal/src/app/view/imsi-details/imsi-details.js b/mCordPortal/src/app/view/imsi-details/imsi-details.js
index 99204c4..683574f 100644
--- a/mCordPortal/src/app/view/imsi-details/imsi-details.js
+++ b/mCordPortal/src/app/view/imsi-details/imsi-details.js
@@ -43,8 +43,11 @@
               controller: function ($uibModalInstance) {
                 this.modal    = $uibModalInstance;
                 this.callback = (profile) => {
-                  console.log(_this.imsi);
-                  $scope.$broadcast('profile.add', {targetId: _this.imsi.IMSI, profile: profile});
+                  this.imsi.addProfile(profile)
+                  .then(p => {
+                    _this.profiles.push(profile);
+                    $scope.$broadcast('profile.add', {targetId: _this.imsi.IMSI, profile: profile});
+                  });
                 };
                 this.imsi = _this.imsi;
               }
diff --git a/mCordPortal/src/app/view/imsi-details/imsi-details.tpl.html b/mCordPortal/src/app/view/imsi-details/imsi-details.tpl.html
index f6b0947..5633bcd 100644
--- a/mCordPortal/src/app/view/imsi-details/imsi-details.tpl.html
+++ b/mCordPortal/src/app/view/imsi-details/imsi-details.tpl.html
@@ -14,11 +14,11 @@
     <div class="col-xs-12">
       <related-profiles model="vm.imsi" config="{showHeader: false, delete: true}"></related-profiles>
     </div>
-    <div class="col-xs-12 text-right">
+    <div class="col-xs-12 text-right" ng-show="vm.imsi">
       <a ng-click="vm.addProfile()" href="" class="btn btn-primary-border">
         Add Profile
       </a>
-      <a href="" class="btn btn-primary-border">
+      <a href="#/profile/" class="btn btn-primary-border">
         Create Profile
       </a>
     </div>
diff --git a/mCordPortal/src/app/view/profiles-details/profiles-details.js b/mCordPortal/src/app/view/profiles-details/profiles-details.js
index 4f03dcd..b6d73a7 100644
--- a/mCordPortal/src/app/view/profiles-details/profiles-details.js
+++ b/mCordPortal/src/app/view/profiles-details/profiles-details.js
@@ -121,13 +121,19 @@
                       required: true
                     }
                   },
-                  HysteresisA3: {
+                  A3Hysteresis: {
                     type: 'number',
                     validator: {
                       required: true
                     }
                   },
-                  A5TriggerType: {
+                  A3TriggerQuantity: {
+                    type: 'number',
+                    validator: {
+                      required: true
+                    }
+                  },
+                  A5TriggerQuantity: {
                     type: 'number',
                     validator: {
                       required: true
@@ -157,7 +163,7 @@
                       required: true
                     }
                   },
-                  HysteresisA5: {
+                  A5Hysteresis: {
                     type: 'number',
                     validator: {
                       required: true
@@ -175,6 +181,7 @@
                     Profile.save(profile).$promise
                     .then((profile) => {
                       // TODO save imsi and enodes
+                      // and redirect to profile list
                     });
                   }
                   else{
@@ -257,7 +264,7 @@
                 icon: 'remove',
                 color: 'red',
                 cb: (enode) => {
-                  this.profile.deleteImsi(enode.eNBId)
+                  this.profile.deleteEnode(enode.eNBId)
                   .then(() => {
                     _.remove(this.enodes, i =>i.eNBId === enode.eNBId);
                   });
@@ -282,8 +289,10 @@
               controller: function ($uibModalInstance) {
                 this.modal    = $uibModalInstance;
                 this.callback = (imsi) => {
-                  // TODO call BE (if !this.isNew)
-                  _this.imsis.push(imsi);
+                  this.profile.addImsi(imsi)
+                  .then(i => {
+                    _this.imsis.push(imsi);
+                  })
                 };
                 this.profile = _this.profile;
               }