From 3f5aaab5025b8eb243f414b1c789085327df04f4 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Wed, 20 Mar 2019 16:09:09 +0100 Subject: Fault tree transformation for partial models WIP --- .../ecore2cft/ComponentInstanceTrace.xtend | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (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 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 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 inputEventsMap val Map outputEventsMap protected new(ComponentFaultTree faultTree, ComponentDefinition componentDefinition, - ComponentNameGenerator nameGenerator) { + 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) @@ -34,6 +39,11 @@ class ComponentInstanceTrace { } 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) @@ -42,10 +52,14 @@ class ComponentInstanceTrace { if (output === null) { throw new IllegalArgumentException("Unknown output: " + outputEvent) } - inputTrace.assign(output) + inputTrace.assign(output, exists) } protected def getOutputs() { componentInstance.outputs } + + protected def appearsExactlyOnce() { + componentInstance.appearsExactlyOnce + } } -- cgit v1.2.3-70-g09d2