diff --git a/src/ExperimentAdd.html b/src/ExperimentAdd.html index e9321ece5767f3e23a38dbbacea0666e0dd6b755..3dad6fa13461c1db029e380c4e39bd3825715202 100644 --- a/src/ExperimentAdd.html +++ b/src/ExperimentAdd.html @@ -55,7 +55,7 @@ <div class="form-group"> <label for="role" class="col-sm-2 control-label">Packaging format</label> <div class="col-sm-10"> - <select class="form-control" ng-options="opt for opt in ['OSMvTEN','OSMvNINE','OSMvEIGHT', 'GenericSOL005']" ng-model="exprm.packagingFormat" required><option></option></select> + <select class="form-control" ng-options="opt for opt in ['OSMvTHIRTEEN','OSMvELEVEN','OSMvTEN','OSMvNINE','OSMvEIGHT', 'GenericSOL005']" ng-model="exprm.packagingFormat" required><option></option></select> </div> </div> diff --git a/src/ExperimentUpload.html b/src/ExperimentUpload.html index f0a456544e67a81587cec4a70aa8f42b45d165ca..2771179646ecccdd15fab20e3a20a6c93b53dadb 100644 --- a/src/ExperimentUpload.html +++ b/src/ExperimentUpload.html @@ -21,7 +21,7 @@ <div class="form-group"> <label for="role" class="col-sm-2 control-label">Packaging format</label> <div class="col-sm-10"> - <select class="form-control" ng-options="opt for opt in ['OSMvTEN', 'OSMvNINE','OSMvEIGHT','GenericSOL005']" ng-model="exprm.packagingFormat" required><option></option></select> + <select class="form-control" ng-options="opt for opt in ['OSMvTHIRTEEN','OSMvELEVEN', 'OSMvTEN', 'OSMvNINE','OSMvEIGHT','GenericSOL005']" ng-model="exprm.packagingFormat" required><option></option></select> </div> </div> diff --git a/src/Experiments.html b/src/Experiments.html index baed7175769dc5040f8240acaebb5a1232c925d9..bb80c07c56df1c99a81b239ca919f12b87fd2ea7 100644 --- a/src/Experiments.html +++ b/src/Experiments.html @@ -62,6 +62,7 @@ <p>Last update: <strong>{{gridItem.dateUpdated | date:'medium' }}</strong></p> <p>Date created: <strong>{{gridItem.dateCreated| date:'medium'}}</strong></p> --> + <a class="btn btn-warning" ng-click="softDeleteApp(gridItem, gridItem.id)"><i class="fa fa-trash-o "></i></a> <a class="btn btn-danger" ng-click="deleteApp(gridItem, gridItem.id)"><i class="fa fa-trash-o "></i></a> <a class="btn btn-primary" ng-href="#!/experiment_edit/{{gridDisplayItem.id}}"><i class="fa fa-pencil-square-o "></i></a> <a class="btn btn-info" ng-href="#!/experiment_view/{{gridDisplayItem.id}}"><i class="fa fa-info-circle "></i></a> diff --git a/src/InfrastructureAdd.html b/src/InfrastructureAdd.html index 9c0877bdc2a724e2266c91e92e4fed48c726fcde..73dfac5bf7f9f54dea130da94cf39b43444ec46e 100644 --- a/src/InfrastructureAdd.html +++ b/src/InfrastructureAdd.html @@ -13,11 +13,20 @@ </div> </div> <div class="form-group"> + <label for="manoProviderSelect" class="col-sm-2 control-label">Select a MANO Provider:</label> + <div class="col-sm-10"> + <select class="form-control" id="manoProviderSelect" ng-model="portalinfrastructure.mp" ng-options="(manoprovider.id + ' - ' + manoprovider.name) for manoprovider in manoproviders" ng-change="updateDatacentername()"> + </select> + </div> + </div> + <div class="form-group"> <label for="portalinfrastructure.datacentername" class="col-sm-2 control-label">Datacenter VIM Name</label> <div class="col-sm-10"> - <input type="text" class="form-control" ng-model="portalinfrastructure.datacentername" value="" placeholder="datacenter VIM name..." /> + <input type="text" class="form-control" ng-model="portalinfrastructure.datacentername" + ng-disabled="true" + placeholder="Datacenter VIM name..." /> </div> - </div> + </div> <div class="form-group"> <label for="organization" class="col-sm-2 control-label">Organization</label> <div class="col-sm-10"> diff --git a/src/InfrastructureEdit.html b/src/InfrastructureEdit.html index 3b1a5e3a501ad14fc53f093aac80785bdc444fcb..f6b51c87064e0d0698b5f4cb9bc34ccc1d3c489d 100644 --- a/src/InfrastructureEdit.html +++ b/src/InfrastructureEdit.html @@ -17,11 +17,20 @@ </div> <div class="form-group"> + <label for="manoProviderSelect" class="col-sm-2 control-label">Select a MANO Provider:</label> + <div class="col-sm-10"> + <select class="form-control" id="manoProviderSelect" ng-model="portalinfrastructure.mp" ng-options="(manoprovider.id + ' - ' + manoprovider.name) for manoprovider in manoproviders" ng-change="editDatacentername()"> + </select> + </div> + </div> + <div class="form-group"> <label for="portalinfrastructure.datacentername" class="col-sm-2 control-label">Datacenter VIM Name</label> <div class="col-sm-10"> - <input type="text" class="form-control" ng-model="portalinfrastructure.datacentername" value="" placeholder="datacenter VIM name..." /> + <input type="text" class="form-control" ng-model="portalinfrastructure.datacentername" + ng-disabled="true" + placeholder="Datacenter VIM name..." /> </div> - </div> + </div> <div class="form-group"> diff --git a/src/Infrastructures.html b/src/Infrastructures.html index 02dcf2a677a0a339b3f225df632369bf1033c1b2..d7bc390967696fd2bf24175322bbb7083d810824 100644 --- a/src/Infrastructures.html +++ b/src/Infrastructures.html @@ -9,23 +9,26 @@ <br> <br> <table id="grid1" tr-ng-grid="" class="usersGrid" items="portalinfrastructures" - fields="['id', 'name', 'datacentername', 'organization', 'email', 'vimid' ]"> + fields="['id', 'name', 'datacentername', 'organization', 'email', 'vimid', 'infrastructureStatus']"> <thead> <tr> - <th field-name="id" display-name="Id" cell-width="5em" - display-align="right"></th> - + <th field-name="id" display-name="Id" cell-width="5em" display-align="right"></th> <th field-name="name" display-name="Name"></th> - <th field-name="name" display-name="Datacenter VIM Name"></th> + <th field-name="name" display-name="VIM's MANO Provider Name"></th> <th field-name="organization" display-name="Organization"></th> <th field-name="email" display-name="e-mail"></th> <th field-name="vimid" display-name="VIM id"></th> - - </th> + <th> + <div class="tr-ng-title"> + Creation Date + </div> + </th> + <th field-name="infrastructureStatus" display-name="Status"></th> </tr> </thead> <tbody> <tr> + <td> <span>{{gridItem.dateCreated| date:'medium'}} </span></td> <td nowrap="nowrap"> <a class="btn btn-danger" ng-click="deleteInfrastructure(gridItem, gridItem.id, gridItem.name)"><i class="fa fa-trash-o "></i></a> <a class="btn btn-primary" ng-href="#!/edit_infrastructure/{{gridDisplayItem.id}}"><i class="fa fa-pencil-square-o "></i></a> diff --git a/src/MANOplatformAdd.html b/src/MANOplatformAdd.html index 0a88f1d31bd3528e8499d7285088562c627ec60f..b2f88351fd503ab731e91c114f7e9cc74cedb671 100644 --- a/src/MANOplatformAdd.html +++ b/src/MANOplatformAdd.html @@ -16,8 +16,7 @@ <div class="form-group"> <label for="cat.version" class="col-sm-2 control-label">Version</label> <div class="col-sm-10"> - <input type="text" class="form-control" ng-model="cat.version" - value="" placeholder="version..." /> + <select class="form-control" ng-options="opt for opt in ['OSMvTHIRTEEN','OSMvELEVEN','OSMvTEN','OSMvNINE','OSMvEIGHT', 'GenericSOL005']" ng-model="cat.version" required><option></option></select> </div> </div> <div class="form-group"> diff --git a/src/VxFAdd.html b/src/VxFAdd.html index da0e7d9884b71ccf55db44624f0c2ee3a097ad0d..08abc7603679ad6aa758daa9ba42bf2430ac78f8 100644 --- a/src/VxFAdd.html +++ b/src/VxFAdd.html @@ -59,7 +59,7 @@ <div class="form-group"> <label for="role" class="col-sm-2 control-label">Packaging format</label> <div class="col-sm-10"> - <select class="form-control" ng-options="opt for opt in ['OSMvTEN', 'OSMvNINE','OSMvEIGHT', 'GenericSOL005']" ng-model="vxf.packagingFormat" required><option></option></select> + <select class="form-control" ng-options="opt for opt in ['OSMvTHIRTEEN', 'OSMvELEVEN', 'OSMvTEN', 'OSMvNINE','OSMvEIGHT', 'GenericSOL005']" ng-model="vxf.packagingFormat" required><option></option></select> </div> </div> diff --git a/src/VxFUpload.html b/src/VxFUpload.html index 1a5e24650caeb5395017422fe32b8549d558f69d..a8e10136aabdd7db6b61b25ac7b6444f8a41f663 100644 --- a/src/VxFUpload.html +++ b/src/VxFUpload.html @@ -19,7 +19,7 @@ <div class="form-group"> <label for="role" class="col-sm-2 control-label">Packaging format</label> <div class="col-sm-10"> - <select class="form-control" ng-options="opt for opt in ['OSMvTEN', 'OSMvNINE','OSMvEIGHT', 'GenericSOL005']" ng-model="vxf.packagingFormat" required><option></option></select> + <select class="form-control" ng-options="opt for opt in ['OSMvTHIRTEEN', 'OSMvELEVEN', 'OSMvTEN', 'OSMvNINE','OSMvEIGHT', 'GenericSOL005']" ng-model="vxf.packagingFormat" required><option></option></select> </div> </div> diff --git a/src/VxFs.html b/src/VxFs.html index 1cbb9ee251da296d35b4a9491fba0b50fdeff9cc..00c5b1579890a8e8131ce33923f1a10368739e59 100644 --- a/src/VxFs.html +++ b/src/VxFs.html @@ -78,6 +78,7 @@ <p>Date created: <strong>{{gridItem.dateCreated| date:'medium'}}</strong></p> <p>Last update: <strong>{{gridItem.dateUpdated | date:'medium' }}</strong></p> --> + <a class="btn btn-warning" ng-click="softDeleteVxF(gridItem, gridItem.id)"><i class="fa fa-trash-o "></i></a> <a class="btn btn-danger" ng-click="deleteVxF(gridItem, gridItem.id)"><i class="fa fa-trash-o "></i></a> <a class="btn btn-primary" ng-href="#!/vxf_edit/{{gridDisplayItem.id}}"><i class="fa fa-pencil-square-o "></i></a> <a class="btn btn-info" ng-href="#!/vxf_view/{{gridDisplayItem.id}}"><i class="fa fa-info-circle "></i></a> diff --git a/src/js/config.js.default b/src/js/config.js.default index edab654c6d951a5798ec325b2081c129ea5bab7f..2d3952636bdc68f7acdb742d08311ca60c1bf781 100644 --- a/src/js/config.js.default +++ b/src/js/config.js.default @@ -4,7 +4,7 @@ var appConfig = angular.module('portalwebapp.config',[]); appConfig.factory('APIEndPointService', function() { return { TITLE: "OpenSlice by ETSI", - WIKI: "https://openslice.readthedocs.io/en/stable/", + WIKI: "https://osl.etsi.org/documentation/", BUGZILLA: "ROOTURL/bugzilla/", STATUS: "ROOTURL/status/", APIURL: "http://localost:13000", diff --git a/src/js/controllers.js b/src/js/controllers.js index 6f7d7b315df4e3d2d49d9855ae33a113a5f4ca54..e1d7db3f3629baf9fdd6b959de101e4c5a4b9c49 100644 --- a/src/js/controllers.js +++ b/src/js/controllers.js @@ -276,7 +276,7 @@ appControllers.controller('ExperimentListController', ['$scope','$window','$log' - $scope.apps = AdminExperimentMetadata.query(function() { + $scope.apps = AdminExperimentMetadata.query(function() { angular.forEach( $scope.apps , function( app, appkey) { if ( app.iconsrc.indexOf( 'unknown' ) !== -1 ){ @@ -294,31 +294,40 @@ appControllers.controller('ExperimentListController', ['$scope','$window','$log' }); }); //query() returns all the subscribedresources - - - - $scope.deleteApp = function(gridItem, useridx){ - + + $scope.deleteApp = function(gridItem, useridx){ $log.debug("Selected to DELETE AdminExperimentMetadata with id = "+ useridx); - + var app=AdminExperimentMetadata.get({id:useridx}, function() { + $log.debug("WILL DELETE AdminExperimentMetadata with ID "+ app.id); + + if(popupService.showPopup('Really delete Application "'+app.name+'" ?')){ + + app.$delete(function(){ + $scope.apps.splice($scope.apps.indexOf(gridItem),1) + }, function errorCallback() { + alert( "Status:" + response.status + " - Failed to delete NSD! " + response.data["detail"] ); + }); + + } + }); + } - var app=AdminExperimentMetadata.get({id:useridx}, function() { - $log.debug("WILL DELETE AdminExperimentMetadata with ID "+ app.id); - - if(popupService.showPopup('Really delete Application "'+app.name+'" ?')){ - - app.$delete(function(){ - $scope.apps.splice($scope.apps.indexOf(gridItem),1) - }, function errorCallback(response) { - alert( "Status:" + response.status + " - Failed to delete NSD! " + response.data["detail"] ); - }); - - } - }); - - } - - + $scope.softDeleteApp = function(gridItem, useridx){ + $log.debug("Selected to SOFT DELETE AdminExperimentMetadata with id = "+ useridx); + var app=AdminExperimentMetadata.get({id:useridx}, function() { + $log.debug("WILL SOFT DELETE AdminExperimentMetadata with ID "+ app.id); + + if(popupService.showPopup('Really soft delete Application "'+app.name+'" ?')){ + //Here we can add a real http delete functionality. Thi + app.$softdelete(function(){ + $scope.apps.splice($scope.apps.indexOf(gridItem),1) + }, function errorCallback(response) { + alert( "Failed to soft delete NSD! Please check for related dependencies"); + }); + + } + }); + } }]); appControllers.controller('ExperimentAddController', function($scope, $location, @@ -365,7 +374,7 @@ appControllers.controller('ExperimentAddController', function($scope, $location, return $http({ method : 'POST', - url : APIEndPointService.APIURL+'/osapi/admin/experiments/', + url : APIEndPointService.APIURL+'/osapi/admin/experiments', headers : { 'Content-Type' : undefined }, @@ -421,7 +430,7 @@ appControllers.controller('ExperimentUploadController', function($scope, $locati return $http({ method : 'POST', - url : APIEndPointService.APIURL+'/osapi/admin/experiments/', + url : APIEndPointService.APIURL+'/osapi/admin/experiments', headers : { 'Content-Type' : undefined }, @@ -1120,6 +1129,25 @@ appControllers.controller('VxFListController', ['$scope','$window','$log', 'Admi }); } + $scope.softDeleteVxF = function(gridItem, useridx){ + + $log.debug("Selected to SOFT DELETE AdminVxFMetadata with id = "+ useridx); + + + var vxf=AdminVxFMetadata.get({id:useridx}, function() { + $log.debug("WILL SOFT DELETE VxFMetadatawith ID "+ vxf.id); + + if(popupService.showPopup('Really soft delete VxF "'+vxf.name+'" ?')){ + + vxf.$softdelete(function(){ + $scope.vxfs.splice($scope.vxfs.indexOf(gridItem),1) + }, function errorCallback() { + alert( "Failed to soft delete VNF! Please check for related dependencies" ); + }); + + } + }); + } }]); @@ -2028,7 +2056,7 @@ appControllers.controller('DeploymentAddController', ['$scope', '$route', '$root return $http({ method : 'POST', - url : APIEndPointService.APIURL+'/osapi/admin/deployments/', + url : APIEndPointService.APIURL+'/osapi/admin/deployments', headers : { 'Content-Type' : 'application/json' }, @@ -2680,24 +2708,48 @@ appControllers.controller('InfrastructureListController', ['$scope','$window','$ -appControllers.controller('InfrastructureAddController',function($scope, $location, Infrastructure){ +appControllers.controller('InfrastructureAddController', ['$scope','$window','$log', '$location', 'Infrastructure', 'AdminMANOprovider', function($scope, $window, $log, $location, Infrastructure, AdminMANOprovider){ $scope.portalinfrastructure=new Infrastructure(); + + $scope.manoproviders = AdminMANOprovider.query(function() { + + //console.log($scope.categories); + }); //query() returns all the categories + console.log($scope.manoproviders) + $scope.updateDatacentername = function() { + console.log("portalinfrastructure.mp.name = " + $scope.portalinfrastructure.mp.name ); + + $scope.portalinfrastructure.datacentername = $scope.portalinfrastructure.mp.name + console.log("portalinfrastructure.datacentername = " + $scope.portalinfrastructure.datacentername ); + + + } $scope.addInfrastructure =function(){ + + $scope.portalinfrastructure.$save(function(){ $location.path("/infrastructures"); }); } -}); - -appControllers.controller('InfrastructureEditController', ['$scope', '$route', '$routeParams', '$location', 'Infrastructure', '$anchorScroll', - function( $scope, $route, $routeParams, $location, Infrastructure, $anchorScroll){ +}]); +appControllers.controller('InfrastructureEditController', ['$scope', '$window', '$log', '$location', '$route', '$routeParams', 'Infrastructure', '$anchorScroll', 'AdminMANOprovider', + function( $scope, $window, $log, $location, $route, $routeParams, Infrastructure, $anchorScroll, AdminMANOprovider){ - //console.log("WILL EDIT User with ID "+$routeParams.id); + $scope.manoproviders = AdminMANOprovider.query(function() { + //console.log("WILL EDIT User with ID "+$routeParams.id); + }); + console.log($scope.manoproviders) + $scope.editDatacentername = function() { + console.log("portalinfrastructure.mp.name = " + $scope.portalinfrastructure.mp.name ); + + $scope.portalinfrastructure.datacentername = $scope.portalinfrastructure.mp.name + console.log("portalinfrastructure.datacentername = " + $scope.portalinfrastructure.datacentername ); + } $scope.updateInfrastructure=function(){ $scope.portalinfrastructure.$update(function(){ diff --git a/src/js/portalapp.js b/src/js/portalapp.js index 1d2735c61ea2678d67de2389c4f80d5ceaad6761..259224601027def4b744fd66603b1f034b6e3b8c 100644 --- a/src/js/portalapp.js +++ b/src/js/portalapp.js @@ -284,8 +284,6 @@ app.controller("LoginCtrl", ["$scope", "$location", "$window", "authenticationSv $rootScope.bugzilla = APIEndPointService.BUGZILLA; $rootScope.healthstatus = APIEndPointService.STATUS; $rootScope.weburl = APIEndPointService.WEBURL; - - $rootScope.currentYear = new Date().getFullYear() diff --git a/src/js/services.js b/src/js/services.js index ad064c0329373e6598040d9cce34cf146e1f2af0..8da120ab9e58ee03ccea166b986cdad35af26ee8 100644 --- a/src/js/services.js +++ b/src/js/services.js @@ -100,13 +100,14 @@ appServices.factory('Category', function($resource, APIEndPointService) { appServices.factory('ExperimentMetadata', function($resource, APIEndPointService) { return $resource(APIEndPointService.APIURL+"/osapi/experiments/:id", - { id: '@id' }, { - + { + id: '@id' + }, + { update: { method: 'PUT' // this method issues a PUT request } - }); - + }); }); @@ -114,13 +115,19 @@ appServices.factory('ExperimentMetadata', function($resource, APIEndPointService appServices.factory('AdminExperimentMetadata', function($resource, APIEndPointService) { return $resource(APIEndPointService.APIURL+"/osapi/admin/experiments/:id", - { id: '@id' }, { - - update: { - method: 'PUT' // this method issues a PUT request - } - }); - + { + id: '@id' + }, + { + update: { + method: 'PUT' // this method issues a PUT request + }, + softdelete:{ + method:'DELETE', + url:APIEndPointService.APIURL+"/osapi/admin/experiments/:id/softdelete", + params:{id: '@id'} + } + }); }); @@ -270,12 +277,17 @@ appServices.factory('VxFMetadata', function($resource, APIEndPointService) { appServices.factory('AdminVxFMetadata', function($resource, APIEndPointService) { return $resource(APIEndPointService.APIURL+"/osapi/admin/vxfs/:id", - {id : "@id" }, { - "update" : { - method : "PUT" - } - - }); + {id : "@id" }, + { + update: { + method: 'PUT' // this method issues a PUT request + }, + softdelete: { + method:'DELETE', + url:APIEndPointService.APIURL+"/osapi/admin/vxfs/:id/softdelete", + params:{id: '@id'} + } + }); });