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