Search in sources :

Example 1 with LAnd

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

the class Aadl2Vdm method createVdmCyberExpr.

/**
 * creates a Vdm CyberExpr object and returns
 * @param expr
 * @return
 */
verdict.vdm.vdm_model.CyberExpr createVdmCyberExpr(LExpr expr) {
    // to pack the CyberExpr and return
    verdict.vdm.vdm_model.CyberExpr packCyberExpr = new verdict.vdm.vdm_model.CyberExpr();
    // --------- variables for debugging
    List<String> allPortNames = new ArrayList<>();
    List<String> allPortCIAs = new ArrayList<>();
    if (expr instanceof LOr) {
        // HAS to be an LOr since LExpr can only be an LOr
        if (((LOr) 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
             */
            LAnd soloAndExpr = ((LOr) expr).getExprs().get(0);
            packCyberExpr = handleAndCyberExpr(soloAndExpr, allPortNames, allPortCIAs);
        } else if (((LOr) expr).getExprs().size() > 1) {
            verdict.vdm.vdm_model.CyberExprKind kind = verdict.vdm.vdm_model.CyberExprKind.fromValue("Or");
            // setting "kind" of expression
            packCyberExpr.setKind(kind);
            // to pack all disjunct subexpressions in a single list
            verdict.vdm.vdm_model.CyberExprList packAndList = new verdict.vdm.vdm_model.CyberExprList();
            for (LAnd andExpr : ((LOr) expr).getExprs()) {
                // for each disjunct (each disjunct is a LAnd)
                // to pack the CyberExpr for this disjunct
                verdict.vdm.vdm_model.CyberExpr packDisjunctCyberExpr = handleAndCyberExpr(andExpr, allPortNames, allPortCIAs);
                // adding to the list of disjuncts
                packAndList.getExpr().add(packDisjunctCyberExpr);
            }
            // setting the "or" field of packCyberExpr
            packCyberExpr.setOr(packAndList);
        }
    } else {
        // Should never occur, but keeping for sanity
        throw new RuntimeException("Warning -- LExpr should be an LOr");
    }
    // return the CyberExpr
    return packCyberExpr;
}
Also used : ArrayList(java.util.ArrayList) LAnd(com.ge.research.osate.verdict.dsl.verdict.LAnd) SLAnd(com.ge.research.osate.verdict.dsl.verdict.SLAnd) LOr(com.ge.research.osate.verdict.dsl.verdict.LOr) SLOr(com.ge.research.osate.verdict.dsl.verdict.SLOr)

Example 2 with LAnd

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

the class Aadl2Vdm method handleOrCyberExpr.

/**
 * to handle LOr expressions while creating a CyberExpr object
 * @param orExpr
 * @param allPortNames
 * @param allPortCIAs
 * @return
 */
verdict.vdm.vdm_model.CyberExpr handleOrCyberExpr(LExpr orExpr, List<String> allPortNames, List<String> allPortCIAs) {
    // to pack this CyberExpr
    verdict.vdm.vdm_model.CyberExpr packCyberExpr = new verdict.vdm.vdm_model.CyberExpr();
    if (orExpr instanceof LPort) {
        verdict.vdm.vdm_model.CIAPort port = handleCIAPort(orExpr, allPortNames, allPortCIAs);
        // setting "port" field of packCyberExp
        packCyberExpr.setPort(port);
    } else if (orExpr instanceof LNot) {
        verdict.vdm.vdm_model.CyberExprKind kind = verdict.vdm.vdm_model.CyberExprKind.fromValue("Not");
        // setting "kind" of expression
        packCyberExpr.setKind(kind);
        // send to handler for Not expression
        verdict.vdm.vdm_model.CyberExpr packNotCyberExpr = handleNotCyberExpr((LNot) orExpr, allPortNames, allPortCIAs);
        // set the "not" of packCyberExpr
        packCyberExpr.setNot(packNotCyberExpr);
    } else if (((LOr) 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
         */
        LAnd soloAndExpr = ((LOr) orExpr).getExprs().get(0);
        packCyberExpr = handleAndCyberExpr(soloAndExpr, allPortNames, allPortCIAs);
    } else if (((LOr) orExpr).getExprs().size() > 1) {
        verdict.vdm.vdm_model.CyberExprKind kind = verdict.vdm.vdm_model.CyberExprKind.fromValue("Or");
        // setting "kind" of expression
        packCyberExpr.setKind(kind);
        // to pack all disjunct subexpressions in a single list
        verdict.vdm.vdm_model.CyberExprList packAndList = new verdict.vdm.vdm_model.CyberExprList();
        for (LAnd andExpr : ((LOr) orExpr).getExprs()) {
            // for each disjunct (each disjunct is a LAnd)
            // to pack the CyberExpr for this disjunct
            verdict.vdm.vdm_model.CyberExpr packDisjunctCyberExpr = handleAndCyberExpr(andExpr, allPortNames, allPortCIAs);
            // adding to the list of disjuncts
            packAndList.getExpr().add(packDisjunctCyberExpr);
        }
        // setting the "and" field of packCyberExpr
        packCyberExpr.setOr(packAndList);
    }
    return packCyberExpr;
}
Also used : LNot(com.ge.research.osate.verdict.dsl.verdict.LNot) SLNot(com.ge.research.osate.verdict.dsl.verdict.SLNot) LAnd(com.ge.research.osate.verdict.dsl.verdict.LAnd) SLAnd(com.ge.research.osate.verdict.dsl.verdict.SLAnd) LOr(com.ge.research.osate.verdict.dsl.verdict.LOr) SLOr(com.ge.research.osate.verdict.dsl.verdict.SLOr) SLPort(com.ge.research.osate.verdict.dsl.verdict.SLPort) LPort(com.ge.research.osate.verdict.dsl.verdict.LPort)

Aggregations

LAnd (com.ge.research.osate.verdict.dsl.verdict.LAnd)2 LOr (com.ge.research.osate.verdict.dsl.verdict.LOr)2 SLAnd (com.ge.research.osate.verdict.dsl.verdict.SLAnd)2 SLOr (com.ge.research.osate.verdict.dsl.verdict.SLOr)2 LNot (com.ge.research.osate.verdict.dsl.verdict.LNot)1 LPort (com.ge.research.osate.verdict.dsl.verdict.LPort)1 SLNot (com.ge.research.osate.verdict.dsl.verdict.SLNot)1 SLPort (com.ge.research.osate.verdict.dsl.verdict.SLPort)1 ArrayList (java.util.ArrayList)1