From 007c811af1c1bcf32ed3f628eb535e7c761d305c Mon Sep 17 00:00:00 2001 From: "alan.birchler" <alan.birchler@telecom-paris.fr> Date: Wed, 26 Jun 2024 11:29:45 +0200 Subject: [PATCH] Fixed bug where AttackTreePanelTranslator would translate the attack tree but in reverse ordering. --- src/main/java/attacktrees/AttackNode.java | 1 + .../java/ui/AttackTreePanelTranslator.java | 29 +++++++++++++------ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/attacktrees/AttackNode.java b/src/main/java/attacktrees/AttackNode.java index 07437a98e7..7aa7a2bd0b 100644 --- a/src/main/java/attacktrees/AttackNode.java +++ b/src/main/java/attacktrees/AttackNode.java @@ -90,6 +90,7 @@ public abstract class AttackNode extends AttackElement { public ArrayList<Attack> getInputAttacks() { return inputAttacks; } + public ArrayList<Integer> getInputValues() { return inputValues; } diff --git a/src/main/java/ui/AttackTreePanelTranslator.java b/src/main/java/ui/AttackTreePanelTranslator.java index 44d9cb4e35..4692cadc24 100644 --- a/src/main/java/ui/AttackTreePanelTranslator.java +++ b/src/main/java/ui/AttackTreePanelTranslator.java @@ -41,10 +41,11 @@ package ui; import attacktrees.*; import avatartranslator.*; -import myutil.TraceManager; import translator.CheckingError; import ui.atd.*; +import java.util.ArrayList; +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -111,31 +112,28 @@ public class AttackTreePanelTranslator { } public AttackTree translateToAttackTreeDataStructure() { - - at = new AttackTree("AttackTree", atp); if (panel == null) { panel = (AttackTreeDiagramPanel)(atp.panels.get(index)); } - at = new AttackTree("AttackTree", panel); if (panel != null) { - at = new AttackTree("AttackTree", atp); + at = new AttackTree("AttackTree", panel); translate(panel); boolean b = at.checkSyntax(); + if (!b) { UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, at.errorOfFaultyElement); ce.setTGComponent((TGComponent) (at.faultyElement.getReferenceObject())); ce.setTDiagramPanel(panel); addCheckingError(ce); } - } + fixOrdering(); + } - //TraceManager.addDev("AT=" + at.toString()); return at; - } public void translate(AttackTreeDiagramPanel atdp) { @@ -373,9 +371,22 @@ public class AttackTreePanelTranslator { } } } - } + private void fixOrdering() { + for (AttackNode operator : at.getAttackNodes()) { + ArrayList<Attack> attacks = operator.getInputAttacks(); + ArrayList<Integer> inputValues = operator.getInputValues(); + + if (attacks != null && !attacks.isEmpty()) { + Collections.reverse(attacks); + } + + if (inputValues != null && !inputValues.isEmpty()) { + Collections.reverse(inputValues); + } + } + } public AvatarSpecification generateAvatarSpec() { AvatarSpecification as = new AvatarSpecification("spec from attack trees", atp); -- GitLab