FaultTreePanelTranslator.java 58.12 KiB
/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
*
* ludovic.apvrille AT enst.fr
*
* This software is a computer program whose purpose is to allow the
* edition of TURTLE analysis, design and deployment diagrams, to
* allow the generation of RT-LOTOS or Java code from this diagram,
* and at last to allow the analysis of formal validation traces
* obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
* from INRIA Rhone-Alpes.
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,
* modify and/ or redistribute the software under the terms of the CeCILL
* license as circulated by CEA, CNRS and INRIA at the following URL
* "http://www.cecill.info".
*
* As a counterpart to the access to the source code and rights to copy,
* modify and redistribute granted by the license, users are provided only
* with a limited warranty and the software's author, the holder of the
* economic rights, and the successive licensors have only limited
* liability.
*
* In this respect, the user's attention is drawn to the risks associated
* with loading, using, modifying and/or developing or reproducing the
* software by the user in light of its specific status of free software,
* that may mean that it is complicated to manipulate, and that also
* therefore means that it is reserved for developers and experienced
* professionals having in-depth computer knowledge. Users are therefore
* encouraged to load and test the software's suitability as regards their
* requirements in conditions enabling the security of their systems and/or
* data to be ensured and, more generally, to use and operate it in the
* same conditions as regards security.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL license and that you accept its terms.
*/
package ui;
import avatartranslator.*;
import faulttrees.*;
import translator.CheckingError;
import ui.ftd.*;
import java.util.LinkedList;
import java.util.List;
/**
* Class FaultTreePanelTranslator
* Creation: 24/01/2018
*
* @author Ludovic APVRILLE
*/
public class FaultTreePanelTranslator {
protected FaultTree at;
protected FaultTreePanel atp;
protected LinkedList<CheckingError> checkingErrors, warnings;
protected CorrespondanceTGElement listE; // usual list
protected LinkedList<TDiagramPanel> panels;
public FaultTreePanelTranslator(FaultTreePanel _atp) {
atp = _atp;
reinit();
}
public void reinit() {
checkingErrors = new LinkedList<CheckingError>();
warnings = new LinkedList<CheckingError>();
listE = new CorrespondanceTGElement();
panels = new LinkedList<TDiagramPanel>();
}
public LinkedList<CheckingError> getCheckingErrors() {
return checkingErrors;
}
public LinkedList<CheckingError> getWarnings() {
return warnings;
}
public CorrespondanceTGElement getCorrespondanceTGElement() {
return listE;
}
public FaultTree translateToFaultTreeDataStructure() {
at = new FaultTree("FaultTree", atp);
for (TDiagramPanel panel : atp.panels) {
if (panel instanceof FaultTreeDiagramPanel) {
translate((FaultTreeDiagramPanel) panel);
boolean b = at.checkSyntax();
if (!b) {
UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, at.errorOfFaultyElement);
ce.setTGComponent((TGComponent) (at.faultyElement.getReferenceObject()));
ce.setTDiagramPanel(panel);
addCheckingError(ce);
}
}
}
//TraceManager.addDev("AT=" + at.toString());
return at;
}
public void translate(FaultTreeDiagramPanel atdp) {
List<TGComponent> allComponents = atdp.getAllComponentList();
int nodeID = 0;
TGComponent father;
//Create Faults, nodes
for (TGComponent comp : allComponents) {
if (comp instanceof FTDFault) {
FTDFault atdatt = (FTDFault) comp;
Fault att;
String value = atdatt.getValue();
father = atdatt.getFather();
if ((father != null) && (father instanceof FTDBlock)) {
value = ((FTDBlock) father).getNodeName() + "__" + value;
}
att = new Fault(value, atdatt);
att.setRoot(atdatt.isRootFault());
att.setProbability(atdatt.getProbability());
att.setEnabled(atdatt.isEnabled());
at.addFault(att);
listE.addCor(att, comp);
}
if (comp instanceof FTDConstraint) {
FTDConstraint cons = (FTDConstraint) comp;
nodeID++;
//OR
if (cons.isOR()) {
ORNode ornode = new ORNode("OR__" + nodeID, cons);
at.addNode(ornode);
listE.addCor(ornode, comp);
//AND
} else if (cons.isAND()) {
ANDNode andnode = new ANDNode("AND__" + nodeID, cons);
at.addNode(andnode);
listE.addCor(andnode, comp);
//XOR
} else if (cons.isXOR()) {
XORNode xornode = new XORNode("XOR__" + nodeID, cons);
at.addNode(xornode);
listE.addCor(xornode, comp);
} else if (cons.isNOT()) {
NOTNode notnode = new NOTNode("NOT__" + nodeID, cons);
at.addNode(notnode);
listE.addCor(notnode, comp);
//SEQUENCE
} else if (cons.isSequence()) {
SequenceNode seqnode = new SequenceNode("SEQUENCE__" + nodeID, cons);
at.addNode(seqnode);
listE.addCor(seqnode, comp);
//BEFORE
} else if (cons.isBefore()) {
String eq = cons.getEquation();
int time;
try {
time = Integer.decode(eq).intValue();
BeforeNode befnode = new BeforeNode("BEFORE__" + nodeID, cons, time);
at.addNode(befnode);
listE.addCor(befnode, comp);
} catch (Exception e) {
UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Invalid time in before node");
ce.setTGComponent(comp);
ce.setTDiagramPanel(atdp);
addCheckingError(ce);
}
//AFTER
} else if (cons.isAfter()) {
String eq = cons.getEquation();
int time;
try {
time = Integer.decode(eq).intValue();
AfterNode aftnode = new AfterNode("AFTER__" + nodeID, cons, time);
at.addNode(aftnode);
listE.addCor(aftnode, comp);
} catch (Exception e) {
UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Invalid time in after node");
ce.setTGComponent(comp);
ce.setTDiagramPanel(atdp);
addCheckingError(ce);
}
} else if (cons.isVote()) {
VoteNode voteNode = new VoteNode("VOTE__" + nodeID, cons);
at.addNode(voteNode);
listE.addCor(voteNode, comp);
} else {
UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Invalid Fault node");
ce.setTGComponent(comp);
ce.setTDiagramPanel(atdp);
addCheckingError(ce);
}
}
}
// Making connections between nodes&Faults
TGComponent tgc1, tgc2;
for (TGComponent comp : allComponents) {
if (comp instanceof FTDFaultConnector) {
FTDFaultConnector con = (FTDFaultConnector) (comp);
tgc1 = atdp.getComponentToWhichBelongs(con.getTGConnectingPointP1());
tgc2 = atdp.getComponentToWhichBelongs(con.getTGConnectingPointP2());
if (((tgc1 instanceof FTDFault) || (tgc1 instanceof FTDConstraint)) &&
((tgc2 instanceof FTDFault) || (tgc2 instanceof FTDConstraint))) {
try {
// We must transpose this into Fault -> node or node -> Fault
// Fault -> Fault
if ((tgc1 instanceof FTDFault) && (tgc2 instanceof FTDFault)) {
// We link the two Faults with an "and" node
Fault at1 = (Fault) (listE.getObject(tgc1));
Fault at2 = (Fault) (listE.getObject(tgc2));
nodeID++;
ANDNode andnode = new ANDNode("ANDBetweenFaults__" + nodeID + "__" + at1.getName() + "__" + at2.getName(), tgc1);
at.addNode(andnode);
listE.addCor(andnode, comp);
at1.addDestinationNode(andnode);
at2.setOriginNode(andnode);
andnode.addInputFault(at1, new Integer("0"));
andnode.setResultingFault(at2);
// Fault -> node
} else if ((tgc1 instanceof FTDFault) && (tgc2 instanceof FTDConstraint)) {
Fault at1 = (Fault) (listE.getObject(tgc1));
FaultNode node1 = (FaultNode) (listE.getObject(tgc2));
at1.addDestinationNode(node1);
String val = comp.getValue().trim();
if (val.length() == 0) {
val = "0";
}
node1.addInputFault(at1, new Integer(val));
// Node -> Fault
} else if ((tgc1 instanceof FTDConstraint) && (tgc2 instanceof FTDFault)) {
Fault at1 = (Fault) (listE.getObject(tgc2));
FaultNode node1 = (FaultNode) (listE.getObject(tgc1));
at1.setOriginNode(node1);
if (node1.getResultingFault() != null) {
// Already a resulting Fault -> error
UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Too many resulting Faults");
ce.setTGComponent(tgc1);
ce.setTDiagramPanel(atdp);
addCheckingError(ce);
} else {
node1.setResultingFault(at1);
}
// Node -> Node
} else if ((tgc1 instanceof FTDConstraint) && (tgc2 instanceof FTDConstraint)) {
FaultNode node1 = (FaultNode) (listE.getObject(tgc1));
FaultNode node2 = (FaultNode) (listE.getObject(tgc2));
// Make fake Fault
Fault att = new Fault("Fault__from_" + node1.getName() + "_to_" + node2.getName(), tgc1);
att.setRoot(false);
at.addFault(att);
listE.addCor(att, comp);
att.setOriginNode(node1);
att.addDestinationNode(node2);
if (node1.getResultingFault() != null) {
// Already a resulting Fault -> error
UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Too many resulting Faults");
ce.setTGComponent(tgc1);
ce.setTDiagramPanel(atdp);
addCheckingError(ce);
} else {
node1.setResultingFault(att);
}
String val = comp.getValue().trim();
if (val.length() == 0) {
val = "0";
}
node2.addInputFault(att, new Integer(val));
}
} catch (Exception e) {
UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Badly formed connector");
ce.setTGComponent(comp);
ce.setTDiagramPanel(atdp);
addCheckingError(ce);
}
}
}
}
}
public AvatarSpecification generateAvatarSpec() {
AvatarSpecification as = new AvatarSpecification("spec from Fault trees", atp);
// One block per Faultnode to receive the Fault
// One block per Fault -> syncho
// One mast block with all channels declared at that level
AvatarBlock mainBlock = new AvatarBlock("MainBlock", as, null);
AvatarStartState ass = new AvatarStartState("StartStateOfMainBlock", null);
mainBlock.getStateMachine().setStartState(ass);
mainBlock.getStateMachine().addElement(ass);
as.addBlock(mainBlock);
// Declare all Faults
declareAllFaults(as, mainBlock);
// Make block for Faults
makeFaultBlocks(as, mainBlock);
// Make blocks for nodes
makeFaultNodeBlocks(as, mainBlock);
return as;
}
private void declareAllFaults(AvatarSpecification _as, AvatarBlock _main) {
AvatarRelation ar = new AvatarRelation("MainRelation", _main, _main, null);
ar.setAsynchronous(false);
ar.setPrivate(true);
ar.setBroadcast(false);
_as.addRelation(ar);
for (Fault Fault : at.getFaults()) {
avatartranslator.AvatarSignal makeFault = new avatartranslator.AvatarSignal("make__" + Fault.getName(), AvatarSignal.OUT, listE.getTG(Fault));
_main.addSignal(makeFault);
avatartranslator.AvatarSignal stopMakeFault = new avatartranslator.AvatarSignal("makeStop__" + Fault.getName(), AvatarSignal.IN, listE.getTG(Fault));
_main.addSignal(stopMakeFault);
avatartranslator.AvatarSignal acceptFault = new avatartranslator.AvatarSignal("accept__" + Fault.getName(), AvatarSignal.IN, listE.getTG(Fault));
_main.addSignal(acceptFault);
avatartranslator.AvatarSignal stopAcceptFault = new avatartranslator.AvatarSignal("acceptStop__" + Fault.getName(), AvatarSignal.OUT, listE.getTG(Fault));
_main.addSignal(stopAcceptFault);
ar.addSignals(makeFault, acceptFault);
ar.addSignals(stopMakeFault, stopAcceptFault);
// If Fault is not leaf: add the intermediate action to activate the intermediate leaf
if (!Fault.isLeaf()) {
avatartranslator.AvatarSignal nodeDone = new avatartranslator.AvatarSignal("nodeDone__" + Fault.getName(), AvatarSignal.OUT, listE.getTG(Fault));
_main.addSignal(nodeDone);
avatartranslator.AvatarSignal activateFault = new avatartranslator.AvatarSignal("activate__" + Fault.getName(), AvatarSignal.IN, listE.getTG(Fault));
_main.addSignal(activateFault);
ar.addSignals(nodeDone, activateFault);
}
}
}
private void makeFaultBlocks(AvatarSpecification _as, AvatarBlock _main) {
for (Fault Fault : at.getFaults()) {
if (Fault.isLeaf()) {
// Make the block
AvatarBlock ab = new AvatarBlock(Fault.getName(), _as, listE.getTG(Fault));
_as.addBlock(ab);
ab.setFather(_main);
avatartranslator.AvatarSignal sigFault = _main.getAvatarSignalWithName("make__" + Fault.getName());
avatartranslator.AvatarSignal stopFault = _main.getAvatarSignalWithName("makeStop__" + Fault.getName());
if ((sigFault != null) && (stopFault != null)) {
makeFaultBlockSMD(ab, sigFault, stopFault, Fault.isEnabled(), listE.getTG(Fault));
}
} else {
// Make the block
AvatarBlock ab = new AvatarBlock(Fault.getName(), _as, listE.getTG(Fault));
_as.addBlock(ab);
ab.setFather(_main);
avatartranslator.AvatarSignal sigFault = _main.getAvatarSignalWithName("make__" + Fault.getName());
avatartranslator.AvatarSignal stopFault = _main.getAvatarSignalWithName("makeStop__" + Fault.getName());
avatartranslator.AvatarSignal activateFault = _main.getAvatarSignalWithName("activate__" + Fault.getName());
makeIntermediateFaultBlockSMD(ab, sigFault, stopFault, activateFault, Fault.isEnabled(), listE.getTG(Fault));
// Intermediate Fault
}
}
}
private void makeFaultBlockSMD(AvatarBlock _ab, avatartranslator.AvatarSignal _sigFault, avatartranslator.AvatarSignal _sigStop, boolean isEnabled, Object _ref) {
Object _ref1 = _ref;
_ref = null;
boolean isCheckable = false;
boolean isChecked = false;
AvatarStateMachine asm = _ab.getStateMachine();
if (isEnabled) {
if (_ref1 instanceof TGComponent) {
isCheckable = ((TGComponent) (_ref1)).hasCheckableAccessibility();
}
if (_ref1 instanceof TGComponent) {
isChecked = ((TGComponent) (_ref1)).hasCheckedAccessibility();
}
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState performedState = new AvatarState("main", _ref1, isCheckable, isChecked);
performedState.setAsVerifiable(true);
AvatarState mainStop = new AvatarState("stop", _ref, false, false);
AvatarActionOnSignal getMake = new AvatarActionOnSignal("GettingFault", _sigFault, _ref1);
AvatarActionOnSignal getStop = new AvatarActionOnSignal("GettingStop", _sigStop, _ref);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(mainState);
asm.addElement(performedState);
asm.addElement(getMake);
asm.addElement(getStop);
AvatarTransition at = new AvatarTransition(_ab, "at1", _ref);
asm.addElement(at);
start.addNext(at);
at.addNext(mainState);
at = new AvatarTransition(_ab, "at2", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(getMake);
at = new AvatarTransition(_ab, "at3", _ref);
asm.addElement(at);
getMake.addNext(at);
at.addNext(performedState);
at = new AvatarTransition(_ab, "backToMain", _ref);
asm.addElement(at);
performedState.addNext(at);
at.addNext(mainState);
at = new AvatarTransition(_ab, "at4", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(getStop);
at = new AvatarTransition(_ab, "at5", _ref);
asm.addElement(at);
getStop.addNext(at);
at.addNext(mainStop);
} else {
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState mainStop = new AvatarState("stop", _ref, false, false);
AvatarActionOnSignal getStop = new AvatarActionOnSignal("GettingStop", _sigStop, _ref);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(mainState);
asm.addElement(getStop);
AvatarTransition at = new AvatarTransition(_ab, "at1", _ref);
asm.addElement(at);
start.addNext(at);
at.addNext(mainState);
at = new AvatarTransition(_ab, "at4", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(getStop);
at = new AvatarTransition(_ab, "at5", _ref);
asm.addElement(at);
getStop.addNext(at);
at.addNext(mainStop);
}
}
private void makeIntermediateFaultBlockSMD(AvatarBlock _ab, avatartranslator.AvatarSignal _sigFault, avatartranslator.AvatarSignal _sigStop, avatartranslator.AvatarSignal _sigActivate, boolean isEnabled, Object _ref) {
Object _ref1 = _ref;
_ref = null;
AvatarStateMachine asm = _ab.getStateMachine();
boolean isCheckable = false;
boolean isChecked = false;
if (isEnabled) {
if (_ref1 instanceof TGComponent) {
isCheckable = ((TGComponent) (_ref1)).hasCheckableAccessibility();
}
if (_ref1 instanceof TGComponent) {
isChecked = ((TGComponent) (_ref1)).hasCheckedAccessibility();
}
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState activateState = new AvatarState("activate", _ref, false, false);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState activatedState = new AvatarState("activated", _ref1, isCheckable, isChecked);
if (_ref1 instanceof FTDFault) {
activatedState.setAsVerifiable(true);
}
AvatarState performedState = new AvatarState("performed", _ref, false, false);
AvatarState mainStop = new AvatarState("stop", _ref, false, false);
AvatarState stopBeforeActivate = new AvatarState("stopBeforeActivate", _ref, false, false);
AvatarActionOnSignal getMake = new AvatarActionOnSignal("GettingFault", _sigFault, _ref1);
AvatarActionOnSignal getStop = new AvatarActionOnSignal("GettingStop", _sigStop, _ref);
AvatarActionOnSignal getStopInitial = new AvatarActionOnSignal("GettingInitialStop", _sigStop, _ref);
AvatarActionOnSignal getActivate = new AvatarActionOnSignal("GettingActivate", _sigActivate, _ref1);
AvatarActionOnSignal getActivateAfterStop = new AvatarActionOnSignal("GettingActivateAfterStop", _sigActivate, _ref1);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(activateState);
asm.addElement(activatedState);
asm.addElement(mainState);
asm.addElement(stopBeforeActivate);
asm.addElement(performedState);
asm.addElement(getMake);
asm.addElement(getStop);
asm.addElement(getStopInitial);
asm.addElement(getActivate);
asm.addElement(getActivateAfterStop);
AvatarTransition at = new AvatarTransition(_ab, "at1", _ref);
asm.addElement(at);
start.addNext(at);
at.addNext(activateState);
at = new AvatarTransition(_ab, "at1_act", _ref);
asm.addElement(at);
activateState.addNext(at);
at.addNext(getActivate);
at = new AvatarTransition(_ab, "at1_performed", _ref);
asm.addElement(at);
getActivate.addNext(at);
at.addNext(activatedState);
at = new AvatarTransition(_ab, "at2_main", _ref);
asm.addElement(at);
activatedState.addNext(at);
at.addNext(mainState);
at.setHidden(true);
at = new AvatarTransition(_ab, "at2", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(getMake);
at = new AvatarTransition(_ab, "at3", _ref);
asm.addElement(at);
getMake.addNext(at);
at.addNext(performedState);
at = new AvatarTransition(_ab, "backToMain", _ref);
asm.addElement(at);
performedState.addNext(at);
at.addNext(mainState);
at = new AvatarTransition(_ab, "at4", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(getStop);
at = new AvatarTransition(_ab, "at5", _ref);
asm.addElement(at);
getStop.addNext(at);
at.addNext(mainStop);
// Stop before activate
at = new AvatarTransition(_ab, "at6", _ref);
asm.addElement(at);
activateState.addNext(at);
at.addNext(getStopInitial);
at = new AvatarTransition(_ab, "at7", _ref);
asm.addElement(at);
getStopInitial.addNext(at);
at.addNext(stopBeforeActivate);
at = new AvatarTransition(_ab, "at8", _ref);
asm.addElement(at);
stopBeforeActivate.addNext(at);
at.addNext(getActivateAfterStop);
at = new AvatarTransition(_ab, "at9", _ref);
asm.addElement(at);
getActivateAfterStop.addNext(at);
at.addNext(mainStop);
} else {
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState activateState = new AvatarState("activate", _ref, false, false);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState activatedState = new AvatarState("main", _ref1, isCheckable, isChecked);
AvatarState mainStop = new AvatarState("stop", _ref, false, false);
AvatarState stopBeforeActivate = new AvatarState("stopBeforeActivate", _ref, false, false);
AvatarActionOnSignal getStop = new AvatarActionOnSignal("GettingStop", _sigStop, _ref);
AvatarActionOnSignal getStopInitial = new AvatarActionOnSignal("GettingInitialStop", _sigStop, _ref);
AvatarActionOnSignal getActivate = new AvatarActionOnSignal("GettingActivate", _sigActivate, _ref1);
AvatarActionOnSignal getActivateAfterStop = new AvatarActionOnSignal("GettingActivateAfterStop", _sigActivate, _ref1);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(activateState);
asm.addElement(activatedState);
asm.addElement(mainState);
asm.addElement(stopBeforeActivate);
asm.addElement(getStop);
asm.addElement(getStopInitial);
asm.addElement(getActivate);
asm.addElement(getActivateAfterStop);
AvatarTransition at = new AvatarTransition(_ab, "at1", _ref);
asm.addElement(at);
start.addNext(at);
at.addNext(activateState);
at = new AvatarTransition(_ab, "at1_act", _ref);
asm.addElement(at);
activateState.addNext(at);
at.addNext(getActivate);
at = new AvatarTransition(_ab, "at1_performed", _ref);
asm.addElement(at);
getActivate.addNext(at);
at.addNext(activatedState);
at = new AvatarTransition(_ab, "at2_main", _ref);
asm.addElement(at);
activatedState.addNext(at);
at.addNext(mainState);
at.setHidden(true);
at = new AvatarTransition(_ab, "at4", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(getStop);
at = new AvatarTransition(_ab, "at5", _ref);
asm.addElement(at);
getStop.addNext(at);
at.addNext(mainStop);
// Stop before activate
at = new AvatarTransition(_ab, "at6", _ref);
asm.addElement(at);
activateState.addNext(at);
at.addNext(getStopInitial);
at = new AvatarTransition(_ab, "at7", _ref);
asm.addElement(at);
getStopInitial.addNext(at);
at.addNext(stopBeforeActivate);
at = new AvatarTransition(_ab, "at8", _ref);
asm.addElement(at);
stopBeforeActivate.addNext(at);
at.addNext(getActivateAfterStop);
at = new AvatarTransition(_ab, "at9", _ref);
asm.addElement(at);
getActivateAfterStop.addNext(at);
at.addNext(mainStop);
}
}
private void makeFaultNodeBlocks(AvatarSpecification _as, AvatarBlock _main) {
//Fault att;
for (FaultNode node : at.getFaultNodes()) {
if (node.isWellFormed()) {
// Make the block
AvatarBlock ab = new AvatarBlock(node.getName(), _as, listE.getTG(node));
_as.addBlock(ab);
ab.setFather(_main);
if (node instanceof ANDNode) {
makeANDNode(_as, _main, ab, (ANDNode) node, listE.getTG(node));
} else if (node instanceof ORNode) {
makeORNode(_as, _main, ab, (ORNode) node, listE.getTG(node));
} else if (node instanceof XORNode) {
makeXORNode(_as, _main, ab, (XORNode) node, listE.getTG(node));
} else if (node instanceof SequenceNode) {
makeSequenceNode(_as, _main, ab, (SequenceNode) node, listE.getTG(node));
} else if (node instanceof AfterNode) {
makeAfterNode(_as, _main, ab, (AfterNode) node, listE.getTG(node));
} else if (node instanceof BeforeNode) {
makeBeforeNode(_as, _main, ab, (BeforeNode) node, listE.getTG(node));
} else if (node instanceof VoteNode) {
makeVoteNode(_as, _main, ab, (VoteNode) node, listE.getTG(node));
} else if (node instanceof NOTNode) {
makeNOTNode(_as, _main, ab, (NOTNode) node, listE.getTG(node));
}
}
}
}
private void makeANDNode(AvatarSpecification _as, AvatarBlock _main, AvatarBlock _ab, ANDNode _node, Object _ref) {
Object _ref1 = _ref;
_ref = null;
AvatarStateMachine asm = _ab.getStateMachine();
// Basic machine
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState endState = new AvatarState("end", _ref, false, false);
AvatarState overallState = new AvatarState("overall", _ref, false, false);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(mainState);
asm.addElement(endState);
asm.addElement(overallState);
AvatarTransition atF = new AvatarTransition(_ab, "at1", _ref);
asm.addElement(atF);
start.addNext(atF);
atF.addNext(mainState);
atF.setHidden(true);
String finalGuard = "";
for (Fault att : _node.getInputFaults()) {
AvatarAttribute aa = new AvatarAttribute(att.getName() + "__performed", AvatarType.BOOLEAN, _ab, _ref);
if (finalGuard.length() == 0) {
finalGuard += "(" + att.getName() + "__performed == true)";
} else {
finalGuard += " && (" + att.getName() + "__performed == true)";
}
_ab.addAttribute(aa);
atF.addAction(att.getName() + "__performed = false");
avatartranslator.AvatarSignal sigAtt = _main.getAvatarSignalWithName("accept__" + att.getName());
AvatarActionOnSignal acceptFault = new AvatarActionOnSignal("AcceptFault", sigAtt, _ref1);
asm.addElement(acceptFault);
AvatarTransition at = new AvatarTransition(_ab, "at_toInputFault", _ref);
at.setProbability(att.getProbability());
asm.addElement(at);
mainState.addNext(at);
at.addNext(acceptFault);
at.setGuard(new AvatarSimpleGuardDuo(aa, AvatarConstant.FALSE, "=="));
at = new AvatarTransition(_ab, "at_fromInputFault", _ref);
at.addAction(att.getName() + "__performed = true");
asm.addElement(at);
acceptFault.addNext(at);
at.addNext(mainState);
at.setHidden(true);
}
// Adding resulting Fault
AvatarTransition at = new AvatarTransition(_ab, "at_toEnd", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(endState);
at.setGuard("[" + finalGuard + "]");
Fault resulting = _node.getResultingFault();
avatartranslator.AvatarSignal sigFault = _main.getAvatarSignalWithName("nodeDone__" + resulting.getName());
AvatarActionOnSignal resultingFault = new AvatarActionOnSignal("ResultingFault", sigFault, _ref1);
asm.addElement(resultingFault);
at = new AvatarTransition(_ab, "at_toResultingFault", _ref);
asm.addElement(at);
endState.addNext(at);
at.addNext(resultingFault);
at = new AvatarTransition(_ab, "at_Overall", _ref);
asm.addElement(at);
resultingFault.addNext(at);
at.addNext(overallState);
}
private void makeNOTNode(AvatarSpecification _as, AvatarBlock _main, AvatarBlock _ab, NOTNode _node, Object _ref) {
Object _ref1 = _ref;
_ref = null;
AvatarStateMachine asm = _ab.getStateMachine();
// Basic machine
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState endState = new AvatarState("end", _ref, false, false);
AvatarState overallState = new AvatarState("overall", _ref, false, false);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(mainState);
asm.addElement(endState);
asm.addElement(overallState);
AvatarTransition atF = new AvatarTransition(_ab, "at1", _ref);
asm.addElement(atF);
start.addNext(atF);
atF.addNext(mainState);
atF.setHidden(true);
String finalGuard = "";
for (Fault att : _node.getInputFaults()) {
AvatarAttribute aa = new AvatarAttribute(att.getName() + "__performed", AvatarType.BOOLEAN, _ab, _ref);
if (finalGuard.length() == 0) {
finalGuard += "(" + att.getName() + "__performed == false)";
} else {
finalGuard += " && (" + att.getName() + "__performed == false)";
}
_ab.addAttribute(aa);
atF.addAction(att.getName() + "__performed = false");
avatartranslator.AvatarSignal sigAtt = _main.getAvatarSignalWithName("accept__" + att.getName());
AvatarActionOnSignal acceptFault = new AvatarActionOnSignal("AcceptFault", sigAtt, _ref1);
asm.addElement(acceptFault);
AvatarTransition at = new AvatarTransition(_ab, "at_toInputFault", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(acceptFault);
at.setGuard(new AvatarSimpleGuardDuo(aa, AvatarConstant.FALSE, "=="));
at = new AvatarTransition(_ab, "at_fromInputFault", _ref);
at.addAction(att.getName() + "__performed = true");
asm.addElement(at);
acceptFault.addNext(at);
at.addNext(mainState);
at.setHidden(true);
}
// Adding resulting Fault
AvatarTransition at = new AvatarTransition(_ab, "at_toEnd", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(endState);
at.setGuard("[" + finalGuard + "]");
Fault resulting = _node.getResultingFault();
avatartranslator.AvatarSignal sigFault = _main.getAvatarSignalWithName("nodeDone__" + resulting.getName());
AvatarActionOnSignal resultingFault = new AvatarActionOnSignal("ResultingFault", sigFault, _ref1);
asm.addElement(resultingFault);
at = new AvatarTransition(_ab, "at_toResultingFault", _ref);
asm.addElement(at);
endState.addNext(at);
at.addNext(resultingFault);
at = new AvatarTransition(_ab, "at_Overall", _ref);
asm.addElement(at);
resultingFault.addNext(at);
at.addNext(overallState);
}
private void makeVoteNode(AvatarSpecification _as, AvatarBlock _main, AvatarBlock _ab, VoteNode _node, Object _ref) {
Object _ref1 = _ref;
_ref = null;
AvatarStateMachine asm = _ab.getStateMachine();
// Basic machine
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState endState = new AvatarState("end", _ref, false, false);
AvatarState overallState = new AvatarState("overall", _ref, false, false);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(mainState);
asm.addElement(endState);
asm.addElement(overallState);
AvatarTransition atF = new AvatarTransition(_ab, "at1", _ref);
asm.addElement(atF);
start.addNext(atF);
atF.addNext(mainState);
atF.setHidden(true);
String finalGuard = "";
AvatarAttribute aCount = new AvatarAttribute("__nbOfPerformed", AvatarType.INTEGER, _ab, _ref);
_ab.addAttribute(aCount);
double nbOfVoters = _node.getInputFaults().size() / 2.0;
int thres = (int) (Math.ceil(nbOfVoters));
finalGuard = "( __nbOfPerformed >= " + thres + ")";
for (Fault att : _node.getInputFaults()) {
AvatarAttribute aa = new AvatarAttribute(att.getName() + "__performed", AvatarType.BOOLEAN, _ab, _ref);
/*if (finalGuard.length() == 0) {
finalGuard += "(" + att.getName() + "__performed == true)";
} else {
finalGuard += " && (" + att.getName() + "__performed == true)";
}*/
_ab.addAttribute(aa);
atF.addAction(att.getName() + "__performed = false");
avatartranslator.AvatarSignal sigAtt = _main.getAvatarSignalWithName("accept__" + att.getName());
AvatarActionOnSignal acceptFault = new AvatarActionOnSignal("AcceptFault", sigAtt, _ref1);
asm.addElement(acceptFault);
AvatarTransition at = new AvatarTransition(_ab, "at_toInputFault", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(acceptFault);
at.setGuard(new AvatarSimpleGuardDuo(aa, AvatarConstant.FALSE, "=="));
at = new AvatarTransition(_ab, "at_fromInputFault", _ref);
at.addAction(att.getName() + "__performed = true");
at.addAction(aCount.getName() + " = " + aCount.getName() + " + 1" );
asm.addElement(at);
acceptFault.addNext(at);
at.addNext(mainState);
at.setHidden(true);
}
// Adding resulting Fault
AvatarTransition at = new AvatarTransition(_ab, "at_toEnd", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(endState);
at.setGuard("[" + finalGuard + "]");
Fault resulting = _node.getResultingFault();
avatartranslator.AvatarSignal sigFault = _main.getAvatarSignalWithName("nodeDone__" + resulting.getName());
AvatarActionOnSignal resultingFault = new AvatarActionOnSignal("ResultingFault", sigFault, _ref1);
asm.addElement(resultingFault);
at = new AvatarTransition(_ab, "at_toResultingFault", _ref);
asm.addElement(at);
endState.addNext(at);
at.addNext(resultingFault);
at = new AvatarTransition(_ab, "at_Overall", _ref);
asm.addElement(at);
resultingFault.addNext(at);
at.addNext(overallState);
}
private void makeORNode(AvatarSpecification _as, AvatarBlock _main, AvatarBlock _ab, ORNode _node, Object _ref) {
Object _ref1 = _ref;
_ref = null;
AvatarStateMachine asm = _ab.getStateMachine();
// Basic machine
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState endState = new AvatarState("end", _ref, false, false);
AvatarState overallState = new AvatarState("overall", _ref, false, false);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(mainState);
asm.addElement(endState);
asm.addElement(overallState);
AvatarTransition atF = new AvatarTransition(_ab, "at1", _ref);
asm.addElement(atF);
start.addNext(atF);
atF.addNext(mainState);
AvatarGuard finalGuard = null;
for (Fault att : _node.getInputFaults()) {
AvatarAttribute aa = new AvatarAttribute(att.getName() + "__performed", AvatarType.BOOLEAN, _ab, _ref);
if (finalGuard == null)
finalGuard = new AvatarSimpleGuardDuo(aa, AvatarConstant.TRUE, "==");
else
finalGuard = AvatarGuard.addGuard(finalGuard, new AvatarSimpleGuardDuo(aa, AvatarConstant.TRUE, "=="), "||");
_ab.addAttribute(aa);
atF.addAction(new AvatarActionAssignment(aa, AvatarConstant.FALSE));
// From Main
avatartranslator.AvatarSignal sigAtt = _main.getAvatarSignalWithName("accept__" + att.getName());
AvatarActionOnSignal acceptFault = new AvatarActionOnSignal("AcceptFault", sigAtt, _ref1);
asm.addElement(acceptFault);
AvatarTransition at = new AvatarTransition(_ab, "at_toInputFault", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(acceptFault);
at.setGuard(new AvatarSimpleGuardDuo(aa, AvatarConstant.FALSE, "=="));
at = new AvatarTransition(_ab, "at_fromInputFault", _ref);
at.addAction(new AvatarActionAssignment(aa, AvatarConstant.TRUE));
asm.addElement(at);
acceptFault.addNext(at);
at.addNext(mainState);
// Link from End
acceptFault = new AvatarActionOnSignal("AcceptFault", sigAtt, _ref1);
asm.addElement(acceptFault);
at = new AvatarTransition(_ab, "at_toInputFault", _ref);
asm.addElement(at);
endState.addNext(at);
at.addNext(acceptFault);
at.setGuard(new AvatarSimpleGuardDuo(aa, AvatarConstant.FALSE, "=="));
at = new AvatarTransition(_ab, "at_fromInputFault", _ref);
at.addAction(new AvatarActionAssignment(aa, AvatarConstant.TRUE));
asm.addElement(at);
acceptFault.addNext(at);
at.addNext(endState);
// Link from Overall
acceptFault = new AvatarActionOnSignal("AcceptFault", sigAtt, _ref1);
asm.addElement(acceptFault);
at = new AvatarTransition(_ab, "at_toInputFault", _ref);
asm.addElement(at);
overallState.addNext(at);
at.addNext(acceptFault);
at.setGuard(new AvatarSimpleGuardDuo(aa, AvatarConstant.FALSE, "=="));
at = new AvatarTransition(_ab, "at_fromInputFault", _ref);
at.addAction(new AvatarActionAssignment(aa, AvatarConstant.TRUE));
asm.addElement(at);
acceptFault.addNext(at);
at.addNext(overallState);
}
// Adding resulting Fault
AvatarTransition at = new AvatarTransition(_ab, "at_toEnd", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(endState);
at.setGuard(finalGuard);
Fault resulting = _node.getResultingFault();
avatartranslator.AvatarSignal sigFault = _main.getAvatarSignalWithName("nodeDone__" + resulting.getName());
AvatarActionOnSignal resultingFault = new AvatarActionOnSignal("ResultingFault", sigFault, _ref1);
asm.addElement(resultingFault);
at = new AvatarTransition(_ab, "at_toResultingFault", _ref);
asm.addElement(at);
endState.addNext(at);
at.addNext(resultingFault);
at = new AvatarTransition(_ab, "at_Overall", _ref);
asm.addElement(at);
resultingFault.addNext(at);
at.addNext(overallState);
}
private void makeXORNode(AvatarSpecification _as, AvatarBlock _main, AvatarBlock _ab, XORNode _node, Object _ref) {
Object _ref1 = _ref;
_ref = null;
AvatarStateMachine asm = _ab.getStateMachine();
// Basic machine
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState stoppingAll = new AvatarState("stoppingAll", _ref, false, false);
AvatarState endState = new AvatarState("end", _ref, false, false);
AvatarState overallState = new AvatarState("overall", _ref, false, false);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(mainState);
asm.addElement(endState);
asm.addElement(overallState);
asm.addElement(stoppingAll);
AvatarTransition atF = new AvatarTransition(_ab, "at1", _ref);
atF.setHidden(true);
asm.addElement(atF);
start.addNext(atF);
atF.addNext(mainState);
AvatarAttribute oneDone = new AvatarAttribute("oneDone", AvatarType.BOOLEAN, _ab, _ref);
AvatarGuard finalGuard = new AvatarSimpleGuardDuo(oneDone, AvatarConstant.TRUE, "==");
AvatarGuard toEndGuard = null;
_ab.addAttribute(oneDone);
atF.addAction("oneDone = false");
for (Fault att : _node.getInputFaults()) {
AvatarAttribute aa = new AvatarAttribute(att.getName() + "__performed", AvatarType.BOOLEAN, _ab, _ref);
_ab.addAttribute(aa);
atF.addAction(new AvatarActionAssignment(aa, AvatarConstant.FALSE));
if (toEndGuard == null)
toEndGuard = new AvatarSimpleGuardDuo(aa, AvatarConstant.TRUE, "==");
else
toEndGuard = AvatarGuard.addGuard(toEndGuard, new AvatarSimpleGuardDuo(aa, AvatarConstant.TRUE, "=="), "&&");
// From Main
avatartranslator.AvatarSignal sigAtt = _main.getAvatarSignalWithName("accept__" + att.getName());
AvatarActionOnSignal acceptFault = new AvatarActionOnSignal("AcceptFault", sigAtt, _ref1);
asm.addElement(acceptFault);
AvatarTransition at = new AvatarTransition(_ab, "at_toInputFault", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(acceptFault);
at.setGuard(new AvatarBinaryGuard(
new AvatarSimpleGuardDuo(aa, AvatarConstant.FALSE, "=="),
new AvatarSimpleGuardDuo(oneDone, AvatarConstant.FALSE, "=="),
"&&"));
at = new AvatarTransition(_ab, "at_fromInputFault", _ref);
at.addAction(new AvatarActionAssignment(aa, AvatarConstant.TRUE));
at.setHidden(true);
at.addAction(new AvatarActionAssignment(oneDone, AvatarConstant.TRUE));
asm.addElement(at);
acceptFault.addNext(at);
at.addNext(mainState);
// Link from stoppingAll
// if (att.isLeaf()) {
// Leaf Fault -> must make a stop
sigAtt = _main.getAvatarSignalWithName("acceptStop__" + att.getName());
acceptFault = new AvatarActionOnSignal("StopFault", sigAtt, _ref1);
asm.addElement(acceptFault);
at = new AvatarTransition(_ab, "at_toInputFault_leaf", _ref);
asm.addElement(at);
stoppingAll.addNext(at);
at.addNext(acceptFault);
at.setGuard(new AvatarSimpleGuardDuo(aa, AvatarConstant.FALSE, "=="));
at = new AvatarTransition(_ab, "at_fromInputFault", _ref);
at.addAction(new AvatarActionAssignment(aa, AvatarConstant.TRUE));
at.setHidden(true);
asm.addElement(at);
acceptFault.addNext(at);
at.addNext(stoppingAll);
// } else {
// Generated Fault-> must set performed to true.
/* at = new AvatarTransition("at_toInputFault", _ref);
stoppingAll.addNext(at);
asm.addElement(at);
at.addNext(stoppingAll);
at.setGuard("["+att.getName() + "__performed == false]");
at.addAction(att.getName() + "__performed = true");
at.setHidden(true);*/
// }
}
// Adding link to stopping all
AvatarTransition at = new AvatarTransition(_ab, "at_toStoppingAll", _ref);
asm.addElement(at);
mainState.addNext(at);
at.addNext(stoppingAll);
at.setGuard(finalGuard);
// Adding resulting Fault
at = new AvatarTransition(_ab, "at_toEnd", _ref);
asm.addElement(at);
stoppingAll.addNext(at);
at.addNext(endState);
at.setGuard(toEndGuard);
Fault resulting = _node.getResultingFault();
avatartranslator.AvatarSignal sigFault = _main.getAvatarSignalWithName("nodeDone__" + resulting.getName());
AvatarActionOnSignal resultingFault = new AvatarActionOnSignal("ResultingFault", sigFault, _ref1);
asm.addElement(resultingFault);
at = new AvatarTransition(_ab, "at_toResultingFault", _ref);
asm.addElement(at);
endState.addNext(at);
at.addNext(resultingFault);
at = new AvatarTransition(_ab, "at_Overall", _ref);
asm.addElement(at);
resultingFault.addNext(at);
at.addNext(overallState);
}
private void makeSequenceNode(AvatarSpecification _as, AvatarBlock _main, AvatarBlock _ab, SequenceNode _node, Object _ref) {
Object _ref1 = _ref;
_ref = null;
AvatarStateMachine asm = _ab.getStateMachine();
_node.orderFaults();
// Basic machine
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState endState = new AvatarState("end", _ref, false, false);
AvatarState overallState = new AvatarState("overall", _ref, false, false);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(mainState);
asm.addElement(endState);
asm.addElement(overallState);
AvatarTransition at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
start.addNext(at);
at.addNext(mainState);
AvatarState previousState = mainState;
// Chaining accept Faults
for (Fault att : _node.getInputFaults()) {
AvatarState state = new AvatarState("state__" + att.getName(), _ref);
asm.addElement(state);
avatartranslator.AvatarSignal sigAtt = _main.getAvatarSignalWithName("accept__" + att.getName());
AvatarActionOnSignal acceptFault = new AvatarActionOnSignal("AcceptFault", sigAtt, _ref1);
asm.addElement(acceptFault);
at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
previousState.addNext(at);
at.addNext(acceptFault);
at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
acceptFault.addNext(at);
at.addNext(state);
previousState = state;
}
at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
previousState.addNext(at);
at.addNext(endState);
// Performing resulting Fault
Fault resulting = _node.getResultingFault();
avatartranslator.AvatarSignal sigFault = _main.getAvatarSignalWithName("nodeDone__" + resulting.getName());
AvatarActionOnSignal resultingFault = new AvatarActionOnSignal("ResultingFault", sigFault, _ref1);
asm.addElement(resultingFault);
at = new AvatarTransition(_ab, "at_toResultingFault", _ref);
asm.addElement(at);
endState.addNext(at);
at.addNext(resultingFault);
at = new AvatarTransition(_ab, "at_Overall", _ref);
asm.addElement(at);
resultingFault.addNext(at);
at.addNext(overallState);
}
private void makeAfterNode(AvatarSpecification _as, AvatarBlock _main, AvatarBlock _ab, AfterNode _node, Object _ref) {
Object _ref1 = _ref;
_ref = null;
AvatarStateMachine asm = _ab.getStateMachine();
_node.orderFaults();
// Basic machine
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState endState = new AvatarState("end", _ref, false, false);
AvatarState overallState = new AvatarState("overall", _ref, false, false);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(mainState);
asm.addElement(endState);
asm.addElement(overallState);
AvatarTransition at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
start.addNext(at);
at.addNext(mainState);
AvatarState previousState = mainState;
// Chaining accept Faults
int cpt = 0;
for (Fault att : _node.getInputFaults()) {
AvatarState state = new AvatarState("state__" + att.getName(), _ref);
asm.addElement(state);
avatartranslator.AvatarSignal sigAtt = _main.getAvatarSignalWithName("accept__" + att.getName());
AvatarActionOnSignal acceptFault = new AvatarActionOnSignal("AcceptFault", sigAtt, _ref1);
asm.addElement(acceptFault);
at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
previousState.addNext(at);
at.addNext(acceptFault);
if (cpt > 0) {
at.setDelays("" + _node.getTime(), "" + _node.getTime());
}
at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
acceptFault.addNext(at);
at.addNext(state);
previousState = state;
cpt++;
}
at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
previousState.addNext(at);
at.addNext(endState);
// Performing resulting Fault
Fault resulting = _node.getResultingFault();
avatartranslator.AvatarSignal sigFault = _main.getAvatarSignalWithName("nodeDone__" + resulting.getName());
AvatarActionOnSignal resultingFault = new AvatarActionOnSignal("ResultingFault", sigFault, _ref1);
asm.addElement(resultingFault);
at = new AvatarTransition(_ab, "at_toResultingFault", _ref);
asm.addElement(at);
endState.addNext(at);
at.addNext(resultingFault);
at = new AvatarTransition(_ab, "at_Overall", _ref);
asm.addElement(at);
resultingFault.addNext(at);
at.addNext(overallState);
}
private void makeBeforeNode(AvatarSpecification _as, AvatarBlock _main, AvatarBlock _ab, BeforeNode _node, Object _ref) {
Object _ref1 = _ref;
_ref = null;
AvatarStateMachine asm = _ab.getStateMachine();
_node.orderFaults();
// Basic machine
AvatarStartState start = new AvatarStartState("start", _ref);
AvatarState mainState = new AvatarState("main", _ref, false, false);
AvatarState endState = new AvatarState("end", _ref, false, false);
AvatarState overallState = new AvatarState("overall", _ref, false, false);
AvatarState timeout = new AvatarState("timeout", _ref, false, false);
asm.addElement(start);
asm.setStartState(start);
asm.addElement(mainState);
asm.addElement(endState);
asm.addElement(overallState);
asm.addElement(timeout);
AvatarTransition at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
start.addNext(at);
at.addNext(mainState);
AvatarState previousState = mainState;
// Chaining accept Faults
int cpt = 0;
for (Fault att : _node.getInputFaults()) {
AvatarState state = new AvatarState("state__" + att.getName(), _ref);
asm.addElement(state);
avatartranslator.AvatarSignal sigAtt = _main.getAvatarSignalWithName("accept__" + att.getName());
AvatarActionOnSignal acceptFault = new AvatarActionOnSignal("AcceptFault", sigAtt, _ref1);
asm.addElement(acceptFault);
at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
previousState.addNext(at);
at.addNext(acceptFault);
if (cpt > 0) {
at = new AvatarTransition(_ab, "at_totimeout", _ref);
asm.addElement(at);
previousState.addNext(at);
at.addNext(timeout);
at.setDelays("" + _node.getTime(), "" + _node.getTime());
}
at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
acceptFault.addNext(at);
at.addNext(state);
previousState = state;
cpt++;
}
at = new AvatarTransition(_ab, "at", _ref);
asm.addElement(at);
previousState.addNext(at);
at.addNext(endState);
// Performing resulting Fault
Fault resulting = _node.getResultingFault();
avatartranslator.AvatarSignal sigFault = _main.getAvatarSignalWithName("nodeDone__" + resulting.getName());
AvatarActionOnSignal resultingFault = new AvatarActionOnSignal("ResultingFault", sigFault, _ref1);
asm.addElement(resultingFault);
at = new AvatarTransition(_ab, "at_toResultingFault", _ref);
asm.addElement(at);
endState.addNext(at);
at.addNext(resultingFault);
at = new AvatarTransition(_ab, "at_Overall", _ref);
asm.addElement(at);
resultingFault.addNext(at);
at.addNext(overallState);
}
private void addCheckingError(CheckingError ce) {
if (checkingErrors == null) {
checkingErrors = new LinkedList<CheckingError>();
}
checkingErrors.add(ce);
}
//
// private void addWarning(CheckingError ce) {
// if (warnings == null) {
// warnings = new LinkedList<CheckingError> ();
// }
// warnings.add (ce);
// }
}