aboutsummaryrefslogtreecommitdiffstats
path: root/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft
diff options
context:
space:
mode:
Diffstat (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft')
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.xtend12
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.xtend18
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.xtend8
3 files changed, 34 insertions, 4 deletions
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.xtend b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.xtend
index 7a3e377b..10c91fb4 100644
--- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.xtend
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.xtend
@@ -2,6 +2,7 @@ package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft
2 2
3import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.CftFactory 3import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.CftFactory
4import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition 4import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition
5import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Modality
5import java.util.Map 6import java.util.Map
6import org.eclipse.viatra.query.runtime.api.IPatternMatch 7import org.eclipse.viatra.query.runtime.api.IPatternMatch
7import org.eclipse.xtend.lib.annotations.Accessors 8import org.eclipse.xtend.lib.annotations.Accessors
@@ -13,10 +14,16 @@ class ComponentFaultTreeTrace {
13 val Map<IPatternMatch, ComponentInstanceTrace> componentInstancesMap = newHashMap 14 val Map<IPatternMatch, ComponentInstanceTrace> componentInstancesMap = newHashMap
14 15
15 def instantiateComponent(IPatternMatch patternMatch, ComponentDefinition componenDefinition) { 16 def instantiateComponent(IPatternMatch patternMatch, ComponentDefinition componenDefinition) {
17 instantiateComponent(patternMatch, componenDefinition, Modality.MUST, false)
18 }
19
20 def instantiateComponent(IPatternMatch patternMatch, ComponentDefinition componenDefinition, Modality exists,
21 boolean allowMultiple) {
16 if (componentInstancesMap.containsKey(patternMatch)) { 22 if (componentInstancesMap.containsKey(patternMatch)) {
17 throw new IllegalArgumentException("Already instantiated component for match: " + patternMatch) 23 throw new IllegalArgumentException("Already instantiated component for match: " + patternMatch)
18 } 24 }
19 val componentTrace = new ComponentInstanceTrace(componentFaultTree, componenDefinition, nameGenerator) 25 val componentTrace = new ComponentInstanceTrace(componentFaultTree, componenDefinition, nameGenerator,
26 exists, allowMultiple)
20 componentInstancesMap.put(patternMatch, componentTrace) 27 componentInstancesMap.put(patternMatch, componentTrace)
21 componentTrace 28 componentTrace
22 } 29 }
@@ -30,6 +37,9 @@ class ComponentFaultTreeTrace {
30 throw new IllegalArgumentException("Top level component must have 1 output, got " + outputs.size + 37 throw new IllegalArgumentException("Top level component must have 1 output, got " + outputs.size +
31 " instead") 38 " instead")
32 } 39 }
40 if (!trace.appearsExactlyOnce) {
41 throw new IllegalArgumentException("Top level must appear in the fault tree exactly once")
42 }
33 componentFaultTree.topEvent = outputs.head 43 componentFaultTree.topEvent = outputs.head
34 } 44 }
35 45
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.xtend b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.xtend
index 7353bfe5..158ab2e1 100644
--- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.xtend
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.xtend
@@ -6,18 +6,23 @@ import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition
6import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentFaultTree 6import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentFaultTree
7import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.EventDeclaration 7import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.EventDeclaration
8import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.InputEvent 8import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.InputEvent
9import 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.cft.Output
10import java.util.Map 11import java.util.Map
11 12
13import static extension hu.bme.mit.inf.dslreasoner.faulttree.model.util.CftExtensions.*
14
12class ComponentInstanceTrace { 15class ComponentInstanceTrace {
13 val componentInstance = CftFactory.eINSTANCE.createComponent 16 val componentInstance = CftFactory.eINSTANCE.createComponent
14 val Map<InputEvent, InputTrace> inputEventsMap 17 val Map<InputEvent, InputTrace> inputEventsMap
15 val Map<EventDeclaration, Output> outputEventsMap 18 val Map<EventDeclaration, Output> outputEventsMap
16 19
17 protected new(ComponentFaultTree faultTree, ComponentDefinition componentDefinition, 20 protected new(ComponentFaultTree faultTree, ComponentDefinition componentDefinition,
18 ComponentNameGenerator nameGenerator) { 21 ComponentNameGenerator nameGenerator, Modality exists, boolean multipleAllowed) {
19 componentInstance.componentDefinition = componentDefinition 22 componentInstance.componentDefinition = componentDefinition
20 componentInstance.name = nameGenerator.nextName(componentDefinition) 23 componentInstance.name = nameGenerator.nextName(componentDefinition)
24 componentInstance.exists = exists
25 componentInstance.multipleAllowed = multipleAllowed
21 inputEventsMap = Maps.newHashMapWithExpectedSize(componentDefinition.inputEvents.size) 26 inputEventsMap = Maps.newHashMapWithExpectedSize(componentDefinition.inputEvents.size)
22 for (inputEvent : componentDefinition.inputEvents) { 27 for (inputEvent : componentDefinition.inputEvents) {
23 val inputTrace = new InputTrace(componentInstance, inputEvent) 28 val inputTrace = new InputTrace(componentInstance, inputEvent)
@@ -34,6 +39,11 @@ class ComponentInstanceTrace {
34 } 39 }
35 40
36 def void assign(EventDeclaration inputEvent, ComponentInstanceTrace sourceComponent, EventDeclaration outputEvent) { 41 def void assign(EventDeclaration inputEvent, ComponentInstanceTrace sourceComponent, EventDeclaration outputEvent) {
42 assign(inputEvent, sourceComponent, outputEvent, Modality.MUST)
43 }
44
45 def void assign(EventDeclaration inputEvent, ComponentInstanceTrace sourceComponent, EventDeclaration outputEvent,
46 Modality exists) {
37 val inputTrace = inputEventsMap.get(inputEvent) 47 val inputTrace = inputEventsMap.get(inputEvent)
38 if (inputTrace === null) { 48 if (inputTrace === null) {
39 throw new IllegalArgumentException("Unknown input: " + inputEvent) 49 throw new IllegalArgumentException("Unknown input: " + inputEvent)
@@ -42,10 +52,14 @@ class ComponentInstanceTrace {
42 if (output === null) { 52 if (output === null) {
43 throw new IllegalArgumentException("Unknown output: " + outputEvent) 53 throw new IllegalArgumentException("Unknown output: " + outputEvent)
44 } 54 }
45 inputTrace.assign(output) 55 inputTrace.assign(output, exists)
46 } 56 }
47 57
48 protected def getOutputs() { 58 protected def getOutputs() {
49 componentInstance.outputs 59 componentInstance.outputs
50 } 60 }
61
62 protected def appearsExactlyOnce() {
63 componentInstance.appearsExactlyOnce
64 }
51} 65}
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.xtend b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.xtend
index c529a09b..b892eff1 100644
--- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.xtend
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.xtend
@@ -5,9 +5,12 @@ import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Component
5import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Connection 5import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Connection
6import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Input 6import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Input
7import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.InputEvent 7import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.InputEvent
8import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Modality
8import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Output 9import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Output
9import java.util.Map 10import java.util.Map
10 11
12import static extension hu.bme.mit.inf.dslreasoner.faulttree.model.util.CftExtensions.*
13
11class InputTrace { 14class InputTrace {
12 val Input input = CftFactory.eINSTANCE.createInput 15 val Input input = CftFactory.eINSTANCE.createInput
13 val Map<Output, Connection> connectionsMap = newHashMap 16 val Map<Output, Connection> connectionsMap = newHashMap
@@ -17,13 +20,16 @@ class InputTrace {
17 component.inputs += input 20 component.inputs += input
18 } 21 }
19 22
20 def void assign(Output output) { 23 def void assign(Output output, Modality exists) {
21 val connection = connectionsMap.get(output) 24 val connection = connectionsMap.get(output)
22 if (connection === null) { 25 if (connection === null) {
23 val newConnection = CftFactory.eINSTANCE.createConnection 26 val newConnection = CftFactory.eINSTANCE.createConnection
24 newConnection.output = output 27 newConnection.output = output
28 newConnection.exists = exists
25 input.incomingConnections += newConnection 29 input.incomingConnections += newConnection
26 connectionsMap.put(output, newConnection) 30 connectionsMap.put(output, newConnection)
31 } else if (exists.isMoreConcreteThan(connection.exists)) {
32 connection.exists = exists
27 } 33 }
28 } 34 }
29} 35}