Merge lp:~tapaal-contributor/tapaal/colorTraceFix into lp:~tapaal-contributor/tapaal/cpn-gui-dev
- colorTraceFix
- Merge into 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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Jiri Srba | Approve | ||
Review via email: mp+414856@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
Kenneth Yrke Jørgensen (yrke) wrote : | # |
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
1 | === modified file 'src/dk/aau/cs/verification/VerifyTAPN/VerifyDTAPN.java' | |||
2 | --- src/dk/aau/cs/verification/VerifyTAPN/VerifyDTAPN.java 2022-01-28 09:46:10 +0000 | |||
3 | +++ src/dk/aau/cs/verification/VerifyTAPN/VerifyDTAPN.java 2022-02-01 10:04:11 +0000 | |||
4 | @@ -5,14 +5,33 @@ | |||
5 | 5 | import dk.aau.cs.TCTL.TCTLAGNode; | 5 | import dk.aau.cs.TCTL.TCTLAGNode; |
6 | 6 | import dk.aau.cs.TCTL.TCTLEFNode; | 6 | import dk.aau.cs.TCTL.TCTLEFNode; |
7 | 7 | import dk.aau.cs.TCTL.TCTLEGNode; | 7 | import dk.aau.cs.TCTL.TCTLEGNode; |
8 | 8 | import pipe.gui.petrinet.PetriNetTab; | ||
9 | 9 | import dk.aau.cs.io.LoadedModel; | 8 | import dk.aau.cs.io.LoadedModel; |
10 | 10 | import dk.aau.cs.io.TapnEngineXmlLoader; | 9 | import dk.aau.cs.io.TapnEngineXmlLoader; |
12 | 11 | import dk.aau.cs.model.tapn.*; | 10 | import dk.aau.cs.model.tapn.LocalTimedPlace; |
13 | 11 | import dk.aau.cs.model.tapn.TAPNQuery; | ||
14 | 12 | import dk.aau.cs.model.tapn.TimedArcPetriNet; | ||
15 | 13 | import dk.aau.cs.model.tapn.TimedPlace; | ||
16 | 12 | import dk.aau.cs.model.tapn.simulation.TimedArcPetriNetTrace; | 14 | import dk.aau.cs.model.tapn.simulation.TimedArcPetriNetTrace; |
18 | 13 | import dk.aau.cs.util.*; | 15 | import dk.aau.cs.util.FormatException; |
19 | 16 | import dk.aau.cs.util.Tuple; | ||
20 | 17 | import dk.aau.cs.util.UnsupportedModelException; | ||
21 | 18 | import dk.aau.cs.util.UnsupportedQueryException; | ||
22 | 14 | import dk.aau.cs.verification.*; | 19 | import dk.aau.cs.verification.*; |
23 | 20 | import net.tapaal.Preferences; | ||
24 | 21 | import net.tapaal.TAPAAL; | ||
25 | 22 | import net.tapaal.gui.petrinet.verification.InclusionPlaces; | ||
26 | 23 | import net.tapaal.gui.petrinet.verification.InclusionPlaces.InclusionPlacesOption; | ||
27 | 24 | import net.tapaal.gui.petrinet.verification.TAPNQuery.TraceOption; | ||
28 | 25 | import net.tapaal.gui.petrinet.verification.TAPNQuery.WorkflowMode; | ||
29 | 26 | import net.tapaal.gui.petrinet.verification.UnfoldNet; | ||
30 | 27 | import pipe.gui.Constants; | ||
31 | 28 | import pipe.gui.FileFinder; | ||
32 | 29 | import pipe.gui.MessengerImpl; | ||
33 | 30 | import pipe.gui.TAPAALGUI; | ||
34 | 31 | import pipe.gui.petrinet.PetriNetTab; | ||
35 | 32 | import pipe.gui.petrinet.dataLayer.DataLayer; | ||
36 | 15 | 33 | ||
37 | 34 | import javax.swing.*; | ||
38 | 16 | import java.io.BufferedReader; | 35 | import java.io.BufferedReader; |
39 | 17 | import java.io.File; | 36 | import java.io.File; |
40 | 18 | import java.io.IOException; | 37 | import java.io.IOException; |
41 | @@ -20,18 +39,6 @@ | |||
42 | 20 | import java.util.ArrayList; | 39 | import java.util.ArrayList; |
43 | 21 | import java.util.List; | 40 | import java.util.List; |
44 | 22 | 41 | ||
45 | 23 | import net.tapaal.Preferences; | ||
46 | 24 | import net.tapaal.TAPAAL; | ||
47 | 25 | import pipe.gui.petrinet.dataLayer.DataLayer; | ||
48 | 26 | import net.tapaal.gui.petrinet.verification.TAPNQuery.TraceOption; | ||
49 | 27 | import net.tapaal.gui.petrinet.verification.TAPNQuery.WorkflowMode; | ||
50 | 28 | import pipe.gui.*; | ||
51 | 29 | import net.tapaal.gui.petrinet.verification.UnfoldNet; | ||
52 | 30 | import net.tapaal.gui.petrinet.verification.InclusionPlaces; | ||
53 | 31 | import net.tapaal.gui.petrinet.verification.InclusionPlaces.InclusionPlacesOption; | ||
54 | 32 | |||
55 | 33 | import javax.swing.*; | ||
56 | 34 | |||
57 | 35 | public class VerifyDTAPN implements ModelChecker{ | 42 | public class VerifyDTAPN implements ModelChecker{ |
58 | 36 | 43 | ||
59 | 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" |
60 | @@ -274,9 +281,13 @@ | |||
61 | 274 | 281 | ||
62 | 275 | TimedArcPetriNetTrace tapnTrace = null; | 282 | TimedArcPetriNetTrace tapnTrace = null; |
63 | 276 | 283 | ||
64 | 277 | |||
65 | 278 | boolean isColored = (lens != null && lens.isColored() || model.value1().parentNetwork().isColored()); | 284 | boolean isColored = (lens != null && lens.isColored() || model.value1().parentNetwork().isColored()); |
67 | 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()) || |
68 | 286 | (query.getProperty() instanceof TCTLAGNode && !queryResult.value1().isQuerySatisfied()) || | ||
69 | 287 | (query.getProperty() instanceof TCTLEGNode && queryResult.value1().isQuerySatisfied()) || | ||
70 | 288 | (query.getProperty() instanceof TCTLAFNode && !queryResult.value1().isQuerySatisfied())); | ||
71 | 289 | |||
72 | 290 | if(options.traceOption() != TraceOption.NONE && isColored && showTrace) { | ||
73 | 280 | TapnEngineXmlLoader tapnLoader = new TapnEngineXmlLoader(); | 291 | TapnEngineXmlLoader tapnLoader = new TapnEngineXmlLoader(); |
74 | 281 | File fileOut = new File(options.unfoldedModelPath()); | 292 | File fileOut = new File(options.unfoldedModelPath()); |
75 | 282 | File queriesOut = new File(options.unfoldedQueriesPath()); | 293 | File queriesOut = new File(options.unfoldedQueriesPath()); |
76 | @@ -291,11 +302,7 @@ | |||
77 | 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()); |
78 | 292 | } | 303 | } |
79 | 293 | 304 | ||
85 | 294 | if(tapnTrace == null){ | 305 | if (tapnTrace != null) { |
81 | 295 | String message = "No trace could be generated.\n\n"; | ||
82 | 296 | message += "Model checker output:\n" + standardOutput; | ||
83 | 297 | messenger.displayWrappedErrorMessage(message,"No trace found"); | ||
84 | 298 | } else { | ||
86 | 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); |
87 | 300 | if (dialogResult == JOptionPane.OK_OPTION) { | 307 | if (dialogResult == JOptionPane.OK_OPTION) { |
88 | 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)); |
89 | @@ -312,6 +319,7 @@ | |||
90 | 312 | options.setTraceOption(TraceOption.NONE); | 319 | options.setTraceOption(TraceOption.NONE); |
91 | 313 | } | 320 | } |
92 | 314 | } | 321 | } |
93 | 322 | |||
94 | 315 | } catch (FormatException e) { | 323 | } catch (FormatException e) { |
95 | 316 | e.printStackTrace(); | 324 | e.printStackTrace(); |
96 | 317 | return null; | 325 | return null; |
97 | @@ -352,8 +360,6 @@ | |||
98 | 352 | (query.getProperty() instanceof TCTLEGNode && !queryResult.isQuerySatisfied()) || | 360 | (query.getProperty() instanceof TCTLEGNode && !queryResult.isQuerySatisfied()) || |
99 | 353 | (query.getProperty() instanceof TCTLAFNode && queryResult.isQuerySatisfied())) { | 361 | (query.getProperty() instanceof TCTLAFNode && queryResult.isQuerySatisfied())) { |
100 | 354 | return null; | 362 | return null; |
101 | 355 | } else { | ||
102 | 356 | messenger.displayErrorMessage("Verifydtapn cannot generate the requested trace for the model. Try another trace option."); | ||
103 | 357 | } | 363 | } |
104 | 358 | } | 364 | } |
105 | 359 | } | 365 | } |
106 | 360 | 366 | ||
107 | === modified file 'src/dk/aau/cs/verification/VerifyTAPN/VerifyPN.java' | |||
108 | --- src/dk/aau/cs/verification/VerifyTAPN/VerifyPN.java 2022-01-28 12:27:29 +0000 | |||
109 | +++ src/dk/aau/cs/verification/VerifyTAPN/VerifyPN.java 2022-02-01 10:04:11 +0000 | |||
110 | @@ -287,48 +287,54 @@ | |||
111 | 287 | 287 | ||
112 | 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); |
113 | 289 | 289 | ||
114 | 290 | boolean isColored = (lens != null && lens.isColored() || model.value1().parentNetwork().isColored()); | ||
115 | 291 | if (options.traceOption() != TraceOption.NONE && isColored && queryResult != null && queryResult.value1() != null && queryResult.value1().isQuerySatisfied()) { | ||
116 | 292 | PNMLoader tapnLoader = new PNMLoader(); | ||
117 | 293 | File fileOut = new File(options.unfoldedModelPath()); | ||
118 | 294 | File queriesOut = new File(options.unfoldedQueriesPath()); | ||
119 | 295 | PetriNetTab newTab; | ||
120 | 296 | LoadedModel loadedModel = null; | ||
121 | 297 | try { | ||
122 | 298 | loadedModel = tapnLoader.load(fileOut); | ||
123 | 299 | TAPNComposer newComposer = new TAPNComposer(new MessengerImpl(), true); | ||
124 | 300 | model = newComposer.transformModel(loadedModel.network()); | ||
125 | 301 | |||
126 | 302 | if (queryResult != null && queryResult.value1() != null) { | ||
127 | 303 | tapnTrace = parseTrace(errorOutput, options, model, exportedModel, query, queryResult.value1(), true); | ||
128 | 304 | } | ||
129 | 305 | |||
130 | 306 | if (!(tapnTrace == null)) { | ||
131 | 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); | ||
132 | 308 | if (dialogResult == JOptionPane.OK_OPTION) { | ||
133 | 309 | newTab = new PetriNetTab(loadedModel.network(), loadedModel.templates(), loadedModel.queries(), new PetriNetTab.TAPNLens(TAPAALGUI.getCurrentTab().getLens().isTimed(), TAPAALGUI.getCurrentTab().getLens().isGame(), false)); | ||
134 | 310 | |||
135 | 311 | //The query being verified should be the only query | ||
136 | 312 | for (net.tapaal.gui.petrinet.verification.TAPNQuery loadedQuery : UnfoldNet.getQueries(queriesOut, loadedModel.network())) { | ||
137 | 313 | newTab.setInitialName(loadedQuery.getName() + " - unfolded"); | ||
138 | 314 | loadedQuery.copyOptions(dataLayerQuery); | ||
139 | 315 | newTab.addQuery(loadedQuery); | ||
140 | 316 | } | ||
141 | 317 | TAPAALGUI.openNewTabFromStream(newTab); | ||
142 | 318 | } else { | ||
143 | 319 | options.setTraceOption(TraceOption.NONE); | ||
144 | 320 | } | ||
145 | 321 | } | ||
146 | 322 | } catch (FormatException e) { | ||
147 | 323 | e.printStackTrace(); | ||
148 | 324 | } catch (ThreadDeath d) { | ||
149 | 325 | return null; | ||
150 | 326 | } | ||
151 | 327 | } | ||
152 | 328 | |||
153 | 329 | if (queryResult == null || queryResult.value1() == null) { | 290 | if (queryResult == null || queryResult.value1() == null) { |
154 | 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()); |
155 | 331 | } else { | 292 | } else { |
156 | 293 | |||
157 | 294 | boolean isColored = (lens != null && lens.isColored() || model.value1().parentNetwork().isColored()); | ||
158 | 295 | boolean showTrace = ((query.getProperty() instanceof TCTLEFNode && queryResult.value1().isQuerySatisfied()) || | ||
159 | 296 | (query.getProperty() instanceof TCTLAGNode && !queryResult.value1().isQuerySatisfied()) || | ||
160 | 297 | (query.getProperty() instanceof TCTLEGNode && queryResult.value1().isQuerySatisfied()) || | ||
161 | 298 | (query.getProperty() instanceof TCTLAFNode && !queryResult.value1().isQuerySatisfied())); | ||
162 | 299 | |||
163 | 300 | if (options.traceOption() != TraceOption.NONE && isColored && showTrace) { | ||
164 | 301 | PNMLoader tapnLoader = new PNMLoader(); | ||
165 | 302 | File fileOut = new File(options.unfoldedModelPath()); | ||
166 | 303 | File queriesOut = new File(options.unfoldedQueriesPath()); | ||
167 | 304 | PetriNetTab newTab; | ||
168 | 305 | LoadedModel loadedModel = null; | ||
169 | 306 | try { | ||
170 | 307 | loadedModel = tapnLoader.load(fileOut); | ||
171 | 308 | TAPNComposer newComposer = new TAPNComposer(new MessengerImpl(), true); | ||
172 | 309 | model = newComposer.transformModel(loadedModel.network()); | ||
173 | 310 | |||
174 | 311 | if (queryResult != null && queryResult.value1() != null) { | ||
175 | 312 | tapnTrace = parseTrace(errorOutput, options, model, exportedModel, query, queryResult.value1()); | ||
176 | 313 | } | ||
177 | 314 | |||
178 | 315 | if (!(tapnTrace == null)) { | ||
179 | 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); | ||
180 | 317 | if (dialogResult == JOptionPane.OK_OPTION) { | ||
181 | 318 | newTab = new PetriNetTab(loadedModel.network(), loadedModel.templates(), loadedModel.queries(), new PetriNetTab.TAPNLens(TAPAALGUI.getCurrentTab().getLens().isTimed(), TAPAALGUI.getCurrentTab().getLens().isGame(), false)); | ||
182 | 319 | |||
183 | 320 | //The query being verified should be the only query | ||
184 | 321 | for (net.tapaal.gui.petrinet.verification.TAPNQuery loadedQuery : UnfoldNet.getQueries(queriesOut, loadedModel.network())) { | ||
185 | 322 | newTab.setInitialName(loadedQuery.getName() + " - unfolded"); | ||
186 | 323 | loadedQuery.copyOptions(dataLayerQuery); | ||
187 | 324 | newTab.addQuery(loadedQuery); | ||
188 | 325 | } | ||
189 | 326 | TAPAALGUI.openNewTabFromStream(newTab); | ||
190 | 327 | } else { | ||
191 | 328 | options.setTraceOption(TraceOption.NONE); | ||
192 | 329 | } | ||
193 | 330 | } | ||
194 | 331 | } catch (FormatException e) { | ||
195 | 332 | e.printStackTrace(); | ||
196 | 333 | } catch (ThreadDeath d) { | ||
197 | 334 | return null; | ||
198 | 335 | } | ||
199 | 336 | } | ||
200 | 337 | |||
201 | 332 | ctlOutput = queryResult.value1().isCTL; | 338 | ctlOutput = queryResult.value1().isCTL; |
202 | 333 | boolean approximationResult = queryResult.value2().discoveredStates() == 0; // Result is from over-approximation | 339 | boolean approximationResult = queryResult.value2().discoveredStates() == 0; // Result is from over-approximation |
203 | 334 | 340 | ||
204 | @@ -348,11 +354,6 @@ | |||
205 | 348 | } | 354 | } |
206 | 349 | 355 | ||
207 | 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) { |
208 | 351 | return parseTrace(output, options, model, exportedModel, query, queryResult, false); | ||
209 | 352 | } | ||
210 | 353 | //XXX: this noWarning thinks is a huge hack to avoid warning shown twice for color nets, the warning should not be shown | ||
211 | 354 | // in this methods in the first case | ||
212 | 355 | private TimedArcPetriNetTrace parseTrace(String output, VerificationOptions options, Tuple<TimedArcPetriNet, NameMapping> model, ExportedVerifyTAPNModel exportedModel, TAPNQuery query, QueryResult queryResult, boolean noWarning) { | ||
213 | 356 | if (((VerifyTAPNOptions) options).trace() == TraceOption.NONE) return null; | 357 | if (((VerifyTAPNOptions) options).trace() == TraceOption.NONE) return null; |
214 | 357 | 358 | ||
215 | 358 | VerifyTAPNTraceParser traceParser = new VerifyTAPNTraceParser(model.value1()); | 359 | VerifyTAPNTraceParser traceParser = new VerifyTAPNTraceParser(model.value1()); |
216 | @@ -367,11 +368,6 @@ | |||
217 | 367 | (query.getProperty() instanceof TCTLEGNode && !queryResult.isQuerySatisfied()) || | 368 | (query.getProperty() instanceof TCTLEGNode && !queryResult.isQuerySatisfied()) || |
218 | 368 | (query.getProperty() instanceof TCTLAFNode && queryResult.isQuerySatisfied())) { | 369 | (query.getProperty() instanceof TCTLAFNode && queryResult.isQuerySatisfied())) { |
219 | 369 | return null; | 370 | return null; |
220 | 370 | } else { | ||
221 | 371 | if (!noWarning) { | ||
222 | 372 | String message = "No trace could be generated.\n\n"; | ||
223 | 373 | messenger.displayWrappedErrorMessage(message, "No trace found"); | ||
224 | 374 | } | ||
225 | 375 | } | 371 | } |
226 | 376 | } | 372 | } |
227 | 377 | } | 373 | } |
228 | 378 | 374 | ||
229 | === modified file 'src/net/tapaal/gui/petrinet/verification/RunVerification.java' | |||
230 | --- src/net/tapaal/gui/petrinet/verification/RunVerification.java 2022-01-09 19:10:28 +0000 | |||
231 | +++ src/net/tapaal/gui/petrinet/verification/RunVerification.java 2022-02-01 10:04:11 +0000 | |||
232 | @@ -19,6 +19,11 @@ | |||
233 | 19 | import javax.swing.table.DefaultTableModel; | 19 | import javax.swing.table.DefaultTableModel; |
234 | 20 | import javax.swing.table.TableModel; | 20 | import javax.swing.table.TableModel; |
235 | 21 | import javax.swing.table.TableRowSorter; | 21 | import javax.swing.table.TableRowSorter; |
236 | 22 | |||
237 | 23 | import dk.aau.cs.TCTL.TCTLAFNode; | ||
238 | 24 | import dk.aau.cs.TCTL.TCTLAGNode; | ||
239 | 25 | import dk.aau.cs.TCTL.TCTLEFNode; | ||
240 | 26 | import dk.aau.cs.TCTL.TCTLEGNode; | ||
241 | 22 | import pipe.gui.petrinet.PetriNetTab; | 27 | import pipe.gui.petrinet.PetriNetTab; |
242 | 23 | import dk.aau.cs.Messenger; | 28 | import dk.aau.cs.Messenger; |
243 | 24 | import dk.aau.cs.model.tapn.TimedArcPetriNet; | 29 | import dk.aau.cs.model.tapn.TimedArcPetriNet; |
244 | @@ -76,10 +81,23 @@ | |||
245 | 76 | JOptionPane.INFORMATION_MESSAGE, | 81 | JOptionPane.INFORMATION_MESSAGE, |
246 | 77 | iconSelector.getIconFor(result) | 82 | iconSelector.getIconFor(result) |
247 | 78 | ); | 83 | ); |
252 | 79 | 84 | ||
253 | 80 | if (!reducedNetOpened && result.getTrace() != null) { | 85 | if (options.traceOption() != TAPNQuery.TraceOption.NONE && |
254 | 81 | TAPAALGUI.getAnimator().setTrace(result.getTrace()); | 86 | ((query.getProperty() instanceof TCTLEFNode && result.isQuerySatisfied()) || |
255 | 82 | } | 87 | (query.getProperty() instanceof TCTLAGNode && !result.isQuerySatisfied()) || |
256 | 88 | (query.getProperty() instanceof TCTLEGNode && result.isQuerySatisfied()) || | ||
257 | 89 | (query.getProperty() instanceof TCTLAFNode && !result.isQuerySatisfied()))) { | ||
258 | 90 | // We have a trace to show) | ||
259 | 91 | |||
260 | 92 | if (!reducedNetOpened && result.getTrace() != null) { | ||
261 | 93 | TAPAALGUI.getAnimator().setTrace(result.getTrace()); | ||
262 | 94 | } else { | ||
263 | 95 | String message = "A trace exists but could not be generated by the engine.\n\n"; | ||
264 | 96 | messenger.displayWrappedErrorMessage(message, "No trace generated"); | ||
265 | 97 | } | ||
266 | 98 | } | ||
267 | 99 | |||
268 | 100 | |||
269 | 83 | } | 101 | } |
270 | 84 | } else { | 102 | } else { |
271 | 85 | //Check if the is something like | 103 | //Check if the is something like |
Use with the new version of verifypn to avoid issue where the opend tab does not have a name.