diff --git a/build.txt b/build.txt index 40362824b3b89c1b38ff5fc88e69bffda884a3ff..d53d32a34931852d1fa0fb8ac80b8ef01a2fa555 100644 --- a/build.txt +++ b/build.txt @@ -1 +1 @@ -14815 \ No newline at end of file +14820 \ No newline at end of file diff --git a/src/main/java/attacktrees/Defense.java b/src/main/java/attacktrees/Defense.java index 80524661dca7cc8218037697338a51f3a8838a0d..8b5cf87f4ebb1c7aab200f44173ee266d3f39ce2 100644 --- a/src/main/java/attacktrees/Defense.java +++ b/src/main/java/attacktrees/Defense.java @@ -85,6 +85,14 @@ public class Defense extends AttackElement { relatedAttacks.add(_attack); } + public boolean hasRelatedAttacks() { + if (relatedAttacks == null) { + return false; + } + + return relatedAttacks.size() > 0; + } + public ArrayList<Attack> getRelatedAttacks() { return relatedAttacks; } diff --git a/src/main/java/ui/AvatarMethod.java b/src/main/java/ui/AvatarMethod.java index dfa8eb862dbffbbe401d4d53ca1edc133da85878..84ef5c782b5c420b2600f6c2a24fad1b5039453f 100644 --- a/src/main/java/ui/AvatarMethod.java +++ b/src/main/java/ui/AvatarMethod.java @@ -111,6 +111,8 @@ public class AvatarMethod { //TraceManager.addDev("Is a valid method? " + _method); + + String method, tmp, id; String rt = ""; @@ -337,19 +339,17 @@ public class AvatarMethod { } if (checkTypes) { - TraceManager.addDev("Checking types with lowerid=" + lowerid); - b4 = !((lowerid.equals(getStringType(0).toLowerCase())) || (lowerid.equals(getStringType(1).toLowerCase())) || - (lowerid.equals(getStringType(2).toLowerCase())) || (lowerid.equals(getStringType(3).toLowerCase())) || - (lowerid.equals(getStringType(4).toLowerCase()))); - - TraceManager.addDev("b4=" + b4 + " extraTypes=" + extraTypes); - if (extraTypes != null) { - TraceManager.addDev("Checking extra types, with extraTypes = " + extraTypes); + //TraceManager.addDev("Checking types with lowerid=" + lowerid); + b4 = ((lowerid.equals(getStringType(INTEGER).toLowerCase())) || (lowerid.equals(getStringType(BOOLEAN).toLowerCase()))); + + //TraceManager.addDev("b4=" + b4 + " extraTypes=" + extraTypes); + if ((extraTypes != null) && (b4 == false)){ + //TraceManager.addDev("Checking extra types, with extraTypes = " + extraTypes); for(String type: extraTypes) { String typ = type.toLowerCase(); - TraceManager.addDev("Comparing type >" + typ + "< with >" + lowerid + "<"); + //TraceManager.addDev("Comparing type >" + typ + "< with >" + lowerid + "<"); if (type.toLowerCase().compareTo(lowerid) == 0) { - TraceManager.addDev("Similar type"); + //TraceManager.addDev("Similar type"); b4 = true; break; } diff --git a/src/main/java/ui/AvatarPanelDrawer.java b/src/main/java/ui/AvatarPanelDrawer.java index 3b1b6037c0076dfbd7a87e9191c059e933877359..796a54cd7640377ae5d6a539a70f0b1b18b065c0 100644 --- a/src/main/java/ui/AvatarPanelDrawer.java +++ b/src/main/java/ui/AvatarPanelDrawer.java @@ -555,6 +555,8 @@ public class AvatarPanelDrawer { SMDCon.setTransitionInfo("", t.getAction(i, useOriginalValuesFirst).replaceAll(" ", "")); } + SMDCon.setTransitionProbability(t.getDelayDistributionLaw(), t.getDelayExtra1(), t.getDelayExtra2()); + smp.addComponent(SMDCon, p1.getX(), p1.getY(), false, true); if (t.getOtherReferenceObjects() != null) { diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java index 867acb410d5d90250b2086c2d23b16bf14074ee1..b55c6ff3116a055020d7062542d73af46f3010d6 100644 --- a/src/main/java/ui/MainGUI.java +++ b/src/main/java/ui/MainGUI.java @@ -1903,7 +1903,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per atp.addAttackTreeDiagram(tabName); atp.atdp.drawable = false; atp.atdp.drawFromAttackTreeModel(_at); - atp.atdp.drawConnectionlessAttacks(_at); + //atp.atdp.drawConnectionlessAttacks(_at); atp.atdp.drawable = true; atp.atdp.repaint(); TraceManager.addDev("Draw AT 4"); diff --git a/src/main/java/ui/atd/AttackTreeDiagramPanel.java b/src/main/java/ui/atd/AttackTreeDiagramPanel.java index 323bf128b2c166a645279e09f069570a159db38f..c0eab5aa4e5d1a6dc83e1501c772fda177c2548e 100644 --- a/src/main/java/ui/atd/AttackTreeDiagramPanel.java +++ b/src/main/java/ui/atd/AttackTreeDiagramPanel.java @@ -43,10 +43,7 @@ package ui.atd; //import java.awt.*; -import attacktrees.Attack; -import attacktrees.AttackElement; -import attacktrees.AttackNode; -import attacktrees.AttackTree; +import attacktrees.*; import avatartranslator.AvatarElement; import avatartranslator.avatarucd.AvatarActor; import myutil.NameChecker; @@ -213,8 +210,11 @@ public class AttackTreeDiagramPanel extends TDiagramPanel implements TDPWithAttr HashMap<AttackElement, TGComponent> mapOfComponents = new HashMap<>(); + String ret = drawAttackFromAttackTreeModel(mapOfComponents, _at, root, null, -1, 600, 100, 1200); + drawConnectionlessAttacks(_at); + + return ret; - return drawAttackFromAttackTreeModel(mapOfComponents, _at, root, null, -1, 600, 100, 1200); } public void drawConnectionlessAttacks(AttackTree _at) { @@ -300,8 +300,7 @@ public class AttackTreeDiagramPanel extends TDiagramPanel implements TDPWithAttr TGConnectingPoint p2 = attack.closerFreeTGConnectingPoint(constraint.getX(), constraint.getY(), true, false); if (p1 != null && p2 != null) { - p1.setFree(false); - p2.setFree(false); + TGConnector conn = null; Vector<Point> points = new Vector<Point>(); @@ -312,6 +311,8 @@ public class AttackTreeDiagramPanel extends TDiagramPanel implements TDPWithAttr } if (conn != null) { + p1.setFree(false); + p2.setFree(false); addComponent(conn, 0, 0, false, true); } } @@ -334,6 +335,59 @@ public class AttackTreeDiagramPanel extends TDiagramPanel implements TDPWithAttr } } + // Handling countermeasures + int xNoRel = 100; + int yNoRel = 100; + int newX, newY; + for(Defense def : _at.getDefenses()) { + if (def.hasRelatedAttacks()) { + Attack firstAttack = def.getRelatedAttacks().get(0); + TGComponent refToAtt = _mapOfComponents.get(firstAttack); + if (refToAtt != null) { + newX = refToAtt.getX(); + newY = refToAtt.getY() + 100; + } else { + newX = xNoRel; + newY = yNoRel; + yNoRel += 100; + } + } else { + newX = xNoRel; + newY = yNoRel; + yNoRel += 100; + } + ATDCountermeasure atdc = new ATDCountermeasure(newX, newY, getMinX(), getMaxX(), getMinY(), getMaxY(), true, null, this); + atdc.setDescription(def.getDescription()); + atdc.setEnabled(def.isEnabled()); + addBuiltComponent(atdc); + + // Connections + for(Attack relatedAtt: def.getRelatedAttacks()) { + TGComponent refToAtt = _mapOfComponents.get(relatedAtt); + if (refToAtt != null) { + TGConnectingPoint p1 = atdc.closerFreeTGConnectingPoint(refToAtt.getX(), refToAtt.getY(), false, true); + TGConnectingPoint p2 = refToAtt.closerFreeTGConnectingPoint(atdc.getX(), atdc.getY(), true, false); + + if ((p1 != null) && (p2 != null)) { + + TGConnector conn = null; + Vector<Point> points = new Vector<Point>(); + conn = new ATDCountermeasureConnector(0, 0, 0, 0, 0, 0, true, null, + this, p1, p2, points); + if (_valueConst != -1) { + conn.setValue("" + _valueConst); + } + + if (conn != null) { + p1.setFree(false); + p2.setFree(false); + addComponent(conn, 0, 0, false, true); + } + } + } + } + } + return null; } diff --git a/src/main/java/ui/avatarsmd/AvatarSMDConnector.java b/src/main/java/ui/avatarsmd/AvatarSMDConnector.java index 304de32f3e9441aa60a031d5090a021a88bae285..0851cdbc447e8b10cdbeb9d2abe1d0b20e5396ed 100644 --- a/src/main/java/ui/avatarsmd/AvatarSMDConnector.java +++ b/src/main/java/ui/avatarsmd/AvatarSMDConnector.java @@ -136,6 +136,12 @@ public class AvatarSMDConnector extends TGConnectorWithCommentConnectionPoints i tgc.setTimes(minDelay, maxDelay, minCompute, maxCompute); } + public void setTransitionProbability(int _delayDistributionLaw, String _extraDelay1, String _extraDelay2) { + AvatarSMDTransitionInfo ti = getAvatarSMDTransitionInfo(); + ti.setTransitionProbability(""+_delayDistributionLaw, _extraDelay1, _extraDelay2); + + } + @Override protected void drawLastSegment(Graphics g, int x1, int y1, int x2, int y2) { if (Point2D.distance(x1, y1, x2, y2) < GraphicLib.longueur * 1.5) { diff --git a/src/main/java/ui/avatarsmd/AvatarSMDTransitionInfo.java b/src/main/java/ui/avatarsmd/AvatarSMDTransitionInfo.java index db85bb7d78080e1ba4f9ce3cf927d61f405897a4..ed1f4e8a6ab4f6970d70579f1b8269e5fa99839e 100755 --- a/src/main/java/ui/avatarsmd/AvatarSMDTransitionInfo.java +++ b/src/main/java/ui/avatarsmd/AvatarSMDTransitionInfo.java @@ -930,6 +930,11 @@ public class AvatarSMDTransitionInfo extends TGCWithoutInternalComponent impleme return extraDelay2.getText(); } + public void setTransitionProbability(String _delayDistributionLaw, String _extraDelay1, String _extraDelay2) { + delayDistributionLaw.setText(_delayDistributionLaw); + extraDelay1.setText(_extraDelay1); + extraDelay2.setText(_extraDelay2); + } /** * Issue #69 diff --git a/src/main/java/ui/util/DefaultText.java b/src/main/java/ui/util/DefaultText.java index bfbe4de0454dd1258836226f9cc29bb404042065..3fea22214118f71cafc699d4a854fc8254d5df19 100755 --- a/src/main/java/ui/util/DefaultText.java +++ b/src/main/java/ui/util/DefaultText.java @@ -50,8 +50,8 @@ package ui.util; */ public class DefaultText { - public static String BUILD = "14814"; - public static String DATE = "2024/06/19 03:22:26 CET"; + public static String BUILD = "14819"; + public static String DATE = "2024/06/24 03:22:02 CET"; public static StringBuffer sbAbout = makeAbout(); diff --git a/src/main/java/ui/window/JFrameAI.java b/src/main/java/ui/window/JFrameAI.java index 1747fee572c6e1294501edb21ebf1df6e2c65b85..c68aaef29b1c97adc45936424c098fe4cb7ecbf9 100644 --- a/src/main/java/ui/window/JFrameAI.java +++ b/src/main/java/ui/window/JFrameAI.java @@ -663,7 +663,7 @@ public class JFrameAI extends JFrame implements ActionListener { TraceManager.addDev("\n\nSpecification to draw: " + ((AvatarSpecification) input).toString() + "\n\n"); - mgui.drawAvatarSpecification((AvatarSpecification) input, false); + mgui.drawAvatarSpecification((AvatarSpecification) input, false, false); inform("State machine of blocks added to diagram from ai answer\n"); }