Search in sources :

Example 1 with ClassifierOperationPart

use of org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperationPart in project osate2 by osate.

the class CreateClassifierPaletteCommand method buildCreateOperations.

/**
 * Build the operation that will be executed to create the classifier.
 * Returns null if the operation could not be created. For example: if the dialog was canceled.
 * @param pkg
 * @param targetBo
 * @param classifierType
 * @param project
 * @param namingService
 * @param rs
 * @return
 */
private ClassifierOperation buildCreateOperations(final AadlPackage pkg, final EObject targetBo, final IProject project, final ResourceSet rs) {
    final ClassifierCreationHelper classifierCreationHelper = new ClassifierCreationHelper(rs);
    // Handle case where target is a valid base classifier for quick creation.
    // Determine if the container is a valid base classifier
    final boolean targetIsValidBase = isValidBaseClassifier(targetBo);
    if (targetIsValidBase || !componentImplementation) {
        // 
        // Create the base operation part
        // 
        final EObject baseClassifier = targetIsValidBase ? targetBo : null;
        final ClassifierOperationPart basePart = baseClassifier == null ? ClassifierOperationPart.createNone() : ClassifierOperationPart.createExisting(baseClassifier);
        // 
        // Create the primary operation part
        // 
        final ClassifierOperationPartType primaryType;
        final ComponentCategory primaryComponentCategory;
        if (componentCategory == null) {
            primaryType = ClassifierOperationPartType.NEW_FEATURE_GROUP_TYPE;
            primaryComponentCategory = null;
        } else {
            primaryType = componentImplementation ? ClassifierOperationPartType.NEW_COMPONENT_IMPLEMENTATION : ClassifierOperationPartType.NEW_COMPONENT_TYPE;
            primaryComponentCategory = componentCategory;
        }
        final String defaultIdentifier = componentImplementation ? "impl" : "new_classifier";
        // Determine a unique name for the classifier
        final String potentialFullName = classifierCreationHelper.buildName(primaryType, pkg, defaultIdentifier, basePart);
        if (potentialFullName == null) {
            return null;
        }
        final String newName = AadlNamingUtil.buildUniqueIdentifier(pkg.getPublicSection(), potentialFullName);
        // Retrieve the identifier to be used for creation. For component implementations this is the part after the ".". For other types, it is the entire
        // name
        final String[] nameSegments = newName.split("\\.");
        final String primaryIdentifier = nameSegments[nameSegments.length - 1];
        final ClassifierOperationPart configuredPrimaryOperation = ClassifierOperationPart.createCreation(primaryType, pkg, primaryIdentifier, primaryComponentCategory);
        return new ClassifierOperation(configuredPrimaryOperation, basePart);
    } else {
        final ClassifierOperationDialog.Model model = new DefaultCreateSelectClassifierDialogModel(rs, "Configure component implementation.") {

            @Override
            public String getTitle() {
                return "Create Component Implementation";
            }

            @Override
            public Collection<?> getPackageOptions() {
                return AadlUiUtil.getEditablePackages(project);
            }

            @Override
            public Collection<?> getBaseSelectOptions(final ClassifierOperationPartType primaryOperation) {
                return AadlUiUtil.getValidBaseClassifierDescriptions(project, componentCategory, true);
            }

            @Override
            public Collection<?> getUnfilteredBaseSelectOptions(final ClassifierOperationPartType primaryOperation) {
                return null;
            }
        };
        // Show the dialog to determine the operation
        return ClassifierOperationDialog.show(Display.getCurrent().getActiveShell(), new ClassifierOperationDialog.ArgumentBuilder(model, EnumSet.of(ClassifierOperationPartType.NEW_COMPONENT_IMPLEMENTATION)).defaultPackage(pkg).showPrimaryPackageSelector(false).componentCategories(ImmutableList.of(componentCategory)).create());
    }
}
Also used : ClassifierOperationDialog(org.osate.ge.aadl2.ui.internal.dialogs.ClassifierOperationDialog) ClassifierOperationPart(org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperationPart) ClassifierOperationPartType(org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperationPartType) ClassifierCreationHelper(org.osate.ge.aadl2.internal.util.classifiers.ClassifierCreationHelper) DefaultCreateSelectClassifierDialogModel(org.osate.ge.aadl2.ui.internal.dialogs.DefaultCreateSelectClassifierDialogModel) ComponentCategory(org.osate.aadl2.ComponentCategory) EObject(org.eclipse.emf.ecore.EObject) ClassifierOperation(org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperation)

Aggregations

EObject (org.eclipse.emf.ecore.EObject)1 ComponentCategory (org.osate.aadl2.ComponentCategory)1 ClassifierCreationHelper (org.osate.ge.aadl2.internal.util.classifiers.ClassifierCreationHelper)1 ClassifierOperation (org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperation)1 ClassifierOperationPart (org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperationPart)1 ClassifierOperationPartType (org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperationPartType)1 ClassifierOperationDialog (org.osate.ge.aadl2.ui.internal.dialogs.ClassifierOperationDialog)1 DefaultCreateSelectClassifierDialogModel (org.osate.ge.aadl2.ui.internal.dialogs.DefaultCreateSelectClassifierDialogModel)1