X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=catalog-ui%2Fsrc%2Fapp%2Fng2%2Fservices%2Fcomponent-services%2Ftopology-template.service.ts;h=0af8c737de9342bf9fd3b38c610b3b07dbac6be8;hb=ec5c8fddfb0ba0e40b19cd438533114652448d0f;hp=0abb16340482bab781b0d91217095736f0ea510d;hpb=16a9fce0e104a38371a9e5a567ec611ae3fc7f33;p=sdc.git 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 0abb163404..0af8c737de 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 @@ -6,6 +6,7 @@ * SDC * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modification Copyright (C) 2022 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,27 +23,28 @@ */ 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 { + ArtifactModel, + AttributeModel, + Capability, Component, + FilterPropertiesAssignmentData, + IFileDownload, InputBEModel, InstancePropertiesAPIMap, - FilterPropertiesAssignmentData, - ArtifactModel, + OperationModel, PropertyModel, - IFileDownload, - AttributeModel, - IAttributeModel, Capability, Requirement + Requirement } from "app/models"; -import {ArtifactGroupType, COMPONENT_FIELDS} from "app/utils"; +import {API_QUERY_PARAMS, ArtifactGroupType, 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"; @@ -50,19 +52,17 @@ import {ComponentInstance} from "../../../models/componentsInstances/componentIn import {CommonUtils} from "../../../utils/common-utils"; import {RelationshipModel} from "../../../models/graph/relationship"; import {ServiceGenericResponse} from "../responses/service-generic-response"; -import { HttpClient, HttpParams, HttpHeaders } from "@angular/common/http"; -import { HttpHelperService } from "../http-hepler.service"; -import { - Component as TopologyTemplate, - FullComponentInstance, - Service, - OperationModel, -} from 'app/models'; -import { ConsumptionInput } from "../../components/logic/service-consumption/service-consumption.component"; -import { ConstraintObject } from "../../components/logic/service-dependencies/service-dependencies.component"; -import { ComponentMetadata } from "../../../models/component-metadata"; -import { PolicyInstance } from "../../../models/graph/zones/policy-instance"; -import { PropertyBEModel } from "../../../models/properties-inputs/property-be-model"; +import {HttpClient, HttpHeaders, HttpParams} from "@angular/common/http"; +import {HttpHelperService} from "../http-hepler.service"; +import {ConsumptionInput} from "../../components/logic/service-consumption/service-consumption.component"; +import {PolicyInstance} from "../../../models/graph/zones/policy-instance"; +import {PropertyBEModel} from "../../../models/properties-inputs/property-be-model"; +import {map} from "rxjs/operators"; +import {BEInterfaceOperationModel, InterfaceOperationModel} from "../../../models/interfaceOperation"; +import {AttributeBEModel} from "../../../models/attributes-outputs/attribute-be-model"; +import {InstanceAttributesAPIMap} from "../../../models/attributes-outputs/attribute-fe-map"; +import {FilterConstraint} from "../../../models/filter-constraint"; +import {CustomToscaFunction, DefaultCustomFunctions} from "../../../models/default-custom-functions"; /* we need to use this service from now, we will remove component.service when we finish remove the angular1. The service is duplicated since we can not use downgrades service with NGXS*/ @@ -76,6 +76,16 @@ export class TopologyTemplateService { this.baseUrl = sdcConfig.api.root + sdcConfig.api.component_api_root; } + putServiceToscaTemplate(componentId: string, componentType: string, file) { + return this.http.put(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/toscaTemplate', file) + } + + putServiceToscaModel(componentId: string, componentType: string, file) { + let uploadData:FormData = new FormData(); + uploadData.append('upload', file); + return this.http.put(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/toscaModel', uploadData); + } + getFullComponent(componentType: string, uniqueId: string): Observable { return this.http.get(this.baseUrl + this.getServerTypeUrl(componentType) + uniqueId); } @@ -88,6 +98,10 @@ export class TopologyTemplateService { return this.getComponentDataByFieldsName(type, uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_PROPERTIES, COMPONENT_FIELDS.COMPONENT_INSTANCES_ATTRIBUTES]); } + getComponentInstanceAttributesAndPropertiesAndInputs(uniqueId: string, type: string): Observable { + return this.getComponentDataByFieldsName(type, uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_PROPERTIES, COMPONENT_FIELDS.COMPONENT_INSTANCES_ATTRIBUTES, COMPONENT_FIELDS.COMPONENT_INPUTS]); + } + async getComponentAttributes(componentType: string, componentId: string): Promise { return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_ATTRIBUTES]).toPromise(); } @@ -106,19 +120,28 @@ export class TopologyTemplateService { [COMPONENT_FIELDS.COMPONENT_INSTANCES, COMPONENT_FIELDS.COMPONENT_POLICIES, COMPONENT_FIELDS.COMPONENT_NON_EXCLUDED_GROUPS]); } - getComponentResourceInstances(component: Component): Observable { - return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES]); + getComponentInstances(componentType: string, componentId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_INSTANCES]); } getComponentInputs(component: Component): Observable { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INPUTS]); } + getComponentInputsValues(componentType: string, componentId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_INPUTS]); + } + getComponentInputsWithProperties(componentType: string, componentId: string): Observable { return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_INPUTS, COMPONENT_FIELDS.COMPONENT_INSTANCES, COMPONENT_FIELDS.COMPONENT_INSTANCES_PROPERTIES, COMPONENT_FIELDS.COMPONENT_PROPERTIES]); } + getComponentOutputsWithAttributes(componentType: string, componentId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentId, + [COMPONENT_FIELDS.COMPONENT_OUTPUTS, COMPONENT_FIELDS.COMPONENT_INSTANCES, COMPONENT_FIELDS.COMPONENT_INSTANCES_ATTRIBUTES, COMPONENT_FIELDS.COMPONENT_ATTRIBUTES,COMPONENT_FIELDS.COMPONENT_INSTANCES_OUTPUTS]); + } + getComponentDeploymentArtifacts(component: Component): Observable { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_DEPLOYMENT_ARTIFACTS]); } @@ -127,6 +150,10 @@ export class TopologyTemplateService { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INFORMATIONAL_ARTIFACTS]); } + getComponentInterfaceOperations(componentType: string, componentId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_INTERFACE_OPERATIONS]); + } + getComponentInformationalArtifactsAndInstances(component: Component): Observable { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INFORMATIONAL_ARTIFACTS, COMPONENT_FIELDS.COMPONENT_INSTANCES]); } @@ -136,7 +163,19 @@ export class TopologyTemplateService { } getComponentProperties(component: Component): Observable { - return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_PROPERTIES]); + return this.findAllComponentProperties(component.componentType, component.uniqueId); + } + + findAllComponentProperties(componentType: string, componentUniqueId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentUniqueId, [COMPONENT_FIELDS.COMPONENT_PROPERTIES]); + } + + findAllComponentAttributes(componentType: string, componentUniqueId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentUniqueId, [COMPONENT_FIELDS.COMPONENT_ATTRIBUTES]); + } + + findAllComponentAttributesAndProperties(componentType: string, componentUniqueId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentUniqueId, [COMPONENT_FIELDS.COMPONENT_ATTRIBUTES, COMPONENT_FIELDS.COMPONENT_PROPERTIES]); } getCapabilitiesAndRequirements(componentType: string, componentId: string): Observable { @@ -157,6 +196,11 @@ export class TopologyTemplateService { return this.http.post(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/create/inputs', inputs); } + createOutput(component: Component, outputsToCreate: InstanceAttributesAPIMap, isSelf: boolean): Observable { + const outputs = isSelf ? { serviceProperties: outputsToCreate.componentInstanceAttributes } : outputsToCreate; + return this.http.post(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/create/outputs', outputs); + } + restoreComponent(componentType: string, componentId: string) { return this.http.post(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/restore', {}); } @@ -189,7 +233,7 @@ export class TopologyTemplateService { return this.http.get(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/filteredproperties/' + filterData.propertyName, {params: params}); } - createServiceProperty(componentId: string, propertyModel: PropertyBEModel): Observable { + createServiceProperty(componentId: string, propertyModel: PropertyBEModel): Observable { const serverObject = {}; serverObject[propertyModel.name] = propertyModel; return this.http.post(this.baseUrl + 'services/' + componentId + '/properties', serverObject) @@ -199,6 +243,16 @@ export class TopologyTemplateService { }); } + createServiceAttribute(componentId: string, attributeModel: AttributeBEModel): Observable { + const serverObject = {}; + serverObject[attributeModel.name] = attributeModel; + return this.http.post(this.baseUrl + 'services/' + componentId + '/attributes', serverObject) + .map((res) => { + const attribute: AttributeBEModel = new AttributeBEModel(res); + return attribute; + }); + } + getServiceProperties(componentId: string): Observable { return this.http.get(this.baseUrl + 'services/' + componentId + '/properties') .map((res) => { @@ -209,6 +263,16 @@ export class TopologyTemplateService { }); } + getServiceAttributes(componentId: string): Observable { + return this.http.get(this.baseUrl + 'services/' + componentId + '/attributes') + .map((res) => { + if (!res) { + return new Array(); + } + return CommonUtils.initAttributes(res); + }); + } + updateServiceProperties(componentId: string, properties: PropertyBEModel[]) { return this.http.put( this.baseUrl + 'services/' + componentId + '/properties', properties) .map((res) => { @@ -218,6 +282,15 @@ export class TopologyTemplateService { }); } + updateServiceAttributes(componentId: string, attributes: AttributeBEModel[]) { + return this.http.put( this.baseUrl + 'services/' + componentId + '/attributes', attributes) + .map((res) => { + const resJson = res; + return _.map(resJson, + (resValue: AttributeBEModel) => new AttributeBEModel(resValue)); + }); + } + deleteServiceProperty(componentId: string, property: PropertyBEModel): Observable { return this.http.delete(this.baseUrl + 'services/' + componentId + '/properties/' + property.uniqueId ) .map((res: Response) => { @@ -225,6 +298,23 @@ export class TopologyTemplateService { }); } + createServiceInput(componentId: string, inputModel: InputBEModel): Observable { + const serverObject = {}; + serverObject[inputModel.name] = inputModel; + return this.http.post(this.baseUrl + 'services/' + componentId + '/create/input', serverObject) + .map((res) => { + const input: InputBEModel = new InputBEModel(res); + return input; + }); + } + + deleteServiceAttribute(componentId: string, attribute: AttributeBEModel): Observable { + return this.http.delete(this.baseUrl + 'services/' + componentId + '/attributes/' + attribute.uniqueId ) + .map((res: Response) => { + return attribute.uniqueId; + }); + } + getDependencies(componentType: string, componentId: string): Observable { return this.http.get(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/dependencies'); } @@ -233,8 +323,8 @@ export class TopologyTemplateService { return this.http.post(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/automatedupgrade', componentsIdsToUpgrade); } - updateComponentInstance(componentMetaDataId: string, componentInstance:ComponentInstance): Observable { - return this.http.post(this.baseUrl + 'services/' + componentMetaDataId + '/resourceInstance/' + componentInstance.uniqueId, componentInstance); + updateComponentInstance(componentMetaDataId: string, componentType: string, componentInstance:ComponentInstance): Observable { + return this.http.post(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/resourceInstance/' + componentInstance.uniqueId, componentInstance); } updateMultipleComponentInstances(componentId: string, componentType: string, instances: ComponentInstance[]): Observable { @@ -305,13 +395,14 @@ export class TopologyTemplateService { // ------------------------------------------------ Properties API --------------------------------------------------// addProperty = (componentType: string, componentId: string, property: PropertyModel):Observable => { - return this.http.post(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/properties', property.convertToServerObject()).map((response) => { - return new PropertyModel(response[Object.keys(response)[0]]); + return this.http.post(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/properties', property.convertToServerObject()) + .map((response) => { + return new PropertyModel(response); }); } updateProperty = (componentType: string, componentId: string, property: PropertyModel): Observable => { - var propertiesList:PropertyBEModel[] = [property]; + const propertiesList: PropertyBEModel[] = [property]; return this.http.put(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/properties', propertiesList) .map((response) => { return new PropertyModel(response[Object.keys(response)[0]]); @@ -380,27 +471,66 @@ export class TopologyTemplateService { return this.getComponentDataByFieldsName(componentType, componentId, [SERVICE_FIELDS.NODE_FILTER]); } + getSubstitutionFilterConstraints(componentType: string, componentId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentId, [SERVICE_FIELDS.SUBSTITUTION_FILTER]); + } + getComponentInstanceProperties(componentType: string, componentId: string): Observable { return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_PROPERTIES]); } - createServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraint: ConstraintObject): Observable { - return this.http.post(this.baseUrl + 'services/' + componentMetaDataId + '/resourceInstances/' + componentInstanceId + '/nodeFilter', constraint); + findAllComponentInstanceAttributes(componentType: string, componentId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_ATTRIBUTES]); } - updateServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraints: ConstraintObject[]):Observable { - return this.http.put(this.baseUrl + 'services/' + componentMetaDataId + '/resourceInstances/' + componentInstanceId + '/nodeFilter', constraints) + getComponentInstanceCapabilityProperties(componentType: string, componentId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentId, + [COMPONENT_FIELDS.COMPONENT_CAPABILITIES, COMPONENT_FIELDS.COMPONENT_CAPABILITIES_PROPERTIES]); } - deleteServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraintIndex: number): Observable{ - return this.http.delete(this.baseUrl + 'services/' + componentMetaDataId + '/resourceInstances/' + componentInstanceId + '/nodeFilter/' + constraintIndex) + createServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraint: FilterConstraint, componentType: string, constraintType: string): Observable { + return this.http.post(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/componentInstance/' + componentInstanceId + '/' + constraintType + '/nodeFilter', constraint); + } + + createServiceFilterCapabilitiesConstraints(componentMetaDataId: string, componentInstanceId: string, constraint: FilterConstraint, componentType: string, constraintType: string): Observable { + return this.http.post(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/componentInstance/' + componentInstanceId + '/' + constraintType + '/nodeFilter', constraint); + } + + updateServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraint: FilterConstraint, componentType: string, constraintType: string, constraintIndex: number):Observable{ + return this.http.put(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/componentInstance/' + componentInstanceId + '/' + constraintType + '/' + constraintIndex + '/nodeFilter', constraint) + } + + updateServiceFilterCapabilitiesConstraint(componentMetaDataId: string, componentInstanceId: string, constraints: FilterConstraint, componentType: string, constraintType: string, constraintIndex: number):Observable{ + return this.http.put(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/componentInstance/' + componentInstanceId + '/' + constraintType + '/' + constraintIndex + '/nodeFilter', constraints) + } + + deleteServiceFilterConstraints(componentMetaDataId: string, componentInstanceId: string, constraintIndex: number, componentType: string, constraintType: string): Observable{ + return this.http.delete(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/componentInstance/' + componentInstanceId + '/' + constraintType + '/' + constraintIndex + '/nodeFilter') + } + + getComponentPropertiesAndInputsForSubstitutionFilter(componentType: string, componentId: string): Observable { + return this.getComponentDataByFieldsName(componentType, componentId, [COMPONENT_FIELDS.COMPONENT_PROPERTIES, COMPONENT_FIELDS.COMPONENT_INPUTS]); + } + + createSubstitutionFilterConstraints(componentMetaDataId: string, constraint: FilterConstraint, componentType: string, constraintType: string): Observable { + return this.http.post(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/substitutionFilter/' + constraintType, constraint); + } + + updateSubstitutionFilterConstraint(componentId: string, constraint: FilterConstraint, componentType: string, constraintType: string, + index: number): Observable { + const url = `${this.baseUrl}${this.getServerTypeUrl(componentType)}${componentId}/substitutionFilter/${constraintType}/${index}`; + return this.http.put(url, constraint); + } + + deleteSubstitutionFilterConstraints(componentMetaDataId: string, constraintIndex: number, componentType: string, constraintType: string): Observable{ + return this.http.delete(this.baseUrl + this.getServerTypeUrl(componentType) + componentMetaDataId + '/substitutionFilter/' + constraintType + "/" + constraintIndex) } deletePolicy(component: Component, policy: PolicyInstance): Observable { return this.http.put(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/policies/' + policy.uniqueId + '/undeclare', policy) } - createListInput(componentId: string, input: any, isSelf: boolean): Observable { + createListInput(component: Component, input: any, isSelf: boolean): Observable { let inputs: any; if (isSelf) { // change componentInstanceProperties -> serviceProperties @@ -413,7 +543,7 @@ export class TopologyTemplateService { } else { inputs = input; } - return this.http.post(this.baseUrl + 'services/' + componentId + '/create/listInput', inputs); + return this.http.post(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/create/listInput', inputs); } createPolicy(component: Component, policiesToCreate: InstancePropertiesAPIMap, isSelf: boolean): Observable { @@ -449,6 +579,7 @@ export class TopologyTemplateService { switch (componentType) { case ComponentType.SERVICE: case ComponentType.SERVICE_PROXY: + case ComponentType.SERVICE_SUBSTITUTION: return ServerTypeUrl.SERVICES; default: return ServerTypeUrl.RESOURCES; @@ -512,4 +643,33 @@ export class TopologyTemplateService { deleteRequirement(component: Component, reqId: string): Observable { return this.http.delete(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/requirements/' + reqId); } + + getDirectiveList(): Observable { + return this.http.get(this.baseUrl + "directives") + .pipe(map(response => response.directives)); + } + + updateComponentInstanceInterfaceOperation(componentMetaDataId: string, + componentMetaDataType: string, + componentInstanceId: string, + operation: InterfaceOperationModel): Observable { + const operationList = { + interfaces: { + [operation.interfaceType]: { + type: operation.interfaceType, + operations: { + [operation.name]: new BEInterfaceOperationModel(operation) + } + } + } + }; + return this.http.put(this.baseUrl + this + .getServerTypeUrl(componentMetaDataType) + componentMetaDataId + '/componentInstance/' + componentInstanceId + '/interfaceOperation', operationList); + } + + getDefaultCustomFunction(type='ALL'): Observable { + return this.http.get(this.baseUrl + "customToscaFunctions/" + type) + .pipe(map(response => response && response.defaultCustomToscaFunction ? response.defaultCustomToscaFunction : [])); + } + }