From 6f88c4bd4e91728cea62505e893b0ce300baf7fc Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Thu, 7 Feb 2019 18:24:45 +0100 Subject: Ecore2Cft transformation --- .../ecore2cft/ComponentInstanceTrace.xtend | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.xtend (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.xtend') 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 @@ +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.Output +import java.util.Map + +class ComponentInstanceTrace { + val componentInstance = CftFactory.eINSTANCE.createComponent + val Map inputEventsMap + val Map outputEventsMap + + protected new(ComponentFaultTree faultTree, ComponentDefinition componentDefinition, + ComponentNameGenerator nameGenerator) { + componentInstance.componentDefinition = componentDefinition + componentInstance.name = nameGenerator.nextName(componentDefinition) + 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) { + 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) + } + + protected def getOutputs() { + componentInstance.outputs + } +} -- cgit v1.2.3-70-g09d2