summaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/directives/graphs-v2/composition-graph/composition-graph.directive.ts
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-ui/src/app/directives/graphs-v2/composition-graph/composition-graph.directive.ts')
-rw-r--r--catalog-ui/src/app/directives/graphs-v2/composition-graph/composition-graph.directive.ts225
1 files changed, 159 insertions, 66 deletions
diff --git a/catalog-ui/src/app/directives/graphs-v2/composition-graph/composition-graph.directive.ts b/catalog-ui/src/app/directives/graphs-v2/composition-graph/composition-graph.directive.ts
index cdb163bda1..2144ecfbfa 100644
--- a/catalog-ui/src/app/directives/graphs-v2/composition-graph/composition-graph.directive.ts
+++ b/catalog-ui/src/app/directives/graphs-v2/composition-graph/composition-graph.directive.ts
@@ -18,6 +18,7 @@
* ============LICENSE_END=========================================================
*/
+import * as _ from "lodash";
import {
Match,
LinkMenu,
@@ -28,13 +29,15 @@ import {
Relationship,
PropertyModel,
Component,
+ Service,
ConnectRelationModel,
CompositionCiNodeBase,
CompositionCiNodeVl,
ModalModel,
ButtonModel,
NodesFactory/*,
- AssetPopoverObj*/
+ AssetPopoverObj*/,
+ Point
} from "app/models";
import {ComponentInstanceFactory, ComponentFactory, GRAPH_EVENTS, GraphColors} from "app/utils";
import {EventListenerService, LoaderService} from "app/services";
@@ -60,13 +63,32 @@ import {ConnectionPropertiesViewComponent} from "../../../ng2/pages/connection-w
import {ComponentInstanceServiceNg2} from "../../../ng2/services/component-instance-services/component-instance.service";
import {EVENTS} from "../../../utils/constants";
import {PropertyBEModel} from "../../../models/properties-inputs/property-be-model";
+import {ComponentType} from "app/utils";
+import {ForwardingPath} from "app/models/forwarding-path";
+import {ServicePathGraphUtils} from "./utils/composition-graph-service-path-utils";
+import {CompositionCiServicePathLink} from "app/models/graph/graph-links/composition-graph-links/composition-ci-service-path-link";
+import { ZoneConfig, ZoneInstanceConfig, ZoneInstanceMode } from "app/models/graph/zones/zone-child";
+import { PoliciesService } from "app/ng2/services/policies.service";
+import { PaletteAnimationComponent } from "app/ng2/components/ui/palette-animation/palette-animation.component";
+import { CompositionGraphZoneUtils } from "./utils/composition-graph-zone-utils";
+import {LeftPaletteMetadataTypes} from "../../../models/components/displayComponent";
-interface ICompositionGraphScope extends ng.IScope {
+
+export interface ICompositionGraphScope extends ng.IScope {
component:Component;
isLoading: boolean;
isViewOnly: boolean;
withSidebar: boolean;
+
+ //zones
+ newZoneInstance;
+ zoneTagMode:string;
+ activeZoneInstance:ZoneInstanceConfig;
+ zones:any;
+ zoneInstanceModeChanged(newMode:ZoneInstanceMode, instance:ZoneInstanceConfig, zoneId:string);
+ clickOutsideZoneInstance():void;
+
// Link menu - create link menu
relationMenuDirectiveObj:ConnectRelationModel;
isLinkMenuOpen:boolean;
@@ -76,6 +98,7 @@ interface ICompositionGraphScope extends ng.IScope {
//modify link menu - for now only delete menu
relationMenuTimeout:ng.IPromise<any>;
linkMenuObject:LinkMenu;
+ isOnDrag: boolean;
//left palette functions callbacks
dropCallback(event:JQueryEventObject, ui:any):void;
@@ -95,7 +118,12 @@ interface ICompositionGraphScope extends ng.IScope {
highlightSearchMatches(searchTerm: string): void;
canvasMenuProps:any;
-
+
+ createOrUpdateServicePath(data: any):void;
+ deletePathsOnCy():void;
+ drawPathOnCy(data: ForwardingPath):void;
+ selectedPathId: string;
+
/*//asset popover menu
assetPopoverObj:AssetPopoverObj;
assetPopoverOpen:boolean;
@@ -124,10 +152,13 @@ export class CompositionGraph implements ng.IDirective {
private commonGraphUtils:CommonGraphUtils,
private matchCapabilitiesRequirementsUtils:MatchCapabilitiesRequirementsUtils,
private CompositionGraphPaletteUtils:CompositionGraphPaletteUtils,
+ private compositionGraphZoneUtils:CompositionGraphZoneUtils,
private ComponentServiceNg2: ComponentServiceNg2,
private ModalServiceNg2: ModalService,
private ConnectionWizardServiceNg2: ConnectionWizardService,
- private ComponentInstanceServiceNg2: ComponentInstanceServiceNg2) {
+ private ComponentInstanceServiceNg2: ComponentInstanceServiceNg2,
+ private servicePathGraphUtils: ServicePathGraphUtils,
+ private policiesService:PoliciesService) {
}
@@ -140,7 +171,6 @@ export class CompositionGraph implements ng.IDirective {
};
link = (scope:ICompositionGraphScope, el:JQuery) => {
-
this.loadGraph(scope, el);
if(scope.component.componentInstances && scope.component.componentInstancesRelations) {
@@ -164,15 +194,16 @@ export class CompositionGraph implements ng.IDirective {
private loadGraphData = (scope:ICompositionGraphScope) => {
this.initGraphNodes(scope.component.componentInstances, scope.isViewOnly);
- this.commonGraphUtils.initGraphLinks(this._cy, scope.component.componentInstancesRelations);
+ this.commonGraphUtils.initGraphLinks(this._cy, scope.component.componentInstancesRelations, scope.component.getRelationRequirementCapability.bind(scope.component));
this.commonGraphUtils.initUcpeChildren(this._cy);
+ this.compositionGraphZoneUtils.initPolicyInstances(scope.zones.policy, scope.component.policies);
}
private loadGraph = (scope:ICompositionGraphScope, el:JQuery) => {
-
let graphEl = el.find('.sdc-composition-graph-wrapper');
this.initGraph(graphEl, scope.isViewOnly);
this.initDropZone(scope);
+ this.initZones(scope);
this.registerCytoscapeGraphEvents(scope);
this.registerCustomEvents(scope, el);
this.initViewMode(scope.isViewOnly);
@@ -210,6 +241,12 @@ export class CompositionGraph implements ng.IDirective {
private registerCustomEvents(scope:ICompositionGraphScope, el:JQuery) {
this.eventListenerService.registerObserverCallback(GRAPH_EVENTS.ON_PALETTE_COMPONENT_HOVER_IN, (leftPaletteComponent:LeftPaletteComponent) => {
+ if(scope.isOnDrag ||
+ leftPaletteComponent.categoryType === LeftPaletteMetadataTypes.Group ||
+ leftPaletteComponent.categoryType === LeftPaletteMetadataTypes.Policy) {
+ return;
+ }
+
this.$log.info(`composition-graph::registerEventServiceEvents:: palette hover on component: ${leftPaletteComponent.uniqueId}`);
let nodesData = this.NodesGraphUtils.getAllNodesData(this._cy.nodes());
@@ -240,6 +277,33 @@ export class CompositionGraph implements ng.IDirective {
});
});
+ this.eventListenerService.registerObserverCallback(GRAPH_EVENTS.ON_ADD_COMPONENT_INSTANCE_ZONE_START, (component:Component, paletteComponent:LeftPaletteComponent, startPosition:Point) => {
+ this.LoaderService.showLoader('composition-graph');
+
+ let zoneType:string = LeftPaletteMetadataTypes[paletteComponent.categoryType].toLowerCase();
+ scope.zones[zoneType].showZone = true;
+ if(scope.minifyZone) scope.minifyZone = false;
+
+ this.policiesService.createPolicyInstance(component.componentType, component.uniqueId, paletteComponent.type).subscribe((newInstance)=>{
+
+ this.LoaderService.hideLoader('composition-graph');
+ scope.newZoneInstance = newInstance;
+ this.compositionGraphZoneUtils.showAnimationToZone(startPosition, zoneType);
+ }, (error) => {
+ this.LoaderService.hideLoader('composition-graph');
+ });
+ });
+
+ this.eventListenerService.registerObserverCallback(GRAPH_EVENTS.ON_FINISH_ANIMATION_ZONE, () => {
+ if(scope.newZoneInstance){
+ this.compositionGraphZoneUtils.addInstanceToZone(scope.zones['policy'], scope.newZoneInstance);
+ }
+ })
+
+ this.eventListenerService.registerObserverCallback(GRAPH_EVENTS.ON_ZONE_SIZE_CHANGE, () => {
+ scope.minifyZone = true;
+ })
+
this.eventListenerService.registerObserverCallback(GRAPH_EVENTS.ON_PALETTE_COMPONENT_HOVER_OUT, () => {
this._cy.emit('hidehandles');
this.matchCapabilitiesRequirementsUtils.resetFadedNodes(this._cy);
@@ -362,17 +426,11 @@ export class CompositionGraph implements ng.IDirective {
.updateInstanceCapabilityProperties(
scope.component,
this.ConnectionWizardServiceNg2.selectedMatch.toNode,
- this.ConnectionWizardServiceNg2.selectedMatch.capability.type,
- this.ConnectionWizardServiceNg2.selectedMatch.capability.name,
+ this.ConnectionWizardServiceNg2.selectedMatch.capability,
capabilityPropertiesBE
)
.subscribe((response) => {
console.log("Update resource instance capability properties response: ", response);
- response.forEach((resProperty) => {
- this.ConnectionWizardServiceNg2.selectedMatch.capabilityProperties.find((property) => {
- return property.uniqueId == resProperty.uniqueId;
- }).value = resProperty.value;
- });
this.ConnectionWizardServiceNg2.changedCapabilityProperties = [];
resolve(capabilityPropertiesBE);
});
@@ -400,6 +458,16 @@ export class CompositionGraph implements ng.IDirective {
});
};
+ scope.createOrUpdateServicePath = (data:any) => {
+ this.servicePathGraphUtils.createOrUpdateServicePath(scope, data);
+ };
+ scope.deletePathsOnCy = () => {
+ this.servicePathGraphUtils.deletePathsFromGraph(this._cy, <Service> scope.component);
+ };
+ scope.drawPathOnCy = (data: ForwardingPath) => {
+ this.servicePathGraphUtils.drawPath(this._cy, data, <Service> scope.component);
+ };
+
scope.viewRelation = (link:Cy.CollectionEdges) => {
scope.hideRelationMenu();
@@ -408,41 +476,9 @@ export class CompositionGraph implements ng.IDirective {
const targetNode:CompositionCiNodeBase = link.target().data();
const relationship:Relationship = linkData.relation.relationships[0];
- let capability:Capability;
- _.some(_.values(targetNode.componentInstance.capabilities), (capGroup) => {
- //item.uniqueId + item.ownerId + item.name === (selectedReqOrCapModel.uniqueId + selectedReqOrCapModel.ownerId + selectedReqOrCapModel.name)
- capability = _.find<Capability>(_.values<Capability>(capGroup), (cap:Capability) => (
- cap.uniqueId === relationship.relation.capabilityUid &&
- cap.ownerId === relationship.relation.capabilityOwnerId &&
- cap.name === relationship.relation.capability
- ));
- return capability;
- });
- let requirement:Requirement;
- _.some(_.values(sourceNode.componentInstance.requirements), (reqGroup) => {
- requirement = _.find<Requirement>(_.values<Requirement>(reqGroup), (req:Requirement) => (
- req.uniqueId === relationship.relation.requirementUid &&
- req.ownerId === relationship.relation.requirementOwnerId &&
- req.name === relationship.relation.requirement
- ));
- return requirement;
- });
-
- new Promise<{capability:Capability, requirement:Requirement}>((resolve, reject) => {
- if (capability && requirement) {
- resolve({capability, requirement});
- }
- else {
- scope.component.fetchRelation(relationship.relation.id).then((fetchedRelation) => {
- resolve({
- capability: fetchedRelation.relationships[0].capability,
- requirement: fetchedRelation.relationships[0].requirement
- });
- }, reject);
- }
- }).then((objReqCap) => {
- capability = objReqCap.capability;
- requirement = objReqCap.requirement;
+ scope.component.getRelationRequirementCapability(relationship, sourceNode.componentInstance, targetNode.componentInstance).then((objReqCap) => {
+ const capability = objReqCap.capability;
+ const requirement = objReqCap.requirement;
this.ConnectionWizardServiceNg2.currentComponent = scope.component;
this.ConnectionWizardServiceNg2.connectRelationModel = new ConnectRelationModel(sourceNode, targetNode, []);
@@ -459,11 +495,19 @@ export class CompositionGraph implements ng.IDirective {
this.ModalServiceNg2.addDynamicContentToModal(modalInstance, ConnectionPropertiesViewComponent);
modalInstance.instance.open();
- this.ComponentInstanceServiceNg2.getInstanceCapabilityProperties(scope.component, linkData.target, capability.type, capability.name)
- .subscribe((response: Array<PropertyModel>) => {
- this.ConnectionWizardServiceNg2.selectedMatch.capabilityProperties = response;
- this.ModalServiceNg2.addDynamicContentToModal(modalInstance, ConnectionPropertiesViewComponent);
- }, (error) => {});
+ new Promise((resolve) => {
+ if (!this.ConnectionWizardServiceNg2.selectedMatch.capability.properties) {
+ this.ComponentInstanceServiceNg2.getInstanceCapabilityProperties(scope.component, linkData.target, capability)
+ .subscribe(() => {
+ resolve();
+ }, (error) => {});
+ } else {
+ resolve();
+ }
+ }).then(() => {
+ this.ModalServiceNg2.addDynamicContentToModal(modalInstance, ConnectionPropertiesViewComponent);
+ })
+
}, (error) => {});
};
@@ -504,7 +548,7 @@ export class CompositionGraph implements ng.IDirective {
this.ConnectionWizardServiceNg2.currentComponent = scope.component;
//TODO: init with the selected values
this.ConnectionWizardServiceNg2.selectedMatch = null;
-
+
let steps:Array<StepModel> = [];
let fromNodeName:string = scope.relationMenuDirectiveObj.fromNode.componentInstance.name;
let toNodeName:string = scope.relationMenuDirectiveObj.toNode.componentInstance.name;
@@ -523,6 +567,7 @@ export class CompositionGraph implements ng.IDirective {
}
});
this._cy.on('tapstart', 'node', (event:Cy.EventObject) => {
+ scope.isOnDrag = true;
this._currentlyCLickedNodePosition = angular.copy(event.cyTarget[0].position()); //update node position on drag
if (event.cyTarget.data().isUcpe) {
this._cy.nodes('.ucpe-cp').unlock();
@@ -592,7 +637,7 @@ export class CompositionGraph implements ng.IDirective {
this._cy.on('tapend', (event:Cy.EventObject) => {
-
+ scope.isOnDrag = false;
if (event.cyTarget === this._cy) { //On Background clicked
if (this._cy.$('node:selected').length === 0) { //if the background click but not dragged
this.eventListenerService.notifyObservers(GRAPH_EVENTS.ON_GRAPH_BACKGROUND_CLICKED);
@@ -603,6 +648,9 @@ export class CompositionGraph implements ng.IDirective {
else if (event.cyTarget.isEdge()) { //On Edge clicked
if (scope.isViewOnly) return;
this.CompositionGraphLinkUtils.handleLinkClick(this._cy, event);
+ if (event.cyTarget.data().type === CompositionCiServicePathLink.LINK_TYPE) {
+ return;
+ }
this.openModifyLinkMenu(scope, this.CompositionGraphLinkUtils.getModifyLinkMenu(event.cyTarget[0], event), 6000);
}
@@ -640,13 +688,6 @@ export class CompositionGraph implements ng.IDirective {
});
}
- /*
- private showNodePopoverMenu = (scope:ICompositionGraphScope, node:Cy.CollectionNodes) => {
-
- scope.assetPopoverObj = this.NodesGraphUtils.createAssetPopover(this._cy, node, scope.isViewOnly);
- scope.assetPopoverOpen = true;
-
- };*/
private openModifyLinkMenu = (scope:ICompositionGraphScope, linkMenuObject:LinkMenu, timeOutInMilliseconds?:number) => {
scope.hideRelationMenu();
this.$timeout(() => {
@@ -732,6 +773,49 @@ export class CompositionGraph implements ng.IDirective {
}
}
+
+ private initZones = (scope:ICompositionGraphScope):void => {
+ scope.zones = this.compositionGraphZoneUtils.createCompositionZones();
+
+ scope.zoneInstanceModeChanged = (newMode:ZoneInstanceMode, instance:ZoneInstanceConfig, zoneId:string):void => {
+ if(scope.zoneTagMode) { //we're in tag mode.
+ if(instance == scope.activeZoneInstance && newMode == ZoneInstanceMode.TAG){ //we want to toggle tag mode off.
+ scope.unsetActiveZoneInstance();
+ }
+ } else {
+ scope.setZoneInstanceMode(newMode, instance, zoneId);
+ }
+ };
+
+ scope.setZoneInstanceMode = (newMode:ZoneInstanceMode, instance:ZoneInstanceConfig, zoneId:string):void => {
+ instance.mode = newMode;
+ switch(newMode){
+ case ZoneInstanceMode.TAG: {
+ scope.zoneTagMode = zoneId + "-tagging";
+ }
+ case ZoneInstanceMode.SELECTED: { //case TAG flows into here as well
+ scope.activeZoneInstance = instance;
+ break;
+ }
+ }
+ };
+
+ scope.unsetActiveZoneInstance = ():void => {
+ scope.activeZoneInstance.mode = ZoneInstanceMode.NONE;
+ scope.activeZoneInstance = null;
+ scope.zoneTagMode = null;
+ };
+
+ scope.clickOutsideZoneInstance = ():void => {
+ if(!scope.zoneTagMode)
+ scope.unsetActiveZoneInstance();
+ };
+
+ };
+
+
+
+
public static factory = ($q,
$log,
$timeout,
@@ -746,10 +830,13 @@ export class CompositionGraph implements ng.IDirective {
CommonGraphUtils,
MatchCapabilitiesRequirementsUtils,
CompositionGraphPaletteUtils,
+ CompositionGraphZoneUtils,
ComponentServiceNg2,
ModalService,
ConnectionWizardService,
- ComponentInstanceServiceNg2) => {
+ ComponentInstanceServiceNg2,
+ ServicePathGraphUtils,
+ PoliciesService) => {
return new CompositionGraph(
$q,
$log,
@@ -765,10 +852,13 @@ export class CompositionGraph implements ng.IDirective {
CommonGraphUtils,
MatchCapabilitiesRequirementsUtils,
CompositionGraphPaletteUtils,
+ CompositionGraphZoneUtils,
ComponentServiceNg2,
ModalService,
ConnectionWizardService,
- ComponentInstanceServiceNg2);
+ ComponentInstanceServiceNg2,
+ ServicePathGraphUtils,
+ PoliciesService);
}
}
@@ -787,8 +877,11 @@ CompositionGraph.factory.$inject = [
'CommonGraphUtils',
'MatchCapabilitiesRequirementsUtils',
'CompositionGraphPaletteUtils',
+ 'CompositionGraphZoneUtils',
'ComponentServiceNg2',
'ModalServiceNg2',
'ConnectionWizardServiceNg2',
- 'ComponentInstanceServiceNg2'
+ 'ComponentInstanceServiceNg2',
+ 'ServicePathGraphUtils',
+ 'PoliciesServiceNg2'
];