added new endpoint to retrieve user information and Updated tenant view
Change-Id: I93d00eb203bf7626221dc6e107fefa9f097d8011
diff --git a/views/ngXosViews/tenant/src/js/createslice.js b/views/ngXosViews/tenant/src/js/createslice.js
new file mode 100644
index 0000000..933542e
--- /dev/null
+++ b/views/ngXosViews/tenant/src/js/createslice.js
@@ -0,0 +1,278 @@
+/**
+ * Created by arpit on 7/7/2016.
+ */
+'use strict';
+
+angular.module('xos.tenant')
+.directive('createSlice', function(){
+ return {
+ //sites : {},
+ restrict: 'E',
+ scope: {},
+ bindToController: true,
+ controllerAs: 'cs',
+ templateUrl: 'templates/createslice.html',
+ controller: function(Slices, SlicesPlus, Sites, Images, $stateParams, $http, $state, $q, XosUserPrefs){
+ this.config = {
+ exclude: ['site', 'password', 'last_login', 'mount_data_sets', 'default_flavor', 'creator', 'exposed_ports', 'networks', 'omf_friendly', 'omf_friendly', 'no_sync', 'no_policy', 'lazy_blocked', 'write_protect', 'deleted', 'backend_status', 'backend_register', 'policed', 'enacted', 'updated', 'created', 'validators', 'humanReadableName'],
+ formName: 'SliceDetails',
+ feedback: {
+ show: false,
+ message: 'Form submitted successfully !!!',
+ type: 'success'
+ },
+ actions: [
+ {
+ label: 'Save',
+ icon: 'ok', // refers to bootstraps glyphicon
+ cb: (model, form) => { // receive the model
+ saveform(model, form).then(()=> {
+ $state.go('site', {id: this.model.site});
+ });
+ },
+ class: 'success'
+ }, {
+ label: 'Save and continue editing',
+ icon: 'ok', // refers to bootstraps glyphicon
+ cb: (model, form) => { // receive the model
+ saveform(model,form);
+ },
+ class: 'primary'
+ },
+ {
+ label: 'Save and add another',
+ icon: 'ok', // refers to bootstraps glyphicon
+ cb: (model, form) => {
+ saveform(model,form).then(()=> {
+ $state.go('createslice',{site : this.model.site,id : ''});
+ });
+ },
+ class: 'primary'
+ }
+ ],
+ fields:
+ {
+ site: {
+ label: 'Site',
+ type: 'select',
+ validators: { required: true},
+ hint: 'The Site this Slice belongs to',
+ options: []
+
+ },
+ name: {
+ label: 'Name',
+ type: 'string',
+ hint: 'The Name of the Slice',
+ validators: {
+ required: true
+ }
+ },
+ serviceClass: {
+ label: 'ServiceClass',
+ type: 'select',
+ validators: {required: true},
+ hint: 'The Site this Slice belongs to',
+ options: [
+ {
+ id: 1,
+ label: 'Best effort'
+ }
+ ]
+ },
+ enabled: {
+ label: 'Enabled',
+ type: 'boolean',
+ hint: 'Status for this Slice'
+ },
+ description: {
+ label: 'Description',
+ type: 'string',
+ hint: 'High level description of the slice and expected activities',
+ validators: {
+ required: false,
+ minlength: 10
+ }
+ },
+ service: {
+ label: 'Service',
+ type: 'select',
+ validators: { required: false},
+ options: [
+ {
+ id: 0,
+ label: '--------'
+ }
+ ]
+ },
+ slice_url: {
+ label: 'Slice url',
+ type: 'string',
+ validators: {
+ required: false,
+ minlength: 10
+ }
+ },
+ max_instances: {
+ label: 'Max Instances',
+ type: 'number',
+ validators: {
+ required: false,
+ min: 0
+ }
+ },
+ default_isolation: {
+ label: 'Default Isolation',
+ type: 'select',
+ validators: { required: false},
+ options: [
+ {
+ id: 'vm',
+ label: 'Virtual Machine'
+ },
+ {
+ id: 'container',
+ label: 'Container'
+ },
+ {
+ id: 'container_vm',
+ label: 'Container in VM'
+ }
+ ]
+ },
+ default_image: {
+ label: 'Default image',
+ type: 'select',
+ validators: { required: false},
+ options: []
+ },
+ network: {
+ label: 'Network',
+ type: 'select',
+ validators: { required: false},
+ options: [
+ {
+ id: 'default',
+ label: 'Default'
+ },
+ {
+ id: 'host',
+ label: 'Host'
+ },
+ {
+ id: 'bridged',
+ label: 'Bridged'
+ },
+ {
+ id: 'noauto',
+ label: 'No Automatic Networks'
+ }
+ ]
+ }
+
+ }
+ };
+ var data;
+ Images.query().$promise
+ .then((users) => {
+ this.users = users;
+ data = this.users;
+ this.optionValImg = this.setData(data, {field1: 'id', field2: 'name'});
+ this.config.fields['default_image'].options = this.optionValImg;
+ })
+ .catch((e) => {
+ throw new Error(e);
+ });
+
+ // Use this method for select by seting object in fields variable of format { field1 : "val1", field2 : "val2"}
+ this.setData = (data, fields) => {
+ var i;
+ var retObj=[];
+ for(i = 0; i<data.length; i++){
+ var optVal = {id: data[i][fields.field1], label: data[i][fields.field2]};
+ retObj.push(optVal);
+
+ }
+ return retObj;
+ };
+
+ // retrieving user list
+
+ if ($stateParams.id)
+ {
+ delete this.config.fields['site'];
+ this.config.exclude.push('site');
+
+ Slices.get({id: $stateParams.id}).$promise
+ .then((users) => {
+ this.users = users;
+ data = users;
+
+ this.model = data;
+ })
+ .catch((e) => {
+ throw new Error(e);
+ });
+ }
+ else
+ {
+
+
+ this.model = {};
+ XosUserPrefs.getUserDetailsCookie().$promise
+ .then((userdata)=>{
+ this.model['creator'] =userdata.current_user_id;
+ })
+ .catch ((e) => {
+ throw new Error(e);
+ });
+
+ Sites.query().$promise
+ .then((users) => {
+ this.users_site = users;
+ this.optionVal = this.setData(this.users_site, {field1: 'id', field2: 'name'});
+ this.config.fields['site'].options = this.optionVal;
+ })
+ .catch((e) => {
+ throw new Error(e);
+ });
+ }
+
+ var saveform = (model,form) =>
+ { // receive the model
+ var deferred = $q.defer();
+ delete model.networks;
+ if (form.$valid )
+ {
+ if(model.id){
+ var pr = Slices.update(model).$promise;
+ }
+ else{
+ var pr = Slices.save(model).$promise;
+ }
+ pr.then((users) => {
+ this.model = users;
+ //data = users;
+ //this.model = this.users;
+ this.config.feedback.show = true;
+ deferred.resolve(this.model);
+ })
+ .catch((e) => {
+ this.config.feedback.show = true;
+ this.config.feedback.type='danger';
+ if(e.data && e.data.detail )
+ {
+ this.config.feedback.message = e.data.detail;
+ }
+ else {
+ this.config.feedback.message=e.statusText;
+ }
+ deferred.reject(e);
+ });
+ }
+
+ return deferred.promise;
+ }
+ }
+ };
+});
\ No newline at end of file