Search in sources :

Example 1 with SLOr

use of com.ge.research.osate.verdict.dsl.verdict.SLOr in project VERDICT by ge-high-assurance.

the class Aadl2Vdm method handleOrSafetyReqExpr.

/**
 * to handle LOr expressions while creating a SafetyReqExpr object
 * @param orExpr
 * @param allPortNames
 * @param allPortCIAs
 * @return
 */
verdict.vdm.vdm_model.SafetyReqExpr handleOrSafetyReqExpr(SLExpr orExpr, List<String> allPortNames, List<String> allPortCIAs) {
    // to pack this SafetyReqExpr
    verdict.vdm.vdm_model.SafetyReqExpr packSafetyReqExpr = new verdict.vdm.vdm_model.SafetyReqExpr();
    if (orExpr instanceof SLPort) {
        verdict.vdm.vdm_model.IAPort port = handleIAPort(orExpr, allPortNames, allPortCIAs);
        // setting "port" field of packSafetyReqExp
        packSafetyReqExpr.setPort(port);
    } else if (orExpr instanceof SLNot) {
        verdict.vdm.vdm_model.SafetyReqExprKind kind = verdict.vdm.vdm_model.SafetyReqExprKind.fromValue("Not");
        // setting "kind" of expression
        packSafetyReqExpr.setKind(kind);
        // to pack the SafetyReqExpr for the Not
        verdict.vdm.vdm_model.SafetyReqExpr packNotCyberExpr = handleNotSafetyReqExpr((SLNot) orExpr, allPortNames, allPortCIAs);
        // set the "not" of packSafetyReqExpr
        packSafetyReqExpr.setNot(packNotCyberExpr);
    } else if (((SLOr) orExpr).getExprs().size() == 1) {
        // Is a solo disjunct
        /**
         * If it is a single disjunct, just send it to handleAndCyberExpr
         * and return the same package returned by handleAndCyberExpr
         */
        SLAnd soloAndExpr = ((SLOr) orExpr).getExprs().get(0);
        packSafetyReqExpr = handleAndSafetyReqExpr(soloAndExpr, allPortNames, allPortCIAs);
    } else if (((SLOr) orExpr).getExprs().size() > 1) {
        verdict.vdm.vdm_model.SafetyReqExprKind kind = verdict.vdm.vdm_model.SafetyReqExprKind.fromValue("Or");
        // setting "kind" of expression
        packSafetyReqExpr.setKind(kind);
        // to pack all disjunct subexpressions in a single list
        verdict.vdm.vdm_model.SafetyReqExprList packAndList = new verdict.vdm.vdm_model.SafetyReqExprList();
        for (SLAnd andExpr : ((SLOr) orExpr).getExprs()) {
            // for each disjunct (each disjunct is a LAnd)
            // to pack the SafetyReqExpr for this disjunct
            verdict.vdm.vdm_model.SafetyReqExpr packDisjunctSafetyReqExpr = handleAndSafetyReqExpr(andExpr, allPortNames, allPortCIAs);
            // adding to the list of disjuncts
            packAndList.getExpr().add(packDisjunctSafetyReqExpr);
        }
        // setting the "and" field of packSafetyReqExpr
        packSafetyReqExpr.setOr(packAndList);
    }
    return packSafetyReqExpr;
}
Also used : SLAnd(com.ge.research.osate.verdict.dsl.verdict.SLAnd) SLPort(com.ge.research.osate.verdict.dsl.verdict.SLPort) SLNot(com.ge.research.osate.verdict.dsl.verdict.SLNot) SLOr(com.ge.research.osate.verdict.dsl.verdict.SLOr)

Example 2 with SLOr

use of com.ge.research.osate.verdict.dsl.verdict.SLOr in project VERDICT by ge-high-assurance.

the class Aadl2Vdm method createVdmSafetyRelExpr.

/**
 * creates a Vdm SafetyRelExpr object and returns
 * @param expr
 * @return
 */
verdict.vdm.vdm_model.SafetyRelExpr createVdmSafetyRelExpr(SLExpr expr) {
    // to pack the SafetyRelExpr and return
    verdict.vdm.vdm_model.SafetyRelExpr packSafetyRelExpr = new verdict.vdm.vdm_model.SafetyRelExpr();
    // ---------variables for testing---- will remove when testing is over
    List<String> allPortNames = new ArrayList<>();
    List<String> allPortCIAs = new ArrayList<>();
    if (expr instanceof SLOr) {
        // HAS to be an LOr since LExpr can only be an LOr
        if (((SLOr) expr).getExprs().size() == 1) {
            // Is a solo disjunct
            /**
             * If it is a single disjunct, just send it to handleAndCyberExpr
             * and return the same package returned by handleAndCyberExpr
             */
            SLAnd soloAndExpr = ((SLOr) expr).getExprs().get(0);
            packSafetyRelExpr = handleAndSafetyRelExpr(soloAndExpr, allPortNames, allPortCIAs);
        } else if (((SLOr) expr).getExprs().size() > 1) {
            verdict.vdm.vdm_model.SafetyRelExprKind kind = verdict.vdm.vdm_model.SafetyRelExprKind.fromValue("Or");
            // setting "kind" of expression
            packSafetyRelExpr.setKind(kind);
            // to pack all disjunct subexpressions in a single list
            verdict.vdm.vdm_model.SafetyRelExprList packAndList = new verdict.vdm.vdm_model.SafetyRelExprList();
            for (SLAnd andExpr : ((SLOr) expr).getExprs()) {
                // for each disjunct (each disjunct is a LAnd)
                // to pack the SafetyRelExpr for this disjunct
                verdict.vdm.vdm_model.SafetyRelExpr packDisjunctSafetyRelExpr = handleAndSafetyRelExpr(andExpr, allPortNames, allPortCIAs);
                // adding to the list of disjuncts
                packAndList.getExpr().add(packDisjunctSafetyRelExpr);
            }
            // setting the "and" field of packSafetyRelExpr
            packSafetyRelExpr.setOr(packAndList);
        }
    } else {
        // Should never occur, but keeping for sanity
        throw new RuntimeException("Warning -- LExpr should be an LOr");
    }
    return packSafetyRelExpr;
}
Also used : ArrayList(java.util.ArrayList) SLAnd(com.ge.research.osate.verdict.dsl.verdict.SLAnd) SLOr(com.ge.research.osate.verdict.dsl.verdict.SLOr)

Example 3 with SLOr

use of com.ge.research.osate.verdict.dsl.verdict.SLOr in project VERDICT by ge-high-assurance.

the class Aadl2Vdm method handleAndSafetyReqExpr.

/**
 * to handle LAnd expressions while creating a SafetyReqExpr object
 * @param andExpr
 * @param allPortNames
 * @param allPortCIAs
 * @return
 */
verdict.vdm.vdm_model.SafetyReqExpr handleAndSafetyReqExpr(SLAnd andExpr, List<String> allPortNames, List<String> allPortCIAs) {
    // to pack this SafetyReqExpr
    verdict.vdm.vdm_model.SafetyReqExpr packSafetyReqExpr = new verdict.vdm.vdm_model.SafetyReqExpr();
    if (andExpr.getExprs().size() == 1) {
        // Is a Port or a Not
        SLExpr subAndExpr = andExpr.getExprs().get(0);
        if (subAndExpr instanceof SLPort) {
            verdict.vdm.vdm_model.IAPort port = handleIAPort(subAndExpr, allPortNames, allPortCIAs);
            // setting "port" field of packSafetyReq
            packSafetyReqExpr.setPort(port);
        } else if (subAndExpr instanceof SLNot) {
            verdict.vdm.vdm_model.SafetyReqExprKind kind = verdict.vdm.vdm_model.SafetyReqExprKind.fromValue("Not");
            // setting "kind" of expression
            packSafetyReqExpr.setKind(kind);
            // to pack the SafetyReqExpr for the Not
            verdict.vdm.vdm_model.SafetyReqExpr packNotSafetyReqExpr = handleNotSafetyReqExpr((SLNot) subAndExpr, allPortNames, allPortCIAs);
            // set the "not" of packSafetyReqExpr
            packSafetyReqExpr.setNot(packNotSafetyReqExpr);
        } else if (subAndExpr instanceof SLOr) {
            /**
             * If it is a single conjunct, just send it to handleOrCyberExpr
             * and return the same package returned by handleAndCyberExpr
             */
            packSafetyReqExpr = handleOrSafetyReqExpr(subAndExpr, allPortNames, allPortCIAs);
        }
    } else if (andExpr.getExprs().size() > 1) {
        // collection of conjuncts
        verdict.vdm.vdm_model.SafetyReqExprKind kind = verdict.vdm.vdm_model.SafetyReqExprKind.fromValue("And");
        // setting "kind" of expression
        packSafetyReqExpr.setKind(kind);
        // to pack all conjunct subexpressions in a single list
        verdict.vdm.vdm_model.SafetyReqExprList packOrList = new verdict.vdm.vdm_model.SafetyReqExprList();
        for (SLExpr expr : andExpr.getExprs()) {
            // for each conjunct (each disjunct is a LExpr)
            // to pack the SafetyReqExpr for this conjunct
            verdict.vdm.vdm_model.SafetyReqExpr packConjunctSafetyReqExpr = handleOrSafetyReqExpr(expr, allPortNames, allPortCIAs);
            // adding to the list of conjuncts
            packOrList.getExpr().add(packConjunctSafetyReqExpr);
        }
        // setting the "or" field of packSafetyReqExpr
        packSafetyReqExpr.setAnd(packOrList);
    }
    return packSafetyReqExpr;
}
Also used : SLPort(com.ge.research.osate.verdict.dsl.verdict.SLPort) SLNot(com.ge.research.osate.verdict.dsl.verdict.SLNot) SLOr(com.ge.research.osate.verdict.dsl.verdict.SLOr) SLExpr(com.ge.research.osate.verdict.dsl.verdict.SLExpr)

Example 4 with SLOr

use of com.ge.research.osate.verdict.dsl.verdict.SLOr in project VERDICT by ge-high-assurance.

the class Aadl2Vdm method createVdmSafetyReqExpr.

/**
 * creates a Vdm SafetyReqExpr object and returns
 * @param expr
 * @return
 */
verdict.vdm.vdm_model.SafetyReqExpr createVdmSafetyReqExpr(SLExpr expr) {
    // to pack the SafetyReqExpr and return
    verdict.vdm.vdm_model.SafetyReqExpr packSafetyReqExpr = new verdict.vdm.vdm_model.SafetyReqExpr();
    // ---------variables for debugging
    List<String> allPortNames = new ArrayList<>();
    List<String> allPortCIAs = new ArrayList<>();
    if (expr instanceof SLOr) {
        // HAS to be an LOr since SLExpr can only be an SLOr
        if (((SLOr) expr).getExprs().size() == 1) {
            // Is a solo disjunct
            /**
             * If it is a single disjunct, just send it to handleAndCyberExpr
             * and return the same package returned by handleAndCyberExpr
             */
            SLAnd soloAndExpr = ((SLOr) expr).getExprs().get(0);
            packSafetyReqExpr = handleAndSafetyReqExpr(soloAndExpr, allPortNames, allPortCIAs);
        } else if (((SLOr) expr).getExprs().size() > 1) {
            verdict.vdm.vdm_model.SafetyReqExprKind kind = verdict.vdm.vdm_model.SafetyReqExprKind.fromValue("Or");
            // setting "kind" of expression
            packSafetyReqExpr.setKind(kind);
            // to pack all disjunct subexpressions in a single list
            verdict.vdm.vdm_model.SafetyReqExprList packAndList = new verdict.vdm.vdm_model.SafetyReqExprList();
            for (SLAnd andExpr : ((SLOr) expr).getExprs()) {
                // for each disjunct (each disjunct is a LAnd)
                // to pack the SafetyReqExpr for this disjunct
                verdict.vdm.vdm_model.SafetyReqExpr packDisjunctSafetyReqExpr = handleAndSafetyReqExpr(andExpr, allPortNames, allPortCIAs);
                // adding to the list of disjuncts
                packAndList.getExpr().add(packDisjunctSafetyReqExpr);
            }
            // setting the "and" field of packSafetyReq
            packSafetyReqExpr.setOr(packAndList);
        }
    } else {
        // Should never occur, but keeping for sanity
        throw new RuntimeException("Warning -- LExpr should be an LOr");
    }
    return packSafetyReqExpr;
}
Also used : ArrayList(java.util.ArrayList) SLAnd(com.ge.research.osate.verdict.dsl.verdict.SLAnd) SLOr(com.ge.research.osate.verdict.dsl.verdict.SLOr)

Example 5 with SLOr

use of com.ge.research.osate.verdict.dsl.verdict.SLOr in project VERDICT by ge-high-assurance.

the class Aadl2Vdm method handleOrSafetyRelExpr.

/**
 * to handle LOr expressions while creating a SafetyRelExpr object
 * @param orExpr
 * @param allPortNames
 * @param allPortCIAs
 * @return
 */
verdict.vdm.vdm_model.SafetyRelExpr handleOrSafetyRelExpr(SLExpr orExpr, List<String> allPortNames, List<String> allPortCIAs) {
    // to pack this SafetyRelExpr
    verdict.vdm.vdm_model.SafetyRelExpr packSafetyRelExpr = new verdict.vdm.vdm_model.SafetyRelExpr();
    if (orExpr instanceof SLPort) {
        verdict.vdm.vdm_model.IAPort port = handleIAPort(orExpr, allPortNames, allPortCIAs);
        // setting "port" field of packSafetyRelExpr
        packSafetyRelExpr.setPort(port);
    } else if (orExpr instanceof SLNot) {
        verdict.vdm.vdm_model.SafetyRelExprKind kind = verdict.vdm.vdm_model.SafetyRelExprKind.fromValue("Not");
        // setting "kind" of expression
        packSafetyRelExpr.setKind(kind);
        // to pack the SafetyRelExpr for the Not
        verdict.vdm.vdm_model.SafetyRelExpr packNotCyberExpr = handleNotSafetyRelExpr((SLNot) orExpr, allPortNames, allPortCIAs);
        // set the "not" of packSafetyRelExpr
        packSafetyRelExpr.setNot(packNotCyberExpr);
    } else if (orExpr instanceof FExpr) {
        verdict.vdm.vdm_model.EventHappens fault = handleEventHappens(orExpr, allPortNames, allPortCIAs);
        // setting "port" field of packSafetyRelExpr
        packSafetyRelExpr.setFault(fault);
    } else if (((SLOr) orExpr).getExprs().size() == 1) {
        // Is a solo disjunct
        /**
         * If it is a single disjunct, just send it to handleAndCyberExpr
         * and return the same package returned by handleAndCyberExpr
         */
        SLAnd soloAndExpr = ((SLOr) orExpr).getExprs().get(0);
        packSafetyRelExpr = handleAndSafetyRelExpr(soloAndExpr, allPortNames, allPortCIAs);
    } else if (((SLOr) orExpr).getExprs().size() > 1) {
        verdict.vdm.vdm_model.SafetyRelExprKind kind = verdict.vdm.vdm_model.SafetyRelExprKind.fromValue("Or");
        // setting "kind" of expression
        packSafetyRelExpr.setKind(kind);
        // to pack all disjunct subexpressions in a single list
        verdict.vdm.vdm_model.SafetyRelExprList packAndList = new verdict.vdm.vdm_model.SafetyRelExprList();
        for (SLAnd andExpr : ((SLOr) orExpr).getExprs()) {
            // for each disjunct (each disjunct is a LAnd)
            // to pack the SafetyRelExprfor this disjunct
            verdict.vdm.vdm_model.SafetyRelExpr packDisjunctSafetyRelExpr = handleAndSafetyRelExpr(andExpr, allPortNames, allPortCIAs);
            // adding to the list of disjuncts
            packAndList.getExpr().add(packDisjunctSafetyRelExpr);
        }
        // setting the "and" field of packSafetyRelExpr
        packSafetyRelExpr.setOr(packAndList);
    }
    return packSafetyRelExpr;
}
Also used : FExpr(com.ge.research.osate.verdict.dsl.verdict.FExpr) SLAnd(com.ge.research.osate.verdict.dsl.verdict.SLAnd) SLPort(com.ge.research.osate.verdict.dsl.verdict.SLPort) SLNot(com.ge.research.osate.verdict.dsl.verdict.SLNot) SLOr(com.ge.research.osate.verdict.dsl.verdict.SLOr)

Aggregations

SLOr (com.ge.research.osate.verdict.dsl.verdict.SLOr)6 SLAnd (com.ge.research.osate.verdict.dsl.verdict.SLAnd)4 SLNot (com.ge.research.osate.verdict.dsl.verdict.SLNot)4 SLPort (com.ge.research.osate.verdict.dsl.verdict.SLPort)4 FExpr (com.ge.research.osate.verdict.dsl.verdict.FExpr)2 SLExpr (com.ge.research.osate.verdict.dsl.verdict.SLExpr)2 ArrayList (java.util.ArrayList)2