diff options
Diffstat (limited to 'vid-webpack-master/src/app/components/vnf-popup/vnf-popup.components.ts')
-rw-r--r-- | vid-webpack-master/src/app/components/vnf-popup/vnf-popup.components.ts | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.components.ts b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.components.ts new file mode 100644 index 000000000..26e667d4c --- /dev/null +++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.components.ts @@ -0,0 +1,190 @@ +import {Component, OnInit, ViewChild} from "@angular/core"; +import {AaiService} from "../../services/aaiService/aai.service"; +import {ModelInformationItem} from "../../shared/components/model-information/model-information.component"; +import {ActivatedRoute} from "@angular/router"; +import {DialogComponent, DialogService} from "ng2-bootstrap-modal"; +import {InstancePopup} from "../instance-popup/instance-popup.components"; +import {ServiceModel} from "../../shared/models/serviceModel"; +import {Constants} from "../../shared/utils/constants"; +import * as _ from "lodash"; +import {VnfInstance} from "../../shared/models/vnfInstance"; +import {ServiceInstance} from "../../shared/models/serviceInstance"; +import {VnfInstanceDetailsComponent} from "./vnf-instance-details/vnf-instance-details.component"; +import {Subscriber} from "../../shared/models/subscriber"; +import {ServiceNodeTypes} from "../../shared/models/ServiceNodeTypes"; +import {AppState} from "../../store/reducers"; +import {NgRedux} from "@angular-redux/store"; +import {VfModuleInstance} from "../../shared/models/vfModuleInstance"; +import {VnfPopupService} from './vnf-popup-service'; +import {IframeService} from "../../shared/utils/iframe.service"; + +export interface VnfPopupModel { + serviceModelId: string; + modelName: string; + parentModelName: string; + modelType: string; + dynamicInputs: any; + userProvidedNaming: boolean; + isNewVfModule : boolean; +} + +@Component({ + selector: 'vnf-popup', + templateUrl: 'vnf-popup.html', + styleUrls: ['vnf-popup.scss'], + providers: [AaiService, VnfPopupService] +}) + +export class VnfPopupComponent extends DialogComponent<VnfPopupModel, boolean> implements VnfPopupModel, InstancePopup, OnInit { + + @ViewChild(VnfInstanceDetailsComponent) vnfInstanceDetails: VnfInstanceDetailsComponent; + + serviceModelId: string; + modelName: string; + parentModelName: string; + modelType: string; + isNewVfModule : boolean; + model: any; + serviceModel: ServiceModel; + popupTypeName: string; + serviceInstance: ServiceInstance; + vnfInstance: VnfInstance; + dynamicInputs; + userProvidedNaming: boolean; + typeMapperForTitle = { + VF: "VNF", + VFmodule: "Module (Heat stack)" + }; + + modelInformationItems: Array<ModelInformationItem> = []; + isNotUniqueInstanceName : boolean = false; + isNotUniqueVolumeGroupName : boolean = false; + hasGeneralApiError : boolean = false; + + parentElementClassName = 'content'; + + constructor(dialogService: DialogService, protected route: ActivatedRoute, protected _aaiService: AaiService, + private store: NgRedux<AppState>, + private _iframeService : IframeService, + private _vnfPopupService: VnfPopupService) { + super(dialogService); + this.vnfInstance = new VnfInstance(); + } + + updateGeneralErrorSection() : void { + this.hasGeneralApiError = this._vnfPopupService.onControlError( + this.vnfInstanceDetails, + this.vnfInstanceDetails.instanceFormGroup, + this.vnfInstanceDetails.isNotUniqueInstanceName, + this.vnfInstanceDetails.isNotUniqueVolumeGroupName); + } + + ngOnInit(): void { + this.updateServiceModelById(); + this.popupTypeName = this.getModelTypeForPopupTitle(); + this.updateServiceModelById(); + this.updateInstanceFromStore(); + } + + onCancelClick() { + this._iframeService.removeClassCloseModal(this.parentElementClassName); + super.close(); + } + + onServiceInstanceNameChanged(isNotUniqueInstanceName: boolean) : void { + this.isNotUniqueInstanceName = isNotUniqueInstanceName; + } + + onVolumeGroupNameChanged(isNotUniqueVolumeGroupName: boolean) : void { + this.isNotUniqueVolumeGroupName = isNotUniqueVolumeGroupName; + } + + onSetClick() { + this._iframeService.removeClassCloseModal(this.parentElementClassName); + this.result = true; + super.close(); + } + + updateServiceModelById() { + this._aaiService.getServiceModelById(this.serviceModelId).subscribe( + result => { + this.serviceModel = new ServiceModel(result); + this.model = this._vnfPopupService.getModelFromResponse(result, this.modelType, this.modelName); + this.modelInformationItems = this.createModelInformationItems(); + }, + error => { + console.log('error is ', error) + } + ); + } + + updateInstanceFromStore() { + let instance; + const serviceInstance = this.store.getState().service.serviceInstance[this.serviceModelId]; + if (this.modelType === ServiceNodeTypes.VF) { + instance = serviceInstance.vnfs[this.modelName] || new VnfInstance(); + } else { + instance = new VfModuleInstance(); + } + + if (instance.instanceParams && instance.instanceParams[0]) { + this.dynamicInputs = this.dynamicInputs.map(x => { + x.value = (instance.instanceParams[0][x.id]) ? instance.instanceParams[0][x.id] : x.value; + return x; + }); + } + this.vnfInstance = instance; + } + + getModelName(): string { + return this.modelName; + } + + getModelTypeForPopupTitle(): string { + if (_.has(this.typeMapperForTitle, this.modelType)) { + return this.typeMapperForTitle[this.modelType]; + } + return this.modelType; + } + + extractSubscriberNameBySubscriberId(subsriberId: string) { + var result: string = null; + var filteredArray: any = _.filter(this.store.getState().service.subscribers, function (o: Subscriber) { + return o.id === subsriberId + }) + if (filteredArray.length > 0) { + result = filteredArray[0].name; + } + return result; + } + + createModelInformationItems(): Array<ModelInformationItem> { + var serviceInstance = this.store.getState().service.serviceInstance[this.serviceModelId]; + + let items = [ + new ModelInformationItem("Subscriber Name", "subscriberName", [this.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId)], "", true), + new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true), + + new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false), + new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true), + new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true), + new ModelInformationItem("Description", "description", [this.model.description]), + new ModelInformationItem("Category", "category", [this.model.category]), + new ModelInformationItem("Sub Category", "subCategory",[this.model.subCategory]), + new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true), + new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true), + new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]), + new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]), + + + ]; + if (this.modelType === 'VFmodule') { + items.push(new ModelInformationItem("Minimum to instantiate", "min", [this.model.min], "", true), + new ModelInformationItem("Maximum to instantiate", "max", this.model.max == undefined ? [1] : [this.model.max], "", true), + new ModelInformationItem("Recommended to instantiate", "initial", [this.model.initial])); + + } + + return items; + } +} |