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