diff options
Diffstat (limited to 'catalog-ui')
8 files changed, 355 insertions, 197 deletions
diff --git a/catalog-ui/src/app/models/component-metadata.ts b/catalog-ui/src/app/models/component-metadata.ts index e135e897de..c79552844d 100644 --- a/catalog-ui/src/app/models/component-metadata.ts +++ b/catalog-ui/src/app/models/component-metadata.ts @@ -19,7 +19,7 @@ */ import { CapabilitiesGroup, RequirementsGroup } from 'app/models'; -import { ComponentType } from 'app/utils'; +import {ComponentState, ComponentType} from 'app/utils'; import { IMainCategory } from './category'; import { Metadata } from "app/models/metadata"; /** @@ -215,4 +215,8 @@ export class ComponentMetadata implements IComponentMetadata { public getTypeUrl(): string { return this.componentType === ComponentType.RESOURCE ? 'resources/' : 'services/'; } + + public isComponentDataEditable(): boolean { + return this.lifecycleState !== ComponentState.NOT_CERTIFIED_CHECKOUT; + } } diff --git a/catalog-ui/src/app/models/interfaceOperation.ts b/catalog-ui/src/app/models/interfaceOperation.ts index 9d8ab366a2..0768054df3 100644 --- a/catalog-ui/src/app/models/interfaceOperation.ts +++ b/catalog-ui/src/app/models/interfaceOperation.ts @@ -103,6 +103,10 @@ export class BEInterfaceOperationModel { } export class InterfaceOperationModel extends BEInterfaceOperationModel { + isCollapsed: boolean = true; + isEllipsis: boolean; + MAX_LENGTH = 75; + interfaceType: string; interfaceId: string; operationType: string; @@ -127,9 +131,22 @@ export class InterfaceOperationModel extends BEInterfaceOperationModel { public displayType(): string { return displayType(this.interfaceType); } + + getDescriptionEllipsis(): string { + if (this.isCollapsed && this.description.length > this.MAX_LENGTH) { + return this.description.substr(0, this.MAX_LENGTH - 3) + '...'; + } + return this.description; + } + + toggleCollapsed(e) { + e.stopPropagation(); + this.isCollapsed = !this.isCollapsed; + } + } -export class ComponentInstanceInterfaceModel { +export class ComponentInterfaceDefinitionModel { type: string; uniqueId: string; operations: Array<InterfaceOperationModel>; diff --git a/catalog-ui/src/app/ng2/pages/composition/interface-operatons/interface-operations.component.ts b/catalog-ui/src/app/ng2/pages/composition/interface-operatons/interface-operations.component.ts index 17f697ecda..07d8fd6eea 100644 --- a/catalog-ui/src/app/ng2/pages/composition/interface-operatons/interface-operations.component.ts +++ b/catalog-ui/src/app/ng2/pages/composition/interface-operatons/interface-operations.component.ts @@ -29,7 +29,7 @@ import {PluginsService} from "app/ng2/services/plugins.service"; import {SelectedComponentType} from "../common/store/graph.actions"; import {WorkspaceService} from "../../workspace/workspace.service"; -import {ComponentInstanceInterfaceModel, InterfaceOperationModel} from "../../../../models/interfaceOperation"; +import {ComponentInterfaceDefinitionModel, InterfaceOperationModel} from "../../../../models/interfaceOperation"; import {InterfaceOperationHandlerComponent} from "./operation-creator/interface-operation-handler.component"; import {ArtifactModel, ButtonModel, ComponentInstance, ComponentMetadata, InputBEModel, InterfaceModel, ModalModel} from 'app/models'; @@ -85,7 +85,7 @@ class ModalTranslation { } } -export class UIInterfaceModel extends ComponentInstanceInterfaceModel { +export class UIInterfaceModel extends ComponentInterfaceDefinitionModel { isCollapsed: boolean = false; constructor(interf?: any) { @@ -163,7 +163,7 @@ export class InterfaceOperationsComponent { this.sortInterfaces(); } - private initInterfaces(interfaces: ComponentInstanceInterfaceModel[]): void { + private initInterfaces(interfaces: ComponentInterfaceDefinitionModel[]): void { this.interfaces = _.map(interfaces, (interfaceModel) => new UIInterfaceModel(interfaceModel)); } diff --git a/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.component.html b/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.component.html index ce4738a780..7a73a5babc 100644 --- a/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.component.html +++ b/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.component.html @@ -28,7 +28,7 @@ <sdc-input label="{{ 'OPERATION_INTERFACE_TYPE' | translate }}" [(value)]="interfaceType" - [disabled]=isViewOnly> + [disabled]=!isViewOnly> </sdc-input> </div> @@ -36,7 +36,7 @@ <sdc-input label="{{ 'OPERATION_NAME' | translate }}" [(value)]="operationToUpdate.name" - [disabled]=isViewOnly> + [disabled]=!isViewOnly> </sdc-input> </div> </div> diff --git a/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.component.ts b/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.component.ts index f357ddfc54..059708592e 100644 --- a/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.component.ts +++ b/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.component.ts @@ -49,6 +49,7 @@ export class InterfaceOperationHandlerComponent { selectedInterfaceOperation: InterfaceOperationModel; validityChangedCallback: Function; isViewOnly: boolean; + interfaceTypesMap: Map<string, string[]>; }; dataTypeMap$: Observable<Map<string, DataTypeModel>>; @@ -63,6 +64,10 @@ export class InterfaceOperationHandlerComponent { isLoading: boolean = false; readonly: boolean; isViewOnly: boolean; + interfaceTypes: Array<DropdownValue> = []; + interfaceOperations: Array<DropdownValue> = []; + + interfaceTypesMap: Map<string, string[]>; toscaArtifactTypeSelected: string; toscaArtifactTypeProperties: Array<PropertyBEModel> = []; @@ -71,6 +76,7 @@ export class InterfaceOperationHandlerComponent { toscaArtifactTypes: Array<DropdownValue> = []; enableAddArtifactImplementation: boolean; + propertyValueValid: boolean = true; inputTypeOptions: any[]; @@ -89,7 +95,7 @@ export class InterfaceOperationHandlerComponent { ngOnInit() { this.isViewOnly = this.input.isViewOnly; - this.interfaceType = this.input.selectedInterface.displayType(); + this.interfaceType = this.input.selectedInterface.type; this.operationToUpdate = this.input.selectedInterfaceOperation; this.operationToUpdate.interfaceId = this.input.selectedInterface.uniqueId; this.operationToUpdate.interfaceType = this.input.selectedInterface.type; @@ -105,7 +111,13 @@ export class InterfaceOperationHandlerComponent { listToscaDataDefinition: Array<InputOperationParameter> = []; } } + this.inputs = Array.from(this.operationToUpdate.inputs.listToscaDataDefinition); + this.interfaceTypesMap = this.input.interfaceTypesMap; + this.loadInterfaceTypesAndOperations(); + this.removeImplementationQuote(); + this.validityChanged(); + this.loadInterfaceOperationImplementation(); } private loadInterfaceOperationImplementation() { @@ -117,13 +129,13 @@ export class InterfaceOperationHandlerComponent { this.getArtifactTypesSelected(); } - onDescriptionChange= (value: any): void => { + onDescriptionChange = (value: any): void => { this.operationToUpdate.description = value; } onImplementationNameChange(value: any) { this.readonly = true - if (value) { + if (value || value === '') { let artifact = new ArtifactModel(); artifact.artifactName = value; this.operationToUpdate.implementation = artifact; @@ -141,6 +153,7 @@ export class InterfaceOperationHandlerComponent { this.toscaArtifactTypeSelected = undefined; this.artifactVersion = undefined; if (this.operationToUpdate.implementation.artifactType) { + this.operationToUpdate.implementation.artifactName = ''; this.artifactName = undefined; } this.toscaArtifactTypeProperties = undefined; @@ -281,7 +294,6 @@ export class InterfaceOperationHandlerComponent { if (changedProperty.value instanceof Object) { changedProperty.value = JSON.stringify(changedProperty.value); } - this.toscaArtifactTypeProperties.find(artifactProperty => artifactProperty.name == changedProperty.name); const property = this.toscaArtifactTypeProperties.find(artifactProperty => artifactProperty.name == changedProperty.name); property.value = changedProperty.value; } @@ -335,4 +347,12 @@ export class InterfaceOperationHandlerComponent { }); return inputList; } + + private loadInterfaceTypesAndOperations() { + console.log("loadInterfaceTypesAndOperations ", this.interfaceTypesMap.keys()); + + Array.from(this.interfaceTypesMap.keys()).forEach(value => this.interfaceTypes.push(new DropdownValue(value, value))); + console.log("loadInterfaceTypesAndOperations interfaceType ", this.interfaceTypes); + } + } diff --git a/catalog-ui/src/app/ng2/pages/interface-definition/interface-definition.page.component.ts b/catalog-ui/src/app/ng2/pages/interface-definition/interface-definition.page.component.ts index 2a77b5e996..8dd17f60e2 100644 --- a/catalog-ui/src/app/ng2/pages/interface-definition/interface-definition.page.component.ts +++ b/catalog-ui/src/app/ng2/pages/interface-definition/interface-definition.page.component.ts @@ -18,36 +18,46 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -import {Component, Input, Inject, ComponentRef} from '@angular/core'; -import {Component as IComponent } from 'app/models/components/component'; +import {Component, ComponentRef, Inject, Input} from '@angular/core'; +import {Component as IComponent} from 'app/models/components/component'; -import { SdcConfigToken, ISdcConfig } from "app/ng2/config/sdc-config.config"; -import {TranslateService } from "app/ng2/shared/translator/translate.service"; +import {ISdcConfig, SdcConfigToken} from "app/ng2/config/sdc-config.config"; +import {TranslateService} from "app/ng2/shared/translator/translate.service"; -import { ModalComponent } from 'app/ng2/components/ui/modal/modal.component'; -import {ModalService } from 'app/ng2/services/modal.service'; -import { - OperationModel, - InterfaceModel, - CapabilitiesGroup, - ButtonModel, ModalModel -} from 'app/models'; +import {ModalComponent} from 'app/ng2/components/ui/modal/modal.component'; +import {ModalService} from 'app/ng2/services/modal.service'; +import {ButtonModel, CapabilitiesGroup, ModalModel, OperationModel} from 'app/models'; -import {ComponentServiceNg2 } from 'app/ng2/services/component-services/component.service'; +import {ComponentServiceNg2} from 'app/ng2/services/component-services/component.service'; -import { SdcUiServices } from 'onap-ui-angular'; +import {SdcUiServices} from 'onap-ui-angular'; import {TopologyTemplateService} from "../../services/component-services/topology-template.service"; -import {InputOperationParameter, InterfaceOperationModel} from "../../../models/interfaceOperation"; -import {PropertyParamRowComponent} from "../composition/interface-operatons/operation-creator/property-param-row/property-param-row.component"; -import {InterfaceOperationHandlerComponent} from "../composition/interface-operatons/operation-creator/interface-operation-handler.component"; -import {DropdownValue} from "../../components/ui/form-components/dropdown/ui-element-dropdown.component"; +import { + ComponentInterfaceDefinitionModel, + InputOperationParameter, + InterfaceOperationModel +} from "../../../models/interfaceOperation"; +import { + PropertyParamRowComponent +} from "../composition/interface-operatons/operation-creator/property-param-row/property-param-row.component"; +import { + InterfaceOperationHandlerComponent +} from "../composition/interface-operatons/operation-creator/interface-operation-handler.component"; +import { + DropdownValue +} from "../../components/ui/form-components/dropdown/ui-element-dropdown.component"; +import {ToscaArtifactModel} from "../../../models/toscaArtifact"; +import {ToscaArtifactService} from "../../services/tosca-artifact.service"; +import { + UIInterfaceOperationModel +} from "../composition/interface-operatons/interface-operations.component"; export class UIOperationModel extends OperationModel { isCollapsed: boolean = true; isEllipsis: boolean; MAX_LENGTH = 75; - constructor(operation: OperationModel) { + constructor(operation: UIOperationModel) { super(operation); if (!operation.description) { @@ -99,15 +109,14 @@ class ModalTranslation { } } -// tslint:disable-next-line:max-classes-per-file -export class UIInterfaceModel extends InterfaceModel { +export class UIInterfaceModel extends ComponentInterfaceDefinitionModel { isCollapsed: boolean = false; - constructor(interfaceData?: any) { - super(interfaceData); + constructor(interf?: any) { + super(interf); this.operations = _.map( this.operations, - (operation) => new UIOperationModel(operation) + (operation) => new UIInterfaceOperationModel(operation) ); } @@ -134,12 +143,15 @@ export class InterfaceDefinitionComponent { deploymentArtifactsFilePath: Array<DropdownValue> = []; toscaArtifactTypes: Array<DropdownValue> = []; + interfaceTypesTest: Array<DropdownValue> = []; + interfaceTypesMap: Map<string, string[]>; isLoading: boolean; interfaceTypes: { [interfaceType: string]: string[] }; modalTranslation: ModalTranslation; workflows: any[]; capabilities: CapabilitiesGroup; + isViewOnly: boolean; @Input() component: IComponent; @Input() readonly: boolean; @@ -149,18 +161,25 @@ export class InterfaceDefinitionComponent { constructor( @Inject(SdcConfigToken) private sdcConfig: ISdcConfig, @Inject("$state") private $state: ng.ui.IStateService, + @Inject("Notification") private notification: any, private translateService: TranslateService, private componentServiceNg2: ComponentServiceNg2, private modalServiceNg2: ModalService, private modalServiceSdcUI: SdcUiServices.ModalService, - private topologyTemplateService: TopologyTemplateService + private topologyTemplateService: TopologyTemplateService, + private toscaArtifactService: ToscaArtifactService ) { this.modalTranslation = new ModalTranslation(translateService); + this.interfaceTypesMap = new Map<string, string[]>(); } ngOnInit(): void { - if(this.component) { + console.info("this.component.lifecycleState ", this.component.lifecycleState); + if (this.component) { + this.isViewOnly = this.component.componentMetadata.isComponentDataEditable(); this.initInterfaceDefinition(); + this.loadInterfaceTypes(); + this.loadToscaArtifacts(); } } @@ -168,14 +187,18 @@ export class InterfaceDefinitionComponent { return this.modalServiceNg2.closeCurrentModal(); } - private enableOrDisableSaveButton = (): boolean => { - return true; + private disableSaveButton = (): boolean => { + return this.isViewOnly || + (this.isEnableAddArtifactImplementation() + && (!this.modalInstance.instance.dynamicContent.instance.toscaArtifactTypeSelected || + !this.modalInstance.instance.dynamicContent.instance.artifactName) + ); } onSelectInterfaceOperation(interfaceModel: UIInterfaceModel, operation: InterfaceOperationModel) { const cancelButton: ButtonModel = new ButtonModel(this.modalTranslation.CANCEL_BUTTON, 'outline white', this.cancelAndCloseModal); const saveButton: ButtonModel = new ButtonModel(this.modalTranslation.SAVE_BUTTON, 'blue', () => - null, this.enableOrDisableSaveButton); + this.updateOperation(), this.disableSaveButton); const interfaceDataModal: ModalModel = new ModalModel('l', this.modalTranslation.EDIT_TITLE, '', [saveButton, cancelButton], 'custom'); this.modalInstance = this.modalServiceNg2.createCustomModal(interfaceDataModal); @@ -188,13 +211,46 @@ export class InterfaceDefinitionComponent { toscaArtifactTypes: this.toscaArtifactTypes, selectedInterface: interfaceModel, selectedInterfaceOperation: operation, - validityChangedCallback: this.enableOrDisableSaveButton, - isViewOnly: true - } - ); + validityChangedCallback: this.disableSaveButton, + isViewOnly: this.isViewOnly, + interfaceTypesMap: this.interfaceTypesMap, + }); this.modalInstance.instance.open(); } + private updateOperation = (): void => { + let operationToUpdate = this.modalInstance.instance.dynamicContent.instance.operationToUpdate; + this.componentServiceNg2.updateComponentInterfaceOperation(this.component.uniqueId, operationToUpdate) + .subscribe((newOperation: InterfaceOperationModel) => { + let oldOpIndex; + let oldInterf; + this.interfaces.forEach(interf => { + interf.operations.forEach(op => { + if (op.uniqueId === newOperation.uniqueId) { + oldInterf = interf; + oldOpIndex = interf.operations.findIndex((el) => el.uniqueId === op.uniqueId); + } + }); + }); + newOperation = this.handleEnableAddArtifactImplementation(newOperation); + oldInterf.operations.splice(oldOpIndex, 1); + oldInterf.operations.push(new InterfaceOperationModel(newOperation)); + }); + this.modalServiceNg2.closeCurrentModal(); + } + + private handleEnableAddArtifactImplementation = (newOperation: InterfaceOperationModel): InterfaceOperationModel => { + if (!this.isEnableAddArtifactImplementation()) { + newOperation.implementation.artifactType = null; + newOperation.implementation.artifactVersion = null; + } + return newOperation; + } + + private isEnableAddArtifactImplementation = (): boolean => { + return this.modalInstance.instance.dynamicContent.instance.enableAddArtifactImplementation; + } + private initInterfaceDefinition() { this.isLoading = true; this.interfaces = []; @@ -207,8 +263,39 @@ export class InterfaceDefinitionComponent { }); } + private loadToscaArtifacts() { + this.toscaArtifactService.getToscaArtifacts(this.component.model).subscribe(response => { + if (response) { + let toscaArtifactsFound = <ToscaArtifactModel[]>_.values(response); + toscaArtifactsFound.forEach(value => this.toscaArtifactTypes.push(new DropdownValue(value, value.type))); + } + }, error => { + this.notification.error({ + message: 'Failed to Load Tosca Artifacts:' + error, + title: 'Failure' + }); + }); + } + + private loadInterfaceTypes() { + this.componentServiceNg2.getInterfaceTypes(this.component).subscribe(response => { + if (response) { + console.info("loadInterfaceTypes ", response); + for (const interfaceType in response) { + this.interfaceTypesMap.set(interfaceType, response[interfaceType]); + this.interfaceTypesTest.push(new DropdownValue(interfaceType, interfaceType)); + } + } + }, error => { + this.notification.error({ + message: 'Failed to Load Interface Types:' + error, + title: 'Failure' + }); + }); + } + collapseAll(value: boolean = true): void { - _.forEach(this.interfaces, (interfaceData) => { + this.interfaces.forEach(interfaceData => { interfaceData.isCollapsed = value; }); } diff --git a/catalog-ui/src/app/ng2/services/component-services/component.service.ts b/catalog-ui/src/app/ng2/services/component-services/component.service.ts index 8f23f78c9d..8d91eede84 100644 --- a/catalog-ui/src/app/ng2/services/component-services/component.service.ts +++ b/catalog-ui/src/app/ng2/services/component-services/component.service.ts @@ -19,32 +19,40 @@ */ import * as _ from "lodash"; -import {Injectable, Inject} from '@angular/core'; +import {Inject, Injectable} from '@angular/core'; import {Observable} from 'rxjs/Observable'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/toPromise'; -import { Component, InputBEModel, InstancePropertiesAPIMap, FilterPropertiesAssignmentData, OperationModel, CreateOperationResponse, ArtifactModel} from "app/models"; -import {COMPONENT_FIELDS} from "app/utils"; +import { + Component, + FilterPropertiesAssignmentData, + InputBEModel, + InstancePropertiesAPIMap, + OperationModel +} from "app/models"; +import {API_QUERY_PARAMS, COMPONENT_FIELDS} from "app/utils"; import {ComponentGenericResponse} from "../responses/component-generic-response"; import {InstanceBePropertiesMap} from "../../../models/properties-inputs/property-fe-map"; -import {API_QUERY_PARAMS} from "app/utils"; import {ComponentType, ServerTypeUrl, SERVICE_FIELDS} from "../../../utils/constants"; -import {SdcConfigToken, ISdcConfig} from "../../config/sdc-config.config"; +import {ISdcConfig, SdcConfigToken} from "../../config/sdc-config.config"; import {IDependenciesServerResponse} from "../responses/dependencies-server-response"; import {AutomatedUpgradeGenericResponse} from "../responses/automated-upgrade-response"; import {IAutomatedUpgradeRequestObj} from "../../pages/automated-upgrade/automated-upgrade.service"; import {ComponentInstance} from "../../../models/componentsInstances/componentInstance"; import {CommonUtils} from "../../../utils/common-utils"; -import {RelationshipModel} from "../../../models/graph/relationship"; -import { HttpClient, HttpParams, HttpHeaders } from "@angular/common/http"; -import { BEOperationModel, InterfaceModel } from "../../../models/operation"; -import { PropertyBEModel } from "../../../models/properties-inputs/property-be-model"; -import { PolicyInstance } from "../../../models/graph/zones/policy-instance"; -import { ConstraintObject } from "../../components/logic/service-dependencies/service-dependencies.component"; -import { Requirement } from "../../../models/requirement"; -import { Capability } from "../../../models/capability"; -import { OutputBEModel } from "app/models/attributes-outputs/output-be-model"; -import { HttpHelperService } from '../http-hepler.service'; +import {HttpClient, HttpHeaders, HttpParams} from "@angular/common/http"; +import {BEOperationModel, InterfaceModel} from "../../../models/operation"; +import {PropertyBEModel} from "../../../models/properties-inputs/property-be-model"; +import {PolicyInstance} from "../../../models/graph/zones/policy-instance"; +import { + ConstraintObject +} from "../../components/logic/service-dependencies/service-dependencies.component"; +import {OutputBEModel} from "app/models/attributes-outputs/output-be-model"; +import {HttpHelperService} from '../http-hepler.service'; +import { + BEInterfaceOperationModel, + InterfaceOperationModel +} from "../../../models/interfaceOperation"; /* PLEASE DO NOT USE THIS SERVICE IN ANGULAR2! Use the topology-template.service instead @@ -54,23 +62,24 @@ export class ComponentServiceNg2 { protected baseUrl; - constructor(protected http: HttpClient, @Inject(SdcConfigToken) sdcConfig:ISdcConfig) { + constructor(protected http: HttpClient, @Inject(SdcConfigToken) sdcConfig: ISdcConfig) { this.baseUrl = sdcConfig.api.root + sdcConfig.api.component_api_root; } - protected getComponentDataByFieldsName(componentType:string, componentId:string, fields:Array<string>):Observable<ComponentGenericResponse> { + protected getComponentDataByFieldsName(componentType: string, componentId: string, fields: Array<string>): Observable<ComponentGenericResponse> { let params: HttpParams = new HttpParams(); - fields.forEach((field:string):void => { + fields.forEach((field: string): void => { params = params.append(API_QUERY_PARAMS.INCLUDE, field); }); return this.http.get<ComponentGenericResponse>(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/filteredDataByParams', {params: params}) - .map((res) => { - return new ComponentGenericResponse().deserialize(res); - }); + .map((res) => { + return new ComponentGenericResponse().deserialize(res); + }); } - protected getServerTypeUrl = (componentType:string):string => { + + protected getServerTypeUrl = (componentType: string): string => { switch (componentType) { case ComponentType.SERVICE: return ServerTypeUrl.SERVICES; @@ -79,84 +88,83 @@ export class ComponentServiceNg2 { } } - getFullComponent(uniqueId:string):Observable<ComponentGenericResponse> { + getFullComponent(uniqueId: string): Observable<ComponentGenericResponse> { return this.http.get<ComponentGenericResponse>(this.baseUrl + uniqueId) - .map((res) => { - return new ComponentGenericResponse().deserialize(res); - }); + .map((res) => { + return new ComponentGenericResponse().deserialize(res); + }); } - getComponentMetadata(uniqueId:string, type:string):Observable<ComponentGenericResponse> { + getComponentMetadata(uniqueId: string, type: string): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(type, uniqueId, [COMPONENT_FIELDS.COMPONENT_METADATA]); } - - getComponentInstanceAttributesAndProperties(component:Component):Observable<ComponentGenericResponse> { + getComponentInstanceAttributesAndProperties(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_PROPERTIES, COMPONENT_FIELDS.COMPONENT_INSTANCES_ATTRIBUTES]); } - getComponentInstanceProperties(component:Component): Observable<ComponentGenericResponse> { + getComponentInstanceProperties(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_PROPERTIES]); } - getComponentAttributes(component:Component):Observable<ComponentGenericResponse> { + getComponentAttributes(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_ATTRIBUTES]); } - getComponentCompositionData(component:Component):Observable<ComponentGenericResponse> { + getComponentCompositionData(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_RELATION, COMPONENT_FIELDS.COMPONENT_INSTANCES, COMPONENT_FIELDS.COMPONENT_NON_EXCLUDED_POLICIES, COMPONENT_FIELDS.COMPONENT_NON_EXCLUDED_GROUPS]); } - getComponentResourcePropertiesData(component:Component):Observable<ComponentGenericResponse> { + getComponentResourcePropertiesData(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES, COMPONENT_FIELDS.COMPONENT_POLICIES, COMPONENT_FIELDS.COMPONENT_NON_EXCLUDED_GROUPS]); } - getComponentResourceAttributesData(component:Component):Observable<ComponentGenericResponse> { + getComponentResourceAttributesData(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES, COMPONENT_FIELDS.COMPONENT_NON_EXCLUDED_GROUPS]); } - getComponentResourceInstances(component:Component):Observable<ComponentGenericResponse> { + getComponentResourceInstances(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES]); } - getComponentInputs(component:Component):Observable<ComponentGenericResponse> { + getComponentInputs(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INPUTS]); } - getComponentInputsWithProperties(component:Component):Observable<ComponentGenericResponse> { + getComponentInputsWithProperties(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INPUTS, COMPONENT_FIELDS.COMPONENT_INSTANCES, COMPONENT_FIELDS.COMPONENT_INSTANCES_PROPERTIES, COMPONENT_FIELDS.COMPONENT_PROPERTIES]); } - getComponentDeploymentArtifacts(component:Component):Observable<ComponentGenericResponse> { + getComponentDeploymentArtifacts(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_DEPLOYMENT_ARTIFACTS]); } - getComponentInformationalArtifacts(component:Component):Observable<ComponentGenericResponse> { + getComponentInformationalArtifacts(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INFORMATIONAL_ARTIFACTS]); } - getComponentInformationalArtifactsAndInstances(component:Component):Observable<ComponentGenericResponse> { + getComponentInformationalArtifactsAndInstances(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INFORMATIONAL_ARTIFACTS, COMPONENT_FIELDS.COMPONENT_INSTANCES]); } - getComponentToscaArtifacts(component:Component):Observable<ComponentGenericResponse> { + getComponentToscaArtifacts(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_TOSCA_ARTIFACTS]); } - getComponentProperties(component:Component):Observable<ComponentGenericResponse> { + getComponentProperties(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_PROPERTIES]); } - getInterfaceOperations(component:Component):Observable<ComponentGenericResponse> { + getInterfaceOperations(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INTERFACE_OPERATIONS]); } - getInterfaceOperation(component:Component, operation:OperationModel):Observable<OperationModel> { + getInterfaceOperation(component: Component, operation: OperationModel): Observable<OperationModel> { return this.http.get<OperationModel>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/interfaceOperations/' + operation.uniqueId); } // tslint:disable-next-line:member-ordering - createInterfaceOperation(component:Component, operation:OperationModel):Observable<OperationModel> { + createInterfaceOperation(component: Component, operation: OperationModel): Observable<OperationModel> { const operationList = { 'interfaces': { [operation.interfaceType]: { @@ -168,20 +176,20 @@ export class ComponentServiceNg2 { } }; return this.http.post<any>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/interfaceOperations', operationList) - .map((res:any) => { - const interf:InterfaceModel = _.find(res.interfaces, interf => interf.type === operation.interfaceType); - const newOperation:OperationModel = _.find(interf.operations, op => op.name === operation.name); - return new OperationModel({ - ...newOperation, - interfaceType: interf.type, - interfaceId: interf.uniqueId, - artifactFileName: operation.artifactFileName - }); + .map((res: any) => { + const interf: InterfaceModel = _.find(res.interfaces, interf => interf.type === operation.interfaceType); + const newOperation: OperationModel = _.find(interf.operations, op => op.name === operation.name); + return new OperationModel({ + ...newOperation, + interfaceType: interf.type, + interfaceId: interf.uniqueId, + artifactFileName: operation.artifactFileName }); + }); } // tslint:disable-next-line:member-ordering - updateInterfaceOperation(component:Component, operation:OperationModel):Observable<OperationModel> { + updateInterfaceOperation(component: Component, operation: OperationModel): Observable<OperationModel> { const operationList = { interfaces: { [operation.interfaceType]: { @@ -193,42 +201,66 @@ export class ComponentServiceNg2 { } }; return this.http.put<any>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/interfaceOperations', operationList) - .map((res: any) => { - const interf: InterfaceModel = _.find(res.interfaces, interf => interf.type === operation.interfaceType); - const newOperation: OperationModel = _.find(interf.operations, op => op.name === operation.name); - return new OperationModel({ - ...newOperation, - interfaceType: interf.type, - interfaceId: interf.uniqueId, - artifactFileName: operation.artifactFileName - }); + .map((res: any) => { + const interf: InterfaceModel = _.find(res.interfaces, interf => interf.type === operation.interfaceType); + const newOperation: OperationModel = _.find(interf.operations, op => op.name === operation.name); + return new OperationModel({ + ...newOperation, + interfaceType: interf.type, + interfaceId: interf.uniqueId, + artifactFileName: operation.artifactFileName }); + }); } + updateComponentInterfaceOperation(componentMetaDataId: string, + operation: InterfaceOperationModel): Observable<InterfaceOperationModel> { + const operationList = { + interfaces: { + [operation.interfaceType]: { + type: operation.interfaceType, + operations: { + [operation.name]: new BEInterfaceOperationModel(operation) + } + } + } + }; + return this.http.put<any>(this.baseUrl + 'resources/' + componentMetaDataId + '/interfaceOperation', operationList) + .map((res: any) => { + const interf: InterfaceModel = _.find(res.interfaces, interf => interf.type === operation.interfaceType); + const newOperation: OperationModel = _.find(interf.operations, op => op.name === operation.name); + + return new InterfaceOperationModel({ + ...newOperation, + interfaceType: interf.type, + interfaceId: interf.uniqueId, + }); + }); + } - deleteInterfaceOperation(component: Component, operation:OperationModel):Observable<OperationModel> { + deleteInterfaceOperation(component: Component, operation: OperationModel): Observable<OperationModel> { return this.http.delete<OperationModel>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/interfaces/' + operation.interfaceId + '/operations/' + operation.uniqueId); } - getInterfaceTypes(component:Component):Observable<{[id:string]: Array<string>}> { + getInterfaceTypes(component: Component): Observable<{ [id: string]: Array<string> }> { return this.http.get<any>(this.baseUrl + 'interfaceLifecycleTypes' + ((component && component.model) ? '?model=' + component.model : '')) - .map((res: any) => { - const interfaceMap = {}; - if (!res) { - return interfaceMap; - } - Object.keys(res).forEach(interfaceName => { - const interface1 = res[interfaceName]; - if (!interface1.toscaPresentation.operations) { - return; - } - interfaceMap[interface1.toscaPresentation.type] = Object.keys(interface1.toscaPresentation.operations); - }); + .map((res: any) => { + const interfaceMap = {}; + if (!res) { return interfaceMap; + } + Object.keys(res).forEach(interfaceName => { + const interface1 = res[interfaceName]; + if (!interface1.toscaPresentation.operations) { + return; + } + interfaceMap[interface1.toscaPresentation.type] = Object.keys(interface1.toscaPresentation.operations); }); + return interfaceMap; + }); } - uploadInterfaceOperationArtifact(component:Component, newOperation:OperationModel, oldOperation:OperationModel) { + uploadInterfaceOperationArtifact(component: Component, newOperation: OperationModel, oldOperation: OperationModel) { const payload = { artifactType: "WORKFLOW", artifactName: oldOperation.artifactFileName, @@ -239,34 +271,30 @@ export class ComponentServiceNg2 { const headers = new HttpHeaders().append('Content-MD5', HttpHelperService.getHeaderMd5(payload)); return this.http.post(this.baseUrl + component.getTypeUrl() + component.uuid + '/interfaces/' + newOperation.interfaceId + '/operations/' + newOperation.uniqueId + '/artifacts/' + newOperation.implementation.artifactUUID, - payload, {headers: headers} - ).map((res: any) => { - const fileName = res.artifactDisplayName || res.artifactName; - newOperation.artifactFileName = fileName; - return res; - }); + payload, {headers: headers} + ).map((res: any) => { + const fileName = res.artifactDisplayName || res.artifactName; + newOperation.artifactFileName = fileName; + return res; + }); } - getCapabilitiesAndRequirements(componentType: string, componentId:string):Observable<ComponentGenericResponse> { + getCapabilitiesAndRequirements(componentType: string, componentId: string): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_REQUIREMENTS, COMPONENT_FIELDS.COMPONENT_CAPABILITIES]); } - - - - - getDeploymentGraphData(component:Component):Observable<ComponentGenericResponse> { + getDeploymentGraphData(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_RELATION, COMPONENT_FIELDS.COMPONENT_INSTANCES, COMPONENT_FIELDS.COMPONENT_GROUPS]); } - createInput(component:Component, inputsToCreate:InstancePropertiesAPIMap, isSelf:boolean):Observable<any> { - const inputs = isSelf ? { serviceProperties: inputsToCreate.componentInstanceProperties } : inputsToCreate; + createInput(component: Component, inputsToCreate: InstancePropertiesAPIMap, isSelf: boolean): Observable<any> { + const inputs = isSelf ? {serviceProperties: inputsToCreate.componentInstanceProperties} : inputsToCreate; return this.http.post<any>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/create/inputs', inputs); } - createListInput(component:Component, input:any, isSelf:boolean):Observable<any> { + createListInput(component: Component, input: any, isSelf: boolean): Observable<any> { let inputs: any; - if(isSelf) { + if (isSelf) { // change componentInstanceProperties -> serviceProperties inputs = { componentInstInputsMap: { @@ -280,147 +308,149 @@ export class ComponentServiceNg2 { return this.http.post<any>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/create/listInput', inputs); } - createPolicy(component:Component, policiesToCreate:InstancePropertiesAPIMap, isSelf:boolean):Observable<any> { + createPolicy(component: Component, policiesToCreate: InstancePropertiesAPIMap, isSelf: boolean): Observable<any> { const policiesList = isSelf ? - {'componentPropertiesToPolicies': { + { + 'componentPropertiesToPolicies': { ...policiesToCreate.componentInstanceProperties } } : - {'componentInstancePropertiesToPolicies': { + { + 'componentInstancePropertiesToPolicies': { ...policiesToCreate.componentInstanceProperties } }; return this.http.post(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/create/policies', policiesList); } - deletePolicy(component:Component, policy: PolicyInstance) { + deletePolicy(component: Component, policy: PolicyInstance) { return this.http.put<PolicyInstance>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/policies/' + policy.uniqueId + '/undeclare', policy); } - restoreComponent(componentType:string, componentId:string) { + restoreComponent(componentType: string, componentId: string) { return this.http.post(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/restore', {}) } - archiveComponent(componentType:string, componentId:string) { + archiveComponent(componentType: string, componentId: string) { return this.http.post(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/archive', {}) } - deleteInput(component:Component, input:InputBEModel):Observable<InputBEModel> { + deleteInput(component: Component, input: InputBEModel): Observable<InputBEModel> { return this.http.delete<InputBEModel>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/delete/' + input.uniqueId + '/input') - .map((res) => { - return new InputBEModel(res); - }) + .map((res) => { + return new InputBEModel(res); + }) } - deleteOutput(component:Component, output:OutputBEModel):Observable<OutputBEModel> { + deleteOutput(component: Component, output: OutputBEModel): Observable<OutputBEModel> { return this.http.delete<OutputBEModel>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/delete/' + output.uniqueId + '/output') - .map((res) => { - return new OutputBEModel(res); - }) + .map((res) => { + return new OutputBEModel(res); + }) } - updateComponentInputs(component:Component, inputs:InputBEModel[]):Observable<InputBEModel[]> { + updateComponentInputs(component: Component, inputs: InputBEModel[]): Observable<InputBEModel[]> { return this.http.post<InputBEModel[]>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/update/inputs', inputs) - .map((res) => { - return res.map((input) => new InputBEModel(input)); - }) + .map((res) => { + return res.map((input) => new InputBEModel(input)); + }) } - updateComponentOutputs(component:Component, outputs:OutputBEModel[]):Observable<OutputBEModel[]> { + updateComponentOutputs(component: Component, outputs: OutputBEModel[]): Observable<OutputBEModel[]> { return this.http.post<OutputBEModel[]>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/update/outputs', outputs) - .map((res) => { - return res.map((output) => new OutputBEModel(output)); - }) + .map((res) => { + return res.map((output) => new OutputBEModel(output)); + }) } - filterComponentInstanceProperties(component:Component, filterData:FilterPropertiesAssignmentData):Observable<InstanceBePropertiesMap> {//instance-property-be-map + filterComponentInstanceProperties(component: Component, filterData: FilterPropertiesAssignmentData): Observable<InstanceBePropertiesMap> {//instance-property-be-map let params: HttpParams = new HttpParams(); - filterData.selectedTypes.forEach((type:string) => { + filterData.selectedTypes.forEach((type: string) => { params = params.append('resourceType', type); }); return this.http.get<InstanceBePropertiesMap>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/filteredproperties/' + filterData.propertyName, {params: params}); } - filterComponentInstanceAttributes(component:Component, filterData:FilterPropertiesAssignmentData):Observable<InstanceBePropertiesMap> {//instance-property-be-map + filterComponentInstanceAttributes(component: Component, filterData: FilterPropertiesAssignmentData): Observable<InstanceBePropertiesMap> {//instance-property-be-map let params: HttpParams = new HttpParams(); - filterData.selectedTypes.forEach((type:string) => { + filterData.selectedTypes.forEach((type: string) => { params = params.append('resourceType', type); }); return this.http.get<InstanceBePropertiesMap>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/filteredproperties/' + filterData.propertyName, {params: params}); } - createServiceProperty(component: Component, propertyModel:PropertyBEModel): Observable<PropertyBEModel> { + createServiceProperty(component: Component, propertyModel: PropertyBEModel): Observable<PropertyBEModel> { let serverObject = {}; serverObject[propertyModel.name] = propertyModel; return this.http.post(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/properties', serverObject) - .map((res: PropertyBEModel) => { - const property: PropertyBEModel = new PropertyBEModel(res); - return property; - }) + .map((res: PropertyBEModel) => { + const property: PropertyBEModel = new PropertyBEModel(res); + return property; + }) } getServiceProperties(component: Component): Observable<PropertyBEModel[]> { return this.http.get(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/properties') - .map((res: PropertyBEModel[]) => { - if (!res) { - return new Array<PropertyBEModel>(); - } - return CommonUtils.initBeProperties(res); - }); + .map((res: PropertyBEModel[]) => { + if (!res) { + return new Array<PropertyBEModel>(); + } + return CommonUtils.initBeProperties(res); + }); } updateServiceProperties(component: Component, properties: PropertyBEModel[]) { - return this.http.put<PropertyBEModel[]>( this.baseUrl + component.getTypeUrl() + component.uniqueId + '/properties', properties) - .map((res) => { - const resJson = res; - return _.map(resJson, - (resValue:PropertyBEModel) => new PropertyBEModel(resValue)); - }); + return this.http.put<PropertyBEModel[]>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/properties', properties) + .map((res) => { + const resJson = res; + return _.map(resJson, + (resValue: PropertyBEModel) => new PropertyBEModel(resValue)); + }); } - deleteServiceProperty(component:Component, property:PropertyBEModel):Observable<string> { - return this.http.delete(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/properties/' + property.uniqueId ) - .map((res:Response) => { - return property.uniqueId; - }) + deleteServiceProperty(component: Component, property: PropertyBEModel): Observable<string> { + return this.http.delete(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/properties/' + property.uniqueId) + .map((res: Response) => { + return property.uniqueId; + }) } - getDependencies(componentType:string, componentId: string):Observable<IDependenciesServerResponse[]> { + getDependencies(componentType: string, componentId: string): Observable<IDependenciesServerResponse[]> { return this.http.get<IDependenciesServerResponse[]>(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/dependencies'); } - automatedUpgrade(componentType:string, componentId:string, componentsIdsToUpgrade:IAutomatedUpgradeRequestObj[]):Observable<AutomatedUpgradeGenericResponse> { + automatedUpgrade(componentType: string, componentId: string, componentsIdsToUpgrade: IAutomatedUpgradeRequestObj[]): Observable<AutomatedUpgradeGenericResponse> { return this.http.post<AutomatedUpgradeGenericResponse>(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/automatedupgrade', componentsIdsToUpgrade); } - updateMultipleComponentInstances(componentId:string, instances:ComponentInstance[]):Observable<ComponentInstance[]> { + updateMultipleComponentInstances(componentId: string, instances: ComponentInstance[]): Observable<ComponentInstance[]> { return this.http.post<ComponentInstance[]>(this.baseUrl + componentId + '/resourceInstance/multipleComponentInstance', instances); } - getServiceFilterConstraints(component:Component):Observable<ComponentGenericResponse> { + getServiceFilterConstraints(component: Component): Observable<ComponentGenericResponse> { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [SERVICE_FIELDS.NODE_FILTER]); } - createServiceFilterConstraints(component:Component, componentInstance:ComponentInstance, constraint:ConstraintObject):Observable<any> { + createServiceFilterConstraints(component: Component, componentInstance: ComponentInstance, constraint: ConstraintObject): Observable<any> { return this.http.post<any>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/resourceInstances/' + componentInstance.uniqueId + '/nodeFilter', constraint); } - updateServiceFilterConstraints(component:Component, componentInstance:ComponentInstance, constraints:ConstraintObject[]):Observable<any> { + updateServiceFilterConstraints(component: Component, componentInstance: ComponentInstance, constraints: ConstraintObject[]): Observable<any> { return this.http.put<any>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/resourceInstances/' + componentInstance.uniqueId + '/nodeFilter/', constraints); } - deleteServiceFilterConstraints(component:Component, componentInstance:ComponentInstance, constraintIndex:number) { + deleteServiceFilterConstraints(component: Component, componentInstance: ComponentInstance, constraintIndex: number) { return this.http.delete<any>(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/resourceInstances/' + componentInstance.uniqueId + '/nodeFilter/' + constraintIndex); } - protected analyzeComponentDataResponse(res: Response):ComponentGenericResponse { + protected analyzeComponentDataResponse(res: Response): ComponentGenericResponse { return new ComponentGenericResponse().deserialize(res); } } diff --git a/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts b/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts index 65dbdccb75..2911164c4b 100644 --- a/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts +++ b/catalog-ui/src/app/ng2/services/component-services/topology-template.service.ts @@ -67,7 +67,7 @@ import {map} from "rxjs/operators"; import {CapabilitiesConstraintObject} from "../../components/logic/capabilities-constraint/capabilities-constraint.component"; import { BEInterfaceOperationModel, - ComponentInstanceInterfaceModel, + ComponentInterfaceDefinitionModel, InterfaceOperationModel } from "../../../models/interfaceOperation"; import {AttributeBEModel} from "../../../models/attributes-outputs/attribute-be-model"; |