From efa45775d79668b4232e5b25a428b7e21d385bd2 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Fri, 23 Aug 2024 15:12:48 +0200 Subject: [PATCH 01/40] kie-issues#886 On the DMN Editor, adding waypoints to edges that don't have a corresponding DMNEdge associated with it should create the DMNEdge and add the waypoint normally. Closes: https://github.com/apache/incubator-kie-issues/issues/886 --- packages/dmn-editor/src/diagram/Diagram.tsx | 52 +++++++++++++++++++ packages/dmn-editor/src/mutations/addEdge.ts | 15 +++--- packages/dmn-editor/src/mutations/addShape.ts | 1 - .../src/mutations/addStandaloneNode.ts | 2 +- 4 files changed, 61 insertions(+), 9 deletions(-) diff --git a/packages/dmn-editor/src/diagram/Diagram.tsx b/packages/dmn-editor/src/diagram/Diagram.tsx index 123aba83e25..e017a66e222 100644 --- a/packages/dmn-editor/src/diagram/Diagram.tsx +++ b/packages/dmn-editor/src/diagram/Diagram.tsx @@ -568,6 +568,58 @@ export const Diagram = React.forwardRef { + const sourceData = nodesById.get(edge.source)?.data; + const sourceType = nodesById.get(edge.source)?.type; + const targetData = nodesById.get(edge.target)?.data; + const targetType = nodesById.get(edge.target)?.type; + + // We want to add Edge only if both Source and Target are already present in DRD + if ( + edge.data?.dmnShapeSource !== undefined && + edge.data?.dmnShapeSource["dc:Bounds"] !== undefined && + edge.data?.dmnShapeSource["@_id"] !== undefined && + edge.data?.dmnShapeTarget && + edge.data?.dmnShapeTarget["dc:Bounds"] !== undefined && + edge.data?.dmnShapeTarget["@_id"] !== undefined && + sourceData !== undefined && + sourceType !== undefined && + targetData !== undefined && + targetType !== undefined + ) { + addEdge({ + definitions: state.dmn.model.definitions, + drdIndex: state.computed(state).getDrdIndex(), + edge: { + type: edge.type as EdgeType, + targetHandle: PositionalNodeHandleId.Center, + sourceHandle: PositionalNodeHandleId.Center, + autoPositionedEdgeMarker: undefined, + }, + sourceNode: { + type: sourceType as NodeType, + data: sourceData, + href: edge.source.replace("#", ""), + bounds: edge.data?.dmnShapeSource["dc:Bounds"], + shapeId: edge.data?.dmnShapeSource["@_id"], + }, + targetNode: { + type: targetType as NodeType, + href: edge.target.replace("#", ""), + data: targetData, + bounds: edge.data?.dmnShapeTarget["dc:Bounds"], + index: nodesById.get(edge.target)?.data.index ?? 0, + shapeId: edge.data?.dmnShapeTarget["@_id"], + }, + keepWaypoints: false, + }); + } + }); }); } console.debug(`DMN DIAGRAM: Adding DRG node`, JSON.stringify(drgElement)); diff --git a/packages/dmn-editor/src/mutations/addEdge.ts b/packages/dmn-editor/src/mutations/addEdge.ts index 14e549433f9..caf62c120ef 100644 --- a/packages/dmn-editor/src/mutations/addEdge.ts +++ b/packages/dmn-editor/src/mutations/addEdge.ts @@ -27,7 +27,6 @@ import { DMN15__tInformationRequirement, DMN15__tKnowledgeRequirement, DMNDI15__DMNEdge, - DMNDI15__DMNShape, } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen/types"; import { PositionalNodeHandleId } from "../diagram/connections/PositionalNodeHandles"; import { EdgeType, NodeType } from "../diagram/connections/graphStructure"; @@ -195,20 +194,22 @@ export function addEdge({ function doesInformationRequirementsPointTo(a: Normalized, nodeId: string) { return ( - a.requiredInput?.["@_href"] === `${nodeId}` || // - a.requiredDecision?.["@_href"] === `${nodeId}` + // use endsWith because @_href is sometimes prefixed with '#' and sometimes it is not + a.requiredInput?.["@_href"].endsWith(`${nodeId}`) || a.requiredDecision?.["@_href"].endsWith(`${nodeId}`) ); } function doesKnowledgeRequirementsPointTo(a: Normalized, nodeId: string) { - return a.requiredKnowledge?.["@_href"] === `${nodeId}`; + // use endsWith because @_href is sometimes prefixed with '#' and sometimes it is not + return a.requiredKnowledge?.["@_href"].endsWith(`${nodeId}`); } function doesAuthorityRequirementsPointTo(a: Normalized, nodeId: string) { + // use endsWith because @_href is sometimes prefixed with '#' and sometimes it is not return ( - a.requiredInput?.["@_href"] === `${nodeId}` || - a.requiredDecision?.["@_href"] === `${nodeId}` || - a.requiredAuthority?.["@_href"] === `${nodeId}` + a.requiredInput?.["@_href"].endsWith(`${nodeId}`) || + a.requiredDecision?.["@_href"].endsWith(`${nodeId}`) || + a.requiredAuthority?.["@_href"].endsWith(`${nodeId}`) ); } diff --git a/packages/dmn-editor/src/mutations/addShape.ts b/packages/dmn-editor/src/mutations/addShape.ts index fd716e34ae6..f81585b9106 100644 --- a/packages/dmn-editor/src/mutations/addShape.ts +++ b/packages/dmn-editor/src/mutations/addShape.ts @@ -20,7 +20,6 @@ import { DC__Point, DMN15__tDefinitions, - DMNDI15__DMNDecisionServiceDividerLine, DMNDI15__DMNShape, } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen/types"; import { NodeType } from "../diagram/connections/graphStructure"; diff --git a/packages/dmn-editor/src/mutations/addStandaloneNode.ts b/packages/dmn-editor/src/mutations/addStandaloneNode.ts index 2b348f07def..a32e75743cb 100644 --- a/packages/dmn-editor/src/mutations/addStandaloneNode.ts +++ b/packages/dmn-editor/src/mutations/addStandaloneNode.ts @@ -18,7 +18,7 @@ */ import { switchExpression } from "@kie-tools-core/switch-expression-ts"; -import { DmnBuiltInDataType, generateUuid } from "@kie-tools/boxed-expression-component/dist/api"; +import { generateUuid } from "@kie-tools/boxed-expression-component/dist/api"; import { DC__Bounds, DMN15__tDefinitions } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen/types"; import { NodeType } from "../diagram/connections/graphStructure"; import { NODE_TYPES } from "../diagram/nodes/NodeTypes"; From 7a79145346daf2a6c4f62cbf5b6beb35edffa931 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Mon, 26 Aug 2024 15:17:59 +0200 Subject: [PATCH 02/40] information requirement tests --- .../drds/drds-ir-edge-depiction-waypoint.png | Bin 0 -> 47747 bytes .../drds/drds-ir-edge-depiction-waypoint.png | Bin 0 -> 42278 bytes .../drds/drds-ir-edge-depiction-waypoint.png | Bin 0 -> 43540 bytes .../tests-e2e/drds/modelDrd.spec.ts | 74 ++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/drds-ir-edge-depiction-waypoint.png create mode 100644 packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/drds-ir-edge-depiction-waypoint.png create mode 100644 packages/dmn-editor/tests-e2e/__screenshots__/webkit/drds/drds-ir-edge-depiction-waypoint.png diff --git a/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/drds-ir-edge-depiction-waypoint.png b/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/drds-ir-edge-depiction-waypoint.png new file mode 100644 index 0000000000000000000000000000000000000000..f4c321d972fd9f8fff54f44daaf7dd114d9e202a GIT binary patch literal 47747 zcmd?Rd0dX&+b(`3g$Bti8YrYBLq%yqN+FddX%t1XC=IIHOiGkgG*M|DNYWfhltiO6 zQfVGE&+TKC=lgx%{q8^Z@BQq(|M@*1p9i_`>$=vu);iAPJkH}>cT|)WSeZDOD2ifL zJS3+^Q4ILwyr_kY_>G@MZ5+SRT~JflPbGX=*G^G9l%m`|b%(&NI%jnayXl!fRr}r_ zuIHHlwur}Z9|NmG@fP7Ev%u${lA_f=h-@#;_!6PIR`AA)9mO9+%J}|7+OJ91{vum_ zaP2+iut)sQZ=VV{E5Nt2p0?a`V8ZySb@+zBIp`q6vLC(WtY)a`Y5 z^QYtYXq4NUr=g)L-f~=y%?}j*>;D`Tf{TCJ>|s%)$5Z3KM!Uz(I!-=d2@eW zDNna>?oZmQ8F=RYWN5UUHuopm4b}hS9~^spzO1%ZH{$to0YSmT6C=G^uCCer0|OfB z>Zd>K$<+`&S1Pw}-##WLCbg;ry^1X7OZo5L^Yih&@A@|TP$}w~nvc|uA5Sr_N^qCv zlaVnHdlLUEXWzA}SIc9ygz@31lc`oFUR}#8+x0qMiLYCHE7EE>HD~Imd1aics_KJN zr%nytHJIGLyWYV#zrkbE(Z>#E%Nx_(-Q5LTn}WqJ$aA|4KEMqs;!f=Hj3-#s$k+!l(ugANs6Y8^^1$lY%EJvcpQIq8X=cbb70bpvT(X$`2kqcr0?xyE=^A zfs(ZNcz?Z;qM~Zk2Tv*6oL|3Ad9D*z>#Rx~`8ZYhLV3idRf1KBGH@Bva2fr1%c;dz z%fo%XSy03Da4N^n(}#S$=x29z+{T?d)v(xyv`?rfL`5C?_U#*2&7zMIbwzreB3&DK zoQJ!iOjU9k;)K*Up+6uHh2C%NMQavkA}g?c)R9I#=P! zcGn)ANTa=!^GHuToAfAcl`G|q?P=GWHDZPdGx3^54x6xzhad58*s%Xn?fF~L7c6Su zsEUh=Ki+x9{bc`%NYgc0$_JQo^Y5hg8# z;s#nvo=6d}rgB-I9|?GNXW3=}Ny*wSRX)XxOTCqkMa^G1{5f^t!ih+658cQjQ);@~ z+O6!_!Mpr3H12by;dhoUTSnGxvH~5s$m*`|FO0FGFGg=QtBCP^y6d34ynvLH9`^Lj zGaN6J!yE@BWG4F#)Y%pZk$o~fl<1cB@JzFW-ZrW#?nGEy+gZN_FTAaDrZoTj`6Iy3 zzukGc|5gD3C5%|qnT6bf_V$s`$>$ZZT2*b2b8}^jAB)ERs*;wT(JK1q2n3$-Q_Qg73waONa>{6M!4U-%bIp;^TS7v%<^usreAC?)o`2sZtS&X z`}U+?v3eQy9NP_Pze_?Afg1WF16QtG>8MRh#vb1pQeIhE)qg1 z!%%?jfu~QOil&>?XF4h=D{G!Q^^9+eu<$W&5z{a0Hg4YBndmkZTXey$r}l((_So|x z@fNf6FDnE!+pzhSjvm#Jm%q7l=gxID_wV1gwS5bda2kxlI*c3}Xf3iz6$C~ZxQ?Ci4UxgmOUuegNMc>HQ%>RDy7LmN zdR8r47FJ%ao?Ji%O0DKYP-ACj7nNRYi3J7V2zKrF35iNdQmJ`u>67W-?!M7*?)+$;3kOvRJG5Rlor^+;LdF|8vY> z@<;gR&qq?umC1XTXF6VBT`P9vz^%m<-@+8mBv-Sf`Rz`swlMpi^pr2!DDNg7E2Q4J zSL&$$_I+$pgZE!sRBtdaXoz*y_x|zfTv!3On=W8S19OYu(V@Pr*7|GczVWs&ug_ew zz+`y;)vH(TGm8_WUlAPt+eLo~5q_nj3mFtufcFwT_H(7RsU)ymiXj?Z` zo8y*amH9_rYlFbUnQN{o1tykaPxkNMFW@4Kjf+@sR`WXEDx+I0YoaGZOLwH&G^9Nt zqel&IVg)<<)9PeXEvJVL1HX&Y0fiOMkFG_8IbP%^tcCTFU*h)XuEE)%jtZy2Zwf0o zIARd|%&_jXY9lW{!gP|@MFPrkH@1$7*hmKEl~JLgp+EM1;1IKj^7dYucfmY4?Lw>m zpO1rHIUe6N_4KBvrwhM)8U8*syHa{mF0_8($l1DK&mL{Cf=7HVV=aDWRS7{{ZjiRO@r!DR%q4VIZC4Cs*M zgxA+TJ<+?{g8mVE=f!C1b4iJoipqVg0{~IbO_nv!{QXx;O%0ZfH(q1AINJ9!R(g2i z=Phot@xgYbLx;X%2@VaG9Wx*9svd8ZnK|(%p!msdb9~OJ@ydc%=2hFW2EObqEH18) znf~MD?s1FTReRZ{BVT*!GEz?EGa=5j{VCv1yqH*}?|gK}jvYTz%>7J?A4j}@FPAk^ z@9b-`W|xV_2hX*UKz+e2TNFQi`lLMLGWzM5>$82=7(ZF1YK^7g6_{hVKeAn%Q@HXH ztP)muaLY`)zZ<=Umpk~8*UP~oxUsR({Q~FgOr{usK|U6<)Cn{1@9!sA**-DwYhtJ~ zGGLdf*}LnDKy9v>eD;4zfaTY>PUTY3pY=J3dQnKH{&^Ud1LenN*o*;8vHY93)ZU zAib-~QPgE(IR4dGo0r>USW&>vvq9T59>}kxdB3u4QF595Q!qZ-n=6u?Kr%D|5dKbeQ(_Z!^6YfJA=N(Xv7Kzch@Hw9f)ZCP!hB^^6OWXtjYeOjvpzp zWoeqrSFeu3TR3*9!R1oK0Q->382;7^VE<}7Fqae1Qkq*^V-ZA@^(KDZ6^;oHm-CVy zj{>O`z0{*CHP-CIA#pK^yiv!2-)WKtU@)wLAAr?6j6bxIp??2bf%k@3-RoX5H4rkR z4&?s*B}hpdXc!O;Kfye_|d7< zVBL_Ng^2YGJ4$o81879lV89crbj1+2X~%9wt7Tk}HMkBe?GQXZ`2!}RL;Cdtv*t%T)fPmh~-Bg1&6 z>x>8W4Gz}-b0)PW1?)`8bg6#qZNZu83fG>drsHR>TuKR9GiLt_!Na`l`B4OE*$BYE zcNNSZvOXIZpJ_10p}!JdrX$7<6pEiD>d`m@2h-1UpqWPqso zqYw8uW3OMI-#)QCPBsp_cWB1@2%XXtNq}G&CmUa z#AiSI?;wNa!fw`1xlWpv8g3=Vu4*a0>t)oBe*!Ng0`1JG%jQ$V|mf;}0IugHwL`PKuyA z_Dcux z5vq$<9qimA9uX074q2qThsVRbpI<=+9^Stnx`4|e^cPDef(pO1v_3%?M6jWTnQ1NH zB}oDD7pLA}Ue)pR7MFKoVj?3OR~+(9A>=qY;}wa^K}oPX&rOd00dqfo@!~5iDJZ#T?JO1v5v;86H;@*_DztQ}*NX@^W`h zcR-EGp+mQOvL~#L2JTT6(s>nCnZNYy|+)3mEs_gC3dAKt%L&%9E#5ZXZnvI^&^>5-hA9#bT6 zu_Fy`IfW&I?PZaLB`mAA%g&5fhFRvUSUa_hTY;BP|+gioZ1Kt|>AWH}9$X1h$3C+O|XOD^!@PJH=t zXK}zTh4Jk9NDyBjXlQhMK&Ke$sjF!@p?ktK$8`$4Zd@>X=1Ie(y!XW#%Tx`?O`7k!Zf#7<9#*Esp2)uJm|q0$u>Td7iJ5_OmENUupS(AUO8n|F^U!HUjy&{f zbI2iYs4ANj`$t9+{jCXzbib}K3+%M)%&fet5c`8qlM{QmWnN!eYp@SC9ihHTEQX56 z#2yu!l=Zrf?ENQ|jKXbxfSdyVdtW?HEmR;^jO^cix;*QFyIyRG6NkVWny35*xjInnJ2#43MtzNtKPAH7x+Rm8t-TP0xl z>9c1W{<-5;F)>X9Pn*tV4{|2zdd)JQoED(Y{v%i&bem%a~nT;jIxlN<}zq$vAc zqLfNWtVSFr^RSI=zIJ}|C!ZBuTnUJ20e`by(J6Uy#$(#EHA--FedHDtTUzo$#l(bo3IJn2f`UQVvin3X*>eDcQ4 zn*uU24PC0?y#{d)LPD%Z9bMwe*2yO%>+c^EJfpjO$r2u9MN`PgE9luI4dwV$1X(#H z)DZ>CXms?S=aSGyd5{vVYmBVwc-C>o`$*b`+RGF`(?lho*f|A%>lA5bZ?t{!;swVZ zn@~_xQ;0X_9snUW;qb?hEBE#y<9JsehIk4@ubCPn&`2q=6 z=lP?z9tj&HxXny7KvdZw!O^Ef@~qH(*Z6aZ&Jeno=!Me+Ffr9!S-pq`B4@wybbo)5 z$2(#i)YFn+$B|B-R2#17BXauVk{h>fbpo%>7YI>_5B&ThlajWxa!Uu!O>jpPa=QG2 zg4kED%8f@d9sWGyave4D@;!Ab$g1UwUHX{?hG~eCgh!^<+TJB%qNrKdvn;zgUoTE>CTX=a7+_`h- z$D8wEH9dd8fk4F_pOeSE+5cXmPKSE*1T;lSNr_J}Ouh|LJ&x9Q~88ExxTX zxJ;J(F^_rbC!ynJkN#q|tj|0#19%WQSIU=SS)++y{h-+7IQ|u~?&)Fw*)a(Zbi^hK zKvj}*8U&&|GD<^!=YIS4*PnT}QcQ|D@@#|hCG?s;*`*J$H=2vvcli@}84>V|si`0& z3IxH2v_1il2vr-KB%M^N_yoO-7;sMaJ9ku{h*^H-VkP%cVb;xbAX!^ERGwG%-8u*5 zolPk|D{ng-Aw7@SrZ>-XvjZmOI z=L#QgVPa-J4w8)!yxG9OK(Vx?$WH_KfeiD^nKS3AU!M7qaVe36FkrPHhfhYxv*)@7jZNhD|~!=D|AQXWptN`u(7pLvDp z=DtfAE)GFF$$JMi{@{PDG0fH-9FKAB{d+5lxrs$~cFL*Tci;bC7Z&~-rHbF?m7d8j zUlLUbvep(EnVermCdpg)`J;ZtLc}8P7wh~p$BMZ@MWtA5J{D{{fBxv&rJ5=#{EF$C z^$<8-ArZ_1;UsFqrencz5DE$#8Vs;rfK?%U(XU>qA3S&vJB6e|MBWRMbX3c`#a0E# ztw^^sPyPJAsNaye)hrtLxHuQ;aB-mcabz%QgnB`wa(~%t#vyVx6y)tAZUn9{EA{>P zbr4IU9fZCTuUr&Sn{4)FO|y~=MWs9<1)*BUYfx_6AcmFqw-k|7?ZD1myLQ>lOpSE1 zxs6^!R5LrYX>PoR2d!KdeS`p45q*5K<@cnwN&UyXorb%j6SK#a5DhrQZNrVy<~~cS zcw@Q1@bu|$qNoAr(|NPskqyhvD}NS(y;at1M8Gatn|5YF4J>|7kE{et17;Bjk{32IOV=qXGvMi7%GlU=Xt>7O zIdjq{e67`+eOtC{30(BIrZq`}knM*e#_ih+NuDYHUfdFwEBy57+rur#j|BalnLfsw z%W3)f`5mZ+WRG_U8b7yH1yl0%@d?8e`_F|#sF(r=xad$IdX50)aeL=`2q0{DGi6;n z=AN1=OVg#eP#_8j2mtc!HrYTgCohkDU2ryd{r%AKw8@2iNGeVLX7>rhqAd|Wp}JsK z>$I3oO->?5dKxm-Ws3D=nbP~hxvf`uc3*PbABS$$Q51r;iVH#)9Zb zK&eP!IxzQSx$e3@=te;ZVi8BMMpb-6ii(Rh-xcP_-Va7h@*Qt)Zvh#t99I`6*}3bNpL>l2 zOnlzF$)JqyCb61nRlosM8lc=)MNdp>Ba_%>kR8`l;8k_@0}xozJGpae$A8Kb{*^Hd z3}<#)H|&zd-m7<;aX~)Wj=b{xmd@_fhDzwWq7HqAdB5qYa^0Ef)b_@=*G#;wND%F# z@QbwJ@M=7eY`oEhH+`3_>@HER{hu~t^{6GA6c0j0>_iTqc6_8J+a-f!ibxOJkc3`J zv5ncwONE+Ph&_4s?AdZoPRn8br~{-zh+XU_Q-kP1N`1l3}>Na^mkZmK?6UN2s+8(X>8@*!xXw&g4l8Pv@5|lHZ6OadM z!xU-gH?_7#LbQxEEeR$#j{!@H3D3P9l^VxaxXO7 zpGY#S)&>%s@&q+xbYlh)XD0_ccc9ZI4b`eZxyFo-O9n4vsyR!q+q} z^)>E08YH2?EAR2ONH}LJRG+CCYcStRq+H7(C1AY??%kX5%aq*3a5;ICwO#qE3?6!U zc_AV@9ei8$>fG_Hp~{nHwQqK`aFdUvhGG%q7NcqI)T`AM;6w>jSN#!pE@ z-h?t#3`vGP^z~KrHuB1KIvEV&i&&6lpZ()eWbe$H!Qlq(|5!|K6>_w4o9{3)Jw;TU zlP`%tj<}e5nw~Oz2-s{#!F>B%q0;W*KWn0FXj=pLrPE;BQ^b$XZwlOY!S}7wKzg4@Y$j7`{!1vAqTZZ! z4LYwa0)TC=&XsMlpCNnDhMBxeNuF)nl!-2Pm4SJ%{P?kU)T;=UgA}|?YWTY``ExZd zsd^{z&wf7qSco)PR@KJ%85L#x-!j%Xb_wM|%R?!2xV)QO2md)dqq*P$Sr z+Wgn0qxo}qUJ}wp6fJwQ{~{4Bw(;L&`+pl#{{H|KWGeqZ!0hE>_@Y#t!9h3j@%c+J zcH9S{ek?_%UZwLpq~Ml?*pWS_o*Z3#E3faV$6($XW^6*mF9{f&VKAoHzw*;n(^GzQfqPEQb;EprFy;W%hgH$1am=KXF6^8s-mL!k(Zl8?t@pM#g4ls zD;QdDUD6mC2mTYhFmYHGmWVj;N|?b`t4;q6w^7omt7u4&yu;zW$SaijGWeJN#}srk z@XUUfqW)IF@VEcqjPtKymgVLSQF0TVC%p9U)nXzmyQ#}4)Df@&I>lfdCSHH9=pgEq z#qee_F~I>f-4z%Wq|f#yFPTd4UBle#bN8azjjde1T!1IH!E!gh+u&|-@e=@qZLOk~ zKh%jP3pZOLhrvmbXWoqW`>PKJs_N>VI;1RaZ6N%ge1E1^!HMe?H5Q_%qptpN{RwGl zX{X_8)1l;$sn7Q%=WdwWVSyF=b1+}*iSC|BV>hSMaZ3P|DsS zNC~9i*SL9l+gv11zdZJG{VV_h9W>IisI7v6kck)=wn#|)xc~X#!{rBT=VpM49e_R} z;>_rU-yS~b-1s*SFcvVlc%yOW>W^jIqjVC8UNr65N%wbuAF`lo5A^sq3*m-|a&f#Iw9(w?p;ng>9_EcMlk>E^GR;|N+G>jtlWR_FP{sRYAaB{{&zMMlz>Ml^E z4b{^2#0m{0W|NbbT~OajhjNNsFalY`$C8p`Vo!>XmH{A7*k=$I3Cs?n&a-m#$`-`o zxVX4dgIHUXpdpFuOU&$duXh>I(}VizUNYESqZQ&hj)LKsD_EY%`t|FTjvRqWQgY6+ zXTuB(%Fdq2$cKa|f`U3JVWN1c3aOLO868(0bz5Ete7~|n!h+=CMk-A3|sfai2&*G zHeSo>mj_YXsoLFenO8p|coQIo zCSGK4x%0@D>D&LW$<6#59b0C9t`@ieF_Ow%7)WB8Uy~#*M^Ooe3wS6>|K8j)y}3$) zrEtOA_;mN-ld?j&bAJmwv)8fzAun(_?XLOTF(;Y87sP1Y+~wrv@fU?9gD#~EP+8}s z|5HX@GBKM~$qK!jyO5cCDn(DJ6vfRgTgk;Nc#cpVl6lDr<^BE4RRTrjYFc||r-X9# znEU(O7(yk;h@v7;xq9gDA4Oj8tXZ)!fA;73duG3sJ7mL%v90|3{0TS6CA6uz34F7X zY>Tb5xpC_GE~n(_9czIwfUlw2E7m;b#h#@ zuozO@W~MpxYG84i`n4+OE2Kg7M1849ldZrPKJkqDe=4MzKOSn;4N&nf_5ahX_qsV| z-{jLc0FuPz&`1Z*by;-hZtMCusE?{LGh-#b-rnzweq)mF*I8*HINDygFlS4oEpTiW z%7u(`+`-`uB+KW(D>eyQ57ZV|EorBezI3i(3h(+B})VjWw@R2Cy$^^aG!NH4M z3rOX&V+owxfWg~Djqvt<25+sY^=3sU7*rs@@=M`yosg8WJYh$?J%!pOl8|5dcn_2; z=g$Z8l2EGe`2HfS%xh*^8|f4=ynsZl6$8hzQ?x6YeK{%M9)+8A;{{V%1aD5A z+TcY;*oqwu*6HCmlsIcXi<6nFGAarWf=2pdh<@dWuRyTzj(($rd&5|P2q@Y?hc0$Q zLi}yG$lnb)ts3aQ!x^bq3S$LJ(bg?nq8}n~dYIzcMBpMq8Kv6{B!u!nYy*qe?J?9g zvA2Isd@Hb7LO zd?MG;(M>Ds)j~ypYC-(i8m>Li#mS3;f=C>1XWPC$9Um)k(+_hd(_@`A^a%0*ks?t@ zC~C;*NW1$lSM*_TA`<*NKl#X;n9xk#B5bnJ1C)8woJ90j5Gqk}+?F+;51BXgN326* z-w<;+O^GZgHQIO$gL?ov-aIJvMAZB_Onu$yEg^iQ%)4jL_jc!ir*1Pf7onge7szs! zr(H00>HnmOCD<5&kc7nG;gcuk!~A6G%s!HU|3zQYFqb0s!;Xd=w-o7_p(=yfiWk<- zMbuU~>I7lT-(7dnhgiCyN@#RGCejVc^W{X3yC}R1ksgJB^KBB6kk-xN60`kjuz>2I zVR|vbpn@w{HZ+|Ns4Z7iz=gWRJapSb z*1oyw8hOx^+lPhe+ACuHpl6<|6=5v;_)!J5^kQOdEz$<5fN$J!Iav--2XzG~<5Q41ceFUGc=v|5%ZGZmL(hmW|h;ma*Uw)q)G|onFXT5c$9x{ z$dv1c8AAE;KYTDlrQ*X8<4|l}7;}wC?4xbO`a%BnXFrLbp(}0LH}ZIs+9y$`;lkW* zvfP*QkWIEu1u%!YWZK4{Z%`tM|Xdl7tQv z;xfd(BY6NV;{5EcXq?im$F#vA6^gEYrPF0hE0yO7k(+CCnQ&R^MDR1kA zYAWx^aSnDml6`pIzVL~-`A~3*g3W_mST<-bO3^OuB2q4~LjcE|x>Kq=+~Z!5SGafY zNz#j931sbf20M-*5)|OxTz1l^z~VUnO>JyqcFf0*hfo_A+_|&#V_WBVS8~ZKc=^wq zKJ74=4LEa~TYhtSsj%_)#ksbmDIjEeaC3KkR!v)*Ir$2y1(4eGkwJ`tPzwjPJZ4!% zcp7|A4w35L(+5il8j|>2P@0&nPDOFdAzyvLR|T5eSv)(DhhaM%1PS^iG~)0(!1Q5I zQ1KUBHS;4(PsFqaR3?t?uJgD9O`=3-FI7YuVu;3ulIA^k$#L;wZCr9avj;d7zkS@#2J0@9@mbO!q_&4;Hj% z6++R2?U$67=h4$k?GS?~uP~DI0+W0i53dNFWNiEW#9C8F=P}|~*YH^8#u9##lJjwM8;d!4n|4dO%#?(t&P?+l zo_;P76cj82L$w3G5YICPO3Z~|z@4$Ku2^I`8N+8pExza8AIqNT*{i4qu>2Uy;AmO% zT0>Tr_U_#~f=DpMM<2YqvTAZ5_VwI_=a6sUgQQm%mHC)(Ynb{pTtBoiV2fA9olI5k z&6&x@t-@=pbM!9N+4+(BIz;EkQXHAz5gsn~)QWRTU)C1XjQi?m;2KS&Q9QveXA$y( z-x8oRVY@P8oLoKI-9Tg|rjGmYQf}O|$=!{Udh>`BbwgwfK*BX(X8g>xU}fJ}Ylt~y z$Z?q4;vo0VCM>jwfY(rssPe_Az^OroneO+?fvF%sYVp=zWG3(^h!e#-C$a4zq!`xE6mr2chKhnJnP(MrU)q@y(k!WbX=SVC%PFa##uFA zD`l=1t+Vo^HL@OU6pf}t0oj02SzK!z)#ceu#Ue*SYC;lX8fhvpG6FzdmDqrqt;|&W zu@s{`#vruP`EApCHXod0`$7gD1ig2}bOeKX08}=An0jYLToD4(j4n5v^`5&(6HnG)>EWuWKo~B;O^Cyg)Wi{S$BV69 z!%*JkXef&cu(3oRBC&Q8&t7*!jsdYb+Myzww>vcq7o=C_w;4x_h`w5}Ok{&NF9&)K9Z zmti>#k>M)2$iZrqDOapr8w&y6%-{kVey|nVNtKMWVgNs}$u%b@;RGahbmE%M=t(CX znK{2qu@H}gE5p+xq=-(cM?m$6V=`0fu+V(<-gsD`=Xj8_rmss@00ah+Q|}jI%N2jh zxohW#nut|;`zF2gi;B1#P%d#=#`zN0D!ZT=y2+ubFD_J`%M+$3N4nquey$ePdhJtb z(Gz8TN&{zw^j4H*suhK13~7sAC=*Le;c7{FtEqomA)1zc<;uKySJ&mO%aJ*4vQbr) z(S%kt@W)?aJSbpfL`vifOXAo%egT22-_E|eWG;vQhL+OH;>qSwlOs7Z2W@O@JUcDw z(pO-)=VNQJuURvuG9rX8C`aa%$jo@4nSuoc!2L!>>nTHMCuhr^v%)TO3;&j>_Fe4! zFS(1o^_)4A{mi6+5e^I<85wTm26><)-%`xA&~}6={Ok~Qp+0f=no~z*{958p%7nRo z@s6c0#rQUF&MPX4Ej$cInz?!goKgJz{IciI??}+ka!1?Wg#%0Qw9gdYQ};VWgOnHS zTN1a*Q~nxu=ms&dl^|QgR$jNG^wVs9&O;ZWS{O&p^td2$kh?ik-PXQhOW6c;Q4|U|5IYKp6(MxP z9@3=OSD|H~5!>n6WaMTjBG+O6YeHe{a$87b7&9wtK2~9`M1l%GA;KIL zR;A&KkWv|maGW3bef0F{)1j|kJ*4A757al_#!Woxy&!8wSirLR634Lh=+RSp6-51g zetva^)P`qHO$f1VV8@swQ+29XNF8kZ-Euv11BKN=$^_NSTOm{CUSLELm!t6gW4AgPNKvpC1dkhvvXv z@NGJWyRNH)wDh#9^M&Etd7&F7laE9vEOK*mL!s}jh1h|_D&F0@S0N;A4>)3%9n6bi zsJay3wPev~)L=(N(fEjIh|9|8=;-fh7dB&&J-gM1*0}1^9DPV!zoLqt*G{z_6Y&1ndKDIEyq8Y03SN`2f&gf#3U4=zO@v{qqU1}X8O}#gu*km;e zBYxGsIZt1cYF&UWw*!pKIaOXxJ<-A0x#5yrOl*NT5sQuy;gX?(v=F8CY?teOM-<_CUPEX63 zJhM%NBju=BUAhJfuis#* zm$GseU8U~G^?!XE!aL(^ELHihU$L=HlTINWQo_Q*NYXxW+=jI=6q5=Q{tC?RO>{?m zsu!vhe9gu1-M<6XujO#QOM?|JVQ0UBLJ%*&?ZaN9r49}w zlFTZUo>W|T!mdr;fnCc$c7b^QiK}6Z{aQ1nG4Ns)^P<+|N3R8;brht?b^lRt`pc`{eD_6 znU5Vi#=63Hu3t}w2OMqoId=ciBh7Q1Z(%m*DO9p6%*&$(QGW-_|AP**9~qox^Tn)cZ@+x` zGUMK1zNLHi?&am-p#*&0!)7omx4HHOO^XFQcyI-c3*3MS1zA}Njt+M;bG@spaK^NQPpIo`tJL&MrX-^KQ;$i?H@C_XG-r}=jMiqjaN|K3a6pbE0DT6GJ_ z*U7x>82;r<`1K|uBMdnSc?h_4Y_P&4(I(PXoxB-`2GIE`X{_pA#$F*FuX&e_p3yLu zMptPpGc&mh%EJrC0TZCBY-E|n5AASV!@fI!gG+V!w?qS(vne__YhW=N66DeGnN{T59Tuob*kN9|m6BCba<}`@2VQ{k zu&2@$L;OQ`-Oh>&S9xT&`Gq0LQQ==sz-n@GvhRm^qLj^M^Jf$2+ghoapnC`XGtRD# z>wT4ec67MkzrV!6(QzMeV32#3Lc~;1Ht;pBmUP$-U!YN0I((;ZF19aS%q4jn9uGr+ ziCFwGId$&q*RS*N@y$mNSU@#5H*3?sMf*o1V!f}}N(__cLTD1z-;RTZF#6Ox_t7f5<^KxO)N2?M2+qZ91?3l3c7GSxx)u!zteNg7D>o>%( zNlHp?xA?vttbiqIG@@qd!VmfRM(E8t3yKyYOPn6VR!`Oi@+_=;pzS3yy$6x=XHyeS zIGI16`DT&E$N1$DhT;DH{o2~A%gsdLoJW^}X(d-twm>tyoRvm#JmcOmJ% zj#pS!?Re*Q#}m};!ay?p!AmF}DJf342gqZfxe}cA6&4!wm-RlMy6VKlslyA~+S?bU z=`O}=(apZRrYg}uK~o}zL~_^k7&ytce*5+%_@~?V?lDr}iYMsbVng%p*ujqV z2*kjW0b!oqimIOnIv?ci+4Gu&S8XdoZPj^+czqQrp<$BPd| zs6|znVZpBl;NcrKwzgN*qOZ$sFd8MV>NKwyGgTFT@)p?Z27dmw;M6T!w_ewby}`54 zf4k8<%rzZ_lm@|gKGg_E_j}A29R*j&dw856^e5`)`wD7(&2k=bu4G%Z=qtG4G(1FH4i*h z$<5Daz+&d#x>e4~Y8xzET|1X<7Z+dSCv5OK;fmtDWB6c%+FPKqva)hz>qCC`CG)TR zBpdkwYc(I0i5(A6yoG138xTW^n~&2${y@GkY|Oo~$8~ZKpz?})kf0DocE0%|I~Db6 zWd)e<4wKKT(elfHh2J8zD#2~MJ#q(fGI+z-nQpvW$%foWwX-yW87b^lutPdZO-=3o z93#j?XaC3I;`rqYrT@HNHf$AO7O*jp{UEzq^m3316eIfj`(M_GG-5*-!mD=Z@Zmh1 zf??{%)%Nqm^BE<+rRII)O~}1A^`UHVfC}PmiBw`qQPF`AX_xy!L7wRMAWuIEHBm)f zeLi&-Zn2@)2!e0nw56la&0X1qgD-BoyT2p!7WQhw--BBx#yb;tpa7hS#?IFc4svoA zZvp!NVutA2l+E|s^GMbPJ!pIEyR;)@w1A@$H^=*paaRlk|^lIv(M9 z5c*zM-G;hrLucMjSL>%({&=+r=D&AH@Vo1nq+;A#gXm8el9$K2-;+KU9I6R)1w8q6 zXCWgH^&4Uu60mRe@si6KX{Xs(sOSXf$J%+hV3KI3S7(}!p{?t2iFmO?>$;msa@wzw z-%cwSmHoHVNjVR{KP;Sex>qwQy=UPRK+cf!gwuq?%`4=7UdoSyg1{9=6w(LKXZj5k zSz>0R(56j{A(#6X;l1>To5^kRS-)q`Y81~Dpj1&*b#)rm_t9&_%PclH-v7uZ3a|+# zTA}7sbuGs1Dc2+j`9wMM!iBOIFNz>TrlYhHCU1r*xP1uN75U=yr=?&oJd%=`r4m>5 z_4Vy44U7{nbvrFSVzR4Ns@7=d6C;rTqn!bNq72xZn`&=@tm~J$AovR97D^Tg!=#7_5(<<6*0yMdzOB1l!9P*?*c9hVa5N1vD7GKut~u@&zM3KpPs zx$Q@aAVg;m94#Olt^OlJ6g=(a`g2E1-=o}Mh=46-`SB5KoqFe{xKD139Eu1QQn>j- zKQD2?TA2kH`+`n!*DPqop+GNx@e7+Mo{bwB{stt-#GZkHfl6!dN&;oajZXDeJ~ZLt(j_4l_oM)R(;Q9~X8uF%Ac1F{M>5N*!e6k6234cy2F=6=xj<7NX2U zkFp{SC(j^3s;4CkmprhP{lU~f%;|$C zJ=OgCw@wv%AjWqOO@mvObk%3=4GaqEuCvcNbz-1IeMj}~o$uE&Gro@B^QFtntReEw zmhYE_1(=iuzkalKJK}qLUii|dr=$vMG7};ybf@^5-<><6)tTZo znZaz4xEq7neFT<5f&lNm0>8?Jty@2@w;$g`)Ue}CluCqJ-G~^Biv>s=8_|XCb6leo z2(q9@f`u|mc?>y0mA<8?=N`!`Q6iPiPxpT$yM5cX#fa4oT`vj*EVuTDrZjR8ix62F zP>Uh@VVte4ypodZ5WLxR)ALwz&!%%yI%3n?Pd;aS@eqYw@zfxzJbe3qA%imx}9Kctwr)mBjZ-ER#pc`gd`bOH*=*v~#0~;kLmea^(&vSHqOl1H#Ft#72RzGP~V|5{z0G* zd-ZBLXC2oH?H%KTUplwqs3(NWw|$9=rH0Cnw^hWh zLIdmdz`%7-9&AORrm9M*cAk8?V&%$TzzNtqUz|AV`jKbDhLa%9ZB>cf$WlzDa4^^o z!~sKObA&SklCb_uV>ARahA)!?cX$C=aGIrero+*P-hT>Y?t7{=w+P44h)x`0c8zG8 z25wWLxY`0wdHMid{rC~>Y_{W;QJD#WDm$d!bhPT|>aK&>>V?r&op8HYgPO;Alop7} z1$FzHpWiBVffam97gaGL6Sg%>;i7b;7k=-jCw%BW+1&|3HJh4Fx6=isdn25&gr10r&$~*% z8R-Fu2hW~8>zn#wYsU;sddRhw7GJyC__Kvo^?6iF&mFEh04RZkC*|o*LjqzJ-)T@a znn0egOQAsCJ8C8qhiPmAv7%@=Ee%Oh-8L8XDjWm!70iBgVj}PKPLjF+e3ssMUmuTc zr@EqpkMi*JjPEYPlB-yRbc_Y*AhL7@3dF;lXA}TOLd7h8GFa>Y`+MhL_!KZmY5kfh=?qo1I=)|fd_EP1xnZzZfcc6z1YsQ zA;yD4lnG9m0#rVFPDWy^5PUWuiH5iIN(1tw_-FeM8UEIBYqk-y`c6YN@OyYA3}i%# zY5$IPH4C)~Bd}Tq=ubJF4v^)D(k;VfVknn8@(n{uw#%OYhJc)k4^5TEWDCx9qh{O@EKTCzhrQlWdvsw{9&!{sjex zm8f^Sb}hq#^_AB^6nkJCHMAv{y6@w24cWL6Y8pg=k%l`+A?5-;pNVQJQfh5fWs4`U zwPRRuBmhYeP&H(ra9YJ{tF8U0CqrhSLoVc7xpZ)NINQ1ya?r%Rd2u~f`DCk}Z({t6 zB0*sxv@5U7%(W^^n{2kY+44D$biG9_!BVpq=%AfsNJrF=jt(YkYikk9ALS-PvE--$ zOtdU)k`YZL<4RHJR6`O08TF@GVgty!1;{ChW4yfdJv}|xJWCEfSbLSMuKN;e=n&1# zFC#$o4Gy9lyg9A_#yRGFOL!K}d!=I;F@gO2L?RB+<440*F)K>AJF~}ruSM7Q%WXQF z5lO^TbUa~i`H9NxdsrTD#K27=RT6A{ZMhbbF#FP_S23?Y5hC+I?RsO_xw!5j!{8XP z#qo^u85rnRbgp^i`{DQEUZ8S%=V}&yp)FTX78Lgfe(sAb zs}9%1;V*sY`qq#@cZ%eba#wBGUq)eqxZ++c16U@KW5!@VKeV#@$VIQcg`Z=;ZiYQs zTZnn<7!JwFHOqEvrQ{AaLL=GT*#LvuP3&jJs3+kBWh6+A4R$kRl%b*2o05wVKTchSz<|ZP9s&o=U6lsvJ@2#by!-2v zG)*==R666?N$?U#kg6zj^38>#c_L1@~B}rByZ2 zBdd(G&@NVawkqu;f;G5$=jnwwjBlR0N96?CrFWo)-c^?|l2AiT25yGMU_XY)|1100 zC_io2g)%R+IIBQMz3t~Ku!i(*f!I;6Y7R`)7TBSOyy5Is_Ri#w70 z`)Q91&a#6>99OzH3Pl+KpM4Q(VYPv5Hfxud$)e-hb7mrECV65|C+yp86y8cDx~sU3 zY+8ncP!{5d3Y@fCZeoXeA65gLt}6Qai+9~($6^v^IcIObO;W0JCe^C~VV;>1bIwdr zEvc?vgR?Z>LeIBQ^NC8oD8Xql=A^y_^`^u`))d3mt`Jh;#4 zKx;VsE!p%KqFkPdlr)pV!Wor6GhNuWxAYSe&kJGVKrGDlFhFdh)t(;&=w%gLrOy0Q z6Epufv}fMex8cwAZQC}pbc#+o$*JccE}^vBlzXMO5jg=)StLZBQ{tkmgTo$*XUmpF zI6UG#j(h3DxhbTs4}8VzU6J#qwY4>`I-fzu)bwG%#wGK=-ShH@+R1HTKvcv0{FbLZ zBZ$bPCh|WjdlPUf+wOh%CNwFUgpejFDP<~^p;BoOqC$oywjqt?X_unmDUBM49my0b zq|D`MlqpllR7r-SGLPT6wtC*@{e8dhfBZj3$NTn(z3+YB*R`&-&ULQy#JLrlR2_{o zeb#GHhN^cI(RLtR0|c;th}kKd>43fVX7Hbj@uQ$0_Oh{Mvyp9r+RJubbpf111J z*NZ@hWCR69(76X%0LrRa096q+jwALn(%Afn&}|(Z+Q@7Vf>^nsD|u68s@H&;S5L=^ zE4q2zGd}abomL>_E%|=D%w;jFtdx1D_9aSRjNK8u)w^%;l%mWP=Orh(Ju{N`OI}@na85G$^a#gtZ)R@P?tX0*Em54O2szRv84K<&GGdv`-zpf*{CRkIv{VV; z{9Vb=#te1S73OSoH^Z-v?rk91VjPBZS~mz z`MPh-BlYiQJsGtdBFxP}#A6u|mr^_R z18Km6s-H*~`H5UWGW69PKFSwHb1z0fQ9!{#?$j=+5w69%wOY8hPoObi)kAbK`>E^l7m+-hzlkEna?O0JWec2n| z>8cJN*nxqjvBi0>Uu$6v$({5JSR}GW|FZ!PqQ&?V)T!4WVJYSsR>+dR{2Do|AU5~p z$&&#aVnBNt6u9r%ft@xfF90LoUEW7+M9cW|H}fgx}!BCIU>4#!NI|@a&j?;`8ca?vv)4^Gn{{N%}gFX9+_F$8i#jMDg0)N98iwY zP_9jl(}1i`RklV#`CpiT%KKh7o%u_2F)ye!NfQUdBO*S5rEt}0`=h@Gj{t+;xzL*7 z9xtK{(jR4ofD43dFTA!ocAIJ0K*G)gVvAWlip;@}i%LfR4o{FX@J)@I24!S3x0K7$ zqsE`Rw{SbW@u|P!e{j1j?OTFj*TYIIr5R@p*Z9 zKsP(>vCU5nvWJ-#CDV>eTS7&M_6+)acCAk0w~)itA&msdX><4|WZFQM(GBrk8+L5X z%(|(9|2%yh|8k+SGu73l0INRiyXk%IHHy9m5aLBUDB|5A{mHit=hva>g62o0;e6ep zIfyt49@YSFu$Rz8Mo$WC%Y>^ACt;QE1zaJy&{ zg51YGGuoNEzFttS5gdFT5x*86A;H;nTprpQ3J}NYhdjm8qAeO`jcOZ(V~QH7d51-c zZF7DQ*zI9W4`;fVhZ7LTYpphO^w%Hy@sZy>xrk%@Y%cnsn?lqjJ$u`q;^CpYC<-1* zcJ;RschHSp>P}9jcfh&MMO8Zjs$Sf>b!&pKFd+)hN=mK{U+U!HOP#h1sm$Yxfk-+{ zKK_z7ZK=}ru`YKlEh?IXyZxNnxkg(XNA9k_PffV$)c0JnF6Qjnu>?p=p3H}T1-di*@$?MbRWnZonU`6qNK?EG00O%2P|+Hc!?@ z8w~%@>^mK-1po-w9IG^ZtMIwbpZ)zd9#00w;wJ>fSJ3v~;^d!ID(`L0>=?OV1_uEM z#0!KA!Zfi=F!noHL?rayJwfnf@CQ-XDxti3|8ga;>NK|J7~0L9JC{;=)qa#sNxFUe zsMq%SJ$I{5D9;MW^wq@jG>nb@_XmhDa-J2mf9 z_k*w!$T)s?S=rFvU#FTU+Ie?GNiiSNj7M$n2wNEzk}tN+zd5+2|xwBnK>o2&f<`SUTZY$-bT;xy!GmqBPdUS&RLcdv!zX)~Ij;u|yMj z$kfz*{>+zT0_3stRoI}!K!<Iuj!lV$Gs z%^k&y(~2PL>0awK4c_VO%=D53WVjk!=Jd)Vvcqwlnz85~gQ7 zJLr4wm;CXvF@x@szh&IhAh07Pyxy$grZcZ5T<5tmZL_Sr>a%@$8uu+VP5T`!m*Znz z=h;!MiyU+Wd%5VjwTXfbzIEAQ3cb(YXw|%)G*{us3%SP^+{C;F2c4P=3yuH3)0Znt zM(>?CLCEb3#;o`#kfFd+fU=gL*b+X(+bLn?-Br#;$f>|zCjMhfMbg-f0SmNH+$f-R z*A5)$U9lylG9iyyBME&OC(-?V`QE|7<%6yD*9vd%iP&)M+KY33I7BnvKPsu-ui}DY zSaj(@=|S}8Ki+b#)^c-G0~pAMVN2vdzTRD+O5857t!rrT1BCtwIqOTPm-@tK4vIq@ zT?^X8>88m2Ld8GMoxy!B?;pBO0s-^vwpgjmX0<0f&s&cadRm$rxY#bwqUD{%9$~Ok zYP^ReLFhUe7#NsdX(PPT%txo}|`2+K*NWCg> z0E#rMio|({xF;Y0kp9krdx&=14oLPPyQhXL&UBC{&s3;O;>J%<<^{TqqtUW^yI-(d z)4cYklCg+%t8{h8nLodlW@wI+ez zP~|S6?jcHe8_Jym)L9sTEv?><8gPQXWX0oM*(-p14%LQGid^Q!Oq9R zAU!`rYD3S69xwVW#7luxz9R7!|6Bq34Nt*beE>{me!PZz=K^3fi_t$3zh#YXd z-ZjU~^z@qJV7x6{f~;~)@u{GtUV@lr?{x4Pv;^1a71Dkin|UBl5XgYj~@Zd?KSo^BpgF2J+0W{@h#0XNn$G zyOmza(ZIIX1XzsV2o1|a-zt=eytFp#q8$$w+%n5*L|A*!}y$$XO`o1w9@b zBgN&TvWUu$gx1kfjdqExCh(HS4^E7@v>}`TMh1CDDDD%c)=}OC3E<9r*0f#82!hs5 zgidf5C}cm{!X+&F(JS_bVXugYEN?DT*=5Wtok(V_si=Kt! zo3Zb7G5&KfitkPj3Yw-8wP)989{Z$OvdzjZZp^`7Rx@^%Tn)(w*9QywfL;+I&&CJV z`BLze5~TS8tb5#1HOsczr|fgycayZ^%d$Zziga0sV+_5Z>LcSc*Le^8!_2jd>}Yu; zK*`tyeaD{eUixrgwRAc>rv~mBFyw#%*T*#j0mezX=URpohV2)lqkHTOQ(&pUL7F7s zb8Hrag(-0=QN|_|v>+6Ai6*g|10P=1=(K9Sc>W(k?6?QPetvhW7A|* zVRlD@A!=31GQ=e4OgJ5!#nguog>ZwYHE6_L3%PQf2k+E-u}(YPLri?#Af^(vB!`YavckheJ{u?e78zOHti}h-=0VIa~|=9u7gsuT`nZRe31I zcVGnJ(YAczO2hl?S+6tDc4Re%^O4(#QO&*Vg7~@I>A*w20rdD263Az0AA=dBe-+$_W2guAT3I1uSPN4a$*GIX z*H~I|II(8=^53#}Ib|P97HDO6L}uZmdp|WVZRpo;l_3PYjSY zv{;JW4jirgzrZ1mW7M%MaXsKN#6GAd*$2kiu3vcV6SBJ?H&o5%4A8|x2l+IPPH8#0 zu{au$Gp@pu4zFCcd^sI1IF(>iB>t9pb57<;z_hw04byihaO4No?n`cxQGClR2oZg2 zbtFu(e2+@tk0SrmOFf$=>xSsQh`KWyTwJ6;-N(AVp_LE3b%Kc0`GNw4M4_>(%jO2# zCu-y@PfyyrI6!`&=C4bVI+;)ZjhPM?9RVQ$g{;2;KQ2aN5EG|jAe}!j9Xj_E{ly3F zT@EWSM1S@C*yGH}RXk{_CxXX^nVo}9PQGhqJ}`~P2RW)5$j6QpU51X7RhN(j^1b6& z^Ps2Lm#HI+HoZeH>o}q}!Ri1YRv8*jUVC2RG@2nbzto4*#rq3yJZ0Jjy;iylT%MaQ z7;bPH60ks`jE79k5KLAX7+mTI1<9fCWk~40W|fl1&e`pymsB6vHwIokZ#0)t3d|)O zH81Z4R?mLPZxz6JQ&*h#ZNi7RuI{PErv-G}CA=ABHPYR{z-j0T|G*~8&d&B(&S0l3 zlMdu(Glb4i!c7Cuu^ZH{fTCUpMZfnD5;x03qHA~!VQAkt5b^GxZ^w+9=N&geCPs#F zvC~;V*%rv%b(nlkF#d)Ox(hTbQFRZ#!JjWYG=;@W@*hRF36%&kJXw2}+(t=^oRZRV zN~p0|K4Eee7Y38S0ACq^n4rLq$qQb27B?_8pmYKs53)da4&y4I&Pp6mbO3jO^$C_VjaT6I`vE2Wbun8b`ld7^ znO&h3rB@63kIJ|qh6An;5>%x%`kHH!7b;w71`8ZX%C78ImgKwiXPJJx{;yCc`%?GS zd%zz@VuMP6AU===vHXv32!Dnad9>ir-X&rHQ~;>4;YLA}{M&j8{e-FM8JJF8fs>E& zTaZ3_Z{Pj9_-}j=a)6P5+M;eAKAPb*ukN~$&FgVDGyrDRVcL8(8VcX4Onk}~CrZ*x z3zQs7np~-R18aHK$JcY)a-BzV45Ov5<;*y<+ecyo>ug*8DzNpH#JhWXjD4c;qaasI zrJvX^3bvrs?#gLahGSz(u?F6n|);-Ba92F3op+ZGrxm@s9^NlXtOfe!`p77s60a>Z&NiXJ|Czy+Dx_12hhn z{xtg?n+fPE-oTtXbCC_5do3#~tJwX54{b~4!{2F|v3yn5 z$QAtj|33h|bB#To8UY3QKNGI3pN;JbA_3t0wjV!^A)NzeavQCZs~eVmyGBsLf6wx9 z4ARk4+J)g_nhC;9rTJ3|;ox$)MpjH+xRbjQvGFJ2;XXw!0`SZBgT?0ie;BtbZPP(c zuxzbfNy9MER%wGM3h4Ib=^9$h;Uf;5CxPNax~b>ABh2Ct<@Vl<->R-Ozka1^Kk&U# zW5%q)t(q@s0i=LPu8ljqyws`aL}Q4KTZ+XQ{XaL-KnqyJZ+da=p#88~C$IJKg^PX` zIf;*L^+Mk-I2Ltt)<=oF!g%%`3!}a-bF{VF4*z5uPM&cl*?D)IL#K^#m@ZZ@h5+_1 zSshlmYBK-tjuFVKsCfLITHZfD>RueGDaPe%{_T$2!65b-&QH<}57@8|91=)v`r(WM zvI=x~mVa-IP<;Ns>JRhS^GqUcyh~S=GZE`%A#$POTYwfhBpPtS>Y+zyvWOvaYdWHl z1Vlf4F~tQg3T8n+9o%{wVOt7kQT*}OdsiXZn?3P#dS%b_gnfL%_q+19XvR6N(mE}5 za-YD5`HGqcl%BGd)a@F%u?k2kgOl~4PGFK*YfJKwX7$Qv%gzFo!{bOVQC|m!0j7+{ zGfPpnj?l;fIGnxH;MBrk@uOunoF8LO#3WCjy~Oq0I-ZL9p_fCznDRWEM?L#?(Hl2V zFK3S4hB+5DK0hPec3z)d;?f;3!9KZ6;3$Hz@7c4HfT&=&%}xnQ=0h@!X2g-WPS2)| z>CtN$kttQjH^~5@NOt_&!c*$>25ht)qpgP>3%gi_8Vl4#VWCd$Pgla>46wt*!)ak}aHeXruS??$mHqPO;^xCr|kWWNFMBZXvZF5O zXoDFYSwE3A#entMAoBCXSKqIT^xyw3*!x}L$IGZpqXa&WfCa^7;2Qf9+efH zh(RX^i9alBZ;7>a6;h}P`g`*~%vpPwJ41gnuvaTYB+ zK4`V@v$}b~yr3CZbHwe1XN}>Vjf`v)ueP?Z?ByNDGuMqBI{5OH3Ugk$DFACP^89;w z?ug*aBktmN88L@NEsG}b%iggP-6V5;Q*w5uuR80^617&Z@5=m37cZUwp$H%1D}zc9 zXTa<*1KF!oe65evK5f-w?@SBU^CWGkmR2>tf5LsDK5fG(2SyeqkH~6@r@r}`HO_me zkGW>sab*N$trLbbvsg>A_fDMF{Wx<7`i)u8-;omKErs0jYyc|Y6=*4l-(DnlGUM^6 zF;DsCp5!yI$sQOrml4+H!RsSvo~)cTA|`c^MtUYx#nySb5z@SF_YH@6HxI;Ll$j!L z7isi?bIeZx7rK7K2DdxReTWfJH?0kW`KW*DP^URpt(|!h&_hdxBaNJ*f`Sv8tfig&S(D27k4_yoi3zba9piED%iKGCGey}I>R1}vjUG93KG;EuEmSSFYY zt!QH-0sJN)#Pj;i8v`6q;jKc^kx^0lM*G4SEU`^~@yIsf>an4&k&1pi48!W-%9!|6 ze2k6(pHSW+BkgHxVIJL^UYB}7rA)BHPJ`OpkLCu5dzk+vSeWMk@h}W8(oC+;d0M~XPhLOD( zyf8?bW&n(_?P$>h*}wbC%FO*+lA2flWAOeWz(sF@_|JtBTO(K39^ew-usO=8J#2r^I6(b0QFeL*;+!R`*|no9YvL!R4JnGS7S zK&z7>EQ4h}AI4)qv9EAnWXbT0EcMhj$48tpapKHtIpG*CYyzz^Ixc` z(V?L;VK*K1@Sy<)E~oC~b33a6{X>kT+%2wDby7t>6i`M2n;5&iyc`a1Wnh9{y>@MT-@_dXpxYSh z3Huo`%tX6E(a!Mq&p#hy%j1Gx2ia+(K-!8#o-8n{oGSO9Ie$JNr``Y_CbQ}JpeYWY zly_K*?Po3eSE1=ecFXj`a4s8p#QvWb+`zK~##ZQ|*rFOB-9dn!I zN)s>_N-?1N*(voZ?EL_4vrx*rLGA_}f04g_V3**FEh1N&&ji665~>%GWbTd3*8ux) zSx%E_ivWYvP8@7_^FFm0hY*sD2yel9nLI(!z2inB;(}$ch6p6yCepLoBZ3o9r9hbEXHKv!OVyI(sX?< zI5~>{xA9RAjE|s)hLJPKE4JmY@w$N90;V5g+iy2PXd=$H)6%-Qg$KBMF_M4*l?$0^ zQ1G-~Irct>vp!=m?T>PI%)56>u($i<pok#5e0ksT8kkiaz?r#o%gPSJuSZ*)W=RAB)Ch0pUPMQ|(Q$l;EAIgShd} z%NKc=^RSXtGgjNT{2IFHb}qY)Ls14_nt@-6#%P{>{_almamP`khF`9rw8xNn@!|yn z`-bs;VftnK&B7NDd_Y6}uj>)1MM;4B-*Z4*0|I=1f(2gl*O)Bq8Ztc^{$=#M|HO|( z8}(Rbla5XyCWuPE(z~vQGAib{r+G^Le*4M3yAa?KUPfj|OkqQc$PKlFBgPz6no=w! zd6$4xftnLH_4l4>_$c3#cG6;XI1b<_&)0sd9X;!|^1O%41>|3qdZjPmei#@VM}hZ1 zabbLS`tSGYy=C4h<~zgx<<)j6`u{6jx2!fv! zW&nW6&6uIJEyf6|37OQR$%0BDW3zA~H7EyY5kIAv_`@9_Ncjzx2qq#IM9YgG&t zvhr`86-yK@#PE17WPr1f?-Qa>Lb=3aXjhD{g60k`c=523Im0AsR?BBpe~gC@BqSyt zgQ62o@9zz>6x*DPUIa>HPEepEBQJ=KUHagVj9#%a5**4pX-iOl^{i&A$S&_+PoU*# z9qhUmtV{5{gEc;SIMI_0H2(ce9=haY(m7{jWK;L-B*k{jd)@}Trn0OIp?%IAZ4~M- zdkr9edW(Uk?KjmNqmgGwj9;g@K{L~S$@sBji@;592Zgt9R^D9fGPkCv2ysW*(Zlb+ zDSFh8-;c(5Ll)71v7<0U^C9AA>n3!?dI69*Ryme6!gBInI-c%kpSfdHucjmJ+)~r- zlQ@d@OXEw8U=Cba$@FMZw(>SCU%-^%P`r(;Zk;-Lvd$$7uRqGucF_n?nV(&hyF&iU zTEJvObz{ASk;KB&(!k2*?lV-Bx@17UOu_-X=8IRopk>9%aSr)^xhRlyqj{aD^S5P&cx= zrf{I277%}rK<_C&DWThL`Tgf@T{l!^WUpiXyp$x>TW|L#B7VON_SL0A(Z-T*|XB69z@X z8!H_GX_iJ#RdqX=iem1p1MK>ZmoU>9KYg&xPaLLFXaN@AUOh5l9T^QSy#Df&KA3`Z z7vS!QWiG?1^vbUX7pV+f0n*FFPJvu&$i^)86!xW~4Y!<|;!?lA!=UDfONjVxz}JRs z+irL>?0^O&5R|aAqqk>-(-Hf-6!SVt81fzXx=zCYc_i$qB9_4%9n*dsloqx~yVO8l z#&8qHos`ItX!0>!7OOKYf8a=J)lCiW48&PwoZefl$yt>q%g`U$tQ)ZvMg|eFSv>O0 z9IhlUM9AAA-y*wsap9sH$o0qv3b0iiP=MY!lNigmrY75T%(dNI?i_~+oTJEqP@5T( zb$p9crust>o{v9V+F^ygk$U)8UQ`;8Pjdm3goP7d9>--d=jy9^`;ar+kYY9VU9ObQ zrQ)!4LY`=!(kbUEcfU38R6amXv5E(K{DA7;K`X!pBUhW%-n{?x-r4oxh)})7*xgAc9hXD;*8pfJ0aXfjcw6C zLb2`rzw&eH4)X0e%4jmQWw)C-UL^-Sm@U{M0`_8G9)-)p&&*%)knSo1%`XaV)y9ya z{s@EyFABmaAj!?K{1Y9BNrKsWSc5cp_N^+l>_F=Fff+E2!NlZks)leeA!D-G2Y4LT z>*}5du1k24+FZd6(MK-rv9(3GdRL6hNbv<9!}khfXfbf{>!LakUU8v7<*w}yjWxvU zL!2=b+z12A04E{ingA(R?ai%F2jg1!4Z`(fEb!AUG^`zoSOfs&uqYXvv_D zi<0i*%ENB~`!1Ye(8%RX9f*r6GX9K-{a%JFA(e-+dm=TP$4$eYxNCVQy z8O2G^GdcZstI6gY{RP@60k z(u}kv(j6tQeizVO*FckRJ1lU@XWhQ>}4xr4DjyUwMoFJ5gv)4!rdE5WQuN5N_#=p)n9z7TMKEXuvVBbw!X7d3+e8Tk@b z7lq0ypjjplcAqT&#NqFuTnc^FMtTAG!a|K1zZ`pImuPfc+%{L&C+M{x73>eVb@S$Y z)c1gry5);(lcJG20s4R`+c|R{S~P7j6qQh{HG$^>F44@0BAd?jEG_H=hsSjSDBju>RFyz{|*H717){1@KJLgUb^_sFV>J* ze(-AdgM%nXvUVa7Y$^;RizQlJSRrzUDK)8oa}{o~>=fr#2d-2-Yfgm;&npO7v-9!X zB0wkk3e`46_sNM%=;;HB?7%r%(xQ(`1M)ismlgt*4+CI;ML2zvprA^xO{Vi3C^92U zM}+$Qd^J7gm~@K+x@mF)JMi!nN;08}3dARp9w@Bn%wQG5kqWQC70d0Ain5d{iw7+A3R@_&f#N&vw z#};`E#(IZS@x;TqxB1$;1i3$4iGYt226&WJr!1=;VcSq&|2C#wZgNeC3qF#+%1uZa zJHjuAGL`Z$&Q;nr0G*$!SmHMDoxBmlj5u@vSE_lLaw1A#G53sGJ~jv^4W{NJksU)-@}yrweA~S0Bx z$p2gBs1)SFsG?zZh^J7oG+Uu5t$)DFd+hs%=gUQVnfS9m768%U+g|~BxdW|2|8fN~S!aHKOp0c81d6LnIR=T= zHE?r`^l~&70g%Q!H9>Svus5BD6T9S7`4m>=y;63F1>KDGG6O@mG^>hsch7T$do0Ym ziou8JpHQ|Jlhwt545%>Q+Q6_&zdy`bScDTJ7OD)_S8h0~c=W5@lbs7=Ei$WH^i6`m z_ufHc=<`C58q`k8RzTJmi#7w!-CG@f;pLeJf_v-%(S!m-L0R(JAz8Jz{FqmdXgU@m zs4|M_@H0mZ)r5d|nZoa6hE)Q5{2t&3$mdsF$C5}`hbv}GBr+$nv2@8@UL&-BHwHFt z!lWD+gJw)Alnmd9@|mF~$MG<8*c-@Xa%wyexkw zYS#p)lwCn%1n&YXl3t~$495#hu~MS3cZ#z1pf7L~!XCr+6ejZ$k_X*f8(1ydYJ9tQ zG7E7!L$s}PUbccD>Ecy1ykyHloIo0WiRX!_3HC8 zFnzEuMj7S$OzQqza7Z$<$n?=B9EffCN?w%80_6Ju*IZ5s5NhN$D@F=y?Gg1w z@4}e7GuW(!F+;iy@izd$foY6k#&a-m?K`{p^ljGKw-*Ur2Nk{#K55@0 zUNcNYYEyK~Y#n4?N;o|xRA-jrG#oa+(LDQcE6-!ZtPr800dg~AFrjh{% zc;`kDh7*TP2?x?Pt+B^taIRw%I|aHL!x$_}-@~>7_XO7Pb-#qstRwf`{QNTLzI0%E zKN`LP=hWK6)Q8>bI$YHm%>krB5qSNWhYu0J3*LzN-Ub2rE6~SbGds@nA5R#;v19Fu zmC2%~&g42pHOx82p zqft|?SVD;T@$;p<`c$@4YPx&!n6@-KTBto-obku*baP8VTJDhgP38CL8}uT{*?Q?fd-d3Q`Jps2?1Hd8 znlI}iKOKc+v!g9rs2P>ivgV4v|6XJ9f}iQWfi~gw#e1#<2QSQ4xY?f1U%M&|KF#8) z4naE?UK_@A<4c) z9)Q%99=37`Msw^!dKx@sYH!5w1>%Gw7i(TX@|!7%L7C=E0o=;pXWLh>o3G(4!!sXV z6p^369#(WeG4|sT9v3L7t)0R)Kae@_2-3KbISW%akx5kk+`-ZaIKpsW6s;$4NDK45 z2aiyJ3`>{`Nb;vFJNoqk)lh^tqRBSwVp_Zy?Sq7MkEPXPSN_3uBkj^+`f$3pBg4LB zG}vR;5i%RkP!8Hn2VAjtHV3aT28QT*wx@lp{7Z6{(Rl~E3HRU6Zvl1@o*0}&IQnHS zAv`EQ)~&>AS;zMOYS@s4i5NL~`CRTRAps^GtX@1(Y%e5(tT}*C?*f6cK|P)V!W%M9 z#6H%81wB0{*GA|TZXOTy5U;!%B4 z$_6u;Bnu?dmuC0;{1tqjn;EC2xRUQTlJP|6R&#V<$L9TVS@Et*J5=LBnc7cGgx$dn z-e%$1ah1T&%xZ&w8_LXz@A-^fHeNE+(A+!@c%PWBzPp3=kv)K*AMAil<2~>UffE@o z2pF4@fukuIXc0Qbf2+-@?6I#-d*T$>+Bmo0Z75yijfM{9#0i(Ky|w@ic~?|~jG*nHB|SZV8b@z^ip(}NYq4_qb}FNC!Z%0Lc@Ld>}@DJ(UVL*J%#3cYo?5t3pUy*!|=LEZiy{?mHWo-f2QGH9`cdJz^^>6`!9&f&uv}e*I;Y z7i2SB6ol{KdC!N!3$ro-M6E^BYBmBUT0WCuzJ8r+l~yw}U_o}FP_kHpk1348EUnt( z*JgmgX53!&sFW|D_gE$d@iG5G?}vKp1*m>HKx|TOnrwroz z`=H^=X*)f1^LcdEXc-d1ORigg5Z-ZAEC3Engya{V;ARL0sJhQqT1{{a4rF=^khUYw ztCov+vw}CuhD@~BRd&QRkKEm3+Zr+Kqy#lhIGgq^PtkHnHpO+T;+`leqALNjB0c!j z5GezI|NEAU1#cx_ssuX8CHUYVca)`dWSR2i{*?DMifE^B8=GIL>j{%EsZ-r*gu6mO z#;zpVh;lm455i3G7Ta;`h=ZR3tZ)zNT^X#nt3g5c0LoH>3?(lY%wQ5X@XP}eiA6*Z z3dT}IBTZSrcHFSIlkjobRU??%R6y`#?kA364_e3r7?M#Uhy*fQWVJ;w4KDxsw>n%b zYunqM{GzAaN8ZE5f<|fv1+X$U&j>hheM|m;$q$e^nh?alWC<~>8K{EDm#E5nXuu6i zT^Z6Nz?!bF6ghtH?%lPh_KNVFWAS{o0Sr@Pr+g1VZ`O;$_ymhr4tR}P?+FYT>oAH? z^C5^2Agy@+b^0rSmJlHz=-?>GtIap8gTWXX_5Llx&N4=!?A4QF5$!!Rh{JOwzuvS% z{oRKsEp~%zLkHCHZE@RvqdiSK{n$$FgPLjNq)6VjqllH*lLctub0Pgp zcc9l=vHgGGih5dF$D};l_0wU1k^&UD1CD4qWJ>40pj#igDdCA&y<5OZEG7sN3V%0- z-|q2Udb`%MYp1%%Co%9KwZljX*NO@G3r-g!%$7n`#V1#4tU68LP!3LxY=orI5Eb;T zUbj5JqhekQ@z>rkp8D)sLtl>xBhU^#2xj3Lyjl{bnIRCYgHt^PY1&Z$gUvuql-!k+ z-a%9%X8HHWt9=B<86Y%KX9}xPpM1kPB`Ft{v(BRpQZ5HVq0++BlR^Pxn_f{bm0k5Z@M^C98;1O+cJTh*Id&Xoou&RfBht@L8@tMeG zKxr^Qq1iOxwXyqTn0!5LSNV%#fmY+PN4+{W!=8sqI^3AR!x{2fR%QFF1K1f3Jdb*j z9}j=!a(&6@?*(Um2x<<0lOtw7(D5^`F1~^1A(yO%Z?m|LyY%k`UzD$vct`vy+XTpj z`=u%Ok1cuP?ti{HiHv}npmTC>TZ{wlK|+Ri(Pq`xAhm()L}2nf#SNF9v(8ToqN_$R z&ny;P4KCCCMT^L#Rxq3O?pG&5mLt3osX+?By%3%2W)E+$JqRVk>=L}&7Qlz@abef} z9Sg9*=Pz8iZO4x5El%!XTSh)o?TzEUGNUQ?uDIh6csMDIcLR?C&@Ss60G6Rs6F(V( zYWwx9mrK&3JeaED`XW*{N%HSUx~Ff?*nhk50|%6jY0TaTTI#9 za*O`)UmyKH_e1F^q~TCEI97KN?+pU#S~sH9|8tLavUnb2lxgc&%~Tub;fKYTD4<5i zNHI69r>Ye}ytKy){a7s2q~ZN^Qzaq^3DkjISPwIQJCOgY{wI7h;7Zy1t&ZuCD~m;a zpo7za{_a`YWu1F7oQRpwYI!$l%ZkD~?n;g-@yCzP+{VB&mcBOsK!V$N+fT~2tq)1` zHoXR$Q_mFyvs-2i|2y0Ae>^I^BeAa*h@8bA^i-hHDwA4O{nhB01ews%*Z+2J*edyD z*($t9LC9#C`xPq+D4zRO@OB$d?-8zbGyQk1`#%^V_n-f@;(}hhHDVuotor9S4+Nb>R*Ozy!vNXp)sL;B(wM%2R&&l|S;j88gJ8@3TFB1CHx4Yi`{x_tb?v;Z zt8z3Ig+%Hoh|(A5^ujyu6%+a=$q^qBU+fn)Eh4pwHTh&UNM9VWpJg+otA{z7^o^T5 z-XVkTRt}uAnneDoc{XOunKfK0&;RRxVrS$l{KdZN{WN8ZmevG6HvKxjtjDbVG4-Ci ziJ+pF`0#hKX8Z1nM9Yr4r)SQn#keS@E?j`i!Tpld__`ivAe+V&5|7Udl!l*w80!Cho zzU`qg3d1j6I~RE;g-}Xhkd!usuz!zr6U*3!$Q!JZVxGCh;>ryRMJ|tTk`u%x8;SFBzi9#R!{fRQIok zefxhuGtSAjxVvXTsDxq(x_0$PtdJ~FDhIERzI|(T5V+#xnLra>ld)sY^s6A1xQIRc zpKirJe~W+8V7x#C<>5GqrFzIL_a6?TMYgx`893k@+v>8hCk>Ev7v&8S;zp9vgx4owDO;=lkzq6EYL?UfTt%yaqYL_U4 zNlww6G>B?ZxYt(xpA(SK5bGMR0O~Y4nr)3mw)nV~ZE<|yI1~LDc>VsS6$F96G)Z~y zs|yuB^RLxJy${4iSn~S645LEccUQ4`QFs#UTItr|CL9H$6{|U69c}^ZLYIQDUp7er zHX<=A!?LofSOLF-LTK4^fG7B{^NDwc7v~K{KeqI*xPC>!)tH*K@}H!K?eNef_Kd&3 z^&C8FR%x2)F;M9obCt_jAj^WrtaYmnhq?IT-6t^pa0gVE5Fn@zXctSrg6ycFiAhCM zj)o5CA=}XLz<1tC0Z*z8!V!Zfj6c=hL!MO3BJ~%n7^recCco^rZ{Jod>vy~_&Rt=` z_$1^~3r>)g|3oGHpFKa$*xc$y(_@n3{fJov$w}r3X*wk!RGNcdaTU-poQx4D4I4bi`>jTmrqSFB6}Pff(4Zgf zHv#L&*do4l>RYN6u~0EG(UG?U*bs=0cGx3H@gTkb2-3J#<**(6{AI(J=dw`~s}4(o znp$Mi)Q-s+S!94%diq=QN;+It^imPTDv&0!4sk@hI$|tJ9Qwws>6wc<1q`iua&mU} z_3SYFa{@}-;Z)OR_Eohud9;F=P)b7`H*emohzD9loIee`Oa2?;V|GAfHP~o&Y1hUt z1T9zA3=+A&Bd^{mby~kUQ7aJMOC#;DGv9vpl)<2sA-G?I_;~P)-{*$vw{*AdeehV5H zixG{%WZTj^D4hsOEOiF3R^7lzF2;w%8H9C>KR9RDBHrfQq*m*rQ!384k~?;=wYqZQ z0tZ446@Y+$Hpb6}-Ts zH)r>QVpslsotzIuVnZ}KSIz68uF?Heh{$!sG9+3&-VCT)g8P5|&(W$l%cNbm^9B$8h4HQ^L}r{;C9WrZ zeL>nUb$t=yTyJszjRrT#<@0~}>0;$Khj&T1Nn|X(5Slj$8LFt~3E6Z5;S6&D?E;Ev zA?sg0f8Gdfk}~kF-rsRW+#~WGNMN|{6#B{ec8(74o&#-a$(3fUb+hp)3D_no@ec zjXQSi2pgM)gVAQNzsDrqEeVUZw6+hAS|+*DGtWXL-$N!BHOOs5)MjkBb2l4lmCsu)Ot_`e`B*D&3}iwAuy*=8V;$rE!WVw z=1wjZ;7oP|)FdY(b2qQg3tU7yfEDk$D$lNz@^9%J>ho|0>5vdPno_IissW$}FpqVs zkMLj`)#xZ(Hyso~UF%#$c-m6j1do{8MIaguB)8t-Kum(R2#h}sK~N{?j!-f%QX-#* ze50J;+&LpC<4+naLIBp>I=mKikUmj^+Of5|szra(5AcG%LfhO3b0gfwOyWFl{Ukga zSQk!An#d{-tp5Cf9!_R!amw1i%9_kP=-g@%Mn`XAE?jQl?dR@cPOC3j|+G z4eg;BE`R@P&v!3&$Es($A#Kyf(!DSnn7tfEG#2sKqEij$Z_@~7#V;>&q_`bDUJa|c zdD_I*rpNy?Rm+)+)_obCF%d5w4Zw+9t_8W;$_3Rfe73HN^zE9 zbfOTQ@y~~!5JjE_3K3$OU^)Z2pE$U167>XH@ict0(8U)x1))J;pn;oEOv7i0{IVc0 z;&j0=8AbGBloCXIOMye#BH3${EM)D)*jH0ggg@mVU~-^IE(g>{HzJ|4MB+)+ceOVlktt0kHs5&%Nnh~ta=ol-9ZJlg6s@`u|^ z*7ih!!=Z@#6NP~uT5{A%f|s0I>s%f5iwmAlwbFRB zKYAV}m5`Yt=QhGD-@@(&Zk5Fnz}o@Iy9*vXrmJEA*&+yH-3B1dMi?%iRXRaLebj33s2;1wh4H5EV!fSIAH9`j!59+#+AU`l@2{X$hHUyQ~Qq? zP~cLUg=}WL->0<975J|#?-r+2`gAmDf!%I^gj7ICYJsQs(o-e2CFl*r0ZH9?ZRg?B z5SS%@`bgYAZgfXesj<&T9a!Xcce6c^;G=-O9o2394;LWGF&JIN1mYU3s!Ml}V^*ws zxOjRR_Y$xTIJq0azCcb1&g@;RD5x~!OpC-g0xbz@SfRUMi}`!X@Zd3rHZ8p-`qr=N z4o1S`fZFFJ;Txw?9|)3vAe_DAuc`?|L(#lXFbfBj4izeP(;rL}6PxG%vM4enceki- z;fW#Q%hOjPv*MQ6@L&If|FO4GhnD;G?{B^}(bM~!d>=5z g#(}TVb$mB8a$fBFtO4ee2ECMyw(gp^RhGy99}Y{bivR!s literal 0 HcmV?d00001 diff --git a/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/drds-ir-edge-depiction-waypoint.png b/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/drds-ir-edge-depiction-waypoint.png new file mode 100644 index 0000000000000000000000000000000000000000..960bc05e324c1d6a3112181df7d3bc980b82ba00 GIT binary patch literal 42278 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 XW=juB@oA>T4 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 M1~acrx7z-{0NRoO9smFU literal 0 HcmV?d00001 diff --git a/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts b/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts index 9ab8801f115..8c6c3679160 100644 --- a/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts +++ b/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts @@ -371,6 +371,80 @@ test.describe("Model DRD", () => { expect(width).toEqual("160"); expect(height).toEqual("80"); }); + + test.describe("Model DRD - Add Content - Edge Depiction Waypoint", async () => { + /** + * C + * ^ + * | + * B -> A + * ^ + * | + * I + */ + test.only("should add waypoint to secondary edge depiction - information requirement", async ({ + diagram, + drds, + drgNodes, + edges, + nodes, + palette, + }) => { + test.info().annotations.push({ + type: TestAnnotations.REGRESSION, + description: "https://github.com/apache/incubator-kie-issues/issues/886", + }); + + await drds.toggle(); + await drds.navigateTo({ name: "First DRD" }); + await drds.toggle(); + await palette.dragNewNode({ type: NodeType.DECISION, targetPosition: { x: 400, y: 300 }, thenRenameTo: "A" }); + await palette.dragNewNode({ type: NodeType.DECISION, targetPosition: { x: 100, y: 300 }, thenRenameTo: "B" }); + await palette.dragNewNode({ type: NodeType.DECISION, targetPosition: { x: 400, y: 100 }, thenRenameTo: "C" }); + await palette.dragNewNode({ + type: NodeType.INPUT_DATA, + targetPosition: { x: 400, y: 500 }, + thenRenameTo: "I", + }); + await nodes.dragNewConnectedEdge({ type: EdgeType.INFORMATION_REQUIREMENT, from: "B", to: "A" }); + await nodes.dragNewConnectedEdge({ type: EdgeType.INFORMATION_REQUIREMENT, from: "A", to: "C" }); + await nodes.dragNewConnectedEdge({ type: EdgeType.INFORMATION_REQUIREMENT, from: "I", to: "A" }); + + await drds.toggle(); + await drds.navigateTo({ name: "Second DRD" }); + await drds.toggle(); + await drgNodes.open(); + await drgNodes.dragNode({ name: "A", targetPosition: { x: 400, y: 300 } }); + await drgNodes.dragNode({ name: "B", targetPosition: { x: 100, y: 300 } }); + await drgNodes.dragNode({ name: "C", targetPosition: { x: 400, y: 100 } }); + await drgNodes.dragNode({ name: "I", targetPosition: { x: 400, y: 500 } }); + await drgNodes.open(); + + await edges.addWaypoint({ from: "B", to: "A" }); + await edges.addWaypoint({ from: "A", to: "C" }); + await edges.addWaypoint({ from: "I", to: "A" }); + + await nodes.move({ name: "A", targetPosition: { x: 600, y: 400 } }); + + await expect(diagram.get()).toHaveScreenshot("drds-ir-edge-depiction-waypoint.png"); + }); + + test("should add waypoint to secondary edge depiction - knowledge requirement", async ({ + decisionPropertiesPanel, + drds, + drgNodes, + nodes, + palette, + }) => {}); + + test("should add waypoint to secondary edge depiction - authority requirement", async ({ + decisionPropertiesPanel, + drds, + drgNodes, + nodes, + palette, + }) => {}); + }); }); }); }); From de4b79fbf43e699663a5ef852d9c2a7bb51cf42f Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Mon, 26 Aug 2024 15:19:50 +0200 Subject: [PATCH 03/40] add TODO tasks --- packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts b/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts index 8c6c3679160..fa70674e685 100644 --- a/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts +++ b/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts @@ -382,7 +382,7 @@ test.describe("Model DRD", () => { * | * I */ - test.only("should add waypoint to secondary edge depiction - information requirement", async ({ + test("should add waypoint to secondary edge depiction - information requirement", async ({ diagram, drds, drgNodes, @@ -413,7 +413,7 @@ test.describe("Model DRD", () => { await drds.toggle(); await drds.navigateTo({ name: "Second DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.open(); // TODO toggle() await drgNodes.dragNode({ name: "A", targetPosition: { x: 400, y: 300 } }); await drgNodes.dragNode({ name: "B", targetPosition: { x: 100, y: 300 } }); await drgNodes.dragNode({ name: "C", targetPosition: { x: 400, y: 100 } }); @@ -429,7 +429,8 @@ test.describe("Model DRD", () => { await expect(diagram.get()).toHaveScreenshot("drds-ir-edge-depiction-waypoint.png"); }); - test("should add waypoint to secondary edge depiction - knowledge requirement", async ({ + // TODO remove only + test.only("should add waypoint to secondary edge depiction - knowledge requirement", async ({ decisionPropertiesPanel, drds, drgNodes, @@ -437,7 +438,8 @@ test.describe("Model DRD", () => { palette, }) => {}); - test("should add waypoint to secondary edge depiction - authority requirement", async ({ + // TODO remove only + test.only("should add waypoint to secondary edge depiction - authority requirement", async ({ decisionPropertiesPanel, drds, drgNodes, From 5b1f21fb7f484d4c2c148d9d52a03b8ef2e87079 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Mon, 26 Aug 2024 19:06:43 +0200 Subject: [PATCH 04/40] incorporate review feedback - @_href --- packages/dmn-editor/src/diagram/Diagram.tsx | 4 ++-- packages/dmn-editor/src/mutations/addEdge.ts | 14 ++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/dmn-editor/src/diagram/Diagram.tsx b/packages/dmn-editor/src/diagram/Diagram.tsx index e017a66e222..9ff89047053 100644 --- a/packages/dmn-editor/src/diagram/Diagram.tsx +++ b/packages/dmn-editor/src/diagram/Diagram.tsx @@ -604,13 +604,13 @@ export const Diagram = React.forwardRef, nodeId: string) { return ( - // use endsWith because @_href is sometimes prefixed with '#' and sometimes it is not - a.requiredInput?.["@_href"].endsWith(`${nodeId}`) || a.requiredDecision?.["@_href"].endsWith(`${nodeId}`) + a.requiredInput?.["@_href"] === `${nodeId}` || // + a.requiredDecision?.["@_href"] === `${nodeId}` ); } function doesKnowledgeRequirementsPointTo(a: Normalized, nodeId: string) { - // use endsWith because @_href is sometimes prefixed with '#' and sometimes it is not - return a.requiredKnowledge?.["@_href"].endsWith(`${nodeId}`); + return a.requiredKnowledge?.["@_href"] === `${nodeId}`; } function doesAuthorityRequirementsPointTo(a: Normalized, nodeId: string) { - // use endsWith because @_href is sometimes prefixed with '#' and sometimes it is not return ( - a.requiredInput?.["@_href"].endsWith(`${nodeId}`) || - a.requiredDecision?.["@_href"].endsWith(`${nodeId}`) || - a.requiredAuthority?.["@_href"].endsWith(`${nodeId}`) + a.requiredInput?.["@_href"] === `${nodeId}` || + a.requiredDecision?.["@_href"] === `${nodeId}` || + a.requiredAuthority?.["@_href"] === `${nodeId}` ); } From 05c48a27eeadf0486a4e0512b2585b33d507a222 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Mon, 26 Aug 2024 19:22:36 +0200 Subject: [PATCH 05/40] drgNodes.toggle --- .../tests-e2e/__fixtures__/drgNodes.ts | 2 +- .../tests-e2e/drds/modelDrd.spec.ts | 26 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/dmn-editor/tests-e2e/__fixtures__/drgNodes.ts b/packages/dmn-editor/tests-e2e/__fixtures__/drgNodes.ts index 790b3778b1b..27c0e472608 100644 --- a/packages/dmn-editor/tests-e2e/__fixtures__/drgNodes.ts +++ b/packages/dmn-editor/tests-e2e/__fixtures__/drgNodes.ts @@ -26,7 +26,7 @@ export class DrgNodes { public page: Page ) {} - public async open() { + public async toggle() { await this.page.getByTitle("DRG Nodes").click(); } diff --git a/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts b/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts index fa70674e685..211eb4956ba 100644 --- a/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts +++ b/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts @@ -136,13 +136,13 @@ test.describe("Model DRD", () => { await drds.toggle(); await drds.navigateTo({ name: "Second DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.toggle(); await drgNodes.dragNode({ name: DefaultNodeName.DECISION, targetPosition: { x: 300, y: 300 } }); await drds.toggle(); await drds.navigateTo({ name: "Third DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.toggle(); await drgNodes.dragNode({ name: DefaultNodeName.DECISION, targetPosition: { x: 300, y: 300 } }); await expect(nodes.get({ name: DefaultNodeName.DECISION })).toBeAttached(); @@ -166,13 +166,13 @@ test.describe("Model DRD", () => { await drds.toggle(); await drds.navigateTo({ name: "Second DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.toggle(); await drgNodes.dragNode({ name: DefaultNodeName.DECISION, targetPosition: { x: 300, y: 300 } }); await drds.toggle(); await drds.navigateTo({ name: "Third DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.toggle(); await drgNodes.dragNode({ name: DefaultNodeName.DECISION, targetPosition: { x: 300, y: 300 } }); await nodes.delete({ name: DefaultNodeName.DECISION }); @@ -199,13 +199,13 @@ test.describe("Model DRD", () => { await drds.toggle(); await drds.navigateTo({ name: "Second DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.toggle(); await drgNodes.dragNode({ name: DefaultNodeName.DECISION, targetPosition: { x: 300, y: 300 } }); await drds.toggle(); await drds.navigateTo({ name: "Third DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.toggle(); await drgNodes.dragNode({ name: DefaultNodeName.DECISION, targetPosition: { x: 300, y: 300 } }); await nodes.selectLabel({ name: DefaultNodeName.DECISION }); @@ -233,7 +233,7 @@ test.describe("Model DRD", () => { await drds.toggle(); await drds.navigateTo({ name: "Second DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.toggle(); await drgNodes.dragNode({ name: DefaultNodeName.DECISION, targetPosition: { x: 300, y: 300 } }); await drgNodes.dragNode({ name: DefaultNodeName.INPUT_DATA, targetPosition: { x: 300, y: 500 } }); await nodes.dragNewConnectedEdge({ @@ -272,7 +272,7 @@ test.describe("Model DRD", () => { await drds.toggle(); await drds.navigateTo({ name: "Second DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.toggle(); await drgNodes.dragNode({ name: DefaultNodeName.DECISION, targetPosition: { x: 300, y: 300 } }); await expect(diagram.get()).toHaveScreenshot("drds-decision-missing-dependency.png"); @@ -301,7 +301,7 @@ test.describe("Model DRD", () => { await drds.toggle(); await drds.navigateTo({ name: "Second DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.toggle(); await drgNodes.dragNode({ name: DefaultNodeName.DECISION, targetPosition: { x: 300, y: 300 } }); await drgNodes.dragNode({ name: DefaultNodeName.INPUT_DATA, targetPosition: { x: 300, y: 500 } }); @@ -327,7 +327,7 @@ test.describe("Model DRD", () => { await drds.toggle(); await drds.navigateTo({ name: "Second DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.toggle(); await drgNodes.dragNode({ name: DefaultNodeName.DECISION, targetPosition: { x: 500, y: 500 } }); await nodes.move({ name: DefaultNodeName.DECISION, targetPosition: { x: 400, y: 400 } }); @@ -357,7 +357,7 @@ test.describe("Model DRD", () => { await drds.toggle(); await drds.navigateTo({ name: "Second DRD" }); await drds.toggle(); - await drgNodes.open(); + await drgNodes.toggle(); await drgNodes.dragNode({ name: DefaultNodeName.DECISION, targetPosition: { x: 500, y: 500 } }); await nodes.resize({ nodeName: DefaultNodeName.DECISION, xOffset: 100, yOffset: 100 }); @@ -413,12 +413,12 @@ test.describe("Model DRD", () => { await drds.toggle(); await drds.navigateTo({ name: "Second DRD" }); await drds.toggle(); - await drgNodes.open(); // TODO toggle() + await drgNodes.toggle(); await drgNodes.dragNode({ name: "A", targetPosition: { x: 400, y: 300 } }); await drgNodes.dragNode({ name: "B", targetPosition: { x: 100, y: 300 } }); await drgNodes.dragNode({ name: "C", targetPosition: { x: 400, y: 100 } }); await drgNodes.dragNode({ name: "I", targetPosition: { x: 400, y: 500 } }); - await drgNodes.open(); + await drgNodes.toggle(); await edges.addWaypoint({ from: "B", to: "A" }); await edges.addWaypoint({ from: "A", to: "C" }); From dc80ddcefe0fdf5559487886a4dc972d9967c055 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Mon, 26 Aug 2024 20:03:34 +0200 Subject: [PATCH 06/40] add tests --- .../drds/drds-ar-edge-depiction-waypoint.png | Bin 0 -> 46979 bytes .../drds/drds-ar-edge-depiction-waypoint.png | Bin 0 -> 41659 bytes .../drds/drds-ar-edge-depiction-waypoint.png | Bin 0 -> 43646 bytes .../tests-e2e/drds/modelDrd.spec.ts | 101 ++++++++++++++++-- 4 files changed, 93 insertions(+), 8 deletions(-) create mode 100644 packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/drds-ar-edge-depiction-waypoint.png create mode 100644 packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/drds-ar-edge-depiction-waypoint.png create mode 100644 packages/dmn-editor/tests-e2e/__screenshots__/webkit/drds/drds-ar-edge-depiction-waypoint.png diff --git a/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/drds-ar-edge-depiction-waypoint.png b/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/drds-ar-edge-depiction-waypoint.png new file mode 100644 index 0000000000000000000000000000000000000000..718044ce3e1440a7e6618559312aec4af52b2575 GIT binary patch literal 46979 zcmd43Wmwhe+cmuH(J^Km5e0!!0VM>b1f&c=8WGrtgh2@iNGJ{Jh=GU_A|a*ZCX|p4 zTUuZv4I*8lbn~tY=YK!<6JMV9!+X3O6AJ8KTydW3Tx*@zU3FFYO&gdtP$-m53MWr! zP$+Bg$CdHFt;PTLZ`7E@|5n&($RDGmRPO4hQ2wSUoH(lK7&g@Eq!-Y=xb$;s<6Ca- zPka83<-GShlhq85pk&BLZK1Mp$HY$U9zPbI^bA>FlYq-6kHdv3gqj)mmnG3vFLkGw zrR4m6{kKx?vhopMqryk=#Vv1(e>h9Aj)~e=m{;bv=@2{onsXl^j(T39T?W$%LoHm#6v1p@EgZ{!9_wvPtIGAB%meDXV||v1P~q zSKoZ{p5d^hec!{aTek)T1UxtNSkU6);!;#lICb^vE1uF7rClQA^BW`$4O!wh`f~?UPMl zBS)GS*BurVJdG#H#KUQ(8c1$p7E%6-Q`yGhF1fKM)7OTV7ekI*OKEc%k(8B_GaqVr zIq*5^=8YRS@X-ADQqVYh^mkq;HQtZ{oY3wH~zAG@`+wZi~i;p{8R>d#Tf>t0^`%mJz|_~SHdaOV#kuQ?V-Y(86Gx75i?<~*^$w;M86?c|aU3|% zDi-Ql9xNzdG(YP7>T+|>eaA@M_3PJHS3W&5;p;JfeCN)cOp?wSG^OPi&pv5snItv; ztk^KCey;tgh1rR^96Qs?E!owVrgEMn?l6s0eM%O|#Bj4b4>iTM$&D|T`(uCk zQn;7&DjUpvQ;uC+PerJy5wH5*7MGENdp!~JMfBFj#>Rohbko3!)ka~J-APxNUakK$IovF4@r5_UBYxsBzhO#$ zZCv`H-^eHFTW_x0@YvKzA_iJaugjL^~P_BM&Ib-NH z!NBZJ@zc=Ipci>~ER5HxrSOrkNcnmK3q)I4`M&ei_u(3G?PT2;Nta2oxKv9_!?eo! zt}xY5TxYt29I)&P#%q+kwynv&d8P9M+1gA;t|rlxR*>t69#vI+fQ1*=?mkyh7jx1t zMC5WJuJoz7x%so+hkhox2el8^Mg|21+1lE6_4oJN9QDlmR9UI*=$M_BmiF(E7O(%{ z!yH%rOrCbR`Be&^tY3!1p!NZSd>#Ix`Lw8<`?bRNcg4M}qPTY4VjTbG&0jOWYVl2b zyCIfNZJ3zdf39*4`>*!#fwQ~Jw+mY~eEuAA;o`+i=Lz$e=g)UMzVuGiNBil=9NTV1 zeW&igfu>Aa;oSElx6{a_HxPp3raC%0DrDcM9upIjle;Zj$Cp)d{L5ME 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 mHFU#^mKb)1%HyUj+Dq_T}-~JappGD;W literal 0 HcmV?d00001 diff --git a/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/drds-ar-edge-depiction-waypoint.png b/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/drds-ar-edge-depiction-waypoint.png new file mode 100644 index 0000000000000000000000000000000000000000..42bb737451fbc222befe44897864f0e064ba70ab GIT binary patch literal 41659 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 literal 0 HcmV?d00001 diff --git a/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts b/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts index 211eb4956ba..2d71704eace 100644 --- a/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts +++ b/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts @@ -372,6 +372,9 @@ test.describe("Model DRD", () => { expect(height).toEqual("80"); }); + // TODO the order makes a difference + // 1. add all dependencies and the dependent + // vs 2. add the dependent then in steps all dependencies test.describe("Model DRD - Add Content - Edge Depiction Waypoint", async () => { /** * C @@ -429,23 +432,105 @@ test.describe("Model DRD", () => { await expect(diagram.get()).toHaveScreenshot("drds-ir-edge-depiction-waypoint.png"); }); - // TODO remove only - test.only("should add waypoint to secondary edge depiction - knowledge requirement", async ({ - decisionPropertiesPanel, + /** + * + * B -> A <- C + * + */ + test("should add waypoint to secondary edge depiction - knowledge requirement", async ({ + diagram, drds, drgNodes, + edges, nodes, palette, - }) => {}); + }) => { + test.info().annotations.push({ + type: TestAnnotations.REGRESSION, + description: "https://github.com/apache/incubator-kie-issues/issues/886", + }); + + await drds.toggle(); + await drds.navigateTo({ name: "First DRD" }); + await drds.toggle(); + await palette.dragNewNode({ type: NodeType.DECISION, targetPosition: { x: 400, y: 300 }, thenRenameTo: "A" }); + await palette.dragNewNode({ type: NodeType.BKM, targetPosition: { x: 100, y: 300 }, thenRenameTo: "B" }); + await palette.dragNewNode({ + type: NodeType.DECISION_SERVICE, + targetPosition: { x: 600, y: 300 }, + thenRenameTo: "C", + }); + await nodes.dragNewConnectedEdge({ type: EdgeType.KNOWLEDGE_REQUIREMENT, from: "B", to: "A" }); + await nodes.dragNewConnectedEdge({ type: EdgeType.KNOWLEDGE_REQUIREMENT, from: "C", to: "A" }); - // TODO remove only - test.only("should add waypoint to secondary edge depiction - authority requirement", async ({ - decisionPropertiesPanel, + await drds.toggle(); + await drds.navigateTo({ name: "Second DRD" }); + await drds.toggle(); + await drgNodes.toggle(); + await drgNodes.dragNode({ name: "A", targetPosition: { x: 400, y: 300 } }); + await drgNodes.dragNode({ name: "B", targetPosition: { x: 100, y: 300 } }); + await drgNodes.dragNode({ name: "C", targetPosition: { x: 600, y: 300 } }); + await drgNodes.toggle(); + + await edges.addWaypoint({ from: "B", to: "A" }); + await edges.addWaypoint({ from: "C", to: "A" }); + + await nodes.move({ name: "A", targetPosition: { x: 400, y: 200 } }); + + await expect(diagram.get()).toHaveScreenshot("drds-kr-edge-depiction-waypoint.png"); + }); + + /** + * + * B -> A -> C + * + */ + test("should add waypoint to secondary edge depiction - authority requirement", async ({ + diagram, drds, drgNodes, + edges, nodes, palette, - }) => {}); + }) => { + test.info().annotations.push({ + type: TestAnnotations.REGRESSION, + description: "https://github.com/apache/incubator-kie-issues/issues/886", + }); + + await drds.toggle(); + await drds.navigateTo({ name: "First DRD" }); + await drds.toggle(); + await palette.dragNewNode({ type: NodeType.DECISION, targetPosition: { x: 400, y: 300 }, thenRenameTo: "A" }); + await palette.dragNewNode({ + type: NodeType.KNOWLEDGE_SOURCE, + targetPosition: { x: 100, y: 300 }, + thenRenameTo: "B", + }); + await palette.dragNewNode({ + type: NodeType.KNOWLEDGE_SOURCE, + targetPosition: { x: 600, y: 300 }, + thenRenameTo: "C", + }); + await nodes.dragNewConnectedEdge({ type: EdgeType.AUTHORITY_REQUIREMENT, from: "B", to: "A" }); + await nodes.dragNewConnectedEdge({ type: EdgeType.AUTHORITY_REQUIREMENT, from: "A", to: "C" }); + + await drds.toggle(); + await drds.navigateTo({ name: "Second DRD" }); + await drds.toggle(); + await drgNodes.toggle(); + await drgNodes.dragNode({ name: "A", targetPosition: { x: 400, y: 300 } }); + await drgNodes.dragNode({ name: "B", targetPosition: { x: 100, y: 300 } }); + await drgNodes.dragNode({ name: "C", targetPosition: { x: 600, y: 300 } }); + await drgNodes.toggle(); + + await edges.addWaypoint({ from: "B", to: "A" }); + await edges.addWaypoint({ from: "A", to: "C" }); + + await nodes.move({ name: "A", targetPosition: { x: 400, y: 200 } }); + + await expect(diagram.get()).toHaveScreenshot("drds-ar-edge-depiction-waypoint.png"); + }); }); }); }); From 94db899d74b3d6a7bac3cf4301581a6b6df76b64 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 28 Aug 2024 14:21:57 +0200 Subject: [PATCH 07/40] add missing test screenshots --- .../drds/drds-kr-edge-depiction-waypoint.png | Bin 0 -> 48605 bytes .../drds/drds-kr-edge-depiction-waypoint.png | Bin 0 -> 43347 bytes .../drds/drds-kr-edge-depiction-waypoint.png | Bin 0 -> 45298 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/drds-kr-edge-depiction-waypoint.png create mode 100644 packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/drds-kr-edge-depiction-waypoint.png create mode 100644 packages/dmn-editor/tests-e2e/__screenshots__/webkit/drds/drds-kr-edge-depiction-waypoint.png diff --git a/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/drds-kr-edge-depiction-waypoint.png b/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/drds-kr-edge-depiction-waypoint.png new file mode 100644 index 0000000000000000000000000000000000000000..b2ba9406603e6ba80e3c364b40188b50a7fa8726 GIT binary patch literal 48605 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 K68^9|{=Wdmey$P# literal 0 HcmV?d00001 diff --git a/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/drds-kr-edge-depiction-waypoint.png b/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/drds-kr-edge-depiction-waypoint.png new file mode 100644 index 0000000000000000000000000000000000000000..b48c794d9da75ce90ca27f42b650ee341f40d2a3 GIT binary patch literal 43347 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%0ARO2bAc%w$9I;bvI-3HG)dE;8Av{?3^+ zQ2nw?=Y&m~?tq~__Y`g?BrdbIOu`)u6Fivfx|a}HptyMAnM|NRLw{3k->zBYWRKp9 zt6YXFWpH1}lD(+C$SLD-7GI~1VDjvY%ksoaVl*tzb#)3JOgt@NG>$cOA1niR?j-GA zV;_pzg}mEhB8a2Fu|?Eii(|60=?8)N!`aWXgb)6~#1C_&!kM}3E{DXmC|Yzr7%C}D zNc1gry%7}s+QdB0A}zxzt=@2S6zggmyad@D=wwL=lo~51&4T*1t5<#hp?DM(f8fa* z>9=K(vIlupQ#U-W+b)V*9X!b_y2bIbjdxM(m+wlxsXNb6!>0`JJccDj7wWOyY9-_h zF?0^;-0`-a6o`Wr@a&ka2_72qm<*x6eMCN(nU=$G%af(G0mr0jHdfc=3E<^$`$dUr z&RNTe;8QMd7V-+crMKp5=AUghdK4;sb&UoJEh*=iJL|*4D^n?4+}w5}Efbhw9>vqO zFx57u>4OnwOz*Ews3lZ*L1^G1?Q|W-MYustgdN< zsTm3he*dP1M)3U&Iq;(Z<`C%^6Yg-bbY_o?j+!sMR2s(658+F75mZr8?cm|AZBRaa zy2Xe*r%T_F-OP4XCvf0xEz2u^dRr4;0i#`0u1);IgbYSH?stQAB)a-3(c-X}7fe82 z%0fo~+a8iHn^yWo z&giK4oo`N;s;-r!?h?9yj$_aSjJF>!BYili_Aj27qKu=hfrYdps zOH4|Ft&e)^))z%1m=wd6ojdmdU4h~A9}vI79mjHEYF1TIp*jQ>6ACyX`eorsPqy6~ zZW5Mepzw$%2bA)z;p+q`+&85yzzz3>gN^Mb=DyHQCZ3k>g69Oqba~lnaLZF*VhjR0 zP7fenQX7qLhc~si6Y?Nv3J)Rh)ozdVYP|1~^magq1=H~f`$H!&l?aaHiNtaQI_br_ z@89LuiD4Wm*R6L~_;ic3M4u5)6&Qvm;%zL^n1cg{k0a*6?+!dM3x{-hdD%F?8*nc- zFHgv*?h|Cl7jfjqj}VC8z9mqpV*L6I>_gLJxE1{c5gwuW3h=9gBf#j;J*Wr7<1_|0 z6=Dz{lADLOcU47&ZxLGzVI_h|3fk-`QPGSaXK)XuHz@bIwK`*#7?$7s;jRjRz0%S{ zm?DMw4ShYHHsB{FgP_5=Bc5A>7PTo>7l^dcxUjHr)5eVecb9cHuHVyV%zkDJW7?P) zCyb07TTBt8dJ_;}2MZ~>OohZod^aAvB!*ptJ#$qc4haPQ{5lEPATD?_+n{mD+k$Bx zf*XfL9Zf8zFwtQW%_}KHibScW^Z3pTxFT&;Ra*oS9>s8Lo&Cczb5=2aaXDBp;rC!K zARqh~#4vy3JHL#KDO2G&_%D%a;n5)+J6~Z24!XDLPbe|J4m^uKi`!8HUlE8YC^!3+ zzGJR~wNYR3fy1YzQ=0*335pf>gmQv5CEsPm0cY>>W$yyX7}IdEGiQP!0OIJOZ!h`y z@gwM=ef7n-7Z&)Uk%Q~!0{-R9iZkB%vx7zZZ* z(E#7lJdFLrOc5v_d?gZs17V;SHuv}Ur;4z zaG7>-IL#XQ*9!h)c2?*XFWlMcJCBx&;C1R$4gvwj8z}9V0#i{@QA=G-X�yHLk*0 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 OHfh|{v5}^ZoBkKo!PEo* literal 0 HcmV?d00001 From 8cfc2f52762f9b6b4bce7a96f430202f611b0470 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 28 Aug 2024 14:25:34 +0200 Subject: [PATCH 08/40] cleanup spec.ts javadoc --- .../tests-e2e/drds/modelDrd.spec.ts | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts b/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts index 2d71704eace..1bc943e3a3a 100644 --- a/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts +++ b/packages/dmn-editor/tests-e2e/drds/modelDrd.spec.ts @@ -372,15 +372,12 @@ test.describe("Model DRD", () => { expect(height).toEqual("80"); }); - // TODO the order makes a difference - // 1. add all dependencies and the dependent - // vs 2. add the dependent then in steps all dependencies test.describe("Model DRD - Add Content - Edge Depiction Waypoint", async () => { /** - * C - * ^ - * | - * B -> A + * C A: Decision + * ^ B: Decision + * | C: Decision + * B -> A I: InputData * ^ * | * I @@ -433,9 +430,9 @@ test.describe("Model DRD", () => { }); /** - * - * B -> A <- C - * + * A: Decision + * B -> A <- C B: BusinessKnowledgeModel + * C: DecisionService */ test("should add waypoint to secondary edge depiction - knowledge requirement", async ({ diagram, @@ -481,9 +478,9 @@ test.describe("Model DRD", () => { }); /** - * - * B -> A -> C - * + * A: Decision + * B -> A -> C B: KnowledgeSource + * C: KnowledgeSource */ test("should add waypoint to secondary edge depiction - authority requirement", async ({ diagram, From eadc55ecc994924b9ff7fb2ab1b78a45cb43c2a0 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 28 Aug 2024 14:26:36 +0200 Subject: [PATCH 09/40] Cleanup Diagram.tsx --- packages/dmn-editor/src/diagram/Diagram.tsx | 52 --------------------- 1 file changed, 52 deletions(-) diff --git a/packages/dmn-editor/src/diagram/Diagram.tsx b/packages/dmn-editor/src/diagram/Diagram.tsx index 9ff89047053..123aba83e25 100644 --- a/packages/dmn-editor/src/diagram/Diagram.tsx +++ b/packages/dmn-editor/src/diagram/Diagram.tsx @@ -568,58 +568,6 @@ export const Diagram = React.forwardRef { - const sourceData = nodesById.get(edge.source)?.data; - const sourceType = nodesById.get(edge.source)?.type; - const targetData = nodesById.get(edge.target)?.data; - const targetType = nodesById.get(edge.target)?.type; - - // We want to add Edge only if both Source and Target are already present in DRD - if ( - edge.data?.dmnShapeSource !== undefined && - edge.data?.dmnShapeSource["dc:Bounds"] !== undefined && - edge.data?.dmnShapeSource["@_id"] !== undefined && - edge.data?.dmnShapeTarget && - edge.data?.dmnShapeTarget["dc:Bounds"] !== undefined && - edge.data?.dmnShapeTarget["@_id"] !== undefined && - sourceData !== undefined && - sourceType !== undefined && - targetData !== undefined && - targetType !== undefined - ) { - addEdge({ - definitions: state.dmn.model.definitions, - drdIndex: state.computed(state).getDrdIndex(), - edge: { - type: edge.type as EdgeType, - targetHandle: PositionalNodeHandleId.Center, - sourceHandle: PositionalNodeHandleId.Center, - autoPositionedEdgeMarker: undefined, - }, - sourceNode: { - type: sourceType as NodeType, - data: sourceData, - href: edge.source, - bounds: edge.data?.dmnShapeSource["dc:Bounds"], - shapeId: edge.data?.dmnShapeSource["@_id"], - }, - targetNode: { - type: targetType as NodeType, - href: edge.target, - data: targetData, - bounds: edge.data?.dmnShapeTarget["dc:Bounds"], - index: nodesById.get(edge.target)?.data.index ?? 0, - shapeId: edge.data?.dmnShapeTarget["@_id"], - }, - keepWaypoints: false, - }); - } - }); }); } console.debug(`DMN DIAGRAM: Adding DRG node`, JSON.stringify(drgElement)); From b25ca855c06fd425221fe5faefaa6365012a2cb8 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 28 Aug 2024 14:27:36 +0200 Subject: [PATCH 10/40] addEdge in usePotentialWaypointControls --- .../edges/usePotentialWaypointControls.ts | 81 ++++++++++++++++++- 1 file changed, 79 insertions(+), 2 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 1a80d491a4b..c22cf377a03 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -25,6 +25,11 @@ import { snapPoint } from "../SnapGrid"; import { DC__Point } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen/types"; import { DmnDiagramNodeData } from "../nodes/Nodes"; import { DmnDiagramEdgeData } from "./Edges"; +import { useExternalModels } from "../../includedModels/DmnEditorDependenciesContext"; +import { addEdge } from "../../mutations/addEdge"; +import { EdgeType, NodeType } from "../connections/graphStructure"; +import { PositionalNodeHandleId } from "../connections/PositionalNodeHandles"; +import { getHandlePosition } from "../maths/DmnMaths"; export function usePotentialWaypointControls( waypoints: DC__Point[], @@ -38,6 +43,7 @@ export function usePotentialWaypointControls( const isDraggingWaypoint = useDmnEditorStore((s) => !!s.diagram.draggingWaypoints.find((e) => e === edgeId)); const dmnEditorStoreApi = useDmnEditorStoreApi(); const reactFlowInstance = RF.useReactFlow(); + const { externalModelsByNamespace } = useExternalModels(); const [potentialWaypoint, setPotentialWaypoint] = useState | undefined>( undefined @@ -74,10 +80,75 @@ export function usePotentialWaypointControls( }, [snapGrid, potentialWaypoint]); const onDoubleClick = useCallback(() => { - if (!potentialWaypoint || !snappedPotentialWaypoint || edgeIndex === undefined) { + if (!potentialWaypoint || !snappedPotentialWaypoint) { return; } + if (edgeIndex === undefined) { + dmnEditorStoreApi.setState((state) => { + const nodesById = state.computed(state).getDiagramData(externalModelsByNamespace).nodesById; + const edge = state.computed(state).getDiagramData(externalModelsByNamespace).edgesById.get(edgeId); + if ( + edge === undefined || + edge.type === undefined || + edge.data === undefined || + edge.data?.dmnShapeSource === undefined || + edge.data?.dmnShapeTarget === undefined + ) { + return; + } + const edgeSourceBounds = edge.data?.dmnShapeSource["dc:Bounds"]; + const edgeTargetBounds = edge.data?.dmnShapeTarget["dc:Bounds"]; + + if (edgeSourceBounds === undefined || edgeTargetBounds === undefined) { + return; + } + + const sourceData = nodesById.get(edge.source)?.data; + const sourceType = nodesById.get(edge.source)?.type; + const targetData = nodesById.get(edge.target)?.data; + const targetType = nodesById.get(edge.target)?.type; + + if ( + sourceData === undefined || + sourceType === undefined || + targetData === undefined || + targetType === undefined + ) { + return; + } + + addEdge({ + definitions: state.dmn.model.definitions, + drdIndex: state.computed(state).getDrdIndex(), + edge: { + type: edge.type as EdgeType, + targetHandle: getHandlePosition({ shapeBounds: edgeTargetBounds, waypoint: snappedPotentialWaypoint }) + .handlePosition as PositionalNodeHandleId, + sourceHandle: getHandlePosition({ shapeBounds: edgeSourceBounds, waypoint: snappedPotentialWaypoint }) + .handlePosition as PositionalNodeHandleId, + autoPositionedEdgeMarker: undefined, + }, + sourceNode: { + type: sourceType as NodeType, + data: sourceData, + href: edge.source, + bounds: edgeSourceBounds, + shapeId: edge.data?.dmnShapeSource["@_id"], + }, + targetNode: { + type: targetType as NodeType, + href: edge.target, + data: targetData, + bounds: edgeTargetBounds, + index: nodesById.get(edge.target)?.data.index ?? 0, + shapeId: edge.data?.dmnShapeTarget["@_id"], + }, + keepWaypoints: false, + }); + }); + } + if (isExistingWaypoint(snappedPotentialWaypoint)) { console.debug("Preventing overlapping waypoint creation."); return; @@ -96,18 +167,24 @@ export function usePotentialWaypointControls( } dmnEditorStoreApi.setState((state) => { + const dmnEdgeIndex = state.computed(state).indexedDrd().dmnEdgesByDmnElementRef.get(edgeId)?.index; + if (dmnEdgeIndex === undefined) { + return; + } addEdgeWaypoint({ definitions: state.dmn.model.definitions, drdIndex, beforeIndex: i - 1, - edgeIndex, + edgeIndex: dmnEdgeIndex, waypoint: snappedPotentialWaypoint, }); }); }, [ drdIndex, dmnEditorStoreApi, + edgeId, edgeIndex, + externalModelsByNamespace, isExistingWaypoint, potentialWaypoint, snappedPotentialWaypoint, From babe9a2ed3912c784b4a1e4a7cdbaecbe3defd69 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 28 Aug 2024 15:42:27 +0200 Subject: [PATCH 11/40] add logs --- .../src/diagram/edges/usePotentialWaypointControls.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index c22cf377a03..15747eff738 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -95,12 +95,14 @@ export function usePotentialWaypointControls( edge.data?.dmnShapeSource === undefined || edge.data?.dmnShapeTarget === undefined ) { + console.debug(`DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram.`); return; } const edgeSourceBounds = edge.data?.dmnShapeSource["dc:Bounds"]; const edgeTargetBounds = edge.data?.dmnShapeTarget["dc:Bounds"]; if (edgeSourceBounds === undefined || edgeTargetBounds === undefined) { + console.debug(`DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram.`); return; } @@ -115,6 +117,7 @@ export function usePotentialWaypointControls( targetData === undefined || targetType === undefined ) { + console.debug(`DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram.`); return; } @@ -146,6 +149,8 @@ export function usePotentialWaypointControls( }, keepWaypoints: false, }); + + console.debug(`DMN MUTATION: DMNEdge for '${edgeId}' edge was added into diagram.`); }); } @@ -169,6 +174,7 @@ export function usePotentialWaypointControls( dmnEditorStoreApi.setState((state) => { const dmnEdgeIndex = state.computed(state).indexedDrd().dmnEdgesByDmnElementRef.get(edgeId)?.index; if (dmnEdgeIndex === undefined) { + console.debug(`DMN MUTATION: DMNEdge for '${edgeId}' edge has missing index.`); return; } addEdgeWaypoint({ @@ -178,6 +184,8 @@ export function usePotentialWaypointControls( edgeIndex: dmnEdgeIndex, waypoint: snappedPotentialWaypoint, }); + + console.debug(`DMN MUTATION: Waypoint on the DMNEdge for '${edgeId}' edge was added.`); }); }, [ drdIndex, From c2cbacec80563b18108cc1aa5ffbe11d4f831e3f Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Fri, 30 Aug 2024 16:05:02 +0200 Subject: [PATCH 12/40] display waypoints on the edges targetting external nodes --- .../src/store/computed/computeDiagramData.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/dmn-editor/src/store/computed/computeDiagramData.ts b/packages/dmn-editor/src/store/computed/computeDiagramData.ts index 69552fa0412..c3d8fcf0ab2 100644 --- a/packages/dmn-editor/src/store/computed/computeDiagramData.ts +++ b/packages/dmn-editor/src/store/computed/computeDiagramData.ts @@ -125,6 +125,20 @@ export function computeDiagramData( selectedEdgesById.set(edge.id, edge); } + if (!edge.data?.dmnEdge) { + // it may be an DMNEdge targetting external node + // in such case we need to search using edge source and target shapes + // https://github.com/apache/incubator-kie-issues/issues/886 + const shapeSourceId = edgesById.get(edge.id)?.data?.dmnShapeSource?.["@_id"]; + const shapeTargetId = edgesById.get(edge.id)?.data?.dmnShapeTarget?.["@_id"]; + indexedDrd.dmnEdgesByDmnElementRef.forEach((e, key) => { + if (edge.data && e["@_sourceElement"] === shapeSourceId && e["@_targetElement"] === shapeTargetId) { + edge.data.dmnEdge = e; + return; + } + }); + } + edges.push(edge); drgEdges.push({ id, sourceId: source, targetId: target, dmnObject }); From 632adeb7716482ec083164095382c65152a26405 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Fri, 30 Aug 2024 16:06:11 +0200 Subject: [PATCH 13/40] create DMNEdge targeting external node --- .../diagram/connections/isValidConnection.ts | 8 +- .../edges/usePotentialWaypointControls.ts | 91 +++++++++++++------ packages/dmn-editor/src/mutations/addEdge.ts | 79 ++++++++++++++++ 3 files changed, 146 insertions(+), 32 deletions(-) diff --git a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts index 3dbfb06a61b..0ac384e4ce4 100644 --- a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts +++ b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts @@ -39,14 +39,16 @@ export function checkIsValidConnection( export function _checkIsValidConnection( sourceNode: { type?: string; data: DmnDiagramNodeData } | undefined, targetNode: { type?: string; data: DmnDiagramNodeData } | undefined, - edgeType: string | null | undefined + edgeType: string | null | undefined, + allowExternalTarget?: boolean ) { if (!sourceNode?.type || !targetNode?.type || !edgeType) { return false; } - // External nodes cannot be targeted - if (targetNode.data.dmnObjectQName.prefix) { + // External nodes cannot be targeted by default + // However there are exceptions, for example adding a waypoint on the edge + if (!allowExternalTarget && targetNode.data.dmnObjectQName.prefix) { return false; } diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 15747eff738..13e3eace4c9 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -26,7 +26,7 @@ import { DC__Point } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen import { DmnDiagramNodeData } from "../nodes/Nodes"; import { DmnDiagramEdgeData } from "./Edges"; import { useExternalModels } from "../../includedModels/DmnEditorDependenciesContext"; -import { addEdge } from "../../mutations/addEdge"; +import { addEdge, addEdgeTargetingExternalNode } from "../../mutations/addEdge"; import { EdgeType, NodeType } from "../connections/graphStructure"; import { PositionalNodeHandleId } from "../connections/PositionalNodeHandles"; import { getHandlePosition } from "../maths/DmnMaths"; @@ -84,6 +84,7 @@ export function usePotentialWaypointControls( return; } + // TODO doc comment if (edgeIndex === undefined) { dmnEditorStoreApi.setState((state) => { const nodesById = state.computed(state).getDiagramData(externalModelsByNamespace).nodesById; @@ -121,34 +122,66 @@ export function usePotentialWaypointControls( return; } - addEdge({ - definitions: state.dmn.model.definitions, - drdIndex: state.computed(state).getDrdIndex(), - edge: { - type: edge.type as EdgeType, - targetHandle: getHandlePosition({ shapeBounds: edgeTargetBounds, waypoint: snappedPotentialWaypoint }) - .handlePosition as PositionalNodeHandleId, - sourceHandle: getHandlePosition({ shapeBounds: edgeSourceBounds, waypoint: snappedPotentialWaypoint }) - .handlePosition as PositionalNodeHandleId, - autoPositionedEdgeMarker: undefined, - }, - sourceNode: { - type: sourceType as NodeType, - data: sourceData, - href: edge.source, - bounds: edgeSourceBounds, - shapeId: edge.data?.dmnShapeSource["@_id"], - }, - targetNode: { - type: targetType as NodeType, - href: edge.target, - data: targetData, - bounds: edgeTargetBounds, - index: nodesById.get(edge.target)?.data.index ?? 0, - shapeId: edge.data?.dmnShapeTarget["@_id"], - }, - keepWaypoints: false, - }); + if (targetData.dmnObjectQName.prefix) { + addEdgeTargetingExternalNode({ + definitions: state.dmn.model.definitions, + drdIndex: state.computed(state).getDrdIndex(), + edge: { + type: edge.type as EdgeType, + targetHandle: getHandlePosition({ shapeBounds: edgeTargetBounds, waypoint: snappedPotentialWaypoint }) + .handlePosition as PositionalNodeHandleId, + sourceHandle: getHandlePosition({ shapeBounds: edgeSourceBounds, waypoint: snappedPotentialWaypoint }) + .handlePosition as PositionalNodeHandleId, + autoPositionedEdgeMarker: undefined, + }, + sourceNode: { + type: sourceType as NodeType, + data: sourceData, + href: edge.source, + bounds: edgeSourceBounds, + shapeId: edge.data?.dmnShapeSource["@_id"], + }, + targetNode: { + type: targetType as NodeType, + href: edge.target, + data: targetData, + bounds: edgeTargetBounds, + index: nodesById.get(edge.target)?.data.index ?? 0, + shapeId: edge.data?.dmnShapeTarget["@_id"], + }, + keepWaypoints: false, + existingEdgeId: edgeId, // TODO include external edge namespace + }); + } else { + addEdge({ + definitions: state.dmn.model.definitions, + drdIndex: state.computed(state).getDrdIndex(), + edge: { + type: edge.type as EdgeType, + targetHandle: getHandlePosition({ shapeBounds: edgeTargetBounds, waypoint: snappedPotentialWaypoint }) + .handlePosition as PositionalNodeHandleId, + sourceHandle: getHandlePosition({ shapeBounds: edgeSourceBounds, waypoint: snappedPotentialWaypoint }) + .handlePosition as PositionalNodeHandleId, + autoPositionedEdgeMarker: undefined, + }, + sourceNode: { + type: sourceType as NodeType, + data: sourceData, + href: edge.source, + bounds: edgeSourceBounds, + shapeId: edge.data?.dmnShapeSource["@_id"], + }, + targetNode: { + type: targetType as NodeType, + href: edge.target, + data: targetData, + bounds: edgeTargetBounds, + index: nodesById.get(edge.target)?.data.index ?? 0, + shapeId: edge.data?.dmnShapeTarget["@_id"], + }, + keepWaypoints: false, + }); + } console.debug(`DMN MUTATION: DMNEdge for '${edgeId}' edge was added into diagram.`); }); diff --git a/packages/dmn-editor/src/mutations/addEdge.ts b/packages/dmn-editor/src/mutations/addEdge.ts index 04e27c6bb1d..3909648d388 100644 --- a/packages/dmn-editor/src/mutations/addEdge.ts +++ b/packages/dmn-editor/src/mutations/addEdge.ts @@ -192,6 +192,85 @@ export function addEdge({ return { newDmnEdge }; } +export function addEdgeTargetingExternalNode({ + definitions, + drdIndex, + sourceNode, + targetNode, + edge, + keepWaypoints, + existingEdgeId, +}: { + definitions: Normalized; + drdIndex: number; + sourceNode: { + type: NodeType; + data: DmnDiagramNodeData; + href: string; + bounds: DC__Bounds; + shapeId: string | undefined; + }; + targetNode: { + type: NodeType; + data: DmnDiagramNodeData; + href: string; + bounds: DC__Bounds; + shapeId: string | undefined; + index: number; + }; + edge: { + type: EdgeType; + targetHandle: PositionalNodeHandleId; + sourceHandle: PositionalNodeHandleId; + autoPositionedEdgeMarker: AutoPositionedEdgeMarker | undefined; + }; + keepWaypoints: boolean; + existingEdgeId?: string; +}) { + if (!_checkIsValidConnection(sourceNode, targetNode, edge.type, true)) { + throw new Error(`DMN MUTATION: Invalid structure: (${sourceNode.type}) --${edge.type}--> (${targetNode.type}) `); + } + + const newEdgeId = generateUuid(); + + const { diagramElements } = addOrGetDrd({ definitions, drdIndex }); + + // Remove existing + const removedDmnEdge = removeFirstMatchIfPresent( + diagramElements, + (e) => e.__$$element === "dmndi:DMNEdge" && e["@_dmnElementRef"] === existingEdgeId + ) as Normalized | undefined; + + const newWaypoints = keepWaypoints + ? [ + getPointForHandle({ bounds: sourceNode.bounds, handle: edge.sourceHandle }), + ...(removedDmnEdge?.["di:waypoint"] ?? []).slice(1, -1), // Slicing an empty array will always return an empty array, so it's ok. + getPointForHandle({ bounds: targetNode.bounds, handle: edge.targetHandle }), + ] + : [ + getPointForHandle({ bounds: sourceNode.bounds, handle: edge.sourceHandle }), + getPointForHandle({ bounds: targetNode.bounds, handle: edge.targetHandle }), + ]; + + const newDmnEdge: Unpacked = { + __$$element: "dmndi:DMNEdge", + "@_id": + withoutDiscreteAutoPosinitioningMarker(removedDmnEdge?.["@_id"] ?? generateUuid()) + + (edge.autoPositionedEdgeMarker ?? ""), + "@_dmnElementRef": existingEdgeId ?? newEdgeId, + "@_sourceElement": sourceNode.shapeId, + "@_targetElement": targetNode.shapeId, + "di:waypoint": newWaypoints, + }; + + // Replace with the new one. + diagramElements.push(newDmnEdge); + + repopulateInputDataAndDecisionsOnAllDecisionServices({ definitions }); + + return { newDmnEdge }; +} + function doesInformationRequirementsPointTo(a: Normalized, nodeId: string) { return ( a.requiredInput?.["@_href"] === `${nodeId}` || // From d95740b9477f655d9b22805b1906e5c83bbae5f6 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Mon, 9 Sep 2024 15:51:38 +0200 Subject: [PATCH 14/40] dmnElementRef in format [namespace]:[id] --- .../edges/usePotentialWaypointControls.ts | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 13e3eace4c9..5a9694d4884 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -84,8 +84,12 @@ export function usePotentialWaypointControls( return; } - // TODO doc comment if (edgeIndex === undefined) { + /** + * This means we are adding a first wayipoint to one of following edges: + * - an edge in a non default DRD + * - an edge targeting an external node + */ dmnEditorStoreApi.setState((state) => { const nodesById = state.computed(state).getDiagramData(externalModelsByNamespace).nodesById; const edge = state.computed(state).getDiagramData(externalModelsByNamespace).edgesById.get(edgeId); @@ -150,7 +154,7 @@ export function usePotentialWaypointControls( shapeId: edge.data?.dmnShapeTarget["@_id"], }, keepWaypoints: false, - existingEdgeId: edgeId, // TODO include external edge namespace + existingEdgeId: targetData.dmnObjectQName.prefix + ":" + edgeId, // produces value like: included0:_2081EEE3-7B1B-48B3-B3B9-944F0A013CF1 }); } else { addEdge({ @@ -205,7 +209,17 @@ export function usePotentialWaypointControls( } dmnEditorStoreApi.setState((state) => { - const dmnEdgeIndex = state.computed(state).indexedDrd().dmnEdgesByDmnElementRef.get(edgeId)?.index; + const edge = state.computed(state).getDiagramData(externalModelsByNamespace).edgesById.get(edgeId); + const targetData = state + .computed(state) + .getDiagramData(externalModelsByNamespace) + .nodesById.get(edge!.target)?.data; + const dmnEdgeIndex = state + .computed(state) + .indexedDrd() + .dmnEdgesByDmnElementRef.get( + (targetData?.dmnObjectQName.prefix ? targetData?.dmnObjectQName.prefix + ":" : "") + edgeId + )?.index; if (dmnEdgeIndex === undefined) { console.debug(`DMN MUTATION: DMNEdge for '${edgeId}' edge has missing index.`); return; From ff2c7fc431260954acd216a83dd619db6a807aee Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Mon, 9 Sep 2024 16:03:20 +0200 Subject: [PATCH 15/40] documentation --- .../src/diagram/edges/usePotentialWaypointControls.ts | 6 ++++++ packages/dmn-editor/src/mutations/addEdgeWaypoint.ts | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 5a9694d4884..1a0f8d1b199 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -127,6 +127,9 @@ export function usePotentialWaypointControls( } if (targetData.dmnObjectQName.prefix) { + /** + * This means we are adding a first wayipoint to an edge targeting an external node + */ addEdgeTargetingExternalNode({ definitions: state.dmn.model.definitions, drdIndex: state.computed(state).getDrdIndex(), @@ -157,6 +160,9 @@ export function usePotentialWaypointControls( existingEdgeId: targetData.dmnObjectQName.prefix + ":" + edgeId, // produces value like: included0:_2081EEE3-7B1B-48B3-B3B9-944F0A013CF1 }); } else { + /** + * This means we are adding a first wayipoint to an edge in a non default DRD + */ addEdge({ definitions: state.dmn.model.definitions, drdIndex: state.computed(state).getDrdIndex(), diff --git a/packages/dmn-editor/src/mutations/addEdgeWaypoint.ts b/packages/dmn-editor/src/mutations/addEdgeWaypoint.ts index 282865f0c5e..d95fd629788 100644 --- a/packages/dmn-editor/src/mutations/addEdgeWaypoint.ts +++ b/packages/dmn-editor/src/mutations/addEdgeWaypoint.ts @@ -38,7 +38,7 @@ export function addEdgeWaypoint({ const diagramElement = diagramElements[edgeIndex]; if (diagramElement.__$$element !== "dmndi:DMNEdge") { - throw new Error("DMN MUTATION: Can't remove a waypoint from an element that is not a DMNEdge."); + throw new Error("DMN MUTATION: Can't add a waypoint for an element that is not a DMNEdge."); } if (beforeIndex > (diagramElement["di:waypoint"]?.length ?? 0) - 1) { From dda9611265999c6118fd30ea74dcafc341ece52a Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Fri, 13 Sep 2024 11:38:15 +0200 Subject: [PATCH 16/40] allowExternalTarget refactoring --- .../dmn-editor/src/diagram/connections/isValidConnection.ts | 6 ++++-- packages/dmn-editor/src/mutations/addEdge.ts | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts index 0ac384e4ce4..33f177c8e02 100644 --- a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts +++ b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts @@ -40,7 +40,9 @@ export function _checkIsValidConnection( sourceNode: { type?: string; data: DmnDiagramNodeData } | undefined, targetNode: { type?: string; data: DmnDiagramNodeData } | undefined, edgeType: string | null | undefined, - allowExternalTarget?: boolean + extraArg?: { + allowExternalTarget: boolean; + } ) { if (!sourceNode?.type || !targetNode?.type || !edgeType) { return false; @@ -48,7 +50,7 @@ export function _checkIsValidConnection( // External nodes cannot be targeted by default // However there are exceptions, for example adding a waypoint on the edge - if (!allowExternalTarget && targetNode.data.dmnObjectQName.prefix) { + if (!extraArg?.allowExternalTarget && targetNode.data.dmnObjectQName.prefix) { return false; } diff --git a/packages/dmn-editor/src/mutations/addEdge.ts b/packages/dmn-editor/src/mutations/addEdge.ts index 3909648d388..18ec3bf95d5 100644 --- a/packages/dmn-editor/src/mutations/addEdge.ts +++ b/packages/dmn-editor/src/mutations/addEdge.ts @@ -227,7 +227,7 @@ export function addEdgeTargetingExternalNode({ keepWaypoints: boolean; existingEdgeId?: string; }) { - if (!_checkIsValidConnection(sourceNode, targetNode, edge.type, true)) { + if (!_checkIsValidConnection(sourceNode, targetNode, edge.type, { allowExternalTarget: true })) { throw new Error(`DMN MUTATION: Invalid structure: (${sourceNode.type}) --${edge.type}--> (${targetNode.type}) `); } From ba8b40d4b90c25176e286746408779a1485f7d7c Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Fri, 13 Sep 2024 14:40:22 +0200 Subject: [PATCH 17/40] remove target.qname.prefix usage --- .../edges/usePotentialWaypointControls.ts | 14 ++----------- .../src/store/computed/computeDiagramData.ts | 21 +++++++++++++++++-- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 1a0f8d1b199..4374eb18f01 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -157,7 +157,7 @@ export function usePotentialWaypointControls( shapeId: edge.data?.dmnShapeTarget["@_id"], }, keepWaypoints: false, - existingEdgeId: targetData.dmnObjectQName.prefix + ":" + edgeId, // produces value like: included0:_2081EEE3-7B1B-48B3-B3B9-944F0A013CF1 + existingEdgeId: edgeId, }); } else { /** @@ -215,17 +215,7 @@ export function usePotentialWaypointControls( } dmnEditorStoreApi.setState((state) => { - const edge = state.computed(state).getDiagramData(externalModelsByNamespace).edgesById.get(edgeId); - const targetData = state - .computed(state) - .getDiagramData(externalModelsByNamespace) - .nodesById.get(edge!.target)?.data; - const dmnEdgeIndex = state - .computed(state) - .indexedDrd() - .dmnEdgesByDmnElementRef.get( - (targetData?.dmnObjectQName.prefix ? targetData?.dmnObjectQName.prefix + ":" : "") + edgeId - )?.index; + const dmnEdgeIndex = state.computed(state).indexedDrd().dmnEdgesByDmnElementRef.get(edgeId)?.index; if (dmnEdgeIndex === undefined) { console.debug(`DMN MUTATION: DMNEdge for '${edgeId}' edge has missing index.`); return; diff --git a/packages/dmn-editor/src/store/computed/computeDiagramData.ts b/packages/dmn-editor/src/store/computed/computeDiagramData.ts index c3d8fcf0ab2..2a28a4e9573 100644 --- a/packages/dmn-editor/src/store/computed/computeDiagramData.ts +++ b/packages/dmn-editor/src/store/computed/computeDiagramData.ts @@ -154,7 +154,13 @@ export function computeDiagramData( }; // requirements - ackRequirementEdges(definitions["@_namespace"], definitions["@_namespace"], definitions.drgElement, ackEdge); + ackRequirementEdges( + definitions, + definitions["@_namespace"], + definitions["@_namespace"], + definitions.drgElement, + ackEdge + ); // associations (definitions.artifact ?? []).forEach((dmnObject, index) => { @@ -284,6 +290,7 @@ export function computeDiagramData( (acc, [namespace, externalDmn]) => { // Taking advantage of the loop to add the edges here... ackRequirementEdges( + definitions, definitions["@_namespace"], externalDmn.model.definitions["@_namespace"], externalDmn.model.definitions.drgElement, @@ -404,6 +411,7 @@ export function computeDiagramData( } function ackRequirementEdges( + definitions: State["dmn"]["model"]["definitions"], thisDmnsNamespace: string, drgElementsNamespace: string, drgElements: Normalized["drgElement"], @@ -416,8 +424,17 @@ function ackRequirementEdges( if (dmnObject.__$$element === "decision") { (dmnObject.informationRequirement ?? []).forEach((ir, index) => { const irHref = parseXmlHref((ir.requiredDecision ?? ir.requiredInput)!["@_href"]); + let finalIncludedIndex = -1; + let includedIndex = 0; + while (definitions[`@_xmlns:included${includedIndex}`]) { + if (definitions[`@_xmlns:included${includedIndex}`] === namespace) { + finalIncludedIndex = includedIndex; + break; + } + includedIndex++; + } ackEdge({ - id: ir["@_id"]!, + id: (finalIncludedIndex > -1 ? `included${finalIncludedIndex}:` : "") + ir["@_id"]!, dmnObject: { namespace: drgElementsNamespace, type: dmnObject.__$$element, From e3d0b79173cc134142e133ab5b3073e4538a33cf Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Fri, 13 Sep 2024 14:59:58 +0200 Subject: [PATCH 18/40] remove non used code --- .../src/store/computed/computeDiagramData.ts | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/packages/dmn-editor/src/store/computed/computeDiagramData.ts b/packages/dmn-editor/src/store/computed/computeDiagramData.ts index 2a28a4e9573..d789f89cad8 100644 --- a/packages/dmn-editor/src/store/computed/computeDiagramData.ts +++ b/packages/dmn-editor/src/store/computed/computeDiagramData.ts @@ -125,20 +125,6 @@ export function computeDiagramData( selectedEdgesById.set(edge.id, edge); } - if (!edge.data?.dmnEdge) { - // it may be an DMNEdge targetting external node - // in such case we need to search using edge source and target shapes - // https://github.com/apache/incubator-kie-issues/issues/886 - const shapeSourceId = edgesById.get(edge.id)?.data?.dmnShapeSource?.["@_id"]; - const shapeTargetId = edgesById.get(edge.id)?.data?.dmnShapeTarget?.["@_id"]; - indexedDrd.dmnEdgesByDmnElementRef.forEach((e, key) => { - if (edge.data && e["@_sourceElement"] === shapeSourceId && e["@_targetElement"] === shapeTargetId) { - edge.data.dmnEdge = e; - return; - } - }); - } - edges.push(edge); drgEdges.push({ id, sourceId: source, targetId: target, dmnObject }); From 4ea5a26a911c35ae0cc01be00227d96b939515a8 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Fri, 13 Sep 2024 17:02:41 +0200 Subject: [PATCH 19/40] remove addEdgeTargetingExternal --- .../edges/usePotentialWaypointControls.ts | 97 ++++++------------- packages/dmn-editor/src/mutations/addEdge.ts | 93 +++--------------- 2 files changed, 41 insertions(+), 149 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 4374eb18f01..3cb318d314d 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -26,7 +26,7 @@ import { DC__Point } from "@kie-tools/dmn-marshaller/dist/schemas/dmn-1_5/ts-gen import { DmnDiagramNodeData } from "../nodes/Nodes"; import { DmnDiagramEdgeData } from "./Edges"; import { useExternalModels } from "../../includedModels/DmnEditorDependenciesContext"; -import { addEdge, addEdgeTargetingExternalNode } from "../../mutations/addEdge"; +import { addEdge } from "../../mutations/addEdge"; import { EdgeType, NodeType } from "../connections/graphStructure"; import { PositionalNodeHandleId } from "../connections/PositionalNodeHandles"; import { getHandlePosition } from "../maths/DmnMaths"; @@ -126,72 +126,35 @@ export function usePotentialWaypointControls( return; } - if (targetData.dmnObjectQName.prefix) { - /** - * This means we are adding a first wayipoint to an edge targeting an external node - */ - addEdgeTargetingExternalNode({ - definitions: state.dmn.model.definitions, - drdIndex: state.computed(state).getDrdIndex(), - edge: { - type: edge.type as EdgeType, - targetHandle: getHandlePosition({ shapeBounds: edgeTargetBounds, waypoint: snappedPotentialWaypoint }) - .handlePosition as PositionalNodeHandleId, - sourceHandle: getHandlePosition({ shapeBounds: edgeSourceBounds, waypoint: snappedPotentialWaypoint }) - .handlePosition as PositionalNodeHandleId, - autoPositionedEdgeMarker: undefined, - }, - sourceNode: { - type: sourceType as NodeType, - data: sourceData, - href: edge.source, - bounds: edgeSourceBounds, - shapeId: edge.data?.dmnShapeSource["@_id"], - }, - targetNode: { - type: targetType as NodeType, - href: edge.target, - data: targetData, - bounds: edgeTargetBounds, - index: nodesById.get(edge.target)?.data.index ?? 0, - shapeId: edge.data?.dmnShapeTarget["@_id"], - }, - keepWaypoints: false, - existingEdgeId: edgeId, - }); - } else { - /** - * This means we are adding a first wayipoint to an edge in a non default DRD - */ - addEdge({ - definitions: state.dmn.model.definitions, - drdIndex: state.computed(state).getDrdIndex(), - edge: { - type: edge.type as EdgeType, - targetHandle: getHandlePosition({ shapeBounds: edgeTargetBounds, waypoint: snappedPotentialWaypoint }) - .handlePosition as PositionalNodeHandleId, - sourceHandle: getHandlePosition({ shapeBounds: edgeSourceBounds, waypoint: snappedPotentialWaypoint }) - .handlePosition as PositionalNodeHandleId, - autoPositionedEdgeMarker: undefined, - }, - sourceNode: { - type: sourceType as NodeType, - data: sourceData, - href: edge.source, - bounds: edgeSourceBounds, - shapeId: edge.data?.dmnShapeSource["@_id"], - }, - targetNode: { - type: targetType as NodeType, - href: edge.target, - data: targetData, - bounds: edgeTargetBounds, - index: nodesById.get(edge.target)?.data.index ?? 0, - shapeId: edge.data?.dmnShapeTarget["@_id"], - }, - keepWaypoints: false, - }); - } + addEdge({ + definitions: state.dmn.model.definitions, + drdIndex: state.computed(state).getDrdIndex(), + edge: { + type: edge.type as EdgeType, + targetHandle: getHandlePosition({ shapeBounds: edgeTargetBounds, waypoint: snappedPotentialWaypoint }) + .handlePosition as PositionalNodeHandleId, + sourceHandle: getHandlePosition({ shapeBounds: edgeSourceBounds, waypoint: snappedPotentialWaypoint }) + .handlePosition as PositionalNodeHandleId, + autoPositionedEdgeMarker: undefined, + }, + sourceNode: { + type: sourceType as NodeType, + data: sourceData, + href: edge.source, + bounds: edgeSourceBounds, + shapeId: edge.data?.dmnShapeSource["@_id"], + }, + targetNode: { + type: targetType as NodeType, + href: edge.target, + data: targetData, + bounds: edgeTargetBounds, + index: nodesById.get(edge.target)?.data.index ?? 0, + shapeId: edge.data?.dmnShapeTarget["@_id"], + }, + keepWaypoints: false, + extraArg: { requirementEdgeTargetingExternalNodeId: targetData.dmnObjectQName.prefix ? edgeId : undefined }, + }); console.debug(`DMN MUTATION: DMNEdge for '${edgeId}' edge was added into diagram.`); }); diff --git a/packages/dmn-editor/src/mutations/addEdge.ts b/packages/dmn-editor/src/mutations/addEdge.ts index 18ec3bf95d5..1b08c4c4e22 100644 --- a/packages/dmn-editor/src/mutations/addEdge.ts +++ b/packages/dmn-editor/src/mutations/addEdge.ts @@ -48,6 +48,7 @@ export function addEdge({ targetNode, edge, keepWaypoints, + extraArg, }: { definitions: Normalized; drdIndex: number; @@ -73,14 +74,21 @@ export function addEdge({ autoPositionedEdgeMarker: AutoPositionedEdgeMarker | undefined; }; keepWaypoints: boolean; + extraArg?: { + requirementEdgeTargetingExternalNodeId: string | undefined; + }; }) { - if (!_checkIsValidConnection(sourceNode, targetNode, edge.type)) { + if ( + !_checkIsValidConnection(sourceNode, targetNode, edge.type, { + allowExternalTarget: !!extraArg!.requirementEdgeTargetingExternalNodeId, + }) + ) { throw new Error(`DMN MUTATION: Invalid structure: (${sourceNode.type}) --${edge.type}--> (${targetNode.type}) `); } const newEdgeId = generateUuid(); - let existingEdgeId: string | undefined = undefined; + let existingEdgeId: string | undefined = extraArg!.requirementEdgeTargetingExternalNodeId ?? undefined; // Associations if (edge.type === EDGE_TYPES.association) { @@ -108,7 +116,7 @@ export function addEdge({ }); } // Requirements - else { + else if (!extraArg!.requirementEdgeTargetingExternalNodeId) { const requirements = getRequirementsFromEdge(sourceNode, newEdgeId, edge.type); const drgElement = definitions.drgElement![targetNode.index] as Normalized; // We cast to tDecision here because it has all three types of requirement. if (requirements?.informationRequirement) { @@ -192,85 +200,6 @@ export function addEdge({ return { newDmnEdge }; } -export function addEdgeTargetingExternalNode({ - definitions, - drdIndex, - sourceNode, - targetNode, - edge, - keepWaypoints, - existingEdgeId, -}: { - definitions: Normalized; - drdIndex: number; - sourceNode: { - type: NodeType; - data: DmnDiagramNodeData; - href: string; - bounds: DC__Bounds; - shapeId: string | undefined; - }; - targetNode: { - type: NodeType; - data: DmnDiagramNodeData; - href: string; - bounds: DC__Bounds; - shapeId: string | undefined; - index: number; - }; - edge: { - type: EdgeType; - targetHandle: PositionalNodeHandleId; - sourceHandle: PositionalNodeHandleId; - autoPositionedEdgeMarker: AutoPositionedEdgeMarker | undefined; - }; - keepWaypoints: boolean; - existingEdgeId?: string; -}) { - if (!_checkIsValidConnection(sourceNode, targetNode, edge.type, { allowExternalTarget: true })) { - throw new Error(`DMN MUTATION: Invalid structure: (${sourceNode.type}) --${edge.type}--> (${targetNode.type}) `); - } - - const newEdgeId = generateUuid(); - - const { diagramElements } = addOrGetDrd({ definitions, drdIndex }); - - // Remove existing - const removedDmnEdge = removeFirstMatchIfPresent( - diagramElements, - (e) => e.__$$element === "dmndi:DMNEdge" && e["@_dmnElementRef"] === existingEdgeId - ) as Normalized | undefined; - - const newWaypoints = keepWaypoints - ? [ - getPointForHandle({ bounds: sourceNode.bounds, handle: edge.sourceHandle }), - ...(removedDmnEdge?.["di:waypoint"] ?? []).slice(1, -1), // Slicing an empty array will always return an empty array, so it's ok. - getPointForHandle({ bounds: targetNode.bounds, handle: edge.targetHandle }), - ] - : [ - getPointForHandle({ bounds: sourceNode.bounds, handle: edge.sourceHandle }), - getPointForHandle({ bounds: targetNode.bounds, handle: edge.targetHandle }), - ]; - - const newDmnEdge: Unpacked = { - __$$element: "dmndi:DMNEdge", - "@_id": - withoutDiscreteAutoPosinitioningMarker(removedDmnEdge?.["@_id"] ?? generateUuid()) + - (edge.autoPositionedEdgeMarker ?? ""), - "@_dmnElementRef": existingEdgeId ?? newEdgeId, - "@_sourceElement": sourceNode.shapeId, - "@_targetElement": targetNode.shapeId, - "di:waypoint": newWaypoints, - }; - - // Replace with the new one. - diagramElements.push(newDmnEdge); - - repopulateInputDataAndDecisionsOnAllDecisionServices({ definitions }); - - return { newDmnEdge }; -} - function doesInformationRequirementsPointTo(a: Normalized, nodeId: string) { return ( a.requiredInput?.["@_href"] === `${nodeId}` || // From 411814d500f325d14ba0bbd05c46f06e507c6f95 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Mon, 16 Sep 2024 14:08:08 +0200 Subject: [PATCH 20/40] fix onConnect --- packages/dmn-editor/src/mutations/addEdge.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/dmn-editor/src/mutations/addEdge.ts b/packages/dmn-editor/src/mutations/addEdge.ts index 1b08c4c4e22..4a27d297482 100644 --- a/packages/dmn-editor/src/mutations/addEdge.ts +++ b/packages/dmn-editor/src/mutations/addEdge.ts @@ -78,17 +78,16 @@ export function addEdge({ requirementEdgeTargetingExternalNodeId: string | undefined; }; }) { - if ( - !_checkIsValidConnection(sourceNode, targetNode, edge.type, { - allowExternalTarget: !!extraArg!.requirementEdgeTargetingExternalNodeId, - }) - ) { + const externalTargetAllowed = extraArg !== undefined && extraArg.requirementEdgeTargetingExternalNodeId !== undefined; + if (!_checkIsValidConnection(sourceNode, targetNode, edge.type, { allowExternalTarget: externalTargetAllowed })) { throw new Error(`DMN MUTATION: Invalid structure: (${sourceNode.type}) --${edge.type}--> (${targetNode.type}) `); } const newEdgeId = generateUuid(); - let existingEdgeId: string | undefined = extraArg!.requirementEdgeTargetingExternalNodeId ?? undefined; + let existingEdgeId: string | undefined = externalTargetAllowed + ? extraArg!.requirementEdgeTargetingExternalNodeId + : undefined; // Associations if (edge.type === EDGE_TYPES.association) { @@ -116,7 +115,7 @@ export function addEdge({ }); } // Requirements - else if (!extraArg!.requirementEdgeTargetingExternalNodeId) { + else if (!externalTargetAllowed) { const requirements = getRequirementsFromEdge(sourceNode, newEdgeId, edge.type); const drgElement = definitions.drgElement![targetNode.index] as Normalized; // We cast to tDecision here because it has all three types of requirement. if (requirements?.informationRequirement) { From 5bad3f8fb94d48b32a100e776a6a93e217cc7582 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Mon, 16 Sep 2024 15:56:33 +0200 Subject: [PATCH 21/40] fix deleteEdge --- .../dmn-editor/src/mutations/deleteEdge.ts | 53 +++++++++---------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/packages/dmn-editor/src/mutations/deleteEdge.ts b/packages/dmn-editor/src/mutations/deleteEdge.ts index 3cc43c8126c..83082e3a927 100644 --- a/packages/dmn-editor/src/mutations/deleteEdge.ts +++ b/packages/dmn-editor/src/mutations/deleteEdge.ts @@ -44,37 +44,34 @@ export function deleteEdge({ edge: { id: string; dmnObject: DmnDiagramEdgeData["dmnObject"] }; mode: EdgeDeletionMode; }) { - if (edge.dmnObject.namespace !== definitions["@_namespace"]) { - console.debug("DMN MUTATION: Can't delete an edge that's from an external node."); - return { dmnEdge: undefined }; - } - - const dmnObjects: Normalized["drgElement" | "artifact"] = - switchExpression(edge?.dmnObject.type, { - association: definitions.artifact, - group: definitions.artifact, - default: definitions.drgElement, - }) ?? []; + if (edge.dmnObject.namespace === definitions["@_namespace"]) { + const dmnObjects: Normalized["drgElement" | "artifact"] = + switchExpression(edge?.dmnObject.type, { + association: definitions.artifact, + group: definitions.artifact, + default: definitions.drgElement, + }) ?? []; - const dmnObjectIndex = dmnObjects.findIndex((d) => d["@_id"] === edge.dmnObject.id); - if (dmnObjectIndex < 0) { - throw new Error(`DMN MUTATION: Can't find DMN element with ID ${edge.dmnObject.id}`); - } + const dmnObjectIndex = dmnObjects.findIndex((d) => d["@_id"] === edge.dmnObject.id); + if (dmnObjectIndex < 0) { + throw new Error(`DMN MUTATION: Can't find DMN element with ID ${edge.dmnObject.id}`); + } - if (mode === EdgeDeletionMode.FROM_DRG_AND_ALL_DRDS) { - const requirements = - switchExpression(edge?.dmnObject.requirementType, { - // Casting to DMN15__tDecision because if has all types of requirement, but not necessarily that's true. - informationRequirement: (dmnObjects[dmnObjectIndex] as Normalized).informationRequirement, - knowledgeRequirement: (dmnObjects[dmnObjectIndex] as Normalized).knowledgeRequirement, - authorityRequirement: (dmnObjects[dmnObjectIndex] as Normalized).authorityRequirement, - association: dmnObjects, - }) ?? []; + if (mode === EdgeDeletionMode.FROM_DRG_AND_ALL_DRDS) { + const requirements = + switchExpression(edge?.dmnObject.requirementType, { + // Casting to DMN15__tDecision because if has all types of requirement, but not necessarily that's true. + informationRequirement: (dmnObjects[dmnObjectIndex] as Normalized).informationRequirement, + knowledgeRequirement: (dmnObjects[dmnObjectIndex] as Normalized).knowledgeRequirement, + authorityRequirement: (dmnObjects[dmnObjectIndex] as Normalized).authorityRequirement, + association: dmnObjects, + }) ?? []; - // Deleting the requirement - const requirementIndex = (requirements ?? []).findIndex((d) => d["@_id"] === edge.id); - if (requirementIndex >= 0) { - requirements?.splice(requirementIndex, 1); + // Deleting the requirement + const requirementIndex = (requirements ?? []).findIndex((d) => d["@_id"] === edge.id); + if (requirementIndex >= 0) { + requirements?.splice(requirementIndex, 1); + } } } From 8b9878794af49500aa46642d4cd376b1589c8ba6 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Tue, 17 Sep 2024 12:39:33 +0200 Subject: [PATCH 22/40] Object.entries --- packages/dmn-editor/src/mutations/deleteEdge.ts | 2 ++ .../src/store/computed/computeDiagramData.ts | 16 ++++++---------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/dmn-editor/src/mutations/deleteEdge.ts b/packages/dmn-editor/src/mutations/deleteEdge.ts index 83082e3a927..1f917f580a8 100644 --- a/packages/dmn-editor/src/mutations/deleteEdge.ts +++ b/packages/dmn-editor/src/mutations/deleteEdge.ts @@ -76,6 +76,8 @@ export function deleteEdge({ } // Deleting the DMNEdge's + // needs to be executed even if edge.dmnObject.namespace !== definitions["@_namespace"] + // As they may be DMNEdge depictions for edges targeting external nodes let deletedDmnEdgeOnCurrentDrd: Normalized | undefined; const drdCount = (definitions["dmndi:DMNDI"]?.["dmndi:DMNDiagram"] ?? []).length; diff --git a/packages/dmn-editor/src/store/computed/computeDiagramData.ts b/packages/dmn-editor/src/store/computed/computeDiagramData.ts index d789f89cad8..1b16a7412fe 100644 --- a/packages/dmn-editor/src/store/computed/computeDiagramData.ts +++ b/packages/dmn-editor/src/store/computed/computeDiagramData.ts @@ -410,17 +410,13 @@ function ackRequirementEdges( if (dmnObject.__$$element === "decision") { (dmnObject.informationRequirement ?? []).forEach((ir, index) => { const irHref = parseXmlHref((ir.requiredDecision ?? ir.requiredInput)!["@_href"]); - let finalIncludedIndex = -1; - let includedIndex = 0; - while (definitions[`@_xmlns:included${includedIndex}`]) { - if (definitions[`@_xmlns:included${includedIndex}`] === namespace) { - finalIncludedIndex = includedIndex; - break; - } - includedIndex++; - } + // Search for definitions[`@_xmlns:included${includedIndex}`] that holds proper namespace + // and store the proper prefix: `included${includedIndex}` value + const namespaceIncludedPrefix = Object.entries(definitions) + .find(([key, val]) => val === namespace)?.[0] + ?.replace("@_xmlns:", ""); ackEdge({ - id: (finalIncludedIndex > -1 ? `included${finalIncludedIndex}:` : "") + ir["@_id"]!, + id: (namespaceIncludedPrefix ? `${namespaceIncludedPrefix}:` : "") + ir["@_id"]!, dmnObject: { namespace: drgElementsNamespace, type: dmnObject.__$$element, From 3de7056ed054d551fc482835b88db030aa1a7bd4 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 18 Sep 2024 13:28:02 +0200 Subject: [PATCH 23/40] fix typo --- .../src/diagram/edges/usePotentialWaypointControls.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 3cb318d314d..69554098a2f 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -86,7 +86,7 @@ export function usePotentialWaypointControls( if (edgeIndex === undefined) { /** - * This means we are adding a first wayipoint to one of following edges: + * This means we are adding a first waypoint to one of following edges: * - an edge in a non default DRD * - an edge targeting an external node */ From b28961d11a6a89552889e42dfa87e32707b8422a Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 18 Sep 2024 14:12:21 +0200 Subject: [PATCH 24/40] logs --- .../diagram/edges/usePotentialWaypointControls.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 69554098a2f..72c38f1f74a 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -98,16 +98,20 @@ export function usePotentialWaypointControls( edge.type === undefined || edge.data === undefined || edge.data?.dmnShapeSource === undefined || - edge.data?.dmnShapeTarget === undefined + edge.data?.dmnShapeTarget == undefined ) { - console.debug(`DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram.`); + console.debug( + `DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data edge: ${edge}, edge.type: ${edge?.type}, edge.data: ${edge?.data}` + ); return; } const edgeSourceBounds = edge.data?.dmnShapeSource["dc:Bounds"]; const edgeTargetBounds = edge.data?.dmnShapeTarget["dc:Bounds"]; if (edgeSourceBounds === undefined || edgeTargetBounds === undefined) { - console.debug(`DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram.`); + console.debug( + `DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data edgeSourceBounds: ${edgeSourceBounds}, edgeTargetBounds: ${edgeTargetBounds}` + ); return; } @@ -122,7 +126,9 @@ export function usePotentialWaypointControls( targetData === undefined || targetType === undefined ) { - console.debug(`DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram.`); + console.debug( + `DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data sourceData: ${sourceData}, sourceType: ${sourceType}, targetData: ${targetData}, targetType: ${targetType}` + ); return; } From 1b7d8075087faa3dce1ff76279b21c775ab5c1cb Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 18 Sep 2024 14:44:50 +0200 Subject: [PATCH 25/40] simplified null checks --- packages/dmn-editor/src/diagram/Diagram.tsx | 2 +- .../edges/usePotentialWaypointControls.ts | 37 +++++++------------ 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/packages/dmn-editor/src/diagram/Diagram.tsx b/packages/dmn-editor/src/diagram/Diagram.tsx index 123aba83e25..80523d731b1 100644 --- a/packages/dmn-editor/src/diagram/Diagram.tsx +++ b/packages/dmn-editor/src/diagram/Diagram.tsx @@ -216,7 +216,7 @@ export const Diagram = React.forwardRef { const nodesById = state.computed(state).getDiagramData(externalModelsByNamespace).nodesById; const edge = state.computed(state).getDiagramData(externalModelsByNamespace).edgesById.get(edgeId); - if ( - edge === undefined || - edge.type === undefined || - edge.data === undefined || - edge.data?.dmnShapeSource === undefined || - edge.data?.dmnShapeTarget == undefined - ) { + if (edge === undefined || edge.data?.dmnShapeSource === undefined || edge.data?.dmnShapeTarget == undefined) { console.debug( - `DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data edge: ${edge}, edge.type: ${edge?.type}, edge.data: ${edge?.data}` + `DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data edge: ${edge}, edge.data: ${edge?.data}` ); return; } @@ -115,19 +109,12 @@ export function usePotentialWaypointControls( return; } - const sourceData = nodesById.get(edge.source)?.data; - const sourceType = nodesById.get(edge.source)?.type; - const targetData = nodesById.get(edge.target)?.data; - const targetType = nodesById.get(edge.target)?.type; + const sourceNode = nodesById.get(edge.source); + const targetNode = nodesById.get(edge.target); - if ( - sourceData === undefined || - sourceType === undefined || - targetData === undefined || - targetType === undefined - ) { + if (sourceNode === undefined || targetNode === undefined) { console.debug( - `DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data sourceData: ${sourceData}, sourceType: ${sourceType}, targetData: ${targetData}, targetType: ${targetType}` + `DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data sourceNode: ${sourceNode}, targetNode: ${targetNode}` ); return; } @@ -144,22 +131,24 @@ export function usePotentialWaypointControls( autoPositionedEdgeMarker: undefined, }, sourceNode: { - type: sourceType as NodeType, - data: sourceData, + type: sourceNode.type as NodeType, + data: sourceNode.data, href: edge.source, bounds: edgeSourceBounds, shapeId: edge.data?.dmnShapeSource["@_id"], }, targetNode: { - type: targetType as NodeType, + type: targetNode.type as NodeType, href: edge.target, - data: targetData, + data: targetNode.data, bounds: edgeTargetBounds, index: nodesById.get(edge.target)?.data.index ?? 0, shapeId: edge.data?.dmnShapeTarget["@_id"], }, keepWaypoints: false, - extraArg: { requirementEdgeTargetingExternalNodeId: targetData.dmnObjectQName.prefix ? edgeId : undefined }, + extraArg: { + requirementEdgeTargetingExternalNodeId: targetNode.data.dmnObjectQName.prefix ? edgeId : undefined, + }, }); console.debug(`DMN MUTATION: DMNEdge for '${edgeId}' edge was added into diagram.`); From 302ec19703db4555ab34a7b17082aad270d4ee58 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Thu, 19 Sep 2024 08:16:54 +0200 Subject: [PATCH 26/40] review feedback --- .../dmn-editor/src/diagram/connections/isValidConnection.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts index 33f177c8e02..3942547afcb 100644 --- a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts +++ b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts @@ -50,7 +50,8 @@ export function _checkIsValidConnection( // External nodes cannot be targeted by default // However there are exceptions, for example adding a waypoint on the edge - if (!extraArg?.allowExternalTarget && targetNode.data.dmnObjectQName.prefix) { + const isExternalNode = targetNode.data.dmnObjectQName.prefix != undefined; + if (!extraArg?.allowExternalTarget && isExternalNode) { return false; } From cb56865ea4bf9162a8af79ad627d567e1b3b72c9 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Thu, 19 Sep 2024 08:23:04 +0200 Subject: [PATCH 27/40] review feedback --- .../src/diagram/edges/usePotentialWaypointControls.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 5d9590c6cda..942c32b15cb 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -119,6 +119,8 @@ export function usePotentialWaypointControls( return; } + const isExternalNode = targetNode.data.dmnObjectQName.prefix !== undefined; + addEdge({ definitions: state.dmn.model.definitions, drdIndex: state.computed(state).getDrdIndex(), @@ -147,7 +149,7 @@ export function usePotentialWaypointControls( }, keepWaypoints: false, extraArg: { - requirementEdgeTargetingExternalNodeId: targetNode.data.dmnObjectQName.prefix ? edgeId : undefined, + requirementEdgeTargetingExternalNodeId: isExternalNode ? edgeId : undefined, }, }); From 63c9187561578016e541931f8d4fa4c8ff58dab8 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Thu, 19 Sep 2024 17:19:06 +0200 Subject: [PATCH 28/40] remove extraArg --- .../src/diagram/connections/isValidConnection.ts | 4 ++-- .../diagram/edges/usePotentialWaypointControls.ts | 6 ++---- packages/dmn-editor/src/mutations/addEdge.ts | 12 ++++-------- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts index 3942547afcb..aa3aecb83e8 100644 --- a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts +++ b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts @@ -50,8 +50,8 @@ export function _checkIsValidConnection( // External nodes cannot be targeted by default // However there are exceptions, for example adding a waypoint on the edge - const isExternalNode = targetNode.data.dmnObjectQName.prefix != undefined; - if (!extraArg?.allowExternalTarget && isExternalNode) { + const isTargetExternalNode = targetNode.data.dmnObjectQName.prefix != undefined; + if (!extraArg?.allowExternalTarget && isTargetExternalNode) { return false; } diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 942c32b15cb..16c6f13cda3 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -119,7 +119,7 @@ export function usePotentialWaypointControls( return; } - const isExternalNode = targetNode.data.dmnObjectQName.prefix !== undefined; + const isTargetExternalNode = targetNode.data.dmnObjectQName.prefix !== undefined; addEdge({ definitions: state.dmn.model.definitions, @@ -148,9 +148,7 @@ export function usePotentialWaypointControls( shapeId: edge.data?.dmnShapeTarget["@_id"], }, keepWaypoints: false, - extraArg: { - requirementEdgeTargetingExternalNodeId: isExternalNode ? edgeId : undefined, - }, + requirementEdgeTargetingExternalNodeId: isTargetExternalNode ? edgeId : undefined, }); console.debug(`DMN MUTATION: DMNEdge for '${edgeId}' edge was added into diagram.`); diff --git a/packages/dmn-editor/src/mutations/addEdge.ts b/packages/dmn-editor/src/mutations/addEdge.ts index 4a27d297482..0e1faee9831 100644 --- a/packages/dmn-editor/src/mutations/addEdge.ts +++ b/packages/dmn-editor/src/mutations/addEdge.ts @@ -48,7 +48,7 @@ export function addEdge({ targetNode, edge, keepWaypoints, - extraArg, + requirementEdgeTargetingExternalNodeId, }: { definitions: Normalized; drdIndex: number; @@ -74,20 +74,16 @@ export function addEdge({ autoPositionedEdgeMarker: AutoPositionedEdgeMarker | undefined; }; keepWaypoints: boolean; - extraArg?: { - requirementEdgeTargetingExternalNodeId: string | undefined; - }; + requirementEdgeTargetingExternalNodeId?: string; }) { - const externalTargetAllowed = extraArg !== undefined && extraArg.requirementEdgeTargetingExternalNodeId !== undefined; + const externalTargetAllowed = requirementEdgeTargetingExternalNodeId !== undefined; if (!_checkIsValidConnection(sourceNode, targetNode, edge.type, { allowExternalTarget: externalTargetAllowed })) { throw new Error(`DMN MUTATION: Invalid structure: (${sourceNode.type}) --${edge.type}--> (${targetNode.type}) `); } const newEdgeId = generateUuid(); - let existingEdgeId: string | undefined = externalTargetAllowed - ? extraArg!.requirementEdgeTargetingExternalNodeId - : undefined; + let existingEdgeId: string | undefined = requirementEdgeTargetingExternalNodeId; // Associations if (edge.type === EDGE_TYPES.association) { From 20ebd5112b026c2fdea4f0f15686372272c006af Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 25 Sep 2024 13:57:11 +0200 Subject: [PATCH 29/40] MUTATION -> DIAGRAM --- .../diagram/edges/usePotentialWaypointControls.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 16c6f13cda3..b3f559b0305 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -95,7 +95,7 @@ export function usePotentialWaypointControls( const edge = state.computed(state).getDiagramData(externalModelsByNamespace).edgesById.get(edgeId); if (edge === undefined || edge.data?.dmnShapeSource === undefined || edge.data?.dmnShapeTarget == undefined) { console.debug( - `DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data edge: ${edge}, edge.data: ${edge?.data}` + `DMN DIAGRAM: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data edge: ${edge}, edge.data: ${edge?.data}` ); return; } @@ -104,7 +104,7 @@ export function usePotentialWaypointControls( if (edgeSourceBounds === undefined || edgeTargetBounds === undefined) { console.debug( - `DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data edgeSourceBounds: ${edgeSourceBounds}, edgeTargetBounds: ${edgeTargetBounds}` + `DMN DIAGRAM: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data edgeSourceBounds: ${edgeSourceBounds}, edgeTargetBounds: ${edgeTargetBounds}` ); return; } @@ -114,7 +114,7 @@ export function usePotentialWaypointControls( if (sourceNode === undefined || targetNode === undefined) { console.debug( - `DMN MUTATION: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data sourceNode: ${sourceNode}, targetNode: ${targetNode}` + `DMN DIAGRAM: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data sourceNode: ${sourceNode}, targetNode: ${targetNode}` ); return; } @@ -151,12 +151,12 @@ export function usePotentialWaypointControls( requirementEdgeTargetingExternalNodeId: isTargetExternalNode ? edgeId : undefined, }); - console.debug(`DMN MUTATION: DMNEdge for '${edgeId}' edge was added into diagram.`); + console.debug(`DMN DIAGRAM: DMNEdge for '${edgeId}' edge was added into diagram.`); }); } if (isExistingWaypoint(snappedPotentialWaypoint)) { - console.debug("Preventing overlapping waypoint creation."); + console.debug("DMN DIAGRAM: Preventing overlapping waypoint creation."); return; } @@ -175,7 +175,7 @@ export function usePotentialWaypointControls( dmnEditorStoreApi.setState((state) => { const dmnEdgeIndex = state.computed(state).indexedDrd().dmnEdgesByDmnElementRef.get(edgeId)?.index; if (dmnEdgeIndex === undefined) { - console.debug(`DMN MUTATION: DMNEdge for '${edgeId}' edge has missing index.`); + console.debug(`DMN DIAGRAM: DMNEdge for '${edgeId}' edge has missing index.`); return; } addEdgeWaypoint({ @@ -186,7 +186,7 @@ export function usePotentialWaypointControls( waypoint: snappedPotentialWaypoint, }); - console.debug(`DMN MUTATION: Waypoint on the DMNEdge for '${edgeId}' edge was added.`); + console.debug(`DMN DIAGRAM: Waypoint on the DMNEdge for '${edgeId}' edge was added.`); }); }, [ drdIndex, From e5eb1a04062b30d97bc94f3f908e2ec44cbff82e Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 25 Sep 2024 14:03:10 +0200 Subject: [PATCH 30/40] Update packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts Co-authored-by: Tiago Bento <1584568+tiagobento@users.noreply.github.com> --- .../src/diagram/edges/usePotentialWaypointControls.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index b3f559b0305..b414c732fd3 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -99,9 +99,9 @@ export function usePotentialWaypointControls( ); return; } + const edgeSourceBounds = edge.data?.dmnShapeSource["dc:Bounds"]; const edgeTargetBounds = edge.data?.dmnShapeTarget["dc:Bounds"]; - if (edgeSourceBounds === undefined || edgeTargetBounds === undefined) { console.debug( `DMN DIAGRAM: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data edgeSourceBounds: ${edgeSourceBounds}, edgeTargetBounds: ${edgeTargetBounds}` From f4207a874ad9b0fbed7324297a5210df68f17183 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 25 Sep 2024 14:03:49 +0200 Subject: [PATCH 31/40] Update packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts Co-authored-by: Tiago Bento <1584568+tiagobento@users.noreply.github.com> --- .../src/diagram/edges/usePotentialWaypointControls.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index b414c732fd3..1a8a67dc238 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -119,7 +119,7 @@ export function usePotentialWaypointControls( return; } - const isTargetExternalNode = targetNode.data.dmnObjectQName.prefix !== undefined; + const targetsExternalNode = targetNode.data.dmnObjectQName.prefix !== undefined; addEdge({ definitions: state.dmn.model.definitions, From bc8495ecbd1b68631eb5515ae9c9f309a71692ae Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 25 Sep 2024 14:05:53 +0200 Subject: [PATCH 32/40] targetsExternalNode --- .../src/diagram/edges/usePotentialWaypointControls.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 1a8a67dc238..1eb7c6944e3 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -99,7 +99,7 @@ export function usePotentialWaypointControls( ); return; } - + const edgeSourceBounds = edge.data?.dmnShapeSource["dc:Bounds"]; const edgeTargetBounds = edge.data?.dmnShapeTarget["dc:Bounds"]; if (edgeSourceBounds === undefined || edgeTargetBounds === undefined) { @@ -111,7 +111,6 @@ export function usePotentialWaypointControls( const sourceNode = nodesById.get(edge.source); const targetNode = nodesById.get(edge.target); - if (sourceNode === undefined || targetNode === undefined) { console.debug( `DMN DIAGRAM: We can not add DMNEdge for '${edgeId}' edge into diagram. There are missing data sourceNode: ${sourceNode}, targetNode: ${targetNode}` @@ -120,7 +119,6 @@ export function usePotentialWaypointControls( } const targetsExternalNode = targetNode.data.dmnObjectQName.prefix !== undefined; - addEdge({ definitions: state.dmn.model.definitions, drdIndex: state.computed(state).getDrdIndex(), @@ -148,7 +146,7 @@ export function usePotentialWaypointControls( shapeId: edge.data?.dmnShapeTarget["@_id"], }, keepWaypoints: false, - requirementEdgeTargetingExternalNodeId: isTargetExternalNode ? edgeId : undefined, + requirementEdgeTargetingExternalNodeId: targetsExternalNode ? edgeId : undefined, }); console.debug(`DMN DIAGRAM: DMNEdge for '${edgeId}' edge was added into diagram.`); From 1da182fc0e99d2e23572ce5a4b2d3b8420f90d6e Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 25 Sep 2024 14:16:09 +0200 Subject: [PATCH 33/40] throw error --- .../src/diagram/edges/usePotentialWaypointControls.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 1eb7c6944e3..c7f44a67b38 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -173,8 +173,7 @@ export function usePotentialWaypointControls( dmnEditorStoreApi.setState((state) => { const dmnEdgeIndex = state.computed(state).indexedDrd().dmnEdgesByDmnElementRef.get(edgeId)?.index; if (dmnEdgeIndex === undefined) { - console.debug(`DMN DIAGRAM: DMNEdge for '${edgeId}' edge has missing index.`); - return; + throw new Error(`DMN DIAGRAM: Diagram computed state does not contain DMNEdge for '${edgeId}' edge.`); } addEdgeWaypoint({ definitions: state.dmn.model.definitions, From 4ac0a99f1c15a95fe8ea8d28cc9c18bebad3559d Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 25 Sep 2024 14:38:04 +0200 Subject: [PATCH 34/40] is valid connection --- .../src/diagram/connections/isValidConnection.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts index aa3aecb83e8..0e960d8e232 100644 --- a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts +++ b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts @@ -40,9 +40,7 @@ export function _checkIsValidConnection( sourceNode: { type?: string; data: DmnDiagramNodeData } | undefined, targetNode: { type?: string; data: DmnDiagramNodeData } | undefined, edgeType: string | null | undefined, - extraArg?: { - allowExternalTarget: boolean; - } + extraArg?: { allowExternalTarget: boolean } ) { if (!sourceNode?.type || !targetNode?.type || !edgeType) { return false; @@ -50,8 +48,9 @@ export function _checkIsValidConnection( // External nodes cannot be targeted by default // However there are exceptions, for example adding a waypoint on the edge - const isTargetExternalNode = targetNode.data.dmnObjectQName.prefix != undefined; - if (!extraArg?.allowExternalTarget && isTargetExternalNode) { + const targetsExternalNode = targetNode.data.dmnObjectQName.prefix != undefined; + const allowExternalTarget = extraArg?.allowExternalTarget ?? false; + if (targetsExternalNode && !allowExternalTarget) { return false; } From 8eaa8b9de966d86fda1b7f0b819f052a2c0480bf Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Wed, 25 Sep 2024 15:07:35 +0200 Subject: [PATCH 35/40] dmnEdgeIndex --- .../src/diagram/edges/usePotentialWaypointControls.ts | 2 +- packages/dmn-editor/src/mutations/addEdgeWaypoint.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index c7f44a67b38..263ca3e1996 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -179,7 +179,7 @@ export function usePotentialWaypointControls( definitions: state.dmn.model.definitions, drdIndex, beforeIndex: i - 1, - edgeIndex: dmnEdgeIndex, + dmnEdgeIndex, waypoint: snappedPotentialWaypoint, }); diff --git a/packages/dmn-editor/src/mutations/addEdgeWaypoint.ts b/packages/dmn-editor/src/mutations/addEdgeWaypoint.ts index d95fd629788..8331ed9ca56 100644 --- a/packages/dmn-editor/src/mutations/addEdgeWaypoint.ts +++ b/packages/dmn-editor/src/mutations/addEdgeWaypoint.ts @@ -24,19 +24,19 @@ import { Normalized } from "../normalization/normalize"; export function addEdgeWaypoint({ definitions, drdIndex, - edgeIndex, + dmnEdgeIndex, beforeIndex, waypoint, }: { definitions: Normalized; drdIndex: number; - edgeIndex: number; + dmnEdgeIndex: number; beforeIndex: number; waypoint: DC__Point; }) { const { diagramElements } = addOrGetDrd({ definitions, drdIndex }); - const diagramElement = diagramElements[edgeIndex]; + const diagramElement = diagramElements[dmnEdgeIndex]; if (diagramElement.__$$element !== "dmndi:DMNEdge") { throw new Error("DMN MUTATION: Can't add a waypoint for an element that is not a DMNEdge."); } From 6d6cc5b153426fe1fd82f3d7a3725c4c5c06f5c1 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Thu, 26 Sep 2024 11:43:08 +0200 Subject: [PATCH 36/40] incorporate review feedback --- .../edges/usePotentialWaypointControls.ts | 4 ++- packages/dmn-editor/src/mutations/addEdge.ts | 28 +++++++++---------- .../src/store/computed/computeDiagramData.ts | 11 ++++---- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 263ca3e1996..20569bba1b5 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -30,6 +30,7 @@ import { addEdge } from "../../mutations/addEdge"; import { EdgeType, NodeType } from "../connections/graphStructure"; import { PositionalNodeHandleId } from "../connections/PositionalNodeHandles"; import { getHandlePosition } from "../maths/DmnMaths"; +import { xmlHrefToQName } from "../../xml/xmlHrefToQName"; export function usePotentialWaypointControls( waypoints: DC__Point[], @@ -119,6 +120,7 @@ export function usePotentialWaypointControls( } const targetsExternalNode = targetNode.data.dmnObjectQName.prefix !== undefined; + const informationRequirementQNameRelativeToThisDmn = xmlHrefToQName(edgeId, state.dmn.model.definitions); addEdge({ definitions: state.dmn.model.definitions, drdIndex: state.computed(state).getDrdIndex(), @@ -146,7 +148,7 @@ export function usePotentialWaypointControls( shapeId: edge.data?.dmnShapeTarget["@_id"], }, keepWaypoints: false, - requirementEdgeTargetingExternalNodeId: targetsExternalNode ? edgeId : undefined, + dmnElementRefOfDmnEdge: targetsExternalNode ? informationRequirementQNameRelativeToThisDmn : undefined, }); console.debug(`DMN DIAGRAM: DMNEdge for '${edgeId}' edge was added into diagram.`); diff --git a/packages/dmn-editor/src/mutations/addEdge.ts b/packages/dmn-editor/src/mutations/addEdge.ts index 0e1faee9831..e73d8f139c9 100644 --- a/packages/dmn-editor/src/mutations/addEdge.ts +++ b/packages/dmn-editor/src/mutations/addEdge.ts @@ -48,7 +48,7 @@ export function addEdge({ targetNode, edge, keepWaypoints, - requirementEdgeTargetingExternalNodeId, + dmnElementRefOfDmnEdge, }: { definitions: Normalized; drdIndex: number; @@ -74,16 +74,16 @@ export function addEdge({ autoPositionedEdgeMarker: AutoPositionedEdgeMarker | undefined; }; keepWaypoints: boolean; - requirementEdgeTargetingExternalNodeId?: string; + dmnElementRefOfDmnEdge?: string; }) { - const externalTargetAllowed = requirementEdgeTargetingExternalNodeId !== undefined; + const externalTargetAllowed = dmnElementRefOfDmnEdge !== undefined; if (!_checkIsValidConnection(sourceNode, targetNode, edge.type, { allowExternalTarget: externalTargetAllowed })) { throw new Error(`DMN MUTATION: Invalid structure: (${sourceNode.type}) --${edge.type}--> (${targetNode.type}) `); } const newEdgeId = generateUuid(); - let existingEdgeId: string | undefined = requirementEdgeTargetingExternalNodeId; + let existingRequirementOrAssociationId: string | undefined = dmnElementRefOfDmnEdge; // Associations if (edge.type === EDGE_TYPES.association) { @@ -101,13 +101,13 @@ export function addEdge({ definitions.artifact, (a) => a.__$$element === "association" && areAssociationsEquivalent(a, newAssociation) ); - existingEdgeId = removed?.["@_id"]; + existingRequirementOrAssociationId = removed?.["@_id"]; // Replace with the new one. definitions.artifact?.push({ __$$element: "association", ...newAssociation, - "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), + "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), }); } // Requirements @@ -119,11 +119,11 @@ export function addEdge({ const removed = removeFirstMatchIfPresent(drgElement.informationRequirement, (ir) => doesInformationRequirementsPointTo(ir, sourceNode.href) ); - existingEdgeId = removed?.["@_id"]; + existingRequirementOrAssociationId = removed?.["@_id"]; drgElement.informationRequirement?.push( ...requirements.informationRequirement.map((s) => ({ ...s, - "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), + "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), })) ); } @@ -133,11 +133,11 @@ export function addEdge({ const removed = removeFirstMatchIfPresent(drgElement.knowledgeRequirement, (kr) => doesKnowledgeRequirementsPointTo(kr, sourceNode.href) ); - existingEdgeId = removed?.["@_id"]; + existingRequirementOrAssociationId = removed?.["@_id"]; drgElement.knowledgeRequirement?.push( ...requirements.knowledgeRequirement.map((s) => ({ ...s, - "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), + "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), })) ); } @@ -147,11 +147,11 @@ export function addEdge({ const removed = removeFirstMatchIfPresent(drgElement.authorityRequirement, (ar) => doesAuthorityRequirementsPointTo(ar, sourceNode.href) ); - existingEdgeId = removed?.["@_id"]; + existingRequirementOrAssociationId = removed?.["@_id"]; drgElement.authorityRequirement?.push( ...requirements.authorityRequirement.map((s) => ({ ...s, - "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), + "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), })) ); } @@ -162,7 +162,7 @@ export function addEdge({ // Remove existing const removedDmnEdge = removeFirstMatchIfPresent( diagramElements, - (e) => e.__$$element === "dmndi:DMNEdge" && e["@_dmnElementRef"] === existingEdgeId + (e) => e.__$$element === "dmndi:DMNEdge" && e["@_dmnElementRef"] === existingRequirementOrAssociationId ) as Normalized | undefined; const newWaypoints = keepWaypoints @@ -181,7 +181,7 @@ export function addEdge({ "@_id": withoutDiscreteAutoPosinitioningMarker(removedDmnEdge?.["@_id"] ?? generateUuid()) + (edge.autoPositionedEdgeMarker ?? ""), - "@_dmnElementRef": existingEdgeId ?? newEdgeId, + "@_dmnElementRef": dmnElementRefOfDmnEdge ?? existingRequirementOrAssociationId ?? newEdgeId, // dmnElementRef needs to be QName format "@_sourceElement": sourceNode.shapeId, "@_targetElement": targetNode.shapeId, "di:waypoint": newWaypoints, diff --git a/packages/dmn-editor/src/store/computed/computeDiagramData.ts b/packages/dmn-editor/src/store/computed/computeDiagramData.ts index 1b16a7412fe..23921c89529 100644 --- a/packages/dmn-editor/src/store/computed/computeDiagramData.ts +++ b/packages/dmn-editor/src/store/computed/computeDiagramData.ts @@ -410,13 +410,12 @@ function ackRequirementEdges( if (dmnObject.__$$element === "decision") { (dmnObject.informationRequirement ?? []).forEach((ir, index) => { const irHref = parseXmlHref((ir.requiredDecision ?? ir.requiredInput)!["@_href"]); - // Search for definitions[`@_xmlns:included${includedIndex}`] that holds proper namespace - // and store the proper prefix: `included${includedIndex}` value - const namespaceIncludedPrefix = Object.entries(definitions) - .find(([key, val]) => val === namespace)?.[0] - ?.replace("@_xmlns:", ""); ackEdge({ - id: (namespaceIncludedPrefix ? `${namespaceIncludedPrefix}:` : "") + ir["@_id"]!, + // RF.Edge id needs to be in HREF format + id: + drgElementsNamespace === thisDmnsNamespace + ? ir["@_id"] + : buildXmlHref({ namespace: drgElementsNamespace, id: ir["@_id"] }), dmnObject: { namespace: drgElementsNamespace, type: dmnObject.__$$element, From a5044c8c0984275fc96dce2079bf67a42c492fdf Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Thu, 26 Sep 2024 12:04:01 +0200 Subject: [PATCH 37/40] fix != vs !== --- .../dmn-editor/src/diagram/connections/isValidConnection.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts index 0e960d8e232..94fcd75f31d 100644 --- a/packages/dmn-editor/src/diagram/connections/isValidConnection.ts +++ b/packages/dmn-editor/src/diagram/connections/isValidConnection.ts @@ -48,7 +48,7 @@ export function _checkIsValidConnection( // External nodes cannot be targeted by default // However there are exceptions, for example adding a waypoint on the edge - const targetsExternalNode = targetNode.data.dmnObjectQName.prefix != undefined; + const targetsExternalNode = targetNode.data.dmnObjectQName.prefix !== undefined; const allowExternalTarget = extraArg?.allowExternalTarget ?? false; if (targetsExternalNode && !allowExternalTarget) { return false; From d3fc589d67a169c583a23474f3e091b4c94cfa54 Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Thu, 26 Sep 2024 13:13:54 +0200 Subject: [PATCH 38/40] Revert "incorporate review feedback" This reverts commit 6d6cc5b153426fe1fd82f3d7a3725c4c5c06f5c1. --- .../edges/usePotentialWaypointControls.ts | 4 +-- packages/dmn-editor/src/mutations/addEdge.ts | 28 +++++++++---------- .../src/store/computed/computeDiagramData.ts | 11 ++++---- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 20569bba1b5..263ca3e1996 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -30,7 +30,6 @@ import { addEdge } from "../../mutations/addEdge"; import { EdgeType, NodeType } from "../connections/graphStructure"; import { PositionalNodeHandleId } from "../connections/PositionalNodeHandles"; import { getHandlePosition } from "../maths/DmnMaths"; -import { xmlHrefToQName } from "../../xml/xmlHrefToQName"; export function usePotentialWaypointControls( waypoints: DC__Point[], @@ -120,7 +119,6 @@ export function usePotentialWaypointControls( } const targetsExternalNode = targetNode.data.dmnObjectQName.prefix !== undefined; - const informationRequirementQNameRelativeToThisDmn = xmlHrefToQName(edgeId, state.dmn.model.definitions); addEdge({ definitions: state.dmn.model.definitions, drdIndex: state.computed(state).getDrdIndex(), @@ -148,7 +146,7 @@ export function usePotentialWaypointControls( shapeId: edge.data?.dmnShapeTarget["@_id"], }, keepWaypoints: false, - dmnElementRefOfDmnEdge: targetsExternalNode ? informationRequirementQNameRelativeToThisDmn : undefined, + requirementEdgeTargetingExternalNodeId: targetsExternalNode ? edgeId : undefined, }); console.debug(`DMN DIAGRAM: DMNEdge for '${edgeId}' edge was added into diagram.`); diff --git a/packages/dmn-editor/src/mutations/addEdge.ts b/packages/dmn-editor/src/mutations/addEdge.ts index e73d8f139c9..0e1faee9831 100644 --- a/packages/dmn-editor/src/mutations/addEdge.ts +++ b/packages/dmn-editor/src/mutations/addEdge.ts @@ -48,7 +48,7 @@ export function addEdge({ targetNode, edge, keepWaypoints, - dmnElementRefOfDmnEdge, + requirementEdgeTargetingExternalNodeId, }: { definitions: Normalized; drdIndex: number; @@ -74,16 +74,16 @@ export function addEdge({ autoPositionedEdgeMarker: AutoPositionedEdgeMarker | undefined; }; keepWaypoints: boolean; - dmnElementRefOfDmnEdge?: string; + requirementEdgeTargetingExternalNodeId?: string; }) { - const externalTargetAllowed = dmnElementRefOfDmnEdge !== undefined; + const externalTargetAllowed = requirementEdgeTargetingExternalNodeId !== undefined; if (!_checkIsValidConnection(sourceNode, targetNode, edge.type, { allowExternalTarget: externalTargetAllowed })) { throw new Error(`DMN MUTATION: Invalid structure: (${sourceNode.type}) --${edge.type}--> (${targetNode.type}) `); } const newEdgeId = generateUuid(); - let existingRequirementOrAssociationId: string | undefined = dmnElementRefOfDmnEdge; + let existingEdgeId: string | undefined = requirementEdgeTargetingExternalNodeId; // Associations if (edge.type === EDGE_TYPES.association) { @@ -101,13 +101,13 @@ export function addEdge({ definitions.artifact, (a) => a.__$$element === "association" && areAssociationsEquivalent(a, newAssociation) ); - existingRequirementOrAssociationId = removed?.["@_id"]; + existingEdgeId = removed?.["@_id"]; // Replace with the new one. definitions.artifact?.push({ __$$element: "association", ...newAssociation, - "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), + "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), }); } // Requirements @@ -119,11 +119,11 @@ export function addEdge({ const removed = removeFirstMatchIfPresent(drgElement.informationRequirement, (ir) => doesInformationRequirementsPointTo(ir, sourceNode.href) ); - existingRequirementOrAssociationId = removed?.["@_id"]; + existingEdgeId = removed?.["@_id"]; drgElement.informationRequirement?.push( ...requirements.informationRequirement.map((s) => ({ ...s, - "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), + "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), })) ); } @@ -133,11 +133,11 @@ export function addEdge({ const removed = removeFirstMatchIfPresent(drgElement.knowledgeRequirement, (kr) => doesKnowledgeRequirementsPointTo(kr, sourceNode.href) ); - existingRequirementOrAssociationId = removed?.["@_id"]; + existingEdgeId = removed?.["@_id"]; drgElement.knowledgeRequirement?.push( ...requirements.knowledgeRequirement.map((s) => ({ ...s, - "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), + "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), })) ); } @@ -147,11 +147,11 @@ export function addEdge({ const removed = removeFirstMatchIfPresent(drgElement.authorityRequirement, (ar) => doesAuthorityRequirementsPointTo(ar, sourceNode.href) ); - existingRequirementOrAssociationId = removed?.["@_id"]; + existingEdgeId = removed?.["@_id"]; drgElement.authorityRequirement?.push( ...requirements.authorityRequirement.map((s) => ({ ...s, - "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), + "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), })) ); } @@ -162,7 +162,7 @@ export function addEdge({ // Remove existing const removedDmnEdge = removeFirstMatchIfPresent( diagramElements, - (e) => e.__$$element === "dmndi:DMNEdge" && e["@_dmnElementRef"] === existingRequirementOrAssociationId + (e) => e.__$$element === "dmndi:DMNEdge" && e["@_dmnElementRef"] === existingEdgeId ) as Normalized | undefined; const newWaypoints = keepWaypoints @@ -181,7 +181,7 @@ export function addEdge({ "@_id": withoutDiscreteAutoPosinitioningMarker(removedDmnEdge?.["@_id"] ?? generateUuid()) + (edge.autoPositionedEdgeMarker ?? ""), - "@_dmnElementRef": dmnElementRefOfDmnEdge ?? existingRequirementOrAssociationId ?? newEdgeId, // dmnElementRef needs to be QName format + "@_dmnElementRef": existingEdgeId ?? newEdgeId, "@_sourceElement": sourceNode.shapeId, "@_targetElement": targetNode.shapeId, "di:waypoint": newWaypoints, diff --git a/packages/dmn-editor/src/store/computed/computeDiagramData.ts b/packages/dmn-editor/src/store/computed/computeDiagramData.ts index 23921c89529..1b16a7412fe 100644 --- a/packages/dmn-editor/src/store/computed/computeDiagramData.ts +++ b/packages/dmn-editor/src/store/computed/computeDiagramData.ts @@ -410,12 +410,13 @@ function ackRequirementEdges( if (dmnObject.__$$element === "decision") { (dmnObject.informationRequirement ?? []).forEach((ir, index) => { const irHref = parseXmlHref((ir.requiredDecision ?? ir.requiredInput)!["@_href"]); + // Search for definitions[`@_xmlns:included${includedIndex}`] that holds proper namespace + // and store the proper prefix: `included${includedIndex}` value + const namespaceIncludedPrefix = Object.entries(definitions) + .find(([key, val]) => val === namespace)?.[0] + ?.replace("@_xmlns:", ""); ackEdge({ - // RF.Edge id needs to be in HREF format - id: - drgElementsNamespace === thisDmnsNamespace - ? ir["@_id"] - : buildXmlHref({ namespace: drgElementsNamespace, id: ir["@_id"] }), + id: (namespaceIncludedPrefix ? `${namespaceIncludedPrefix}:` : "") + ir["@_id"]!, dmnObject: { namespace: drgElementsNamespace, type: dmnObject.__$$element, From 79f64d2ff1a77c64dc6e247c152d5557f2b7b98c Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Thu, 26 Sep 2024 16:42:10 +0200 Subject: [PATCH 39/40] incorporate review feedback - v2 --- .../edges/usePotentialWaypointControls.ts | 7 +++-- packages/dmn-editor/src/mutations/addEdge.ts | 29 +++++++++--------- .../src/store/computed/computeDiagramData.ts | 30 ++++++++----------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts index 263ca3e1996..d59f9c1032e 100644 --- a/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts +++ b/packages/dmn-editor/src/diagram/edges/usePotentialWaypointControls.ts @@ -30,6 +30,7 @@ import { addEdge } from "../../mutations/addEdge"; import { EdgeType, NodeType } from "../connections/graphStructure"; import { PositionalNodeHandleId } from "../connections/PositionalNodeHandles"; import { getHandlePosition } from "../maths/DmnMaths"; +import { xmlHrefToQName } from "../../xml/xmlHrefToQName"; export function usePotentialWaypointControls( waypoints: DC__Point[], @@ -119,6 +120,7 @@ export function usePotentialWaypointControls( } const targetsExternalNode = targetNode.data.dmnObjectQName.prefix !== undefined; + const requirementEdgeQNameRelativeToThisDmn = xmlHrefToQName(edgeId, state.dmn.model.definitions); addEdge({ definitions: state.dmn.model.definitions, drdIndex: state.computed(state).getDrdIndex(), @@ -146,7 +148,7 @@ export function usePotentialWaypointControls( shapeId: edge.data?.dmnShapeTarget["@_id"], }, keepWaypoints: false, - requirementEdgeTargetingExternalNodeId: targetsExternalNode ? edgeId : undefined, + dmnElementRefOfDmnEdge: targetsExternalNode ? requirementEdgeQNameRelativeToThisDmn : undefined, }); console.debug(`DMN DIAGRAM: DMNEdge for '${edgeId}' edge was added into diagram.`); @@ -171,7 +173,8 @@ export function usePotentialWaypointControls( } dmnEditorStoreApi.setState((state) => { - const dmnEdgeIndex = state.computed(state).indexedDrd().dmnEdgesByDmnElementRef.get(edgeId)?.index; + const edgeQName = xmlHrefToQName(edgeId, state.dmn.model.definitions); + const dmnEdgeIndex = state.computed(state).indexedDrd().dmnEdgesByDmnElementRef.get(edgeQName)?.index; if (dmnEdgeIndex === undefined) { throw new Error(`DMN DIAGRAM: Diagram computed state does not contain DMNEdge for '${edgeId}' edge.`); } diff --git a/packages/dmn-editor/src/mutations/addEdge.ts b/packages/dmn-editor/src/mutations/addEdge.ts index 0e1faee9831..81a86e21c49 100644 --- a/packages/dmn-editor/src/mutations/addEdge.ts +++ b/packages/dmn-editor/src/mutations/addEdge.ts @@ -48,7 +48,7 @@ export function addEdge({ targetNode, edge, keepWaypoints, - requirementEdgeTargetingExternalNodeId, + dmnElementRefOfDmnEdge, }: { definitions: Normalized; drdIndex: number; @@ -74,16 +74,17 @@ export function addEdge({ autoPositionedEdgeMarker: AutoPositionedEdgeMarker | undefined; }; keepWaypoints: boolean; - requirementEdgeTargetingExternalNodeId?: string; + // QName format, used as dmnElementRef for DMNEdge targeting an external node + dmnElementRefOfDmnEdge?: string; }) { - const externalTargetAllowed = requirementEdgeTargetingExternalNodeId !== undefined; + const externalTargetAllowed = dmnElementRefOfDmnEdge !== undefined; if (!_checkIsValidConnection(sourceNode, targetNode, edge.type, { allowExternalTarget: externalTargetAllowed })) { throw new Error(`DMN MUTATION: Invalid structure: (${sourceNode.type}) --${edge.type}--> (${targetNode.type}) `); } const newEdgeId = generateUuid(); - let existingEdgeId: string | undefined = requirementEdgeTargetingExternalNodeId; + let existingRequirementOrAssociationId: string | undefined = dmnElementRefOfDmnEdge; // Associations if (edge.type === EDGE_TYPES.association) { @@ -101,13 +102,13 @@ export function addEdge({ definitions.artifact, (a) => a.__$$element === "association" && areAssociationsEquivalent(a, newAssociation) ); - existingEdgeId = removed?.["@_id"]; + existingRequirementOrAssociationId = removed?.["@_id"]; // Replace with the new one. definitions.artifact?.push({ __$$element: "association", ...newAssociation, - "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), + "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), }); } // Requirements @@ -119,11 +120,11 @@ export function addEdge({ const removed = removeFirstMatchIfPresent(drgElement.informationRequirement, (ir) => doesInformationRequirementsPointTo(ir, sourceNode.href) ); - existingEdgeId = removed?.["@_id"]; + existingRequirementOrAssociationId = removed?.["@_id"]; drgElement.informationRequirement?.push( ...requirements.informationRequirement.map((s) => ({ ...s, - "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), + "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), })) ); } @@ -133,11 +134,11 @@ export function addEdge({ const removed = removeFirstMatchIfPresent(drgElement.knowledgeRequirement, (kr) => doesKnowledgeRequirementsPointTo(kr, sourceNode.href) ); - existingEdgeId = removed?.["@_id"]; + existingRequirementOrAssociationId = removed?.["@_id"]; drgElement.knowledgeRequirement?.push( ...requirements.knowledgeRequirement.map((s) => ({ ...s, - "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), + "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), })) ); } @@ -147,11 +148,11 @@ export function addEdge({ const removed = removeFirstMatchIfPresent(drgElement.authorityRequirement, (ar) => doesAuthorityRequirementsPointTo(ar, sourceNode.href) ); - existingEdgeId = removed?.["@_id"]; + existingRequirementOrAssociationId = removed?.["@_id"]; drgElement.authorityRequirement?.push( ...requirements.authorityRequirement.map((s) => ({ ...s, - "@_id": tryKeepingEdgeId(existingEdgeId, newEdgeId), + "@_id": tryKeepingEdgeId(existingRequirementOrAssociationId, newEdgeId), })) ); } @@ -162,7 +163,7 @@ export function addEdge({ // Remove existing const removedDmnEdge = removeFirstMatchIfPresent( diagramElements, - (e) => e.__$$element === "dmndi:DMNEdge" && e["@_dmnElementRef"] === existingEdgeId + (e) => e.__$$element === "dmndi:DMNEdge" && e["@_dmnElementRef"] === existingRequirementOrAssociationId ) as Normalized | undefined; const newWaypoints = keepWaypoints @@ -181,7 +182,7 @@ export function addEdge({ "@_id": withoutDiscreteAutoPosinitioningMarker(removedDmnEdge?.["@_id"] ?? generateUuid()) + (edge.autoPositionedEdgeMarker ?? ""), - "@_dmnElementRef": existingEdgeId ?? newEdgeId, + "@_dmnElementRef": existingRequirementOrAssociationId ?? newEdgeId, "@_sourceElement": sourceNode.shapeId, "@_targetElement": targetNode.shapeId, "di:waypoint": newWaypoints, diff --git a/packages/dmn-editor/src/store/computed/computeDiagramData.ts b/packages/dmn-editor/src/store/computed/computeDiagramData.ts index 1b16a7412fe..e1963b5d0d7 100644 --- a/packages/dmn-editor/src/store/computed/computeDiagramData.ts +++ b/packages/dmn-editor/src/store/computed/computeDiagramData.ts @@ -38,6 +38,7 @@ import { Computed, State } from "../Store"; import { getDecisionServicePropertiesRelativeToThisDmn } from "../../mutations/addExistingDecisionServiceToDrd"; import { Normalized } from "../../normalization/normalize"; import { KIE_UNKNOWN_NAMESPACE } from "../../kie/kie"; +import { xmlHrefToQName } from "../../xml/xmlHrefToQName"; export const NODE_LAYERS = { GROUP_NODE: 0, @@ -99,7 +100,7 @@ export function computeDiagramData( const ackEdge: AckEdge = ({ id, type, dmnObject, source, target, sourceNamespace }) => { const data = { dmnObject, - dmnEdge: id ? indexedDrd.dmnEdgesByDmnElementRef.get(id) : undefined, + dmnEdge: id ? indexedDrd.dmnEdgesByDmnElementRef.get(xmlHrefToQName(id, definitions)) : undefined, dmnShapeSource: indexedDrd.dmnShapesByHref.get(source), dmnShapeTarget: indexedDrd.dmnShapesByHref.get(target), }; @@ -140,13 +141,7 @@ export function computeDiagramData( }; // requirements - ackRequirementEdges( - definitions, - definitions["@_namespace"], - definitions["@_namespace"], - definitions.drgElement, - ackEdge - ); + ackRequirementEdges(definitions["@_namespace"], definitions["@_namespace"], definitions.drgElement, ackEdge); // associations (definitions.artifact ?? []).forEach((dmnObject, index) => { @@ -276,7 +271,6 @@ export function computeDiagramData( (acc, [namespace, externalDmn]) => { // Taking advantage of the loop to add the edges here... ackRequirementEdges( - definitions, definitions["@_namespace"], externalDmn.model.definitions["@_namespace"], externalDmn.model.definitions.drgElement, @@ -397,7 +391,6 @@ export function computeDiagramData( } function ackRequirementEdges( - definitions: State["dmn"]["model"]["definitions"], thisDmnsNamespace: string, drgElementsNamespace: string, drgElements: Normalized["drgElement"], @@ -410,13 +403,12 @@ function ackRequirementEdges( if (dmnObject.__$$element === "decision") { (dmnObject.informationRequirement ?? []).forEach((ir, index) => { const irHref = parseXmlHref((ir.requiredDecision ?? ir.requiredInput)!["@_href"]); - // Search for definitions[`@_xmlns:included${includedIndex}`] that holds proper namespace - // and store the proper prefix: `included${includedIndex}` value - const namespaceIncludedPrefix = Object.entries(definitions) - .find(([key, val]) => val === namespace)?.[0] - ?.replace("@_xmlns:", ""); ackEdge({ - id: (namespaceIncludedPrefix ? `${namespaceIncludedPrefix}:` : "") + ir["@_id"]!, + // HREF format, used as RF.Edge ID + id: + drgElementsNamespace === thisDmnsNamespace + ? ir["@_id"] + : buildXmlHref({ namespace: drgElementsNamespace, id: ir["@_id"] }), dmnObject: { namespace: drgElementsNamespace, type: dmnObject.__$$element, @@ -436,7 +428,11 @@ function ackRequirementEdges( (dmnObject.knowledgeRequirement ?? []).forEach((kr, index) => { const krHref = parseXmlHref(kr.requiredKnowledge["@_href"]); ackEdge({ - id: kr["@_id"]!, + // HREF format, used as RF.Edge ID + id: + drgElementsNamespace === thisDmnsNamespace + ? kr["@_id"] + : buildXmlHref({ namespace: drgElementsNamespace, id: kr["@_id"] }), dmnObject: { namespace: drgElementsNamespace, type: dmnObject.__$$element, From 006000e85b1e7513db7fd863f9c36c003de5b81e Mon Sep 17 00:00:00 2001 From: Jozef Marko Date: Fri, 27 Sep 2024 10:51:57 +0200 Subject: [PATCH 40/40] fix deleteEdge --- packages/dmn-editor/src/mutations/deleteEdge.ts | 5 ++++- packages/dmn-editor/src/mutations/deleteNode.ts | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/dmn-editor/src/mutations/deleteEdge.ts b/packages/dmn-editor/src/mutations/deleteEdge.ts index 1f917f580a8..b5ffc5deadd 100644 --- a/packages/dmn-editor/src/mutations/deleteEdge.ts +++ b/packages/dmn-editor/src/mutations/deleteEdge.ts @@ -27,6 +27,7 @@ import { addOrGetDrd } from "./addOrGetDrd"; import { DmnDiagramEdgeData } from "../diagram/edges/Edges"; import { repopulateInputDataAndDecisionsOnAllDecisionServices } from "./repopulateInputDataAndDecisionsOnDecisionService"; import { Normalized } from "../normalization/normalize"; +import { xmlHrefToQName } from "../xml/xmlHrefToQName"; export enum EdgeDeletionMode { FROM_DRG_AND_ALL_DRDS, @@ -88,7 +89,9 @@ export function deleteEdge({ continue; } - const dmnEdgeIndex = (diagramElements ?? []).findIndex((d) => d["@_dmnElementRef"] === edge.id); + const dmnEdgeIndex = (diagramElements ?? []).findIndex( + (d) => d["@_dmnElementRef"] === xmlHrefToQName(edge.id, definitions) + ); if (dmnEdgeIndex >= 0) { if (i === drdIndex) { deletedDmnEdgeOnCurrentDrd = diagramElements[dmnEdgeIndex]; diff --git a/packages/dmn-editor/src/mutations/deleteNode.ts b/packages/dmn-editor/src/mutations/deleteNode.ts index 5f4affe9fa4..3901be35e93 100644 --- a/packages/dmn-editor/src/mutations/deleteNode.ts +++ b/packages/dmn-editor/src/mutations/deleteNode.ts @@ -31,7 +31,6 @@ import { Computed } from "../store/Store"; import { computeContainingDecisionServiceHrefsByDecisionHrefs } from "../store/computed/computeContainingDecisionServiceHrefsByDecisionHrefs.ts"; import { xmlHrefToQName } from "../xml/xmlHrefToQName"; import { Normalized } from "../normalization/normalize"; -import { NodeDmnObjects } from "../diagram/nodes/Nodes"; export enum NodeDeletionMode { FROM_DRG_AND_ALL_DRDS,