Search in sources :

Example 1 with SegmentData

use of org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData 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 SegmentData

use of org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData in project osate2 by osate.

the class FlowToolUtil method createSegmentData.

/**
 * Creates a {@link SegmentData} instance for a flow end. The referenced {@link BusinessObjectContext} will be a {@link DiagramElement} if the flow end is in the diagram.
 * Otherwise, it will be an instance of a private implementation.
 * @return the new {@link SegmentData} instance. Will not return null.
 */
public static SegmentData createSegmentData(final ReferenceBuilderService referenceBuilder, final DiagramElement container, final FlowEnd flowEnd) {
    final DiagramElement tmp;
    if (flowEnd.getContext() == null) {
        tmp = container;
    } else {
        tmp = container.getChildByRelativeReference(referenceBuilder.getRelativeReference(flowEnd.getContext()));
        if (tmp == null) {
            return new SegmentData(new ChildlessBusinessObjectContext(new ChildlessBusinessObjectContext(container, flowEnd.getContext()), flowEnd.getFeature()));
        }
    }
    final DiagramElement flowEndDiagramElement = tmp.getChildByRelativeReference(referenceBuilder.getRelativeReference(flowEnd.getFeature()));
    if (flowEndDiagramElement == null) {
        return new SegmentData(new ChildlessBusinessObjectContext(tmp, flowEnd.getFeature()));
    }
    return new SegmentData(flowEndDiagramElement);
}
Also used : DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) SegmentData(org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData)

Example 3 with SegmentData

use of org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData in project osate2 by osate.

the class FlowToolUtil method createSegmentData.

/**
 * Creates a {@link SegmentData} instance for an end to end flow segment. The referenced {@link BusinessObjectContext} will be a {@link DiagramElement} if the flow segment is in the diagram.
 * Otherwise, it will be an instance of a private implementation.
 * @return the new {@link SegmentData} instance. Will not return null.
 */
public static SegmentData createSegmentData(final ReferenceBuilderService referenceBuilder, final DiagramElement container, final EndToEndFlowSegment seg) {
    final DiagramElement tmp;
    if (seg.getContext() == null) {
        tmp = container;
    } else {
        tmp = container.getChildByRelativeReference(referenceBuilder.getRelativeReference(seg.getContext()));
        if (tmp == null) {
            return new SegmentData(new ChildlessBusinessObjectContext(new ChildlessBusinessObjectContext(container, seg.getContext()), seg.getFlowElement()));
        }
    }
    if (seg.getFlowElement() instanceof EndToEndFlow) {
        final List<DiagramElement> highlightableSegments = new ArrayList<>();
        findSegmentDiagramElements((EndToEndFlow) AgeAadlUtil.getRootRefinedElement(seg.getFlowElement()), tmp, highlightableSegments);
        return new SegmentData(new ChildlessBusinessObjectContext(tmp, seg.getFlowElement()), highlightableSegments);
    } else {
        final DiagramElement flowElementDiagramElement = tmp.getChildByRelativeReference(referenceBuilder.getRelativeReference(seg.getFlowElement()));
        if (flowElementDiagramElement == null) {
            return new SegmentData(new ChildlessBusinessObjectContext(tmp, seg.getFlowElement()));
        }
        return new SegmentData(flowElementDiagramElement);
    }
}
Also used : DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) EndToEndFlow(org.osate.aadl2.EndToEndFlow) SegmentData(org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData) ArrayList(java.util.ArrayList)

Example 4 with SegmentData

use of org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData in project osate2 by osate.

the class FlowToolUtil method createSegmentData.

/**
 * Creates a {@link SegmentData} instance for a flow segment. The referenced {@link BusinessObjectContext} will be a {@link DiagramElement} if the flow segment is in the diagram.
 * Otherwise, it will be an instance of a private implementation.
 * @return the new {@link SegmentData} instance. Will not return null.
 */
public static SegmentData createSegmentData(final ReferenceBuilderService referenceBuilder, final DiagramElement container, final FlowSegment seg) {
    final DiagramElement tmp;
    if (seg.getContext() == null) {
        tmp = container;
    } else {
        tmp = container.getChildByRelativeReference(referenceBuilder.getRelativeReference(seg.getContext()));
        if (tmp == null) {
            return new SegmentData(new ChildlessBusinessObjectContext(new ChildlessBusinessObjectContext(container, seg.getContext()), seg.getFlowElement()));
        }
    }
    final DiagramElement flowElementDiagramElement = tmp.getChildByRelativeReference(referenceBuilder.getRelativeReference(seg.getFlowElement()));
    if (flowElementDiagramElement == null) {
        return new SegmentData(new ChildlessBusinessObjectContext(tmp, seg.getFlowElement()));
    }
    return new SegmentData(flowElementDiagramElement);
}
Also used : DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) SegmentData(org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData)

Example 5 with SegmentData

use of org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData in project osate2 by osate.

the class CreateEndToEndFlowSpecificationTool 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 End-To-End", errors).open());
            } else {
                // Create a coloring object that will allow adjustment of pictogram
                coloring = coloringService.adjustColors();
                // Create and update based on current selection
                createFlowDialog.create();
                if (segmentSelections.isEmpty() && modeFeatureSelections.isEmpty()) {
                    update(Collections.singletonList(selectedBoc));
                } else {
                    final Iterator<SegmentData> segmentIt = segmentSelections.iterator();
                    while (segmentIt.hasNext()) {
                        final SegmentData segmentData = segmentIt.next();
                        setColor(segmentData, Color.MAGENTA.darker());
                    }
                    for (Iterator<BusinessObjectContext> modeFeatureIt = modeFeatureSelections.iterator(); modeFeatureIt.hasNext(); setColor(modeFeatureIt.next(), Color.MAGENTA.brighter())) {
                    }
                    update();
                }
                if (createFlowDialog.open() == Window.OK && createFlowDialog != null) {
                    createFlowDialog.getFlow().ifPresent(endToEndFlow -> {
                        if (createFlowDialog.eteFlowToEdit != null) {
                            // Editing end to end flow
                            final EndToEndFlow endToEndFlowToEdit = (EndToEndFlow) createFlowDialog.eteFlowToEdit;
                            aadlModService.modify(endToEndFlowToEdit, eTEFlowToEdit -> {
                                eTEFlowToEdit.getAllFlowSegments().clear();
                                eTEFlowToEdit.getAllFlowSegments().addAll(endToEndFlow.getAllFlowSegments());
                                eTEFlowToEdit.setName(endToEndFlow.getName());
                                eTEFlowToEdit.getInModeOrTransitions().clear();
                                eTEFlowToEdit.getInModeOrTransitions().addAll(endToEndFlow.getInModeOrTransitions());
                            });
                        } else {
                            // Creating end to end flow
                            createFlowDialog.getOwnerComponentImplementation().ifPresent(ownerCi -> {
                                aadlModService.modify(ownerCi, ci -> {
                                    ci.getOwnedEndToEndFlows().add(endToEndFlow);
                                    ci.setNoFlows(false);
                                });
                            });
                        }
                    });
                }
            }
        });
    } finally {
        uiService.deactivateActiveTool();
    }
}
Also used : EndToEndFlow(org.osate.aadl2.EndToEndFlow) UiService(org.osate.ge.internal.services.UiService) AadlModificationService(org.osate.ge.internal.services.AadlModificationService) SegmentData(org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData) Diagnostic(org.eclipse.emf.common.util.Diagnostic) BusinessObjectContext(org.osate.ge.BusinessObjectContext) ColoringService(org.osate.ge.internal.services.ColoringService)

Aggregations

SegmentData (org.osate.ge.aadl2.ui.internal.tools.FlowDialogUtil.SegmentData)8 DiagramElement (org.osate.ge.internal.diagram.runtime.DiagramElement)7 ArrayList (java.util.ArrayList)4 Iterator (java.util.Iterator)4 Diagnostic (org.eclipse.emf.common.util.Diagnostic)4 BusinessObjectContext (org.osate.ge.BusinessObjectContext)4 Collections (java.util.Collections)3 List (java.util.List)3 Objects (java.util.Objects)3 Optional (java.util.Optional)3 Set (java.util.Set)3 Function (java.util.function.Function)3 Collectors (java.util.stream.Collectors)3 Adapters (org.eclipse.core.runtime.Adapters)3 EcoreUtil (org.eclipse.emf.ecore.util.EcoreUtil)3 IDialogConstants (org.eclipse.jface.dialogs.IDialogConstants)3 TitleAreaDialog (org.eclipse.jface.dialogs.TitleAreaDialog)3 GridDataFactory (org.eclipse.jface.layout.GridDataFactory)3 TableViewer (org.eclipse.jface.viewers.TableViewer)3 Window (org.eclipse.jface.window.Window)3