1 import {Injectable} from "@angular/core";
 
   2 import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model";
 
   3 import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
 
   4 import {AppState} from "../../../../store/reducers";
 
   5 import {NgRedux} from "@angular-redux/store";
 
   6 import {ITreeNode} from "angular-tree-component/dist/defs/api";
 
   7 import {ModelInformationItem} from "../../../model-information/model-information.component";
 
   8 import {Constants} from "../../../../utils/constants";
 
   9 import {AaiService} from "../../../../services/aaiService/aai.service";
 
  10 import {ServiceModel} from "../../../../models/serviceModel";
 
  11 import {FormGroup} from "@angular/forms";
 
  12 import {ModelInfo} from "../../../../models/modelInfo";
 
  13 import {IframeService} from "../../../../utils/iframe.service";
 
  14 import {GenericPopupInterface} from "../generic-popup.interface";
 
  15 import {Subject} from "rxjs/Subject";
 
  16 import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
 
  17 import {BasicPopupService} from "../basic.popup.service";
 
  18 import {VfModuleInstance} from "../../../../models/vfModuleInstance";
 
  19 import {VfModuleControlGenerator} from "../../../genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator";
 
  20 import {FormControlModel} from "../../../../models/formControlModels/formControl.model";
 
  21 import * as _ from 'lodash';
 
  22 import {createVFModuleInstance, updateVFModuleInstance} from "../../../../storeUtil/utils/vfModule/vfModule.actions";
 
  24 export abstract class VfModulePopupServiceBase {
 
  28   serviceModel: ServiceModel;
 
  29   modelInformations: ModelInformationItem[] = [];
 
  31   closeDialogEvent: Subject<any> = new Subject<any>();
 
  32   isUpdateMode: boolean;
 
  33   storeVFModule = (that, formValues: any): void => {
 
  34     formValues.modelInfo = new ModelInfo(that.model);
 
  35     formValues.uuid = formValues.modelInfo.uuid;
 
  36     formValues.isMissingData = false;
 
  37     const vnf = that._store.getState().service.serviceInstance[that.uuidData.serviceId].vnfs[that.uuidData.vnfStoreKey];
 
  39     if (!that.uuidData.vFModuleStoreKey) {
 
  40       this._store.dispatch(createVFModuleInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, 0, that.uuidData.vnfStoreKey));
 
  42       this._store.dispatch(updateVFModuleInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, that.uuidData.vFModuleStoreKey, that.uuidData.vnfStoreKey));
 
  46   protected constructor(
 
  47     protected _basicControlGenerator: BasicControlGenerator,
 
  48     protected _vfModuleControlGenerator: VfModuleControlGenerator,
 
  49     protected _iframeService: IframeService,
 
  50     protected _defaultDataGeneratorService: DefaultDataGeneratorService,
 
  51     protected _aaiService: AaiService,
 
  52     protected _basicPopupService: BasicPopupService,
 
  53     protected _store: NgRedux<AppState>) {
 
  56   getInstance(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string): any {
 
  57     if (_.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) {
 
  58       return new VfModuleInstance();
 
  60     const vfModules = this._store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules;
 
  61     return vfModules[this.uuidData['modelName']][vfModuleStoreKey];
 
  64   getModelInformation(serviceId: string, modelName: string) {
 
  65     this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => {
 
  66       this.serviceModel = new ServiceModel(result);
 
  68       this.model = this._basicPopupService.getModelFromResponse(result, 'vfModules', modelName);
 
  69       const serviceInstance = this._store.getState().service.serviceInstance[serviceId];
 
  70       this.modelInformations = [
 
  71         new ModelInformationItem("Subscriber Name", "subscriberName", [this._basicPopupService.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId)], "", true),
 
  72         new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true),
 
  73         new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false),
 
  74         new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true),
 
  75         new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true),
 
  76         new ModelInformationItem("Description", "description", [this.model.description]),
 
  77         new ModelInformationItem("Category", "category", [this.model.category]),
 
  78         new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]),
 
  79         new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
 
  80         new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
 
  81         new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]),
 
  82         new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]),
 
  83         new ModelInformationItem("Minimum to instantiate", "min", this.model.min == undefined ? ['0'] : [this.model.min.toString()], "", true),
 
  84         new ModelInformationItem("Maximum to instantiate", "max", this.model.max == undefined ? ['1'] : [this.model.max.toString()], "", true),
 
  85         new ModelInformationItem("Recommended to instantiate", "initial", [this.model.initial])
 
  90   protected postSubmitIframeMessage(that) {
 
  91     window.parent.postMessage({
 
  92       eventId: 'submitIframe',
 
  94         serviceModelId: that.serviceModel.uuid
 
  99   onCancel(that, form) {
 
 101     that._iframeService.removeClassCloseModal('content');
 
 102     this.closeDialogEvent.next(that);
 
 105   getSubLeftTitle(): string {
 
 106     return this.model.name;
 
 109   getSubRightTitle(): string {
 
 110     return "Module (Heat stack) Instance Details";
 
 113   abstract getTitle(isUpdateMode : boolean) : string;
 
 114   abstract getControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, isUpdateMode: boolean);
 
 115   abstract getDynamicInputs(UUIDData : Object) : FormControlModel[];
 
 117   getGenericFormPopupDetails(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
 
 119     this.uuidData = uuidData;
 
 120     this.instance = this.getInstance(serviceId, vnfStoreKey, vfModuleStoreKey);
 
 121     this.getModelInformation(serviceId, uuidData['modelName']);
 
 123     return new FormPopupDetails(this,
 
 126       this.getTitle(isUpdateMode),
 
 127       this.getSubLeftTitle(),
 
 128       this.getSubRightTitle(),
 
 129       this.getControls(serviceId, vnfStoreKey, vfModuleStoreKey, isUpdateMode),
 
 130       this.getDynamicInputs(uuidData),
 
 131       this.modelInformations,
 
 132       (that, form: FormGroup) => {
 
 133         that.onSubmit(that, form);
 
 135       (that: any, form: FormGroup) => {
 
 136         that.onCancel(that, form);
 
 141   updateFormValueWithSupplementaryFile(form: FormGroup, that) {
 
 142     if (!_.isNil(form.controls['supplementaryFile_hidden_content']) && form.controls['supplementaryFile_hidden_content'].value) {
 
 143       form.value['supplementaryFileContent'] = JSON.parse(form.controls['supplementaryFile_hidden_content'].value);
 
 144       if (!_.isNil(form.controls['supplementaryFile_hidden'].value)) {
 
 145         form.value['supplementaryFileName'] = form.controls['supplementaryFile_hidden'].value.name;
 
 147         form.value['supplementaryFileName'] = that.instance.supplementaryFileName;
 
 150       delete form.value['supplementaryFileContent'];
 
 151       delete form.value['supplementaryFileName'];
 
 157 export class VfModulePopuopService extends VfModulePopupServiceBase implements GenericPopupInterface {
 
 160   constructor(_basicControlGenerator: BasicControlGenerator,
 
 161               _vfModuleControlGenerator: VfModuleControlGenerator,
 
 162               _iframeService: IframeService,
 
 163               _defaultDataGeneratorService: DefaultDataGeneratorService,
 
 164               _aaiService: AaiService,
 
 165               _basicPopupService : BasicPopupService,
 
 166               _store: NgRedux<AppState>) {
 
 167     super(_basicControlGenerator, _vfModuleControlGenerator, _iframeService, _defaultDataGeneratorService, _aaiService, _basicPopupService, _store);
 
 171   getDynamicInputs(UUIDData : Object) : FormControlModel[]{
 
 172     let dynamic = this._defaultDataGeneratorService.getArbitraryInputs(this._store.getState().service.serviceHierarchy[UUIDData['serviceId']].vfModules[UUIDData['modelName']].inputs);
 
 173     return this.getVFModuleDynamicInputs(dynamic, UUIDData);
 
 176   getVFModuleDynamicInputs(dynamicInputs : any, UUIDData : Object) : FormControlModel[] {
 
 177     let result : FormControlModel[] = [];
 
 179       let vfModuleInstance = null;
 
 180       if (_.has(this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs, UUIDData['vnfStoreKey']) &&
 
 181         _.has(this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs[UUIDData['vnfStoreKey']].vfModules, UUIDData['modelName'])) {
 
 182         vfModuleInstance = Object.assign({},this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs[UUIDData['vnfStoreKey']].vfModules[UUIDData['modelName']][UUIDData['vfModuleStoreKey']]);
 
 184       result = this._basicControlGenerator.getDynamicInputs(dynamicInputs, vfModuleInstance);
 
 190   getControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, isUpdateMode: boolean) {
 
 191     if (this._store.getState().service.serviceHierarchy[serviceId].service.vidNotions.instantiationType === 'Macro') {
 
 192       return this._vfModuleControlGenerator.getMacroFormControls(serviceId, vnfStoreKey, vfModuleStoreKey, this.uuidData, isUpdateMode);
 
 194       return this._vfModuleControlGenerator.getAlaCarteFormControls(serviceId, vnfStoreKey, vfModuleStoreKey,  this.uuidData, isUpdateMode);
 
 199   onSubmit(that, form: FormGroup) {
 
 200     form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']];
 
 201     this.updateFormValueWithSupplementaryFile(form, that);
 
 202     that.storeVFModule(that, form.value);
 
 203     this.postSubmitIframeMessage(that);
 
 204     this.onCancel(that, form);
 
 207   getTitle(isUpdateMode : boolean) : string {
 
 208     return isUpdateMode ? 'Edit Module (Heat stack)' : 'Set new Module (Heat stack)';