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) --- .../utils/composition-graph-general-utils.ts | 1 + .../utils/composition-graph-links-utils.ts | 41 ++++++++--- .../utils/composition-graph-nodes-utils.ts | 28 ++++++-- .../utils/composition-graph-service-path-utils.ts | 80 ++++++++++++++++++++++ .../utils/composition-graph-zone-utils.ts | 55 +++++++++++++++ .../utils/match-capability-requierment-utils.ts | 3 +- 6 files changed, 190 insertions(+), 18 deletions(-) create mode 100644 catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-service-path-utils.ts create mode 100644 catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-zone-utils.ts (limited to 'catalog-ui/src/app/directives/graphs-v2/composition-graph/utils') diff --git a/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-general-utils.ts b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-general-utils.ts index da7d48e6ae..73e03e954d 100644 --- a/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-general-utils.ts +++ b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-general-utils.ts @@ -18,6 +18,7 @@ * ============LICENSE_END========================================================= */ +import * as _ from "lodash"; import {ComponentInstance, Component, Match, CompositionCiLinkBase, CompositionCiNodeUcpeCp} from "app/models"; import {QueueUtils, Dictionary, GraphUIObjects} from "app/utils"; import {LoaderService} from "app/services"; diff --git a/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-links-utils.ts b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-links-utils.ts index 89c5e14602..705367c5f7 100644 --- a/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-links-utils.ts +++ b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-links-utils.ts @@ -21,6 +21,7 @@ /** * Created by obarda on 6/28/2016. */ +import * as _ from "lodash"; import {GraphUIObjects} from "app/utils"; import {LoaderService} from "app/services"; import { @@ -39,6 +40,7 @@ import { import {CommonGraphUtils} from "../../common/common-graph-utils"; import {CompositionGraphGeneralUtils} from "./composition-graph-general-utils"; import {MatchCapabilitiesRequirementsUtils} from "./match-capability-requierment-utils"; +import {CompositionCiServicePathLink} from "../../../../models/graph/graph-links/composition-graph-links/composition-ci-service-path-link"; export class CompositionGraphLinkUtils { @@ -86,7 +88,7 @@ export class CompositionGraphLinkUtils { let onSuccess:(response:RelationshipModel) => void = (relation:RelationshipModel) => { link.setRelation(relation); - this.commonGraphUtils.insertLinkToGraph(cy, link); + this.commonGraphUtils.insertLinkToGraph(cy, link, component.getRelationRequirementCapability.bind(component)); }; link.updateLinkDirection(); @@ -212,6 +214,28 @@ export class CompositionGraphLinkUtils { this.createLink(link, cy, component); }; + private handlePathLink(cy:Cy.Instance, event:Cy.EventObject) { + let linkData = event.cyTarget.data(); + let selectedPathId = linkData.pathId; + let pathEdges = cy.collection(`[pathId='${selectedPathId}']`); + if (pathEdges.length > 1) { + setTimeout(() => { + pathEdges.select(); + }, 0); + } + } + + private handleVLLink(event:Cy.EventObject) { + let vl:Cy.CollectionNodes = event.cyTarget[0].target('.vl-node'); + let connectedEdges:Cy.CollectionEdges = vl.connectedEdges(`[type!="${CompositionCiServicePathLink.LINK_TYPE}"]`); + if (vl.length && connectedEdges.length > 1) { + setTimeout(() => { + vl.select(); + connectedEdges.select(); + }, 0); + } + } + /** * Handles click event on links. @@ -224,18 +248,13 @@ export class CompositionGraphLinkUtils { if (cy.$('edge:selected').length > 1 && event.cyTarget[0].selected()) { cy.$(':selected').unselect(); } else { - - let vl:Cy.CollectionNodes = event.cyTarget[0].target('.vl-node'); - let connectedEdges:Cy.CollectionEdges = vl.connectedEdges(); - if (vl.length && connectedEdges.length > 1) { - - setTimeout(() => { - vl.select(); - connectedEdges.select(); - }, 0); + if (event.cyTarget[0].data().type === CompositionCiServicePathLink.LINK_TYPE) { + this.handlePathLink(cy, event); + } + else { + this.handleVLLink(event); } } - } diff --git a/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-nodes-utils.ts b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-nodes-utils.ts index 449d551cc0..fb1e6650bd 100644 --- a/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-nodes-utils.ts +++ b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-nodes-utils.ts @@ -18,11 +18,15 @@ * ============LICENSE_END========================================================= */ -import {Component, NodesFactory, ComponentInstance, CompositionCiNodeVl,IAppMenu,AssetPopoverObj} from "app/models"; +import * as _ from "lodash"; +import {Component, NodesFactory, ComponentInstance, CompositionCiNodeVl,IAppMenu,AssetPopoverObj, Service} from "app/models"; import {EventListenerService, LoaderService} from "app/services"; import {GRAPH_EVENTS,ModalsHandler,GraphUIObjects} from "app/utils"; import {CompositionGraphGeneralUtils} from "./composition-graph-general-utils"; import {CommonGraphUtils} from "../../common/common-graph-utils"; +import {CompositionCiServicePathLink} from "app/models/graph/graph-links/composition-graph-links/composition-ci-service-path-link"; +import {ServiceGenericResponse} from "app/ng2/services/responses/service-generic-response"; +import {ServiceServiceNg2} from 'app/ng2/services/component-services/service.service'; /** * Created by obarda on 11/9/2016. */ @@ -31,9 +35,10 @@ export class CompositionGraphNodesUtils { private GeneralGraphUtils:CompositionGraphGeneralUtils, private commonGraphUtils:CommonGraphUtils, private eventListenerService:EventListenerService, - private loaderService:LoaderService /*, - private sdcMenu: IAppMenu, - private ModalsHandler: ModalsHandler*/) { + private loaderService:LoaderService, + private serviceService:ServiceServiceNg2, + /*private sdcMenu: IAppMenu, + private ModalsHandler: ModalsHandler*/) { } @@ -88,9 +93,20 @@ export class CompositionGraphNodesUtils { this.handleConnectedVlsToDelete(connectedVls); } + // check whether there is a service path going through this node, and if so clean it from the graph. + let nodeId = nodeToDelete.data().id; + let connectedPathLinks = cy.collection(`[type="${CompositionCiServicePathLink.LINK_TYPE}"][source="${nodeId}"], [type="${CompositionCiServicePathLink.LINK_TYPE}"][target="${nodeId}"]`); + _.forEach(connectedPathLinks, (link, key) => { + cy.remove(`[pathId="${link.data().pathId}"]`); + }); + + // update service path list + this.serviceService.getComponentCompositionData(component).subscribe((response:ServiceGenericResponse) => { + (component).forwardingPaths = response.forwardingPaths; + }); + //update UI cy.remove(nodeToDelete); - }; let onFailed:(response:any) => void = (response:any) => { @@ -297,5 +313,5 @@ export class CompositionGraphNodesUtils { } - CompositionGraphNodesUtils.$inject = ['NodesFactory', '$log', 'CompositionGraphGeneralUtils', 'CommonGraphUtils', 'EventListenerService', 'LoaderService' /*, 'sdcMenu', 'ModalsHandler'*/] + CompositionGraphNodesUtils.$inject = ['NodesFactory', '$log', 'CompositionGraphGeneralUtils', 'CommonGraphUtils', 'EventListenerService', 'LoaderService', 'ServiceServiceNg2' /*, 'sdcMenu', 'ModalsHandler'*/] diff --git a/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-service-path-utils.ts b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-service-path-utils.ts new file mode 100644 index 0000000000..ef047d7dd3 --- /dev/null +++ b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-service-path-utils.ts @@ -0,0 +1,80 @@ +/*- + * ============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 * as _ from "lodash"; +import {LoaderService} from "app/services"; +import {CompositionGraphGeneralUtils} from "./composition-graph-general-utils"; +import {ICompositionGraphScope} from "../composition-graph.directive"; +import {ServiceServiceNg2} from 'app/ng2/services/component-services/service.service'; +import {Service} from "../../../../models/components/service"; +import {ForwardingPath} from "app/models/forwarding-path"; +import {ForwardingPathLink} from "app/models/forwarding-path-link"; +import {CompositionCiServicePathLink} from "../../../../models/graph/graph-links/composition-graph-links/composition-ci-service-path-link"; +import {CommonGraphUtils} from "app/directives/graphs-v2/common/common-graph-utils"; + +export class ServicePathGraphUtils { + + constructor( + private loaderService:LoaderService, + private generalGraphUtils:CompositionGraphGeneralUtils, + private serviceService:ServiceServiceNg2, + private commonGraphUtils:CommonGraphUtils + ) {} + + public deletePathsFromGraph(cy: Cy.Instance, service:Service){ + cy.remove(`[type="${CompositionCiServicePathLink.LINK_TYPE}"]`); + } + + public drawPath(cy: Cy.Instance, forwardingPath: ForwardingPath, service:Service) { + let pathElements = forwardingPath.pathElements.listToscaDataDefinition; + + _.forEach(pathElements, (link: ForwardingPathLink) => { + let data:CompositionCiServicePathLink = new CompositionCiServicePathLink(link); + data.source = data.forwardingPathLink.fromNode; + data.target = data.forwardingPathLink.toNode; + data.pathId = forwardingPath.uniqueId; + data.pathName = forwardingPath.name; + this.commonGraphUtils.insertServicePathLinkToGraph(cy, data); + }); + } + + public createOrUpdateServicePath = (scope:ICompositionGraphScope, path: any): void => { + let service = scope.component; + this.loaderService.showLoader('composition-graph'); + + let onSuccess: (response: ForwardingPath) => void = (response: ForwardingPath) => { + + service.forwardingPaths[response.uniqueId] = response; + scope.selectedPathId = response.uniqueId; + }; + + this.generalGraphUtils.getGraphUtilsServerUpdateQueue().addBlockingUIActionWithReleaseCallback( + () => this.serviceService.createOrUpdateServicePath(service, path).subscribe(onSuccess), + () => this.loaderService.hideLoader('composition-graph') + ); + }; +} + +ServicePathGraphUtils.$inject = [ + 'LoaderService', + 'CompositionGraphGeneralUtils', + 'ServiceServiceNg2', + 'CommonGraphUtils' +]; diff --git a/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-zone-utils.ts b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-zone-utils.ts new file mode 100644 index 0000000000..28f2dc85d2 --- /dev/null +++ b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/composition-graph-zone-utils.ts @@ -0,0 +1,55 @@ +import { PolicyInstance } from "app/models/graph/zones/policy-instance"; +import { ZoneConfig, ZoneInstanceConfig } from "app/models/graph/zones/zone-child"; +import { DynamicComponentService } from "app/ng2/services/dynamic-component.service"; +import { PaletteAnimationComponent } from "app/ng2/components/ui/palette-animation/palette-animation.component"; +import { Point } from "../../../../models"; + +export class CompositionGraphZoneUtils { + + constructor(private dynamicComponentService: DynamicComponentService) {} + + public createCompositionZones(){ + let zones = { + 'policy': new ZoneConfig('Policies', 'P', 'policy', false), + 'group': new ZoneConfig('Groups', 'G', 'group', false) + }; + return zones; + } + + public initPolicyInstances(policyZone:ZoneConfig, policies:Array) { + if(policies && policies.length){ + policyZone.showZone = true; + } + _.forEach(policies, (policy:PolicyInstance) => { + policyZone.instances.push(new ZoneInstanceConfig(policy)); + }); + } + + public addInstanceToZone(zone:ZoneConfig, instance:PolicyInstance){ + zone.instances.push(new ZoneInstanceConfig(instance)); + }; + + private findZoneCoordinates(zoneType):Point{ + let point:Point = new Point(0,0); + let zone = angular.element(document.querySelector('.' + zoneType + '-zone')); + let wrapperZone = zone.offsetParent(); + point.x = zone.prop('offsetLeft') + wrapperZone.prop('offsetLeft'); + point.y = zone.prop('offsetTop') + wrapperZone.prop('offsetTop'); + return point; + } + + public showAnimationToZone = (startPoint:Point, zoneType:string) => { + + let paletteToZoneAnimation = this.dynamicComponentService.createDynamicComponent(PaletteAnimationComponent); + paletteToZoneAnimation.instance.from = startPoint; + paletteToZoneAnimation.instance.to = this.findZoneCoordinates(zoneType); + paletteToZoneAnimation.instance.iconName = zoneType; + paletteToZoneAnimation.instance.runAnimation(); + } + + +} + +CompositionGraphZoneUtils.$inject = [ + 'DynamicComponentService' +]; \ No newline at end of file diff --git a/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/match-capability-requierment-utils.ts b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/match-capability-requierment-utils.ts index 6a02381902..3a05ce901f 100644 --- a/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/match-capability-requierment-utils.ts +++ b/catalog-ui/src/app/directives/graphs-v2/composition-graph/utils/match-capability-requierment-utils.ts @@ -18,6 +18,7 @@ * ============LICENSE_END========================================================= */ +import * as _ from "lodash"; import { Requirement, CompositionCiLinkBase, CapabilitiesGroup, RequirementsGroup, Match, CompositionCiNodeBase, Component, Capability @@ -142,7 +143,7 @@ export class MatchCapabilitiesRequirementsUtils { let requirementArray:Array = []; _.forEach(_.flatten(_.values(requirements)), (requirement:Requirement)=> { - if (requirement.name !== "dependency" && !MatchCapabilitiesRequirementsUtils.isRequirementFulfilled(fromNodeId, requirement, links)) { + if (requirement.name !== 'dependency' && requirement.parentName !== 'dependency' && !MatchCapabilitiesRequirementsUtils.isRequirementFulfilled(fromNodeId, requirement, links)) { requirementArray.push(requirement); } }); -- cgit 1.2.3-korg