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 --- .../faulttree/model/util/CftExtensions.java | 69 ++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.model/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/model/util/CftExtensions.java (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.model/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/model/util/CftExtensions.java') diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.model/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/model/util/CftExtensions.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.model/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/model/util/CftExtensions.java new file mode 100644 index 00000000..dbc6b279 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.model/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/model/util/CftExtensions.java @@ -0,0 +1,69 @@ +package hu.bme.mit.inf.dslreasoner.faulttree.model.util; + +import com.google.common.base.Objects; +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.ModalElement; +import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.Modality; + +@SuppressWarnings("all") +public final class CftExtensions { + private CftExtensions() { + throw new IllegalStateException("This is a static utility class and should not be instantiated directly."); + } + + public static boolean isMoreConcreteThan(final Modality newModality, final Modality original) { + boolean _switchResult = false; + if (original != null) { + switch (original) { + case MAY: + _switchResult = (!Objects.equal(newModality, Modality.MAY)); + break; + case CURRENT: + _switchResult = Objects.equal(newModality, Modality.MUST); + break; + case MUST: + _switchResult = false; + break; + default: + break; + } + } + return _switchResult; + } + + public static boolean currentlyExists(final ModalElement element) { + Modality _exists = element.getExists(); + return (!Objects.equal(_exists, Modality.MAY)); + } + + public static boolean mustExist(final ModalElement element) { + Modality _exists = element.getExists(); + return Objects.equal(_exists, Modality.MUST); + } + + public static boolean appearsExactlyOnce(final Component componentInstance) { + return (CftExtensions.mustExist(componentInstance) && (!componentInstance.isMultipleAllowed())); + } + + /** + * Checks whether the connection and its target component are both currently present. + * + * A currently present connection without a present target component is a partial model error, + * so we throw an exception instead of returning false. + * + * @param connection The connection to check. + * @throws IllegalStateException When the target component is not currently present. + */ + public static boolean isCurrentlyConnected(final Connection connection) { + boolean _xblockexpression = false; + { + boolean _currentlyExists = CftExtensions.currentlyExists(connection.getOutput().getComponent()); + if (_currentlyExists) { + throw new IllegalStateException("Inconsistent partial model: current connection to a component that may not currently exist"); + } + _xblockexpression = CftExtensions.currentlyExists(connection); + } + return _xblockexpression; + } +} -- cgit v1.2.3-70-g09d2