/*- * ============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========================================================= */ /// module Sdc.Models { 'use strict'; export class RelationMenuDirectiveObj { fromNode:Models.Graph.CompositionCiNodeBase; toNode:Models.Graph.CompositionCiNodeBase; // modelLinks:Array; mp2mpVL:Models.Components.Component; p2pVL:Models.Components.Component; menuPosition: Cy.Position; rightSideLink:GraphLinkMenuSide; leftSideLink:GraphLinkMenuSide; selectionText:string; vlType:string; constructor(fromNode:Models.Graph.CompositionCiNodeBase, toNode:Models.Graph.CompositionCiNodeBase, mp2mpVL:Models.Components.Component, p2pVL:Models.Components.Component, menuPosition:Cy.Position, possibleRelations:Array) { this.fromNode = fromNode; this.toNode = toNode; // this.modelLinks = modelLinks; this.mp2mpVL = mp2mpVL; this.p2pVL = p2pVL; this.menuPosition = menuPosition; this.leftSideLink = new GraphLinkMenuSide(this.fromNode.componentInstance); this.rightSideLink = new GraphLinkMenuSide(this.toNode.componentInstance); this.selectionText = ''; this.vlType = null; possibleRelations.forEach((match:any) => { let reqObjKey: string = match.requirement.ownerName + match.requirement.uniqueId; let capObjKey: string = match.secondRequirement ? match.secondRequirement.ownerName + match.secondRequirement.uniqueId : match.capability.ownerName + match.capability.uniqueId; if (match.fromNode === this.leftSideLink.componentInstance.uniqueId) { //init the left side requirements Array if (!this.leftSideLink.requirements[reqObjKey]) { this.leftSideLink.requirements[reqObjKey] = []; } //push the match to fromNode object (from node is always the requirement) this.leftSideLink.requirements[reqObjKey].push(match); if (match instanceof Models.MatchReqToReq) { //init the right side requirements Array if (!this.rightSideLink.requirements[capObjKey]) { this.rightSideLink.requirements[capObjKey] = []; } this.rightSideLink.requirements[capObjKey].push(match); } else { //init the right side capabilities Array if (!this.rightSideLink.capabilities[capObjKey]) { this.rightSideLink.capabilities[capObjKey] = []; } //add to array this.rightSideLink.capabilities[capObjKey].push(match); } } else { if (!this.rightSideLink.requirements[reqObjKey]) { this.rightSideLink.requirements[reqObjKey] = []; } this.rightSideLink.requirements[reqObjKey].push(match); if (!this.leftSideLink.capabilities[capObjKey]) { this.leftSideLink.capabilities[capObjKey] = []; } this.leftSideLink.capabilities[capObjKey].push(match); } }); } } export class GraphLinkMenuSide { public componentInstance:Models.ComponentsInstances.ComponentInstance; public selectedMatch:Array; //match array returned by function in utils public requirements:any; //array of matches returned by function in utils public capabilities:any; //array of matches returned by function in utils constructor(componentInstance:Models.ComponentsInstances.ComponentInstance) { this.componentInstance = componentInstance; this.capabilities = {}; this.requirements = {}; } public selectMatchArr(matchArr:Array):void { if (this.selectedMatch === matchArr) { this.selectedMatch = undefined; } else { this.selectedMatch = matchArr; } } //TODO move to match object public getPreviewText(showReq:boolean):string { if (!this.selectedMatch) { return ''; } let match:any = this.selectedMatch[0]; if (showReq) { return match.requirement.ownerName + ': ' + match.requirement.name + ': [' + match.requirement.minOccurrences + ', ' + match.requirement.maxOccurrences + ']'; } else if (match.secondRequirement) { return match.secondRequirement.ownerName + ': ' + match.secondRequirement.name + ': [' + match.secondRequirement.minOccurrences + ', ' + match.secondRequirement.maxOccurrences + ']'; } else { return match.capability.ownerName + ': ' + match.capability.name + ': [' + match.capability.minOccurrences + ', ' + match.capability.maxOccurrences + ']'; } } } }