Search in sources :

Example 6 with Statement

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

the class Aadl2Vdm method translateAbstractTypeObjects.

// End of translateDeviceTypeObjects
/**
 * Analyzing each abstractType:
 * 1. Determine if it is a lower-level system or higher-level system
 * 2. If lower-level, add to componentType list attribute of Model
 * 	2.1 Populate the port, contract, cyberRel, safetyRel, event, id, compCategory
 *      fields of componentType of the Model object
 * 3. If higher-level, assign to Model
 * 	3.1 Populate the safetyReq
 *      cyberReq, mission fields of Model object
 * @param abstractTypes
 * @param m1
 * @return
 */
public Model translateAbstractTypeObjects(List<AbstractType> abstractTypes, Model m1, HashSet<String> dataTypeDecl) {
    for (AbstractType absType : abstractTypes) {
        // variables for unpacking absType
        List<Event> events = new ArrayList<>();
        List<CyberMission> missionReqs = new ArrayList<>();
        List<CyberRel> cyberRels = new ArrayList<>();
        List<SafetyRel> safetyRels = new ArrayList<>();
        List<CyberReq> cyberReqs = new ArrayList<>();
        List<SafetyReq> safetyReqs = new ArrayList<>();
        // a flag to check if a higher -level component has already been found
        boolean higher_flag = false;
        // unpacking absType
        for (AnnexSubclause annex : absType.getOwnedAnnexSubclauses()) {
            if (annex.getName().equalsIgnoreCase("verdict")) {
                Verdict verdictAnnex = VerdictUtil.getVerdict(annex);
                for (Statement statement : verdictAnnex.getElements()) {
                    if (statement instanceof Event) {
                        events.add((Event) statement);
                    } else if (statement instanceof CyberMission) {
                        missionReqs.add((CyberMission) statement);
                    } else if (statement instanceof CyberReq) {
                        cyberReqs.add((CyberReq) statement);
                    } else if (statement instanceof CyberRel) {
                        cyberRels.add((CyberRel) statement);
                    } else if (statement instanceof SafetyReq) {
                        safetyReqs.add((SafetyReq) statement);
                    } else if (statement instanceof SafetyRel) {
                        safetyRels.add((SafetyRel) statement);
                    }
                }
            }
        }
        /**
         *  For every AbstractType,
         *  populate the id, name, compCateg, port, event,
         *  cyberRel, and safetyRel fields of componentType
         *  and add it to the list of componentType
         *  of the Model object
         */
        if (true) {
            // No Filter-- do for all System Types
            // to pack the memType as a VDM component
            verdict.vdm.vdm_model.ComponentType packComponent = new verdict.vdm.vdm_model.ComponentType();
            // Note: Not populating "contract" for now
            // ISSUE: There is no getId() function for memoryType
            packComponent.setId(absType.getQualifiedName());
            // populating "name"
            packComponent.setName(absType.getName());
            // populating "compCateg"
            packComponent.setCompCateg(absType.getCategory().getName());
            // get all bus accesses and store them as ports
            List<BusAccess> busAccesses = absType.getOwnedBusAccesses();
            // checking each busAccess's details and adding it to the port list
            for (BusAccess busAccess : busAccesses) {
                String portName = busAccess.getName();
                String modeString = "in";
                if (busAccess.getKind() == AccessType.PROVIDES) {
                    modeString = "providesBusAccess";
                } else if (busAccess.getKind() == AccessType.REQUIRES) {
                    modeString = "requiresBusAccess";
                }
                verdict.vdm.vdm_model.Port newPort = createVdmPort(portName, modeString, busAccess.getQualifiedName());
                // Note: Not populating "type" for now
                // ISSUE: "probe", "event", and "id" not found in DataPort class or superclass
                // add to port list of component
                packComponent.getPort().add(newPort);
            }
            // End of checking each busAccess
            // get all data accesses and store them as ports
            List<DataAccess> dataAccesses = absType.getOwnedDataAccesses();
            // checking each dataAccess's details and adding it to the port list
            for (DataAccess dataAccess : dataAccesses) {
                String portName = dataAccess.getName();
                String modeString = "in";
                if (dataAccess.getKind() == AccessType.PROVIDES) {
                    modeString = "providesDataAccess";
                } else if (dataAccess.getKind() == AccessType.REQUIRES) {
                    modeString = "requiresDataAccess";
                }
                verdict.vdm.vdm_model.Port newPort = createVdmPort(portName, modeString, dataAccess.getQualifiedName());
                // Note: Not populating "type" for now
                // ISSUE: "probe", "event", and "id" not found in DataPort class or superclass
                // add to port list of component
                packComponent.getPort().add(newPort);
            }
            // End of checking each dataAccess
            // get all ports
            List<DataPort> dataPorts = absType.getOwnedDataPorts();
            // checking each port's mode and name and adding it to the port list
            for (DataPort dataPort : dataPorts) {
                verdict.vdm.vdm_model.Port newPort = createVdmPort(dataPort, m1, dataTypeDecl);
                // ISSUE: "probe", "event", and "id" not found in DataPort class or superclass
                // add to port list of component
                packComponent.getPort().add(newPort);
            }
            // End of checking each port
            // get all event data ports
            List<EventDataPort> eventDataPorts = absType.getOwnedEventDataPorts();
            for (EventDataPort eventDataPort : eventDataPorts) {
                verdict.vdm.vdm_model.Port newPort = createVdmPort(eventDataPort, m1, dataTypeDecl);
                // add to port list of component
                packComponent.getPort().add(newPort);
            }
            // get all event ports
            List<EventPort> eventPorts = absType.getOwnedEventPorts();
            for (EventPort eventPort : eventPorts) {
                verdict.vdm.vdm_model.Port newPort = createVdmEventPort(eventPort);
                // add to port list of component
                packComponent.getPort().add(newPort);
            }
            // packing all events and adding to component
            for (Event anEvent : events) {
                // To pack the event as a VDM event
                verdict.vdm.vdm_model.Event packEvent = createVdmEvent(anEvent);
                // adding to the list of component's events
                packComponent.getEvent().add(packEvent);
            }
            // packing all cyberRels and adding to component
            for (CyberRel aCyberRel : cyberRels) {
                // To pack the cyberRel as a VDM event
                verdict.vdm.vdm_model.CyberRel packCyberRel = createVdmCyberRel(aCyberRel);
                // adding to the list of component's Cyber relations
                packComponent.getCyberRel().add(packCyberRel);
            }
            // packing all safetyRels and adding to component
            for (SafetyRel aSafetyRel : safetyRels) {
                // To pack the safetyRel as a VDM event
                verdict.vdm.vdm_model.SafetyRel packSafetyRel = createVdmSafetyRel(aSafetyRel);
                // adding to the list of component's Safety relations
                packComponent.getSafetyRel().add(packSafetyRel);
            }
            // End of packing all safetyRels
            // adding to the list of componenmemTypes of the Model object
            m1.getComponentType().add(packComponent);
        }
        /**
         * If a high-level system
         *  populate the name, safetyReq, cyberReq, and mission
         *  for the model object
         */
        if (!cyberReqs.isEmpty() || !safetyReqs.isEmpty() || !missionReqs.isEmpty()) {
            // checking if a high-level system has already been found
            if (higher_flag == false) {
                higher_flag = true;
            } else {
                System.out.println("Warning: Multiple high-level systems detected!");
            }
            // populating name
            m1.setName(absType.getName());
            // packing all safetyReqs and adding to model
            for (SafetyReq aSafetyReq : safetyReqs) {
                // To pack the safettReq as a VDM event
                verdict.vdm.vdm_model.SafetyReq packSafetyReq = createVdmSafetyReq(aSafetyReq, absType.getFullName());
                // adding to the list of model's Safety requirements
                m1.getSafetyReq().add(packSafetyReq);
            }
            // packing all cyberReqs and adding to model
            for (CyberReq aCyberReq : cyberReqs) {
                // To pack the safettReq as a VDM event
                verdict.vdm.vdm_model.CyberReq packCyberReq = createVdmCyberReq(aCyberReq, absType.getFullName());
                // adding to the list of model's Cyber requirements
                m1.getCyberReq().add(packCyberReq);
            }
            // packing all missionReqs and adding to model
            for (CyberMission aMission : missionReqs) {
                // To pack the safettReq as a VDM event
                verdict.vdm.vdm_model.Mission packMission = createVdmMission(aMission);
                // adding to the list of model's Mission
                m1.getMission().add(packMission);
            }
        // End of packing all missionReqs
        }
    // End of if a higher-level system
    }
    // returning the populated Model
    return m1;
}
Also used : ArrayList(java.util.ArrayList) Port(verdict.vdm.vdm_model.Port) DataAccess(org.osate.aadl2.DataAccess) DataPort(org.osate.aadl2.DataPort) EventDataPort(org.osate.aadl2.EventDataPort) EventPort(org.osate.aadl2.EventPort) EventDataPort(org.osate.aadl2.EventDataPort) Verdict(com.ge.research.osate.verdict.dsl.verdict.Verdict) CyberRel(com.ge.research.osate.verdict.dsl.verdict.CyberRel) CyberMission(com.ge.research.osate.verdict.dsl.verdict.CyberMission) BusAccess(org.osate.aadl2.BusAccess) CyberReq(com.ge.research.osate.verdict.dsl.verdict.CyberReq) Statement(com.ge.research.osate.verdict.dsl.verdict.Statement) SafetyRel(com.ge.research.osate.verdict.dsl.verdict.SafetyRel) AbstractType(org.osate.aadl2.AbstractType) Event(com.ge.research.osate.verdict.dsl.verdict.Event) SafetyReq(com.ge.research.osate.verdict.dsl.verdict.SafetyReq) AnnexSubclause(org.osate.aadl2.AnnexSubclause)

Example 7 with Statement

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

the class WzrdTableLoader method getStatements.

// Extract the existing statements of the current component from .aadl script
private List<Statement> getStatements(SystemTypeImpl sys) {
    List<EObject> objs = sys.eContents();
    List<Statement> stmts = new ArrayList<Statement>();
    for (int i = 0; i < objs.size(); i++) {
        if (objs.get(i) instanceof DefaultAnnexSubclauseImpl) {
            if (!((DefaultAnnexSubclauseImpl) objs.get(i)).getName().equals("verdict")) {
                continue;
            }
            Verdict vd = ((VerdictContractSubclause) ((DefaultAnnexSubclauseImpl) objs.get(i)).getParsedAnnexSubclause()).getContract();
            stmts = vd.getElements();
            break;
        }
    }
    return stmts;
}
Also used : DefaultAnnexSubclauseImpl(org.osate.aadl2.impl.DefaultAnnexSubclauseImpl) Statement(com.ge.research.osate.verdict.dsl.verdict.Statement) EObject(org.eclipse.emf.ecore.EObject) ArrayList(java.util.ArrayList) Verdict(com.ge.research.osate.verdict.dsl.verdict.Verdict) VerdictContractSubclause(com.ge.research.osate.verdict.dsl.verdict.VerdictContractSubclause)

Example 8 with Statement

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

the class StatementEditor method loadExistingMissions.

// reload the system content to take care of any change saved by used in
// .aadl script in course of current Wizard session
private List<MissionInfo> loadExistingMissions(SystemTypeImpl sys) {
    List<MissionInfo> missions = new ArrayList<MissionInfo>();
    TreeIterator<EObject> tree = sys.eAllContents();
    while (tree.hasNext()) {
        EObject tmp = tree.next();
        if (tmp instanceof DefaultAnnexSubclauseImpl) {
            if (!((DefaultAnnexSubclauseImpl) tmp).getName().equals("verdict")) {
                continue;
            }
            Verdict vd = ((VerdictContractSubclause) ((DefaultAnnexSubclauseImpl) tmp).getParsedAnnexSubclause()).getContract();
            List<Statement> stmts = vd.getElements();
            for (int i = 0; i < stmts.size(); i++) {
                if (stmts.get(i) instanceof CyberMissionImpl) {
                    MissionInfo newMission = new MissionInfo();
                    newMission.setMissionID(((CyberMissionImpl) stmts.get(i)).getId());
                    List<String> cyberReqs = ((CyberMissionImpl) stmts.get(i)).getCyberReqs();
                    for (int j = 0; j < cyberReqs.size(); j++) {
                        for (int k = 0; k < tableContent.size(); k++) {
                            if (tableContent.get(k).getFormulaID().equals(cyberReqs.get(j))) {
                                newMission.addToRow(k);
                            }
                        }
                    }
                    newMission.setComment(((CyberMissionImpl) stmts.get(i)).getNote());
                    newMission.setDescription(((CyberMissionImpl) stmts.get(i)).getDescription());
                    missions.add(newMission);
                }
            }
        }
    }
    return missions;
}
Also used : DefaultAnnexSubclauseImpl(org.osate.aadl2.impl.DefaultAnnexSubclauseImpl) Statement(com.ge.research.osate.verdict.dsl.verdict.Statement) ArrayList(java.util.ArrayList) VerdictContractSubclause(com.ge.research.osate.verdict.dsl.verdict.VerdictContractSubclause) EObject(org.eclipse.emf.ecore.EObject) CyberMissionImpl(com.ge.research.osate.verdict.dsl.verdict.impl.CyberMissionImpl) Verdict(com.ge.research.osate.verdict.dsl.verdict.Verdict)

Example 9 with Statement

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

the class StatementEditor method reloadSystem.

private SystemTypeImpl reloadSystem(SystemTypeImpl sys) {
    Resource oldResource = sys.eResource();
    ResourceSetImpl resourceSet = new ResourceSetImpl();
    resourceSet.getResourceFactoryRegistry();
    Resource resource = resourceSet.createResource(oldResource.getURI());
    try {
        resource.load(null);
    } catch (Exception e) {
        System.out.println("Error in reloading resource while saving content by Wizard.");
        e.printStackTrace();
    }
    TreeIterator<EObject> tree = resource.getAllContents();
    while (tree.hasNext()) {
        EObject anObject = tree.next();
        if (anObject instanceof SystemTypeImpl) {
            if (((SystemTypeImpl) anObject).getFullName().equals(sys.getFullName())) {
                sys = (SystemTypeImpl) anObject;
            }
        }
        // extract the existing set of IDs that are already used------------------------------------------------------
        if (anObject instanceof DefaultAnnexSubclauseImpl) {
            if (!((DefaultAnnexSubclauseImpl) anObject).getName().equals("verdict")) {
                continue;
            }
            Verdict vd = ((VerdictContractSubclause) ((DefaultAnnexSubclauseImpl) anObject).getParsedAnnexSubclause()).getContract();
            List<Statement> stmts = vd.getElements();
            for (int i = 0; i < stmts.size(); i++) {
                if (stmts.get(i) instanceof CyberMissionImpl) {
                    idSet.add(((CyberMissionImpl) stmts.get(i)).getId());
                } else if (stmts.get(i) instanceof CyberRelImpl) {
                    idSet.add(((CyberRelImpl) stmts.get(i)).getId());
                } else if (stmts.get(i) instanceof CyberReqImpl) {
                    idSet.add(((CyberReqImpl) stmts.get(i)).getId());
                }
            }
        }
    // ------------------------------------------------------------------------------------------------------------
    }
    return sys;
}
Also used : ResourceSetImpl(org.eclipse.emf.ecore.resource.impl.ResourceSetImpl) DefaultAnnexSubclauseImpl(org.osate.aadl2.impl.DefaultAnnexSubclauseImpl) Statement(com.ge.research.osate.verdict.dsl.verdict.Statement) CyberRelImpl(com.ge.research.osate.verdict.dsl.verdict.impl.CyberRelImpl) Resource(org.eclipse.emf.ecore.resource.Resource) CyberReqImpl(com.ge.research.osate.verdict.dsl.verdict.impl.CyberReqImpl) SystemTypeImpl(org.osate.aadl2.impl.SystemTypeImpl) VerdictContractSubclause(com.ge.research.osate.verdict.dsl.verdict.VerdictContractSubclause) EObject(org.eclipse.emf.ecore.EObject) CyberMissionImpl(com.ge.research.osate.verdict.dsl.verdict.impl.CyberMissionImpl) Verdict(com.ge.research.osate.verdict.dsl.verdict.Verdict)

Example 10 with Statement

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

the class WzrdDashboard method composeToolTip.

// Dynamically updates tooltiptext of the buttons
private String composeToolTip(int i) {
    String str = "";
    SystemTypeImpl sys = systems.get(i);
    List<DataPort> dpList = sys.getOwnedDataPorts();
    str = str + "IN ports:\n";
    String inLine = "";
    // wrap the string into multi-line if its lengthy-------------------------
    int inLength = 0;
    for (int j = 0; j < dpList.size(); j++) {
        if (dpList.get(j).isIn()) {
            inLength = inLength + (dpList.get(j).getFullName() + ",").length();
            inLine = inLine + dpList.get(j).getFullName() + ",";
            if (inLength > 30) {
                inLength = 0;
                inLine = inLine + "\n";
            }
        }
    }
    // -------------------------------------------------------------------------
    str = str + inLine + "\n\n";
    str = str + "OUT ports:\n";
    String outLine = "";
    int outLength = 0;
    // wrap the string into multi-line if its lengthy-------------------------
    int outCount = 0;
    for (int j = 0; j < dpList.size(); j++) {
        if (dpList.get(j).isOut()) {
            outCount++;
            outLength = outLength + (dpList.get(j).getFullName() + ",").length();
            outLine = outLine + dpList.get(j).getFullName() + ",";
            if (outLength > 30) {
                outLength = 0;
                outLine = outLine + "\n";
            }
        }
    }
    // ------------------------------------------------------------------------
    List<EObject> objs = sys.eContents();
    List<Statement> stmts = new ArrayList<Statement>();
    for (int k = 0; k < objs.size(); k++) {
        if (objs.get(k) instanceof DefaultAnnexSubclauseImpl) {
            if (!((DefaultAnnexSubclauseImpl) objs.get(k)).getName().equals("verdict")) {
                continue;
            }
            Verdict vd = ((VerdictContractSubclause) ((DefaultAnnexSubclauseImpl) objs.get(k)).getParsedAnnexSubclause()).getContract();
            stmts = vd.getElements();
            break;
        }
    }
    str = str + outLine + "\n\n";
    if (!checkIfSystem(sys)) {
        if (stmts.size() > 0) {
            str = str + "Cyber-relations:\n";
            if (stmts.size() == outCount) {
                colorTag = 0;
            } else {
                colorTag = 0;
            }
        } else {
            str = str + "No cyber-relation defined.";
            colorTag = 2;
        }
    } else {
        if (stmts.size() > 0) {
            str = str + "Cyber-requirements:\n";
        } else {
            str = str + "No cyber-requirement defined.";
        }
    }
    for (int m = 0; m < stmts.size(); m++) {
        str = str + stmts.get(m).getId() + "\n";
    }
    return str;
}
Also used : DefaultAnnexSubclauseImpl(org.osate.aadl2.impl.DefaultAnnexSubclauseImpl) Statement(com.ge.research.osate.verdict.dsl.verdict.Statement) ArrayList(java.util.ArrayList) SystemTypeImpl(org.osate.aadl2.impl.SystemTypeImpl) VerdictContractSubclause(com.ge.research.osate.verdict.dsl.verdict.VerdictContractSubclause) DataPort(org.osate.aadl2.DataPort) EObject(org.eclipse.emf.ecore.EObject) Verdict(com.ge.research.osate.verdict.dsl.verdict.Verdict)

Aggregations

Statement (com.ge.research.osate.verdict.dsl.verdict.Statement)20 Verdict (com.ge.research.osate.verdict.dsl.verdict.Verdict)20 ArrayList (java.util.ArrayList)16 CyberReq (com.ge.research.osate.verdict.dsl.verdict.CyberReq)15 AnnexSubclause (org.osate.aadl2.AnnexSubclause)15 SafetyReq (com.ge.research.osate.verdict.dsl.verdict.SafetyReq)14 CyberMission (com.ge.research.osate.verdict.dsl.verdict.CyberMission)13 CyberRel (com.ge.research.osate.verdict.dsl.verdict.CyberRel)13 Event (com.ge.research.osate.verdict.dsl.verdict.Event)13 SafetyRel (com.ge.research.osate.verdict.dsl.verdict.SafetyRel)13 DataPort (org.osate.aadl2.DataPort)11 EventDataPort (org.osate.aadl2.EventDataPort)11 EventPort (org.osate.aadl2.EventPort)11 Port (verdict.vdm.vdm_model.Port)11 EObject (org.eclipse.emf.ecore.EObject)9 BusAccess (org.osate.aadl2.BusAccess)7 DataAccess (org.osate.aadl2.DataAccess)6 VerdictContractSubclause (com.ge.research.osate.verdict.dsl.verdict.VerdictContractSubclause)5 DefaultAnnexSubclauseImpl (org.osate.aadl2.impl.DefaultAnnexSubclauseImpl)5 SystemType (org.osate.aadl2.SystemType)4