use of org.osate.aadl2.Abstract 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());
}
}
}
use of org.osate.aadl2.Abstract 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;
}
use of org.osate.aadl2.Abstract in project VERDICT by ge-high-assurance.
the class Aadl2Vdm method getObjectNames.
/**
* @author Vidhya Tekken Valapil
* Fetch names of objects and return the list of names
*/
private HashSet<String> getObjectNames(List<EObject> objects) {
HashSet<String> objNames = new HashSet<String>();
for (EObject obj : objects) {
// process only those objects in files in the project and not in the imported files
if (obj instanceof SystemType) {
objNames.add(((SystemType) obj).getName());
} else if (obj instanceof BusType) {
objNames.add(((BusType) obj).getName());
} else if (obj instanceof SubprogramType) {
objNames.add(((SubprogramType) obj).getName());
} else if (obj instanceof ThreadType) {
objNames.add(((ThreadType) obj).getName());
} else if (obj instanceof MemoryType) {
objNames.add(((MemoryType) obj).getName());
} else if (obj instanceof DeviceType) {
objNames.add(((DeviceType) obj).getName());
} else if (obj instanceof AbstractType) {
objNames.add(((AbstractType) obj).getName());
} else if (obj instanceof ProcessType) {
objNames.add(((ProcessType) obj).getName());
} else if (obj instanceof ThreadGroupType) {
objNames.add(((ThreadGroupType) obj).getName());
} else if (obj instanceof VirtualProcessorType) {
objNames.add(((VirtualProcessorType) obj).getName());
} else if (obj instanceof ProcessorType) {
objNames.add(((ProcessorType) obj).getName());
} else if (obj instanceof SystemImplementation) {
objNames.add(((SystemImplementation) obj).getName());
} else if (obj instanceof SubprogramImplementation) {
objNames.add(((SubprogramImplementation) obj).getName());
} else if (obj instanceof ThreadImplementation) {
objNames.add(((ThreadImplementation) obj).getName());
} else if (obj instanceof MemoryImplementation) {
objNames.add(((MemoryImplementation) obj).getName());
} else if (obj instanceof BusImplementation) {
objNames.add(((BusImplementation) obj).getName());
} else if (obj instanceof AbstractImplementation) {
objNames.add(((AbstractImplementation) obj).getName());
} else if (obj instanceof DeviceImplementation) {
objNames.add(((DeviceImplementation) obj).getName());
} else if (obj instanceof ProcessImplementation) {
objNames.add(((ProcessImplementation) obj).getName());
} else if (obj instanceof ThreadGroupImplementation) {
objNames.add(((ThreadGroupImplementation) obj).getName());
} else if (obj instanceof VirtualProcessorImplementation) {
objNames.add(((VirtualProcessorImplementation) obj).getName());
} else if (obj instanceof ProcessorImplementation) {
objNames.add(((ProcessorImplementation) obj).getName());
} else if (obj instanceof PropertySetImpl) {
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":
{
objNames.add(propName);
break;
}
case "thread":
{
objNames.add(propName);
break;
}
case "processor":
{
objNames.add(propName);
break;
}
case "memory":
{
objNames.add(propName);
break;
}
case "connection":
{
objNames.add(propName);
break;
}
case "process":
{
objNames.add(propName);
break;
}
case "abstract":
{
objNames.add(propName);
break;
}
case "device":
{
objNames.add(propName);
break;
}
case "threadgroup":
{
objNames.add(propName);
break;
}
case "virtualprocessor":
{
objNames.add(propName);
break;
}
case "bus":
{
objNames.add(propName);
break;
}
case "port":
{
objNames.add(propName);
break;
}
default:
{
System.out.println("Warning: unsupported property: " + propName + ", applies to: " + propCat);
break;
}
}
}
}
}
}
return objNames;
}
use of org.osate.aadl2.Abstract in project osate2 by osate.
the class DefaultSelectSubprogramDialogModel method getSubprograms.
@Override
public List<Object> getSubprograms(final Object context) {
// Build a list of subprograms
final List<Object> subprograms = new ArrayList<Object>();
// Data/Subprogram Group/Abstract Type
if (context instanceof IEObjectDescription) {
final IEObjectDescription desc = (IEObjectDescription) context;
final Classifier contextClassifier = (Classifier) (desc.getEObjectOrProxy().eIsProxy() ? (Classifier) EcoreUtil.resolve(desc.getEObjectOrProxy(), bi.eResource()) : desc.getEObjectOrProxy());
if (!contextClassifier.eIsProxy()) {
for (final Feature tmpFeature : contextClassifier.getAllFeatures()) {
if (tmpFeature instanceof SubprogramAccess) {
// Provides Subprogram Access
if (((SubprogramAccess) tmpFeature).getKind() == AccessType.PROVIDES) {
subprograms.add(tmpFeature);
}
}
}
}
} else if (context instanceof SubprogramGroupAccess) {
// Requires Subprogram Group Access
// Only subprogram group accesses with kind = Requires and which has a subprogram group classifier should be in the context list
// Provides Subprogram Access
final SubprogramGroupClassifier spgClassifier = (SubprogramGroupClassifier) ((SubprogramGroupAccess) context).getAllClassifier();
addProvidesSubprogramAccessesForComponentClassifier(spgClassifier, subprograms);
} else if (context instanceof FeatureGroup) {
// Feature Group
final FeatureGroup fg = (FeatureGroup) context;
// Requires subprogram Access if not inverse and Provides subprogram access if is inverse
final boolean inverted = fg.isInverse();
for (final Feature tmpFeature : AadlFeatureUtil.getAllFeatures(fg.getAllFeatureGroupType())) {
if (tmpFeature instanceof SubprogramAccess) {
final AccessType accessKind = ((SubprogramAccess) tmpFeature).getKind();
if ((!inverted && accessKind == AccessType.REQUIRES) || (inverted && accessKind == AccessType.PROVIDES)) {
subprograms.add(tmpFeature);
}
}
}
} else if (context instanceof SubprogramGroupSubcomponent) {
// Subprogram Group Subcomponent
// Provides Subprogram
addProvidesSubprogramAccessesForComponentClassifier(((SubprogramGroupSubcomponent) context).getAllClassifier(), subprograms);
} else if (context == processorContext) {
// Subprogram Proxy
for (final ProcessorFeature processorFeature : AgeAadlUtil.getAllProcessorFeatures(bi)) {
if (processorFeature instanceof SubprogramProxy) {
subprograms.add(processorFeature);
}
}
} else if (context == nullContext) {
// Null Context
// Subprogram classifier reference
final Aadl2Package aadl2Package = Aadl2Package.eINSTANCE;
for (final IEObjectDescription desc : AadlModelAccessUtil.getAllEObjectsByType(bi.eResource(), aadl2Package.getComponentClassifier())) {
// Add objects that have care either types or implementations of the same category as the classifier type
final EClass classifierEClass = desc.getEClass();
if (aadl2Package.getSubprogramClassifier().isSuperTypeOf(classifierEClass)) {
subprograms.add(desc);
}
}
// Requires Subprogram Access
for (final Feature tmpFeature : bi.getAllFeatures()) {
if (tmpFeature instanceof SubprogramAccess && ((SubprogramAccess) tmpFeature).getKind() == AccessType.REQUIRES) {
subprograms.add(tmpFeature);
}
}
// Subprogram Subcomponent
for (final Subcomponent tmpSc : bi.getAllSubcomponents()) {
if (tmpSc instanceof SubprogramSubcomponent) {
subprograms.add(tmpSc);
}
}
// Subprogram Prototype
for (final Prototype prototype : bi.getAllPrototypes()) {
if (prototype instanceof SubprogramPrototype) {
subprograms.add(prototype);
}
}
}
return Collections.unmodifiableList(subprograms);
}
use of org.osate.aadl2.Abstract in project osate2 by osate.
the class CreateGeneralizationPaletteCommand method getOperation.
@Override
public Optional<Operation> getOperation(final GetCreateConnectionOperationContext ctx) {
final Object readonlySubtype = ctx.getSource().getBusinessObject();
final Classifier supertype = ctx.getDestination().getBusinessObject(Classifier.class).orElse(null);
// Ensure they are valid and are not the same
if (readonlySubtype == null || supertype == null || readonlySubtype == supertype) {
return Optional.empty();
}
// Rules:
// Abstract types can be extended by any type.
// Types can be extended by other types in their category
// Implementations can extend other implementations with same category and abstract implementation in some cases.
// Feature Group Types can extend other feature group types
final boolean canCreate = (readonlySubtype instanceof ComponentType && (supertype instanceof AbstractType || supertype.getClass() == readonlySubtype.getClass())) || (readonlySubtype instanceof ComponentImplementation && (supertype instanceof AbstractImplementation || supertype.getClass() == readonlySubtype.getClass())) || (readonlySubtype instanceof FeatureGroupType && supertype instanceof FeatureGroupType);
if (!canCreate) {
return Optional.empty();
}
return Operation.createSimple(ctx.getSource(), Classifier.class, subtype -> {
// Import the package if necessary
if (subtype.getNamespace() instanceof PackageSection && subtype.getNamespace().getOwner() instanceof AadlPackage && supertype.getNamespace() instanceof PackageSection && supertype.getNamespace().getOwner() instanceof AadlPackage) {
final PackageSection subtypeSection = (PackageSection) subtype.getNamespace();
final AadlPackage supertypePackage = (AadlPackage) supertype.getNamespace().getOwner();
AadlImportsUtil.addImportIfNeeded(subtypeSection, supertypePackage);
}
// Create the generalization
final Object newBo;
if (subtype instanceof ComponentType) {
final ComponentType ct = (ComponentType) subtype;
final TypeExtension te = ct.createOwnedExtension();
te.setExtended((ComponentType) supertype);
newBo = te;
} else if (subtype instanceof ComponentImplementation) {
final ComponentImplementation ci = (ComponentImplementation) subtype;
final ImplementationExtension ie = ci.createOwnedExtension();
ie.setExtended((ComponentImplementation) supertype);
newBo = ie;
} else if (subtype instanceof FeatureGroupType) {
final FeatureGroupType fgt = (FeatureGroupType) subtype;
final GroupExtension ge = fgt.createOwnedExtension();
ge.setExtended((FeatureGroupType) supertype);
newBo = ge;
} else {
return StepResult.abort();
}
return StepResultBuilder.create().showNewBusinessObject(ctx.getSource(), newBo).build();
});
}
Aggregations