From df55893ea5a3cf8e4b67a34b3e2a69d82b5061c5 Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Mon, 23 Sep 2024 20:11:40 +0200 Subject: [PATCH 01/12] Fixed issues with color types in manual edit --- .../CPN/ConstantsParser/ConstantsParser.jj | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj index eedfe4e9a..3e74f4987 100644 --- a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj +++ b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj @@ -80,7 +80,12 @@ public class ConstantsParser { for (Variable v : network.variables()) { List messagesList = new ArrayList(); constantsMap.put(v.getName(), v); - boolean canBeEdited = !(variables.containsKey(v.getName()) && !variables.get(v.getName()).getColorType().equals(v.getColorType())); + boolean canBeEdited = true; + if (variables.containsKey(v.getName())) { + ColorType ct = variables.get(v.getName()).getColorType(); + canBeEdited = ct.equals(v.getColorType()) || ct.isIntegerRange(); + } + canBeRemovedBitMap.put(v.getName(), network.canVariableBeRemoved(v, messagesList) && canBeEdited); messages.put(v.getName(), messagesList); } @@ -88,11 +93,13 @@ public class ConstantsParser { // Generate error messages for (String key : canBeRemovedBitMap.keySet()) { boolean skip = false; + if (constants.containsKey(key) || variables.containsKey(key) && canBeRemovedBitMap.get(key) || key.equals("dot") || colorTypes.containsKey(key) && - colorTypes.get(key).equals(constantsMap.get(key))) { + (colorTypes.get(key).equals(constantsMap.get(key)) || + colorTypes.get(key).isIntegerRange())) { continue; } else if (variables.containsKey(key) && !canBeRemovedBitMap.get(key)) { for (Variable v : network.variables()) { @@ -276,7 +283,19 @@ void colorTypes() : } ct = pct; - } else if (!isProductList.value) { + } else if (isIntList.value) { + ct = new ColorType(id.image); + int lowerBound = Integer.parseInt(values.get(0)); + int upperBound = Integer.parseInt(values.get(1)); + + if (lowerBound > upperBound) { + throw new ParseException("Lower bound must be lowr than or equal to upper bound"); + } + + for (int i = lowerBound; i <= upperBound; ++i) { + ct.addColor(Integer.toString(i)); + } + } else { ct = new ColorType(id.image); Set uniqueVals = new HashSet(); for (String color : values) { From fc341219c7239b5fe20853c67bec04562aa86289 Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Fri, 27 Sep 2024 15:59:19 +0200 Subject: [PATCH 02/12] now is able to extend and remove removeable colors from color types in manual edit --- .gitignore | 1 + .../java/dk/aau/cs/model/CPN/ColorType.java | 2 +- .../model/tapn/TimedArcPetriNetNetwork.java | 2 +- .../petrinet/editor/ColorComboboxPanel.java | 1 - .../CPN/ConstantsParser/ConstantsParser.jj | 72 ++++++++++++++++--- 5 files changed, 67 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 7056b34ea..c1744b973 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .gradle .idea +.vscode .r .bzr-repo build diff --git a/src/main/java/dk/aau/cs/model/CPN/ColorType.java b/src/main/java/dk/aau/cs/model/CPN/ColorType.java index bffb2e5ae..354c5a22d 100644 --- a/src/main/java/dk/aau/cs/model/CPN/ColorType.java +++ b/src/main/java/dk/aau/cs/model/CPN/ColorType.java @@ -137,7 +137,7 @@ public boolean contains(Color color){ } return false; } - + public Color getColorByName(String name){ for (Color c : colors) { if(c.getColorName().equals(name)){ diff --git a/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNetNetwork.java b/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNetNetwork.java index 1c895ca44..a458c7a78 100644 --- a/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNetNetwork.java +++ b/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNetNetwork.java @@ -836,7 +836,7 @@ private void isColorTypeUsedInVariable(ColorType colorType, List message } } - public boolean canColorBeRemoved(Color color, ArrayList messages) { + public boolean canColorBeRemoved(Color color, List messages) { isColorTypeUsedInProduct(color.getColorType(), messages); for (TimedArcPetriNet tapn : allTemplates()) { for (TimedPlace p : tapn.places()) { diff --git a/src/main/java/net/tapaal/gui/petrinet/editor/ColorComboboxPanel.java b/src/main/java/net/tapaal/gui/petrinet/editor/ColorComboboxPanel.java index 121b148eb..376d6803a 100644 --- a/src/main/java/net/tapaal/gui/petrinet/editor/ColorComboboxPanel.java +++ b/src/main/java/net/tapaal/gui/petrinet/editor/ColorComboboxPanel.java @@ -36,7 +36,6 @@ public JComboBox[] getColorTypeComboBoxesArray() { private void initPanel() { colorcomboBoxPanel = new JPanel(); colorcomboBoxPanel.setLayout(new GridBagLayout()); - //This panel contains all comboboxes, there can be more than one with ProductTypes comboBoxPanel = new JPanel(new GridBagLayout()); //In case it is a really large product type we have a scrollPane diff --git a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj index 3e74f4987..9c796d596 100644 --- a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj +++ b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj @@ -7,10 +7,18 @@ package dk.aau.cs.model.CPN.ConstantsParser; import java.io.StringReader; import java.util.ArrayList; import java.util.List; + +import dk.aau.cs.model.CPN.Color; import dk.aau.cs.model.CPN.ColorType; import dk.aau.cs.model.tapn.Constant; +import dk.aau.cs.model.tapn.TimedArcPetriNet; import dk.aau.cs.model.CPN.Variable; import dk.aau.cs.model.tapn.TimedArcPetriNetNetwork; +import dk.aau.cs.model.tapn.TimedPlace; +import dk.aau.cs.model.CPN.Expressions.ArcExpression; +import dk.aau.cs.model.tapn.TimedToken; +import dk.aau.cs.model.CPN.ColorMultiset; + import java.util.HashMap; import java.util.Map; import java.util.LinkedHashMap; @@ -92,24 +100,72 @@ public class ConstantsParser { // Generate error messages for (String key : canBeRemovedBitMap.keySet()) { - boolean skip = false; - if (constants.containsKey(key) || variables.containsKey(key) && canBeRemovedBitMap.get(key) || - key.equals("dot") || - colorTypes.containsKey(key) && - (colorTypes.get(key).equals(constantsMap.get(key)) || - colorTypes.get(key).isIntegerRange())) { + key.equals("dot")) { continue; } else if (variables.containsKey(key) && !canBeRemovedBitMap.get(key)) { + boolean skip = false; for (Variable v : network.variables()) { if (v.getName().equals(key)) { skip = v.getColorType().equals(variables.get(key).getColorType()); } } - } - if (skip) continue; + if (skip) continue; + } else if (colorTypes.containsKey(key)) { + if (colorTypes.get(key).equals(constantsMap.get(key))) continue; + + ColorType newCt = colorTypes.get(key); + ColorType ct = (ColorType)constantsMap.get(key); + + List removedColors = new ArrayList(); + + for (Color color : ct.getColorList()) { + if (!newCt.contains(color)) { + removedColors.add(color); + } + } + + int removeableColors = 0; + for (Color c : removedColors) { + List newMessagesList = new ArrayList(); + boolean colorCanBeRemoved = network.canColorBeRemoved(c, newMessagesList); + if (colorCanBeRemoved) { + ++removeableColors; + } else { + List messagesList = messages.get(key); + messagesList.addAll(newMessagesList); + messages.put(key, messagesList); + } + } + + // Update place color types + for (TimedArcPetriNet tapn : network.allTemplates()) { + for (TimedPlace p : tapn.places()) { + if (p.getColorType().equals(ct)) { + p.setColorType(newCt); + } + + ArcExpression expression = p.getExprWithNewColorType(newCt); + if (expression != p.getTokensAsExpression()) { + ColorMultiset cm = expression.eval(network.getContext()); + if (cm != null) { + List tokensToAdd = new ArrayList(p.tokens()); + for (TimedToken token : cm.getTokens(p)) { + tapn.marking().remove(token); + } + + p.updateTokens(tokensToAdd, expression); + } + } + } + } + + if (removeableColors == removedColors.size()) { + continue; + } + } Object obj = constantsMap.get(key); if (!canBeRemovedBitMap.get(key)) { From 7d71ce4784b9e3bf45fe3c195ebd80d575ea56fa Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Sun, 29 Sep 2024 15:28:17 +0200 Subject: [PATCH 03/12] Now no longer allows product types to be extended if used --- .../CPN/ConstantsParser/ConstantsParser.jj | 78 ++++++++++--------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj index 9c796d596..9c5519056 100644 --- a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj +++ b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj @@ -119,51 +119,53 @@ public class ConstantsParser { ColorType newCt = colorTypes.get(key); ColorType ct = (ColorType)constantsMap.get(key); - List removedColors = new ArrayList(); - - for (Color color : ct.getColorList()) { - if (!newCt.contains(color)) { - removedColors.add(color); - } - } - - int removeableColors = 0; - for (Color c : removedColors) { - List newMessagesList = new ArrayList(); - boolean colorCanBeRemoved = network.canColorBeRemoved(c, newMessagesList); - if (colorCanBeRemoved) { - ++removeableColors; - } else { - List messagesList = messages.get(key); - messagesList.addAll(newMessagesList); - messages.put(key, messagesList); + if (!(ct instanceof ProductType)) { + List removedColors = new ArrayList(); + + for (Color color : ct.getColorList()) { + if (!newCt.contains(color)) { + removedColors.add(color); + } } - } - - // Update place color types - for (TimedArcPetriNet tapn : network.allTemplates()) { - for (TimedPlace p : tapn.places()) { - if (p.getColorType().equals(ct)) { - p.setColorType(newCt); + + int removeableColors = 0; + for (Color c : removedColors) { + List newMessagesList = new ArrayList(); + boolean colorCanBeRemoved = network.canColorBeRemoved(c, newMessagesList); + if (colorCanBeRemoved) { + ++removeableColors; + } else { + List messagesList = messages.get(key); + messagesList.addAll(newMessagesList); + messages.put(key, messagesList); } + } - ArcExpression expression = p.getExprWithNewColorType(newCt); - if (expression != p.getTokensAsExpression()) { - ColorMultiset cm = expression.eval(network.getContext()); - if (cm != null) { - List tokensToAdd = new ArrayList(p.tokens()); - for (TimedToken token : cm.getTokens(p)) { - tapn.marking().remove(token); + // Update place color types + for (TimedArcPetriNet tapn : network.allTemplates()) { + for (TimedPlace p : tapn.places()) { + if (p.getColorType().equals(ct)) { + p.setColorType(newCt); + } + + ArcExpression expression = p.getExprWithNewColorType(newCt); + if (expression != p.getTokensAsExpression()) { + ColorMultiset cm = expression.eval(network.getContext()); + if (cm != null) { + List tokensToAdd = new ArrayList(p.tokens()); + for (TimedToken token : cm.getTokens(p)) { + tapn.marking().remove(token); + } + + p.updateTokens(tokensToAdd, expression); } - - p.updateTokens(tokensToAdd, expression); } } } - } - - if (removeableColors == removedColors.size()) { - continue; + + if (removeableColors == removedColors.size()) { + continue; + } } } From ca308ab70fa8d43a4a85518b0ab6f1efe322b847 Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Mon, 30 Sep 2024 15:51:17 +0200 Subject: [PATCH 04/12] fixed issue with extending some color types --- .../aau/cs/model/tapn/TimedArcPetriNet.java | 1 - .../CPN/ConstantsParser/ConstantsParser.jj | 118 ++++++++++++++---- 2 files changed, 94 insertions(+), 25 deletions(-) diff --git a/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNet.java b/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNet.java index f51c92997..f859d8de7 100644 --- a/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNet.java +++ b/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNet.java @@ -10,7 +10,6 @@ import dk.aau.cs.model.tapn.Bound.InfBound; import dk.aau.cs.util.IntervalOperations; import dk.aau.cs.util.Require; -import net.tapaal.gui.petrinet.TAPNLens; public class TimedArcPetriNet { private String name; diff --git a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj index 9c5519056..1c801d625 100644 --- a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj +++ b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj @@ -10,6 +10,10 @@ import java.util.List; import dk.aau.cs.model.CPN.Color; import dk.aau.cs.model.CPN.ColorType; +import dk.aau.cs.model.CPN.ColoredTimeInvariant; +import dk.aau.cs.model.tapn.TimedInputArc; +import dk.aau.cs.model.tapn.TimedOutputArc; +import dk.aau.cs.model.tapn.TimedTransition; import dk.aau.cs.model.tapn.Constant; import dk.aau.cs.model.tapn.TimedArcPetriNet; import dk.aau.cs.model.CPN.Variable; @@ -91,7 +95,7 @@ public class ConstantsParser { boolean canBeEdited = true; if (variables.containsKey(v.getName())) { ColorType ct = variables.get(v.getName()).getColorType(); - canBeEdited = ct.equals(v.getColorType()) || ct.isIntegerRange(); + canBeEdited = ct.equals(v.getColorType()); } canBeRemovedBitMap.put(v.getName(), network.canVariableBeRemoved(v, messagesList) && canBeEdited); @@ -108,7 +112,8 @@ public class ConstantsParser { boolean skip = false; for (Variable v : network.variables()) { if (v.getName().equals(key)) { - skip = v.getColorType().equals(variables.get(key).getColorType()); + skip = v.getColorType().getName().equals(variables.get(key).getColorType().getName()); + break; } } @@ -140,30 +145,16 @@ public class ConstantsParser { messages.put(key, messagesList); } } - - // Update place color types - for (TimedArcPetriNet tapn : network.allTemplates()) { - for (TimedPlace p : tapn.places()) { - if (p.getColorType().equals(ct)) { - p.setColorType(newCt); - } - - ArcExpression expression = p.getExprWithNewColorType(newCt); - if (expression != p.getTokensAsExpression()) { - ColorMultiset cm = expression.eval(network.getContext()); - if (cm != null) { - List tokensToAdd = new ArrayList(p.tokens()); - for (TimedToken token : cm.getTokens(p)) { - tapn.marking().remove(token); - } - - p.updateTokens(tokensToAdd, expression); - } - } - } - } if (removeableColors == removedColors.size()) { + updateColorTypes(ct, newCt); + continue; + } + } else { + ProductType pct = (ProductType)ct; + ProductType newPct = (ProductType)newCt; + + if (pct.containsTypes(newPct.getColorTypes())) { continue; } } @@ -234,6 +225,85 @@ public class ConstantsParser { throw new ParseException("Variable with name \"" + id + "\" already exists"); } } + + private static void updateColorTypes(ColorType ct, ColorType newCt) { + for (TimedArcPetriNet tapn : network.allTemplates()) { + for (TimedPlace place : tapn.places()) { + if (place.getColorType().equals(ct)) { + if (place.getTokensAsExpression() != null) { + place.setTokenExpression(place.getTokensAsExpression().getExprConverted(ct, newCt)); + } + + List oldTokens = new ArrayList(place.tokens()); + place.setColorType(newCt); + for (TimedToken token : oldTokens) { + if (newCt.contains(token.getColor())) { + place.addToken(new TimedToken(place, token.age(), newCt.getColorByName(token.getColor().getName()))); + } + } + } + + ArcExpression expression = place.getExprWithNewColorType(ct); + + if (expression != place.getTokensAsExpression()) { + ColorMultiset cm = expression.eval(network.getContext()); + if (cm != null) { + List tokensToAdd = new ArrayList(place.tokens()); + for (TimedToken token : cm.getTokens(place)) { + tapn.marking().remove(token); + } + place.updateTokens(tokensToAdd, expression); + } + } + + List invariantsToAdd = new ArrayList(); + for (ColoredTimeInvariant invariant : place.getCtiList()) { + if (ct.contains(invariant.getColor())) { + invariantsToAdd.add(new ColoredTimeInvariant(invariant.isUpperNonstrict(), invariant.upperBound(), ct.getColorByName(invariant.getColor().getColorName()))); + } else { + invariantsToAdd.add(invariant); + } + } + + place.setCtiList(invariantsToAdd); + + if (place.getColorType().getName().equals(ct.getName())) { + place.setColorType(ct); + } + } + + for (TimedInputArc arc : tapn.inputArcs()) { + if (arc.getArcExpression() != null) { + arc.setExpression(arc.getArcExpression().getExprWithNewColorType(ct)); + } + } + + for (TimedOutputArc arc : tapn.outputArcs()) { + if (arc.getExpression() != null) { + arc.setExpression(arc.getExpression().getExprWithNewColorType(ct)); + } + } + + for (TimedTransition transition : tapn.transitions()) { + if (transition.getGuard() != null) { + transition.getGuard().setColorType(ct); + } + } + } + + for (ColorType networkCt : network.colorTypes()) { + if (networkCt instanceof ProductType) { + ProductType networkPct = (ProductType)networkCt; + networkPct.replaceColorType(ct, newCt); + } + } + + for (Variable var : network.variables()) { + if (var.getColorType().equals(newCt)) { + var.setColorType(ct); + } + } + } } PARSER_END(ConstantsParser) From 14c77e7db2d5ce3d230cb9b47c59317888d5e818 Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Mon, 30 Sep 2024 21:47:17 +0200 Subject: [PATCH 05/12] fixed other issues with states not being changed correctly from manual edit --- .../aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj index 1c801d625..f353c1b9e 100644 --- a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj +++ b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj @@ -155,6 +155,7 @@ public class ConstantsParser { ProductType newPct = (ProductType)newCt; if (pct.containsTypes(newPct.getColorTypes())) { + updateColorTypes(ct, newCt); continue; } } @@ -237,7 +238,7 @@ public class ConstantsParser { List oldTokens = new ArrayList(place.tokens()); place.setColorType(newCt); for (TimedToken token : oldTokens) { - if (newCt.contains(token.getColor())) { + if (token.getColor() != null && newCt.contains(token.getColor())) { place.addToken(new TimedToken(place, token.age(), newCt.getColorByName(token.getColor().getName()))); } } @@ -252,6 +253,7 @@ public class ConstantsParser { for (TimedToken token : cm.getTokens(place)) { tapn.marking().remove(token); } +; place.updateTokens(tokensToAdd, expression); } } @@ -266,10 +268,6 @@ public class ConstantsParser { } place.setCtiList(invariantsToAdd); - - if (place.getColorType().getName().equals(ct.getName())) { - place.setColorType(ct); - } } for (TimedInputArc arc : tapn.inputArcs()) { @@ -398,7 +396,6 @@ void colorTypes() : if (product.equals("dot")) { ColorType dot = new ColorType("dot"); dot.addColor("dot"); - pct.addType(dot); continue; } From 47a262eee09c2a576d88313c44869a75587a2ac8 Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Mon, 30 Sep 2024 21:50:22 +0200 Subject: [PATCH 06/12] remove break --- .../dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj index f353c1b9e..52967bc1d 100644 --- a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj +++ b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj @@ -113,7 +113,6 @@ public class ConstantsParser { for (Variable v : network.variables()) { if (v.getName().equals(key)) { skip = v.getColorType().getName().equals(variables.get(key).getColorType().getName()); - break; } } From 59927351bcf1d57779b8e3052fea15b87127372e Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Tue, 1 Oct 2024 20:31:27 +0200 Subject: [PATCH 07/12] spelling correction and early break --- .../dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj index 52967bc1d..699b52e7c 100644 --- a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj +++ b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj @@ -113,6 +113,7 @@ public class ConstantsParser { for (Variable v : network.variables()) { if (v.getName().equals(key)) { skip = v.getColorType().getName().equals(variables.get(key).getColorType().getName()); + break; } } @@ -413,7 +414,7 @@ void colorTypes() : int upperBound = Integer.parseInt(values.get(1)); if (lowerBound > upperBound) { - throw new ParseException("Lower bound must be lowr than or equal to upper bound"); + throw new ParseException("Lower bound must be lower than or equal to upper bound"); } for (int i = lowerBound; i <= upperBound; ++i) { From 6589355feb2cc5f5b424a67a16324972fa5a3522 Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Tue, 1 Oct 2024 21:11:43 +0200 Subject: [PATCH 08/12] now allows removing unused colors in color types when color type is used in product types --- .../CPN/Expressions/TupleExpression.java | 20 +++++++++++-------- .../model/tapn/TimedArcPetriNetNetwork.java | 11 ++++++++-- .../CPN/ConstantsParser/ConstantsParser.jj | 19 +++++++++--------- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/main/java/dk/aau/cs/model/CPN/Expressions/TupleExpression.java b/src/main/java/dk/aau/cs/model/CPN/Expressions/TupleExpression.java index 24b124dee..81baef72d 100644 --- a/src/main/java/dk/aau/cs/model/CPN/Expressions/TupleExpression.java +++ b/src/main/java/dk/aau/cs/model/CPN/Expressions/TupleExpression.java @@ -48,17 +48,21 @@ public List eval(ExpressionContext context) { @Override public boolean containsColor(Color color) { boolean containsColor = false; - Vector tuple = color.getTuple(); - if (tuple != null && tuple.size() == colors.size()) { - containsColor = true; - for (int i = 0; i < tuple.size(); i++) { - if (!colors.get(i).containsColor(tuple.get(i))) { - containsColor = false; - break; + + for (int i = 0; i < colors.size(); ++i) { + if (colors.get(i).containsColor(color)) { + containsColor = true; + + List tuple = color.getTuple(); + if (tuple != null) { + containsColor = tuple.size() == colors.size(); } + + break; } } - return containsColor || equals(color); + + return containsColor; } @Override diff --git a/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNetNetwork.java b/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNetNetwork.java index a458c7a78..cd27d01fe 100644 --- a/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNetNetwork.java +++ b/src/main/java/dk/aau/cs/model/tapn/TimedArcPetriNetNetwork.java @@ -837,42 +837,49 @@ private void isColorTypeUsedInVariable(ColorType colorType, List message } public boolean canColorBeRemoved(Color color, List messages) { - isColorTypeUsedInProduct(color.getColorType(), messages); for (TimedArcPetriNet tapn : allTemplates()) { for (TimedPlace p : tapn.places()) { - if (p.getTokensAsExpression() != null && p.getTokensAsExpression().containsColor(color)) { + if (p.getTokensAsExpression() != null && + p.getTokensAsExpression().containsColor(color)) { messages.add(color.getName() + " is used in a token in place " + p.name() + " \n"); } + for (ColoredTimeInvariant invariant : p.getCtiList()) { if (invariant.getColor().equals(color)) { messages.add(color.getName() + " is used in an invariant in place " + p.name() + " \n"); } } } + for (TimedTransition t : tapn.transitions()) { if (t.getGuard() != null && t.getGuard().containsColor(color)) { messages.add(color.getName() + " of color type is used in transition " + t.name() + "\n"); } } + for (TransportArc arc : tapn.transportArcs()) { if (arc.getInputExpression().containsColor(color)) { messages.add(color.getName() + " is used on transport arc from " + arc.source().name() + " to " + arc.transition() + "\n"); } + if (arc.getOutputExpression().containsColor(color)) { messages.add(color.getName() + " is used on transport arc from " + arc.transition()+ " to " + arc.destination().name() + "\n"); } } + for (TimedInputArc arc : tapn.inputArcs()) { if (arc.getArcExpression().containsColor(color)) { messages.add(color.getName() + " is used on arc from " + arc.source().name() + " to " + arc.destination().name() + "\n"); } } + for (TimedOutputArc arc : tapn.outputArcs()) { if (arc.getExpression().containsColor(color)) { messages.add(color.getName() + " is used on arc from " + arc.source().name() + " to " + arc.destination().name() + "\n"); } } } + return messages.isEmpty(); } diff --git a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj index 699b52e7c..a4b489a8f 100644 --- a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj +++ b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj @@ -124,9 +124,16 @@ public class ConstantsParser { ColorType newCt = colorTypes.get(key); ColorType ct = (ColorType)constantsMap.get(key); - if (!(ct instanceof ProductType)) { + if (ct instanceof ProductType) { + ProductType pct = (ProductType)ct; + ProductType newPct = (ProductType)newCt; + + if (pct.containsTypes(newPct.getColorTypes())) { + updateColorTypes(ct, newCt); + continue; + } + } else { List removedColors = new ArrayList(); - for (Color color : ct.getColorList()) { if (!newCt.contains(color)) { removedColors.add(color); @@ -150,14 +157,6 @@ public class ConstantsParser { updateColorTypes(ct, newCt); continue; } - } else { - ProductType pct = (ProductType)ct; - ProductType newPct = (ProductType)newCt; - - if (pct.containsTypes(newPct.getColorTypes())) { - updateColorTypes(ct, newCt); - continue; - } } } From 10b6c5f4bd232fd08e9797062aa87388b08ca02d Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Tue, 1 Oct 2024 21:14:11 +0200 Subject: [PATCH 09/12] simplify --- .../dk/aau/cs/model/CPN/Expressions/TupleExpression.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/dk/aau/cs/model/CPN/Expressions/TupleExpression.java b/src/main/java/dk/aau/cs/model/CPN/Expressions/TupleExpression.java index 81baef72d..ea2466e1a 100644 --- a/src/main/java/dk/aau/cs/model/CPN/Expressions/TupleExpression.java +++ b/src/main/java/dk/aau/cs/model/CPN/Expressions/TupleExpression.java @@ -52,12 +52,6 @@ public boolean containsColor(Color color) { for (int i = 0; i < colors.size(); ++i) { if (colors.get(i).containsColor(color)) { containsColor = true; - - List tuple = color.getTuple(); - if (tuple != null) { - containsColor = tuple.size() == colors.size(); - } - break; } } From b820f3cdab11b7dbe3ab086974a72d526803586c Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Wed, 2 Oct 2024 16:15:41 +0200 Subject: [PATCH 10/12] Now correctly updates product types to use new color types --- .../cs/model/CPN/ConstantsParser/ConstantsParser.jj | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj index a4b489a8f..ce30a4d31 100644 --- a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj +++ b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj @@ -127,9 +127,15 @@ public class ConstantsParser { if (ct instanceof ProductType) { ProductType pct = (ProductType)ct; ProductType newPct = (ProductType)newCt; - - if (pct.containsTypes(newPct.getColorTypes())) { - updateColorTypes(ct, newCt); + + // Update product color types to new color types + for (ColorType colorType : pct.getProductColorTypes()) { + newPct.replaceColorType(colorType, (ColorType)colorTypes.get(colorType.getName())); + } + + boolean isSimiliar = pct.getProductColorTypes().size() == newPct.getProductColorTypes().size() && pct.containsTypes(newPct.getColorTypes()); + if (isSimiliar) { + updateColorTypes(pct, newPct); continue; } } else { From ae942cd861732fffc24d72a49a601095e53b4b8f Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Thu, 3 Oct 2024 15:43:49 +0200 Subject: [PATCH 11/12] fixed issues with .all tokens and id/name mismatch --- src/main/java/dk/aau/cs/io/LoadTACPN.java | 2 +- src/main/java/net/tapaal/gui/petrinet/undo/Command.java | 2 +- .../dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/dk/aau/cs/io/LoadTACPN.java b/src/main/java/dk/aau/cs/io/LoadTACPN.java index 62e1a35af..7996bcf24 100644 --- a/src/main/java/dk/aau/cs/io/LoadTACPN.java +++ b/src/main/java/dk/aau/cs/io/LoadTACPN.java @@ -171,7 +171,7 @@ private void parseNamedSort(Node node, TimedArcPetriNetNetwork network) throws F // Parse prodcut types last as they can used color types not yet declared productTypes.add(node); } else { - ColorType ct = new ColorType(name, id); + ColorType ct = new ColorType(name); if (typetag.equals("dot")) { return; } else if (typetag.equals("finiteintrange")){ diff --git a/src/main/java/net/tapaal/gui/petrinet/undo/Command.java b/src/main/java/net/tapaal/gui/petrinet/undo/Command.java index 00b6d6552..d1d7f2ece 100644 --- a/src/main/java/net/tapaal/gui/petrinet/undo/Command.java +++ b/src/main/java/net/tapaal/gui/petrinet/undo/Command.java @@ -2,5 +2,5 @@ public interface Command { void undo(); - void redo(); + void redo(); } diff --git a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj index ce30a4d31..16c89d3a7 100644 --- a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj +++ b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj @@ -249,8 +249,7 @@ public class ConstantsParser { } } - ArcExpression expression = place.getExprWithNewColorType(ct); - + ArcExpression expression = place.getExprWithNewColorType(newCt); if (expression != place.getTokensAsExpression()) { ColorMultiset cm = expression.eval(network.getContext()); if (cm != null) { From e63fcff8336a15937347e2530fcb39e58e75c8a8 Mon Sep 17 00:00:00 2001 From: Mikkel Tygesen Date: Thu, 3 Oct 2024 18:15:42 +0200 Subject: [PATCH 12/12] simpler error --- .../dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj index 16c89d3a7..84781bac1 100644 --- a/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj +++ b/src/main/javacc/dk/aau/cs/model/CPN/ConstantsParser/ConstantsParser.jj @@ -153,7 +153,7 @@ public class ConstantsParser { if (colorCanBeRemoved) { ++removeableColors; } else { - List messagesList = messages.get(key); + List messagesList = new ArrayList(); messagesList.addAll(newMessagesList); messages.put(key, messagesList); } @@ -193,7 +193,7 @@ public class ConstantsParser { if (!(obj instanceof Constant)) { message += " for the following reasons: \n\n"; - message += String.join("\n", messages.get(key)); + message += String.join("", messages.get(key)); } else { message += " because it is in use"; }