Merge lp:~tapaal-contributor/tapaal/colorTraceFix into lp:~tapaal-contributor/tapaal/cpn-gui-dev

Proposed by Kenneth Yrke Jørgensen
Status: Merged
Approved by: Jiri Srba
Approved revision: 1568
Merged at revision: 1570
Proposed branch: lp:~tapaal-contributor/tapaal/colorTraceFix
Merge into: lp:~tapaal-contributor/tapaal/cpn-gui-dev
Diff against target: 271 lines (+97/-77)
3 files modified
src/dk/aau/cs/verification/VerifyTAPN/VerifyDTAPN.java (+30/-24)
src/dk/aau/cs/verification/VerifyTAPN/VerifyPN.java (+45/-49)
src/net/tapaal/gui/petrinet/verification/RunVerification.java (+22/-4)
To merge this branch: bzr merge lp:~tapaal-contributor/tapaal/colorTraceFix
Reviewer Review Type Date Requested Status
Jiri Srba Approve
Review via email: mp+414856@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Kenneth Yrke Jørgensen (yrke) wrote :

Use with the new version of verifypn to avoid issue where the opend tab does not have a name.

Revision history for this message
Jiri Srba (srba) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/dk/aau/cs/verification/VerifyTAPN/VerifyDTAPN.java'
--- src/dk/aau/cs/verification/VerifyTAPN/VerifyDTAPN.java 2022-01-28 09:46:10 +0000
+++ src/dk/aau/cs/verification/VerifyTAPN/VerifyDTAPN.java 2022-02-01 10:04:11 +0000
@@ -5,14 +5,33 @@
5import dk.aau.cs.TCTL.TCTLAGNode;5import dk.aau.cs.TCTL.TCTLAGNode;
6import dk.aau.cs.TCTL.TCTLEFNode;6import dk.aau.cs.TCTL.TCTLEFNode;
7import dk.aau.cs.TCTL.TCTLEGNode;7import dk.aau.cs.TCTL.TCTLEGNode;
8import pipe.gui.petrinet.PetriNetTab;
9import dk.aau.cs.io.LoadedModel;8import dk.aau.cs.io.LoadedModel;
10import dk.aau.cs.io.TapnEngineXmlLoader;9import dk.aau.cs.io.TapnEngineXmlLoader;
11import dk.aau.cs.model.tapn.*;10import dk.aau.cs.model.tapn.LocalTimedPlace;
11import dk.aau.cs.model.tapn.TAPNQuery;
12import dk.aau.cs.model.tapn.TimedArcPetriNet;
13import dk.aau.cs.model.tapn.TimedPlace;
12import dk.aau.cs.model.tapn.simulation.TimedArcPetriNetTrace;14import dk.aau.cs.model.tapn.simulation.TimedArcPetriNetTrace;
13import dk.aau.cs.util.*;15import dk.aau.cs.util.FormatException;
16import dk.aau.cs.util.Tuple;
17import dk.aau.cs.util.UnsupportedModelException;
18import dk.aau.cs.util.UnsupportedQueryException;
14import dk.aau.cs.verification.*;19import dk.aau.cs.verification.*;
20import net.tapaal.Preferences;
21import net.tapaal.TAPAAL;
22import net.tapaal.gui.petrinet.verification.InclusionPlaces;
23import net.tapaal.gui.petrinet.verification.InclusionPlaces.InclusionPlacesOption;
24import net.tapaal.gui.petrinet.verification.TAPNQuery.TraceOption;
25import net.tapaal.gui.petrinet.verification.TAPNQuery.WorkflowMode;
26import net.tapaal.gui.petrinet.verification.UnfoldNet;
27import pipe.gui.Constants;
28import pipe.gui.FileFinder;
29import pipe.gui.MessengerImpl;
30import pipe.gui.TAPAALGUI;
31import pipe.gui.petrinet.PetriNetTab;
32import pipe.gui.petrinet.dataLayer.DataLayer;
1533
34import javax.swing.*;
16import java.io.BufferedReader;35import java.io.BufferedReader;
17import java.io.File;36import java.io.File;
18import java.io.IOException;37import java.io.IOException;
@@ -20,18 +39,6 @@
20import java.util.ArrayList;39import java.util.ArrayList;
21import java.util.List;40import java.util.List;
2241
23import net.tapaal.Preferences;
24import net.tapaal.TAPAAL;
25import pipe.gui.petrinet.dataLayer.DataLayer;
26import net.tapaal.gui.petrinet.verification.TAPNQuery.TraceOption;
27import net.tapaal.gui.petrinet.verification.TAPNQuery.WorkflowMode;
28import pipe.gui.*;
29import net.tapaal.gui.petrinet.verification.UnfoldNet;
30import net.tapaal.gui.petrinet.verification.InclusionPlaces;
31import net.tapaal.gui.petrinet.verification.InclusionPlaces.InclusionPlacesOption;
32
33import javax.swing.*;
34
35public class VerifyDTAPN implements ModelChecker{42public class VerifyDTAPN implements ModelChecker{
3643
37 private static final String NEED_TO_LOCATE_VERIFYDTAPN_MSG = "TAPAAL needs to know the location of the file verifydtapn.\n\n"44 private static final String NEED_TO_LOCATE_VERIFYDTAPN_MSG = "TAPAAL needs to know the location of the file verifydtapn.\n\n"
@@ -274,9 +281,13 @@
274281
275 TimedArcPetriNetTrace tapnTrace = null;282 TimedArcPetriNetTrace tapnTrace = null;
276283
277
278 boolean isColored = (lens != null && lens.isColored() || model.value1().parentNetwork().isColored());284 boolean isColored = (lens != null && lens.isColored() || model.value1().parentNetwork().isColored());
279 if(options.traceOption() != TraceOption.NONE && isColored && queryResult != null && queryResult.value1() != null && queryResult.value1().isQuerySatisfied()) {285 boolean showTrace = ((query.getProperty() instanceof TCTLEFNode && queryResult.value1().isQuerySatisfied()) ||
286 (query.getProperty() instanceof TCTLAGNode && !queryResult.value1().isQuerySatisfied()) ||
287 (query.getProperty() instanceof TCTLEGNode && queryResult.value1().isQuerySatisfied()) ||
288 (query.getProperty() instanceof TCTLAFNode && !queryResult.value1().isQuerySatisfied()));
289
290 if(options.traceOption() != TraceOption.NONE && isColored && showTrace) {
280 TapnEngineXmlLoader tapnLoader = new TapnEngineXmlLoader();291 TapnEngineXmlLoader tapnLoader = new TapnEngineXmlLoader();
281 File fileOut = new File(options.unfoldedModelPath());292 File fileOut = new File(options.unfoldedModelPath());
282 File queriesOut = new File(options.unfoldedQueriesPath());293 File queriesOut = new File(options.unfoldedQueriesPath());
@@ -291,11 +302,7 @@
291 tapnTrace = parseTrace(!errorOutput.contains("Trace:") ? errorOutput : (errorOutput.split("Trace:")[1]), options, model, exportedModel, query, queryResult.value1());302 tapnTrace = parseTrace(!errorOutput.contains("Trace:") ? errorOutput : (errorOutput.split("Trace:")[1]), options, model, exportedModel, query, queryResult.value1());
292 }303 }
293304
294 if(tapnTrace == null){305 if (tapnTrace != null) {
295 String message = "No trace could be generated.\n\n";
296 message += "Model checker output:\n" + standardOutput;
297 messenger.displayWrappedErrorMessage(message,"No trace found");
298 } else {
299 int dialogResult = JOptionPane.showConfirmDialog(null, "There is a trace that will be displayed in a new tab on the unfolded net/query.", "Open trace", JOptionPane.OK_CANCEL_OPTION);306 int dialogResult = JOptionPane.showConfirmDialog(null, "There is a trace that will be displayed in a new tab on the unfolded net/query.", "Open trace", JOptionPane.OK_CANCEL_OPTION);
300 if (dialogResult == JOptionPane.OK_OPTION) {307 if (dialogResult == JOptionPane.OK_OPTION) {
301 newTab = new PetriNetTab(loadedModel.network(), loadedModel.templates(), loadedModel.queries(), new PetriNetTab.TAPNLens(TAPAALGUI.getCurrentTab().getLens().isTimed(), TAPAALGUI.getCurrentTab().getLens().isGame(), false));308 newTab = new PetriNetTab(loadedModel.network(), loadedModel.templates(), loadedModel.queries(), new PetriNetTab.TAPNLens(TAPAALGUI.getCurrentTab().getLens().isTimed(), TAPAALGUI.getCurrentTab().getLens().isGame(), false));
@@ -312,6 +319,7 @@
312 options.setTraceOption(TraceOption.NONE);319 options.setTraceOption(TraceOption.NONE);
313 }320 }
314 }321 }
322
315 } catch (FormatException e) {323 } catch (FormatException e) {
316 e.printStackTrace();324 e.printStackTrace();
317 return null;325 return null;
@@ -352,8 +360,6 @@
352 (query.getProperty() instanceof TCTLEGNode && !queryResult.isQuerySatisfied()) ||360 (query.getProperty() instanceof TCTLEGNode && !queryResult.isQuerySatisfied()) ||
353 (query.getProperty() instanceof TCTLAFNode && queryResult.isQuerySatisfied())) {361 (query.getProperty() instanceof TCTLAFNode && queryResult.isQuerySatisfied())) {
354 return null;362 return null;
355 } else {
356 messenger.displayErrorMessage("Verifydtapn cannot generate the requested trace for the model. Try another trace option.");
357 }363 }
358 }364 }
359 }365 }
360366
=== modified file 'src/dk/aau/cs/verification/VerifyTAPN/VerifyPN.java'
--- src/dk/aau/cs/verification/VerifyTAPN/VerifyPN.java 2022-01-28 12:27:29 +0000
+++ src/dk/aau/cs/verification/VerifyTAPN/VerifyPN.java 2022-02-01 10:04:11 +0000
@@ -287,48 +287,54 @@
287287
288 Tuple<QueryResult, Stats> queryResult = parseQueryResult(standardOutput, model.value1().marking().size() + query.getExtraTokens(), query.getExtraTokens(), query);288 Tuple<QueryResult, Stats> queryResult = parseQueryResult(standardOutput, model.value1().marking().size() + query.getExtraTokens(), query.getExtraTokens(), query);
289289
290 boolean isColored = (lens != null && lens.isColored() || model.value1().parentNetwork().isColored());
291 if (options.traceOption() != TraceOption.NONE && isColored && queryResult != null && queryResult.value1() != null && queryResult.value1().isQuerySatisfied()) {
292 PNMLoader tapnLoader = new PNMLoader();
293 File fileOut = new File(options.unfoldedModelPath());
294 File queriesOut = new File(options.unfoldedQueriesPath());
295 PetriNetTab newTab;
296 LoadedModel loadedModel = null;
297 try {
298 loadedModel = tapnLoader.load(fileOut);
299 TAPNComposer newComposer = new TAPNComposer(new MessengerImpl(), true);
300 model = newComposer.transformModel(loadedModel.network());
301
302 if (queryResult != null && queryResult.value1() != null) {
303 tapnTrace = parseTrace(errorOutput, options, model, exportedModel, query, queryResult.value1(), true);
304 }
305
306 if (!(tapnTrace == null)) {
307 int dialogResult = JOptionPane.showConfirmDialog(null, "There is a trace that will be displayed in a new tab on the unfolded net/query.", "Open trace", JOptionPane.OK_CANCEL_OPTION);
308 if (dialogResult == JOptionPane.OK_OPTION) {
309 newTab = new PetriNetTab(loadedModel.network(), loadedModel.templates(), loadedModel.queries(), new PetriNetTab.TAPNLens(TAPAALGUI.getCurrentTab().getLens().isTimed(), TAPAALGUI.getCurrentTab().getLens().isGame(), false));
310
311 //The query being verified should be the only query
312 for (net.tapaal.gui.petrinet.verification.TAPNQuery loadedQuery : UnfoldNet.getQueries(queriesOut, loadedModel.network())) {
313 newTab.setInitialName(loadedQuery.getName() + " - unfolded");
314 loadedQuery.copyOptions(dataLayerQuery);
315 newTab.addQuery(loadedQuery);
316 }
317 TAPAALGUI.openNewTabFromStream(newTab);
318 } else {
319 options.setTraceOption(TraceOption.NONE);
320 }
321 }
322 } catch (FormatException e) {
323 e.printStackTrace();
324 } catch (ThreadDeath d) {
325 return null;
326 }
327 }
328
329 if (queryResult == null || queryResult.value1() == null) {290 if (queryResult == null || queryResult.value1() == null) {
330 return new VerificationResult<TimedArcPetriNetTrace>(errorOutput + System.getProperty("line.separator") + standardOutput, runner.getRunningTime());291 return new VerificationResult<TimedArcPetriNetTrace>(errorOutput + System.getProperty("line.separator") + standardOutput, runner.getRunningTime());
331 } else {292 } else {
293
294 boolean isColored = (lens != null && lens.isColored() || model.value1().parentNetwork().isColored());
295 boolean showTrace = ((query.getProperty() instanceof TCTLEFNode && queryResult.value1().isQuerySatisfied()) ||
296 (query.getProperty() instanceof TCTLAGNode && !queryResult.value1().isQuerySatisfied()) ||
297 (query.getProperty() instanceof TCTLEGNode && queryResult.value1().isQuerySatisfied()) ||
298 (query.getProperty() instanceof TCTLAFNode && !queryResult.value1().isQuerySatisfied()));
299
300 if (options.traceOption() != TraceOption.NONE && isColored && showTrace) {
301 PNMLoader tapnLoader = new PNMLoader();
302 File fileOut = new File(options.unfoldedModelPath());
303 File queriesOut = new File(options.unfoldedQueriesPath());
304 PetriNetTab newTab;
305 LoadedModel loadedModel = null;
306 try {
307 loadedModel = tapnLoader.load(fileOut);
308 TAPNComposer newComposer = new TAPNComposer(new MessengerImpl(), true);
309 model = newComposer.transformModel(loadedModel.network());
310
311 if (queryResult != null && queryResult.value1() != null) {
312 tapnTrace = parseTrace(errorOutput, options, model, exportedModel, query, queryResult.value1());
313 }
314
315 if (!(tapnTrace == null)) {
316 int dialogResult = JOptionPane.showConfirmDialog(null, "There is a trace that will be displayed in a new tab on the unfolded net/query.", "Open trace", JOptionPane.OK_CANCEL_OPTION);
317 if (dialogResult == JOptionPane.OK_OPTION) {
318 newTab = new PetriNetTab(loadedModel.network(), loadedModel.templates(), loadedModel.queries(), new PetriNetTab.TAPNLens(TAPAALGUI.getCurrentTab().getLens().isTimed(), TAPAALGUI.getCurrentTab().getLens().isGame(), false));
319
320 //The query being verified should be the only query
321 for (net.tapaal.gui.petrinet.verification.TAPNQuery loadedQuery : UnfoldNet.getQueries(queriesOut, loadedModel.network())) {
322 newTab.setInitialName(loadedQuery.getName() + " - unfolded");
323 loadedQuery.copyOptions(dataLayerQuery);
324 newTab.addQuery(loadedQuery);
325 }
326 TAPAALGUI.openNewTabFromStream(newTab);
327 } else {
328 options.setTraceOption(TraceOption.NONE);
329 }
330 }
331 } catch (FormatException e) {
332 e.printStackTrace();
333 } catch (ThreadDeath d) {
334 return null;
335 }
336 }
337
332 ctlOutput = queryResult.value1().isCTL;338 ctlOutput = queryResult.value1().isCTL;
333 boolean approximationResult = queryResult.value2().discoveredStates() == 0; // Result is from over-approximation339 boolean approximationResult = queryResult.value2().discoveredStates() == 0; // Result is from over-approximation
334340
@@ -348,11 +354,6 @@
348 }354 }
349355
350 private TimedArcPetriNetTrace parseTrace(String output, VerificationOptions options, Tuple<TimedArcPetriNet, NameMapping> model, ExportedVerifyTAPNModel exportedModel, TAPNQuery query, QueryResult queryResult) {356 private TimedArcPetriNetTrace parseTrace(String output, VerificationOptions options, Tuple<TimedArcPetriNet, NameMapping> model, ExportedVerifyTAPNModel exportedModel, TAPNQuery query, QueryResult queryResult) {
351 return parseTrace(output, options, model, exportedModel, query, queryResult, false);
352 }
353 //XXX: this noWarning thinks is a huge hack to avoid warning shown twice for color nets, the warning should not be shown
354 // in this methods in the first case
355 private TimedArcPetriNetTrace parseTrace(String output, VerificationOptions options, Tuple<TimedArcPetriNet, NameMapping> model, ExportedVerifyTAPNModel exportedModel, TAPNQuery query, QueryResult queryResult, boolean noWarning) {
356 if (((VerifyTAPNOptions) options).trace() == TraceOption.NONE) return null;357 if (((VerifyTAPNOptions) options).trace() == TraceOption.NONE) return null;
357358
358 VerifyTAPNTraceParser traceParser = new VerifyTAPNTraceParser(model.value1());359 VerifyTAPNTraceParser traceParser = new VerifyTAPNTraceParser(model.value1());
@@ -367,11 +368,6 @@
367 (query.getProperty() instanceof TCTLEGNode && !queryResult.isQuerySatisfied()) ||368 (query.getProperty() instanceof TCTLEGNode && !queryResult.isQuerySatisfied()) ||
368 (query.getProperty() instanceof TCTLAFNode && queryResult.isQuerySatisfied())) {369 (query.getProperty() instanceof TCTLAFNode && queryResult.isQuerySatisfied())) {
369 return null;370 return null;
370 } else {
371 if (!noWarning) {
372 String message = "No trace could be generated.\n\n";
373 messenger.displayWrappedErrorMessage(message, "No trace found");
374 }
375 }371 }
376 }372 }
377 }373 }
378374
=== modified file 'src/net/tapaal/gui/petrinet/verification/RunVerification.java'
--- src/net/tapaal/gui/petrinet/verification/RunVerification.java 2022-01-09 19:10:28 +0000
+++ src/net/tapaal/gui/petrinet/verification/RunVerification.java 2022-02-01 10:04:11 +0000
@@ -19,6 +19,11 @@
19import javax.swing.table.DefaultTableModel;19import javax.swing.table.DefaultTableModel;
20import javax.swing.table.TableModel;20import javax.swing.table.TableModel;
21import javax.swing.table.TableRowSorter;21import javax.swing.table.TableRowSorter;
22
23import dk.aau.cs.TCTL.TCTLAFNode;
24import dk.aau.cs.TCTL.TCTLAGNode;
25import dk.aau.cs.TCTL.TCTLEFNode;
26import dk.aau.cs.TCTL.TCTLEGNode;
22import pipe.gui.petrinet.PetriNetTab;27import pipe.gui.petrinet.PetriNetTab;
23import dk.aau.cs.Messenger;28import dk.aau.cs.Messenger;
24import dk.aau.cs.model.tapn.TimedArcPetriNet;29import dk.aau.cs.model.tapn.TimedArcPetriNet;
@@ -76,10 +81,23 @@
76 JOptionPane.INFORMATION_MESSAGE,81 JOptionPane.INFORMATION_MESSAGE,
77 iconSelector.getIconFor(result)82 iconSelector.getIconFor(result)
78 );83 );
79 84
80 if (!reducedNetOpened && result.getTrace() != null) {85 if (options.traceOption() != TAPNQuery.TraceOption.NONE &&
81 TAPAALGUI.getAnimator().setTrace(result.getTrace());86 ((query.getProperty() instanceof TCTLEFNode && result.isQuerySatisfied()) ||
82 }87 (query.getProperty() instanceof TCTLAGNode && !result.isQuerySatisfied()) ||
88 (query.getProperty() instanceof TCTLEGNode && result.isQuerySatisfied()) ||
89 (query.getProperty() instanceof TCTLAFNode && !result.isQuerySatisfied()))) {
90 // We have a trace to show)
91
92 if (!reducedNetOpened && result.getTrace() != null) {
93 TAPAALGUI.getAnimator().setTrace(result.getTrace());
94 } else {
95 String message = "A trace exists but could not be generated by the engine.\n\n";
96 messenger.displayWrappedErrorMessage(message, "No trace generated");
97 }
98 }
99
100
83 }101 }
84 } else {102 } else {
85 //Check if the is something like103 //Check if the is something like

Subscribers

People subscribed via source and target branches