Added IMSI detail page
diff --git a/mCordPortal/src/app/components/add-imsi/add-imsi.html b/mCordPortal/src/app/components/add-imsi/add-imsi.html
new file mode 100644
index 0000000..9aa4048
--- /dev/null
+++ b/mCordPortal/src/app/components/add-imsi/add-imsi.html
@@ -0,0 +1,6 @@
+<div class="modal-header">
+    <h3 class="modal-title">Create IMSI</h3>
+</div>
+<div class="modal-body">
+    <xos-form ng-model="vm.model" config="vm.config"></xos-form>
+</div>
\ No newline at end of file
diff --git a/mCordPortal/src/app/components/add-imsi/add-imsi.js b/mCordPortal/src/app/components/add-imsi/add-imsi.js
new file mode 100644
index 0000000..5308a5c
--- /dev/null
+++ b/mCordPortal/src/app/components/add-imsi/add-imsi.js
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+angular.module('mCord')
+  .directive('addImsi', function () {
+    return {
+      restrict: 'E',
+      templateUrl: 'app/components/add-imsi/add-imsi.html',
+      scope: {
+        modal: '='
+      },
+      bindToController: true,
+      controllerAs: 'vm',
+      controller: function(Imsi, Enodeb, _){
+        this.model = {
+        };
+        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: {
+              type: 'number',
+              validators: {
+                required: true
+              }
+            }
+          },
+          actions: [
+            {
+              label: 'Save',
+              icon: 'ok',
+              cb: (imsi) => {
+                // TODO validate form (wait for arpit to commit)
+                Imsi.save(imsi).$promise
+                .then(() => {
+                  this.modal.close();
+                })
+                .catch(e => {
+                  console.log(this.modal);
+                })
+              },
+              class: 'success'
+            },
+            {
+              label: 'Cancel',
+              icon: 'remove',
+              cb: () => {
+                this.modal.close();
+              },
+              class: 'warning'
+            }
+          ]
+        };
+
+        // 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/related-profiles/related-profiles.js b/mCordPortal/src/app/components/related-profiles/related-profiles.js
index f12f2df..44314ef 100644
--- a/mCordPortal/src/app/components/related-profiles/related-profiles.js
+++ b/mCordPortal/src/app/components/related-profiles/related-profiles.js
@@ -25,7 +25,7 @@
       },
       bindToController: true,
       controllerAs: 'vm',
-      controller: function($scope){
+      controller: function($scope, _){
         $scope.$watch(() => this.model, enode => {
           if(enode){
             loadProfiles();
@@ -38,6 +38,13 @@
             this.profiles = profiles;
           });
         };
+
+        this.deleteProfile = (id) => {
+          this.model.deleteProfile(id)
+          .then(() => {
+            _.remove(this.profiles, p => p.Name === id);
+          });
+        }
       }
     };
   });
diff --git a/mCordPortal/src/app/components/related-profiles/related-profiles.tpl.html b/mCordPortal/src/app/components/related-profiles/related-profiles.tpl.html
index e782a6a..9120656 100644
--- a/mCordPortal/src/app/components/related-profiles/related-profiles.tpl.html
+++ b/mCordPortal/src/app/components/related-profiles/related-profiles.tpl.html
@@ -5,6 +5,7 @@
     <th>Upload Rate</th>
     <th>Start Date</th>
     <th>End Date</th>
+    <th></th>
   </tr>
   <tr ng-repeat="profile in vm.profiles">
     <td ng-if="!vm.config.colors">{{profile.Name}}</td>
@@ -21,5 +22,10 @@
     </td>
     <td>{{profile.Start}}</td>
     <td>{{profile.End}}</td>
+    <td ng-if="vm.config.delete">
+      <a href="" ng-click="vm.deleteProfile(profile.Name)">
+        <i class="glyphicon glyphicon-remove"></i>
+      </a>
+    </td>
   </tr>
 </table>
\ No newline at end of file
diff --git a/mCordPortal/src/app/services/rest/imsi.js b/mCordPortal/src/app/services/rest/imsi.js
index 57c3827..16f4f19 100644
--- a/mCordPortal/src/app/services/rest/imsi.js
+++ b/mCordPortal/src/app/services/rest/imsi.js
@@ -8,7 +8,20 @@
       r.prototype.getProfiles = function(){
         const d = $q.defer();
 
-        $http.get(`${baseUrl}api/imsi/${this.eNBId}/profile`)
+        $http.get(`${baseUrl}api/imsi/${this.IMSI}/profile`)
+          .then(res => {
+            d.resolve(res.data);
+          })
+          .catch(err => {
+            d.reject(err)
+          });
+
+        return d.promise;
+      };
+
+      r.prototype.deleteProfile = function(id){
+        const d = $q.defer();
+        $http.delete(`${baseUrl}api/imsi/${this.IMSI}/profile/${id}`)
           .then(res => {
             d.resolve(res.data);
           })
diff --git a/mCordPortal/src/app/view/imsi-details/imsi-details.js b/mCordPortal/src/app/view/imsi-details/imsi-details.js
new file mode 100644
index 0000000..0628601
--- /dev/null
+++ b/mCordPortal/src/app/view/imsi-details/imsi-details.js
@@ -0,0 +1,43 @@
+(function () {
+  'use strict';
+
+  angular.module('mCord')
+    .directive('imsiDetails', function () {
+      return {
+        restrict: 'E',
+        scope: {},
+        controllerAs: 'vm',
+        templateUrl: 'app/view/imsi-details/imsi-details.tpl.html',
+        controller: function($stateParams, _, Imsi){
+
+          Imsi.get({id: $stateParams.id}).$promise
+          .then((imsi) => {
+            this.imsi = imsi;
+            return imsi.getProfiles()
+          })
+          .then(profiles => {
+            this.data = _.reduce(profiles, (list, p) => {
+              list.push([p.DlAllocRBRate, p.UlAllocRBRate]);
+              return list;
+            }, [])
+          });
+
+          this.config = {
+            exclude: ['UeStatus'],
+            formName: 'updateEnode',
+            actions: [
+              {
+                label: 'Update',
+                icon: 'ok',
+                cb: (enode) => {
+                  enode.$save();
+                },
+                class: 'primary-border'
+              }
+            ]
+          };
+          
+        }
+      }
+    });
+}());
\ No newline at end of file
diff --git a/mCordPortal/src/app/view/imsi-details/imsi-details.tpl.html b/mCordPortal/src/app/view/imsi-details/imsi-details.tpl.html
new file mode 100644
index 0000000..7238856
--- /dev/null
+++ b/mCordPortal/src/app/view/imsi-details/imsi-details.tpl.html
@@ -0,0 +1,26 @@
+<div class="container-fluid">
+  <div class="row">
+    <div class="col-xs-12">
+      <h1 class="primary">IMSI {{vm.imsi.IMSI}}</h1>
+    </div>
+    <div class="col-sm-12">
+      <xos-form ng-model="vm.imsi" config="vm.config"></xos-form>
+    </div>
+  </div>
+  <div class="row">
+    <div class="col-xs-12">
+      <h1 class="primary">Profiles:</h1>
+    </div>
+    <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">
+      <a href="" class="btn btn-primary-border">
+        Add Profile
+      </a>
+      <a href="" class="btn btn-primary-border">
+        Create Profile
+      </a>
+    </div>
+  </div>
+</div>
\ No newline at end of file
diff --git a/mCordPortal/src/app/view/imsi-list/imsi-list.js b/mCordPortal/src/app/view/imsi-list/imsi-list.js
index 14ceeda..02fb6e5 100644
--- a/mCordPortal/src/app/view/imsi-list/imsi-list.js
+++ b/mCordPortal/src/app/view/imsi-list/imsi-list.js
@@ -51,6 +51,17 @@
               }
             ]
           };
+
+          this.addImsi = () => {
+            this.modalInstance = $uibModal.open({
+              animation: true,
+              templateUrl: 'addEnode',
+              controllerAs: 'vm',
+              controller: function($uibModalInstance){
+                this.modal = $uibModalInstance;
+              }
+            });
+          }
         }
       }
     });
diff --git a/mCordPortal/src/app/view/imsi-list/imsi-list.tpl.html b/mCordPortal/src/app/view/imsi-list/imsi-list.tpl.html
index 4dd757e..3403c51 100644
--- a/mCordPortal/src/app/view/imsi-list/imsi-list.tpl.html
+++ b/mCordPortal/src/app/view/imsi-list/imsi-list.tpl.html
@@ -1,3 +1,12 @@
 <div class="container-fluid">
+    <div class="row">
+        <div class="col-xs-12 text-right">
+            <a href="" class="btn btn-success" ng-click="vm.addImsi()">Add IMSI</a>
+        </div>
+    </div>
     <xos-table config="vm.tableConfig" data="vm.imsi"></xos-table>
-</div>
\ No newline at end of file
+</div>
+
+<script type="text/ng-template" id="addEnode">
+    <add-imsi modal="vm.modal"></add-imsi>
+</script>
\ No newline at end of file