diff --git a/src/fdtmc/FDTMC.java b/src/fdtmc/FDTMC.java index ef21282..b4aca37 100644 --- a/src/fdtmc/FDTMC.java +++ b/src/fdtmc/FDTMC.java @@ -329,7 +329,7 @@ private Map copyForInlining(FDTMC destination) { * @param fdtmc * @return */ - private Map inlineStates(FDTMC fdtmc) { + Map inlineStates(FDTMC fdtmc) { Map statesOldToNew = new HashMap(); for (State state: fdtmc.getStates()) { State newState = this.createState(); @@ -344,7 +344,7 @@ private Map inlineStates(FDTMC fdtmc) { * @param fdtmc * @param statesOldToNew */ - private void inlineTransitions(FDTMC fdtmc, Map statesOldToNew) { + void inlineTransitions(FDTMC fdtmc, Map statesOldToNew) { Set interfaceTransitions = fdtmc.getInterfaceTransitions(); for (Map.Entry> entry : fdtmc.getTransitions().entrySet()) { State newSource = statesOldToNew.get(entry.getKey()); @@ -391,34 +391,9 @@ private void inlineInterface(Interface iface, FDTMC fragment, Map } private void inlineInterfaceWithVariability(Interface iface, FDTMC fragment, Map statesMapping) { - Map fragmentStatesMapping = this.inlineStates(fragment); - this.inlineTransitions(fragment, fragmentStatesMapping); + InlineInterfaceWithVariability inlineInterfaceWithVariability = new InlineInterfaceWithVariability(this, iface, fragment, statesMapping); + inlineInterfaceWithVariability.compute(); - State initialInlined = iface.getInitial(); - State initialFragment = fragment.getInitialState(); - State successInlined = iface.getSuccess(); - State successFragment = fragment.getSuccessState(); - State errorInlined = iface.getError(); - State errorFragment = fragment.getErrorState(); - - this.createTransition(statesMapping.get(initialInlined), - fragmentStatesMapping.get(initialFragment), - "", - iface.getAbstractedId()); - this.createTransition(statesMapping.get(initialInlined), - statesMapping.get(successInlined), - "", - "1 - " + iface.getAbstractedId()); - this.createTransition(fragmentStatesMapping.get(successFragment), - statesMapping.get(successInlined), - "", - "1"); - if (errorFragment != null) { - this.createTransition(fragmentStatesMapping.get(errorFragment), - statesMapping.get(errorInlined), - "", - "1"); - } } private Set getInterfaceTransitions() { diff --git a/src/fdtmc/InlineInterfaceWithVariability.java b/src/fdtmc/InlineInterfaceWithVariability.java new file mode 100644 index 0000000..bfb02e4 --- /dev/null +++ b/src/fdtmc/InlineInterfaceWithVariability.java @@ -0,0 +1,57 @@ +package fdtmc; + +import java.util.Map; + +public class InlineInterfaceWithVariability { + private final FDTMC _fdtmc; + private Interface iface; + private FDTMC fragment; + private Map statesMapping; + private Map fragmentStatesMapping; + private State initialInlined; + private State initialFragment; + private State successInlined; + private State successFragment; + private State errorInlined ; + private State errorFragment; + + public InlineInterfaceWithVariability(FDTMC source, Interface ifaceArg, FDTMC fragmentArg, + Map statesMappingArg) { + _fdtmc = source; + iface = ifaceArg; + fragment = fragmentArg; + statesMapping = statesMappingArg; + + } + + void compute() { + fragmentStatesMapping = _fdtmc.inlineStates(fragment); + _fdtmc.inlineTransitions(fragment, fragmentStatesMapping); + + initialInlined = iface.getInitial(); + initialFragment = fragment.getInitialState(); + successInlined = iface.getSuccess(); + successFragment = fragment.getSuccessState(); + errorInlined = iface.getError(); + errorFragment = fragment.getErrorState(); + + _fdtmc.createTransition(statesMapping.get(initialInlined), + fragmentStatesMapping.get(initialFragment), + "", + iface.getAbstractedId()); + _fdtmc.createTransition(statesMapping.get(initialInlined), + statesMapping.get(successInlined), + "", + "1 - " + iface.getAbstractedId()); + _fdtmc.createTransition(fragmentStatesMapping.get(successFragment), + statesMapping.get(successInlined), + "", + "1"); + if (errorFragment != null) { + fdtmc.createTransition(fragmentStatesMapping.get(errorFragment), + statesMapping.get(errorInlined), + "", + "1"); + } + } +}