From a5445100050e49e83f73424198d73cd72d672a4d Mon Sep 17 00:00:00 2001 From: Michael Lando Date: Sun, 4 Mar 2018 14:53:33 +0200 Subject: Sync Integ to Master Change-Id: I71e3acc26fa612127756ac04073a522b9cc6cd74 Issue-ID: SDC-977 Signed-off-by: Gitelman, Tal (tg851x) --- .../component-instance.service.ts | 49 ++++----- .../component.service.factory.ts | 41 +++++++ .../component-services/component.service.ts | 28 ++--- .../services/component-services/service.service.ts | 119 ++++++++++++++++++++- catalog-ui/src/app/ng2/services/config.service.ts | 4 +- .../src/app/ng2/services/data-type.service.ts | 1 + .../app/ng2/services/dynamic-component.service.ts | 28 +++++ catalog-ui/src/app/ng2/services/modal.service.ts | 37 +++---- .../src/app/ng2/services/policies.service.ts | 49 +++++++++ .../src/app/ng2/services/properties.service.ts | 1 + .../responses/component-generic-response.ts | 5 + .../services/responses/service-generic-response.ts | 22 ++++ 12 files changed, 320 insertions(+), 64 deletions(-) create mode 100644 catalog-ui/src/app/ng2/services/component-services/component.service.factory.ts create mode 100644 catalog-ui/src/app/ng2/services/dynamic-component.service.ts create mode 100644 catalog-ui/src/app/ng2/services/policies.service.ts create mode 100644 catalog-ui/src/app/ng2/services/responses/service-generic-response.ts (limited to 'catalog-ui/src/app/ng2/services') diff --git a/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts b/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts index b852539edd..0947b2aa7f 100644 --- a/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts +++ b/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts @@ -23,10 +23,9 @@ import {Response, RequestOptions, Headers} from '@angular/http'; import { Observable } from 'rxjs/Observable'; import {PropertyFEModel, PropertyBEModel} from "app/models"; import {CommonUtils} from "app/utils"; -import {Component, ComponentInstance, InputModel} from "app/models"; +import {Component, ComponentInstance, Capability, PropertyModel} from "app/models"; import { HttpService } from '../http.service'; import {SdcConfigToken, ISdcConfig} from "../../config/sdc-config.config"; -import {isEqual} from "lodash"; @Injectable() export class ComponentInstanceServiceNg2 { @@ -52,43 +51,45 @@ export class ComponentInstanceServiceNg2 { }) } - updateInstanceProperty(component: Component, componentInstanceId: string, property: PropertyBEModel): Observable { + updateInstanceProperties(component: Component, componentInstanceId: string, properties: PropertyBEModel[]) { - return this.http.post(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/resourceInstance/' + componentInstanceId + '/property', property) + return this.http.post(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/resourceInstance/' + componentInstanceId + '/properties', properties) .map((res: Response) => { - return new PropertyBEModel(res.json()); - }) + return res.json().map((resProperty) => new PropertyBEModel(resProperty)); + }); } - getInstanceCapabilityProperties(component: Component, componentInstanceId: string, capabilityType: string, capabilityName: string): Observable> { + getInstanceCapabilityProperties(component: Component, componentInstanceId: string, capability: Capability): Observable> { - return this.http.get(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/componentInstances/' + componentInstanceId + '/capability/' + capabilityType + - '/capabilityName/' + capabilityName + '/properties') + return this.http.get(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/componentInstances/' + componentInstanceId + '/capability/' + capability.type + + '/capabilityName/' + capability.name + '/ownerId/' + capability.ownerId + '/properties') .map((res: Response) => { - return CommonUtils.initBeProperties(res.json()); + capability.properties = res.json().map((capProp) => new PropertyModel(capProp)); // update capability properties + return capability.properties; }) } - updateInstanceCapabilityProperties(component: Component, componentInstanceId: string, capabilityType: string, capabilityName: string, properties: PropertyBEModel[]): Observable { + updateInstanceCapabilityProperties(component: Component, componentInstanceId: string, capability: Capability, properties: PropertyBEModel[]): Observable> { - return this.http.put(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/componentInstances/' + componentInstanceId + '/capability/' + capabilityType + - '/capabilityName/' + capabilityName +'/properties', properties) + return this.http.put(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/componentInstances/' + componentInstanceId + '/capability/' + capability.type + + '/capabilityName/' + capability.name + '/ownerId/' + capability.ownerId + '/properties', properties) .map((res: Response) => { - return res.json().map((resProperty) => new PropertyBEModel(resProperty)); + const savedProperties: PropertyModel[] = res.json().map((resProperty) => new PropertyModel(resProperty)); + savedProperties.forEach((savedProperty) => { + const propIdx = capability.properties.findIndex((p) => p.uniqueId === savedProperty.uniqueId); + if (propIdx !== -1) { + capability.properties.splice(propIdx, 1, savedProperty); + } + }); + return savedProperties; }) } - updateInstanceInput(component: Component, componentInstanceId: string, input: PropertyBEModel): Observable { + updateInstanceInputs(component: Component, componentInstanceId: string, inputs: PropertyBEModel[]): Observable { - return this.http.post(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/resourceInstance/' + componentInstanceId + '/input', input) + return this.http.post(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/resourceInstance/' + componentInstanceId + '/inputs', inputs) .map((res: Response) => { - return new PropertyBEModel(res.json()); - }) - } - - hasPropertyChanged(property: PropertyFEModel) { - let oldValue: any = property.value; - const newValue = property.getJSONValue(); - return ((oldValue || newValue) && !isEqual(oldValue, newValue)); + return res.json().map((resInput) => new PropertyBEModel(resInput)); + }); } } diff --git a/catalog-ui/src/app/ng2/services/component-services/component.service.factory.ts b/catalog-ui/src/app/ng2/services/component-services/component.service.factory.ts new file mode 100644 index 0000000000..6e9d0e8031 --- /dev/null +++ b/catalog-ui/src/app/ng2/services/component-services/component.service.factory.ts @@ -0,0 +1,41 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * 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========================================================= + */ + + +import {Injectable} from "@angular/core"; +import {Component} from "../../../models/components/component"; +import {ComponentServiceNg2} from "./component.service"; +import {ServiceServiceNg2} from "./service.service"; + +@Injectable() +export class ComponentServiceFactoryNg2 { + componentService: ComponentServiceNg2; + serviceService: ServiceServiceNg2; + constructor(componentService: ComponentServiceNg2, serviceService: ServiceServiceNg2) { + this.serviceService = serviceService; + this.componentService = componentService; + } + getComponentService(component: Component):ComponentServiceNg2 { + if (component.isService()) { + return this.serviceService; + } + return this.componentService; + } +} \ No newline at end of file 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 ba1cb15561..9c3f78a444 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 @@ -18,13 +18,13 @@ * ============LICENSE_END========================================================= */ +import * as _ from "lodash"; import {Injectable, Inject} from '@angular/core'; import {Observable} from 'rxjs/Observable'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/toPromise'; import {Response, URLSearchParams} from '@angular/http'; -import { Component, PropertyBEModel, InstancePropertiesAPIMap, FilterPropertiesAssignmentData} from "app/models"; -import {downgradeInjectable} from '@angular/upgrade/static'; +import { Component, InputBEModel, InstancePropertiesAPIMap, FilterPropertiesAssignmentData} from "app/models"; import {COMPONENT_FIELDS} from "app/utils"; import {ComponentGenericResponse} from "../responses/component-generic-response"; import {InstanceBePropertiesMap} from "../../../models/properties-inputs/property-fe-map"; @@ -40,11 +40,11 @@ export class ComponentServiceNg2 { protected baseUrl; - constructor(private http:HttpService, @Inject(SdcConfigToken) sdcConfig:ISdcConfig) { + constructor(protected http:HttpService, @Inject(SdcConfigToken) sdcConfig:ISdcConfig) { this.baseUrl = sdcConfig.api.root + sdcConfig.api.component_api_root; } - private getComponentDataByFieldsName(componentType:string, componentId: string, fields:Array):Observable { + protected getComponentDataByFieldsName(componentType:string, componentId: string, fields:Array):Observable { let params:URLSearchParams = new URLSearchParams(); _.forEach(fields, (field:string):void => { @@ -53,10 +53,14 @@ export class ComponentServiceNg2 { return this.http.get(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/filteredDataByParams', {search: params}) .map((res:Response) => { - return new ComponentGenericResponse().deserialize(res.json()); + return this.analyzeComponentDataResponse(res); }); } + protected analyzeComponentDataResponse(res: Response):ComponentGenericResponse { + return new ComponentGenericResponse().deserialize(res.json()); + } + private getServerTypeUrl = (componentType:string):string => { switch (componentType) { case ComponentType.SERVICE: @@ -78,8 +82,8 @@ export class ComponentServiceNg2 { return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_ATTRIBUTES]); } - getComponentInstancesAndRelation(component:Component):Observable { - return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_RELATION, COMPONENT_FIELDS.COMPONENT_INSTANCES]); + getComponentCompositionData(component:Component):Observable { + return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_RELATION, COMPONENT_FIELDS.COMPONENT_INSTANCES, COMPONENT_FIELDS.COMPONENT_POLICIES, COMPONENT_FIELDS.COMPONENT_GROUPS]); } getComponentResourceInstances(component:Component):Observable { @@ -125,19 +129,19 @@ export class ComponentServiceNg2 { }) } - deleteInput(component:Component, input:PropertyBEModel):Observable { + deleteInput(component:Component, input:InputBEModel):Observable { return this.http.delete(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/delete/' + input.uniqueId + '/input') .map((res:Response) => { - return new PropertyBEModel(res.json()); + return new InputBEModel(res.json()); }) } - updateComponentInput(component:Component, input:PropertyBEModel):Observable { + updateComponentInputs(component:Component, inputs:InputBEModel[]):Observable { - return this.http.post(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/update/inputs', input) + return this.http.post(this.baseUrl + component.getTypeUrl() + component.uniqueId + '/update/inputs', inputs) .map((res:Response) => { - return new PropertyBEModel(res.json()) + return res.json().map((input) => new InputBEModel(input)); }) } diff --git a/catalog-ui/src/app/ng2/services/component-services/service.service.ts b/catalog-ui/src/app/ng2/services/component-services/service.service.ts index f38dbef595..0439f2047e 100644 --- a/catalog-ui/src/app/ng2/services/component-services/service.service.ts +++ b/catalog-ui/src/app/ng2/services/component-services/service.service.ts @@ -22,19 +22,30 @@ import { Injectable, Inject } from '@angular/core'; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/toPromise'; -import { Response } from '@angular/http'; +import { Response, URLSearchParams } from '@angular/http'; import {Service} from "app/models"; import { downgradeInjectable } from '@angular/upgrade/static'; import { HttpService } from '../http.service'; + import {SdcConfigToken, ISdcConfig} from "../../config/sdc-config.config"; +import {ForwardingPath} from "app/models/forwarding-path"; +import {ComponentMetadata} from "app/models/component-metadata"; +import {ComponentType} from "app/utils"; +import {Component} from "app/models/components/component"; +import {ComponentGenericResponse} from "app/ng2/services/responses/component-generic-response"; +import {COMPONENT_FIELDS, SERVICE_FIELDS} from "app/utils/constants"; +import {ComponentServiceNg2} from "./component.service"; +import {ServiceGenericResponse} from "app/ng2/services/responses/service-generic-response"; +import {ServicePathMapItem} from "app/models/graph/nodes-and-links-map"; @Injectable() -export class ServiceServiceNg2 { +export class ServiceServiceNg2 extends ComponentServiceNg2 { protected baseUrl = ""; - constructor(private http: HttpService, @Inject(SdcConfigToken) sdcConfig:ISdcConfig) { + constructor(protected http: HttpService, @Inject(SdcConfigToken) sdcConfig:ISdcConfig) { + super(http, sdcConfig); this.baseUrl = sdcConfig.api.root + sdcConfig.api.component_api_root; } @@ -46,4 +57,106 @@ export class ServiceServiceNg2 { }); } + getNodesAndLinksMap(service: Service):Observable> { + return this.http.get(this.baseUrl + service.getTypeUrl() + service.uniqueId + '/linksMap').map(res => { + return >res.json(); + }); + } + + getServicePath(service: Service, id: string):Observable { + return this.http.get(this.baseUrl + service.getTypeUrl() + service.uniqueId + '/paths/' + id) + .map(res => { + return res.json(); + }) + } + + getServicePaths(service: Service):Observable { + return this.http.get(this.baseUrl + service.getTypeUrl() + service.uniqueId + '/paths') + .map(res => { + return res.json(); + }) + } + + createOrUpdateServicePath(service: Service, inputsToCreate: ForwardingPath):Observable { + if (inputsToCreate.uniqueId) { + return this.updateServicePath(service, inputsToCreate); + } else { + return this.createServicePath(service, inputsToCreate); + } + } + + createServicePath(service: Service, inputsToCreate: ForwardingPath):Observable { + let input = new ServicePathRequestData(inputsToCreate); + + return this.http.post(this.baseUrl + service.getTypeUrl() + service.uniqueId + '/paths', input) + .map(res => { + return this.parseServicePathResponse(res); + }); + } + + deleteServicePath(service: Service, id: string):Observable { + return this.http.delete(this.baseUrl + service.getTypeUrl() + service.uniqueId + '/paths/' + id ) + .map((res) => { + return res.json(); + }); + } + + updateServicePath(service: Service, inputsToUpdate:ForwardingPath):Observable { + let input = new ServicePathRequestData(inputsToUpdate); + + return this.http.put(this.baseUrl + service.getTypeUrl() + service.uniqueId + '/paths', input) + .map((res) => { + return this.parseServicePathResponse(res); + }); + } + + checkComponentInstanceVersionChange(service: Service, newVersionId: string):Observable> { + let instanceId = service.selectedInstance.uniqueId; + let queries = {componentInstanceId: instanceId, newComponentInstanceId: newVersionId}; + + let params:URLSearchParams = new URLSearchParams(); + _.map(_.keys(queries), (key:string):void => { + params.append(key, queries[key]); + }); + + let url = this.baseUrl + service.getTypeUrl() + service.uniqueId + '/paths-to-delete'; + return this.http.get(url, {search: params}).map((res: Response) => { + return res.json().forwardingPathToDelete; + }); + } + + getComponentCompositionData(component:Component):Observable { + return this.getComponentDataByFieldsName(component.componentType, component.uniqueId, [COMPONENT_FIELDS.COMPONENT_INSTANCES_RELATION, COMPONENT_FIELDS.COMPONENT_INSTANCES, SERVICE_FIELDS.FORWARDING_PATHS]); + } + + protected analyzeComponentDataResponse(res: Response):ComponentGenericResponse { + return new ServiceGenericResponse().deserialize(res.json()); + } + + private parseServicePathResponse(res: Response):ForwardingPath { + let resJSON = res.json(); + let pathId = Object.keys(resJSON.forwardingPaths)[0]; + let forwardingPath = resJSON.forwardingPaths[pathId]; + let path:ForwardingPath = new ForwardingPath(); + path.deserialize(forwardingPath); + path.uniqueId = pathId; + return path; + } } + +class ServicePathRequestData { + forwardingPaths: { [key:string]:ForwardingPath } = {}; + componentMetadataDefinition: ComponentMetadata; + toscaType: string = "topology_template"; + + constructor(fp? : ForwardingPath) { + this.componentMetadataDefinition = new ComponentMetadata(); + this.componentMetadataDefinition.ecompGeneratedNaming = true; + this.componentMetadataDefinition.componentType = ComponentType.SERVICE; + if (fp) { + let id = fp.uniqueId ? fp.uniqueId : "NEW"; + this.forwardingPaths[fp.uniqueId] = fp; + } + } +} + diff --git a/catalog-ui/src/app/ng2/services/config.service.ts b/catalog-ui/src/app/ng2/services/config.service.ts index 053f2c7659..3e6e667285 100644 --- a/catalog-ui/src/app/ng2/services/config.service.ts +++ b/catalog-ui/src/app/ng2/services/config.service.ts @@ -37,8 +37,8 @@ export class ConfigService { public api:IApi; constructor(private http: Http, @Inject(SdcConfigToken) private sdcConfig:ISdcConfig) { - this.api = this.sdcConfig.api; - this.baseUrl = this.api.root + this.api.component_api_root; + this.api = this.sdcConfig.api; + this.baseUrl = this.sdcConfig.api.root + this.sdcConfig.api.component_api_root; } loadValidationConfiguration(): Promise { diff --git a/catalog-ui/src/app/ng2/services/data-type.service.ts b/catalog-ui/src/app/ng2/services/data-type.service.ts index 30c02a4141..6b5908903e 100644 --- a/catalog-ui/src/app/ng2/services/data-type.service.ts +++ b/catalog-ui/src/app/ng2/services/data-type.service.ts @@ -18,6 +18,7 @@ * ============LICENSE_END========================================================= */ +import * as _ from "lodash"; import { Injectable } from '@angular/core'; import { DataTypeModel, DataTypesMap, PropertyBEModel, PropertyFEModel, DerivedFEProperty, DerivedFEPropertyMap } from "app/models"; import { DataTypesService } from "app/services/data-types-service"; diff --git a/catalog-ui/src/app/ng2/services/dynamic-component.service.ts b/catalog-ui/src/app/ng2/services/dynamic-component.service.ts new file mode 100644 index 0000000000..29dd1e9e09 --- /dev/null +++ b/catalog-ui/src/app/ng2/services/dynamic-component.service.ts @@ -0,0 +1,28 @@ +import { + Injectable, Type, ViewContainerRef, ApplicationRef, ComponentFactory, ComponentFactoryResolver, ComponentRef +} from '@angular/core'; + + + +@Injectable() +export class DynamicComponentService { + + constructor(private componentFactoryResolver: ComponentFactoryResolver, private applicationRef: ApplicationRef) { } + + //Creates a component dynamically (aka during runtime). If a view container is not specified, it will append the new component to the app root. + //To subscribe to an event from invoking component: componentRef.instance.clicked.subscribe((m) => console.log(m.name)); + public createDynamicComponent(componentType: Type, viewContainerRef?:ViewContainerRef): ComponentRef { + + viewContainerRef = viewContainerRef || this.getRootViewContainerRef(); + viewContainerRef.clear(); + + let factory: ComponentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType); //Ref: https://angular.io/guide/dynamic-component-loader + let componentRef: ComponentRef = viewContainerRef.createComponent(factory); + return componentRef; + } + + + private getRootViewContainerRef(): ViewContainerRef { + return this.applicationRef.components[0].instance.viewContainerRef; + } +}; \ No newline at end of file diff --git a/catalog-ui/src/app/ng2/services/modal.service.ts b/catalog-ui/src/app/ng2/services/modal.service.ts index 22b56c7004..4e86d6accf 100644 --- a/catalog-ui/src/app/ng2/services/modal.service.ts +++ b/catalog-ui/src/app/ng2/services/modal.service.ts @@ -1,11 +1,12 @@ import { Injectable, Type, ViewContainerRef, ApplicationRef, ComponentFactory, ComponentFactoryResolver, ComponentRef, - + TemplateRef } from '@angular/core'; import { ModalModel, ButtonModel, StepModel } from 'app/models'; import {MultiStepsWizardComponent} from "../components/ui/multi-steps-wizard/multi-steps-wizard.component"; import {ModalComponent} from "../components/ui/modal/modal.component"; import {WizardHeaderBaseComponent} from "app/ng2/components/ui/multi-steps-wizard/multi-steps-wizard-header-base.component"; +import { DynamicComponentService } from 'app/ng2/services/dynamic-component.service'; @Injectable() @@ -13,7 +14,7 @@ export class ModalService { currentModal: ComponentRef; - constructor(private componentFactoryResolver: ComponentFactoryResolver, private applicationRef: ApplicationRef) { } + constructor(private dynamicComponentService: DynamicComponentService) { } /* Shortcut method to open an alert modal with title, message, and close button that simply closes the modal. */ @@ -52,7 +53,7 @@ export class ModalService { /* Use this method to create a modal with title, message, and completely custom buttons. Use response.instance.open() to open */ public createCustomModal = (customModalData: ModalModel): ComponentRef => { - let customModal: ComponentRef = this.createDynamicComponent(ModalComponent); + let customModal: ComponentRef = this.dynamicComponentService.createDynamicComponent(ModalComponent); customModal.instance.input = customModalData; this.currentModal = customModal; @@ -62,12 +63,12 @@ export class ModalService { public createMultiStepsWizard = (title: string, steps:Array, callback: Function, dynamicHeaderType?: Type): ComponentRef => { let cancelButton: ButtonModel = new ButtonModel('Cancel', 'outline blue', this.closeCurrentModal); let modalModel: ModalModel = new ModalModel('xl', title, '', [cancelButton]); - let wizardInstance: ComponentRef = this.createDynamicComponent(MultiStepsWizardComponent); + let wizardInstance: ComponentRef = this.dynamicComponentService.createDynamicComponent(MultiStepsWizardComponent); wizardInstance.instance.input = modalModel; wizardInstance.instance.steps = steps; wizardInstance.instance.callback = callback; if(dynamicHeaderType){ - let dynamicHeader = this.createDynamicComponent(dynamicHeaderType, wizardInstance.instance.dynamicHeaderContainer); + let dynamicHeader = this.dynamicComponentService.createDynamicComponent(dynamicHeaderType, wizardInstance.instance.dynamicHeaderContainer); wizardInstance.instance.dynamicHeader = dynamicHeader; wizardInstance.instance.dynamicHeader.instance.currentStepIndex = 0; } @@ -76,38 +77,28 @@ export class ModalService { return wizardInstance; } - + public closeCurrentModal = () => { if (!this.currentModal) return; this.currentModal.instance.close(); this.currentModal.destroy(); + delete this.currentModal; } public addDynamicContentToModal = (modalInstance: ComponentRef, dynamicComponentType: Type, dynamicComponentInput?: any) => { - let dynamicContent = this.createDynamicComponent(dynamicComponentType, modalInstance.instance.dynamicContentContainer); + let dynamicContent = this.dynamicComponentService.createDynamicComponent(dynamicComponentType, modalInstance.instance.dynamicContentContainer); dynamicContent.instance.input = dynamicComponentInput; modalInstance.instance.dynamicContent = dynamicContent; return modalInstance; } - //Creates a component dynamically (aka during runtime). If a view container is not specified, it will append the new component to the app root. - //To subscribe to an event from invoking component: componentRef.instance.clicked.subscribe((m) => console.log(m.name)); - private createDynamicComponent(componentType: Type, viewContainerRef?:ViewContainerRef): ComponentRef { - - viewContainerRef = viewContainerRef || this.getRootViewContainerRef(); - viewContainerRef.clear(); + public addDynamicTemplateToModal = (modalInstance: ComponentRef, templateRef: TemplateRef) => { + modalInstance.instance.dynamicContentContainer.clear(); + modalInstance.instance.dynamicContentContainer.createEmbeddedView(templateRef); + return modalInstance; + }; - let factory: ComponentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType); //Ref: https://angular.io/guide/dynamic-component-loader - let componentRef: ComponentRef = viewContainerRef.createComponent(factory); - return componentRef; - } - - private getRootViewContainerRef(): ViewContainerRef { - return this.applicationRef.components[0].instance.viewContainerRef; - } } - - diff --git a/catalog-ui/src/app/ng2/services/policies.service.ts b/catalog-ui/src/app/ng2/services/policies.service.ts new file mode 100644 index 0000000000..2b564b8915 --- /dev/null +++ b/catalog-ui/src/app/ng2/services/policies.service.ts @@ -0,0 +1,49 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * 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========================================================= + */ + +import { Injectable, Inject } from "@angular/core"; +import { Headers } from "@angular/http"; +import { Observable } from "rxjs/Observable"; +import { HttpService } from "./http.service"; +import { Cookie2Service } from "./cookie.service"; +import {SdcConfigToken, ISdcConfig} from "../config/sdc-config.config"; + + +@Injectable() +export class PoliciesService { + protected baseUrl; + + private mapApiDirections = { + 'RESOURCE':'resources', + 'SERVICE':'services' + } + + constructor(private http: HttpService, @Inject(SdcConfigToken) sdcConfig:ISdcConfig) { + this.baseUrl = sdcConfig.api.root ; + } + + public createPolicyInstance(entityType:string, id:string, policyType:string) { + return this.http.post(this.baseUrl + '/v1/catalog/' + this.mapApiDirections[entityType] + '/' + id +'/policies/' + policyType, {}).map(resp => { + return resp.json(); + }); + } + +} + diff --git a/catalog-ui/src/app/ng2/services/properties.service.ts b/catalog-ui/src/app/ng2/services/properties.service.ts index 86cd2f5c72..c86d207915 100644 --- a/catalog-ui/src/app/ng2/services/properties.service.ts +++ b/catalog-ui/src/app/ng2/services/properties.service.ts @@ -18,6 +18,7 @@ * ============LICENSE_END========================================================= */ +import * as _ from "lodash"; import { Injectable } from '@angular/core'; import { PropertyFEModel, PropertyBEModel, PropertyDeclareAPIModel, DerivedFEProperty} from "app/models"; diff --git a/catalog-ui/src/app/ng2/services/responses/component-generic-response.ts b/catalog-ui/src/app/ng2/services/responses/component-generic-response.ts index 9450e4bc04..e7c88a0ab8 100644 --- a/catalog-ui/src/app/ng2/services/responses/component-generic-response.ts +++ b/catalog-ui/src/app/ng2/services/responses/component-generic-response.ts @@ -27,6 +27,7 @@ import { ArtifactGroupModel, PropertyModel, PropertiesGroup, AttributeModel, Att import {CommonUtils} from "app/utils"; import {Serializable} from "../utils/serializable"; import {PropertyBEModel} from "../../../models/properties-inputs/property-be-model"; +import { PolicyInstance } from "app/models/graph/zones/policy-instance"; export class ComponentGenericResponse implements Serializable { @@ -43,6 +44,7 @@ export class ComponentGenericResponse implements Serializable; public attributes:Array; + public policies:Array; public groups:Array; public interfaces:any; public additionalInformation:any; @@ -92,6 +94,9 @@ export class ComponentGenericResponse implements Serializable { + public forwardingPaths: { [key:string]:ForwardingPath } = {}; + + deserialize (response): ServiceGenericResponse { + super.deserialize(response); + if(response.forwardingPaths) { + _.forEach(response.forwardingPaths, (pathResponse, id) => { + let pathId = id; + let path:ForwardingPath = new ForwardingPath(); + path.deserialize(pathResponse); + path.uniqueId = pathId; + this.forwardingPaths[pathId] = path; + }); + } + return this; + } +} \ No newline at end of file -- cgit 1.2.3-korg