diff --git a/src/main/java/attacktrees/AttackNode.java b/src/main/java/attacktrees/AttackNode.java index 07437a98e7b33c55fb1f280dd3df14f419d03539..7aa7a2bd0bd49a6bfe9aeeb5645aab6e3b2d4e53 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 44d9cb4e35ac36d387a1af054dc918e7b6abc766..4692cadc249c9ec381f4547745ce75cc10ac2b65 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);