aboutsummaryrefslogtreecommitdiffstats
path: root/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftSolver.java
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;
  }
}