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 --- .../transformation/ecore2cft/ComponentFaultTreeTrace.xtend | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.xtend') 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 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.Modality import java.util.Map import org.eclipse.viatra.query.runtime.api.IPatternMatch import org.eclipse.xtend.lib.annotations.Accessors @@ -13,10 +14,16 @@ class ComponentFaultTreeTrace { val Map componentInstancesMap = newHashMap def instantiateComponent(IPatternMatch patternMatch, ComponentDefinition componenDefinition) { + instantiateComponent(patternMatch, componenDefinition, Modality.MUST, false) + } + + def instantiateComponent(IPatternMatch patternMatch, ComponentDefinition componenDefinition, Modality exists, + boolean allowMultiple) { if (componentInstancesMap.containsKey(patternMatch)) { throw new IllegalArgumentException("Already instantiated component for match: " + patternMatch) } - val componentTrace = new ComponentInstanceTrace(componentFaultTree, componenDefinition, nameGenerator) + val componentTrace = new ComponentInstanceTrace(componentFaultTree, componenDefinition, nameGenerator, + exists, allowMultiple) componentInstancesMap.put(patternMatch, componentTrace) componentTrace } @@ -30,6 +37,9 @@ class ComponentFaultTreeTrace { throw new IllegalArgumentException("Top level component must have 1 output, got " + outputs.size + " instead") } + if (!trace.appearsExactlyOnce) { + throw new IllegalArgumentException("Top level must appear in the fault tree exactly once") + } componentFaultTree.topEvent = outputs.head } -- cgit v1.2.3-70-g09d2