53
53
File netFile = File.createTempFile("net", exporter.getExtenstion());
54
54
ExportTask exportTask = new ExportTask(exporter, model, netFile.getCanonicalPath());
55
55
SubtaskMonitor<Object> mon = new SubtaskMonitor<Object>(monitor);
56
Result<? extends Object> exportResult = framework.getTaskManager().execute(exportTask, "Exporting .g", mon);
56
Result<? extends Object> exportResult = framework.getTaskManager().execute(
57
exportTask, "Exporting .g", mon);
57
59
if (exportResult.getOutcome() != Outcome.FINISHED) {
59
61
if (exportResult.getOutcome() == Outcome.CANCELLED) {
60
62
return new Result<MpsatChainResult>(Outcome.CANCELLED);
62
64
return new Result<MpsatChainResult>(Outcome.FAILED,
63
new MpsatChainResult(exportResult, null, null, settings));
65
new MpsatChainResult(exportResult, null, null, null, settings));
65
67
monitor.progressUpdate(0.20);
67
69
File mciFile = File.createTempFile("unfolding", ".mci");
68
70
PunfTask punfTask = new PunfTask(netFile.getCanonicalPath(), mciFile.getCanonicalPath());
69
Result<? extends ExternalProcessResult> punfResult = framework.getTaskManager().execute(punfTask, "Unfolding .g", mon);
71
Result<? extends ExternalProcessResult> punfResult = framework.getTaskManager().execute(
72
punfTask, "Unfolding .g", mon);
71
75
if (punfResult.getOutcome() != Outcome.FINISHED) {
74
78
return new Result<MpsatChainResult>(Outcome.CANCELLED);
76
80
return new Result<MpsatChainResult>(Outcome.FAILED,
77
new MpsatChainResult(exportResult, punfResult, null, settings));
81
new MpsatChainResult(exportResult, null, punfResult, null, settings));
79
83
monitor.progressUpdate(0.70);
81
85
MpsatTask mpsatTask = new MpsatTask(settings.getMpsatArguments(), mciFile.getCanonicalPath());
82
Result<? extends ExternalProcessResult> mpsatResult = framework.getTaskManager().execute(mpsatTask, "Running deadlock checking [MPSat]", mon);
86
Result<? extends ExternalProcessResult> mpsatResult = framework.getTaskManager().execute(
87
mpsatTask, "Running deadlock checking [MPSat]", mon);
83
89
if (mpsatResult.getOutcome() != Outcome.FINISHED) {
84
90
if (mpsatResult.getOutcome() == Outcome.CANCELLED) {
85
91
return new Result<MpsatChainResult>(Outcome.CANCELLED);
87
93
return new Result<MpsatChainResult>(Outcome.FAILED,
88
new MpsatChainResult(exportResult, punfResult, mpsatResult, settings, new String(mpsatResult.getReturnValue().getErrors())));
94
new MpsatChainResult(exportResult, null, punfResult, mpsatResult, settings,
95
new String(mpsatResult.getReturnValue().getErrors())));
90
97
monitor.progressUpdate(0.90);
93
100
if (!mdp.getSolutions().isEmpty()) {
95
102
return new Result<MpsatChainResult>(Outcome.FINISHED,
96
new MpsatChainResult(exportResult, punfResult, mpsatResult, settings, "Policy net has a deadlock"));
103
new MpsatChainResult(exportResult, null, punfResult, mpsatResult, settings, "Policy net has a deadlock"));
98
105
monitor.progressUpdate(1.0);
100
107
mciFile.delete();
101
108
return new Result<MpsatChainResult>(Outcome.FINISHED,
102
new MpsatChainResult(exportResult, punfResult, mpsatResult, settings, "Policy net is deadlock-free"));
109
new MpsatChainResult(exportResult, null, punfResult, mpsatResult, settings, "Policy net is deadlock-free"));
104
111
} catch (Throwable e) {
105
112
return new Result<MpsatChainResult>(e);