blob: 491e7fc12144ad3d6e7b5d599b7579cdf30812bc (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
package hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver;
import com.google.common.base.Objects;
import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ConstantModel;
import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.FaultTree;
import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ReliabilityModel;
import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ft2galileo.Ft2GalileoTransformation;
import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.FtAnalysisObjective;
import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.ReliabilityResult;
import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.StormDftConfiguration;
import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.StormDftHandler;
import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace;
@SuppressWarnings("all")
public class StormDftSolver {
private static final String DFT_FILE_NAME = "ft.dft";
private final Ft2GalileoTransformation ft2Galileo = new Ft2GalileoTransformation();
private final StormDftHandler handler = new StormDftHandler();
public ReliabilityResult solve(final ReliabilityModel reliabilityModel, final StormDftConfiguration configuration, final ReasonerWorkspace reasonerWorkspace) {
ReliabilityResult _switchResult = null;
boolean _matched = false;
if (reliabilityModel instanceof FaultTree) {
_matched=true;
_switchResult = this.solve(((FaultTree)reliabilityModel), configuration, reasonerWorkspace);
}
if (!_matched) {
if (reliabilityModel instanceof ConstantModel) {
_matched=true;
ReliabilityResult.Solution _xblockexpression = null;
{
double _xifexpression = (double) 0;
boolean _isFailed = ((ConstantModel)reliabilityModel).isFailed();
if (_isFailed) {
_xifexpression = 0;
} else {
double _switchResult_1 = (double) 0;
final FtAnalysisObjective objective = configuration.objective;
boolean _matched_1 = false;
if (Objects.equal(objective, FtAnalysisObjective.MTTF)) {
_matched_1=true;
_switchResult_1 = Double.POSITIVE_INFINITY;
}
if (!_matched_1) {
if (objective instanceof FtAnalysisObjective.TimeBound) {
_matched_1=true;
_switchResult_1 = 1;
}
}
if (!_matched_1) {
throw new IllegalArgumentException(("Unknown objective: " + objective));
}
_xifexpression = _switchResult_1;
}
final double result = _xifexpression;
_xblockexpression = new ReliabilityResult.Solution(result);
}
_switchResult = _xblockexpression;
}
}
if (!_matched) {
throw new IllegalArgumentException(("Unknown reliability model: " + reliabilityModel));
}
return _switchResult;
}
public ReliabilityResult solve(final FaultTree faultTree, final StormDftConfiguration configuration, final ReasonerWorkspace reasonerWorkspace) {
ReliabilityResult _xblockexpression = null;
{
final CharSequence galileo = this.ft2Galileo.toGalileo(faultTree);
reasonerWorkspace.writeText(StormDftSolver.DFT_FILE_NAME, galileo);
final String dftFilePath = reasonerWorkspace.getFile(StormDftSolver.DFT_FILE_NAME).getAbsolutePath();
_xblockexpression = this.handler.callSolver(dftFilePath, configuration);
}
return _xblockexpression;
}
}
|