Search in sources :

Example 1 with FeatureInstanceImpl

use of org.osate.aadl2.instance.impl.FeatureInstanceImpl in project AMASE by loonwerks.

the class AddFaultsToNodeVisitor method changeAsymConnections.

/**
 * Method will remove the previous connections in the main lustre node from
 * sender to receivers and add in the new connections from sender to commNode
 * and from commNode to receiver. Ex: What used to be: Sender_out = reciever1.in
 * Sender_out = reciever2.in Sender_out = reciever3.in Is now: Sender_out =
 * asym0.in Sender_out = asym1.in Sender_out = asym2.in asym0.out = reciever1.in
 * asym1.out = reciever2.in asym2.out = reciever3.in
 *
 * @param nb NodeBuilder for the main lustre node.
 */
private void changeAsymConnections(AgreeNodeBuilder nb) {
    // Insert connections sender_output = commNode_input
    for (String output : mapAsymCompOutputToCommNodeIn.keySet()) {
        for (String nodeName : mapAsymCompOutputToCommNodeIn.get(output)) {
            Expr eq = new BinaryExpr(new IdExpr(output), BinaryOp.EQUAL, new IdExpr(nodeName));
            nb.addAssertion(new AgreeStatement("", eq, this.topNode.reference));
        }
    }
    // Insert connections commNode_output = receiver_input.
    for (String output : mapCommNodeOutputToConnections.keySet()) {
        String featureName = "";
        String componentName = "";
        // First access name of receiving component and its input
        if (mapCommNodeOutputToConnections.get(output).eContainer() instanceof SystemInstanceImpl) {
            FeatureInstanceImpl fi = (FeatureInstanceImpl) mapCommNodeOutputToConnections.get(output);
            componentName = "";
            featureName = fi.getName();
        } else if (mapCommNodeOutputToConnections.get(output) instanceof FeatureInstanceImpl) {
            FeatureInstanceImpl fi = (FeatureInstanceImpl) mapCommNodeOutputToConnections.get(output);
            featureName = fi.getName();
            if (fi.eContainer() instanceof ComponentInstanceImpl) {
                ComponentInstanceImpl ci = (ComponentInstanceImpl) fi.eContainer();
                componentName = ci.getName() + "__";
            } else {
                new SafetyException("Asymmetric fault must be connected to a component instance.");
            }
        } else {
            new SafetyException("Asymmetric fault must have an allowable connection.");
        }
        // Create lustre connection name, add to builder.
        IdExpr connectionName = new IdExpr(componentName + featureName);
        Expr eq = new BinaryExpr(new IdExpr(output), BinaryOp.EQUAL, connectionName);
        nb.addAssertion(new AgreeStatement("", eq, this.topNode.reference));
    }
}
Also used : ComponentInstanceImpl(org.osate.aadl2.instance.impl.ComponentInstanceImpl) AgreeStatement(com.rockwellcollins.atc.agree.analysis.ast.AgreeStatement) RecordAccessExpr(jkind.lustre.RecordAccessExpr) UnaryExpr(jkind.lustre.UnaryExpr) Expr(jkind.lustre.Expr) IntExpr(jkind.lustre.IntExpr) NodeCallExpr(jkind.lustre.NodeCallExpr) BoolExpr(jkind.lustre.BoolExpr) BinaryExpr(jkind.lustre.BinaryExpr) ArrayAccessExpr(jkind.lustre.ArrayAccessExpr) IdExpr(jkind.lustre.IdExpr) IfThenElseExpr(jkind.lustre.IfThenElseExpr) IdExpr(jkind.lustre.IdExpr) SystemInstanceImpl(org.osate.aadl2.instance.impl.SystemInstanceImpl) BinaryExpr(jkind.lustre.BinaryExpr) SafetyException(edu.umn.cs.crisys.safety.analysis.SafetyException) FeatureInstanceImpl(org.osate.aadl2.instance.impl.FeatureInstanceImpl)

Aggregations

AgreeStatement (com.rockwellcollins.atc.agree.analysis.ast.AgreeStatement)1 SafetyException (edu.umn.cs.crisys.safety.analysis.SafetyException)1 ArrayAccessExpr (jkind.lustre.ArrayAccessExpr)1 BinaryExpr (jkind.lustre.BinaryExpr)1 BoolExpr (jkind.lustre.BoolExpr)1 Expr (jkind.lustre.Expr)1 IdExpr (jkind.lustre.IdExpr)1 IfThenElseExpr (jkind.lustre.IfThenElseExpr)1 IntExpr (jkind.lustre.IntExpr)1 NodeCallExpr (jkind.lustre.NodeCallExpr)1 RecordAccessExpr (jkind.lustre.RecordAccessExpr)1 UnaryExpr (jkind.lustre.UnaryExpr)1 ComponentInstanceImpl (org.osate.aadl2.instance.impl.ComponentInstanceImpl)1 FeatureInstanceImpl (org.osate.aadl2.instance.impl.FeatureInstanceImpl)1 SystemInstanceImpl (org.osate.aadl2.instance.impl.SystemInstanceImpl)1