From a5e9b510b5c70df7193c8bd02ea7014d1a64f7e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Pi=C4=85tkowski?= Date: Wed, 21 May 2025 09:34:29 +0200 Subject: [PATCH] Small fixes + folder structure update + help file included. --- .../help/img/ctx-automaton-edge-details.png | Bin 0 -> 7886 bytes .../help/img/ctx-automaton-panel.png | Bin 0 -> 3741 bytes .../help/img/ctx-automaton-state.png | Bin 0 -> 5242 bytes .../img/ctx-automaton-transition-edit.png | Bin 0 -> 12138 bytes reactics-gui/resources/help/index.html | 265 ++++++++++++++++++ reactics-gui/{ => src}/META-INF/MANIFEST.MF | 0 .../reactics/ContextAutomatonEditor.java | 2 +- .../reactics/ContextAutomatonGraph.java | 0 .../reactics/CumulatedReactionsViewer.java | 0 .../mat/martinp/reactics/FormulaEditor.java | 2 +- .../umk/mat/martinp/reactics/HelpWindow.java | 2 +- .../mat/martinp/reactics/ProcessEditor.java | 0 .../martinp/reactics/ReactantSetPanel.java | 0 .../umk/mat/martinp/reactics/ReacticsGUI.java | 4 +- .../mat/martinp/reactics/ReacticsRuntime.java | 0 .../reactics/ReactionSystemEditor.java | 0 .../martinp/reactics/TransitionEditor.java | 0 .../reactics/TransitionSystemViewer.java | 39 ++- 18 files changed, 302 insertions(+), 12 deletions(-) create mode 100644 reactics-gui/resources/help/img/ctx-automaton-edge-details.png create mode 100644 reactics-gui/resources/help/img/ctx-automaton-panel.png create mode 100644 reactics-gui/resources/help/img/ctx-automaton-state.png create mode 100644 reactics-gui/resources/help/img/ctx-automaton-transition-edit.png create mode 100644 reactics-gui/resources/help/index.html rename reactics-gui/{ => src}/META-INF/MANIFEST.MF (100%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/ContextAutomatonEditor.java (99%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/ContextAutomatonGraph.java (100%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/CumulatedReactionsViewer.java (100%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/FormulaEditor.java (99%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/HelpWindow.java (97%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/ProcessEditor.java (100%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/ReactantSetPanel.java (100%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/ReacticsGUI.java (99%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/ReacticsRuntime.java (100%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/ReactionSystemEditor.java (100%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/TransitionEditor.java (100%) rename reactics-gui/{ => src}/pl/umk/mat/martinp/reactics/TransitionSystemViewer.java (92%) diff --git a/reactics-gui/resources/help/img/ctx-automaton-edge-details.png b/reactics-gui/resources/help/img/ctx-automaton-edge-details.png new file mode 100644 index 0000000000000000000000000000000000000000..858df8edb0b298a34fba4b26bdca58115c2306e7 GIT binary patch literal 7886 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 r%dT(q_&jS7f3nkF* literal 0 HcmV?d00001 diff --git a/reactics-gui/resources/help/img/ctx-automaton-panel.png b/reactics-gui/resources/help/img/ctx-automaton-panel.png new file mode 100644 index 0000000000000000000000000000000000000000..2fdd1f8ab1fceb30a2f6e0b6810de4cece4d2761 GIT binary patch literal 3741 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 Xl%7gson literal 0 HcmV?d00001 diff --git a/reactics-gui/resources/help/img/ctx-automaton-state.png b/reactics-gui/resources/help/img/ctx-automaton-state.png new file mode 100644 index 0000000000000000000000000000000000000000..fbafe425d14eec1d1ec0ee76b5d23eed0329860f GIT binary patch literal 5242 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 literal 0 HcmV?d00001 diff --git a/reactics-gui/resources/help/img/ctx-automaton-transition-edit.png b/reactics-gui/resources/help/img/ctx-automaton-transition-edit.png new file mode 100644 index 0000000000000000000000000000000000000000..888e93da73a94bb6d5706ab6c23e883203d1eb46 GIT binary patch literal 12138 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 literal 0 HcmV?d00001 diff --git a/reactics-gui/resources/help/index.html b/reactics-gui/resources/help/index.html new file mode 100644 index 0000000..def4c4e --- /dev/null +++ b/reactics-gui/resources/help/index.html @@ -0,0 +1,265 @@ + + + + + ReactICS GUI Help + + + +
+

ReactICS - Reaction Systems Model Checker

+
+ + +

+ ReactICS is a toolkit that allows for verification of Reaction Systems. + The toolkit consists of two separate modules implementing: +

    +
  • Methods using binary decision diagrams (BDD) + for storing and manipulating the state space of the verified system.
  • +
  • Methods translating the verification problems into satisfiability modulo theories (SMT).
  • +
+

+

+ ReactICS GUI offers a graphical user interface allowing for editing the reaction system details + and model checking using BDD module. +

+

+ More on ReactICS can be found at The Reactics Webpage. +

+ +
+
+

Table of contents

+ +
+ + +
+

Reaction Systems

+
+ +

+ Reaction Systems are a formalism inspired by the functioning of living cells. + They allow for specifying and analysing computational processes in which reactions operate on sets of molecules. +

+ +

+ The behaviour of a reaction system is determined by the interactions of its reactions, which are based on + the mechanisms of facilitation and inhibition. + The formal treatment of reaction systems is qualitative and there is no direct representation of the number + of molecules involved in reactions. +

+ +

+ A Distributed Reaction System is a computational model in which multiple autonomous processes (aka. agents) + interact locally through rule-based reactions. + Each agent operates independently (without any central controller—coordination), + processing inputs and producing outputs based on predefined reactions, + and their collective behavior leads to complex system dynamics. +

+ +

+ More on reaction system can be found at The Reaction System Webpage +

+ +
Back to top
+
+ +
+

Application functions

+
+ +

+ ReactICS GUI allows to: +

    +
  • Edit the reaction system structure (the number of processes/agents, reactions for each process/agent, etc.)
  • +
  • Edit the context automaton structure (adding/removing states and transitions, + edit context for active processes/agents, setting guards for transitions, etc.).
  • +
  • Preview of the state space represented as a transition system.
  • +
  • Verification of properties defined by formulas using rsCTLK semantics.
  • +
  • Save/load the reaction system structure to/from XML file.
  • +
  • Export/import the reaction system to/from RSSL file.
  • +
  • Export the reaction system structure and behaviour to ISPL file.
  • +
+

+ +
Back to top
+ +
+ + +
+

Reaction system editor

+
+ +

+ -- TODO -- +

+ +
Back to top
+ +
+ + +
+

Context automaton editor

+
+ +

+ To create or edit the context automaton structure a proper edit mode should be set using the edit mode panel. +

+
+
+ +

+ The type of the newly created object (state or edge) is set by checking the proper toggle button. + With no button checked, one can transform the net by moving states around, etc. + (see below for more details). +

+ +
+ +

States

+ +

+ A new state is created by left-clicking the edit area (the main part of the component). + As it is customary in automata theory, states are numbered separately starting from 1. + The types of states are distinguished by shape and colour: + the initial state is depicted as a square, all other states are depicted as circles. + Moreover, hovering the mouse above a state allows to see its full description containing both + its name and its (distinct) number. +

+
+
+ +

+ The details of a state can be edited by right-clicking the existing + state and choosing the right option from the popup menu: +

    +
  • Set as initial - Makes the selected state the initial state of the context automaton.
  • +
  • Set label - Allows to set the custom label for the selected state. Note that state labels have to be unique.
  • +
+

+
+
+ +

Edges

+ +

+ A directed edge between two states is created by left-clicking both its endpoints in correct order. + Each edge may contain several transitions, each of them defined by a context (additional entities + provided for active processes/agents) and a guard (a condition required by the transition to execute). + The list of transitions may be edited by right-clicking the existing + edge and choosing the Nondeterministic transitions popup menu. +

+
+

+ Hovering the mouse above an edge allows to see the full list of transitions + including context and guards. +

+
+ +
+ +

Removing context automaton elements

+ +

+ Switching the toggle button Delete on allows removing context automaton elements. + Each left-clicked element is removed from the automaton grapn. + Moreover, the entire context automaton graph may be deleted by clicking the Clear button. +

+ +
+ +

Transforming the context automaton graph

+ +

+ Any state of the automaton may be picked and dragged around the edit area to obtain the desired graph shape. + It is also possible to select multiple states and move them together at the same time. + After CTRL + left-click on a particular state the entire automaton graph is shifted to be centered + on the clicked state. + Checking the Lock relative nodes positions checkbox locks the relative positions of the states. + In that case, dragging a single state moves the entire automaton graph. + Moreover, using mouse scroll the automaton graph view can be zoomed in and out. +

+ +
Back to top
+ +
+ + +
+

Transition system viewer

+
+ +

+ The component offers the visualisation of the transition system representing the state space of the reaction systems. + The initial state is depicted as a square, all other states are depicted as circles. + There is a directed edge connecting the state Si to the state Sj + if Sf is reachable from Si by a single computation step of the reaction system. +

+ +

+ The component has two separate instances represented by two separate tabs in the application window. + The first visualises the complete state space of the reaction system, + where each state is represented by sets of entities possessed by each agent and the current context automaton state. + The second visualises the compressed state space, where context automaton states are ignored + (states are represented only by the sets of entities possessed by each agent). +

+ +

+ Computation is done by pressing Update transition system button. + The reaction system structure should be loaded from the file or edited manually for the computation to be possible. +

+ +

+ Note that no matter in which component the Update transition system button + is pressed, the transition system structure will be updated in both. +

+ +

+ Hovering the mouse above a state allows to see its full description: entities possessed by each process/agent + and the context automaton state (not present in the case of the compressed graph). +

+
+ +
+ +

Transforming the transition system graph

+ +

+ Any state of the transition system may be picked and dragged around the edit area to obtain the desired graph shape. + It is also possible to select multiple states and move them together at the same time. + After CTRL + left-click on a particular state the entire transition system graph is shifted to be centered + on the clicked state. + Checking the Lock relative nodes positions checkbox locks the relative positions of the states. + In that case, dragging a single state moves the entire transition system graph. + Moreover, using mouse scroll the transition system graph view can be zoomed in and out. +

+ +
Back to top
+ +
+ +
+

Model checking

+
+ +

+-- TODO -- +

+ +
Back to top
+ +
+
+ + \ No newline at end of file diff --git a/reactics-gui/META-INF/MANIFEST.MF b/reactics-gui/src/META-INF/MANIFEST.MF similarity index 100% rename from reactics-gui/META-INF/MANIFEST.MF rename to reactics-gui/src/META-INF/MANIFEST.MF diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/ContextAutomatonEditor.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/ContextAutomatonEditor.java similarity index 99% rename from reactics-gui/pl/umk/mat/martinp/reactics/ContextAutomatonEditor.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/ContextAutomatonEditor.java index feaa6d8..dad9e58 100644 --- a/reactics-gui/pl/umk/mat/martinp/reactics/ContextAutomatonEditor.java +++ b/reactics-gui/src/pl/umk/mat/martinp/reactics/ContextAutomatonEditor.java @@ -335,7 +335,7 @@ public class ContextAutomatonEditor extends JPanel { boolean idOk = false; do { - String newLabel = JOptionPane.showInputDialog(null, "State label", state.getLabel()); + String newLabel = JOptionPane.showInputDialog(this, "State label", state.getLabel()); if (newLabel == null) return; diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/ContextAutomatonGraph.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/ContextAutomatonGraph.java similarity index 100% rename from reactics-gui/pl/umk/mat/martinp/reactics/ContextAutomatonGraph.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/ContextAutomatonGraph.java diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/CumulatedReactionsViewer.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/CumulatedReactionsViewer.java similarity index 100% rename from reactics-gui/pl/umk/mat/martinp/reactics/CumulatedReactionsViewer.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/CumulatedReactionsViewer.java diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/FormulaEditor.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/FormulaEditor.java similarity index 99% rename from reactics-gui/pl/umk/mat/martinp/reactics/FormulaEditor.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/FormulaEditor.java index 3b8b844..336d2db 100644 --- a/reactics-gui/pl/umk/mat/martinp/reactics/FormulaEditor.java +++ b/reactics-gui/src/pl/umk/mat/martinp/reactics/FormulaEditor.java @@ -59,7 +59,7 @@ public class FormulaEditor extends JPanel { formTable.createDefaultColumnsFromModel(); setLayout(new BorderLayout()); - add(formTable, BorderLayout.CENTER); + add(new JScrollPane(formTable), BorderLayout.CENTER); } public boolean isModified() { return modified; } diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/HelpWindow.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/HelpWindow.java similarity index 97% rename from reactics-gui/pl/umk/mat/martinp/reactics/HelpWindow.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/HelpWindow.java index af917fc..ea0ca75 100644 --- a/reactics-gui/pl/umk/mat/martinp/reactics/HelpWindow.java +++ b/reactics-gui/src/pl/umk/mat/martinp/reactics/HelpWindow.java @@ -59,7 +59,7 @@ public class HelpWindow extends JFrame { JScrollPane helpScroller = new JScrollPane(); JViewport helpVp = new JViewport(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); - helpVp.setPreferredSize(new Dimension(screenSize.width-200, screenSize.height-200)); + helpVp.setPreferredSize(new Dimension(screenSize.width/2, screenSize.height-200)); helpVp.add(helpPane); helpScroller.setViewport(helpVp); mainPanel.add(helpScroller, BorderLayout.CENTER); diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/ProcessEditor.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/ProcessEditor.java similarity index 100% rename from reactics-gui/pl/umk/mat/martinp/reactics/ProcessEditor.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/ProcessEditor.java diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/ReactantSetPanel.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/ReactantSetPanel.java similarity index 100% rename from reactics-gui/pl/umk/mat/martinp/reactics/ReactantSetPanel.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/ReactantSetPanel.java diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/ReacticsGUI.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/ReacticsGUI.java similarity index 99% rename from reactics-gui/pl/umk/mat/martinp/reactics/ReacticsGUI.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/ReacticsGUI.java index e80f676..b2b6127 100644 --- a/reactics-gui/pl/umk/mat/martinp/reactics/ReacticsGUI.java +++ b/reactics-gui/src/pl/umk/mat/martinp/reactics/ReacticsGUI.java @@ -225,7 +225,7 @@ public class ReacticsGUI extends JFrame { JPanel formulaEditorPanel = new JPanel(); formulaEditorPanel.setLayout(new BorderLayout()); formulaEditor = new FormulaEditor(); - formulaEditorPanel.add(new JScrollPane(formulaEditor), BorderLayout.CENTER); + formulaEditorPanel.add(formulaEditor, BorderLayout.CENTER); JPanel formulaCtrlPanel = new JPanel(); JButton addButton = new JButton("Add formula"); @@ -311,6 +311,8 @@ public class ReacticsGUI extends JFrame { reactionSystem.clearModificationStatus(); contextAutomaton.clearModificationStatus(); formulaEditor.clearModificationStatus(); + transitionSystem.clearModificationStatus(); + compressedTransitionSystem.clearModificationStatus(); } private void updateReactionSystem() { diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/ReacticsRuntime.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/ReacticsRuntime.java similarity index 100% rename from reactics-gui/pl/umk/mat/martinp/reactics/ReacticsRuntime.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/ReacticsRuntime.java diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/ReactionSystemEditor.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/ReactionSystemEditor.java similarity index 100% rename from reactics-gui/pl/umk/mat/martinp/reactics/ReactionSystemEditor.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/ReactionSystemEditor.java diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/TransitionEditor.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/TransitionEditor.java similarity index 100% rename from reactics-gui/pl/umk/mat/martinp/reactics/TransitionEditor.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/TransitionEditor.java diff --git a/reactics-gui/pl/umk/mat/martinp/reactics/TransitionSystemViewer.java b/reactics-gui/src/pl/umk/mat/martinp/reactics/TransitionSystemViewer.java similarity index 92% rename from reactics-gui/pl/umk/mat/martinp/reactics/TransitionSystemViewer.java rename to reactics-gui/src/pl/umk/mat/martinp/reactics/TransitionSystemViewer.java index cf2c290..84eca05 100644 --- a/reactics-gui/pl/umk/mat/martinp/reactics/TransitionSystemViewer.java +++ b/reactics-gui/src/pl/umk/mat/martinp/reactics/TransitionSystemViewer.java @@ -15,7 +15,10 @@ import javax.swing.JToolTip; import javax.swing.Icon; import javax.swing.border.EtchedBorder; import java.awt.*; +import java.util.ArrayList; import java.util.HashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class TransitionSystemViewer extends JPanel { @@ -61,6 +64,8 @@ public class TransitionSystemViewer extends JPanel { // Is transition system graph already computed? boolean isComputed() { return computed; } + void clearModificationStatus() { computed = false; } + private void createGraphViever() { graphLayout = new FRLayout(tsGraph); @@ -278,6 +283,7 @@ class TSState { private final int id; private final String rsDetails; + private final String toolTipText; private final String aState; private boolean initial = false; @@ -285,12 +291,14 @@ class TSState { this.id = id; this.rsDetails = formatRSDetails(stateStr.substring(1, stateStr.length() - 1).strip()); this.aState = null; + this.toolTipText = formatToolTipText(); } public TSState(int id, String stateStr, String aState) { this.id = id; this.rsDetails = formatRSDetails(stateStr.substring(1, stateStr.length() - 1).strip()); this.aState = aState; + this.toolTipText = formatToolTipText(); } public boolean isInitial() { @@ -318,19 +326,34 @@ class TSState { } public String getTooltipText() { - if (aState != null) - return ""+ - "CA " + aState+ "

" + rsDetails + - ""; - else - return ""+ - rsDetails + - ""; + return toolTipText; } private String formatRSDetails(String rsDetails) { return rsDetails.replaceAll("\\} (proc\\d+=\\{)", "}
$1"); } + + private String formatToolTipText() { + Pattern pattern = Pattern.compile("\\w+=\\{[^}]*\\}"); + Matcher matcher = pattern.matcher(rsDetails); + + ArrayList blocks = new ArrayList(); + + while (matcher.find()) { + blocks.add(matcher.group()); + } + + if (aState != null) + return "" + + "CA " + aState+ "

" + + String.join("
", blocks) + + ""; + else + return "" + + String.join("
", blocks) + + ""; + } + }