diff options
Diffstat (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.xtend')
-rw-r--r-- | Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.xtend | 51 |
1 files changed, 51 insertions, 0 deletions
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 new file mode 100644 index 00000000..7353bfe5 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.xtend | |||
@@ -0,0 +1,51 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft | ||
2 | |||
3 | import com.google.common.collect.Maps | ||
4 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.CftFactory | ||
5 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition | ||
6 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentFaultTree | ||
7 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.EventDeclaration | ||
8 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.InputEvent | ||
9 | import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Output | ||
10 | import java.util.Map | ||
11 | |||
12 | class ComponentInstanceTrace { | ||
13 | val componentInstance = CftFactory.eINSTANCE.createComponent | ||
14 | val Map<InputEvent, InputTrace> inputEventsMap | ||
15 | val Map<EventDeclaration, Output> outputEventsMap | ||
16 | |||
17 | protected new(ComponentFaultTree faultTree, ComponentDefinition componentDefinition, | ||
18 | ComponentNameGenerator nameGenerator) { | ||
19 | componentInstance.componentDefinition = componentDefinition | ||
20 | componentInstance.name = nameGenerator.nextName(componentDefinition) | ||
21 | inputEventsMap = Maps.newHashMapWithExpectedSize(componentDefinition.inputEvents.size) | ||
22 | for (inputEvent : componentDefinition.inputEvents) { | ||
23 | val inputTrace = new InputTrace(componentInstance, inputEvent) | ||
24 | inputEventsMap.put(inputEvent, inputTrace) | ||
25 | } | ||
26 | outputEventsMap = Maps.newHashMapWithExpectedSize(componentDefinition.outputEvents.size) | ||
27 | for (outputEvent : componentDefinition.outputEvents) { | ||
28 | val output = CftFactory.eINSTANCE.createOutput | ||
29 | output.eventDeclaration = outputEvent | ||
30 | componentInstance.outputs += output | ||
31 | outputEventsMap.put(outputEvent, output) | ||
32 | } | ||
33 | faultTree.components += componentInstance | ||
34 | } | ||
35 | |||
36 | def void assign(EventDeclaration inputEvent, ComponentInstanceTrace sourceComponent, EventDeclaration outputEvent) { | ||
37 | val inputTrace = inputEventsMap.get(inputEvent) | ||
38 | if (inputTrace === null) { | ||
39 | throw new IllegalArgumentException("Unknown input: " + inputEvent) | ||
40 | } | ||
41 | val output = sourceComponent.outputEventsMap.get(outputEvent) | ||
42 | if (output === null) { | ||
43 | throw new IllegalArgumentException("Unknown output: " + outputEvent) | ||
44 | } | ||
45 | inputTrace.assign(output) | ||
46 | } | ||
47 | |||
48 | protected def getOutputs() { | ||
49 | componentInstance.outputs | ||
50 | } | ||
51 | } | ||