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;
}
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;
}
Aggregations