From 3eac76d85e3d4c208b163d95182deca5404522ab Mon Sep 17 00:00:00 2001 From: Kostis Trantzas <kostisgtr@gmail.com> Date: Wed, 28 Feb 2024 18:01:28 +0200 Subject: [PATCH] fix for #4 (develop branch) --- src/ExperimentAdd.html | 2 +- src/ExperimentUpload.html | 2 +- src/Experiments.html | 1 + src/InfrastructureAdd.html | 13 +++- src/InfrastructureEdit.html | 13 +++- src/Infrastructures.html | 17 +++--- src/MANOplatformAdd.html | 3 +- src/VxFAdd.html | 2 +- src/VxFUpload.html | 2 +- src/VxFs.html | 1 + src/js/config.js.default | 2 +- src/js/controllers.js | 118 ++++++++++++++++++++++++++---------- src/js/portalapp.js | 2 - src/js/services.js | 46 ++++++++------ 14 files changed, 154 insertions(+), 70 deletions(-) diff --git a/src/ExperimentAdd.html b/src/ExperimentAdd.html index e9321ec..3dad6fa 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 f0a4565..2771179 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 baed717..bb80c07 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 9c0877b..73dfac5 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 3b1a5e3..f6b51c8 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 02dcf2a..d7bc390 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 0a88f1d..b2f8835 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 da0e7d9..08abc76 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 1a5e246..a8e1013 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 1cbb9ee..00c5b15 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 edab654..2d39526 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 6f7d7b3..e1d7db3 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 1d2735c..2592246 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 ad064c0..8da120a 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'} + } + }); }); -- GitLab