Search in sources :

Example 1 with Tool

use of org.osate.ge.internal.ui.tools.Tool in project osate2 by osate.

the class CreateEndToEndFlowSpecificationTool method update.

/**
 * Update the diagram and tool dialog
 * @param selectedBocs - the selected bocs
 */
private void update(final List<BusinessObjectContext> selectedBocs) {
    if (createFlowDialog != null) {
        if (createFlowDialog.getShell() != null && !createFlowDialog.getShell().isDisposed() && createFlowDialog.elementSelectionDlg == null) {
            // If the selection is qualified, add it
            if (selectedBocs.size() > 1) {
                createFlowDialog.setErrorMessage("Multiple elements selected. Select a single element. " + " " + getDialogMessage());
            } else if (selectedBocs.size() == 1) {
                // Get the selected boc
                final BusinessObjectContext selectedBoc = (BusinessObjectContext) selectedBocs.get(0);
                if (!modeFeatureSelections.contains(selectedBoc) && createFlowDialog.addSelectedElement(selectedBoc)) {
                    // Insert flow segments before first mode feature
                    final Color color;
                    if (selectedBoc.getBusinessObject() instanceof ModeFeature) {
                        modeFeatureSelections.add(selectedBoc);
                        color = Color.MAGENTA.brighter();
                    } else {
                        segmentSelections.add(new SegmentData(selectedBoc, new ArrayList<>()));
                        if (segmentSelections.size() == 1) {
                            // Set default name on first selection if one does not exist
                            createFlowDialog.getOwnerComponentImplementation().ifPresent(ci -> {
                                createFlowDialog.setTitle("Creating End To End Flow in: " + ci.getQualifiedName());
                                if (createFlowDialog.endToEndFlowName.isEmpty()) {
                                    createFlowDialog.setEndToEndFlowName(ci);
                                }
                            });
                            color = Color.ORANGE.darker();
                        } else {
                            color = Color.MAGENTA.darker();
                        }
                    }
                    setColor(selectedBoc, color);
                }
                createFlowDialog.updateSegments();
                final boolean isValid = createFlowDialog.isEndToEndFlowValid(createEndToEndFlow());
                createFlowDialog.updateWidgets(isValid);
                createFlowDialog.setErrorMessage(null);
                createFlowDialog.setMessage(getDialogMessage());
            } else {
                createFlowDialog.updateSegments();
            }
        } else if (createFlowDialog.elementSelectionDlg != null && createFlowDialog.elementSelectionDlg.getShell() != null && !createFlowDialog.elementSelectionDlg.getShell().isDisposed() && createFlowDialog.elementSelectionDlg.getShell().isVisible()) {
            final CreateFlowsToolsDialog.ElementSelectionDialog elementSelectionDlg = createFlowDialog.elementSelectionDlg;
            // Selecting an element for editing end to end flows
            if (selectedBocs.size() > 1) {
                elementSelectionDlg.setErrorMessage("Multiple elements are selected.\n " + elementSelectionDlg.getMessage());
                elementSelectionDlg.setSelection(null);
            } else if (selectedBocs.size() == 1) {
                elementSelectionDlg.setErrorMessage(null);
                final BusinessObjectContext selectedBoc = selectedBocs.get(0);
                elementSelectionDlg.setSelection(selectedBoc);
            }
        }
    }
}
Also used : Element(org.osate.aadl2.Element) TableViewer(org.eclipse.jface.viewers.TableViewer) Tool(org.osate.ge.internal.ui.tools.Tool) IDialogConstants(org.eclipse.jface.dialogs.IDialogConstants) FlowKind(org.osate.aadl2.FlowKind) Point(org.eclipse.swt.graphics.Point) SegmentData(org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData) SelectionChangedEvent(org.osate.ge.internal.ui.tools.SelectionChangedEvent) BusinessObjectNode(org.osate.ge.internal.diagram.runtime.updating.BusinessObjectNode) BusinessObjectContext(org.osate.ge.BusinessObjectContext) Composite(org.eclipse.swt.widgets.Composite) KeyEvent(org.eclipse.swt.events.KeyEvent) KeyAdapter(org.eclipse.swt.events.KeyAdapter) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) Text(org.eclipse.swt.widgets.Text) FlowSpecification(org.osate.aadl2.FlowSpecification) Button(org.eclipse.swt.widgets.Button) Diagnostic(org.eclipse.emf.common.util.Diagnostic) Set(java.util.Set) EObject(org.eclipse.emf.ecore.EObject) Connection(org.osate.aadl2.Connection) UUID(java.util.UUID) Display(org.eclipse.swt.widgets.Display) ArrayContentProvider(org.eclipse.jface.viewers.ArrayContentProvider) UiService(org.osate.ge.internal.services.UiService) ContextHelpUtil(org.osate.ge.internal.ui.util.ContextHelpUtil) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) ReferenceService(org.osate.ge.internal.services.ReferenceService) List(java.util.List) Window(org.eclipse.jface.window.Window) EndToEndFlowElement(org.osate.aadl2.EndToEndFlowElement) UiUtil(org.osate.ge.internal.ui.util.UiUtil) DeactivatedEvent(org.osate.ge.internal.ui.tools.DeactivatedEvent) MenuItem(org.eclipse.swt.widgets.MenuItem) SWT(org.eclipse.swt.SWT) EndToEndFlowSegment(org.osate.aadl2.EndToEndFlowSegment) AadlModificationService(org.osate.ge.internal.services.AadlModificationService) Optional(java.util.Optional) AadlNamingUtil(org.osate.ge.aadl2.internal.AadlNamingUtil) Queue(java.util.Queue) Label(org.eclipse.swt.widgets.Label) EndToEndFlow(org.osate.aadl2.EndToEndFlow) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) Namespace(org.osate.aadl2.Namespace) ComponentImplementation(org.osate.aadl2.ComponentImplementation) ComboViewer(org.eclipse.jface.viewers.ComboViewer) Function(java.util.function.Function) StructuredSelection(org.eclipse.jface.viewers.StructuredSelection) AgeAadlUtil(org.osate.ge.aadl2.internal.util.AgeAadlUtil) ResourceSet(org.eclipse.emf.ecore.resource.ResourceSet) ArrayList(java.util.ArrayList) ColoringService(org.osate.ge.internal.services.ColoringService) DataSubcomponent(org.osate.aadl2.DataSubcomponent) InternalDiagramEditor(org.osate.ge.internal.ui.editor.InternalDiagramEditor) GridData(org.eclipse.swt.layout.GridData) Aadl2Package(org.osate.aadl2.Aadl2Package) Subcomponent(org.osate.aadl2.Subcomponent) Completeness(org.osate.ge.internal.diagram.runtime.updating.Completeness) RowData(org.eclipse.swt.layout.RowData) Context(org.osate.aadl2.Context) Shell(org.eclipse.swt.widgets.Shell) Iterator(java.util.Iterator) Color(org.osate.ge.graphics.Color) ActivatedEvent(org.osate.ge.internal.ui.tools.ActivatedEvent) GridDataFactory(org.eclipse.jface.layout.GridDataFactory) EcoreUtil(org.eclipse.emf.ecore.util.EcoreUtil) ModeFeature(org.osate.aadl2.ModeFeature) ToolUtil(org.osate.ge.internal.ui.tools.ToolUtil) Adapters(org.eclipse.core.runtime.Adapters) RowLayout(org.eclipse.swt.layout.RowLayout) TitleAreaDialog(org.eclipse.jface.dialogs.TitleAreaDialog) AgeHandlerUtil(org.osate.ge.internal.ui.handlers.AgeHandlerUtil) SelectionEvent(org.eclipse.swt.events.SelectionEvent) Menu(org.eclipse.swt.widgets.Menu) NamedElement(org.osate.aadl2.NamedElement) Collections(java.util.Collections) LabelProvider(org.eclipse.jface.viewers.LabelProvider) Control(org.eclipse.swt.widgets.Control) GridLayout(org.eclipse.swt.layout.GridLayout) Color(org.osate.ge.graphics.Color) SegmentData(org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData) BusinessObjectContext(org.osate.ge.BusinessObjectContext) ModeFeature(org.osate.aadl2.ModeFeature)

Example 2 with Tool

use of org.osate.ge.internal.ui.tools.Tool in project osate2 by osate.

the class CreateFlowImplementationTool method activated.

@Override
public void activated(final ActivatedEvent ctx) {
    final UiService uiService = ctx.getUiService();
    try {
        ctx.getSelectedBoc().ifPresent(selectedBoc -> {
            final AadlModificationService aadlModService = ctx.getAadlModificatonService();
            final ColoringService coloringService = ctx.getColoringService();
            // Check for existing errors and warnings
            final Set<Diagnostic> diagnostics = ToolUtil.getAllReferencedPackageDiagnostics(selectedBoc);
            // Do not allow tool activation if there are errors in the models
            final Set<Diagnostic> errors = FlowDialogUtil.getErrors(diagnostics);
            if (!errors.isEmpty()) {
                Display.getDefault().asyncExec(() -> new FlowDialogUtil.ErrorDialog("The Create Flow Implementation", errors).open());
            } else {
                coloring = coloringService.adjustColors();
                // Create and update based on current selection
                createFlowImplDlg.create();
                if (segmentSelections.isEmpty() && modeFeatureSelections.isEmpty()) {
                    update(Collections.singletonList(selectedBoc), true);
                } else {
                    final Iterator<SegmentData> segmentIt = segmentSelections.iterator();
                    if (segmentIt.hasNext()) {
                        // Set color for flow spec
                        setColor(segmentIt.next().getBoc(), Color.ORANGE.darker());
                        // Set color for flow segments
                        while (segmentIt.hasNext()) {
                            setColor(segmentIt.next().getBoc(), Color.MAGENTA.darker());
                        }
                    }
                    // Set color for in mode and mode transitions
                    for (Iterator<BusinessObjectContext> modeFeatureIt = modeFeatureSelections.iterator(); modeFeatureIt.hasNext(); setColor(modeFeatureIt.next(), Color.MAGENTA.brighter())) {
                    }
                }
                if (createFlowImplDlg.open() == Window.OK && createFlowImplDlg != null) {
                    final BusinessObjectContext ownerBoc = createFlowImplDlg.getOwnerBoc().orElse(null);
                    // Create a new flow impl based on selections
                    final FlowImplementation flowImpl = createFlowImplDlg.createFlow(ownerBoc);
                    createFlowImplDlg.getFlowComponentImplementation(ownerBoc).ifPresent(ownerCi -> {
                        // Modifications to perform
                        final List<AadlModificationService.Modification<? extends NamedElement, ? extends NamedElement>> modifications = new ArrayList<>();
                        if (createFlowImplDlg.flowImplToEdit != null) {
                            // Editing existing flow impl
                            final FlowImplementation flowImplToEdit = createFlowImplDlg.flowImplToEdit;
                            // Copy owned property associations from old flow impl to new flow impl and remove old flow impl
                            modifications.add(Modification.create(flowImplToEdit, fi -> {
                                flowImpl.getOwnedPropertyAssociations().addAll(EcoreUtil.copyAll(fi.getOwnedPropertyAssociations()));
                                EcoreUtil.remove(fi);
                            }));
                        }
                        // Add new flow impl
                        modifications.add(Modification.create(ownerCi, ci -> {
                            ci.getOwnedFlowImplementations().add(flowImpl);
                            ci.setNoFlows(false);
                        }));
                        // Perform modifications
                        aadlModService.modify(modifications);
                    });
                }
            }
        });
    } finally {
        uiService.deactivateActiveTool();
    }
}
Also used : TableViewer(org.eclipse.jface.viewers.TableViewer) StyledText(org.eclipse.swt.custom.StyledText) Tool(org.osate.ge.internal.ui.tools.Tool) Modification(org.osate.ge.internal.services.AadlModificationService.Modification) IDialogConstants(org.eclipse.jface.dialogs.IDialogConstants) FlowKind(org.osate.aadl2.FlowKind) Point(org.eclipse.swt.graphics.Point) SegmentData(org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData) SelectionChangedEvent(org.osate.ge.internal.ui.tools.SelectionChangedEvent) Aadl2Factory(org.osate.aadl2.Aadl2Factory) BusinessObjectContext(org.osate.ge.BusinessObjectContext) Composite(org.eclipse.swt.widgets.Composite) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) FlowSpecification(org.osate.aadl2.FlowSpecification) Button(org.eclipse.swt.widgets.Button) Diagnostic(org.eclipse.emf.common.util.Diagnostic) Set(java.util.Set) Display(org.eclipse.swt.widgets.Display) UiService(org.osate.ge.internal.services.UiService) ContextHelpUtil(org.osate.ge.internal.ui.util.ContextHelpUtil) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) ReferenceService(org.osate.ge.internal.services.ReferenceService) List(java.util.List) Window(org.eclipse.jface.window.Window) UiUtil(org.osate.ge.internal.ui.util.UiUtil) DeactivatedEvent(org.osate.ge.internal.ui.tools.DeactivatedEvent) MenuItem(org.eclipse.swt.widgets.MenuItem) SWT(org.eclipse.swt.SWT) AadlModificationService(org.osate.ge.internal.services.AadlModificationService) Optional(java.util.Optional) Label(org.eclipse.swt.widgets.Label) FlowSegment(org.osate.aadl2.FlowSegment) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) Feature(org.osate.aadl2.Feature) ComponentImplementation(org.osate.aadl2.ComponentImplementation) Function(java.util.function.Function) AgeAadlUtil(org.osate.ge.aadl2.internal.util.AgeAadlUtil) ArrayList(java.util.ArrayList) ColoringService(org.osate.ge.internal.services.ColoringService) InternalDiagramEditor(org.osate.ge.internal.ui.editor.InternalDiagramEditor) GridData(org.eclipse.swt.layout.GridData) FlowEnd(org.osate.aadl2.FlowEnd) Aadl2Package(org.osate.aadl2.Aadl2Package) Subcomponent(org.osate.aadl2.Subcomponent) SimpleEntry(java.util.AbstractMap.SimpleEntry) RowData(org.eclipse.swt.layout.RowData) Context(org.osate.aadl2.Context) Shell(org.eclipse.swt.widgets.Shell) Iterator(java.util.Iterator) Color(org.osate.ge.graphics.Color) ActivatedEvent(org.osate.ge.internal.ui.tools.ActivatedEvent) GridDataFactory(org.eclipse.jface.layout.GridDataFactory) EcoreUtil(org.eclipse.emf.ecore.util.EcoreUtil) StyleRange(org.eclipse.swt.custom.StyleRange) ModeFeature(org.osate.aadl2.ModeFeature) ToolUtil(org.osate.ge.internal.ui.tools.ToolUtil) Adapters(org.eclipse.core.runtime.Adapters) TitleAreaDialog(org.eclipse.jface.dialogs.TitleAreaDialog) FlowImplementation(org.osate.aadl2.FlowImplementation) FlowElement(org.osate.aadl2.FlowElement) AgeHandlerUtil(org.osate.ge.internal.ui.handlers.AgeHandlerUtil) SelectionEvent(org.eclipse.swt.events.SelectionEvent) Menu(org.eclipse.swt.widgets.Menu) NamedElement(org.osate.aadl2.NamedElement) Collections(java.util.Collections) Control(org.eclipse.swt.widgets.Control) GridLayout(org.eclipse.swt.layout.GridLayout) Modification(org.osate.ge.internal.services.AadlModificationService.Modification) FlowImplementation(org.osate.aadl2.FlowImplementation) SegmentData(org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData) ArrayList(java.util.ArrayList) Diagnostic(org.eclipse.emf.common.util.Diagnostic) ColoringService(org.osate.ge.internal.services.ColoringService) UiService(org.osate.ge.internal.services.UiService) AadlModificationService(org.osate.ge.internal.services.AadlModificationService) BusinessObjectContext(org.osate.ge.BusinessObjectContext) NamedElement(org.osate.aadl2.NamedElement)

Aggregations

ArrayList (java.util.ArrayList)2 Collections (java.util.Collections)2 Iterator (java.util.Iterator)2 List (java.util.List)2 Objects (java.util.Objects)2 Optional (java.util.Optional)2 Set (java.util.Set)2 Function (java.util.function.Function)2 Collectors (java.util.stream.Collectors)2 Adapters (org.eclipse.core.runtime.Adapters)2 Diagnostic (org.eclipse.emf.common.util.Diagnostic)2 EcoreUtil (org.eclipse.emf.ecore.util.EcoreUtil)2 IDialogConstants (org.eclipse.jface.dialogs.IDialogConstants)2 TitleAreaDialog (org.eclipse.jface.dialogs.TitleAreaDialog)2 GridDataFactory (org.eclipse.jface.layout.GridDataFactory)2 TableViewer (org.eclipse.jface.viewers.TableViewer)2 Window (org.eclipse.jface.window.Window)2 SWT (org.eclipse.swt.SWT)2 SelectionAdapter (org.eclipse.swt.events.SelectionAdapter)2 SelectionEvent (org.eclipse.swt.events.SelectionEvent)2