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 --- .../faulttree/transformation/.gitignore | 8 ++ .../cft2ft/.Cft2FtTransformation.xtendbin | Bin 0 -> 2298 bytes .../faulttree/transformation/cft2ft/.gitignore | 1 + .../cft2ft/Cft2FtTransformation.java | 10 ++ .../ecore2cft/.ComponentFaultTreeTrace.xtendbin | Bin 0 -> 5009 bytes .../ecore2cft/.ComponentInstanceTrace.xtendbin | Bin 0 -> 5190 bytes .../ecore2cft/.ComponentNameGenerator.xtendbin | Bin 0 -> 3472 bytes .../ecore2cft/.Ecore2CftTransformation.xtendbin | Bin 0 -> 3400 bytes .../transformation/ecore2cft/.InputTrace.xtendbin | Bin 0 -> 3849 bytes .../ecore2cft/.LookupHandler.xtendbin | Bin 0 -> 5169 bytes .../ecore2cft/.MappingHandler.xtendbin | Bin 0 -> 6876 bytes .../ecore2cft/.MappingQueries.xtendbin | Bin 0 -> 4833 bytes .../faulttree/transformation/ecore2cft/.gitignore | 9 ++ .../ecore2cft/ComponentFaultTreeTrace.java | 67 ++++++++++ .../ecore2cft/ComponentInstanceTrace.java | 65 +++++++++ .../ecore2cft/ComponentNameGenerator.java | 29 ++++ .../ecore2cft/Ecore2CftTransformation.java | 35 +++++ .../transformation/ecore2cft/InputTrace.java | 35 +++++ .../transformation/ecore2cft/LookupHandler.java | 84 ++++++++++++ .../transformation/ecore2cft/MappingHandler.java | 146 +++++++++++++++++++++ .../transformation/ecore2cft/MappingQueries.java | 60 +++++++++ 21 files changed, 549 insertions(+) create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/.gitignore create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbin create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.gitignore create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/Cft2FtTransformation.java create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentFaultTreeTrace.xtendbin create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentInstanceTrace.xtendbin create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentNameGenerator.xtendbin create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.Ecore2CftTransformation.xtendbin create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.InputTrace.xtendbin create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.LookupHandler.xtendbin create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingHandler.xtendbin create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingQueries.xtendbin create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.gitignore create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.java create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.java create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentNameGenerator.java create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/Ecore2CftTransformation.java create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.java create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/LookupHandler.java create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingHandler.java create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.java (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree') diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/.gitignore b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/.gitignore new file mode 100644 index 00000000..49df59a2 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/.gitignore @@ -0,0 +1,8 @@ +/.CftTransformation.java._trace +/.ComponentFaultTreeTrace.java._trace +/.ComponentInstanceTrace.java._trace +/.InputTrace.java._trace +/.MappingHandler.java._trace +/.ComponentInstantiationHandler.java._trace +/.MappingQueries.java._trace +/.LookupHandler.java._trace diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbin new file mode 100644 index 00000000..3e751774 Binary files /dev/null and b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbin differ diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.gitignore b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.gitignore new file mode 100644 index 00000000..70156b02 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.gitignore @@ -0,0 +1 @@ +/.Cft2FtTransformation.java._trace diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/Cft2FtTransformation.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/Cft2FtTransformation.java new file mode 100644 index 00000000..ae750806 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/Cft2FtTransformation.java @@ -0,0 +1,10 @@ +package hu.bme.mit.inf.dslreasoner.faulttree.transformation.cft2ft; + +import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentFaultTree; + +@SuppressWarnings("all") +public class Cft2FtTransformation { + public void createFaultTree(final ComponentFaultTree componentFaultTree) { + throw new UnsupportedOperationException(); + } +} diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentFaultTreeTrace.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentFaultTreeTrace.xtendbin new file mode 100644 index 00000000..d26ae359 Binary files /dev/null and b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentFaultTreeTrace.xtendbin differ diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentInstanceTrace.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentInstanceTrace.xtendbin new file mode 100644 index 00000000..03d6064f Binary files /dev/null and b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentInstanceTrace.xtendbin differ diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentNameGenerator.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentNameGenerator.xtendbin new file mode 100644 index 00000000..1f6758ac Binary files /dev/null and b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.ComponentNameGenerator.xtendbin differ diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.Ecore2CftTransformation.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.Ecore2CftTransformation.xtendbin new file mode 100644 index 00000000..3569c02f Binary files /dev/null and b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.Ecore2CftTransformation.xtendbin differ diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.InputTrace.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.InputTrace.xtendbin new file mode 100644 index 00000000..378550ba Binary files /dev/null and b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.InputTrace.xtendbin differ diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.LookupHandler.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.LookupHandler.xtendbin new file mode 100644 index 00000000..0b0e534a Binary files /dev/null and b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.LookupHandler.xtendbin differ diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingHandler.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingHandler.xtendbin new file mode 100644 index 00000000..5e26d4e4 Binary files /dev/null and b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingHandler.xtendbin differ diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingQueries.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingQueries.xtendbin new file mode 100644 index 00000000..8fb7f13f Binary files /dev/null and b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.MappingQueries.xtendbin differ diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.gitignore b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.gitignore new file mode 100644 index 00000000..33bb70d4 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/.gitignore @@ -0,0 +1,9 @@ +/.ComponentFaultTreeTrace.java._trace +/.ComponentInstanceTrace.java._trace +/.InputTrace.java._trace +/.LookupHandler.java._trace +/.MappingHandler.java._trace +/.MappingQueries.java._trace +/.CftTransformation.java._trace +/.Ecore2CftTransformation.java._trace +/.ComponentNameGenerator.java._trace diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.java new file mode 100644 index 00000000..46e711d9 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentFaultTreeTrace.java @@ -0,0 +1,67 @@ +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.ComponentFaultTree; +import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Output; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentInstanceTrace; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentNameGenerator; +import java.util.Map; +import org.eclipse.emf.common.util.EList; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.xtend.lib.annotations.Accessors; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.eclipse.xtext.xbase.lib.Pure; + +@SuppressWarnings("all") +public class ComponentFaultTreeTrace { + @Accessors + private final ComponentFaultTree componentFaultTree = CftFactory.eINSTANCE.createComponentFaultTree(); + + private final ComponentNameGenerator nameGenerator = new ComponentNameGenerator(); + + private final Map componentInstancesMap = CollectionLiterals.newHashMap(); + + public ComponentInstanceTrace instantiateComponent(final IPatternMatch patternMatch, final ComponentDefinition componenDefinition) { + ComponentInstanceTrace _xblockexpression = null; + { + boolean _containsKey = this.componentInstancesMap.containsKey(patternMatch); + if (_containsKey) { + throw new IllegalArgumentException(("Already instantiated component for match: " + patternMatch)); + } + final ComponentInstanceTrace componentTrace = new ComponentInstanceTrace(this.componentFaultTree, componenDefinition, this.nameGenerator); + this.componentInstancesMap.put(patternMatch, componentTrace); + _xblockexpression = componentTrace; + } + return _xblockexpression; + } + + public void setTopLevel(final ComponentInstanceTrace trace) { + Output _topEvent = this.componentFaultTree.getTopEvent(); + boolean _tripleNotEquals = (_topEvent != null); + if (_tripleNotEquals) { + throw new IllegalArgumentException("Top level component already set"); + } + final EList outputs = trace.getOutputs(); + int _size = outputs.size(); + boolean _tripleNotEquals_1 = (_size != 1); + if (_tripleNotEquals_1) { + int _size_1 = outputs.size(); + String _plus = ("Top level component must have 1 output, got " + Integer.valueOf(_size_1)); + String _plus_1 = (_plus + + " instead"); + throw new IllegalArgumentException(_plus_1); + } + this.componentFaultTree.setTopEvent(IterableExtensions.head(outputs)); + } + + public ComponentInstanceTrace lookup(final IPatternMatch patternMatch) { + return this.componentInstancesMap.get(patternMatch); + } + + @Pure + public ComponentFaultTree getComponentFaultTree() { + return this.componentFaultTree; + } +} diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.java new file mode 100644 index 00000000..840f501d --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentInstanceTrace.java @@ -0,0 +1,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.Component; +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 hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentNameGenerator; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.InputTrace; +import java.util.Map; +import org.eclipse.emf.common.util.EList; + +@SuppressWarnings("all") +public class ComponentInstanceTrace { + private final Component componentInstance = CftFactory.eINSTANCE.createComponent(); + + private final Map inputEventsMap; + + private final Map outputEventsMap; + + protected ComponentInstanceTrace(final ComponentFaultTree faultTree, final ComponentDefinition componentDefinition, final ComponentNameGenerator nameGenerator) { + this.componentInstance.setComponentDefinition(componentDefinition); + this.componentInstance.setName(nameGenerator.nextName(componentDefinition)); + this.inputEventsMap = Maps.newHashMapWithExpectedSize(componentDefinition.getInputEvents().size()); + EList _inputEvents = componentDefinition.getInputEvents(); + for (final InputEvent inputEvent : _inputEvents) { + { + final InputTrace inputTrace = new InputTrace(this.componentInstance, inputEvent); + this.inputEventsMap.put(inputEvent, inputTrace); + } + } + this.outputEventsMap = Maps.newHashMapWithExpectedSize(componentDefinition.getOutputEvents().size()); + EList _outputEvents = componentDefinition.getOutputEvents(); + for (final EventDeclaration outputEvent : _outputEvents) { + { + final Output output = CftFactory.eINSTANCE.createOutput(); + output.setEventDeclaration(outputEvent); + EList _outputs = this.componentInstance.getOutputs(); + _outputs.add(output); + this.outputEventsMap.put(outputEvent, output); + } + } + EList _components = faultTree.getComponents(); + _components.add(this.componentInstance); + } + + public void assign(final EventDeclaration inputEvent, final ComponentInstanceTrace sourceComponent, final EventDeclaration outputEvent) { + final InputTrace inputTrace = this.inputEventsMap.get(inputEvent); + if ((inputTrace == null)) { + throw new IllegalArgumentException(("Unknown input: " + inputEvent)); + } + final Output output = sourceComponent.outputEventsMap.get(outputEvent); + if ((output == null)) { + throw new IllegalArgumentException(("Unknown output: " + outputEvent)); + } + inputTrace.assign(output); + } + + protected EList getOutputs() { + return this.componentInstance.getOutputs(); + } +} diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentNameGenerator.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentNameGenerator.java new file mode 100644 index 00000000..e7dca003 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/ComponentNameGenerator.java @@ -0,0 +1,29 @@ +package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft; + +import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition; +import java.util.Map; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; + +@SuppressWarnings("all") +public class ComponentNameGenerator { + private static final String DEFAULT_NAME = "__unnamed"; + + private final Map instanceCounts = CollectionLiterals.newHashMap(); + + public String nextName(final ComponentDefinition componentDefinition) { + String _xblockexpression = null; + { + final Integer instanceCount = this.instanceCounts.getOrDefault(componentDefinition, Integer.valueOf(0)); + this.instanceCounts.put(componentDefinition, Integer.valueOf(((instanceCount).intValue() + 1))); + String _elvis = null; + String _name = componentDefinition.getName(); + if (_name != null) { + _elvis = _name; + } else { + _elvis = ComponentNameGenerator.DEFAULT_NAME; + } + _xblockexpression = (_elvis + instanceCount); + } + return _xblockexpression; + } +} diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/Ecore2CftTransformation.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/Ecore2CftTransformation.java new file mode 100644 index 00000000..8b2d9d97 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/Ecore2CftTransformation.java @@ -0,0 +1,35 @@ +package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft; + +import com.google.common.collect.ImmutableList; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingDefinition; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.TransformationDefinition; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentFaultTreeTrace; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.MappingHandler; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.MappingQueries; +import java.util.List; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.xtext.xbase.lib.Functions.Function1; +import org.eclipse.xtext.xbase.lib.ListExtensions; + +@SuppressWarnings("all") +public class Ecore2CftTransformation { + private final List mappingHandlers; + + public Ecore2CftTransformation(final TransformationDefinition transformationDefinition, final ViatraQueryEngine viatraQueryEngine) { + final MappingQueries mappingQueries = new MappingQueries(transformationDefinition, viatraQueryEngine); + final Function1 _function = (MappingDefinition mappingDefinition) -> { + return new MappingHandler(mappingDefinition, mappingQueries); + }; + this.mappingHandlers = ImmutableList.copyOf(ListExtensions.map(transformationDefinition.getMappingDefinitions(), _function)); + } + + public void createComponentFaultTree() { + final ComponentFaultTreeTrace trace = new ComponentFaultTreeTrace(); + for (final MappingHandler handler : this.mappingHandlers) { + handler.instantiateComponents(trace); + } + for (final MappingHandler handler_1 : this.mappingHandlers) { + handler_1.instantiateConnections(trace); + } + } +} diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.java new file mode 100644 index 00000000..c12f2bae --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/InputTrace.java @@ -0,0 +1,35 @@ +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.Component; +import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Connection; +import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Input; +import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.InputEvent; +import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Output; +import java.util.Map; +import org.eclipse.emf.common.util.EList; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; + +@SuppressWarnings("all") +public class InputTrace { + private final Input input = CftFactory.eINSTANCE.createInput(); + + private final Map connectionsMap = CollectionLiterals.newHashMap(); + + protected InputTrace(final Component component, final InputEvent inputEvent) { + this.input.setInputEvent(inputEvent); + EList _inputs = component.getInputs(); + _inputs.add(this.input); + } + + public void assign(final Output output) { + final Connection connection = this.connectionsMap.get(output); + if ((connection == null)) { + final Connection newConnection = CftFactory.eINSTANCE.createConnection(); + newConnection.setOutput(output); + EList _incomingConnections = this.input.getIncomingConnections(); + _incomingConnections.add(newConnection); + this.connectionsMap.put(output, newConnection); + } + } +} diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/LookupHandler.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/LookupHandler.java new file mode 100644 index 00000000..e155aac8 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/LookupHandler.java @@ -0,0 +1,84 @@ +package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft; + +import com.google.common.base.Objects; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.LookupDefinition; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingDefinition; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingParameter; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentFaultTreeTrace; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentInstanceTrace; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.viatra.query.patternlanguage.emf.vql.Pattern; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; +import org.eclipse.xtext.xbase.lib.Conversions; + +@SuppressWarnings("all") +public class LookupHandler { + private final int[] argumentIndices; + + private final ViatraQueryMatcher lookedUpMatcher; + + public LookupHandler(final MappingDefinition mappingDefinition, final LookupDefinition lookupDefinition, final ViatraQueryMatcher lookedUpMatcher) { + EObject _eContainer = lookupDefinition.eContainer(); + boolean _notEquals = (!Objects.equal(_eContainer, mappingDefinition)); + if (_notEquals) { + throw new IllegalArgumentException("lookupDefinition must be contained in mappingDefinition"); + } + final int argumentCount = lookupDefinition.getArguments().size(); + int _length = ((Object[])Conversions.unwrapArray(lookedUpMatcher.getParameterNames(), Object.class)).length; + boolean _notEquals_1 = (argumentCount != _length); + if (_notEquals_1) { + MappingDefinition _mapping = lookupDefinition.getMapping(); + Pattern _pattern = null; + if (_mapping!=null) { + _pattern=_mapping.getPattern(); + } + String _name = null; + if (_pattern!=null) { + _name=_pattern.getName(); + } + String _plus = ("lookupDefinition (name: " + _name); + String _plus_1 = (_plus + + ") must have as many arguments as lookedUpMatcher (name: "); + String _patternName = lookedUpMatcher.getPatternName(); + String _plus_2 = (_plus_1 + _patternName); + String _plus_3 = (_plus_2 + ")"); + throw new IllegalArgumentException(_plus_3); + } + this.argumentIndices = new int[argumentCount]; + for (int i = 0; (i < argumentCount); i++) { + { + final MappingParameter argument = lookupDefinition.getArguments().get(i); + final int argumentIndex = mappingDefinition.getParameters().indexOf(argument); + this.argumentIndices[i] = argumentIndex; + } + } + this.lookedUpMatcher = lookedUpMatcher; + } + + public ComponentInstanceTrace lookupForMatch(final ComponentFaultTreeTrace faultTreeTrace, final IPatternMatch match) { + ComponentInstanceTrace _xblockexpression = null; + { + final IPatternMatch lookedUpMatch = this.createLookedUpMatch(match); + _xblockexpression = faultTreeTrace.lookup(lookedUpMatch); + } + return _xblockexpression; + } + + private IPatternMatch createLookedUpMatch(final IPatternMatch match) { + IPatternMatch _xblockexpression = null; + { + final IPatternMatch lookedUpMatch = this.lookedUpMatcher.newEmptyMatch(); + final int argumentCount = this.argumentIndices.length; + for (int i = 0; (i < argumentCount); i++) { + { + final int argumentIndex = this.argumentIndices[i]; + Object argumentValue = match.get(argumentIndex); + lookedUpMatch.set(i, argumentValue); + } + } + _xblockexpression = lookedUpMatch; + } + return _xblockexpression; + } +} diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingHandler.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingHandler.java new file mode 100644 index 00000000..41703289 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingHandler.java @@ -0,0 +1,146 @@ +package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Iterables; +import com.google.common.collect.Maps; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.Assignment; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.ComponentInstance; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.EventReference; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.LookupDefinition; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingDefinition; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.Variable; +import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentFaultTreeTrace; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.ComponentInstanceTrace; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.LookupHandler; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.MappingQueries; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; +import org.eclipse.emf.common.util.EList; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; +import org.eclipse.xtext.xbase.lib.Functions.Function1; +import org.eclipse.xtext.xbase.lib.IterableExtensions; + +@SuppressWarnings("all") +public class MappingHandler { + private final ViatraQueryMatcher matcher; + + private final MappingDefinition mappingDefinition; + + private final Map lookupHandlers; + + public MappingHandler(final MappingDefinition mappingDefinition, final MappingQueries mappingQueries) { + this.matcher = mappingQueries.getMatcher(mappingDefinition); + this.mappingDefinition = mappingDefinition; + final HashSet variables = CollectionLiterals.newHashSet(); + EList _assignments = mappingDefinition.getAssignments(); + for (final Assignment assignment : _assignments) { + { + Variable _component = assignment.getInput().getComponent(); + variables.add(_component); + Variable _component_1 = assignment.getOutput().getComponent(); + variables.add(_component_1); + } + } + final Function1 _function = (LookupDefinition it) -> { + return it; + }; + final Function1 _function_1 = (LookupDefinition lookupDefinition) -> { + return mappingQueries.createLookupHandler(mappingDefinition, lookupDefinition); + }; + this.lookupHandlers = ImmutableMap.copyOf(IterableExtensions.toMap(Iterables.filter(variables, LookupDefinition.class), _function, _function_1)); + } + + public void instantiateComponents(final ComponentFaultTreeTrace faultTreeTrace) { + boolean _hasComponentInstace = this.hasComponentInstace(); + boolean _not = (!_hasComponentInstace); + if (_not) { + return; + } + final Consumer _function = (IPatternMatch match) -> { + final ComponentInstanceTrace componentTrace = faultTreeTrace.instantiateComponent(match, this.getComponentDefinition()); + boolean _isTopLevel = this.isTopLevel(); + if (_isTopLevel) { + faultTreeTrace.setTopLevel(componentTrace); + } + }; + this.matcher.forEachMatch(_function); + } + + public void instantiateConnections(final ComponentFaultTreeTrace faultTreeTrace) { + boolean _hasConnections = this.hasConnections(); + boolean _not = (!_hasConnections); + if (_not) { + return; + } + final Consumer _function = (IPatternMatch match) -> { + final Map lookedUpComponents = this.lookupComponents(faultTreeTrace, match); + EList _assignments = this.mappingDefinition.getAssignments(); + for (final Assignment assignment : _assignments) { + { + final EventReference input = assignment.getInput(); + final ComponentInstanceTrace inputComponent = lookedUpComponents.get(input.getComponent()); + final EventReference output = assignment.getOutput(); + final ComponentInstanceTrace outputComponent = lookedUpComponents.get(output.getComponent()); + if (((inputComponent != null) && (outputComponent != null))) { + inputComponent.assign(input.getEvent(), outputComponent, output.getEvent()); + } + } + } + }; + this.matcher.forEachMatch(_function); + } + + private Map lookupComponents(final ComponentFaultTreeTrace faultTreeTrace, final IPatternMatch match) { + HashMap _xblockexpression = null; + { + int _size = this.lookupHandlers.size(); + int _plus = (_size + 1); + final HashMap lookedUpComponents = Maps.newHashMapWithExpectedSize(_plus); + boolean _hasComponentInstace = this.hasComponentInstace(); + if (_hasComponentInstace) { + final ComponentInstanceTrace componentInstance = faultTreeTrace.lookup(match); + lookedUpComponents.put(this.mappingDefinition.getComponentInstance(), componentInstance); + } + Set> _entrySet = this.lookupHandlers.entrySet(); + for (final Map.Entry pair : _entrySet) { + { + final ComponentInstanceTrace componentInstance_1 = pair.getValue().lookupForMatch(faultTreeTrace, match); + if ((componentInstance_1 != null)) { + lookedUpComponents.put(pair.getKey(), componentInstance_1); + } + } + } + _xblockexpression = lookedUpComponents; + } + return _xblockexpression; + } + + private ComponentDefinition getComponentDefinition() { + ComponentInstance _componentInstance = this.mappingDefinition.getComponentInstance(); + ComponentDefinition _componentType = null; + if (_componentInstance!=null) { + _componentType=_componentInstance.getComponentType(); + } + return _componentType; + } + + private boolean hasComponentInstace() { + ComponentDefinition _componentDefinition = this.getComponentDefinition(); + return (_componentDefinition != null); + } + + private boolean isTopLevel() { + return this.mappingDefinition.isTopLevel(); + } + + private boolean hasConnections() { + boolean _isEmpty = this.mappingDefinition.getAssignments().isEmpty(); + return (!_isEmpty); + } +} diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.java new file mode 100644 index 00000000..6147807e --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/ecore2cft/MappingQueries.java @@ -0,0 +1,60 @@ +package hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft; + +import com.google.common.collect.ImmutableMap; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.LookupDefinition; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingDefinition; +import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.TransformationDefinition; +import hu.bme.mit.inf.dslreasoner.faulttree.transformation.ecore2cft.LookupHandler; +import java.util.Map; +import org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder; +import org.eclipse.viatra.query.runtime.api.GenericQueryGroup; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; +import org.eclipse.xtext.xbase.lib.Conversions; +import org.eclipse.xtext.xbase.lib.Functions.Function1; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.eclipse.xtext.xbase.lib.MapExtensions; + +@SuppressWarnings("all") +public class MappingQueries { + private final Map> matchersMap; + + public MappingQueries(final TransformationDefinition transformationDefinition, final ViatraQueryEngine viatraQueryEngine) { + final SpecificationBuilder specificationBuilder = new SpecificationBuilder(); + final Function1 _function = (MappingDefinition it) -> { + return it; + }; + final Function1>> _function_1 = (MappingDefinition it) -> { + return specificationBuilder.getOrCreateSpecification(it.getPattern()); + }; + final Map>> querySpecificationsMap = IterableExtensions.>>toMap(transformationDefinition.getMappingDefinitions(), _function, _function_1); + GenericQueryGroup.of(((IQuerySpecification[])Conversions.unwrapArray(querySpecificationsMap.values(), IQuerySpecification.class))).prepare(viatraQueryEngine); + final Function1>, ViatraQueryMatcher> _function_2 = (IQuerySpecification> it) -> { + return it.getMatcher(viatraQueryEngine); + }; + this.matchersMap = ImmutableMap.>copyOf(MapExtensions.>, ViatraQueryMatcher>mapValues(querySpecificationsMap, _function_2)); + } + + public ViatraQueryMatcher getMatcher(final MappingDefinition mappingDefinition) { + ViatraQueryMatcher _xblockexpression = null; + { + final ViatraQueryMatcher matcher = this.matchersMap.get(mappingDefinition); + if ((matcher == null)) { + throw new IllegalArgumentException(("Unknown mapping definition: " + mappingDefinition)); + } + _xblockexpression = matcher; + } + return _xblockexpression; + } + + public LookupHandler createLookupHandler(final MappingDefinition mappingDefinition, final LookupDefinition lookupDefinition) { + LookupHandler _xblockexpression = null; + { + final ViatraQueryMatcher lookedUpMatcher = this.getMatcher(lookupDefinition.getMapping()); + _xblockexpression = new LookupHandler(mappingDefinition, lookupDefinition, lookedUpMatcher); + } + return _xblockexpression; + } +} -- cgit v1.2.3-54-g00ecf