Search in sources :

Example 1 with InternalDiagramEditor

use of org.osate.ge.internal.ui.editor.InternalDiagramEditor in project osate2 by osate.

the class DeleteHandler method execute.

@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {
    final IEditorPart activeEditor = HandlerUtil.getActiveEditor(event);
    if (!(activeEditor instanceof InternalDiagramEditor)) {
        throw new RuntimeException("Unexpected editor: " + activeEditor);
    }
    final InternalDiagramEditor ageEditor = (InternalDiagramEditor) activeEditor;
    final ReferenceBuilderService refBuilder = Objects.requireNonNull((ReferenceBuilderService) ageEditor.getAdapter(ReferenceBuilderService.class), "Unable to retrieve reference builder service");
    final AadlModificationService aadlModificationService = Objects.requireNonNull((AadlModificationService) ageEditor.getAdapter(AadlModificationService.class), "Unable to retrieve modification service");
    // Get diagram and selected elements
    final List<DiagramElement> selectedDiagramElements = AgeHandlerUtil.getSelectedDiagramElements();
    if (!canExecute(selectedDiagramElements)) {
        throw new RuntimeException("canExecute() returned false");
    }
    if (!confirmDelete(selectedDiagramElements)) {
        return null;
    }
    final boolean boIsContext = anyBoIsDiagramContext(selectedDiagramElements, ageEditor.getDiagram(), refBuilder);
    ageEditor.getActionExecutor().execute("Delete", ExecutionMode.NORMAL, () -> {
        if (anyRequiresRawDelete(selectedDiagramElements)) {
            if (selectedDiagramElements.size() != 1) {
                throw new RuntimeException("Deleting multiple elements when using DeleteRaw is not supported");
            }
            final DiagramElement deToDelete = selectedDiagramElements.get(0);
            // This is safe because we have already check that at least one business object requires a raw deletion and there is exactly one
            // business object being deleted.
            final RawDeleter deleter = (RawDeleter) deToDelete.getBusinessObjectHandler();
            deleter.delete(new RawDeleteContext(deToDelete.getBusinessObject()));
        } else if (anyIsInAnnex(selectedDiagramElements)) {
            if (selectedDiagramElements.size() != 1) {
                throw new RuntimeException("Deleting multiple elements when deleting an element inside of an annex is not supported");
            }
            // Handle annex specially because we need to modify the annex itself instead of the root of the model.
            // Only a single annex element can be modified at a time because modifying annex elements as part of a
            // group is not supported.
            final BusinessObjectRemoval modInfo = createBusinessObjectRemovalOrRemoveDiagramElement(selectedDiagramElements.get(0));
            if (modInfo != null) {
                aadlModificationService.modify(modInfo.staleBoToModify, (boToModify) -> {
                    modInfo.remover.accept(boToModify);
                });
            }
        } else {
            // Group elements to be removed by resource. All the elements will be removed as part of the same modification.
            // This ensures that the appropriate element is retrieved regardless of the order in the model or the URI scheme.
            final ListMultimap<Resource, BusinessObjectRemoval> removals = ArrayListMultimap.create();
            for (final DiagramElement de : selectedDiagramElements) {
                final BusinessObjectRemoval removal = createBusinessObjectRemovalOrRemoveDiagramElement(de);
                if (removal != null) {
                    removals.put(removal.staleBoToModify.eResource(), removal);
                }
            }
            // Perform the modifications. One modification will be performed for each resource.
            final List<AadlModificationService.Modification<?, ?>> modifications = new ArrayList<>();
            for (final Entry<Resource, Collection<BusinessObjectRemoval>> entry : removals.asMap().entrySet()) {
                final Resource resource = entry.getKey();
                final EObject root = Objects.requireNonNull(resource.getContents().get(0), "unable to retrieve root element");
                final Modification<EObject, EObject> mod = AadlModificationService.Modification.create(root, (rootToModify) -> {
                    // could change in between removals and an incorrect element will be removed.
                    for (final BusinessObjectRemoval removal : entry.getValue()) {
                        final URI uri = EcoreUtil.getURI(removal.staleBoToModify);
                        Objects.requireNonNull(uri, "unable to retrieve uri for " + removal.staleBoToModify);
                        removal.boToModify = rootToModify.eResource().getResourceSet().getEObject(uri, true);
                    }
                    // Remove the business object using the stored business object to modify
                    for (final BusinessObjectRemoval removal : entry.getValue()) {
                        removal.remover.accept(removal.boToModify);
                    }
                });
                modifications.add(mod);
            }
            if (!modifications.isEmpty()) {
                aadlModificationService.modify(modifications);
            }
        }
        return null;
    });
    if (boIsContext) {
        // Close the editor if the context was deleted
        Display.getDefault().syncExec(() -> ageEditor.closeEditor());
    } else {
        ageEditor.clearSelection();
    }
    return null;
}
Also used : ExecutionEvent(org.eclipse.core.commands.ExecutionEvent) ArrayListMultimap(com.google.common.collect.ArrayListMultimap) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) BusinessObjectHandler(org.osate.ge.businessobjecthandling.BusinessObjectHandler) URI(org.eclipse.emf.common.util.URI) ListMultimap(com.google.common.collect.ListMultimap) CanDeleteContext(org.osate.ge.businessobjecthandling.CanDeleteContext) Modification(org.osate.ge.internal.services.AadlModificationService.Modification) EmbeddedBusinessObject(org.osate.ge.internal.model.EmbeddedBusinessObject) DefaultAnnexSubclause(org.osate.aadl2.DefaultAnnexSubclause) MessageFormat(java.text.MessageFormat) ArrayList(java.util.ArrayList) HandlerUtil(org.eclipse.ui.handlers.HandlerUtil) InternalDiagramEditor(org.osate.ge.internal.ui.editor.InternalDiagramEditor) CustomDeleteContext(org.osate.ge.businessobjecthandling.CustomDeleteContext) Predicates(com.google.common.base.Predicates) MessageDialog(org.eclipse.jface.dialogs.MessageDialog) IEditorPart(org.eclipse.ui.IEditorPart) EmfContainerProvider(org.osate.ge.EmfContainerProvider) PlatformUI(org.eclipse.ui.PlatformUI) ReferenceBuilderService(org.osate.ge.services.ReferenceBuilderService) Collection(java.util.Collection) CustomDeleter(org.osate.ge.businessobjecthandling.CustomDeleter) RawDeleter(org.osate.ge.businessobjecthandling.RawDeleter) EcoreUtil(org.eclipse.emf.ecore.util.EcoreUtil) EObject(org.eclipse.emf.ecore.EObject) ExecutionException(org.eclipse.core.commands.ExecutionException) Display(org.eclipse.swt.widgets.Display) CanonicalBusinessObjectReference(org.osate.ge.CanonicalBusinessObjectReference) DiagramElementUtil(org.osate.ge.internal.util.DiagramElementUtil) Objects(java.util.Objects) Consumer(java.util.function.Consumer) AgeDiagram(org.osate.ge.internal.diagram.runtime.AgeDiagram) List(java.util.List) ExecutionMode(org.osate.ge.internal.services.ActionExecutor.ExecutionMode) AgeHandlerUtil(org.osate.ge.internal.ui.handlers.AgeHandlerUtil) RawDeleteContext(org.osate.ge.businessobjecthandling.RawDeleteContext) Entry(java.util.Map.Entry) Resource(org.eclipse.emf.ecore.resource.Resource) AnnexSubclause(org.osate.aadl2.AnnexSubclause) AadlModificationService(org.osate.ge.internal.services.AadlModificationService) AbstractHandler(org.eclipse.core.commands.AbstractHandler) NamedElement(org.osate.aadl2.NamedElement) AnnexLibrary(org.osate.aadl2.AnnexLibrary) Modification(org.osate.ge.internal.services.AadlModificationService.Modification) Resource(org.eclipse.emf.ecore.resource.Resource) RawDeleteContext(org.osate.ge.businessobjecthandling.RawDeleteContext) IEditorPart(org.eclipse.ui.IEditorPart) URI(org.eclipse.emf.common.util.URI) InternalDiagramEditor(org.osate.ge.internal.ui.editor.InternalDiagramEditor) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) Entry(java.util.Map.Entry) AadlModificationService(org.osate.ge.internal.services.AadlModificationService) ReferenceBuilderService(org.osate.ge.services.ReferenceBuilderService) EObject(org.eclipse.emf.ecore.EObject) ArrayList(java.util.ArrayList) List(java.util.List) ArrayListMultimap(com.google.common.collect.ArrayListMultimap) ListMultimap(com.google.common.collect.ListMultimap) RawDeleter(org.osate.ge.businessobjecthandling.RawDeleter)

Example 2 with InternalDiagramEditor

use of org.osate.ge.internal.ui.editor.InternalDiagramEditor in project osate2 by osate.

the class DeleteHandler method calculateEnabled.

private boolean calculateEnabled(final Object evaluationContext) {
    final IEditorPart activeEditor = AgeHandlerUtil.getActiveEditorFromContext(evaluationContext);
    if (!(activeEditor instanceof InternalDiagramEditor)) {
        return false;
    }
    final List<DiagramElement> selectedDiagramElements = AgeHandlerUtil.getSelectedDiagramElements();
    return canExecute(selectedDiagramElements);
}
Also used : InternalDiagramEditor(org.osate.ge.internal.ui.editor.InternalDiagramEditor) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) IEditorPart(org.eclipse.ui.IEditorPart)

Example 3 with InternalDiagramEditor

use of org.osate.ge.internal.ui.editor.InternalDiagramEditor in project osate2 by osate.

the class GoToImplementationDiagramHandler method execute.

@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {
    final IEditorPart activeEditor = HandlerUtil.getActiveEditor(event);
    if (!(activeEditor instanceof InternalDiagramEditor)) {
        throw new RuntimeException("Unexpected editor: " + activeEditor);
    }
    // Get diagram and selected BOCs
    final List<BusinessObjectContext> selectedBusinessObjectContexts = AgeHandlerUtil.getSelectedBusinessObjectContexts();
    if (selectedBusinessObjectContexts.size() == 0) {
        throw new RuntimeException("No element selected");
    }
    final Object bo = selectedBusinessObjectContexts.get(0).getBusinessObject();
    final DiagramService diagramService = Objects.requireNonNull(Adapters.adapt(activeEditor, DiagramService.class), "Unable to retrieve diagram service");
    final ComponentImplementation ci = Objects.requireNonNull(getComponentImplementation(bo), "Unable to retrieve component implementation");
    diagramService.openOrCreateDiagramForBusinessObject(ci);
    return null;
}
Also used : InternalDiagramEditor(org.osate.ge.internal.ui.editor.InternalDiagramEditor) ComponentImplementation(org.osate.aadl2.ComponentImplementation) IEditorPart(org.eclipse.ui.IEditorPart) DiagramService(org.osate.ge.internal.services.DiagramService) BusinessObjectContext(org.osate.ge.BusinessObjectContext)

Example 4 with InternalDiagramEditor

use of org.osate.ge.internal.ui.editor.InternalDiagramEditor in project osate2 by osate.

the class GoToPackageDiagramHandler method execute.

@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {
    final IEditorPart activeEditor = HandlerUtil.getActiveEditor(event);
    if (!(activeEditor instanceof InternalDiagramEditor)) {
        throw new RuntimeException("Unexpected editor: " + activeEditor);
    }
    // Get diagram and selected BOCs
    final List<BusinessObjectContext> selectedBusinessObjectContexts = AgeHandlerUtil.getSelectedBusinessObjectContexts();
    if (selectedBusinessObjectContexts.size() == 0) {
        throw new RuntimeException("No element selected");
    }
    final Object bo = selectedBusinessObjectContexts.get(0).getBusinessObject();
    final DiagramService diagramService = Objects.requireNonNull(Adapters.adapt(activeEditor, DiagramService.class), "Unable to retrieve diagram service");
    final AadlPackage pkg = Objects.requireNonNull(getPackage(bo), "Unable to retrieve package");
    diagramService.openOrCreateDiagramForBusinessObject(pkg);
    return null;
}
Also used : InternalDiagramEditor(org.osate.ge.internal.ui.editor.InternalDiagramEditor) AadlPackage(org.osate.aadl2.AadlPackage) IEditorPart(org.eclipse.ui.IEditorPart) DiagramService(org.osate.ge.internal.services.DiagramService) BusinessObjectContext(org.osate.ge.BusinessObjectContext)

Example 5 with InternalDiagramEditor

use of org.osate.ge.internal.ui.editor.InternalDiagramEditor in project osate2 by osate.

the class InstantiateHandler method execute.

@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {
    final IEditorPart activeEditor = HandlerUtil.getActiveEditor(event);
    if (!(activeEditor instanceof InternalDiagramEditor)) {
        throw new RuntimeException("Unexpected editor: " + activeEditor);
    }
    // Get diagram and selected elements
    final List<DiagramElement> selectedDiagramElements = AgeHandlerUtil.getSelectedDiagramElements();
    if (selectedDiagramElements.size() == 0) {
        throw new RuntimeException("No element selected");
    }
    final DiagramElement selectedElement = selectedDiagramElements.get(0);
    final Object bo = selectedElement.getBusinessObject();
    if (!(bo instanceof ComponentImplementation)) {
        throw new RuntimeException("BO is not a component implementation");
    }
    try {
        InstantiateModel.buildInstanceModelFile((ComponentImplementation) bo);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return null;
}
Also used : InternalDiagramEditor(org.osate.ge.internal.ui.editor.InternalDiagramEditor) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) ComponentImplementation(org.osate.aadl2.ComponentImplementation) IEditorPart(org.eclipse.ui.IEditorPart) ExecutionException(org.eclipse.core.commands.ExecutionException)

Aggregations

InternalDiagramEditor (org.osate.ge.internal.ui.editor.InternalDiagramEditor)32 IEditorPart (org.eclipse.ui.IEditorPart)26 DiagramElement (org.osate.ge.internal.diagram.runtime.DiagramElement)15 AgeDiagram (org.osate.ge.internal.diagram.runtime.AgeDiagram)13 ExecutionException (org.eclipse.core.commands.ExecutionException)11 BusinessObjectContext (org.osate.ge.BusinessObjectContext)9 List (java.util.List)8 Objects (java.util.Objects)8 AbstractHandler (org.eclipse.core.commands.AbstractHandler)7 ExecutionEvent (org.eclipse.core.commands.ExecutionEvent)7 HandlerUtil (org.eclipse.ui.handlers.HandlerUtil)7 ExtensionRegistryService (org.osate.ge.internal.services.ExtensionRegistryService)7 Collectors (java.util.stream.Collectors)6 DiagramNode (org.osate.ge.internal.diagram.runtime.DiagramNode)6 DiagramUpdater (org.osate.ge.internal.diagram.runtime.updating.DiagramUpdater)6 RelativeBusinessObjectReference (org.osate.ge.RelativeBusinessObjectReference)5 LayoutInfoProvider (org.osate.ge.internal.diagram.runtime.layout.LayoutInfoProvider)5 ExecutionMode (org.osate.ge.internal.services.ActionExecutor.ExecutionMode)5 ArrayList (java.util.ArrayList)4 Collections (java.util.Collections)4