aboutsummaryrefslogtreecommitdiffstats
path: root/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen
diff options
context:
space:
mode:
Diffstat (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen')
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/.gitignore8
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbinbin0 -> 2825 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventCollection.xtendbinbin0 -> 7022 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventMaterializer.xtendbinbin0 -> 12110 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.FaultTreeBuilder.xtendbinbin0 -> 4029 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.gitignore16
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/Cft2FtTransformation.java49
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventCollection.java188
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.java469
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/FaultTreeBuilder.java57
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentFaultTreeTrace.xtendbinbin0 -> 5530 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentInstanceTrace.xtendbinbin0 -> 5932 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentNameGenerator.xtendbinbin0 -> 3472 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.Ecore2CftTransformation.xtendbinbin0 -> 3431 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.InputTrace.xtendbinbin0 -> 4202 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.LookupHandler.xtendbinbin0 -> 5169 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingHandler.xtendbinbin0 -> 6876 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingQueries.xtendbinbin0 -> 4833 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.gitignore25
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.java77
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.java77
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentNameGenerator.java29
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/Ecore2CftTransformation.java41
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.java43
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/LookupHandler.java84
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingHandler.java146
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.java60
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/.Ft2GalileoTransformation.xtendbinbin0 -> 4794 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/.gitignore3
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/Ft2GalileoTransformation.java188
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.ReliabilityResult.xtendbinbin0 -> 5435 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftConfiguration.xtendbinbin0 -> 4311 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftHandler.xtendbinbin0 -> 13570 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftSolver.xtendbinbin0 -> 4801 bytes
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.gitignore20
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/ApproximationHeuristic.java8
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/FtAnalysisObjective.java14
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/ReliabilityResult.java156
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftConfiguration.java31
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftException.java12
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftHandler.java330
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftSolver.java79
42 files changed, 2210 insertions, 0 deletions
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/.gitignore b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/.gitignore
new file mode 100644
index 00000000..49df59a2
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/.gitignore
@@ -0,0 +1,8 @@
1/.CftTransformation.java._trace
2/.ComponentFaultTreeTrace.java._trace
3/.ComponentInstanceTrace.java._trace
4/.InputTrace.java._trace
5/.MappingHandler.java._trace
6/.ComponentInstantiationHandler.java._trace
7/.MappingQueries.java._trace
8/.LookupHandler.java._trace
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbin
new file mode 100644
index 00000000..dfae40e9
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventCollection.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventCollection.xtendbin
new file mode 100644
index 00000000..0aaf712d
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventCollection.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventMaterializer.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventMaterializer.xtendbin
new file mode 100644
index 00000000..e51f73a6
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventMaterializer.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.FaultTreeBuilder.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.FaultTreeBuilder.xtendbin
new file mode 100644
index 00000000..89e003dc
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.FaultTreeBuilder.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.gitignore b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.gitignore
new file mode 100644
index 00000000..058cff19
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.gitignore
@@ -0,0 +1,16 @@
1/.Cft2FtTransformation.java._trace
2/.EventMaterializer.java._trace
3/.MaterializedEvent.java._trace
4/.CollectedInputs.java._trace
5/.MaterializedEventCollection.java._trace
6/.FaultTreeBuilder.java._trace
7/.FaultModelBuilder.java._trace
8/.EventCollection.java._trace
9/.Cft2FtTransformation.xtendbin
10/.EventCollection.xtendbin
11/.EventMaterializer.xtendbin
12/.FaultTreeBuilder.xtendbin
13/Cft2FtTransformation.java
14/EventCollection.java
15/EventMaterializer.java
16/FaultTreeBuilder.java
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/Cft2FtTransformation.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/Cft2FtTransformation.java
new file mode 100644
index 00000000..e87b8865
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/Cft2FtTransformation.java
@@ -0,0 +1,49 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.cft2ft;
2
3import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentFaultTree;
4import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ConstantEvent;
5import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ConstantModel;
6import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.Event;
7import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.FaultTree;
8import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.FtFactory;
9import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.RandomEvent;
10import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ReliabilityModel;
11import hu.bme.mit.inf.dslreasoner.faulttree.transformation.cft2ft.EventMaterializer;
12import hu.bme.mit.inf.dslreasoner.faulttree.transformation.cft2ft.FaultTreeBuilder;
13import org.eclipse.xtext.xbase.lib.ObjectExtensions;
14import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
15
16@SuppressWarnings("all")
17public class Cft2FtTransformation {
18 public ReliabilityModel createFaultTree(final ComponentFaultTree componentFaultTree) {
19 ReliabilityModel _xblockexpression = null;
20 {
21 final EventMaterializer materializer = new EventMaterializer();
22 final Event topEvent = materializer.getOrMaterialize(componentFaultTree.getTopEvent());
23 ReliabilityModel _switchResult = null;
24 boolean _matched = false;
25 if (topEvent instanceof ConstantEvent) {
26 _matched=true;
27 ConstantModel _createConstantModel = FtFactory.eINSTANCE.createConstantModel();
28 final Procedure1<ConstantModel> _function = (ConstantModel it) -> {
29 it.setFailed(((ConstantEvent)topEvent).isFailed());
30 };
31 _switchResult = ObjectExtensions.<ConstantModel>operator_doubleArrow(_createConstantModel, _function);
32 }
33 if (!_matched) {
34 if (topEvent instanceof RandomEvent) {
35 _matched=true;
36 FaultTree _xblockexpression_1 = null;
37 {
38 final FaultTreeBuilder builder = new FaultTreeBuilder();
39 builder.addTopLevel(((RandomEvent)topEvent));
40 _xblockexpression_1 = builder.getFaultTree();
41 }
42 _switchResult = _xblockexpression_1;
43 }
44 }
45 _xblockexpression = _switchResult;
46 }
47 return _xblockexpression;
48 }
49}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventCollection.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventCollection.java
new file mode 100644
index 00000000..dceef9f8
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventCollection.java
@@ -0,0 +1,188 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.cft2ft;
2
3import com.google.common.collect.ImmutableSet;
4import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ConstantEvent;
5import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.Event;
6import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.RandomEvent;
7import java.util.Set;
8import org.eclipse.xtend.lib.annotations.Data;
9import org.eclipse.xtext.xbase.lib.IterableExtensions;
10import org.eclipse.xtext.xbase.lib.Pure;
11import org.eclipse.xtext.xbase.lib.util.ToStringBuilder;
12
13@Data
14@SuppressWarnings("all")
15public class EventCollection {
16 public static class Builder {
17 private int falseEventCount = 0;
18
19 private int trueEventCount = 0;
20
21 private final ImmutableSet.Builder<RandomEvent> randomEventsBuilder = ImmutableSet.<RandomEvent>builder();
22
23 private Builder() {
24 }
25
26 public EventCollection.Builder add(final Event event) {
27 EventCollection.Builder _xblockexpression = null;
28 {
29 boolean _matched = false;
30 if (event instanceof ConstantEvent) {
31 _matched=true;
32 boolean _isFailed = ((ConstantEvent)event).isFailed();
33 if (_isFailed) {
34 this.trueEventCount++;
35 } else {
36 this.falseEventCount++;
37 }
38 }
39 if (!_matched) {
40 if (event instanceof RandomEvent) {
41 _matched=true;
42 this.randomEventsBuilder.add(((RandomEvent)event));
43 }
44 }
45 if (!_matched) {
46 throw new IllegalArgumentException(("Unknown event: " + event));
47 }
48 _xblockexpression = this;
49 }
50 return _xblockexpression;
51 }
52
53 public EventCollection.Builder addAll(final EventCollection materializedEvens) {
54 EventCollection.Builder _xblockexpression = null;
55 {
56 int _falseEventCount = this.falseEventCount;
57 this.falseEventCount = (_falseEventCount + materializedEvens.falseEventCount);
58 int _trueEventCount = this.trueEventCount;
59 this.trueEventCount = (_trueEventCount + materializedEvens.trueEventCount);
60 this.randomEventsBuilder.addAll(materializedEvens.randomEvents);
61 _xblockexpression = this;
62 }
63 return _xblockexpression;
64 }
65
66 public EventCollection build() {
67 ImmutableSet<RandomEvent> _build = this.randomEventsBuilder.build();
68 return new EventCollection(this.falseEventCount, this.trueEventCount, _build);
69 }
70 }
71
72 private final int falseEventCount;
73
74 private final int trueEventCount;
75
76 private final Set<RandomEvent> randomEvents;
77
78 public boolean containsFalseEvent() {
79 return (this.falseEventCount >= 1);
80 }
81
82 public boolean containsTrueEvent() {
83 return (this.trueEventCount >= 1);
84 }
85
86 public int getVariableEventCount() {
87 return this.randomEvents.size();
88 }
89
90 public boolean containsRandomEvent() {
91 int _variableEventCount = this.getVariableEventCount();
92 return (_variableEventCount >= 1);
93 }
94
95 public int getCount() {
96 int _variableEventCount = this.getVariableEventCount();
97 return ((this.falseEventCount + this.trueEventCount) + _variableEventCount);
98 }
99
100 public boolean isEmpty() {
101 return (((!this.containsFalseEvent()) && (!this.containsTrueEvent())) && (!this.containsRandomEvent()));
102 }
103
104 public boolean containsExactlyOneRandomEvent() {
105 return (((!this.containsFalseEvent()) && (!this.containsTrueEvent())) && (this.getVariableEventCount() == 1));
106 }
107
108 public RandomEvent toSingleRandomEvent() {
109 RandomEvent _xblockexpression = null;
110 {
111 boolean _containsExactlyOneRandomEvent = this.containsExactlyOneRandomEvent();
112 boolean _not = (!_containsExactlyOneRandomEvent);
113 if (_not) {
114 throw new IllegalStateException("Input collection is not a single random event");
115 }
116 _xblockexpression = IterableExtensions.<RandomEvent>head(this.randomEvents);
117 }
118 return _xblockexpression;
119 }
120
121 public static EventCollection.Builder builder() {
122 return new EventCollection.Builder();
123 }
124
125 public EventCollection(final int falseEventCount, final int trueEventCount, final Set<RandomEvent> randomEvents) {
126 super();
127 this.falseEventCount = falseEventCount;
128 this.trueEventCount = trueEventCount;
129 this.randomEvents = randomEvents;
130 }
131
132 @Override
133 @Pure
134 public int hashCode() {
135 final int prime = 31;
136 int result = 1;
137 result = prime * result + this.falseEventCount;
138 result = prime * result + this.trueEventCount;
139 return prime * result + ((this.randomEvents== null) ? 0 : this.randomEvents.hashCode());
140 }
141
142 @Override
143 @Pure
144 public boolean equals(final Object obj) {
145 if (this == obj)
146 return true;
147 if (obj == null)
148 return false;
149 if (getClass() != obj.getClass())
150 return false;
151 EventCollection other = (EventCollection) obj;
152 if (other.falseEventCount != this.falseEventCount)
153 return false;
154 if (other.trueEventCount != this.trueEventCount)
155 return false;
156 if (this.randomEvents == null) {
157 if (other.randomEvents != null)
158 return false;
159 } else if (!this.randomEvents.equals(other.randomEvents))
160 return false;
161 return true;
162 }
163
164 @Override
165 @Pure
166 public String toString() {
167 ToStringBuilder b = new ToStringBuilder(this);
168 b.add("falseEventCount", this.falseEventCount);
169 b.add("trueEventCount", this.trueEventCount);
170 b.add("randomEvents", this.randomEvents);
171 return b.toString();
172 }
173
174 @Pure
175 public int getFalseEventCount() {
176 return this.falseEventCount;
177 }
178
179 @Pure
180 public int getTrueEventCount() {
181 return this.trueEventCount;
182 }
183
184 @Pure
185 public Set<RandomEvent> getRandomEvents() {
186 return this.randomEvents;
187 }
188}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.java
new file mode 100644
index 00000000..98a82b7d
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.java
@@ -0,0 +1,469 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.cft2ft;
2
3import com.google.common.base.Objects;
4import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.AndGateDefinition;
5import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.BasicEventDefinition;
6import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Component;
7import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Connection;
8import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.EventDeclaration;
9import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.GateDefinition;
10import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Input;
11import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.InputEvent;
12import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.KOfMGateDefinition;
13import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.OrGateDefinition;
14import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Output;
15import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.AndGate;
16import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.BasicEvent;
17import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ConstantEvent;
18import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.Distribution;
19import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.Event;
20import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.FtFactory;
21import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.Gate;
22import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.KOfMGate;
23import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.OrGate;
24import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.RandomEvent;
25import hu.bme.mit.inf.dslreasoner.faulttree.model.util.CftExtensions;
26import hu.bme.mit.inf.dslreasoner.faulttree.transformation.cft2ft.EventCollection;
27import java.util.LinkedHashSet;
28import java.util.Map;
29import org.eclipse.emf.common.util.EList;
30import org.eclipse.emf.ecore.util.EcoreUtil;
31import org.eclipse.xtend.lib.annotations.Data;
32import org.eclipse.xtend2.lib.StringConcatenation;
33import org.eclipse.xtext.xbase.lib.CollectionLiterals;
34import org.eclipse.xtext.xbase.lib.Extension;
35import org.eclipse.xtext.xbase.lib.Functions.Function1;
36import org.eclipse.xtext.xbase.lib.IterableExtensions;
37import org.eclipse.xtext.xbase.lib.ObjectExtensions;
38import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
39import org.eclipse.xtext.xbase.lib.Pure;
40
41@SuppressWarnings("all")
42public class EventMaterializer {
43 @Data
44 protected static class EventKey<T extends EventDeclaration> {
45 private final Component component;
46
47 private final T event;
48
49 @Override
50 public String toString() {
51 StringConcatenation _builder = new StringConcatenation();
52 String _name = this.component.getName();
53 _builder.append(_name);
54 _builder.append("_");
55 String _name_1 = this.event.getName();
56 _builder.append(_name_1);
57 return _builder.toString();
58 }
59
60 public EventKey(final Component component, final T event) {
61 super();
62 this.component = component;
63 this.event = event;
64 }
65
66 @Override
67 @Pure
68 public int hashCode() {
69 final int prime = 31;
70 int result = 1;
71 result = prime * result + ((this.component== null) ? 0 : this.component.hashCode());
72 return prime * result + ((this.event== null) ? 0 : this.event.hashCode());
73 }
74
75 @Override
76 @Pure
77 public boolean equals(final Object obj) {
78 if (this == obj)
79 return true;
80 if (obj == null)
81 return false;
82 if (getClass() != obj.getClass())
83 return false;
84 EventMaterializer.EventKey<?> other = (EventMaterializer.EventKey<?>) obj;
85 if (this.component == null) {
86 if (other.component != null)
87 return false;
88 } else if (!this.component.equals(other.component))
89 return false;
90 if (this.event == null) {
91 if (other.event != null)
92 return false;
93 } else if (!this.event.equals(other.event))
94 return false;
95 return true;
96 }
97
98 @Pure
99 public Component getComponent() {
100 return this.component;
101 }
102
103 @Pure
104 public T getEvent() {
105 return this.event;
106 }
107 }
108
109 @Extension
110 private final FtFactory _ftFactory = FtFactory.eINSTANCE;
111
112 private final Map<EventMaterializer.EventKey<EventDeclaration>, Event> materializationCache = CollectionLiterals.<EventMaterializer.EventKey<EventDeclaration>, Event>newHashMap();
113
114 private final Map<EventMaterializer.EventKey<InputEvent>, EventCollection> multipleInputCache = CollectionLiterals.<EventMaterializer.EventKey<InputEvent>, EventCollection>newHashMap();
115
116 private final ConstantEvent falseEvent;
117
118 private final ConstantEvent trueEvent;
119
120 private final LinkedHashSet<EventMaterializer.EventKey<? extends EventDeclaration>> path = new LinkedHashSet<EventMaterializer.EventKey<? extends EventDeclaration>>();
121
122 public EventMaterializer() {
123 ConstantEvent _createConstantEvent = this._ftFactory.createConstantEvent();
124 final Procedure1<ConstantEvent> _function = (ConstantEvent it) -> {
125 it.setFailed(false);
126 };
127 ConstantEvent _doubleArrow = ObjectExtensions.<ConstantEvent>operator_doubleArrow(_createConstantEvent, _function);
128 this.falseEvent = _doubleArrow;
129 ConstantEvent _createConstantEvent_1 = this._ftFactory.createConstantEvent();
130 final Procedure1<ConstantEvent> _function_1 = (ConstantEvent it) -> {
131 it.setFailed(true);
132 };
133 ConstantEvent _doubleArrow_1 = ObjectExtensions.<ConstantEvent>operator_doubleArrow(_createConstantEvent_1, _function_1);
134 this.trueEvent = _doubleArrow_1;
135 }
136
137 public Event getOrMaterialize(final Output output) {
138 return this.getOrMaterialize(output.getComponent(), output.getEventDeclaration());
139 }
140
141 public Event getOrMaterialize(final Component component, final EventDeclaration eventDeclaration) {
142 Event _xblockexpression = null;
143 {
144 final EventMaterializer.EventKey<EventDeclaration> eventKey = new EventMaterializer.EventKey<EventDeclaration>(component, eventDeclaration);
145 this.pushEventKey(eventKey);
146 Event _xtrycatchfinallyexpression = null;
147 try {
148 Event _xblockexpression_1 = null;
149 {
150 Event event = this.materializationCache.get(eventKey);
151 if ((event == null)) {
152 event = this.materialize(component, eventDeclaration);
153 this.materializationCache.put(eventKey, event);
154 }
155 _xblockexpression_1 = event;
156 }
157 _xtrycatchfinallyexpression = _xblockexpression_1;
158 } finally {
159 this.popEventKey(eventKey);
160 }
161 _xblockexpression = _xtrycatchfinallyexpression;
162 }
163 return _xblockexpression;
164 }
165
166 protected Event materialize(final Component component, final EventDeclaration eventDeclaration) {
167 RandomEvent _xblockexpression = null;
168 {
169 String _name = component.getName();
170 String _plus = (_name + "_");
171 String _name_1 = eventDeclaration.getName();
172 final String eventName = (_plus + _name_1);
173 RandomEvent _switchResult = null;
174 boolean _matched = false;
175 if (eventDeclaration instanceof InputEvent) {
176 _matched=true;
177 return this.materializeConnectedEvent(component, ((InputEvent)eventDeclaration));
178 }
179 if (!_matched) {
180 if (eventDeclaration instanceof BasicEventDefinition) {
181 _matched=true;
182 BasicEvent _xblockexpression_1 = null;
183 {
184 final BasicEvent basicEvent = this._ftFactory.createBasicEvent();
185 basicEvent.setDistribution(EcoreUtil.<Distribution>copy(((BasicEventDefinition)eventDeclaration).getDistribution()));
186 _xblockexpression_1 = basicEvent;
187 }
188 _switchResult = _xblockexpression_1;
189 }
190 }
191 if (!_matched) {
192 if (eventDeclaration instanceof GateDefinition) {
193 _matched=true;
194 Gate _xblockexpression_1 = null;
195 {
196 final EventCollection inputs = this.collectInputs(component, ((GateDefinition)eventDeclaration));
197 Gate _switchResult_1 = null;
198 boolean _matched_1 = false;
199 if (eventDeclaration instanceof AndGateDefinition) {
200 _matched_1=true;
201 AndGate _xifexpression = null;
202 boolean _containsFalseEvent = inputs.containsFalseEvent();
203 if (_containsFalseEvent) {
204 return this.falseEvent;
205 } else {
206 AndGate _xifexpression_1 = null;
207 boolean _isEmpty = inputs.isEmpty();
208 if (_isEmpty) {
209 return this.trueEvent;
210 } else {
211 AndGate _xifexpression_2 = null;
212 boolean _containsExactlyOneRandomEvent = inputs.containsExactlyOneRandomEvent();
213 if (_containsExactlyOneRandomEvent) {
214 return inputs.toSingleRandomEvent();
215 } else {
216 _xifexpression_2 = this._ftFactory.createAndGate();
217 }
218 _xifexpression_1 = _xifexpression_2;
219 }
220 _xifexpression = _xifexpression_1;
221 }
222 _switchResult_1 = _xifexpression;
223 }
224 if (!_matched_1) {
225 if (eventDeclaration instanceof OrGateDefinition) {
226 _matched_1=true;
227 OrGate _xifexpression = null;
228 boolean _containsTrueEvent = inputs.containsTrueEvent();
229 if (_containsTrueEvent) {
230 return this.trueEvent;
231 } else {
232 OrGate _xifexpression_1 = null;
233 boolean _isEmpty = inputs.isEmpty();
234 if (_isEmpty) {
235 return this.falseEvent;
236 } else {
237 OrGate _xifexpression_2 = null;
238 boolean _containsExactlyOneRandomEvent = inputs.containsExactlyOneRandomEvent();
239 if (_containsExactlyOneRandomEvent) {
240 return inputs.toSingleRandomEvent();
241 } else {
242 _xifexpression_2 = this._ftFactory.createOrGate();
243 }
244 _xifexpression_1 = _xifexpression_2;
245 }
246 _xifexpression = _xifexpression_1;
247 }
248 _switchResult_1 = _xifexpression;
249 }
250 }
251 if (!_matched_1) {
252 if (eventDeclaration instanceof KOfMGateDefinition) {
253 _matched_1=true;
254 Gate _xblockexpression_2 = null;
255 {
256 int _count = inputs.getCount();
257 int _k = ((KOfMGateDefinition)eventDeclaration).getK();
258 int _multiply = (_count * _k);
259 int _m = ((KOfMGateDefinition)eventDeclaration).getM();
260 final int requiredTrueInputs = (_multiply / _m);
261 int _trueEventCount = inputs.getTrueEventCount();
262 final int k = (requiredTrueInputs - _trueEventCount);
263 final int m = inputs.getVariableEventCount();
264 Gate _xifexpression = null;
265 if ((k == 0)) {
266 return this.trueEvent;
267 } else {
268 Gate _xifexpression_1 = null;
269 if ((k > m)) {
270 return this.falseEvent;
271 } else {
272 Gate _xifexpression_2 = null;
273 boolean _containsExactlyOneRandomEvent = inputs.containsExactlyOneRandomEvent();
274 if (_containsExactlyOneRandomEvent) {
275 return inputs.toSingleRandomEvent();
276 } else {
277 Gate _xifexpression_3 = null;
278 if ((k == 1)) {
279 _xifexpression_3 = this._ftFactory.createOrGate();
280 } else {
281 Gate _xifexpression_4 = null;
282 if ((k == m)) {
283 _xifexpression_4 = this._ftFactory.createAndGate();
284 } else {
285 KOfMGate _xblockexpression_3 = null;
286 {
287 final KOfMGate kOfMGate = this._ftFactory.createKOfMGate();
288 kOfMGate.setK(k);
289 _xblockexpression_3 = kOfMGate;
290 }
291 _xifexpression_4 = _xblockexpression_3;
292 }
293 _xifexpression_3 = _xifexpression_4;
294 }
295 _xifexpression_2 = _xifexpression_3;
296 }
297 _xifexpression_1 = _xifexpression_2;
298 }
299 _xifexpression = _xifexpression_1;
300 }
301 _xblockexpression_2 = _xifexpression;
302 }
303 _switchResult_1 = _xblockexpression_2;
304 }
305 }
306 if (!_matched_1) {
307 throw new IllegalArgumentException(("Unknown gate definition: " + eventDeclaration));
308 }
309 final Gate gate = _switchResult_1;
310 gate.getInputEvents().addAll(inputs.getRandomEvents());
311 _xblockexpression_1 = gate;
312 }
313 _switchResult = _xblockexpression_1;
314 }
315 }
316 if (!_matched) {
317 throw new IllegalArgumentException(("Unknown event declaration: " + eventDeclaration));
318 }
319 final RandomEvent event = _switchResult;
320 event.setName(eventName);
321 _xblockexpression = event;
322 }
323 return _xblockexpression;
324 }
325
326 protected Event materializeConnectedEvent(final Component component, final InputEvent inputEvent) {
327 Event _xblockexpression = null;
328 {
329 boolean _isMultiple = inputEvent.isMultiple();
330 if (_isMultiple) {
331 StringConcatenation _builder = new StringConcatenation();
332 _builder.append("Cannot materialize multiple nput ");
333 String _name = component.getName();
334 _builder.append(_name);
335 _builder.append("_");
336 String _name_1 = inputEvent.getName();
337 _builder.append(_name_1);
338 throw new IllegalArgumentException(_builder.toString());
339 }
340 final Input input = this.findInput(component, inputEvent);
341 final EList<Connection> incomingConnections = input.getIncomingConnections();
342 int _size = incomingConnections.size();
343 boolean _notEquals = (_size != 1);
344 if (_notEquals) {
345 StringConcatenation _builder_1 = new StringConcatenation();
346 _builder_1.append("Input ");
347 String _name_2 = component.getName();
348 _builder_1.append(_name_2);
349 _builder_1.append("_");
350 String _name_3 = inputEvent.getName();
351 _builder_1.append(_name_3);
352 _builder_1.append(" has ");
353 int _size_1 = incomingConnections.size();
354 _builder_1.append(_size_1);
355 _builder_1.append(" connections instead of 1");
356 throw new IllegalArgumentException(_builder_1.toString());
357 }
358 final Output output = IterableExtensions.<Connection>head(incomingConnections).getOutput();
359 _xblockexpression = this.getOrMaterialize(output.getComponent(), output.getEventDeclaration());
360 }
361 return _xblockexpression;
362 }
363
364 protected EventCollection collectInputs(final Component component, final GateDefinition gateDefinition) {
365 EventCollection _xblockexpression = null;
366 {
367 final EventCollection.Builder builder = EventCollection.builder();
368 EList<EventDeclaration> _inputEvents = gateDefinition.getInputEvents();
369 for (final EventDeclaration inputEventDeclaration : _inputEvents) {
370 boolean _matched = false;
371 if (inputEventDeclaration instanceof InputEvent) {
372 boolean _isMultiple = ((InputEvent)inputEventDeclaration).isMultiple();
373 if (_isMultiple) {
374 _matched=true;
375 final EventCollection materializedEvents = this.getOrMaterializeConnectedEvents(component, ((InputEvent)inputEventDeclaration));
376 builder.addAll(materializedEvents);
377 }
378 }
379 if (!_matched) {
380 builder.add(this.getOrMaterialize(component, inputEventDeclaration));
381 }
382 }
383 _xblockexpression = builder.build();
384 }
385 return _xblockexpression;
386 }
387
388 protected EventCollection getOrMaterializeConnectedEvents(final Component component, final InputEvent inputEvent) {
389 EventCollection _xblockexpression = null;
390 {
391 final EventMaterializer.EventKey<InputEvent> inputKey = new EventMaterializer.EventKey<InputEvent>(component, inputEvent);
392 this.pushEventKey(inputKey);
393 EventCollection _xtrycatchfinallyexpression = null;
394 try {
395 EventCollection _xblockexpression_1 = null;
396 {
397 EventCollection eventCollection = this.multipleInputCache.get(inputKey);
398 if ((eventCollection == null)) {
399 eventCollection = this.materializeConnectedEvents(component, inputEvent);
400 this.multipleInputCache.put(inputKey, eventCollection);
401 }
402 _xblockexpression_1 = eventCollection;
403 }
404 _xtrycatchfinallyexpression = _xblockexpression_1;
405 } finally {
406 this.popEventKey(inputKey);
407 }
408 _xblockexpression = _xtrycatchfinallyexpression;
409 }
410 return _xblockexpression;
411 }
412
413 protected EventCollection materializeConnectedEvents(final Component component, final InputEvent inputEvent) {
414 EventCollection _xblockexpression = null;
415 {
416 final Input input = this.findInput(component, inputEvent);
417 final EventCollection.Builder builder = EventCollection.builder();
418 EList<Connection> _incomingConnections = input.getIncomingConnections();
419 for (final Connection connection : _incomingConnections) {
420 boolean _isCurrentlyConnected = CftExtensions.isCurrentlyConnected(connection);
421 if (_isCurrentlyConnected) {
422 final Event materializedEvent = this.getOrMaterialize(connection.getOutput());
423 builder.add(materializedEvent);
424 }
425 }
426 _xblockexpression = builder.build();
427 }
428 return _xblockexpression;
429 }
430
431 protected Input findInput(final Component component, final InputEvent inputEvent) {
432 final Function1<Input, Boolean> _function = (Input it) -> {
433 InputEvent _inputEvent = it.getInputEvent();
434 return Boolean.valueOf(Objects.equal(_inputEvent, inputEvent));
435 };
436 final Input input = IterableExtensions.<Input>findFirst(component.getInputs(), _function);
437 if ((input == null)) {
438 StringConcatenation _builder = new StringConcatenation();
439 _builder.append("No input ");
440 _builder.append(inputEvent);
441 _builder.append(" in component ");
442 _builder.append(component);
443 throw new IllegalArgumentException(_builder.toString());
444 }
445 return input;
446 }
447
448 private void pushEventKey(final EventMaterializer.EventKey<? extends EventDeclaration> eventKey) {
449 boolean _add = this.path.add(eventKey);
450 boolean _not = (!_add);
451 if (_not) {
452 StringConcatenation _builder = new StringConcatenation();
453 _builder.append("Circular dependency [");
454 {
455 for(final EventMaterializer.EventKey<? extends EventDeclaration> ancestor : this.path) {
456 _builder.append(ancestor);
457 _builder.append(", ");
458 }
459 }
460 _builder.append(eventKey);
461 _builder.append("] detected");
462 throw new IllegalStateException(_builder.toString());
463 }
464 }
465
466 private boolean popEventKey(final EventMaterializer.EventKey<? extends EventDeclaration> eventKey) {
467 return this.path.remove(eventKey);
468 }
469}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/FaultTreeBuilder.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/FaultTreeBuilder.java
new file mode 100644
index 00000000..9b2dfd76
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/FaultTreeBuilder.java
@@ -0,0 +1,57 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.cft2ft;
2
3import com.google.common.base.Objects;
4import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.FaultTree;
5import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.FtFactory;
6import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.Gate;
7import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.RandomEvent;
8import java.util.Collection;
9import org.eclipse.emf.common.util.EList;
10import org.eclipse.emf.ecore.EObject;
11import org.eclipse.xtend.lib.annotations.Accessors;
12import org.eclipse.xtext.xbase.lib.Pure;
13
14@SuppressWarnings("all")
15public class FaultTreeBuilder {
16 @Accessors
17 private final FaultTree faultTree = FtFactory.eINSTANCE.createFaultTree();
18
19 public void addTopLevel(final RandomEvent event) {
20 RandomEvent _topEvent = this.faultTree.getTopEvent();
21 boolean _tripleNotEquals = (_topEvent != null);
22 if (_tripleNotEquals) {
23 throw new IllegalStateException("Top event was already set");
24 }
25 this.add(event);
26 this.faultTree.setTopEvent(event);
27 }
28
29 protected void add(final RandomEvent event) {
30 EObject _eContainer = this.faultTree.eContainer();
31 boolean _equals = Objects.equal(_eContainer, this.faultTree);
32 if (_equals) {
33 return;
34 }
35 EObject _eContainer_1 = this.faultTree.eContainer();
36 boolean _tripleNotEquals = (_eContainer_1 != null);
37 if (_tripleNotEquals) {
38 throw new IllegalStateException("Event is already in a different fault tree");
39 }
40 EList<RandomEvent> _events = this.faultTree.getEvents();
41 _events.add(event);
42 if ((event instanceof Gate)) {
43 this.addAll(((Gate)event).getInputEvents());
44 }
45 }
46
47 protected void addAll(final Collection<RandomEvent> events) {
48 for (final RandomEvent event : events) {
49 this.add(event);
50 }
51 }
52
53 @Pure
54 public FaultTree getFaultTree() {
55 return this.faultTree;
56 }
57}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentFaultTreeTrace.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentFaultTreeTrace.xtendbin
new file mode 100644
index 00000000..028440a8
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentFaultTreeTrace.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentInstanceTrace.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentInstanceTrace.xtendbin
new file mode 100644
index 00000000..d542ba2d
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentInstanceTrace.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentNameGenerator.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentNameGenerator.xtendbin
new file mode 100644
index 00000000..949da0cd
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentNameGenerator.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.Ecore2CftTransformation.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.Ecore2CftTransformation.xtendbin
new file mode 100644
index 00000000..82c045e2
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.Ecore2CftTransformation.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.InputTrace.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.InputTrace.xtendbin
new file mode 100644
index 00000000..ffd70c04
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.InputTrace.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.LookupHandler.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.LookupHandler.xtendbin
new file mode 100644
index 00000000..418c71d4
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.LookupHandler.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingHandler.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingHandler.xtendbin
new file mode 100644
index 00000000..86c0d704
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingHandler.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingQueries.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingQueries.xtendbin
new file mode 100644
index 00000000..c9dda5c4
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingQueries.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.gitignore b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.gitignore
new file mode 100644
index 00000000..377aa872
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.gitignore
@@ -0,0 +1,25 @@
1/.ComponentFaultTreeTrace.java._trace
2/.ComponentInstanceTrace.java._trace
3/.InputTrace.java._trace
4/.LookupHandler.java._trace
5/.MappingHandler.java._trace
6/.MappingQueries.java._trace
7/.CftTransformation.java._trace
8/.Ecore2CftTransformation.java._trace
9/.ComponentNameGenerator.java._trace
10/.ComponentFaultTreeTrace.xtendbin
11/.ComponentInstanceTrace.xtendbin
12/.ComponentNameGenerator.xtendbin
13/.Ecore2CftTransformation.xtendbin
14/.InputTrace.xtendbin
15/.LookupHandler.xtendbin
16/.MappingHandler.xtendbin
17/.MappingQueries.xtendbin
18/ComponentFaultTreeTrace.java
19/ComponentInstanceTrace.java
20/ComponentNameGenerator.java
21/Ecore2CftTransformation.java
22/InputTrace.java
23/LookupHandler.java
24/MappingHandler.java
25/MappingQueries.java
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.java
new file mode 100644
index 00000000..ddcf9036
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.java
@@ -0,0 +1,77 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft;
2
3import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.CftFactory;
4import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition;
5import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentFaultTree;
6import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Modality;
7import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Output;
8import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentInstanceTrace;
9import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentNameGenerator;
10import java.util.Map;
11import org.eclipse.emf.common.util.EList;
12import org.eclipse.viatra.query.runtime.api.IPatternMatch;
13import org.eclipse.xtend.lib.annotations.Accessors;
14import org.eclipse.xtext.xbase.lib.CollectionLiterals;
15import org.eclipse.xtext.xbase.lib.IterableExtensions;
16import org.eclipse.xtext.xbase.lib.Pure;
17
18@SuppressWarnings("all")
19public class ComponentFaultTreeTrace {
20 @Accessors
21 private final ComponentFaultTree componentFaultTree = CftFactory.eINSTANCE.createComponentFaultTree();
22
23 private final ComponentNameGenerator nameGenerator = new ComponentNameGenerator();
24
25 private final Map<IPatternMatch, ComponentInstanceTrace> componentInstancesMap = CollectionLiterals.<IPatternMatch, ComponentInstanceTrace>newHashMap();
26
27 public ComponentInstanceTrace instantiateComponent(final IPatternMatch patternMatch, final ComponentDefinition componenDefinition) {
28 return this.instantiateComponent(patternMatch, componenDefinition, Modality.MUST, false);
29 }
30
31 public ComponentInstanceTrace instantiateComponent(final IPatternMatch patternMatch, final ComponentDefinition componenDefinition, final Modality exists, final boolean allowMultiple) {
32 ComponentInstanceTrace _xblockexpression = null;
33 {
34 boolean _containsKey = this.componentInstancesMap.containsKey(patternMatch);
35 if (_containsKey) {
36 throw new IllegalArgumentException(("Already instantiated component for match: " + patternMatch));
37 }
38 final ComponentInstanceTrace componentTrace = new ComponentInstanceTrace(this.componentFaultTree, componenDefinition, this.nameGenerator, exists, allowMultiple);
39 this.componentInstancesMap.put(patternMatch, componentTrace);
40 _xblockexpression = componentTrace;
41 }
42 return _xblockexpression;
43 }
44
45 public void setTopLevel(final ComponentInstanceTrace trace) {
46 Output _topEvent = this.componentFaultTree.getTopEvent();
47 boolean _tripleNotEquals = (_topEvent != null);
48 if (_tripleNotEquals) {
49 throw new IllegalArgumentException("Top level component already set");
50 }
51 final EList<Output> outputs = trace.getOutputs();
52 int _size = outputs.size();
53 boolean _tripleNotEquals_1 = (_size != 1);
54 if (_tripleNotEquals_1) {
55 int _size_1 = outputs.size();
56 String _plus = ("Top level component must have 1 output, got " + Integer.valueOf(_size_1));
57 String _plus_1 = (_plus +
58 " instead");
59 throw new IllegalArgumentException(_plus_1);
60 }
61 boolean _appearsExactlyOnce = trace.appearsExactlyOnce();
62 boolean _not = (!_appearsExactlyOnce);
63 if (_not) {
64 throw new IllegalArgumentException("Top level must appear in the fault tree exactly once");
65 }
66 this.componentFaultTree.setTopEvent(IterableExtensions.<Output>head(outputs));
67 }
68
69 public ComponentInstanceTrace lookup(final IPatternMatch patternMatch) {
70 return this.componentInstancesMap.get(patternMatch);
71 }
72
73 @Pure
74 public ComponentFaultTree getComponentFaultTree() {
75 return this.componentFaultTree;
76 }
77}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.java
new file mode 100644
index 00000000..4034bdf3
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.java
@@ -0,0 +1,77 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft;
2
3import com.google.common.collect.Maps;
4import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.CftFactory;
5import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Component;
6import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition;
7import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentFaultTree;
8import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.EventDeclaration;
9import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.InputEvent;
10import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Modality;
11import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Output;
12import hu.bme.mit.inf.dslreasoner.faulttree.model.util.CftExtensions;
13import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentNameGenerator;
14import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.InputTrace;
15import java.util.Map;
16import org.eclipse.emf.common.util.EList;
17
18@SuppressWarnings("all")
19public class ComponentInstanceTrace {
20 private final Component componentInstance = CftFactory.eINSTANCE.createComponent();
21
22 private final Map<InputEvent, InputTrace> inputEventsMap;
23
24 private final Map<EventDeclaration, Output> outputEventsMap;
25
26 protected ComponentInstanceTrace(final ComponentFaultTree faultTree, final ComponentDefinition componentDefinition, final ComponentNameGenerator nameGenerator, final Modality exists, final boolean multipleAllowed) {
27 this.componentInstance.setComponentDefinition(componentDefinition);
28 this.componentInstance.setName(nameGenerator.nextName(componentDefinition));
29 this.componentInstance.setExists(exists);
30 this.componentInstance.setMultipleAllowed(multipleAllowed);
31 this.inputEventsMap = Maps.<InputEvent, InputTrace>newHashMapWithExpectedSize(componentDefinition.getInputEvents().size());
32 EList<InputEvent> _inputEvents = componentDefinition.getInputEvents();
33 for (final InputEvent inputEvent : _inputEvents) {
34 {
35 final InputTrace inputTrace = new InputTrace(this.componentInstance, inputEvent);
36 this.inputEventsMap.put(inputEvent, inputTrace);
37 }
38 }
39 this.outputEventsMap = Maps.<EventDeclaration, Output>newHashMapWithExpectedSize(componentDefinition.getOutputEvents().size());
40 EList<EventDeclaration> _outputEvents = componentDefinition.getOutputEvents();
41 for (final EventDeclaration outputEvent : _outputEvents) {
42 {
43 final Output output = CftFactory.eINSTANCE.createOutput();
44 output.setEventDeclaration(outputEvent);
45 EList<Output> _outputs = this.componentInstance.getOutputs();
46 _outputs.add(output);
47 this.outputEventsMap.put(outputEvent, output);
48 }
49 }
50 EList<Component> _components = faultTree.getComponents();
51 _components.add(this.componentInstance);
52 }
53
54 public void assign(final EventDeclaration inputEvent, final ComponentInstanceTrace sourceComponent, final EventDeclaration outputEvent) {
55 this.assign(inputEvent, sourceComponent, outputEvent, Modality.MUST);
56 }
57
58 public void assign(final EventDeclaration inputEvent, final ComponentInstanceTrace sourceComponent, final EventDeclaration outputEvent, final Modality exists) {
59 final InputTrace inputTrace = this.inputEventsMap.get(inputEvent);
60 if ((inputTrace == null)) {
61 throw new IllegalArgumentException(("Unknown input: " + inputEvent));
62 }
63 final Output output = sourceComponent.outputEventsMap.get(outputEvent);
64 if ((output == null)) {
65 throw new IllegalArgumentException(("Unknown output: " + outputEvent));
66 }
67 inputTrace.assign(output, exists);
68 }
69
70 protected EList<Output> getOutputs() {
71 return this.componentInstance.getOutputs();
72 }
73
74 protected boolean appearsExactlyOnce() {
75 return CftExtensions.appearsExactlyOnce(this.componentInstance);
76 }
77}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentNameGenerator.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentNameGenerator.java
new file mode 100644
index 00000000..e7dca003
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentNameGenerator.java
@@ -0,0 +1,29 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft;
2
3import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition;
4import java.util.Map;
5import org.eclipse.xtext.xbase.lib.CollectionLiterals;
6
7@SuppressWarnings("all")
8public class ComponentNameGenerator {
9 private static final String DEFAULT_NAME = "__unnamed";
10
11 private final Map<ComponentDefinition, Integer> instanceCounts = CollectionLiterals.<ComponentDefinition, Integer>newHashMap();
12
13 public String nextName(final ComponentDefinition componentDefinition) {
14 String _xblockexpression = null;
15 {
16 final Integer instanceCount = this.instanceCounts.getOrDefault(componentDefinition, Integer.valueOf(0));
17 this.instanceCounts.put(componentDefinition, Integer.valueOf(((instanceCount).intValue() + 1)));
18 String _elvis = null;
19 String _name = componentDefinition.getName();
20 if (_name != null) {
21 _elvis = _name;
22 } else {
23 _elvis = ComponentNameGenerator.DEFAULT_NAME;
24 }
25 _xblockexpression = (_elvis + instanceCount);
26 }
27 return _xblockexpression;
28 }
29}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/Ecore2CftTransformation.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/Ecore2CftTransformation.java
new file mode 100644
index 00000000..a63c8e78
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/Ecore2CftTransformation.java
@@ -0,0 +1,41 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft;
2
3import com.google.common.collect.ImmutableList;
4import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingDefinition;
5import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.TransformationDefinition;
6import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentFaultTree;
7import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentFaultTreeTrace;
8import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.MappingHandler;
9import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.MappingQueries;
10import java.util.List;
11import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
12import org.eclipse.xtext.xbase.lib.Functions.Function1;
13import org.eclipse.xtext.xbase.lib.ListExtensions;
14
15@SuppressWarnings("all")
16public class Ecore2CftTransformation {
17 private final List<MappingHandler> mappingHandlers;
18
19 public Ecore2CftTransformation(final TransformationDefinition transformationDefinition, final ViatraQueryEngine viatraQueryEngine) {
20 final MappingQueries mappingQueries = new MappingQueries(transformationDefinition, viatraQueryEngine);
21 final Function1<MappingDefinition, MappingHandler> _function = (MappingDefinition mappingDefinition) -> {
22 return new MappingHandler(mappingDefinition, mappingQueries);
23 };
24 this.mappingHandlers = ImmutableList.<MappingHandler>copyOf(ListExtensions.<MappingDefinition, MappingHandler>map(transformationDefinition.getMappingDefinitions(), _function));
25 }
26
27 public ComponentFaultTree createComponentFaultTree() {
28 ComponentFaultTree _xblockexpression = null;
29 {
30 final ComponentFaultTreeTrace trace = new ComponentFaultTreeTrace();
31 for (final MappingHandler handler : this.mappingHandlers) {
32 handler.instantiateComponents(trace);
33 }
34 for (final MappingHandler handler_1 : this.mappingHandlers) {
35 handler_1.instantiateConnections(trace);
36 }
37 _xblockexpression = trace.getComponentFaultTree();
38 }
39 return _xblockexpression;
40 }
41}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.java
new file mode 100644
index 00000000..2b30566f
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.java
@@ -0,0 +1,43 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft;
2
3import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.CftFactory;
4import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Component;
5import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Connection;
6import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Input;
7import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.InputEvent;
8import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Modality;
9import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Output;
10import hu.bme.mit.inf.dslreasoner.faulttree.model.util.CftExtensions;
11import java.util.Map;
12import org.eclipse.emf.common.util.EList;
13import org.eclipse.xtext.xbase.lib.CollectionLiterals;
14
15@SuppressWarnings("all")
16public class InputTrace {
17 private final Input input = CftFactory.eINSTANCE.createInput();
18
19 private final Map<Output, Connection> connectionsMap = CollectionLiterals.<Output, Connection>newHashMap();
20
21 protected InputTrace(final Component component, final InputEvent inputEvent) {
22 this.input.setInputEvent(inputEvent);
23 EList<Input> _inputs = component.getInputs();
24 _inputs.add(this.input);
25 }
26
27 public void assign(final Output output, final Modality exists) {
28 final Connection connection = this.connectionsMap.get(output);
29 if ((connection == null)) {
30 final Connection newConnection = CftFactory.eINSTANCE.createConnection();
31 newConnection.setOutput(output);
32 newConnection.setExists(exists);
33 EList<Connection> _incomingConnections = this.input.getIncomingConnections();
34 _incomingConnections.add(newConnection);
35 this.connectionsMap.put(output, newConnection);
36 } else {
37 boolean _isMoreConcreteThan = CftExtensions.isMoreConcreteThan(exists, connection.getExists());
38 if (_isMoreConcreteThan) {
39 connection.setExists(exists);
40 }
41 }
42 }
43}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/LookupHandler.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/LookupHandler.java
new file mode 100644
index 00000000..e155aac8
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/LookupHandler.java
@@ -0,0 +1,84 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft;
2
3import com.google.common.base.Objects;
4import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.LookupDefinition;
5import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingDefinition;
6import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingParameter;
7import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentFaultTreeTrace;
8import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentInstanceTrace;
9import org.eclipse.emf.ecore.EObject;
10import org.eclipse.viatra.query.patternlanguage.emf.vql.Pattern;
11import org.eclipse.viatra.query.runtime.api.IPatternMatch;
12import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
13import org.eclipse.xtext.xbase.lib.Conversions;
14
15@SuppressWarnings("all")
16public class LookupHandler {
17 private final int[] argumentIndices;
18
19 private final ViatraQueryMatcher<? extends IPatternMatch> lookedUpMatcher;
20
21 public LookupHandler(final MappingDefinition mappingDefinition, final LookupDefinition lookupDefinition, final ViatraQueryMatcher<? extends IPatternMatch> lookedUpMatcher) {
22 EObject _eContainer = lookupDefinition.eContainer();
23 boolean _notEquals = (!Objects.equal(_eContainer, mappingDefinition));
24 if (_notEquals) {
25 throw new IllegalArgumentException("lookupDefinition must be contained in mappingDefinition");
26 }
27 final int argumentCount = lookupDefinition.getArguments().size();
28 int _length = ((Object[])Conversions.unwrapArray(lookedUpMatcher.getParameterNames(), Object.class)).length;
29 boolean _notEquals_1 = (argumentCount != _length);
30 if (_notEquals_1) {
31 MappingDefinition _mapping = lookupDefinition.getMapping();
32 Pattern _pattern = null;
33 if (_mapping!=null) {
34 _pattern=_mapping.getPattern();
35 }
36 String _name = null;
37 if (_pattern!=null) {
38 _name=_pattern.getName();
39 }
40 String _plus = ("lookupDefinition (name: " + _name);
41 String _plus_1 = (_plus +
42 ") must have as many arguments as lookedUpMatcher (name: ");
43 String _patternName = lookedUpMatcher.getPatternName();
44 String _plus_2 = (_plus_1 + _patternName);
45 String _plus_3 = (_plus_2 + ")");
46 throw new IllegalArgumentException(_plus_3);
47 }
48 this.argumentIndices = new int[argumentCount];
49 for (int i = 0; (i < argumentCount); i++) {
50 {
51 final MappingParameter argument = lookupDefinition.getArguments().get(i);
52 final int argumentIndex = mappingDefinition.getParameters().indexOf(argument);
53 this.argumentIndices[i] = argumentIndex;
54 }
55 }
56 this.lookedUpMatcher = lookedUpMatcher;
57 }
58
59 public ComponentInstanceTrace lookupForMatch(final ComponentFaultTreeTrace faultTreeTrace, final IPatternMatch match) {
60 ComponentInstanceTrace _xblockexpression = null;
61 {
62 final IPatternMatch lookedUpMatch = this.createLookedUpMatch(match);
63 _xblockexpression = faultTreeTrace.lookup(lookedUpMatch);
64 }
65 return _xblockexpression;
66 }
67
68 private IPatternMatch createLookedUpMatch(final IPatternMatch match) {
69 IPatternMatch _xblockexpression = null;
70 {
71 final IPatternMatch lookedUpMatch = this.lookedUpMatcher.newEmptyMatch();
72 final int argumentCount = this.argumentIndices.length;
73 for (int i = 0; (i < argumentCount); i++) {
74 {
75 final int argumentIndex = this.argumentIndices[i];
76 Object argumentValue = match.get(argumentIndex);
77 lookedUpMatch.set(i, argumentValue);
78 }
79 }
80 _xblockexpression = lookedUpMatch;
81 }
82 return _xblockexpression;
83 }
84}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingHandler.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingHandler.java
new file mode 100644
index 00000000..41703289
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingHandler.java
@@ -0,0 +1,146 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft;
2
3import com.google.common.collect.ImmutableMap;
4import com.google.common.collect.Iterables;
5import com.google.common.collect.Maps;
6import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.Assignment;
7import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.ComponentInstance;
8import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.EventReference;
9import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.LookupDefinition;
10import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingDefinition;
11import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.Variable;
12import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition;
13import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentFaultTreeTrace;
14import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentInstanceTrace;
15import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.LookupHandler;
16import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.MappingQueries;
17import java.util.HashMap;
18import java.util.HashSet;
19import java.util.Map;
20import java.util.Set;
21import java.util.function.Consumer;
22import org.eclipse.emf.common.util.EList;
23import org.eclipse.viatra.query.runtime.api.IPatternMatch;
24import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
25import org.eclipse.xtext.xbase.lib.CollectionLiterals;
26import org.eclipse.xtext.xbase.lib.Functions.Function1;
27import org.eclipse.xtext.xbase.lib.IterableExtensions;
28
29@SuppressWarnings("all")
30public class MappingHandler {
31 private final ViatraQueryMatcher<? extends IPatternMatch> matcher;
32
33 private final MappingDefinition mappingDefinition;
34
35 private final Map<LookupDefinition, LookupHandler> lookupHandlers;
36
37 public MappingHandler(final MappingDefinition mappingDefinition, final MappingQueries mappingQueries) {
38 this.matcher = mappingQueries.getMatcher(mappingDefinition);
39 this.mappingDefinition = mappingDefinition;
40 final HashSet<Variable> variables = CollectionLiterals.<Variable>newHashSet();
41 EList<Assignment> _assignments = mappingDefinition.getAssignments();
42 for (final Assignment assignment : _assignments) {
43 {
44 Variable _component = assignment.getInput().getComponent();
45 variables.add(_component);
46 Variable _component_1 = assignment.getOutput().getComponent();
47 variables.add(_component_1);
48 }
49 }
50 final Function1<LookupDefinition, LookupDefinition> _function = (LookupDefinition it) -> {
51 return it;
52 };
53 final Function1<LookupDefinition, LookupHandler> _function_1 = (LookupDefinition lookupDefinition) -> {
54 return mappingQueries.createLookupHandler(mappingDefinition, lookupDefinition);
55 };
56 this.lookupHandlers = ImmutableMap.<LookupDefinition, LookupHandler>copyOf(IterableExtensions.<LookupDefinition, LookupDefinition, LookupHandler>toMap(Iterables.<LookupDefinition>filter(variables, LookupDefinition.class), _function, _function_1));
57 }
58
59 public void instantiateComponents(final ComponentFaultTreeTrace faultTreeTrace) {
60 boolean _hasComponentInstace = this.hasComponentInstace();
61 boolean _not = (!_hasComponentInstace);
62 if (_not) {
63 return;
64 }
65 final Consumer<IPatternMatch> _function = (IPatternMatch match) -> {
66 final ComponentInstanceTrace componentTrace = faultTreeTrace.instantiateComponent(match, this.getComponentDefinition());
67 boolean _isTopLevel = this.isTopLevel();
68 if (_isTopLevel) {
69 faultTreeTrace.setTopLevel(componentTrace);
70 }
71 };
72 this.matcher.forEachMatch(_function);
73 }
74
75 public void instantiateConnections(final ComponentFaultTreeTrace faultTreeTrace) {
76 boolean _hasConnections = this.hasConnections();
77 boolean _not = (!_hasConnections);
78 if (_not) {
79 return;
80 }
81 final Consumer<IPatternMatch> _function = (IPatternMatch match) -> {
82 final Map<Variable, ComponentInstanceTrace> lookedUpComponents = this.lookupComponents(faultTreeTrace, match);
83 EList<Assignment> _assignments = this.mappingDefinition.getAssignments();
84 for (final Assignment assignment : _assignments) {
85 {
86 final EventReference input = assignment.getInput();
87 final ComponentInstanceTrace inputComponent = lookedUpComponents.get(input.getComponent());
88 final EventReference output = assignment.getOutput();
89 final ComponentInstanceTrace outputComponent = lookedUpComponents.get(output.getComponent());
90 if (((inputComponent != null) && (outputComponent != null))) {
91 inputComponent.assign(input.getEvent(), outputComponent, output.getEvent());
92 }
93 }
94 }
95 };
96 this.matcher.forEachMatch(_function);
97 }
98
99 private Map<Variable, ComponentInstanceTrace> lookupComponents(final ComponentFaultTreeTrace faultTreeTrace, final IPatternMatch match) {
100 HashMap<Variable, ComponentInstanceTrace> _xblockexpression = null;
101 {
102 int _size = this.lookupHandlers.size();
103 int _plus = (_size + 1);
104 final HashMap<Variable, ComponentInstanceTrace> lookedUpComponents = Maps.<Variable, ComponentInstanceTrace>newHashMapWithExpectedSize(_plus);
105 boolean _hasComponentInstace = this.hasComponentInstace();
106 if (_hasComponentInstace) {
107 final ComponentInstanceTrace componentInstance = faultTreeTrace.lookup(match);
108 lookedUpComponents.put(this.mappingDefinition.getComponentInstance(), componentInstance);
109 }
110 Set<Map.Entry<LookupDefinition, LookupHandler>> _entrySet = this.lookupHandlers.entrySet();
111 for (final Map.Entry<LookupDefinition, LookupHandler> pair : _entrySet) {
112 {
113 final ComponentInstanceTrace componentInstance_1 = pair.getValue().lookupForMatch(faultTreeTrace, match);
114 if ((componentInstance_1 != null)) {
115 lookedUpComponents.put(pair.getKey(), componentInstance_1);
116 }
117 }
118 }
119 _xblockexpression = lookedUpComponents;
120 }
121 return _xblockexpression;
122 }
123
124 private ComponentDefinition getComponentDefinition() {
125 ComponentInstance _componentInstance = this.mappingDefinition.getComponentInstance();
126 ComponentDefinition _componentType = null;
127 if (_componentInstance!=null) {
128 _componentType=_componentInstance.getComponentType();
129 }
130 return _componentType;
131 }
132
133 private boolean hasComponentInstace() {
134 ComponentDefinition _componentDefinition = this.getComponentDefinition();
135 return (_componentDefinition != null);
136 }
137
138 private boolean isTopLevel() {
139 return this.mappingDefinition.isTopLevel();
140 }
141
142 private boolean hasConnections() {
143 boolean _isEmpty = this.mappingDefinition.getAssignments().isEmpty();
144 return (!_isEmpty);
145 }
146}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.java
new file mode 100644
index 00000000..6147807e
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.java
@@ -0,0 +1,60 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft;
2
3import com.google.common.collect.ImmutableMap;
4import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.LookupDefinition;
5import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingDefinition;
6import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.TransformationDefinition;
7import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.LookupHandler;
8import java.util.Map;
9import org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder;
10import org.eclipse.viatra.query.runtime.api.GenericQueryGroup;
11import org.eclipse.viatra.query.runtime.api.IPatternMatch;
12import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
13import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
14import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
15import org.eclipse.xtext.xbase.lib.Conversions;
16import org.eclipse.xtext.xbase.lib.Functions.Function1;
17import org.eclipse.xtext.xbase.lib.IterableExtensions;
18import org.eclipse.xtext.xbase.lib.MapExtensions;
19
20@SuppressWarnings("all")
21public class MappingQueries {
22 private final Map<MappingDefinition, ViatraQueryMatcher<? extends IPatternMatch>> matchersMap;
23
24 public MappingQueries(final TransformationDefinition transformationDefinition, final ViatraQueryEngine viatraQueryEngine) {
25 final SpecificationBuilder specificationBuilder = new SpecificationBuilder();
26 final Function1<MappingDefinition, MappingDefinition> _function = (MappingDefinition it) -> {
27 return it;
28 };
29 final Function1<MappingDefinition, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> _function_1 = (MappingDefinition it) -> {
30 return specificationBuilder.getOrCreateSpecification(it.getPattern());
31 };
32 final Map<MappingDefinition, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> querySpecificationsMap = IterableExtensions.<MappingDefinition, MappingDefinition, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>>toMap(transformationDefinition.getMappingDefinitions(), _function, _function_1);
33 GenericQueryGroup.of(((IQuerySpecification<?>[])Conversions.unwrapArray(querySpecificationsMap.values(), IQuerySpecification.class))).prepare(viatraQueryEngine);
34 final Function1<IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>, ViatraQueryMatcher<? extends IPatternMatch>> _function_2 = (IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> it) -> {
35 return it.getMatcher(viatraQueryEngine);
36 };
37 this.matchersMap = ImmutableMap.<MappingDefinition, ViatraQueryMatcher<? extends IPatternMatch>>copyOf(MapExtensions.<MappingDefinition, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>, ViatraQueryMatcher<? extends IPatternMatch>>mapValues(querySpecificationsMap, _function_2));
38 }
39
40 public ViatraQueryMatcher<? extends IPatternMatch> getMatcher(final MappingDefinition mappingDefinition) {
41 ViatraQueryMatcher<? extends IPatternMatch> _xblockexpression = null;
42 {
43 final ViatraQueryMatcher<? extends IPatternMatch> matcher = this.matchersMap.get(mappingDefinition);
44 if ((matcher == null)) {
45 throw new IllegalArgumentException(("Unknown mapping definition: " + mappingDefinition));
46 }
47 _xblockexpression = matcher;
48 }
49 return _xblockexpression;
50 }
51
52 public LookupHandler createLookupHandler(final MappingDefinition mappingDefinition, final LookupDefinition lookupDefinition) {
53 LookupHandler _xblockexpression = null;
54 {
55 final ViatraQueryMatcher<? extends IPatternMatch> lookedUpMatcher = this.getMatcher(lookupDefinition.getMapping());
56 _xblockexpression = new LookupHandler(mappingDefinition, lookupDefinition, lookedUpMatcher);
57 }
58 return _xblockexpression;
59 }
60}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/.Ft2GalileoTransformation.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/.Ft2GalileoTransformation.xtendbin
new file mode 100644
index 00000000..0956e6e0
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/.Ft2GalileoTransformation.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/.gitignore b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/.gitignore
new file mode 100644
index 00000000..f4610b04
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/.gitignore
@@ -0,0 +1,3 @@
1/.Ft2GalileoTransformation.java._trace
2/.Ft2GalileoTransformation.xtendbin
3/Ft2GalileoTransformation.java
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/Ft2GalileoTransformation.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/Ft2GalileoTransformation.java
new file mode 100644
index 00000000..8748825d
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ft2galileo/Ft2GalileoTransformation.java
@@ -0,0 +1,188 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ft2galileo;
2
3import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.AndGate;
4import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.BasicEvent;
5import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ConstantDistribution;
6import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.Distribution;
7import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ExponentialDistribution;
8import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.FaultTree;
9import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.Gate;
10import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.KOfMGate;
11import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.OrGate;
12import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.RandomEvent;
13import java.util.Arrays;
14import org.eclipse.emf.common.util.EList;
15import org.eclipse.xtend2.lib.StringConcatenation;
16import org.eclipse.xtend2.lib.StringConcatenationClient;
17
18@SuppressWarnings("all")
19public class Ft2GalileoTransformation {
20 public CharSequence toGalileo(final FaultTree faultTree) {
21 StringConcatenation _builder = new StringConcatenation();
22 _builder.append("toplevel \"");
23 String _name = faultTree.getTopEvent().getName();
24 _builder.append(_name);
25 _builder.append("\";");
26 _builder.newLineIfNotEmpty();
27 {
28 EList<RandomEvent> _events = faultTree.getEvents();
29 for(final RandomEvent event : _events) {
30 _builder.append("\"");
31 String _name_1 = event.getName();
32 _builder.append(_name_1);
33 _builder.append("\" ");
34 Object _defineEvent = this.defineEvent(event);
35 _builder.append(_defineEvent);
36 _builder.append(";");
37 _builder.newLineIfNotEmpty();
38 }
39 }
40 return _builder;
41 }
42
43 protected Object _defineEvent(final BasicEvent basicEvent) {
44 StringConcatenation _builder = new StringConcatenation();
45 StringConcatenationClient _defineDistribution = this.defineDistribution(basicEvent.getDistribution());
46 _builder.append(_defineDistribution);
47 _builder.append(" dorm=0.0");
48 return _builder;
49 }
50
51 protected StringConcatenationClient _defineDistribution(final ConstantDistribution distribution) {
52 StringConcatenationClient _client = new StringConcatenationClient() {
53 @Override
54 protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
55 _builder.append("p=");
56 double _p = distribution.getP();
57 _builder.append(_p);
58 }
59 };
60 return _client;
61 }
62
63 protected StringConcatenationClient _defineDistribution(final ExponentialDistribution distribution) {
64 StringConcatenationClient _client = new StringConcatenationClient() {
65 @Override
66 protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
67 _builder.append("lambda=");
68 double _lambda = distribution.getLambda();
69 _builder.append(_lambda);
70 }
71 };
72 return _client;
73 }
74
75 protected StringConcatenationClient _defineDistribution(final Distribution distribution) {
76 throw new IllegalArgumentException(("Unknown distribution: " + distribution));
77 }
78
79 protected StringConcatenationClient _defineEvent(final Gate gate) {
80 StringConcatenationClient _client = new StringConcatenationClient() {
81 @Override
82 protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
83 StringConcatenationClient _defineGate = Ft2GalileoTransformation.this.defineGate(gate);
84 _builder.append(_defineGate);
85 _builder.append(" ");
86 {
87 EList<RandomEvent> _inputEvents = gate.getInputEvents();
88 boolean _hasElements = false;
89 for(final RandomEvent input : _inputEvents) {
90 if (!_hasElements) {
91 _hasElements = true;
92 } else {
93 _builder.appendImmediate(" ", "");
94 }
95 _builder.append("\"");
96 String _name = input.getName();
97 _builder.append(_name);
98 _builder.append("\"");
99 }
100 }
101 }
102 };
103 return _client;
104 }
105
106 protected StringConcatenationClient _defineGate(final AndGate gate) {
107 StringConcatenationClient _client = new StringConcatenationClient() {
108 @Override
109 protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
110 _builder.append("and");
111 }
112 };
113 return _client;
114 }
115
116 protected StringConcatenationClient _defineGate(final OrGate gate) {
117 StringConcatenationClient _client = new StringConcatenationClient() {
118 @Override
119 protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
120 _builder.append("or");
121 }
122 };
123 return _client;
124 }
125
126 protected StringConcatenationClient _defineGate(final KOfMGate gate) {
127 StringConcatenationClient _client = new StringConcatenationClient() {
128 @Override
129 protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
130 int _k = gate.getK();
131 _builder.append(_k);
132 _builder.append("of");
133 int _size = gate.getInputEvents().size();
134 _builder.append(_size);
135 }
136 };
137 return _client;
138 }
139
140 protected StringConcatenationClient _defineGate(final Gate gate) {
141 throw new IllegalArgumentException(("Unknown gate: " + gate));
142 }
143
144 protected StringConcatenationClient _defineEvent(final RandomEvent randomEvent) {
145 throw new IllegalArgumentException(("Unknown random even: " + randomEvent));
146 }
147
148 protected Object defineEvent(final RandomEvent basicEvent) {
149 if (basicEvent instanceof BasicEvent) {
150 return _defineEvent((BasicEvent)basicEvent);
151 } else if (basicEvent instanceof Gate) {
152 return _defineEvent((Gate)basicEvent);
153 } else if (basicEvent != null) {
154 return _defineEvent(basicEvent);
155 } else {
156 throw new IllegalArgumentException("Unhandled parameter types: " +
157 Arrays.<Object>asList(basicEvent).toString());
158 }
159 }
160
161 protected StringConcatenationClient defineDistribution(final Distribution distribution) {
162 if (distribution instanceof ConstantDistribution) {
163 return _defineDistribution((ConstantDistribution)distribution);
164 } else if (distribution instanceof ExponentialDistribution) {
165 return _defineDistribution((ExponentialDistribution)distribution);
166 } else if (distribution != null) {
167 return _defineDistribution(distribution);
168 } else {
169 throw new IllegalArgumentException("Unhandled parameter types: " +
170 Arrays.<Object>asList(distribution).toString());
171 }
172 }
173
174 protected StringConcatenationClient defineGate(final Gate gate) {
175 if (gate instanceof AndGate) {
176 return _defineGate((AndGate)gate);
177 } else if (gate instanceof KOfMGate) {
178 return _defineGate((KOfMGate)gate);
179 } else if (gate instanceof OrGate) {
180 return _defineGate((OrGate)gate);
181 } else if (gate != null) {
182 return _defineGate(gate);
183 } else {
184 throw new IllegalArgumentException("Unhandled parameter types: " +
185 Arrays.<Object>asList(gate).toString());
186 }
187 }
188}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.ReliabilityResult.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.ReliabilityResult.xtendbin
new file mode 100644
index 00000000..cdaacb58
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.ReliabilityResult.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftConfiguration.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftConfiguration.xtendbin
new file mode 100644
index 00000000..6e1908aa
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftConfiguration.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftHandler.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftHandler.xtendbin
new file mode 100644
index 00000000..5772b0e7
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftHandler.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftSolver.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftSolver.xtendbin
new file mode 100644
index 00000000..e1c1a8c7
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.StormDftSolver.xtendbin
Binary files differ
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.gitignore b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.gitignore
new file mode 100644
index 00000000..8a74c101
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/.gitignore
@@ -0,0 +1,20 @@
1/.StormDftSolver.java._trace
2/.StormDftConfiguration.java._trace
3/.StormDftMttfConfiguration.java._trace
4/.FtAnalysisObjective.java._trace
5/.ApproximationHeuristic.java._trace
6/.StormDftHandler.java._trace
7/.StormDftException.java._trace
8/.ReliabilityModelSolution.java._trace
9/.ReliabilityResult.java._trace
10/.ReliabilityResult.xtendbin
11/.StormDftConfiguration.xtendbin
12/.StormDftHandler.xtendbin
13/.StormDftSolver.xtendbin
14/ApproximationHeuristic.java
15/FtAnalysisObjective.java
16/ReliabilityResult.java
17/StormDftConfiguration.java
18/StormDftException.java
19/StormDftHandler.java
20/StormDftSolver.java
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/ApproximationHeuristic.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/ApproximationHeuristic.java
new file mode 100644
index 00000000..822d4f36
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/ApproximationHeuristic.java
@@ -0,0 +1,8 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver;
2
3@SuppressWarnings("all")
4public enum ApproximationHeuristic {
5 NONE,
6
7 DEPTH;
8}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/FtAnalysisObjective.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/FtAnalysisObjective.java
new file mode 100644
index 00000000..528ada42
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/FtAnalysisObjective.java
@@ -0,0 +1,14 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver;
2
3@SuppressWarnings("all")
4public abstract class FtAnalysisObjective {
5 public static final class TimeBound extends FtAnalysisObjective {
6 public double timeBound = 0;
7 }
8
9 public static final FtAnalysisObjective MTTF = new FtAnalysisObjective() {
10 };
11
12 private FtAnalysisObjective() {
13 }
14}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/ReliabilityResult.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/ReliabilityResult.java
new file mode 100644
index 00000000..c8c8b000
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/ReliabilityResult.java
@@ -0,0 +1,156 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver;
2
3import org.eclipse.xtend.lib.annotations.Data;
4import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor;
5import org.eclipse.xtext.xbase.lib.Pure;
6import org.eclipse.xtext.xbase.lib.util.ToStringBuilder;
7
8@SuppressWarnings("all")
9public abstract class ReliabilityResult {
10 @Data
11 public static final class Solution extends ReliabilityResult {
12 private final double lowerBound;
13
14 private final double upperBound;
15
16 public Solution(final double value) {
17 this(value, value);
18 }
19
20 public Solution(final double lowerBound, final double upperBound) {
21 if ((lowerBound > upperBound)) {
22 throw new IllegalArgumentException("lowerBound must not be larger than upperBound");
23 }
24 this.lowerBound = lowerBound;
25 this.upperBound = upperBound;
26 }
27
28 @Override
29 public ReliabilityResult.Solution getOrThrow() {
30 return this;
31 }
32
33 @Override
34 @Pure
35 public int hashCode() {
36 final int prime = 31;
37 int result = 1;
38 result = prime * result + (int) (Double.doubleToLongBits(this.lowerBound) ^ (Double.doubleToLongBits(this.lowerBound) >>> 32));
39 return prime * result + (int) (Double.doubleToLongBits(this.upperBound) ^ (Double.doubleToLongBits(this.upperBound) >>> 32));
40 }
41
42 @Override
43 @Pure
44 public boolean equals(final Object obj) {
45 if (this == obj)
46 return true;
47 if (obj == null)
48 return false;
49 if (getClass() != obj.getClass())
50 return false;
51 ReliabilityResult.Solution other = (ReliabilityResult.Solution) obj;
52 if (Double.doubleToLongBits(other.lowerBound) != Double.doubleToLongBits(this.lowerBound))
53 return false;
54 if (Double.doubleToLongBits(other.upperBound) != Double.doubleToLongBits(this.upperBound))
55 return false;
56 return true;
57 }
58
59 @Override
60 @Pure
61 public String toString() {
62 return new ToStringBuilder(this)
63 .addAllFields()
64 .toString();
65 }
66
67 @Pure
68 public double getLowerBound() {
69 return this.lowerBound;
70 }
71
72 @Pure
73 public double getUpperBound() {
74 return this.upperBound;
75 }
76 }
77
78 @Data
79 public static final class Unknown extends ReliabilityResult {
80 private final String message;
81
82 private final Throwable cause;
83
84 @FinalFieldsConstructor
85 public Unknown(final String message, final Throwable cause) {
86 super();
87 this.message = message;
88 this.cause = cause;
89 }
90
91 public Unknown(final String message) {
92 this(message, null);
93 }
94
95 @Override
96 public ReliabilityResult.Solution getOrThrow() {
97 throw new RuntimeException(this.message, this.cause);
98 }
99
100 @Override
101 @Pure
102 public int hashCode() {
103 final int prime = 31;
104 int result = 1;
105 result = prime * result + ((this.message== null) ? 0 : this.message.hashCode());
106 return prime * result + ((this.cause== null) ? 0 : this.cause.hashCode());
107 }
108
109 @Override
110 @Pure
111 public boolean equals(final Object obj) {
112 if (this == obj)
113 return true;
114 if (obj == null)
115 return false;
116 if (getClass() != obj.getClass())
117 return false;
118 ReliabilityResult.Unknown other = (ReliabilityResult.Unknown) obj;
119 if (this.message == null) {
120 if (other.message != null)
121 return false;
122 } else if (!this.message.equals(other.message))
123 return false;
124 if (this.cause == null) {
125 if (other.cause != null)
126 return false;
127 } else if (!this.cause.equals(other.cause))
128 return false;
129 return true;
130 }
131
132 @Override
133 @Pure
134 public String toString() {
135 return new ToStringBuilder(this)
136 .addAllFields()
137 .toString();
138 }
139
140 @Pure
141 public String getMessage() {
142 return this.message;
143 }
144
145 @Pure
146 public Throwable getCause() {
147 return this.cause;
148 }
149 }
150
151 public static final ReliabilityResult.Unknown TIMEOUT = new ReliabilityResult.Unknown("Solver timed out");
152
153 public static final ReliabilityResult.Unknown MEMOUT = new ReliabilityResult.Unknown("Solver out of memory");
154
155 public abstract ReliabilityResult.Solution getOrThrow();
156}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftConfiguration.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftConfiguration.java
new file mode 100644
index 00000000..e1bb3625
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftConfiguration.java
@@ -0,0 +1,31 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver;
2
3import com.google.common.base.Objects;
4import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.ApproximationHeuristic;
5import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.FtAnalysisObjective;
6import hu.bme.mit.inf.dslreasoner.logic.model.builder.SolverConfiguration;
7
8@SuppressWarnings("all")
9public final class StormDftConfiguration extends SolverConfiguration {
10 public static final String DEFAULT_SOLVER_PATH = "storm-dft";
11
12 public double precision = 1e-6;
13
14 public boolean bisimulation = true;
15
16 public boolean symmetryReduction = true;
17
18 public boolean modularization = true;
19
20 public boolean dontCarePropagation = true;
21
22 public double approximation = 0;
23
24 public ApproximationHeuristic approximationHeuristic = ApproximationHeuristic.NONE;
25
26 public FtAnalysisObjective objective;
27
28 public boolean isApproximationInUse() {
29 return (!Objects.equal(this.approximationHeuristic, ApproximationHeuristic.NONE));
30 }
31}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftException.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftException.java
new file mode 100644
index 00000000..955c9ed1
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftException.java
@@ -0,0 +1,12 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver;
2
3@SuppressWarnings("all")
4public class StormDftException extends RuntimeException {
5 public StormDftException(final String s) {
6 super(s);
7 }
8
9 public StormDftException(final String s, final Exception e) {
10 super(s, e);
11 }
12}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftHandler.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftHandler.java
new file mode 100644
index 00000000..46127425
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftHandler.java
@@ -0,0 +1,330 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver;
2
3import com.google.common.base.Objects;
4import com.google.common.collect.ImmutableList;
5import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.ApproximationHeuristic;
6import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.FtAnalysisObjective;
7import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.ReliabilityResult;
8import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.StormDftConfiguration;
9import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.StormDftException;
10import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel;
11import hu.bme.mit.inf.dslreasoner.logic.model.builder.SolverConfiguration;
12import java.io.BufferedReader;
13import java.io.IOException;
14import java.io.InputStream;
15import java.io.InputStreamReader;
16import java.util.ArrayList;
17import java.util.regex.Matcher;
18import java.util.regex.Pattern;
19import org.eclipse.xtend2.lib.StringConcatenation;
20import org.eclipse.xtext.xbase.lib.CollectionLiterals;
21import org.eclipse.xtext.xbase.lib.Exceptions;
22import org.eclipse.xtext.xbase.lib.Extension;
23import org.eclipse.xtext.xbase.lib.Functions.Function0;
24import org.eclipse.xtext.xbase.lib.InputOutput;
25import org.eclipse.xtext.xbase.lib.IterableExtensions;
26
27@SuppressWarnings("all")
28public class StormDftHandler {
29 private static final String DOUBLE_REGEX = "[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?";
30
31 private static final String SINGLE_RESULT_GROUP = "single";
32
33 private static final String LOWER_BOUND_GROUP = "lower";
34
35 private static final String UPPER_BOUND_GROUP = "upper";
36
37 private static final String RESULT_REGEX = new Function0<String>() {
38 public String apply() {
39 StringConcatenation _builder = new StringConcatenation();
40 _builder.append("^Result:\\s*\\[(?:(?<");
41 _builder.append(StormDftHandler.SINGLE_RESULT_GROUP);
42 _builder.append(">");
43 _builder.append(StormDftHandler.DOUBLE_REGEX);
44 _builder.append(")|\\((?<");
45 _builder.append(StormDftHandler.LOWER_BOUND_GROUP);
46 _builder.append(">");
47 _builder.append(StormDftHandler.DOUBLE_REGEX);
48 _builder.append("),\\s*(?<");
49 _builder.append(StormDftHandler.UPPER_BOUND_GROUP);
50 _builder.append(">");
51 _builder.append(StormDftHandler.DOUBLE_REGEX);
52 _builder.append(")\\))\\]");
53 return _builder.toString();
54 }
55 }.apply();
56
57 private static final Pattern RESULT_PATTERN = Pattern.compile(StormDftHandler.RESULT_REGEX);
58
59 private static final int SIGNAL_EXIT_VALUE_OFFSET = 0x80;
60
61 private static final int SIGXCPU = 24;
62
63 private static final int SIGXFSZ = 25;
64
65 private static final int STORM_GENERAL_ERROR = ((-1) & 0xff);
66
67 private static final int STORM_TIMEOUT = ((-2) & 0xff);
68
69 private static final int STORM_MEMOUT = ((-3) & 0xff);
70
71 public ReliabilityResult callSolver(final String dftFilePath, final StormDftConfiguration configuration) {
72 try {
73 ReliabilityResult _xblockexpression = null;
74 {
75 final ImmutableList<String> commandLine = this.toCommandLine(configuration, dftFilePath);
76 final DocumentationLevel documentationLevel = configuration.documentationLevel;
77 final boolean printOutput = (Objects.equal(documentationLevel, DocumentationLevel.NORMAL) ||
78 Objects.equal(documentationLevel, DocumentationLevel.FULL));
79 final ProcessBuilder processBuilder = new ProcessBuilder().command(commandLine);
80 Process process = null;
81 ReliabilityResult _xtrycatchfinallyexpression = null;
82 try {
83 ReliabilityResult _xtrycatchfinallyexpression_1 = null;
84 try {
85 ReliabilityResult _xblockexpression_1 = null;
86 {
87 process = processBuilder.start();
88 process.getOutputStream().close();
89 final ReliabilityResult.Solution result = this.readOutput(process.getInputStream(), printOutput);
90 final String error = this.readError(process.getErrorStream(), printOutput);
91 final int exitValue = process.waitFor();
92 ReliabilityResult _xifexpression = null;
93 if ((result == null)) {
94 _xifexpression = this.interpretExitStatus(exitValue, error);
95 } else {
96 _xifexpression = result;
97 }
98 _xblockexpression_1 = _xifexpression;
99 }
100 _xtrycatchfinallyexpression_1 = _xblockexpression_1;
101 } catch (final Throwable _t) {
102 if (_t instanceof IOException) {
103 final IOException e = (IOException)_t;
104 throw new StormDftException("Error during input/output handling of the stochastic solver.", e);
105 } else {
106 throw Exceptions.sneakyThrow(_t);
107 }
108 }
109 _xtrycatchfinallyexpression = _xtrycatchfinallyexpression_1;
110 } catch (final Throwable _t_1) {
111 if (_t_1 instanceof Exception) {
112 final Exception e_1 = (Exception)_t_1;
113 if ((process != null)) {
114 process.destroyForcibly().waitFor();
115 }
116 throw e_1;
117 } else {
118 throw Exceptions.sneakyThrow(_t_1);
119 }
120 }
121 _xblockexpression = _xtrycatchfinallyexpression;
122 }
123 return _xblockexpression;
124 } catch (Throwable _e) {
125 throw Exceptions.sneakyThrow(_e);
126 }
127 }
128
129 private ImmutableList<String> toCommandLine(@Extension final StormDftConfiguration configuration, final String dftFilePath) {
130 ImmutableList<String> _xblockexpression = null;
131 {
132 @Extension
133 final ImmutableList.Builder<String> optionsBuilder = ImmutableList.<String>builder();
134 String _elvis = null;
135 if (configuration.solverPath != null) {
136 _elvis = configuration.solverPath;
137 } else {
138 _elvis = StormDftConfiguration.DEFAULT_SOLVER_PATH;
139 }
140 optionsBuilder.add(_elvis);
141 if ((configuration.runtimeLimit != SolverConfiguration.Unlimited)) {
142 optionsBuilder.add("--timeout", Integer.valueOf(configuration.runtimeLimit).toString());
143 }
144 optionsBuilder.add("--precision", Double.valueOf(configuration.precision).toString());
145 if (configuration.bisimulation) {
146 optionsBuilder.add("--bisimulation");
147 }
148 if (configuration.symmetryReduction) {
149 optionsBuilder.add("--symmetryreduction");
150 }
151 if (configuration.modularization) {
152 optionsBuilder.add("--modularisation");
153 }
154 if ((!configuration.dontCarePropagation)) {
155 optionsBuilder.add("--disabledc");
156 }
157 boolean _isApproximationInUse = configuration.isApproximationInUse();
158 if (_isApproximationInUse) {
159 String _switchResult = null;
160 final ApproximationHeuristic approximationHeuristic = configuration.approximationHeuristic;
161 if (approximationHeuristic != null) {
162 switch (approximationHeuristic) {
163 case DEPTH:
164 _switchResult = "depth";
165 break;
166 default:
167 throw new IllegalArgumentException(("Unknown approximation heuristic: " + configuration.approximationHeuristic));
168 }
169 } else {
170 throw new IllegalArgumentException(("Unknown approximation heuristic: " + configuration.approximationHeuristic));
171 }
172 final String heuristicName = _switchResult;
173 optionsBuilder.add("--approximation", Double.valueOf(configuration.approximation).toString(), "--approximationheuristic", heuristicName);
174 }
175 optionsBuilder.add("--dftfile", dftFilePath);
176 final FtAnalysisObjective objective = configuration.objective;
177 boolean _matched = false;
178 if (Objects.equal(objective, FtAnalysisObjective.MTTF)) {
179 _matched=true;
180 optionsBuilder.add("--expectedtime");
181 }
182 if (!_matched) {
183 if (objective instanceof FtAnalysisObjective.TimeBound) {
184 _matched=true;
185 optionsBuilder.add("--timebound");
186 }
187 }
188 if (!_matched) {
189 throw new IllegalArgumentException(("Unknown analysis objective: " + configuration.objective));
190 }
191 boolean _equals = Objects.equal(configuration.documentationLevel, DocumentationLevel.FULL);
192 if (_equals) {
193 optionsBuilder.add("--verbose");
194 }
195 _xblockexpression = optionsBuilder.build();
196 }
197 return _xblockexpression;
198 }
199
200 private ReliabilityResult.Solution readOutput(final InputStream inputStream, final boolean printOutput) {
201 try {
202 Object _xblockexpression = null;
203 {
204 InputStreamReader _inputStreamReader = new InputStreamReader(inputStream);
205 final BufferedReader bufferedReader = new BufferedReader(_inputStreamReader);
206 try {
207 String line = null;
208 while (((line = bufferedReader.readLine()) != null)) {
209 {
210 if (printOutput) {
211 InputOutput.<String>println(line);
212 }
213 final Matcher matcher = StormDftHandler.RESULT_PATTERN.matcher(line);
214 boolean _find = matcher.find();
215 if (_find) {
216 try {
217 final String single = matcher.group(StormDftHandler.SINGLE_RESULT_GROUP);
218 if ((single != null)) {
219 final double singleValue = Double.parseDouble(single);
220 return new ReliabilityResult.Solution(singleValue);
221 }
222 final String lower = matcher.group(StormDftHandler.LOWER_BOUND_GROUP);
223 final String upper = matcher.group(StormDftHandler.UPPER_BOUND_GROUP);
224 if (((lower != null) && (upper != null))) {
225 final double lowerValue = Double.parseDouble(lower);
226 final double upperValue = Double.parseDouble(upper);
227 return new ReliabilityResult.Solution(lowerValue, upperValue);
228 }
229 throw new StormDftException(("Inconsistent stochastic solver output: " + line));
230 } catch (final Throwable _t) {
231 if (_t instanceof NumberFormatException) {
232 final NumberFormatException e = (NumberFormatException)_t;
233 throw new StormDftException("Malformatted number from stochastic solver.", e);
234 } else {
235 throw Exceptions.sneakyThrow(_t);
236 }
237 }
238 }
239 }
240 }
241 } finally {
242 bufferedReader.close();
243 }
244 _xblockexpression = null;
245 }
246 return ((ReliabilityResult.Solution)_xblockexpression);
247 } catch (Throwable _e) {
248 throw Exceptions.sneakyThrow(_e);
249 }
250 }
251
252 private String readError(final InputStream inputStream, final boolean printOutput) {
253 try {
254 String _xblockexpression = null;
255 {
256 InputStreamReader _inputStreamReader = new InputStreamReader(inputStream);
257 final BufferedReader bufferedReader = new BufferedReader(_inputStreamReader);
258 String _xtrycatchfinallyexpression = null;
259 try {
260 String _xblockexpression_1 = null;
261 {
262 final ArrayList<String> lines = CollectionLiterals.<String>newArrayList();
263 String line = null;
264 while (((line = bufferedReader.readLine()) != null)) {
265 {
266 if (printOutput) {
267 System.err.println(line);
268 }
269 lines.add(line);
270 }
271 }
272 _xblockexpression_1 = IterableExtensions.join(lines, "\n");
273 }
274 _xtrycatchfinallyexpression = _xblockexpression_1;
275 } finally {
276 bufferedReader.close();
277 }
278 _xblockexpression = _xtrycatchfinallyexpression;
279 }
280 return _xblockexpression;
281 } catch (Throwable _e) {
282 throw Exceptions.sneakyThrow(_e);
283 }
284 }
285
286 private ReliabilityResult.Unknown interpretExitStatus(final int exitValue, final String error) {
287 ReliabilityResult.Unknown _switchResult = null;
288 boolean _matched = false;
289 if (Objects.equal(exitValue, StormDftHandler.STORM_GENERAL_ERROR)) {
290 _matched=true;
291 throw new StormDftException(("Storm error: " + error));
292 }
293 if (!_matched) {
294 if (Objects.equal(exitValue, StormDftHandler.STORM_TIMEOUT)) {
295 _matched=true;
296 }
297 if (!_matched) {
298 if (Objects.equal(exitValue, (StormDftHandler.SIGNAL_EXIT_VALUE_OFFSET + StormDftHandler.SIGXCPU))) {
299 _matched=true;
300 }
301 }
302 if (_matched) {
303 _switchResult = ReliabilityResult.TIMEOUT;
304 }
305 }
306 if (!_matched) {
307 if (Objects.equal(exitValue, StormDftHandler.STORM_MEMOUT)) {
308 _matched=true;
309 }
310 if (!_matched) {
311 if (Objects.equal(exitValue, (StormDftHandler.SIGNAL_EXIT_VALUE_OFFSET + StormDftHandler.SIGXFSZ))) {
312 _matched=true;
313 }
314 }
315 if (_matched) {
316 _switchResult = ReliabilityResult.MEMOUT;
317 }
318 }
319 if (!_matched) {
320 {
321 if ((exitValue > StormDftHandler.SIGNAL_EXIT_VALUE_OFFSET)) {
322 final int signalNumber = (exitValue - StormDftHandler.SIGNAL_EXIT_VALUE_OFFSET);
323 throw new StormDftException(((("Storm unexpectedly killed by signal " + Integer.valueOf(signalNumber)) + ": ") + error));
324 }
325 throw new StormDftException(((("Storm unexpectedly exit with status " + Integer.valueOf(exitValue)) + ": ") + error));
326 }
327 }
328 return _switchResult;
329 }
330}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftSolver.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftSolver.java
new file mode 100644
index 00000000..491e7fc1
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/solver/StormDftSolver.java
@@ -0,0 +1,79 @@
1package hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver;
2
3import com.google.common.base.Objects;
4import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ConstantModel;
5import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.FaultTree;
6import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.ReliabilityModel;
7import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ft2galileo.Ft2GalileoTransformation;
8import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.FtAnalysisObjective;
9import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.ReliabilityResult;
10import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.StormDftConfiguration;
11import hu.bme.mit.inf.dslreasoner.faulttree.transformation.solver.StormDftHandler;
12import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace;
13
14@SuppressWarnings("all")
15public class StormDftSolver {
16 private static final String DFT_FILE_NAME = "ft.dft";
17
18 private final Ft2GalileoTransformation ft2Galileo = new Ft2GalileoTransformation();
19
20 private final StormDftHandler handler = new StormDftHandler();
21
22 public ReliabilityResult solve(final ReliabilityModel reliabilityModel, final StormDftConfiguration configuration, final ReasonerWorkspace reasonerWorkspace) {
23 ReliabilityResult _switchResult = null;
24 boolean _matched = false;
25 if (reliabilityModel instanceof FaultTree) {
26 _matched=true;
27 _switchResult = this.solve(((FaultTree)reliabilityModel), configuration, reasonerWorkspace);
28 }
29 if (!_matched) {
30 if (reliabilityModel instanceof ConstantModel) {
31 _matched=true;
32 ReliabilityResult.Solution _xblockexpression = null;
33 {
34 double _xifexpression = (double) 0;
35 boolean _isFailed = ((ConstantModel)reliabilityModel).isFailed();
36 if (_isFailed) {
37 _xifexpression = 0;
38 } else {
39 double _switchResult_1 = (double) 0;
40 final FtAnalysisObjective objective = configuration.objective;
41 boolean _matched_1 = false;
42 if (Objects.equal(objective, FtAnalysisObjective.MTTF)) {
43 _matched_1=true;
44 _switchResult_1 = Double.POSITIVE_INFINITY;
45 }
46 if (!_matched_1) {
47 if (objective instanceof FtAnalysisObjective.TimeBound) {
48 _matched_1=true;
49 _switchResult_1 = 1;
50 }
51 }
52 if (!_matched_1) {
53 throw new IllegalArgumentException(("Unknown objective: " + objective));
54 }
55 _xifexpression = _switchResult_1;
56 }
57 final double result = _xifexpression;
58 _xblockexpression = new ReliabilityResult.Solution(result);
59 }
60 _switchResult = _xblockexpression;
61 }
62 }
63 if (!_matched) {
64 throw new IllegalArgumentException(("Unknown reliability model: " + reliabilityModel));
65 }
66 return _switchResult;
67 }
68
69 public ReliabilityResult solve(final FaultTree faultTree, final StormDftConfiguration configuration, final ReasonerWorkspace reasonerWorkspace) {
70 ReliabilityResult _xblockexpression = null;
71 {
72 final CharSequence galileo = this.ft2Galileo.toGalileo(faultTree);
73 reasonerWorkspace.writeText(StormDftSolver.DFT_FILE_NAME, galileo);
74 final String dftFilePath = reasonerWorkspace.getFile(StormDftSolver.DFT_FILE_NAME).getAbsolutePath();
75 _xblockexpression = this.handler.callSolver(dftFilePath, configuration);
76 }
77 return _xblockexpression;
78 }
79}