From ac3a066f32ad4ee1bda03e116955f20ac5848bc1 Mon Sep 17 00:00:00 2001 From: jano goudiaby Date: Tue, 5 Mar 2019 12:30:08 +0100 Subject: [PATCH 01/16] Change adding fireAction (Line 295) --- .gitignore | 1 + src/org/pneditor/editor/Root.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d6648aa..6df6619 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ nbproject/private/ out/ .idea/workspace.xml .idea/tasks.xml +/bin/ diff --git a/src/org/pneditor/editor/Root.java b/src/org/pneditor/editor/Root.java index 7fbdd07..b6320d0 100644 --- a/src/org/pneditor/editor/Root.java +++ b/src/org/pneditor/editor/Root.java @@ -292,7 +292,7 @@ public JPopupMenu getCanvasPopup() { private Action convertTransitionToSubnet; private Action replaceSubnet; private Action saveSubnetAs; - private Action cutAction, copyAction, pasteAction, selectAllAction; + private Action cutAction, copyAction, pasteAction, selectAllAction,fireAction1; //per application private Action openSubnet; @@ -335,6 +335,7 @@ private void enableOnlyPossibleActions() { boolean roleSelected = !roleEditor.getSelectedElements().isEmpty(); boolean isParent = !document.petriNet.isCurrentSubnetRoot(); boolean isPtoT = false; + boolean is = clickedElement instanceof Transition; if (isArc) { Arc test; From 5a0263b8630002f7050cc917fa23c5dedba0dadb Mon Sep 17 00:00:00 2001 From: jano goudiaby Date: Tue, 5 Mar 2019 12:40:26 +0100 Subject: [PATCH 02/16] Initializing the FireAction controller in Root.java And Creating the class Action FireAction.java in the package org.pneditor.editor.actions --- src/org/pneditor/editor/Root.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/org/pneditor/editor/Root.java b/src/org/pneditor/editor/Root.java index b6320d0..fa01cc4 100644 --- a/src/org/pneditor/editor/Root.java +++ b/src/org/pneditor/editor/Root.java @@ -363,6 +363,7 @@ private void enableOnlyPossibleActions() { undo.setEnabled(getUndoManager().isUndoable()); redo.setEnabled(getUndoManager().isRedoable()); setPlaceStatic.setEnabled(isPlaceNode); + fireAction1.setEnabled(is); } @Override @@ -466,6 +467,7 @@ private void setupMainFrame() { copyAction = new CopyAction(this); pasteAction = new PasteAction(this); selectAllAction = new SelectAllAction(); + fireAction1 = new FireAction(this,0); // initializes to zero Action selectTool_SelectionAction = new SelectionSelectToolAction(this); Action selectTool_PlaceAction = new PlaceSelectToolAction(this); From f799c97a1b5617e951eec511d8e15328be6777ad Mon Sep 17 00:00:00 2001 From: jano goudiaby Date: Tue, 5 Mar 2019 12:52:32 +0100 Subject: [PATCH 03/16] Import classes --- .../pneditor/editor/actions/FireAction.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/org/pneditor/editor/actions/FireAction.java diff --git a/src/org/pneditor/editor/actions/FireAction.java b/src/org/pneditor/editor/actions/FireAction.java new file mode 100644 index 0000000..4784baa --- /dev/null +++ b/src/org/pneditor/editor/actions/FireAction.java @@ -0,0 +1,30 @@ +package org.pneditor.editor.actions; + +import java.awt.event.ActionEvent; +import java.awt.event.MouseAdapter; +import javax.swing.AbstractAction; +import javax.swing.JOptionPane; +import javax.swing.JTextField; + +import java.awt.event.MouseEvent; +import java.util.HashSet; +import java.util.Set; + +import org.pneditor.editor.LocalClipboard; +import org.pneditor.editor.PNEditor; +import org.pneditor.editor.Root; +import org.pneditor.petrinet.Marking; +import org.pneditor.util.GraphicsTools; + +import com.sun.glass.events.KeyEvent; + +import org.pneditor.editor.commands.CutCommand; +import org.pneditor.editor.commands.FireTransitionCommand; +import org.pneditor.petrinet.Transition; +import org.pneditor.editor.canvas.*; +import org.pneditor.petrinet.PlaceNode; +import org.pneditor.petrinet.Element; + +public class FireAction { + +} From 178ad0989bd93b937b3680ea338d3e2951dc1049 Mon Sep 17 00:00:00 2001 From: jano goudiaby Date: Tue, 5 Mar 2019 14:30:30 +0100 Subject: [PATCH 04/16] Implementation of the FireAction.java controller and calling the contructor of the FireTransitionCommand.java command class to send the number of tokens the user would like to send. --- src/org/pneditor/editor/Root.java | 2 +- .../pneditor/editor/actions/FireAction.java | 65 ++++++++++++++++++- .../commands/FireTransitionCommand.java | 7 ++ 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/src/org/pneditor/editor/Root.java b/src/org/pneditor/editor/Root.java index fa01cc4..257a16a 100644 --- a/src/org/pneditor/editor/Root.java +++ b/src/org/pneditor/editor/Root.java @@ -467,7 +467,7 @@ private void setupMainFrame() { copyAction = new CopyAction(this); pasteAction = new PasteAction(this); selectAllAction = new SelectAllAction(); - fireAction1 = new FireAction(this,0); // initializes to zero + fireAction1 = new FireAction(this,0); // initializes to zero Action selectTool_SelectionAction = new SelectionSelectToolAction(this); Action selectTool_PlaceAction = new PlaceSelectToolAction(this); diff --git a/src/org/pneditor/editor/actions/FireAction.java b/src/org/pneditor/editor/actions/FireAction.java index 4784baa..2c64645 100644 --- a/src/org/pneditor/editor/actions/FireAction.java +++ b/src/org/pneditor/editor/actions/FireAction.java @@ -25,6 +25,69 @@ import org.pneditor.petrinet.PlaceNode; import org.pneditor.petrinet.Element; -public class FireAction { + +@SuppressWarnings("serial") +public class FireAction extends AbstractAction { + + private Root root; + + private int _i=1; + public FireAction(Root root2, int i) { + // TODO Auto-generated constructor stub + this.root = root2; + + switch(i) + { + + case 0: + + String nameO = "click here to activate fire N token(s)"; + putValue(NAME , nameO); + putValue(SMALL_ICON , GraphicsTools.getIcon("pneditor/play.gif")); + putValue(SHORT_DESCRIPTION , nameO); + putValue(MNEMONIC_KEY, KeyEvent.VK_T); + setEnabled(false); + _i=i; + break; + } + + + + } + + + + + @Override + public void actionPerformed(ActionEvent arg0) { + // TODO Auto-generated method stub + + Marking initialMarking = PNEditor.getRoot().getCurrentMarking(); + root.getClipboard().setContents(root.getSelectedElementsWithClickedElement() , root.getDocument().petriNet); + + if (root.getClickedElement() != null) { + if (root.getClickedElement() instanceof Transition ) { + Transition transition = (Transition) root.getClickedElement(); + String newLabel = JOptionPane.showInputDialog(root.getParentFrame(), "insert a positive number:", _i); + try { + int n = Integer.parseInt(newLabel); + if(n>0) { + root.getUndoManager().executeCommand(new FireTransitionCommand(transition , initialMarking, n)) ;} + else if(n<0){ + Object[] options = {"OK"}; + int show = JOptionPane.showOptionDialog(null,"You can only insert positive numbers", "Title", JOptionPane.PLAIN_MESSAGE, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); + + } + }catch(NumberFormatException eee) { + JOptionPane.showMessageDialog(null,"Characters are not allow.\n Please insert a positive integer number "); + } + } + // + } + + + } + + } diff --git a/src/org/pneditor/editor/commands/FireTransitionCommand.java b/src/org/pneditor/editor/commands/FireTransitionCommand.java index 0375173..4828a5a 100644 --- a/src/org/pneditor/editor/commands/FireTransitionCommand.java +++ b/src/org/pneditor/editor/commands/FireTransitionCommand.java @@ -28,6 +28,13 @@ public class FireTransitionCommand implements Command { private Transition transition; private Marking marking; + private int _i= 1; + + public FireTransitionCommand(Transition transition, Marking marking, int i) { + this.transition = transition; + this.marking = marking; + this._i=i; + } public FireTransitionCommand(Transition transition, Marking marking) { this.transition = transition; From d146152a2c76dab6890f3a615e05dbb2ec0a69c1 Mon Sep 17 00:00:00 2001 From: jano goudiaby Date: Tue, 5 Mar 2019 15:08:48 +0100 Subject: [PATCH 05/16] Implementation of the fire and unfire methods managing undo and redo in Marking.java class --- src/resources/pneditor/play.gif | Bin 0 -> 958 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/resources/pneditor/play.gif diff --git a/src/resources/pneditor/play.gif b/src/resources/pneditor/play.gif new file mode 100644 index 0000000000000000000000000000000000000000..d88d5157a09fdd3cccf430f4b23cde593ca149a5 GIT binary patch literal 958 zcmW+!F^e8V6r2l}@SO(XB7_4Ixr2zx%Hd@QBxfTcF`_~g_6Ho|vrr^O5JZIa5)6WZ zU^Ut#M4K%nrm{?eSR}6yaVxP-6T;)V?+$a$QTYI%y5Ji&hV6A zDo!B;2{{!}feKYZMJlOcRj5)mRHd4#R)ZSVLQQI^W_74jJ=CS1>ehe;H9|ugsbLv1 z<&Y((Jk_6OGZ6_Ta+;9^S(qiVC`)E>R%B(?$f~TF)!C4Z*&>^=Wj1F=c4m+4%AVPs z138!@awtdUa2jc*Bdv6%y%&V(#*}38n#CD~0vEc3i(Jyhu5hJmxXLwM?FKixg`3>c z&F*lgd$`Lz-R%JndW45O(qj*725q`MC7*NegYTz)e_MQrzgLc(yK(jQrN#Z5KV3ZW z%;oiaNB(?w?d7XCuPip+-2P@|_xAcjtKY4>^8NK^KRxi Date: Tue, 5 Mar 2019 15:18:43 +0100 Subject: [PATCH 06/16] Implementation of the fire and unfire methods managing redo and undo in the Marking.java --- src/org/pneditor/editor/Root.java | 1 + .../pneditor/editor/actions/FireAction.java | 22 +-- .../commands/FireTransitionCommand.java | 4 +- src/org/pneditor/petrinet/Marking.java | 139 +++++++++++++++++- 4 files changed, 142 insertions(+), 24 deletions(-) diff --git a/src/org/pneditor/editor/Root.java b/src/org/pneditor/editor/Root.java index 257a16a..22dd854 100644 --- a/src/org/pneditor/editor/Root.java +++ b/src/org/pneditor/editor/Root.java @@ -625,6 +625,7 @@ private void setupMainFrame() { transitionPopup.add(cutAction); transitionPopup.add(copyAction); transitionPopup.add(delete); + // transitionPopup.add(fireAction1); Font boldFont = new Font(Font.SANS_SERIF, Font.BOLD, 12); diff --git a/src/org/pneditor/editor/actions/FireAction.java b/src/org/pneditor/editor/actions/FireAction.java index 2c64645..c3bae31 100644 --- a/src/org/pneditor/editor/actions/FireAction.java +++ b/src/org/pneditor/editor/actions/FireAction.java @@ -1,29 +1,15 @@ package org.pneditor.editor.actions; import java.awt.event.ActionEvent; -import java.awt.event.MouseAdapter; import javax.swing.AbstractAction; import javax.swing.JOptionPane; -import javax.swing.JTextField; - -import java.awt.event.MouseEvent; -import java.util.HashSet; -import java.util.Set; - -import org.pneditor.editor.LocalClipboard; import org.pneditor.editor.PNEditor; import org.pneditor.editor.Root; import org.pneditor.petrinet.Marking; import org.pneditor.util.GraphicsTools; - import com.sun.glass.events.KeyEvent; - -import org.pneditor.editor.commands.CutCommand; import org.pneditor.editor.commands.FireTransitionCommand; import org.pneditor.petrinet.Transition; -import org.pneditor.editor.canvas.*; -import org.pneditor.petrinet.PlaceNode; -import org.pneditor.petrinet.Element; @SuppressWarnings("serial") @@ -49,15 +35,9 @@ public FireAction(Root root2, int i) { setEnabled(false); _i=i; break; - } - - + } } - - - - @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub diff --git a/src/org/pneditor/editor/commands/FireTransitionCommand.java b/src/org/pneditor/editor/commands/FireTransitionCommand.java index 4828a5a..ec27560 100644 --- a/src/org/pneditor/editor/commands/FireTransitionCommand.java +++ b/src/org/pneditor/editor/commands/FireTransitionCommand.java @@ -43,13 +43,13 @@ public FireTransitionCommand(Transition transition, Marking marking) { public void execute() { if (marking.isEnabled(transition)) { - marking.fire(transition); + marking.fire(transition,_i); } } public void undo() { if (marking.canBeUnfired(transition)) { - marking.undoFire(transition); + marking.undoFire(transition,_i); } } diff --git a/src/org/pneditor/petrinet/Marking.java b/src/org/pneditor/petrinet/Marking.java index bdaa94e..d69a97c 100644 --- a/src/org/pneditor/petrinet/Marking.java +++ b/src/org/pneditor/petrinet/Marking.java @@ -33,7 +33,9 @@ * @author Martin Riesz */ public class Marking { - + + public static int initialNumberOftokens; /* initialNumberOftokens is a static variable that allows us to store a number of tokens upstream instead of downstream*/ + public static int vaft; /*vaft is a static variable that allows us to store a number of tokens downstream instead of upstream */ protected Map map = new ConcurrentHashMap(); private PetriNet petriNet; private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); //fair @@ -468,5 +470,140 @@ public int hashCode() { } return hash; } + /*Return the number of tokens located at the place(s) that are positioned before the transition to activate*/ + public int returnTokens(Transition t) { + int n = 0; + if(isEnabled(t)){ + + for (Arc arc : t.getConnectedArcs()) { + if(arc.isPlaceToTransition()) { + int tokens = getTokens(arc.getPlaceNode()); + n= n + tokens; + } + + } + + + } + return n; + + } + + /*Return the number of tokens located at the place(s) that are positioned before the transition to activate*/ + public int returnTokensAfter(Transition t) { + lock.writeLock().lock(); + int n =0; + if(isEnabled(t)) { + + for (Arc arc : t.getConnectedArcs()) { + if(!arc.isPlaceToTransition()) { + int tokens = getTokens(arc.getPlaceNode()); + n= n + tokens; + } + + + + + } + } + return n; + + } + + + /*Overload of the method fire allowing to send N token(s) from place(s) to the following place(s)*/ + public boolean fire(Transition transition, int i) { + // TODO Auto-generated method stub + boolean success; + lock.writeLock().lock(); + try { + if (isEnabled(transition)) { + for (Arc arc1 : transition.getConnectedArcs()) { + if (!arc1.isPlaceToTransition()) { + + int tokens1 = getTokens(arc1.getPlaceNode()); + initialNumberOftokens = returnTokens(transition); + int valAf = returnTokensAfter(transition); + + if(iinitialNumberOftokens || i==initialNumberOftokens){ + setTokens(arc1.getPlaceNode(), tokens1 + initialNumberOftokens*arc1.getMultiplicity()); + vaft= tokens1 + initialNumberOftokens*arc1.getMultiplicity(); + } + + + } + } + + for (Arc arc : transition.getConnectedArcs()) { + if (arc.isPlaceToTransition()) { + int tokens = getTokens(arc.getPlaceNode()); + if(itokens) { + if (arc.isPlaceToTransition()) { + setTokens(arc.getPlaceNode(), 0); + } + + } + } + } + success = true; + } else { + success = false; + } + } finally { + lock.writeLock().unlock(); + } + return success; + + } + + public void undoFire(Transition transition, int i) { + // TODO Auto-generated method stub + lock.writeLock().lock(); + try { + if (canBeUnfired(transition)) { + for (Arc arc1 : transition.getConnectedArcs()) { + if(arc1.isPlaceToTransition()) { + int tokens2 = getTokens(arc1.getPlaceNode()); + if(iinitialNumberOftokens) { + setTokens(arc1.getPlaceNode(), tokens2 + initialNumberOftokens*arc1.getMultiplicity()); + } + + } + } + for (Arc arc1 : transition.getConnectedArcs()) { + + if (!arc1.isPlaceToTransition()) { + + int tokens1 = getTokens(arc1.getPlaceNode()); + if(iinitialNumberOftokens){ + setTokens(arc1.getPlaceNode(), Math.abs(tokens1 - initialNumberOftokens*arc1.getMultiplicity())); + } + + } + + } + } + + } + finally { + lock.writeLock().unlock(); + } + + } } From b67afe7d37c0076c523f81cfe206564b07acf72b Mon Sep 17 00:00:00 2001 From: jano goudiaby Date: Tue, 5 Mar 2019 21:45:44 +0100 Subject: [PATCH 07/16] Comments --- src/org/pneditor/editor/Root.java | 2 +- src/org/pneditor/petrinet/Marking.java | 38 ++++++++++++-------------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/org/pneditor/editor/Root.java b/src/org/pneditor/editor/Root.java index 22dd854..b437ad7 100644 --- a/src/org/pneditor/editor/Root.java +++ b/src/org/pneditor/editor/Root.java @@ -625,7 +625,7 @@ private void setupMainFrame() { transitionPopup.add(cutAction); transitionPopup.add(copyAction); transitionPopup.add(delete); - // transitionPopup.add(fireAction1); + transitionPopup.add(fireAction1); Font boldFont = new Font(Font.SANS_SERIF, Font.BOLD, 12); diff --git a/src/org/pneditor/petrinet/Marking.java b/src/org/pneditor/petrinet/Marking.java index d69a97c..95cadf9 100644 --- a/src/org/pneditor/petrinet/Marking.java +++ b/src/org/pneditor/petrinet/Marking.java @@ -472,7 +472,7 @@ public int hashCode() { } /*Return the number of tokens located at the place(s) that are positioned before the transition to activate*/ public int returnTokens(Transition t) { - int n = 0; + int n = 0; // Initializing the number of tokens , this variable n is used(in Line 481) to calculate of tokens of places or a place placed before a transition. if(isEnabled(t)){ for (Arc arc : t.getConnectedArcs()) { @@ -491,18 +491,15 @@ public int returnTokens(Transition t) { /*Return the number of tokens located at the place(s) that are positioned before the transition to activate*/ public int returnTokensAfter(Transition t) { - lock.writeLock().lock(); - int n =0; + + int n =0; // Initializing the number of tokens , this variable n is used(in Line 501 and 506) to calculate of tokens of places or a place placed before a transition. if(isEnabled(t)) { for (Arc arc : t.getConnectedArcs()) { if(!arc.isPlaceToTransition()) { int tokens = getTokens(arc.getPlaceNode()); n= n + tokens; - } - - - + } } } @@ -521,15 +518,13 @@ public boolean fire(Transition transition, int i) { for (Arc arc1 : transition.getConnectedArcs()) { if (!arc1.isPlaceToTransition()) { - int tokens1 = getTokens(arc1.getPlaceNode()); - initialNumberOftokens = returnTokens(transition); - int valAf = returnTokensAfter(transition); - + int tokens = getTokens(arc1.getPlaceNode()); + initialNumberOftokens = returnTokens(transition); if(iinitialNumberOftokens || i==initialNumberOftokens){ - setTokens(arc1.getPlaceNode(), tokens1 + initialNumberOftokens*arc1.getMultiplicity()); - vaft= tokens1 + initialNumberOftokens*arc1.getMultiplicity(); + setTokens(arc1.getPlaceNode(), tokens + initialNumberOftokens*arc1.getMultiplicity()); + vaft= tokens + initialNumberOftokens*arc1.getMultiplicity(); // Stock the value in variable defined in line 38. } @@ -567,6 +562,9 @@ else if(i>tokens) { } +/*Management of the backtrack taking into account the initial state of the network and the final + and the final state. Calculations have been made with precision for a good management of the Marking*/ + public void undoFire(Transition transition, int i) { // TODO Auto-generated method stub lock.writeLock().lock(); @@ -574,11 +572,11 @@ public void undoFire(Transition transition, int i) { if (canBeUnfired(transition)) { for (Arc arc1 : transition.getConnectedArcs()) { if(arc1.isPlaceToTransition()) { - int tokens2 = getTokens(arc1.getPlaceNode()); + int tokens = getTokens(arc1.getPlaceNode()); if(iinitialNumberOftokens) { - setTokens(arc1.getPlaceNode(), tokens2 + initialNumberOftokens*arc1.getMultiplicity()); + setTokens(arc1.getPlaceNode(), tokens + initialNumberOftokens*arc1.getMultiplicity()); } } @@ -587,11 +585,11 @@ else if(i>initialNumberOftokens) { if (!arc1.isPlaceToTransition()) { - int tokens1 = getTokens(arc1.getPlaceNode()); + int tokens = getTokens(arc1.getPlaceNode()); if(iinitialNumberOftokens){ - setTokens(arc1.getPlaceNode(), Math.abs(tokens1 - initialNumberOftokens*arc1.getMultiplicity())); + setTokens(arc1.getPlaceNode(), Math.abs(tokens - initialNumberOftokens*arc1.getMultiplicity())); } } From 7c84b545fc35ec376de4cd2fa0cdd0f47038169d Mon Sep 17 00:00:00 2001 From: jano goudiaby Date: Wed, 6 Mar 2019 16:42:07 +0100 Subject: [PATCH 08/16] Adding comments --- .../pneditor/editor/actions/FireAction.java | 7 ++++- .../commands/FireTransitionCommand.java | 12 +++++-- src/org/pneditor/petrinet/Marking.java | 31 +++++++++++++++---- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/org/pneditor/editor/actions/FireAction.java b/src/org/pneditor/editor/actions/FireAction.java index c3bae31..4174331 100644 --- a/src/org/pneditor/editor/actions/FireAction.java +++ b/src/org/pneditor/editor/actions/FireAction.java @@ -11,7 +11,11 @@ import org.pneditor.editor.commands.FireTransitionCommand; import org.pneditor.petrinet.Transition; - +/** + * FireAction controller + * @author goudiaby + * + */ @SuppressWarnings("serial") public class FireAction extends AbstractAction { @@ -38,6 +42,7 @@ public FireAction(Root root2, int i) { } } + @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub diff --git a/src/org/pneditor/editor/commands/FireTransitionCommand.java b/src/org/pneditor/editor/commands/FireTransitionCommand.java index ec27560..4767494 100644 --- a/src/org/pneditor/editor/commands/FireTransitionCommand.java +++ b/src/org/pneditor/editor/commands/FireTransitionCommand.java @@ -29,7 +29,12 @@ public class FireTransitionCommand implements Command { private Transition transition; private Marking marking; private int _i= 1; - + /** + * Overload the fireTransitionCommand + * @param transition : the transition activated + * @param marking + * @param i : the number of tokens put by the user + */ public FireTransitionCommand(Transition transition, Marking marking, int i) { this.transition = transition; this.marking = marking; @@ -46,7 +51,10 @@ public void execute() { marking.fire(transition,_i); } } - +/** + * + * Marking receiver Call and UNDO management. + */ public void undo() { if (marking.canBeUnfired(transition)) { marking.undoFire(transition,_i); diff --git a/src/org/pneditor/petrinet/Marking.java b/src/org/pneditor/petrinet/Marking.java index 95cadf9..f0307b1 100644 --- a/src/org/pneditor/petrinet/Marking.java +++ b/src/org/pneditor/petrinet/Marking.java @@ -470,7 +470,13 @@ public int hashCode() { } return hash; } - /*Return the number of tokens located at the place(s) that are positioned before the transition to activate*/ + + /** + * Return the number of tokens located at the place(s) that are positioned before the transition to activate + * @param t : transition + * @return + * + */ public int returnTokens(Transition t) { int n = 0; // Initializing the number of tokens , this variable n is used(in Line 481) to calculate of tokens of places or a place placed before a transition. if(isEnabled(t)){ @@ -489,7 +495,11 @@ public int returnTokens(Transition t) { } - /*Return the number of tokens located at the place(s) that are positioned before the transition to activate*/ + /** + * Return the number of tokens located at the place(s) that are positioned before the transition to activate + * @param t + * @return + */ public int returnTokensAfter(Transition t) { int n =0; // Initializing the number of tokens , this variable n is used(in Line 501 and 506) to calculate of tokens of places or a place placed before a transition. @@ -508,7 +518,13 @@ public int returnTokensAfter(Transition t) { } - /*Overload of the method fire allowing to send N token(s) from place(s) to the following place(s)*/ + + /** + * Overload of the method fire allowing to send N token(s) from place(s) to the following place(s) + * @param transition + * @param i + * @return + */ public boolean fire(Transition transition, int i) { // TODO Auto-generated method stub boolean success; @@ -562,9 +578,12 @@ else if(i>tokens) { } -/*Management of the backtrack taking into account the initial state of the network and the final - and the final state. Calculations have been made with precision for a good management of the Marking*/ - +/** + * Management of the backtrack taking into account the initial state of the network and the final + and the final state. Calculations have been made with precision for a good management of the Marking + * @param transition + * @param i + */ public void undoFire(Transition transition, int i) { // TODO Auto-generated method stub lock.writeLock().lock(); From debb29b69df7eb1b89b1cb91afa77e71a161d015 Mon Sep 17 00:00:00 2001 From: e17goudi Date: Sun, 10 Mar 2019 01:45:14 +0100 Subject: [PATCH 09/16] Change FireTransitionCommand --- .../commands/FireTransitionCommand.java | 4 +- src/org/pneditor/petrinet/Marking.java | 50 ++++++++++++++++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/org/pneditor/editor/commands/FireTransitionCommand.java b/src/org/pneditor/editor/commands/FireTransitionCommand.java index 4767494..1099fdb 100644 --- a/src/org/pneditor/editor/commands/FireTransitionCommand.java +++ b/src/org/pneditor/editor/commands/FireTransitionCommand.java @@ -47,7 +47,7 @@ public FireTransitionCommand(Transition transition, Marking marking) { } public void execute() { - if (marking.isEnabled(transition)) { + if (marking.isEnabled(transition,_i)) { marking.fire(transition,_i); } } @@ -56,7 +56,7 @@ public void execute() { * Marking receiver Call and UNDO management. */ public void undo() { - if (marking.canBeUnfired(transition)) { + if (marking.canBeUnfired(transition,_i)) { marking.undoFire(transition,_i); } } diff --git a/src/org/pneditor/petrinet/Marking.java b/src/org/pneditor/petrinet/Marking.java index f0307b1..c69f55c 100644 --- a/src/org/pneditor/petrinet/Marking.java +++ b/src/org/pneditor/petrinet/Marking.java @@ -167,7 +167,36 @@ public boolean isEnabled(Transition transition) { } return isEnabled; } - +//Overload method + + public boolean isEnabled(Transition transition,int i) { + boolean isEnabled = true; + lock.readLock().lock(); + try { + for (Arc arc : transition.getConnectedArcs()) { + if (arc.isPlaceToTransition()) { + if (arc.getType().equals(Arc.RESET)) {//reset arc is always fireable + continue; //but can be blocked by other arcs + } else { + if (!arc.getType().equals(Arc.INHIBITOR)) { + if (getTokens(arc.getPlaceNode()) < i*arc.getMultiplicity()) { //normal arc + isEnabled = false; + break; + } + } else { + if (getTokens(arc.getPlaceNode()) >= i*arc.getMultiplicity()) {//inhibitory arc + isEnabled = false; + break; + } + } + } + } + } + } finally { + lock.readLock().unlock(); + } + return isEnabled; + } /** * Fires a transition in this marking. Changes this marking. * @@ -224,6 +253,25 @@ public boolean canBeUnfired(Transition transition) { } return canBeUnfired; } + + //Overload unfire + public boolean canBeUnfired(Transition transition,int i) { + boolean canBeUnfired = true; + lock.readLock().lock(); + try { + for (Arc arc : transition.getConnectedArcs()) { + if (!arc.isPlaceToTransition()) { + if (getTokens(arc.getPlaceNode()) < i*arc.getMultiplicity()) { + canBeUnfired = false; + break; + } + } + } + } finally { + lock.readLock().unlock(); + } + return canBeUnfired; + } public void undoFire(Transition transition) { lock.writeLock().lock(); From b4b8c158d02e758b153c5c0c9349ef3ed4f366b2 Mon Sep 17 00:00:00 2001 From: e17goudi Date: Tue, 12 Mar 2019 22:33:53 +0100 Subject: [PATCH 10/16] Delete overload --- .../pneditor/editor/actions/FireAction.java | 9 +--- .../commands/FireTransitionCommand.java | 4 +- src/org/pneditor/petrinet/Marking.java | 49 +------------------ 3 files changed, 5 insertions(+), 57 deletions(-) diff --git a/src/org/pneditor/editor/actions/FireAction.java b/src/org/pneditor/editor/actions/FireAction.java index 4174331..cf54563 100644 --- a/src/org/pneditor/editor/actions/FireAction.java +++ b/src/org/pneditor/editor/actions/FireAction.java @@ -26,10 +26,7 @@ public FireAction(Root root2, int i) { // TODO Auto-generated constructor stub this.root = root2; - switch(i) - { - - case 0: + String nameO = "click here to activate fire N token(s)"; putValue(NAME , nameO); @@ -38,9 +35,7 @@ public FireAction(Root root2, int i) { putValue(MNEMONIC_KEY, KeyEvent.VK_T); setEnabled(false); _i=i; - break; - } - + } @Override diff --git a/src/org/pneditor/editor/commands/FireTransitionCommand.java b/src/org/pneditor/editor/commands/FireTransitionCommand.java index 1099fdb..4767494 100644 --- a/src/org/pneditor/editor/commands/FireTransitionCommand.java +++ b/src/org/pneditor/editor/commands/FireTransitionCommand.java @@ -47,7 +47,7 @@ public FireTransitionCommand(Transition transition, Marking marking) { } public void execute() { - if (marking.isEnabled(transition,_i)) { + if (marking.isEnabled(transition)) { marking.fire(transition,_i); } } @@ -56,7 +56,7 @@ public void execute() { * Marking receiver Call and UNDO management. */ public void undo() { - if (marking.canBeUnfired(transition,_i)) { + if (marking.canBeUnfired(transition)) { marking.undoFire(transition,_i); } } diff --git a/src/org/pneditor/petrinet/Marking.java b/src/org/pneditor/petrinet/Marking.java index c69f55c..3aa9fd4 100644 --- a/src/org/pneditor/petrinet/Marking.java +++ b/src/org/pneditor/petrinet/Marking.java @@ -167,36 +167,7 @@ public boolean isEnabled(Transition transition) { } return isEnabled; } -//Overload method - - public boolean isEnabled(Transition transition,int i) { - boolean isEnabled = true; - lock.readLock().lock(); - try { - for (Arc arc : transition.getConnectedArcs()) { - if (arc.isPlaceToTransition()) { - if (arc.getType().equals(Arc.RESET)) {//reset arc is always fireable - continue; //but can be blocked by other arcs - } else { - if (!arc.getType().equals(Arc.INHIBITOR)) { - if (getTokens(arc.getPlaceNode()) < i*arc.getMultiplicity()) { //normal arc - isEnabled = false; - break; - } - } else { - if (getTokens(arc.getPlaceNode()) >= i*arc.getMultiplicity()) {//inhibitory arc - isEnabled = false; - break; - } - } - } - } - } - } finally { - lock.readLock().unlock(); - } - return isEnabled; - } + /** * Fires a transition in this marking. Changes this marking. * @@ -254,24 +225,6 @@ public boolean canBeUnfired(Transition transition) { return canBeUnfired; } - //Overload unfire - public boolean canBeUnfired(Transition transition,int i) { - boolean canBeUnfired = true; - lock.readLock().lock(); - try { - for (Arc arc : transition.getConnectedArcs()) { - if (!arc.isPlaceToTransition()) { - if (getTokens(arc.getPlaceNode()) < i*arc.getMultiplicity()) { - canBeUnfired = false; - break; - } - } - } - } finally { - lock.readLock().unlock(); - } - return canBeUnfired; - } public void undoFire(Transition transition) { lock.writeLock().lock(); From 1000a29c5b2c1a5391726a86675d0b85a22075f4 Mon Sep 17 00:00:00 2001 From: e17goudi Date: Tue, 12 Mar 2019 23:05:34 +0100 Subject: [PATCH 11/16] Delete condition --- .../commands/FireTransitionCommand.java | 4 +- src/org/pneditor/petrinet/Marking.java | 56 ++++++++++++++++--- 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src/org/pneditor/editor/commands/FireTransitionCommand.java b/src/org/pneditor/editor/commands/FireTransitionCommand.java index 4767494..1099fdb 100644 --- a/src/org/pneditor/editor/commands/FireTransitionCommand.java +++ b/src/org/pneditor/editor/commands/FireTransitionCommand.java @@ -47,7 +47,7 @@ public FireTransitionCommand(Transition transition, Marking marking) { } public void execute() { - if (marking.isEnabled(transition)) { + if (marking.isEnabled(transition,_i)) { marking.fire(transition,_i); } } @@ -56,7 +56,7 @@ public void execute() { * Marking receiver Call and UNDO management. */ public void undo() { - if (marking.canBeUnfired(transition)) { + if (marking.canBeUnfired(transition,_i)) { marking.undoFire(transition,_i); } } diff --git a/src/org/pneditor/petrinet/Marking.java b/src/org/pneditor/petrinet/Marking.java index 3aa9fd4..38f0b5c 100644 --- a/src/org/pneditor/petrinet/Marking.java +++ b/src/org/pneditor/petrinet/Marking.java @@ -167,7 +167,36 @@ public boolean isEnabled(Transition transition) { } return isEnabled; } - +//Overload method + + public boolean isEnabled(Transition transition,int i) { + boolean isEnabled = true; + lock.readLock().lock(); + try { + for (Arc arc : transition.getConnectedArcs()) { + if (arc.isPlaceToTransition()) { + if (arc.getType().equals(Arc.RESET)) {//reset arc is always fireable + continue; //but can be blocked by other arcs + } else { + if (!arc.getType().equals(Arc.INHIBITOR)) { + if (getTokens(arc.getPlaceNode()) < i*arc.getMultiplicity()) { //normal arc + isEnabled = false; + break; + } + } else { + if (getTokens(arc.getPlaceNode()) >= i*arc.getMultiplicity()) {//inhibitory arc + isEnabled = false; + break; + } + } + } + } + } + } finally { + lock.readLock().unlock(); + } + return isEnabled; + } /** * Fires a transition in this marking. Changes this marking. * @@ -225,6 +254,24 @@ public boolean canBeUnfired(Transition transition) { return canBeUnfired; } + //Overload unfire + public boolean canBeUnfired(Transition transition,int i) { + boolean canBeUnfired = true; + lock.readLock().lock(); + try { + for (Arc arc : transition.getConnectedArcs()) { + if (!arc.isPlaceToTransition()) { + if (getTokens(arc.getPlaceNode()) < i*arc.getMultiplicity()) { + canBeUnfired = false; + break; + } + } + } + } finally { + lock.readLock().unlock(); + } + return canBeUnfired; + } public void undoFire(Transition transition) { lock.writeLock().lock(); @@ -560,12 +607,7 @@ else if(i>initialNumberOftokens || i==initialNumberOftokens){ } } } - else if(i>tokens) { - if (arc.isPlaceToTransition()) { - setTokens(arc.getPlaceNode(), 0); - } - - } + } } success = true; From dc5d80f25af301bfd90e7dbfc1af305c4212a956 Mon Sep 17 00:00:00 2001 From: e17goudi Date: Tue, 12 Mar 2019 23:48:30 +0100 Subject: [PATCH 12/16] Add comments in Marking.java --- src/org/pneditor/petrinet/Marking.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/org/pneditor/petrinet/Marking.java b/src/org/pneditor/petrinet/Marking.java index 38f0b5c..dd8cc98 100644 --- a/src/org/pneditor/petrinet/Marking.java +++ b/src/org/pneditor/petrinet/Marking.java @@ -179,13 +179,17 @@ public boolean isEnabled(Transition transition,int i) { continue; //but can be blocked by other arcs } else { if (!arc.getType().equals(Arc.INHIBITOR)) { - if (getTokens(arc.getPlaceNode()) < i*arc.getMultiplicity()) { //normal arc + if (getTokens(arc.getPlaceNode()) < i*arc.getMultiplicity()) { //normal arc + //The i value contributes to the prohibition to send + //Token(s) located upstream place(s) isEnabled = false; break; } } else { - if (getTokens(arc.getPlaceNode()) >= i*arc.getMultiplicity()) {//inhibitory arc - isEnabled = false; + if (getTokens(arc.getPlaceNode()) >= i*arc.getMultiplicity()) {//inhibitory arc and allow tokens not to be sent + //when the value of arc multiplied by the number of toKens are numerous + // the number of tokens on the place + isEnabled = false; break; } } @@ -254,7 +258,12 @@ public boolean canBeUnfired(Transition transition) { return canBeUnfired; } - //Overload unfire + /** + * @author goudiaby + * Overload to not allow transition to be activated when : + * The value of arc multiplied by the number of token is numerous than the number of tokens on the place(line 269):we do nothing + * (the token(s) are not sent). + */ public boolean canBeUnfired(Transition transition,int i) { boolean canBeUnfired = true; lock.readLock().lock(); From 4e5091f64111db6bb6426f080d0a1da00bd8373c Mon Sep 17 00:00:00 2001 From: e17goudi Date: Wed, 13 Mar 2019 07:53:08 +0100 Subject: [PATCH 13/16] delete i --- src/org/pneditor/petrinet/Marking.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/pneditor/petrinet/Marking.java b/src/org/pneditor/petrinet/Marking.java index dd8cc98..9fe053b 100644 --- a/src/org/pneditor/petrinet/Marking.java +++ b/src/org/pneditor/petrinet/Marking.java @@ -186,7 +186,7 @@ public boolean isEnabled(Transition transition,int i) { break; } } else { - if (getTokens(arc.getPlaceNode()) >= i*arc.getMultiplicity()) {//inhibitory arc and allow tokens not to be sent + if (getTokens(arc.getPlaceNode()) >= arc.getMultiplicity()) {//inhibitory arc and allow tokens not to be sent //when the value of arc multiplied by the number of toKens are numerous // the number of tokens on the place isEnabled = false; From ca2bea2cccda7d02a41b102e3987f4196d1c8826 Mon Sep 17 00:00:00 2001 From: e17goudi Date: Wed, 13 Mar 2019 08:02:05 +0100 Subject: [PATCH 14/16] comments --- src/org/pneditor/petrinet/Marking.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/pneditor/petrinet/Marking.java b/src/org/pneditor/petrinet/Marking.java index 9fe053b..1e33d0c 100644 --- a/src/org/pneditor/petrinet/Marking.java +++ b/src/org/pneditor/petrinet/Marking.java @@ -167,7 +167,7 @@ public boolean isEnabled(Transition transition) { } return isEnabled; } -//Overload method +//Overload method isenabled public boolean isEnabled(Transition transition,int i) { boolean isEnabled = true; From 4b300f78db8b61deb13f4c24cd2a0ed45b09b370 Mon Sep 17 00:00:00 2001 From: e17goudi Date: Wed, 13 Mar 2019 08:20:40 +0100 Subject: [PATCH 15/16] comments --- .../commands/FireTransitionCommand.java | 4 ++-- src/org/pneditor/petrinet/Marking.java | 24 +------------------ 2 files changed, 3 insertions(+), 25 deletions(-) diff --git a/src/org/pneditor/editor/commands/FireTransitionCommand.java b/src/org/pneditor/editor/commands/FireTransitionCommand.java index 1099fdb..fad369b 100644 --- a/src/org/pneditor/editor/commands/FireTransitionCommand.java +++ b/src/org/pneditor/editor/commands/FireTransitionCommand.java @@ -53,10 +53,10 @@ public void execute() { } /** * - * Marking receiver Call and UNDO management. + * Marking.java receiver Call and UNDO management . */ public void undo() { - if (marking.canBeUnfired(transition,_i)) { + if (marking.canBeUnfired(transition)) { marking.undoFire(transition,_i); } } diff --git a/src/org/pneditor/petrinet/Marking.java b/src/org/pneditor/petrinet/Marking.java index 1e33d0c..d5c137f 100644 --- a/src/org/pneditor/petrinet/Marking.java +++ b/src/org/pneditor/petrinet/Marking.java @@ -258,29 +258,7 @@ public boolean canBeUnfired(Transition transition) { return canBeUnfired; } - /** - * @author goudiaby - * Overload to not allow transition to be activated when : - * The value of arc multiplied by the number of token is numerous than the number of tokens on the place(line 269):we do nothing - * (the token(s) are not sent). - */ - public boolean canBeUnfired(Transition transition,int i) { - boolean canBeUnfired = true; - lock.readLock().lock(); - try { - for (Arc arc : transition.getConnectedArcs()) { - if (!arc.isPlaceToTransition()) { - if (getTokens(arc.getPlaceNode()) < i*arc.getMultiplicity()) { - canBeUnfired = false; - break; - } - } - } - } finally { - lock.readLock().unlock(); - } - return canBeUnfired; - } + public void undoFire(Transition transition) { lock.writeLock().lock(); From 6f5ffc8c4001c353c8ee5f40f2bbb2a8b09bc8b8 Mon Sep 17 00:00:00 2001 From: e17goudi Date: Wed, 13 Mar 2019 08:26:08 +0100 Subject: [PATCH 16/16] delete unnecessary elements --- src/org/pneditor/petrinet/Marking.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/pneditor/petrinet/Marking.java b/src/org/pneditor/petrinet/Marking.java index d5c137f..299f2ad 100644 --- a/src/org/pneditor/petrinet/Marking.java +++ b/src/org/pneditor/petrinet/Marking.java @@ -167,7 +167,7 @@ public boolean isEnabled(Transition transition) { } return isEnabled; } -//Overload method isenabled +//Overload method isenabled . public boolean isEnabled(Transition transition,int i) { boolean isEnabled = true;