aboutsummaryrefslogtreecommitdiffstats
path: root/vid-app-common/src/main/webapp/app/vid/scripts/modals
diff options
context:
space:
mode:
authorIttay Stern <ittay.stern@att.com>2018-12-31 17:21:27 +0200
committerIttay Stern <ittay.stern@att.com>2019-01-09 20:19:55 +0200
commit6ad41e3ccd398a2721f41ad61c80b7bb03f7d127 (patch)
tree3bd672dff83e3218232cd8665680416b7fc26a5d /vid-app-common/src/main/webapp/app/vid/scripts/modals
parent5ec29ff5e3864f1ba6ecac71f8bffbefa400cf27 (diff)
Merge from ECOMP's repository
Main Features -------------- - Async-Instantiation jobs mechanism major update; still WIP (package `org.onap.vid.job`) - New features in View/Edit: Activate fabric configuration; show related networks; soft delete - Support AAI service-tree traversal (`AAIServiceTree`) - In-memory cache for SDC models and certain A&AI queries (`CacheProviderWithLoadingCache`) - Upgrade TOSCA Parser and add parsing options; fix malformed TOSCA models - Resolve Cloud-Owner values for MSO - Pass X-ONAP headers to MSO Infrastructure -------------- - Remove codehaus' jackson mapper; use soley fasterxml 2.9.7 - Surefire invokes both TestNG and JUnit tests - Support Kotlin source files - AaiController2 which handles errors in a "Spring manner" - Inline generated-sources and remove jsonschema2pojo Quality -------- - Cumulative bug fixes (A&AI API, UI timeouts, and many more) - Many Sonar issues cleaned-up - Some unused classes removed - Minor changes in vid-automation project, allowing some API verification to run Hard Merges ------------ - HTTP Clients (MSO, A&AI, WebConfig, OutgoingRequestHeadersTest) - Moved `package org.onap.vid.controllers` to `controller`, without plural -- just to keep semantic sync with ECOMP. Reference commit in ECOMP: 3d1141625 Issue-ID: VID-378 Change-Id: I9c8d1e74caa41815891d441fc0760bb5f29c5788 Signed-off-by: Ittay Stern <ittay.stern@att.com>
Diffstat (limited to 'vid-app-common/src/main/webapp/app/vid/scripts/modals')
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js16
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.controller.js138
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.css62
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.html78
4 files changed, 288 insertions, 6 deletions
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
index c6c9edf6..9a758cc7 100644
--- a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
@@ -121,13 +121,19 @@
};
var extractVNFModel = function (csarVNF, sdcService, selectionVNF) {
+ /**
+ @param selectionVNF A vnf *instance* selected in "available VNF" drop-down box
+ @param csarVNF A VNF *MODEL* that has an invariantUuid same as selectionVNF (might be
+ a different version; i.e. selectionVNF.modelVersionId <> csarVNF.uuid)
+ @param sdcService The Service *MODEL* which has the related VNF `csarVNF`.
+ */
var versionCsarData = {
vnfInstanceId: "",
vnfName: csarVNF.name,
modelInfo: {
modelType: "vnf",
modelInvariantId: csarVNF.invariantUuid,
- modelVersionId: selectionVNF.modelVersionId,
+ modelVersionId: csarVNF.uuid,
modelName: csarVNF.name,
modelVersion: csarVNF.version,
modelCustomizationName: csarVNF.modelCustomizationName,
@@ -145,12 +151,10 @@
instanceId: selectionVNF["service-instance-node"]["0"].properties['service-instance-id'],
modelInfo: {
modelType: "service",
- modelInvariantId: selectionVNF["service-instance-node"]["0"].properties['model-invariant-id'],
- modelVersionId: selectionVNF.modelVersionId,
+ modelInvariantId: sdcService.invariantUuid,
+ modelVersionId: sdcService.uuid,
modelName: sdcService.name,
- modelVersion: sdcService.version,
- modelCustomizationName: selectionVNF["service-instance-node"]["0"].properties['model-customization-name'], //TODO: Missing
- modelCustomizationId: selectionVNF["service-instance-node"]["0"].properties['model-customization-id']
+ modelVersion: sdcService.version
}
}
}
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.controller.js b/vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.controller.js
new file mode 100644
index 00000000..00f175e0
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.controller.js
@@ -0,0 +1,138 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+"use strict";
+
+var vfModuleActionModalController = function(COMPONENT, $scope, $uibModal, CreationService,
+ MsoService, AaiService, DeleteResumeService, DataService, $uibModalInstance, action, vfModule, featureFlags) {
+
+
+ var _this = this;
+
+ $scope.action = action;
+ $scope.vfModuleName = vfModule.name;
+ $scope.lcpAndTenant = null;
+ $scope.regionSelection = {lcpRegion: null, legacyRegion: null, tenant: null};
+ $scope.lcpRegionList = null;
+ $scope.isHomingData = false;
+ $scope.megaRegion = ['AAIAIC25', 'rdm3', 'rdm5a'];
+ $scope.isSoftDeleteEnabled = vfModule.nodeStatus.toLowerCase() !== 'assigned' && action === COMPONENT.DELETE;
+
+ $scope.isResumeEnabled = action === COMPONENT.RESUME;
+ if ($scope.isResumeEnabled) {
+ $scope.action = 'Instantiate';
+ }
+
+ initHomingData();
+
+ function getLcpCloudRegionTenantList() {
+ AaiService.getLcpCloudRegionTenantList(DataService
+ .getGlobalCustomerId(), DataService.getServiceType(), function(
+ response) {
+ $scope.lcpAndTenant = response;
+ $scope.isFeatureFlagCloudOwner = featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST);
+ $scope.lcpRegionList = _.uniqBy(response, 'cloudRegionId');
+ });
+ }
+
+ function initHomingData() {
+ AaiService.getHomingData(DataService.getVnfInstanceId(), DataService.getVfModuleInstanceId())
+ .then(function (res) {
+ if (res && res.data) {
+ $scope.regionSelection = {
+ lcpRegion: (res.data[COMPONENT.CLOUD_REGION_ID]) ? res.data[COMPONENT.CLOUD_REGION_ID] : null,
+ legacyRegion: null,
+ tenant: (res.data[COMPONENT.TENANT_ID]) ? res.data[COMPONENT.TENANT_ID] : null
+ };
+ $scope.isHomingData = $scope.regionSelection.lcpRegion !== null && res.data.tenant !== null;
+ $scope.isHomingData = $scope.isHomingData && (($scope.megaRegion).indexOf($scope.regionSelection.lcpRegion) === -1);
+ }
+
+ if (!$scope.isHomingData) {
+ getLcpCloudRegionTenantList();
+ }
+ })
+ .catch(function (error) {
+ getLcpCloudRegionTenantList();
+ });
+ };
+
+ function getLcpRegionId() {
+ if(_.isEmpty($scope.regionSelection.legacyRegion)) {
+ return $scope.regionSelection.lcpRegion
+ }
+ return $scope.regionSelection.legacyRegion;
+ }
+
+ $scope.deleteOrResume = function() {
+
+ var regionSelectionList = [({id: "lcpRegion", value: getLcpRegionId()})];
+ regionSelectionList.push({id: "tenant", value: $scope.regionSelection.tenant});
+
+ var requestParams = {};
+ var requestDetails;
+ var msoType;
+ if ($scope.isResumeEnabled) {
+ CreationService.initializeComponent(COMPONENT.VF_MODULE);
+ CreationService.setInventoryInfo();
+
+ requestDetails = CreationService.getMsoRequestDetails(regionSelectionList);
+ requestParams.url = CreationService.getMsoUrl();
+ msoType = COMPONENT.MSO_CREATE_REQ;
+ }
+ else {
+ DeleteResumeService.initializeComponent(COMPONENT.VF_MODULE);
+
+ requestDetails = DeleteResumeService.getMsoRequestDetails(regionSelectionList);
+ if(DeleteResumeService.isMacro === true) {
+ requestDetails.requestParameters.aLaCarte = false;
+ }
+ requestParams.url = DeleteResumeService.getMsoUrl();
+ msoType = COMPONENT.MSO_DELETE_REQ;
+ }
+
+ requestParams.requestDetails = requestDetails;
+ requestParams.userId = DataService.getLoggedInUserId();
+ $uibModalInstance.close({requestParams: requestParams, msoType: msoType});
+ };
+
+ $scope.softDelete = function() {
+
+ var requestParams = {
+ tenantId: $scope.regionSelection.tenant,
+ lcpCloudRegionId: getLcpRegionId(),
+ serviceInstanceId: DataService.getServiceInstanceId(),
+ vnfInstanceId: DataService.getVnfInstanceId(),
+ vfModuleInstanceId: DataService.getVfModuleInstanceId()
+ };
+
+ requestParams.userId = DataService.getLoggedInUserId();
+ $uibModalInstance.close({requestParams : requestParams, msoType: COMPONENT.MSO_DEACTIVATE_AND_CLOUD_DELETE});
+ };
+
+ $scope.cancel = function() {
+ $uibModalInstance.dismiss('cancel');
+ };
+
+};
+
+appDS2.controller("vfModuleActionModalController", [ "COMPONENT", "$scope", "$uibModal", "CreationService",
+ "MsoService", "AaiService", "DeleteResumeService", "DataService", "$uibModalInstance", "action", "vfModule", "featureFlags",
+ vfModuleActionModalController ]);
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.css b/vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.css
new file mode 100644
index 00000000..8193bd35
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.css
@@ -0,0 +1,62 @@
+.modal-dialog * {
+ font-family: OpenSans-Regular, sans-serif;
+}
+.modal-dialog {
+ width: 540px;
+}
+.modal-body {
+ width: 95%;
+ margin: auto;
+}
+.modal-body label:after{
+ color: red;
+ content: "*";
+ padding-left: 5px;
+}
+.modal-dialog .modal-x {
+ float: right;
+ margin-top: 10px;
+ height: 15px;
+ cursor:pointer;
+}
+.modal-body .user-explanation span {
+ line-height: 25px;
+}
+.modal-body .user-explanation h4{
+ line-height: 30px;
+}
+.region-section .field{
+ margin-top: 15px;
+ display: flex;
+}
+.region-section .field label{
+ width: 30%;
+ line-height: 35px;
+}
+.region-section .field select{
+ height: auto;
+}
+.region-section span{
+ margin-top: 20px;
+}
+.spinner{
+ display: none;
+}
+.region-section.is-loading .spinner{
+ display: block;
+ margin: 20px;
+ text-align: center;
+}
+.region-section.is-loading .region-user-selection{
+ display: none;
+}
+.modal-footer button{
+ width: 110px;
+}
+.modal-footer .cancel-btn{
+ margin-right: 15px;
+ margin-left: 15px;
+}
+.modal-footer .soft-delete-btn {
+ margin-right: 15px;
+} \ No newline at end of file
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.html b/vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.html
new file mode 100644
index 00000000..bb90ce1f
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.html
@@ -0,0 +1,78 @@
+<link rel="stylesheet" type="text/css" href="app/vid/styles/buttons.css"/>
+<link rel="stylesheet" type="text/css" href="app/vid/styles/modals.css"/>
+<link rel="stylesheet" type="text/css" href="app/vid/styles/networkNode.css"/>
+ <link rel="stylesheet" type="text/css" href="app/vid/scripts/modals/vf-module-homing-data-action/vf-module-homing-data-action.css"/>
+
+<div class="modal-header">
+ <span class="title" data-tests-id="modalTitle">{{action}} VF-Module</span>
+ <span class="top-btn sprite modal-x" data-ng-click="cancel()"></span>
+</div>
+
+<form name="regionSectionForm" class="region-section" novalidate data-ng-class="{'is-loading': !lcpAndTenant && !isHomingData}">
+ <div class="modal-body" id="modal-body">
+ <div class="user-explanation">
+ <span data-ng-if="isSoftDeleteEnabled">
+ <h4>Please select from the following options for {{vfModuleName}}:</h4>
+ <b>Delete</b>: Permanently delete the VF-Module and its assignments.<br>
+ <b>Soft-Delete</b>: Delete the VF-Module from the cloud but retain all its assignments.
+ This will allow you to rebuild the same VF-module later on by clicking the Resume button.
+ </span>
+ <span data-ng-if="!isSoftDeleteEnabled && !isResumeEnabled">
+ Are you sure you want to permanently delete this VF-Module ({{vfModuleName}})?
+ </span>
+ <span data-ng-if="isResumeEnabled && isHomingData">
+ Are you sure you would like to resume instantiation of ({{vfModuleName}})?
+ </span>
+ </div>
+
+ <div class="spinner">
+ <img src="app/vid/images/spinner.gif">
+ </div>
+
+ <div class="region-user-selection" data-ng-if="!isHomingData">
+ <span data-ng-if="!isResumeEnabled">Please provide the following information as entered on instantiation:</span>
+ <span data-ng-if="isResumeEnabled">Instantiation of the VF module ({{vfModuleName}}) with the same information provided requires the following homing information: </span>
+ <div class="lcp-region field">
+ <label>LCP Region</label>
+ <select name="lcp-region" required class="form-item wide"
+ data-tests-id="lcpRegion" data-ng-model="regionSelection.lcpRegion"
+ data-ng-change="regionSelection.tenant = null; regionSelection.legacyRegion = null;">
+ <option class="lcp-region-placeholder" value="" selected>Select LCP Region</option>
+ <option ng-repeat="option in lcpRegionList" value="{{option.cloudRegionId}}"
+ data-ng-if="option.isPermitted && !isFeatureFlagCloudOwner">{{option.cloudRegionId}}
+ </option>
+
+ <option ng-repeat="option in lcpRegionList" value="{{option.cloudRegionId}}"
+ data-ng-if="option.isPermitted && isFeatureFlagCloudOwner">
+ {{option.cloudRegionId}} ({{option.cloudOwner.trim().toUpperCase().replace("ATT-", "")}})
+ </option>
+ </select>
+ </div>
+
+ <div class="legacy-region field" data-ng-if="(megaRegion).indexOf(regionSelection.lcpRegion) > -1">
+ <label>Legacy Region</label>
+ <input type="text" data-tests-id="lcpRegionText" required data-ng-model="regionSelection.legacyRegion"
+ placeholder="Enter legacy region">
+ </div>
+
+ <div class="tenant field">
+ <label>Tenant</label>
+ <select name="tenant" required class="form-item wide"
+ data-tests-id="tenant" data-ng-model="regionSelection.tenant">
+ <option class="tenant-placeholder" value="" selected>Select Tenant Name</option>
+ <option ng-repeat="option in lcpAndTenant" class="tenantOption" value="{{option.tenantId}}"
+ data-ng-if="option.isPermitted && option.cloudRegionId === regionSelection.lcpRegion">{{option.tenantName}}
+ </option>
+ </select>
+ </div>
+ </div>
+ </div>
+
+ <div class="modal-footer">
+ <button class="soft-delete-btn blue" data-ng-if="isSoftDeleteEnabled" data-tests-id="softDeleteButton"
+ data-ng-click="softDelete()" ng-disabled="regionSectionForm.$invalid">Soft Delete</button>
+ <button class="delete-resume-btn blue" data-tests-id="confirmResumeDeleteButton" data-ng-click="deleteOrResume()"
+ ng-disabled="regionSectionForm.$invalid">{{action}}</button>
+ <button class="cancel-btn white" data-tests-id="cancel" data-ng-click="cancel()">Cancel</button>
+ </div>
+</form>