1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft
import com.google.common.collect.Maps
import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.CftFactory
import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition
import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentFaultTree
import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.EventDeclaration
import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.InputEvent
import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Modality
import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Output
import java.util.Map
import static extension hu.bme.mit.inf.dslreasoner.faulttree.model.util.CftExtensions.*
class ComponentInstanceTrace {
val componentInstance = CftFactory.eINSTANCE.createComponent
val Map<InputEvent, InputTrace> inputEventsMap
val Map<EventDeclaration, Output> outputEventsMap
protected new(ComponentFaultTree faultTree, ComponentDefinition componentDefinition,
ComponentNameGenerator nameGenerator, Modality exists, boolean multipleAllowed) {
componentInstance.componentDefinition = componentDefinition
componentInstance.name = nameGenerator.nextName(componentDefinition)
componentInstance.exists = exists
componentInstance.multipleAllowed = multipleAllowed
inputEventsMap = Maps.newHashMapWithExpectedSize(componentDefinition.inputEvents.size)
for (inputEvent : componentDefinition.inputEvents) {
val inputTrace = new InputTrace(componentInstance, inputEvent)
inputEventsMap.put(inputEvent, inputTrace)
}
outputEventsMap = Maps.newHashMapWithExpectedSize(componentDefinition.outputEvents.size)
for (outputEvent : componentDefinition.outputEvents) {
val output = CftFactory.eINSTANCE.createOutput
output.eventDeclaration = outputEvent
componentInstance.outputs += output
outputEventsMap.put(outputEvent, output)
}
faultTree.components += componentInstance
}
def void assign(EventDeclaration inputEvent, ComponentInstanceTrace sourceComponent, EventDeclaration outputEvent) {
assign(inputEvent, sourceComponent, outputEvent, Modality.MUST)
}
def void assign(EventDeclaration inputEvent, ComponentInstanceTrace sourceComponent, EventDeclaration outputEvent,
Modality exists) {
val inputTrace = inputEventsMap.get(inputEvent)
if (inputTrace === null) {
throw new IllegalArgumentException("Unknown input: " + inputEvent)
}
val output = sourceComponent.outputEventsMap.get(outputEvent)
if (output === null) {
throw new IllegalArgumentException("Unknown output: " + outputEvent)
}
inputTrace.assign(output, exists)
}
protected def getOutputs() {
componentInstance.outputs
}
protected def appearsExactlyOnce() {
componentInstance.appearsExactlyOnce
}
}
|