use of com.ge.research.osate.verdict.dsl.verdict.CyberRelInputLogic in project VERDICT by ge-high-assurance.
the class WzrdTableLoader method getTableRow.
// Store existing cyber-relation into a data-structure
private WzrdTableRow getTableRow(Statement stmt) {
WzrdTableRow tableRow = new WzrdTableRow();
tableRow.setFormulaID(stmt.getId());
tableRow.setNewRow(false);
tableRow.setComment(((CyberRelImpl) stmt).getComment());
tableRow.setDescription(((CyberRelImpl) stmt).getDescription());
// tableRow.setExternal(((CyberRelImpl) stmt).getExternal());
// tableRow.setPhase(((CyberRelImpl) stmt).getPhases());
List<EObject> objList = stmt.eContents();
for (int j = 0; j < objList.size(); j++) {
EObject objInst = objList.get(j);
if (objInst instanceof CyberRelOutputLogic) {
CyberRelOutputLogic rhs = (CyberRelOutputLogic) objInst;
LPort lp = rhs.getValue();
tableRow.setFirstElement(drpdn.findIndex(drpdn.outPorts, lp.getPort()));
tableRow.setSecondElement(drpdn.findIndex(drpdn.CIA_ABBREV, lp.getCia().getLiteral()));
} else if (objInst instanceof CyberRelInputLogic) {
ISerializer serializer = VerdictActivator.getInstance().getInjector(VerdictUiModule.INJECTOR_NAME).getInstance(VerdictSerializer.class);
tableRow.setThirdElement(serializer.serialize(objInst));
}
}
if (tableRow.getThirdElement() == null) {
tableRow.setThirdElement("TRUE");
}
return tableRow;
}
use of com.ge.research.osate.verdict.dsl.verdict.CyberRelInputLogic in project VERDICT by ge-high-assurance.
the class VerdictUtil method getAvailablePorts.
/**
* Finds all input/output ports for the system enclosing an LPort.
*
* Automatically detects if the ports should be input or output based
* on the context (if possible).
*
* Requires: port must be an LPort or inside a CyberRel/CyberReq
*
* @param port the AST object from which to search up the tree
* @param allowSkipInput used in the proposal provider because model
* is not necessarily where we expect it to be
* @return the ports info (see AvailablePortsInfo)
*/
public static AvailablePortsInfo getAvailablePorts(EObject port, boolean allowSkipInput, DirectionType specifiedDir) {
List<String> ports = new ArrayList<>();
SystemType system = null;
DirectionType dir = null;
// Determine direction
EObject container = port;
while (!(container instanceof CyberRelInputLogic || container instanceof CyberRelOutputLogic || container instanceof CyberReqConditionLogic || container instanceof CyberRel || container instanceof CyberReq || container instanceof SafetyRelInputLogic || container instanceof SafetyRelOutputLogic || container instanceof SafetyReqConditionLogic || container instanceof SafetyRel || container instanceof SafetyReq || container instanceof SystemType || container instanceof PublicPackageSection)) {
if (container == null) {
break;
}
container = container.eContainer();
}
if (container instanceof CyberRelInputLogic) {
dir = DirectionType.IN;
} else if (container instanceof CyberRelOutputLogic) {
dir = DirectionType.OUT;
} else if (container instanceof CyberReqConditionLogic) {
dir = DirectionType.OUT;
} else if (container instanceof SafetyRelInputLogic) {
dir = DirectionType.IN;
} else if (container instanceof SafetyRelOutputLogic) {
dir = DirectionType.OUT;
} else if (container instanceof SafetyReqConditionLogic) {
dir = DirectionType.OUT;
} else {
// If allowSkipInput is true, then we will simply collect both input and output
if (!allowSkipInput) {
throw new RuntimeException();
}
}
while (!(container instanceof CyberRel || container instanceof CyberReq || container instanceof SafetyReq || container instanceof SafetyRel || container instanceof Event || container instanceof SystemType || container instanceof PublicPackageSection)) {
if (container == null) {
break;
}
container = container.eContainer();
}
boolean isCyberReq;
if (container instanceof CyberReq) {
isCyberReq = true;
} else if (container instanceof CyberRel) {
isCyberReq = false;
} else if (container instanceof SafetyReq) {
isCyberReq = false;
} else if (container instanceof SafetyRel) {
isCyberReq = false;
} else if (container instanceof Event) {
isCyberReq = false;
} else {
if (specifiedDir == null) {
throw new RuntimeException();
} else {
dir = specifiedDir;
isCyberReq = false;
}
}
while (!(container instanceof SystemType || container instanceof PublicPackageSection)) {
if (container == null) {
break;
}
container = container.eContainer();
}
if (container instanceof SystemType) {
system = (SystemType) container;
while (!(container instanceof SystemType || container instanceof PublicPackageSection)) {
container = container.eContainer();
}
if (container instanceof SystemType) {
// Find all data(event data) ports
for (DataPort dataPort : ((SystemType) container).getOwnedDataPorts()) {
if ((dir != null && dataPort.getDirection().equals(dir)) || (dir == null && (dataPort.getDirection().equals(DirectionType.IN) || dataPort.getDirection().equals(DirectionType.OUT)))) {
ports.add(dataPort.getName());
}
}
for (EventDataPort eventDataPort : ((SystemType) container).getOwnedEventDataPorts()) {
if ((dir != null && eventDataPort.getDirection().equals(dir)) || (dir == null && (eventDataPort.getDirection().equals(DirectionType.IN) || eventDataPort.getDirection().equals(DirectionType.OUT)))) {
ports.add(eventDataPort.getName());
}
}
}
}
return new AvailablePortsInfo(ports, system, dir == null || dir.equals(DirectionType.IN), isCyberReq);
}
Aggregations