Search in sources :

Example 1 with ClassifierOperationPartType

use of org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperationPartType 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)

Example 2 with ClassifierOperationPartType

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

the class ClassifierOperationDialog method main.

public static void main(final String[] args) {
    final Model testModel = new Model() {

        @Override
        public String getTitle() {
            return "Select Element";
        }

        @Override
        public String getMessage(final ClassifierOperation value) {
            return "Select an element.";
        }

        @Override
        public Collection<?> getPackageOptions() {
            final List<Object> result = new ArrayList<>();
            result.add("A");
            result.add("B");
            return result;
        }

        @Override
        public String getPrimarySelectTitle() {
            return "Select Element";
        }

        @Override
        public String getPrimarySelectMessage() {
            return "Select an element.";
        }

        @Override
        public List<Object> getPrimarySelectOptions() {
            final List<Object> result = new ArrayList<>();
            result.add("C");
            result.add("D");
            return result;
        }

        @Override
        public List<Object> getUnfilteredPrimarySelectOptions() {
            final List<Object> result = getPrimarySelectOptions();
            result.add("E");
            result.add("F");
            return result;
        }

        @Override
        public List<Object> getBaseSelectOptions(final ClassifierOperationPartType primaryOperation) {
            final List<Object> result = new ArrayList<>();
            result.add("G");
            result.add("H");
            return result;
        }

        @Override
        public Collection<?> getUnfilteredBaseSelectOptions(final ClassifierOperationPartType primaryOperation) {
            final List<Object> result = getBaseSelectOptions(primaryOperation);
            result.add("I");
            result.add("J");
            return result;
        }

        @Override
        public String validate(final ClassifierOperation value) {
            return (value.getPrimaryPart().getType() == ClassifierOperationPartType.NEW_COMPONENT_IMPLEMENTATION && value.getPrimaryPart().getIdentifier().isEmpty()) ? "Primary identifier must not be empty." : null;
        }
    };
    Display.getDefault().syncExec(() -> {
        final ClassifierOperation result = show(new Shell(), new ArgumentBuilder(testModel, EnumSet.complementOf(EnumSet.of(ClassifierOperationPartType.NONE))).componentCategories(ImmutableList.of(ComponentCategory.ABSTRACT)).create());
        System.out.println("Result: " + result);
    });
}
Also used : Shell(org.eclipse.swt.widgets.Shell) ArrayList(java.util.ArrayList) ClassifierOperationPartType(org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperationPartType) ClassifierOperation(org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperation)

Example 3 with ClassifierOperationPartType

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

the class ClassifierOperationPartEditor method setAllowedOperations.

public void setAllowedOperations(final EnumSet<ClassifierOperationPartType> allowedOperations) {
    if (allowedOperations == null || allowedOperations.size() == 0) {
        throw new RuntimeException("allowedOperations must contain at least one operation.");
    }
    setGridChildVisible(operationGroup, allowedOperations.size() > 1);
    if (allowedOperations.size() > 1) {
        ClassifierOperationPartType newType = null;
        // Update the visibility of the operation part type buttons
        for (final Button typeBtn : operationPartTypeBtns) {
            final boolean typeIsAllowed = allowedOperations.contains(typeBtn.getData());
            typeBtn.setVisible(typeIsAllowed);
            typeBtn.setLayoutData(RowDataFactory.swtDefaults().exclude(!typeIsAllowed).create());
            if (typeIsAllowed && typeBtn.getData() == currentValue.type) {
                newType = currentValue.type;
            }
        }
        // Update the current operation to reflect the UI
        setCurrentOperationPartType(newType);
        operationGroup.requestLayout();
    } else {
        setCurrentOperationPartType(allowedOperations.iterator().next());
    }
    updateOperationDetailsVisibility();
    // Request Layout
    requestLayout();
}
Also used : Button(org.eclipse.swt.widgets.Button) ClassifierOperationPartType(org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperationPartType)

Aggregations

ClassifierOperationPartType (org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperationPartType)3 ClassifierOperation (org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperation)2 ArrayList (java.util.ArrayList)1 EObject (org.eclipse.emf.ecore.EObject)1 Button (org.eclipse.swt.widgets.Button)1 Shell (org.eclipse.swt.widgets.Shell)1 ComponentCategory (org.osate.aadl2.ComponentCategory)1 ClassifierCreationHelper (org.osate.ge.aadl2.internal.util.classifiers.ClassifierCreationHelper)1 ClassifierOperationPart (org.osate.ge.aadl2.internal.util.classifiers.ClassifierOperationPart)1 ClassifierOperationDialog (org.osate.ge.aadl2.ui.internal.dialogs.ClassifierOperationDialog)1 DefaultCreateSelectClassifierDialogModel (org.osate.ge.aadl2.ui.internal.dialogs.DefaultCreateSelectClassifierDialogModel)1