Search in sources :

Example 1 with Property

use of org.hl7.elm.r1.Property in project VERDICT by ge-high-assurance.

the class Aadl2CsvTranslator method buildScnCompPropsTable.

/**
 * @return a scenario component properties table
 */
public Table buildScnCompPropsTable() {
    // "Scenario", "Comp", "Impl", "CompInstance"
    List<String> headers = new ArrayList<String>(Arrays.asList("Scenario", "Comp", "Impl", "CompInstance"));
    headers.addAll(componentPropertyToName.values());
    // for(Map.Entry<String, List<Property>> entry : propSetNameToCompProps.entrySet()) {
    // for(Property prop : entry.getValue()) {
    // headers.add(prop.getName());
    // }
    // }
    Table scnCompPropsTable = new Table(headers);
    for (ComponentImplementation sysImpl : compImpls) {
        if (sysImpl.getOwnedSubcomponents() != null && !sysImpl.getOwnedSubcomponents().isEmpty()) {
            for (Subcomponent subcomp : sysImpl.getOwnedSubcomponents()) {
                String subcompCompTypeName = subcomp.getComponentType().getName();
                String subcompTypeName = subcomp.getSubcomponentType().getName();
                String compCatName = subcomp.getCategory().getName().toLowerCase();
                scnCompPropsTable.addValue(scenario);
                scnCompPropsTable.addValue(subcomp.getComponentType().getName());
                scnCompPropsTable.addValue(subcompCompTypeName.equalsIgnoreCase(subcompTypeName) ? "" : subcompTypeName);
                scnCompPropsTable.addValue(subcomp.getName());
                for (Property prop : componentPropertyToName.keySet()) {
                    if (isApplicableToCat(prop, compCatName)) {
                        String value = "";
                        PropertyAcc propAcc = subcomp.getPropertyValue(prop);
                        PropertyExpression defPropExpr = prop.getDefaultValue();
                        int lastColon = prop.getName().lastIndexOf(":");
                        String propName = lastColon != -1 ? prop.getName().substring(lastColon + 1) : prop.getName();
                        if (synthesis && DefenseProperties.MBAA_COMP_DEFENSE_PROPERTIES_SET.contains(propName)) {
                            // this fools stem
                            value = "9";
                        } else if (propAcc != null && !propAcc.getAssociations().isEmpty()) {
                            value = getStrRepofPropVal(subcomp.getPropertyValue(prop));
                        } else if (defPropExpr != null) {
                            value = getStrRepofExpr(defPropExpr)[0];
                        }
                        scnCompPropsTable.addValue(value);
                    } else {
                        scnCompPropsTable.addValue("");
                    }
                }
                scnCompPropsTable.capRow();
            }
        }
    }
    return scnCompPropsTable;
}
Also used : ComponentImplementation(org.osate.aadl2.ComponentImplementation) ThreadSubcomponent(org.osate.aadl2.ThreadSubcomponent) BusSubcomponent(org.osate.aadl2.BusSubcomponent) Subcomponent(org.osate.aadl2.Subcomponent) MemorySubcomponent(org.osate.aadl2.MemorySubcomponent) ThreadGroupSubcomponent(org.osate.aadl2.ThreadGroupSubcomponent) SubprogramSubcomponent(org.osate.aadl2.SubprogramSubcomponent) DeviceSubcomponent(org.osate.aadl2.DeviceSubcomponent) ProcessSubcomponent(org.osate.aadl2.ProcessSubcomponent) SystemSubcomponent(org.osate.aadl2.SystemSubcomponent) AbstractSubcomponent(org.osate.aadl2.AbstractSubcomponent) DataSubcomponent(org.osate.aadl2.DataSubcomponent) VirtualProcessorSubcomponent(org.osate.aadl2.VirtualProcessorSubcomponent) ArrayList(java.util.ArrayList) PropertyAcc(org.osate.aadl2.properties.PropertyAcc) PropertyExpression(org.osate.aadl2.PropertyExpression) Property(org.osate.aadl2.Property)

Example 2 with Property

use of org.hl7.elm.r1.Property in project VERDICT by ge-high-assurance.

the class Aadl2CsvTranslator method populateDataFromAadlObjects.

/**
 * Assume the input model is correct without any syntax errors
 * Populate mission req, cyber and safety reqs and rels from AADL objects
 */
public void populateDataFromAadlObjects(List<EObject> objects) {
    List<ComponentType> componentTypes = new ArrayList<>();
    for (EObject obj : objects) {
        if (obj instanceof SystemType) {
            componentTypes.add((SystemType) obj);
        } else if (obj instanceof BusType) {
            componentTypes.add((BusType) obj);
        } else if (obj instanceof SubprogramType) {
            componentTypes.add((SubprogramType) obj);
        } else if (obj instanceof ThreadType) {
            componentTypes.add((ThreadType) obj);
        } else if (obj instanceof MemoryType) {
            componentTypes.add((MemoryType) obj);
        } else if (obj instanceof DeviceType) {
            componentTypes.add((DeviceType) obj);
        } else if (obj instanceof AbstractType) {
            componentTypes.add((AbstractType) obj);
        } else if (obj instanceof ProcessType) {
            componentTypes.add((ProcessType) obj);
        } else if (obj instanceof ThreadGroupType) {
            componentTypes.add((ThreadGroupType) obj);
        } else if (obj instanceof VirtualProcessorType) {
            componentTypes.add((VirtualProcessorType) obj);
        } else if (obj instanceof ProcessorType) {
            componentTypes.add((ProcessorType) obj);
        } else if (obj instanceof SystemImplementation) {
            compImpls.add((SystemImplementation) obj);
        } else if (obj instanceof SubprogramImplementation) {
            compImpls.add((SubprogramImplementation) obj);
        } else if (obj instanceof ThreadImplementation) {
            compImpls.add((ThreadImplementation) obj);
        } else if (obj instanceof MemoryImplementation) {
            compImpls.add((MemoryImplementation) obj);
        } else if (obj instanceof BusImplementation) {
            compImpls.add((BusImplementation) obj);
        } else if (obj instanceof AbstractImplementation) {
            compImpls.add((AbstractImplementation) obj);
        } else if (obj instanceof DeviceImplementation) {
            compImpls.add((DeviceImplementation) obj);
        } else if (obj instanceof ProcessImplementation) {
            compImpls.add((ProcessImplementation) obj);
        } else if (obj instanceof ThreadGroupImplementation) {
            compImpls.add((ThreadGroupImplementation) obj);
        } else if (obj instanceof VirtualProcessorImplementation) {
            compImpls.add((VirtualProcessorImplementation) obj);
        } else if (obj instanceof ProcessorImplementation) {
            compImpls.add((ProcessorImplementation) obj);
        } else if (obj instanceof PropertySetImpl) {
            // String propertySetName = ((PropertySetImpl)obj).getName();
            // List<Property> compProps = new ArrayList<Property>();
            Set<Property> compPropSet = new HashSet<Property>();
            // List<Property> connProps = new ArrayList<Property>();
            Set<Property> connPropSet = new HashSet<Property>();
            for (Property prop : ((PropertySetImpl) obj).getOwnedProperties()) {
                // Save property owner to be used later
                for (PropertyOwner po : prop.getAppliesTos()) {
                    String propCat = ((MetaclassReferenceImpl) po).getMetaclass().getName().toLowerCase();
                    String propName = prop.getName();
                    switch(propCat) {
                        case "system":
                            {
                                componentPropertyToName.put(prop, propName);
                                compPropSet.add(prop);
                                break;
                            }
                        case "thread":
                            {
                                componentPropertyToName.put(prop, propName);
                                compPropSet.add(prop);
                                break;
                            }
                        case "processor":
                            {
                                componentPropertyToName.put(prop, propName);
                                compPropSet.add(prop);
                                break;
                            }
                        case "memory":
                            {
                                componentPropertyToName.put(prop, propName);
                                compPropSet.add(prop);
                                break;
                            }
                        case "connection":
                            {
                                connPropertyToName.put(prop, propName);
                                connPropSet.add(prop);
                                break;
                            }
                        case "process":
                            {
                                componentPropertyToName.put(prop, propName);
                                compPropSet.add(prop);
                                break;
                            }
                        case "abstract":
                            {
                                componentPropertyToName.put(prop, propName);
                                compPropSet.add(prop);
                                break;
                            }
                        case "device":
                            {
                                componentPropertyToName.put(prop, propName);
                                compPropSet.add(prop);
                                break;
                            }
                        case "threadgroup":
                            {
                                componentPropertyToName.put(prop, propName);
                                compPropSet.add(prop);
                                break;
                            }
                        case "virtualprocessor":
                            {
                                componentPropertyToName.put(prop, propName);
                                compPropSet.add(prop);
                                break;
                            }
                        case "bus":
                            {
                                componentPropertyToName.put(prop, propName);
                                compPropSet.add(prop);
                                break;
                            }
                        default:
                            {
                                System.out.println("Warning: unsupported property applies to: " + propCat);
                                break;
                            }
                    }
                }
            }
        // compProps.addAll(compPropSet);
        // connProps.addAll(connPropSet);
        // propSetNameToCompProps.put(propertySetName, compProps);
        // propSetNameToConnProps.put(propertySetName, connProps);
        }
    }
    for (ComponentType compType : componentTypes) {
        String compTypeName = compType.getName();
        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<>();
        for (AnnexSubclause annex : compType.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);
                    }
                }
            }
        }
        if (!events.isEmpty()) {
            compTypeNameToEvents.put(compTypeName, events);
        }
        if (!missionReqs.isEmpty()) {
            compTypeNameToMissions.put(compTypeName, missionReqs);
        }
        if (!cyberRels.isEmpty()) {
            compTypeNameToCyberRels.put(compTypeName, cyberRels);
        }
        if (!safetyRels.isEmpty()) {
            compTypeNameToSafetyRels.put(compTypeName, safetyRels);
        }
        if (!cyberReqs.isEmpty()) {
            compTypeNameToCyberReqs.put(compTypeName, cyberReqs);
        }
        if (!safetyReqs.isEmpty()) {
            compTypeNameToSafetyReqs.put(compTypeName, safetyReqs);
        }
    }
    for (ComponentImplementation impl : compImpls) {
        compTypeNameToImpl.put(impl.getType().getName(), impl);
        if (!impl.getAllConnections().isEmpty()) {
            sysImplToConns.put(impl, impl.getAllConnections());
        }
    }
}
Also used : ProcessImplementation(org.osate.aadl2.ProcessImplementation) ArrayList(java.util.ArrayList) SystemType(org.osate.aadl2.SystemType) VirtualProcessorImplementation(org.osate.aadl2.VirtualProcessorImplementation) BusImplementation(org.osate.aadl2.BusImplementation) EObject(org.eclipse.emf.ecore.EObject) ThreadImplementation(org.osate.aadl2.ThreadImplementation) HashSet(java.util.HashSet) Verdict(com.ge.research.osate.verdict.dsl.verdict.Verdict) ThreadGroupType(org.osate.aadl2.ThreadGroupType) ThreadGroupImplementation(org.osate.aadl2.ThreadGroupImplementation) PropertySetImpl(org.osate.aadl2.impl.PropertySetImpl) DeviceType(org.osate.aadl2.DeviceType) ThreadType(org.osate.aadl2.ThreadType) AbstractType(org.osate.aadl2.AbstractType) SubprogramType(org.osate.aadl2.SubprogramType) AbstractImplementation(org.osate.aadl2.AbstractImplementation) AnnexSubclause(org.osate.aadl2.AnnexSubclause) ComponentImplementation(org.osate.aadl2.ComponentImplementation) MemoryImplementation(org.osate.aadl2.MemoryImplementation) PropertyOwner(org.osate.aadl2.PropertyOwner) BusType(org.osate.aadl2.BusType) VirtualProcessorType(org.osate.aadl2.VirtualProcessorType) ProcessorType(org.osate.aadl2.ProcessorType) MetaclassReferenceImpl(org.osate.aadl2.impl.MetaclassReferenceImpl) ProcessType(org.osate.aadl2.ProcessType) ProcessorImplementation(org.osate.aadl2.ProcessorImplementation) VirtualProcessorImplementation(org.osate.aadl2.VirtualProcessorImplementation) VirtualProcessorType(org.osate.aadl2.VirtualProcessorType) Property(org.osate.aadl2.Property) MemoryType(org.osate.aadl2.MemoryType) CyberRel(com.ge.research.osate.verdict.dsl.verdict.CyberRel) ComponentType(org.osate.aadl2.ComponentType) CyberMission(com.ge.research.osate.verdict.dsl.verdict.CyberMission) CyberReq(com.ge.research.osate.verdict.dsl.verdict.CyberReq) Statement(com.ge.research.osate.verdict.dsl.verdict.Statement) SubprogramImplementation(org.osate.aadl2.SubprogramImplementation) SystemImplementation(org.osate.aadl2.SystemImplementation) SafetyRel(com.ge.research.osate.verdict.dsl.verdict.SafetyRel) Event(com.ge.research.osate.verdict.dsl.verdict.Event) DeviceImplementation(org.osate.aadl2.DeviceImplementation) SafetyReq(com.ge.research.osate.verdict.dsl.verdict.SafetyReq)

Example 3 with Property

use of org.hl7.elm.r1.Property in project VERDICT by ge-high-assurance.

the class ThreatModelUtil method getTypes.

/**
 * Build a map from type names to types. Traverses all files
 * in the current project looking for property declarations, which
 * are used to populate fields for the built-in types.
 *
 * Built-in types are system, connection, and port (also portDirection).
 *
 * This method is not very efficient, and it gets called several times
 * on every keystroke. Fortunately there still seems to be reasonably fast.
 * A crucial optimization will be caching the results because the set of
 * properties does not change that frequently.
 *
 * @param obj an AST node context, used to get access to project files
 * @param indexProvider an index provider, may be obtained through Guice
 * @return the constructed type map
 */
public static LinkedHashMap<String, VerdictType> getTypes(EObject obj, ResourceDescriptionsProvider indexProvider) {
    LinkedHashMap<String, VerdictType> types = new LinkedHashMap<>();
    // Three main built-in types
    BuiltInType connection = new BuiltInType("connection");
    BuiltInType port = new BuiltInType("port");
    BuiltInType system = new BuiltInType("system");
    addBuiltin(types, connection);
    addBuiltin(types, port);
    addBuiltin(types, system);
    // Connection fields
    connection.addField("inPort", port);
    connection.addField("outPort", port);
    connection.addField("source", system);
    connection.addField("dest", system);
    // Port direction
    BuiltInType portDir = new BuiltInType("portDirection");
    portDir.addValue("in");
    portDir.addValue("out");
    // Port fields
    port.addField("direction", portDir);
    port.addField("connections", connection.getListType());
    // System fields
    system.addField("subcomponents", system.getListType());
    system.addField("connections", connection.getListType());
    system.addField("ports", port.getListType());
    // Get the path to the current resource, used to get the project path
    String[] resSegments = obj.eResource().getURI().segments();
    // Iterate through all resources
    IResourceDescriptions index = indexProvider.getResourceDescriptions(obj.eResource());
    descLoop: for (IEObjectDescription desc : index.getExportedObjectsByType(Aadl2Package.eINSTANCE.getPropertySet())) {
        // Get the path to the resource we are examining
        String[] propsResSegments = desc.getEObjectURI().segments();
        // The project is determined by the first two URI segments
        for (int i = 0; i < Math.min(2, Math.min(resSegments.length, propsResSegments.length)); i++) {
            if (!resSegments[i].equals(propsResSegments[i])) {
                continue descLoop;
            }
        }
        // Load the resource into EMF-land; dynamically loads if necessary
        Resource res = obj.eResource().getResourceSet().getResource(desc.getEObjectURI(), true);
        if (res != null) {
            // Search the AST
            TreeIterator<EObject> it = res.getAllContents();
            while (it.hasNext()) {
                EObject next = it.next();
                if (next instanceof PropertySet) {
                    PropertySet props = (PropertySet) next;
                    // Iterate the declared properties
                    for (Element elem : props.getOwnedElements()) {
                        if (elem instanceof Property) {
                            Property prop = (Property) elem;
                            // Make sure type information is present
                            if (prop.getPropertyType() != null) {
                                // the types for which the property is a field
                                for (MetaclassReference meta : prop.getAppliesToMetaclasses()) {
                                    // Get type name, lowercase it because it is a class name
                                    String appliesToMetaclass = meta.getMetaclass().getName().toLowerCase();
                                    // Hopefully this is a type that we have accounted for
                                    if (types.containsKey(appliesToMetaclass)) {
                                        ((BuiltInType) types.get(appliesToMetaclass)).addField(prop.getName(), new AadlTypeWrapper(prop.getName(), prop.getPropertyType()));
                                    } else {
                                        // If we get this error message, then perhaps need to add
                                        // some built-in types
                                        System.err.println("could not find built in type: " + appliesToMetaclass);
                                    }
                                }
                            }
                        }
                    }
                    // Discard all children of the property set
                    it.prune();
                }
            }
        }
    }
    // Prevent synchronization issues
    portDir.lock();
    connection.lock();
    port.lock();
    system.lock();
    return types;
}
Also used : Element(org.osate.aadl2.Element) Resource(org.eclipse.emf.ecore.resource.Resource) AadlTypeWrapper(com.ge.research.osate.verdict.dsl.type.AadlTypeWrapper) BuiltInType(com.ge.research.osate.verdict.dsl.type.BuiltInType) LinkedHashMap(java.util.LinkedHashMap) IEObjectDescription(org.eclipse.xtext.resource.IEObjectDescription) VerdictType(com.ge.research.osate.verdict.dsl.type.VerdictType) IResourceDescriptions(org.eclipse.xtext.resource.IResourceDescriptions) EObject(org.eclipse.emf.ecore.EObject) PropertySet(org.osate.aadl2.PropertySet) MetaclassReference(org.osate.aadl2.MetaclassReference) TreeIterator(org.eclipse.emf.common.util.TreeIterator) Property(org.osate.aadl2.Property)

Example 4 with Property

use of org.hl7.elm.r1.Property in project VERDICT by ge-high-assurance.

the class Aadl2Vdm method populateVDMFromAadlObjects.

/**
 * Assume the input is correct without any syntax errors
 * Populate mission req, cyber and safety reqs and rels from AADL objects
 *
 *  @param objects a List of AADL objects,
 * @param objectsFromFilesInProject
 * 	@param model an empty VDM model to populate
 *  @return a populated VDM model
 * Vidhya: modified function to add and process only objects in the aadl files in the project excluding those in imported aadl files
 */
public Model populateVDMFromAadlObjects(List<EObject> objects, List<EObject> objectsFromFilesInProject, Model model) {
    HashSet<String> dataTypeDecl = new HashSet<String>();
    // variables for extracting data from the AADL object
    List<SystemType> systemTypes = new ArrayList<>();
    List<BusType> busTypes = new ArrayList<>();
    List<SubprogramType> subprogramTypes = new ArrayList<>();
    List<ThreadType> threadTypes = new ArrayList<>();
    List<MemoryType> memoryTypes = new ArrayList<>();
    List<DeviceType> deviceTypes = new ArrayList<>();
    List<AbstractType> abstractTypes = new ArrayList<>();
    List<ProcessType> processTypes = new ArrayList<>();
    List<ThreadGroupType> threadGroupTypes = new ArrayList<>();
    List<VirtualProcessorType> virtualProcessorTypes = new ArrayList<>();
    List<ProcessorType> processorTypes = new ArrayList<>();
    List<ComponentImplementation> compImpls = new ArrayList<>();
    Map<Property, String> connPropertyToName = new LinkedHashMap<>();
    Map<Property, String> componentPropertyToName = new LinkedHashMap<>();
    // process only those properties defined in files in the project and not in the imported files
    HashSet<String> objectNamesFromFilesInProject = getObjectNames(objectsFromFilesInProject);
    // extracting data from the AADLObject
    for (EObject obj : objects) {
        if (obj instanceof SystemType) {
            if (objectNamesFromFilesInProject.contains(((SystemType) obj).getName())) {
                systemTypes.add((SystemType) obj);
            }
        } else if (obj instanceof BusType) {
            if (objectNamesFromFilesInProject.contains(((BusType) obj).getName())) {
                busTypes.add((BusType) obj);
            }
        } else if (obj instanceof SubprogramType) {
            if (objectNamesFromFilesInProject.contains(((SubprogramType) obj).getName())) {
                subprogramTypes.add((SubprogramType) obj);
            }
        } else if (obj instanceof ThreadType) {
            if (objectNamesFromFilesInProject.contains(((ThreadType) obj).getName())) {
                threadTypes.add((ThreadType) obj);
            }
        } else if (obj instanceof MemoryType) {
            if (objectNamesFromFilesInProject.contains(((MemoryType) obj).getName())) {
                memoryTypes.add((MemoryType) obj);
            }
        } else if (obj instanceof DeviceType) {
            if (objectNamesFromFilesInProject.contains(((DeviceType) obj).getName())) {
                deviceTypes.add((DeviceType) obj);
            }
        } else if (obj instanceof AbstractType) {
            if (objectNamesFromFilesInProject.contains(((AbstractType) obj).getName())) {
                abstractTypes.add((AbstractType) obj);
            }
        } else if (obj instanceof ProcessType) {
            if (objectNamesFromFilesInProject.contains(((ProcessType) obj).getName())) {
                processTypes.add((ProcessType) obj);
            }
        } else if (obj instanceof ThreadGroupType) {
            if (objectNamesFromFilesInProject.contains(((ThreadGroupType) obj).getName())) {
                threadGroupTypes.add((ThreadGroupType) obj);
            }
        } else if (obj instanceof VirtualProcessorType) {
            if (objectNamesFromFilesInProject.contains(((VirtualProcessorType) obj).getName())) {
                virtualProcessorTypes.add((VirtualProcessorType) obj);
            }
        } else if (obj instanceof ProcessorType) {
            if (objectNamesFromFilesInProject.contains(((ProcessorType) obj).getName())) {
                processorTypes.add((ProcessorType) obj);
            }
        } else if (obj instanceof SystemImplementation) {
            if (objectNamesFromFilesInProject.contains(((SystemImplementation) obj).getName())) {
                compImpls.add((SystemImplementation) obj);
            }
        } else if (obj instanceof SubprogramImplementation) {
            if (objectNamesFromFilesInProject.contains(((SubprogramImplementation) obj).getName())) {
                compImpls.add((SubprogramImplementation) obj);
            }
        } else if (obj instanceof ThreadImplementation) {
            if (objectNamesFromFilesInProject.contains(((ThreadImplementation) obj).getName())) {
                compImpls.add((ThreadImplementation) obj);
            }
        } else if (obj instanceof MemoryImplementation) {
            if (objectNamesFromFilesInProject.contains(((MemoryImplementation) obj).getName())) {
                compImpls.add((MemoryImplementation) obj);
            }
        } else if (obj instanceof BusImplementation) {
            if (objectNamesFromFilesInProject.contains(((BusImplementation) obj).getName())) {
                compImpls.add((BusImplementation) obj);
            }
        } else if (obj instanceof AbstractImplementation) {
            if (objectNamesFromFilesInProject.contains(((AbstractImplementation) obj).getName())) {
                compImpls.add((AbstractImplementation) obj);
            }
        } else if (obj instanceof DeviceImplementation) {
            if (objectNamesFromFilesInProject.contains(((DeviceImplementation) obj).getName())) {
                compImpls.add((DeviceImplementation) obj);
            }
        } else if (obj instanceof ProcessImplementation) {
            if (objectNamesFromFilesInProject.contains(((ProcessImplementation) obj).getName())) {
                compImpls.add((ProcessImplementation) obj);
            }
        } else if (obj instanceof ThreadGroupImplementation) {
            if (objectNamesFromFilesInProject.contains(((ThreadGroupImplementation) obj).getName())) {
                compImpls.add((ThreadGroupImplementation) obj);
            }
        } else if (obj instanceof VirtualProcessorImplementation) {
            if (objectNamesFromFilesInProject.contains(((VirtualProcessorImplementation) obj).getName())) {
                compImpls.add((VirtualProcessorImplementation) obj);
            }
        } else if (obj instanceof ProcessorImplementation) {
            if (objectNamesFromFilesInProject.contains(((ProcessorImplementation) obj).getName())) {
                compImpls.add((ProcessorImplementation) obj);
            }
        } else if (obj instanceof PropertySetImpl) {
            Set<Property> compPropSet = new HashSet<Property>();
            Set<Property> connPropSet = new HashSet<Property>();
            for (Property prop : ((PropertySetImpl) obj).getOwnedProperties()) {
                // Save property owner to be used later
                for (PropertyOwner po : prop.getAppliesTos()) {
                    String propCat = ((MetaclassReferenceImpl) po).getMetaclass().getName().toLowerCase();
                    String propName = prop.getName();
                    switch(propCat) {
                        case "system":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    componentPropertyToName.put(prop, propName);
                                }
                                compPropSet.add(prop);
                                break;
                            }
                        case "thread":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    componentPropertyToName.put(prop, propName);
                                }
                                compPropSet.add(prop);
                                break;
                            }
                        case "processor":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    componentPropertyToName.put(prop, propName);
                                }
                                compPropSet.add(prop);
                                break;
                            }
                        case "memory":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    componentPropertyToName.put(prop, propName);
                                }
                                compPropSet.add(prop);
                                break;
                            }
                        case "connection":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    connPropertyToName.put(prop, propName);
                                }
                                connPropSet.add(prop);
                                break;
                            }
                        case "process":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    componentPropertyToName.put(prop, propName);
                                }
                                compPropSet.add(prop);
                                break;
                            }
                        case "abstract":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    componentPropertyToName.put(prop, propName);
                                }
                                compPropSet.add(prop);
                                break;
                            }
                        case "device":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    componentPropertyToName.put(prop, propName);
                                }
                                compPropSet.add(prop);
                                break;
                            }
                        case "threadgroup":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    componentPropertyToName.put(prop, propName);
                                }
                                compPropSet.add(prop);
                                break;
                            }
                        case "virtualprocessor":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    componentPropertyToName.put(prop, propName);
                                }
                                compPropSet.add(prop);
                                break;
                            }
                        case "bus":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    componentPropertyToName.put(prop, propName);
                                }
                                compPropSet.add(prop);
                                break;
                            }
                        case "port":
                            {
                                if (objectNamesFromFilesInProject.contains(propName)) {
                                    componentPropertyToName.put(prop, propName);
                                }
                                compPropSet.add(prop);
                                break;
                            }
                        default:
                            {
                                if (objectNamesFromFilesInProject.contains(((PropertySetImpl) obj).getName())) {
                                    System.out.println("Warning: unsupported property: " + propName + ", applies to: " + propCat);
                                }
                                break;
                            }
                    }
                }
            }
        }
    }
    /* Translating all Component Types */
    if (systemTypes.size() > 0) {
        model = translateSystemTypeObjects(systemTypes, model, dataTypeDecl);
    }
    if (busTypes.size() > 0) {
        model = translateBusTypeObjects(busTypes, model, dataTypeDecl);
    }
    if (subprogramTypes.size() > 0) {
        model = translateSubprogramTypeObjects(subprogramTypes, model, dataTypeDecl);
    }
    if (threadTypes.size() > 0) {
        model = translateThreadTypeObjects(threadTypes, model, dataTypeDecl);
    }
    if (memoryTypes.size() > 0) {
        model = translateMemoryTypeObjects(memoryTypes, model, dataTypeDecl);
    }
    if (deviceTypes.size() > 0) {
        model = translateDeviceTypeObjects(deviceTypes, model, dataTypeDecl);
    }
    if (abstractTypes.size() > 0) {
        model = translateAbstractTypeObjects(abstractTypes, model, dataTypeDecl);
    }
    if (processTypes.size() > 0) {
        model = translateProcessTypeObjects(processTypes, model, dataTypeDecl);
    }
    if (processTypes.size() > 0) {
        model = translateProcessorTypeObjects(processorTypes, model, dataTypeDecl);
    }
    if (threadGroupTypes.size() > 0) {
        model = translateThreadGroupTypeObjects(threadGroupTypes, model, dataTypeDecl);
    }
    if (virtualProcessorTypes.size() > 0) {
        model = translateVirtualProcessorTypeObjects(virtualProcessorTypes, model, dataTypeDecl);
    }
    /* Translating all System Implementations */
    // model = translateSystemImplObjects(systemImpls, componentPropertyToName, connPropertyToName,model);
    // model = translateComponentImplObjects(compImpls, componentPropertyToName, connPropertyToName,model);
    /**
     * Translating all component implementations
     */
    model = translateComponentImplObjects(compImpls, componentPropertyToName, connPropertyToName, model, dataTypeDecl);
    // return the final model
    return model;
}
Also used : ComponentImplementation(org.osate.aadl2.ComponentImplementation) ProcessImplementation(org.osate.aadl2.ProcessImplementation) MemoryImplementation(org.osate.aadl2.MemoryImplementation) PropertyOwner(org.osate.aadl2.PropertyOwner) BusType(org.osate.aadl2.BusType) VirtualProcessorType(org.osate.aadl2.VirtualProcessorType) ProcessorType(org.osate.aadl2.ProcessorType) ArrayList(java.util.ArrayList) SystemType(org.osate.aadl2.SystemType) VirtualProcessorImplementation(org.osate.aadl2.VirtualProcessorImplementation) LinkedHashMap(java.util.LinkedHashMap) BusImplementation(org.osate.aadl2.BusImplementation) MetaclassReferenceImpl(org.osate.aadl2.impl.MetaclassReferenceImpl) ProcessType(org.osate.aadl2.ProcessType) ProcessorImplementation(org.osate.aadl2.ProcessorImplementation) VirtualProcessorImplementation(org.osate.aadl2.VirtualProcessorImplementation) EObject(org.eclipse.emf.ecore.EObject) ThreadImplementation(org.osate.aadl2.ThreadImplementation) VirtualProcessorType(org.osate.aadl2.VirtualProcessorType) Property(org.osate.aadl2.Property) HashSet(java.util.HashSet) MemoryType(org.osate.aadl2.MemoryType) ThreadGroupType(org.osate.aadl2.ThreadGroupType) ThreadGroupImplementation(org.osate.aadl2.ThreadGroupImplementation) SubprogramImplementation(org.osate.aadl2.SubprogramImplementation) PropertySetImpl(org.osate.aadl2.impl.PropertySetImpl) DeviceType(org.osate.aadl2.DeviceType) ThreadType(org.osate.aadl2.ThreadType) SystemImplementation(org.osate.aadl2.SystemImplementation) AbstractType(org.osate.aadl2.AbstractType) SubprogramType(org.osate.aadl2.SubprogramType) AbstractImplementation(org.osate.aadl2.AbstractImplementation) DeviceImplementation(org.osate.aadl2.DeviceImplementation)

Example 5 with Property

use of org.hl7.elm.r1.Property in project VERDICT by ge-high-assurance.

the class Aadl2Vdm method translateComponentImplObjects.

// End of translateProcessorTypeObjects
/**
 * Analyzing each component implementation
 * @param comImpls
 * @param m2
 * @return
 */
public Model translateComponentImplObjects(List<ComponentImplementation> comImpls, Map<Property, String> componentPropertyToName, Map<Property, String> connPropertyToName, Model m2, HashSet<String> dataTypeDecl) {
    Map<String, String> connectionToBusMap = new HashMap<>();
    // creating an object for each implementation first as we will need it later
    for (ComponentImplementation aSystemImpl : comImpls) {
        // to pack the sysImpl as a VDM componentImpl
        verdict.vdm.vdm_model.ComponentImpl packCompImpl = new verdict.vdm.vdm_model.ComponentImpl();
        // setting "name" field of packCompImpl, will need later
        packCompImpl.setName(aSystemImpl.getName());
        // Note: Will skip "Nodebody" field for now
        // ISSUE: No "id" field in Component implementations
        packCompImpl.setId(aSystemImpl.getQualifiedName());
        // adding object to "componentImpl" field of m2
        m2.getComponentImpl().add(packCompImpl);
        // update map (connection-name -> bus-Instance-Name)
        for (PropertyAssociation propAssoc : aSystemImpl.getOwnedPropertyAssociations()) {
            if (!(propAssoc.getProperty().getName().equalsIgnoreCase("Actual_Connection_Binding"))) {
                System.out.println("System Implementation contains property " + propAssoc.getProperty().getName() + " which is not currently handled.");
                continue;
            }
            if (propAssoc.getOwnedValues().size() != 1) {
                throw new RuntimeException("Unexpected number of property owned values: " + propAssoc.getOwnedValues().size());
            }
            if (!(propAssoc.getOwnedValues().get(0).getOwnedValue() instanceof ListValueImpl)) {
                throw new RuntimeException("Unexpected type of property owned value");
            } else {
                ListValueImpl listVal = (ListValueImpl) propAssoc.getOwnedValues().get(0).getOwnedValue();
                if (listVal.getOwnedListElements().size() != 1) {
                    throw new RuntimeException("Unexpected number of list elements are associated with the property owned value");
                } else if (!(listVal.getOwnedListElements().get(0) instanceof ReferenceValueImpl)) {
                    throw new RuntimeException("Unexpected number of list elements are associated with the property owned value");
                } else {
                    ReferenceValueImpl refVal = (ReferenceValueImpl) listVal.getOwnedListElements().get(0);
                    ContainmentPathElement pathEle = refVal.getPath();
                    while (!(pathEle.getNamedElement() instanceof BusSubcomponent)) {
                        pathEle = pathEle.getPath();
                    }
                    String busInstanceName = pathEle.getNamedElement().getQualifiedName();
                    for (ContainedNamedElement connection : propAssoc.getAppliesTos()) {
                        // updating map (connection name -> bus name)
                        connectionToBusMap.put(connection.getPath().getNamedElement().getQualifiedName(), busInstanceName);
                    }
                }
            }
        }
    }
    // Getting the reference of the object previously created and populating
    for (ComponentImplementation aCompImpl : comImpls) {
        // variable to refer to previously created object
        verdict.vdm.vdm_model.ComponentImpl packCompImpl = new verdict.vdm.vdm_model.ComponentImpl();
        // finding previously created object
        for (verdict.vdm.vdm_model.ComponentImpl anImplObj : m2.getComponentImpl()) {
            if (anImplObj.getId().equalsIgnoreCase(aCompImpl.getQualifiedName())) {
                packCompImpl = anImplObj;
            }
        }
        // setting "type" field of packCompImpl
        for (verdict.vdm.vdm_model.ComponentType cType : m2.getComponentType()) {
            if (aCompImpl.getType().getQualifiedName().equals(cType.getId())) {
                packCompImpl.setType(cType);
            }
        }
        // End of setting "type"
        // a BlockImpl object to pack all info for packCompImpl.blockImpl
        verdict.vdm.vdm_model.BlockImpl packBlockImpl = new verdict.vdm.vdm_model.BlockImpl();
        // adding all subcomponents to "subcomponent" field of packBlockImpl
        for (Subcomponent aSubComp : aCompImpl.getOwnedSubcomponents()) {
            // to pack all information of a subcomponent
            verdict.vdm.vdm_model.ComponentInstance packSubComp = new verdict.vdm.vdm_model.ComponentInstance();
            // ISSUE: No "id" field in subcomponents
            packSubComp.setId(aSubComp.getQualifiedName());
            // setting "name" field of packSubComp
            packSubComp.setName(aSubComp.getFullName());
            // setting "specification" field of packSubComp
            for (verdict.vdm.vdm_model.ComponentType cType : m2.getComponentType()) {
                if (aSubComp.getComponentType().getName().equals(cType.getName())) {
                    packSubComp.setSpecification(cType);
                }
            }
            // setting the "implementation" field of packSubComp
            for (verdict.vdm.vdm_model.ComponentImpl cImpl : m2.getComponentImpl()) {
                // if(aSubComp.getSubcomponentType().getName().equals(cImpl.getName())){
                if (aSubComp.getSubcomponentType().getQualifiedName().equals(cImpl.getId())) {
                    packSubComp.setImplementation(cImpl);
                }
            }
            // setting "attribute" field of packSubComp
            // category of subComponent
            String aSubCompCatName = aSubComp.getCategory().getName().toLowerCase();
            // checking all collected properties in componentPropertyToName
            for (Property prop : componentPropertyToName.keySet()) {
                if (isApplicableToCat(prop, aSubCompCatName)) {
                    // create a GenericAttribute object to pack the property
                    verdict.vdm.vdm_data.GenericAttribute anAttribute = new verdict.vdm.vdm_data.GenericAttribute();
                    String value = "";
                    PropertyAcc propAcc = aSubComp.getPropertyValue(prop);
                    PropertyExpression defPropExpr = prop.getDefaultValue();
                    if (propAcc != null && !propAcc.getAssociations().isEmpty()) {
                        value = getStrRepofPropVal(aSubComp.getPropertyValue(prop));
                    } else if (defPropExpr != null) {
                        value = getStrRepofExpr(defPropExpr)[0];
                    }
                    if (!value.equals("")) {
                        // setting the "name" and "value" field of anAttribute
                        anAttribute.setName(componentPropertyToName.get(prop));
                        anAttribute.setValue(value);
                        // get the property type
                        PropertyType propType = prop.getPropertyType();
                        QName type = new QName("String");
                        if (propType instanceof AadlBooleanImpl) {
                            type = new QName("Bool");
                        } else if (propType instanceof AadlIntegerImpl) {
                            type = new QName("Int");
                        } else if (propType instanceof EnumerationTypeImpl) {
                            type = new QName("String");
                        } else {
                            if (!(propType instanceof AadlStringImpl)) {
                                type = new QName(propType.toString());
                            }
                        }
                        // parse propertyType fetched using prop.getOwnedPropertyType() and map it to "Bool", "Int", or "String"
                        anAttribute.setType(type);
                        // adding asAttribute to packSubComp
                        packSubComp.getAttribute().add(anAttribute);
                    }
                } else {
                    // for outer if
                    continue;
                }
            }
            // adding packSubComp to packBlockImpl
            packBlockImpl.getSubcomponent().add(packSubComp);
            packCompImpl.setBlockImpl(packBlockImpl);
        }
        // adding all connections to "connections" field of packBlockImpl
        if (aCompImpl.getOwnedConnections() != null && !aCompImpl.getOwnedConnections().isEmpty()) {
            for (Connection aConn : aCompImpl.getOwnedConnections()) {
                // to pack all information of a connection
                verdict.vdm.vdm_model.Connection packConn = new verdict.vdm.vdm_model.Connection();
                // populate connectionKind
                packConn.setConnectionKind(getConnectionKind(aConn));
                // variables to unpack information from AADL object
                String srcCompInstName = "";
                String destCompInstName = "";
                Context srcConnContext = aConn.getAllSourceContext();
                Context destConnContext = aConn.getAllDestinationContext();
                ConnectionEnd srcConnectionEnd = aConn.getAllSource();
                ConnectionEnd destConnectionEnd = aConn.getAllDestination();
                if (srcConnContext != null) {
                    srcCompInstName = srcConnContext.getName();
                }
                if (destConnContext != null) {
                    destCompInstName = destConnContext.getName();
                }
                String srcPortTypeName = "";
                String destPortTypeName = "";
                String srcPortName = srcConnectionEnd.getName();
                String destPortName = destConnectionEnd.getName();
                // variables to capture data type information
                DataSubcomponentType srcDataSubCompType = null;
                DataSubcomponentType destDataSubCompType = null;
                if (srcConnectionEnd instanceof DataPort) {
                    srcPortTypeName = ((DataPort) srcConnectionEnd).isIn() ? (((DataPort) srcConnectionEnd).isOut() ? "inOut" : "in") : "out";
                    srcDataSubCompType = ((DataPort) srcConnectionEnd).getDataFeatureClassifier();
                } else if (srcConnectionEnd instanceof EventDataPort) {
                    srcPortTypeName = ((EventDataPort) srcConnectionEnd).isIn() ? (((EventDataPort) srcConnectionEnd).isOut() ? "inOut" : "in") : "out";
                    srcDataSubCompType = ((EventDataPort) srcConnectionEnd).getDataFeatureClassifier();
                } else if (srcConnectionEnd instanceof DataAccess) {
                    AccessType type = ((DataAccess) srcConnectionEnd).getKind();
                    if (type == AccessType.PROVIDES) {
                        srcPortTypeName = "providesDataAccess";
                    } else if (type == AccessType.REQUIRES) {
                        srcPortTypeName = "requiresDataAccess";
                    } else {
                        throw new RuntimeException("Unexpected access type: " + type);
                    }
                    srcDataSubCompType = ((DataAccess) srcConnectionEnd).getDataFeatureClassifier();
                } else if (srcConnectionEnd instanceof DataSubcomponent) {
                    srcDataSubCompType = ((DataSubcomponent) srcConnectionEnd).getDataSubcomponentType();
                    srcPortTypeName = "data";
                } else if (srcConnectionEnd instanceof BusAccess) {
                    // AccessType type = ((BusAccess) srcConnectionEnd).getKind();
                    // if(type == AccessType.PROVIDES) {
                    // srcPortTypeName = "providesBusAccess";
                    // } else if(type == AccessType.REQUIRES) {
                    // srcPortTypeName = "requiresBusAccess";
                    // } else {
                    // throw new RuntimeException("Unexpected access type: " + type);
                    // }
                    // BusFeatureClassifier busfeatureClassifier = ((BusAccess) srcConnectionEnd).getBusFeatureClassifier();
                    // if(busfeatureClassifier instanceof BusImplementation) {
                    // srcBusImpl = (BusImplementation)busfeatureClassifier;
                    // }
                    System.out.println("Warning: Unsupported AADL component element type: " + srcConnectionEnd);
                    continue;
                } else if (srcConnectionEnd instanceof BusSubcomponent) {
                    // srcBusSubCompType = ((BusSubcomponent)srcConnectionEnd).getBusSubcomponentType();
                    // srcPortTypeName = "bus";
                    System.out.println("Warning: Unsupported AADL component element type: " + srcConnectionEnd);
                    continue;
                } else if (srcConnectionEnd instanceof EventPort) {
                    srcPortTypeName = ((EventPort) srcConnectionEnd).isIn() ? (((EventPort) srcConnectionEnd).isOut() ? "inOut" : "in") : "out";
                } else {
                    throw new RuntimeException("Unsupported AADL component element type: " + srcConnectionEnd + "encountered while processing connections");
                }
                if (destConnectionEnd instanceof DataPort) {
                    destPortTypeName = ((DataPort) destConnectionEnd).isIn() ? (((DataPort) destConnectionEnd).isOut() ? "inOut" : "in") : "out";
                    destDataSubCompType = ((DataPort) destConnectionEnd).getDataFeatureClassifier();
                } else if (destConnectionEnd instanceof EventDataPort) {
                    destPortTypeName = ((EventDataPort) destConnectionEnd).isIn() ? (((EventDataPort) destConnectionEnd).isOut() ? "inOut" : "in") : "out";
                    destDataSubCompType = ((EventDataPort) destConnectionEnd).getDataFeatureClassifier();
                } else if (destConnectionEnd instanceof DataAccess) {
                    AccessType type = ((DataAccess) destConnectionEnd).getKind();
                    if (type == AccessType.PROVIDES) {
                        destPortTypeName = "providesDataAccess";
                    } else if (type == AccessType.REQUIRES) {
                        destPortTypeName = "requiresDataAccess";
                    }
                    destDataSubCompType = ((DataAccess) destConnectionEnd).getDataFeatureClassifier();
                } else if (destConnectionEnd instanceof DataSubcomponent) {
                    destDataSubCompType = ((DataSubcomponent) destConnectionEnd).getDataSubcomponentType();
                    destPortTypeName = "data";
                } else if (destConnectionEnd instanceof BusAccess) {
                    // AccessType type = ((BusAccess) destConnectionEnd).getKind();
                    // if(type == AccessType.PROVIDES) {
                    // destPortTypeName = "providesBusAccess";
                    // } else if(type == AccessType.REQUIRES) {
                    // destPortTypeName = "requiresBusAccess";
                    // } else {
                    // throw new RuntimeException("Unexpected access type: " + type);
                    // }
                    // BusFeatureClassifier busfeatureClassifier = ((BusAccess) destConnectionEnd).getBusFeatureClassifier();
                    // if(busfeatureClassifier instanceof BusImplementation) {
                    // destBusImpl = (BusImplementation)busfeatureClassifier;
                    // }
                    System.out.println("Warning: Unsupported AADL component element type: " + destConnectionEnd);
                    continue;
                } else if (destConnectionEnd instanceof BusSubcomponent) {
                    // destBusSubCompType = ((BusSubcomponent)destConnectionEnd).getBusSubcomponentType();
                    // destPortTypeName = "bus";
                    System.out.println("Warning: Unsupported AADL component element type: " + destConnectionEnd);
                    continue;
                } else if (destConnectionEnd instanceof EventPort) {
                    destPortTypeName = ((EventPort) destConnectionEnd).isIn() ? (((EventPort) destConnectionEnd).isOut() ? "inOut" : "in") : "out";
                } else {
                    throw new RuntimeException("Unsupported AADL component element type: " + destConnectionEnd + "encountered while processing connections");
                }
                // setting name
                packConn.setName(aConn.getFullName());
                packConn.setQualifiedName(aConn.getQualifiedName());
                if (connectionToBusMap.containsKey(aConn.getQualifiedName())) {
                    packConn.setActualConnectionBinding(connectionToBusMap.get(aConn.getQualifiedName()));
                }
                // --- Populate packConn below ---
                // to pack source
                verdict.vdm.vdm_model.ConnectionEnd packSrcEnd = new verdict.vdm.vdm_model.ConnectionEnd();
                // to pack "componentPort"  of packSrcEnd
                verdict.vdm.vdm_model.Port packSrcEndPort = new verdict.vdm.vdm_model.Port();
                // } else
                if (srcConnectionEnd instanceof EventPort) {
                    packSrcEndPort = createVdmConnectionEventPort(srcPortName, srcPortTypeName, srcConnectionEnd.getQualifiedName());
                } else {
                    // if not a bus access port or bus implementation port or event port
                    packSrcEndPort = createVdmConnectionPort(srcPortName, srcPortTypeName, srcConnectionEnd.getQualifiedName(), srcDataSubCompType, m2, dataTypeDecl);
                }
                // If source port is independent of a component instance
                if (srcCompInstName.equals("")) {
                    packSrcEnd.setComponentPort(packSrcEndPort);
                } else {
                    // to pack "subcomponentPort" of packSrcEnd
                    verdict.vdm.vdm_model.CompInstancePort packSrcEndCompInstPort = new verdict.vdm.vdm_model.CompInstancePort();
                    // putting a reference to appropriate "subcomponent" from packBlockImpl in "subcomponent" of packSrcEndCompInstPort
                    for (verdict.vdm.vdm_model.ComponentInstance checkCompInst : packBlockImpl.getSubcomponent()) {
                        if (checkCompInst.getName().equals(srcCompInstName)) {
                            packSrcEndCompInstPort.setSubcomponent(checkCompInst);
                            break;
                        } else {
                            continue;
                        }
                    }
                    packSrcEndCompInstPort.setPort(packSrcEndPort);
                    // setting "subcomponentPort" of packSrcEnd
                    packSrcEnd.setSubcomponentPort(packSrcEndCompInstPort);
                }
                // adding to "source" of packConn
                packConn.setSource(packSrcEnd);
                // to pack destination
                verdict.vdm.vdm_model.ConnectionEnd packDestEnd = new verdict.vdm.vdm_model.ConnectionEnd();
                // to pack "componentPort"  of packDestEnd
                verdict.vdm.vdm_model.Port packDestEndPort = new verdict.vdm.vdm_model.Port();
                // } else
                if (destConnectionEnd instanceof EventPort) {
                    packDestEndPort = createVdmConnectionEventPort(destPortName, destPortTypeName, destConnectionEnd.getQualifiedName());
                } else {
                    // if not a bus access port or bus implementation port or eventport
                    packDestEndPort = createVdmConnectionPort(destPortName, destPortTypeName, destConnectionEnd.getQualifiedName(), destDataSubCompType, m2, dataTypeDecl);
                }
                // If source port is independent of a component instance
                if (destCompInstName.equals("")) {
                    packDestEnd.setComponentPort(packDestEndPort);
                } else {
                    // to pack "subcomponentPort" of packSrcEnd
                    verdict.vdm.vdm_model.CompInstancePort packDestEndCompInstPort = new verdict.vdm.vdm_model.CompInstancePort();
                    // putting a reference to appropriate "subcomponent" from packBlockImpl in "subcomponent" of packSrcEndCompInstPort
                    for (verdict.vdm.vdm_model.ComponentInstance checkCompInst : packBlockImpl.getSubcomponent()) {
                        if (checkCompInst.getName().equals(destCompInstName)) {
                            packDestEndCompInstPort.setSubcomponent(checkCompInst);
                            break;
                        } else {
                            continue;
                        }
                    }
                    packDestEndCompInstPort.setPort(packDestEndPort);
                    // setting "subcomponentPort" of packDestEnd
                    packDestEnd.setSubcomponentPort(packDestEndCompInstPort);
                }
                // adding to "source" of packConn
                packConn.setDestination(packDestEnd);
                // adding connection properties from connProperty.ToName
                for (Property prop : connPropertyToName.keySet()) {
                    // create a GenericAttribute object to pack the property
                    verdict.vdm.vdm_data.GenericAttribute aConnAttribute = new verdict.vdm.vdm_data.GenericAttribute();
                    String value = "";
                    PropertyAcc propAcc = aConn.getPropertyValue(prop);
                    PropertyExpression defPropExpr = prop.getDefaultValue();
                    if (propAcc != null && !propAcc.getAssociations().isEmpty()) {
                        value = getStrRepofPropVal(propAcc);
                    } else if (defPropExpr != null) {
                        value = getStrRepofExpr(defPropExpr)[0];
                    }
                    if (!value.equals("")) {
                        // setting the "name" and "value" field of anAttribute
                        aConnAttribute.setName(connPropertyToName.get(prop));
                        aConnAttribute.setValue(value);
                        PropertyType propType = prop.getPropertyType();
                        QName type = new QName("String");
                        if (propType instanceof AadlBooleanImpl) {
                            type = new QName("Bool");
                        } else if (propType instanceof AadlIntegerImpl) {
                            type = new QName("Int");
                        } else if (propType instanceof EnumerationTypeImpl) {
                            type = new QName("String");
                        } else {
                            if (!(propType instanceof AadlStringImpl)) {
                                type = new QName(propType.toString());
                            }
                        }
                        // parse propertyType fetched using prop.getOwnedPropertyType() and map it to "Bool", "Int", or "String"
                        aConnAttribute.setType(type);
                        // adding asAttribute to packSubComp
                        packConn.getAttribute().add(aConnAttribute);
                    }
                }
                if (aConn.isBidirectional()) {
                    packConn.setDirection(verdict.vdm.vdm_model.Direction.fromValue("bidirectional"));
                    // to pack reverse connection
                    verdict.vdm.vdm_model.Connection packReverseConn = new verdict.vdm.vdm_model.Connection();
                    packReverseConn.setName(packConn.getName() + "_reverse");
                    packReverseConn.setSource(packConn.getDestination());
                    packReverseConn.setDestination(packConn.getSource());
                    for (verdict.vdm.vdm_data.GenericAttribute anAttribute : packConn.getAttribute()) {
                        packReverseConn.getAttribute().add(anAttribute);
                    }
                    packReverseConn.setDirection(verdict.vdm.vdm_model.Direction.fromValue("bidirectional"));
                    // add packReverseConn to packBlockImpl
                    packBlockImpl.getConnection().add(packReverseConn);
                } else {
                    packConn.setDirection(verdict.vdm.vdm_model.Direction.fromValue("unidirectional"));
                }
                // add packConn to packBlockImpl
                packBlockImpl.getConnection().add(packConn);
                packCompImpl.setBlockImpl(packBlockImpl);
            }
        }
    // End of adding all connections
    // setting "blackImpl" field of packCompImpl
    // packCompImpl.setBlockImpl(packBlockImpl);
    }
    // return populated Model
    return m2;
}
Also used : LinkedHashMap(java.util.LinkedHashMap) HashMap(java.util.HashMap) SLPort(com.ge.research.osate.verdict.dsl.verdict.SLPort) LPort(com.ge.research.osate.verdict.dsl.verdict.LPort) EventPort(org.osate.aadl2.EventPort) DataPort(org.osate.aadl2.DataPort) Port(verdict.vdm.vdm_model.Port) EventDataPort(org.osate.aadl2.EventDataPort) PropertyType(org.osate.aadl2.PropertyType) Port(verdict.vdm.vdm_model.Port) DataAccess(org.osate.aadl2.DataAccess) DataPort(org.osate.aadl2.DataPort) EventDataPort(org.osate.aadl2.EventDataPort) ThreadSubcomponent(org.osate.aadl2.ThreadSubcomponent) BusSubcomponent(org.osate.aadl2.BusSubcomponent) Subcomponent(org.osate.aadl2.Subcomponent) MemorySubcomponent(org.osate.aadl2.MemorySubcomponent) ThreadGroupSubcomponent(org.osate.aadl2.ThreadGroupSubcomponent) SubprogramSubcomponent(org.osate.aadl2.SubprogramSubcomponent) DeviceSubcomponent(org.osate.aadl2.DeviceSubcomponent) ProcessSubcomponent(org.osate.aadl2.ProcessSubcomponent) SystemSubcomponent(org.osate.aadl2.SystemSubcomponent) AbstractSubcomponent(org.osate.aadl2.AbstractSubcomponent) DataSubcomponent(org.osate.aadl2.DataSubcomponent) VirtualProcessorSubcomponent(org.osate.aadl2.VirtualProcessorSubcomponent) PropertyAcc(org.osate.aadl2.properties.PropertyAcc) ListValueImpl(org.osate.aadl2.impl.ListValueImpl) EventDataPort(org.osate.aadl2.EventDataPort) AccessType(org.osate.aadl2.AccessType) EnumerationTypeImpl(org.osate.aadl2.impl.EnumerationTypeImpl) BusSubcomponent(org.osate.aadl2.BusSubcomponent) ReferenceValueImpl(org.osate.aadl2.impl.ReferenceValueImpl) DataSubcomponentType(org.osate.aadl2.DataSubcomponentType) ContainedNamedElement(org.osate.aadl2.ContainedNamedElement) ComponentImplementation(org.osate.aadl2.ComponentImplementation) PropertyAssociation(org.osate.aadl2.PropertyAssociation) EventPort(org.osate.aadl2.EventPort) PropertyExpression(org.osate.aadl2.PropertyExpression) Property(org.osate.aadl2.Property) Context(org.osate.aadl2.Context) BusAccess(org.osate.aadl2.BusAccess) AadlBooleanImpl(org.osate.aadl2.impl.AadlBooleanImpl) QName(javax.xml.namespace.QName) AadlStringImpl(org.osate.aadl2.impl.AadlStringImpl) ContainmentPathElement(org.osate.aadl2.ContainmentPathElement) Connection(org.osate.aadl2.Connection) AadlIntegerImpl(org.osate.aadl2.impl.AadlIntegerImpl) DataSubcomponent(org.osate.aadl2.DataSubcomponent) ConnectionEnd(org.osate.aadl2.ConnectionEnd)

Aggregations

Property (org.osate.aadl2.Property)418 PropertyExpression (org.osate.aadl2.PropertyExpression)295 PropertyNotPresentException (org.osate.aadl2.properties.PropertyNotPresentException)246 BasicProperty (org.osate.aadl2.BasicProperty)112 ArrayList (java.util.ArrayList)85 ListValue (org.osate.aadl2.ListValue)65 UnitLiteral (org.osate.aadl2.UnitLiteral)55 PropertyAssociation (org.osate.aadl2.PropertyAssociation)47 TimeUnits (org.osate.aadl2.contrib.aadlproject.TimeUnits)40 List (java.util.List)37 FHIRException (org.hl7.fhir.exceptions.FHIRException)35 BasicPropertyAssociation (org.osate.aadl2.BasicPropertyAssociation)31 DefinitionException (org.hl7.fhir.exceptions.DefinitionException)30 PropertyLookupException (org.osate.aadl2.properties.PropertyLookupException)30 ModalPropertyValue (org.osate.aadl2.ModalPropertyValue)28 InstanceReferenceValue (org.osate.aadl2.instance.InstanceReferenceValue)28 NamedElement (org.osate.aadl2.NamedElement)26 EnumerationLiteral (org.osate.aadl2.EnumerationLiteral)25 JsonElement (com.google.gson.JsonElement)23 Property (org.eclipse.bpmn2.Property)21