/** | |
* 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; | |
} | |
} | |
}; | |
}); |