diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java index a64272ce..c8ca65e4 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java @@ -549,8 +549,8 @@ public class ElkDiagramRenderer implements DiagramRenderer { elkNode.setHeight(100); elkNode.setProperty(CoreOptions.ALGORITHM, "org.eclipse.elk.layered"); elkNode.setProperty(CoreOptions.DIRECTION, Direction.DOWN); - elkNode.setProperty(CoreOptions.SPACING_NODE_NODE, NODE_SPACING * 0.6); - elkNode.setProperty(CoreOptions.SPACING_EDGE_NODE, EDGE_SPACING * 0.5); + elkNode.setProperty(CoreOptions.SPACING_NODE_NODE, NODE_SPACING * 0.4); + elkNode.setProperty(CoreOptions.SPACING_EDGE_NODE, EDGE_SPACING * 0.3); elkNode.setProperty(CoreOptions.PADDING, new org.eclipse.elk.core.math.ElkPadding(COMPOUND_TOP_PADDING, COMPOUND_SIDE_PADDING, COMPOUND_SIDE_PADDING, COMPOUND_SIDE_PADDING)); @@ -590,11 +590,21 @@ public class ElkDiagramRenderer implements DiagramRenderer { } } - // Handler children are direct children of DO_TRY (stacked below) + // Handler children stacked below try body: DO_FINALLY first, then DO_CATCH + // (ELK TB layout places children in insertion order) for (RouteNode child : handlerChildren) { - childNodeIds.add(child.getId()); - createElkNodeRecursive(child, elkNode, factory, elkNodeMap, nodeColors, - compoundNodeIds, childNodeIds, doTryNodeIds); + if (child.getType() == NodeType.DO_FINALLY) { + childNodeIds.add(child.getId()); + createElkNodeRecursive(child, elkNode, factory, elkNodeMap, nodeColors, + compoundNodeIds, childNodeIds, doTryNodeIds); + } + } + for (RouteNode child : handlerChildren) { + if (child.getType() == NodeType.DO_CATCH) { + childNodeIds.add(child.getId()); + createElkNodeRecursive(child, elkNode, factory, elkNodeMap, nodeColors, + compoundNodeIds, childNodeIds, doTryNodeIds); + } } } else if (isCompound) { compoundNodeIds.add(rn.getId()); @@ -661,9 +671,18 @@ public class ElkDiagramRenderer implements DiagramRenderer { wrapperChildren)); compoundInfos.put(wrapperId, new CompoundInfo(wrapperId, Color.WHITE)); } - // Handler children (DO_CATCH, DO_FINALLY) + // Handler children: DO_FINALLY first, then DO_CATCH for (RouteNode child : rn.getChildren()) { - if (child.getType() == NodeType.DO_CATCH || child.getType() == NodeType.DO_FINALLY) { + if (child.getType() == NodeType.DO_FINALLY) { + ElkNode childElk = elkNodeMap.get(child.getId()); + if (childElk != null) { + children.add(extractPositionedNode(child, childElk, elkNodeMap, + compoundNodeIds, compoundInfos, rootNode)); + } + } + } + for (RouteNode child : rn.getChildren()) { + if (child.getType() == NodeType.DO_CATCH) { ElkNode childElk = elkNodeMap.get(child.getId()); if (childElk != null) { children.add(extractPositionedNode(child, childElk, elkNodeMap,