Search in sources :

Example 1 with DefaultDiagramConfigurationDialogModel

use of org.osate.ge.internal.ui.dialogs.DefaultDiagramConfigurationDialogModel in project osate2 by osate.

the class ConfigureDiagramHandler 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 InternalDiagramEditor diagramEditor = (InternalDiagramEditor) activeEditor;
    final List<DiagramElement> selectedDiagramElements = AgeHandlerUtil.getSelectedDiagramElements();
    final AgeDiagram diagram = diagramEditor.getDiagram();
    if (diagram == null) {
        throw new RuntimeException("Unable to get diagram");
    }
    // Get services
    final BusinessObjectTreeUpdater boTreeUpdater = diagramEditor.getBoTreeUpdater();
    final DiagramUpdater diagramUpdater = diagramEditor.getDiagramUpdater();
    final ProjectProvider projectProvider = Objects.requireNonNull(Adapters.adapt(diagramEditor, ProjectProvider.class), "Unable to retrieve project provider");
    final LayoutInfoProvider layoutInfoProvider = Objects.requireNonNull(Adapters.adapt(diagramEditor, LayoutInfoProvider.class), "Unable to retrieve layout information provider");
    final ExtensionRegistryService extService = Objects.requireNonNull(Adapters.adapt(diagramEditor, ExtensionRegistryService.class), "Unable to retrieve extension service");
    final ProjectReferenceService referenceService = Objects.requireNonNull(Adapters.adapt(diagramEditor, ProjectReferenceService.class), "Unable to retrieve reference service");
    BusinessObjectNode boTree = DiagramToBusinessObjectTreeConverter.createBusinessObjectNode(diagram);
    // Update the tree so that it's business objects are refreshed
    boTree = boTreeUpdater.updateTree(diagram.getConfiguration(), boTree);
    final DefaultDiagramConfigurationDialogModel model = new DefaultDiagramConfigurationDialogModel(referenceService, extService, projectProvider, diagram.getConfiguration().getDiagramType());
    // Create a BO path for the initial selection. The initial selection will be the first diagram element which will be included in the BO tree.
    Object[] initialSelectionBoPath = null;
    for (final DiagramElement selectedDiagramElement : selectedDiagramElements) {
        if (model.shouldShowBusinessObject(selectedDiagramElement.getBusinessObject())) {
            // Only build a selection path if the BO will be shown
            DiagramNode tmp = selectedDiagramElement;
            final LinkedList<Object> boList = new LinkedList<>();
            while (tmp instanceof DiagramElement) {
                boList.addFirst(tmp.getBusinessObject());
                tmp = tmp.getParent();
            }
            initialSelectionBoPath = boList.toArray();
            break;
        }
    }
    // Show the dialog
    final DiagramConfigurationDialog.Result result = DiagramConfigurationDialog.show(null, model, diagram.getConfiguration(), boTree, initialSelectionBoPath);
    if (result != null) {
        // Update the diagram
        diagramEditor.getActionExecutor().execute("Set Diagram Configuration", ExecutionMode.NORMAL, () -> {
            diagram.modify("Set Diagram Configuration", m -> {
                m.setDiagramConfiguration(result.getDiagramConfiguration());
                diagramUpdater.updateDiagram(diagram, result.getBusinessObjectTree());
            });
            // Clear ghosts triggered by this update to prevent them from being unghosted during the next update.
            diagramUpdater.clearGhosts();
            diagram.modify("Layout", m -> DiagramElementLayoutUtil.layoutIncrementally(diagram, m, layoutInfoProvider));
            return null;
        });
    }
    return null;
}
Also used : BusinessObjectTreeUpdater(org.osate.ge.internal.diagram.runtime.updating.BusinessObjectTreeUpdater) DiagramNode(org.osate.ge.internal.diagram.runtime.DiagramNode) ProjectReferenceService(org.osate.ge.internal.services.ProjectReferenceService) ExtensionRegistryService(org.osate.ge.internal.services.ExtensionRegistryService) DefaultDiagramConfigurationDialogModel(org.osate.ge.internal.ui.dialogs.DefaultDiagramConfigurationDialogModel) DiagramUpdater(org.osate.ge.internal.diagram.runtime.updating.DiagramUpdater) IEditorPart(org.eclipse.ui.IEditorPart) LinkedList(java.util.LinkedList) InternalDiagramEditor(org.osate.ge.internal.ui.editor.InternalDiagramEditor) DiagramElement(org.osate.ge.internal.diagram.runtime.DiagramElement) BusinessObjectNode(org.osate.ge.internal.diagram.runtime.updating.BusinessObjectNode) DiagramConfigurationDialog(org.osate.ge.internal.ui.dialogs.DiagramConfigurationDialog) AgeDiagram(org.osate.ge.internal.diagram.runtime.AgeDiagram) LayoutInfoProvider(org.osate.ge.internal.diagram.runtime.layout.LayoutInfoProvider) ProjectProvider(org.osate.ge.internal.services.ProjectProvider)

Aggregations

LinkedList (java.util.LinkedList)1 IEditorPart (org.eclipse.ui.IEditorPart)1 AgeDiagram (org.osate.ge.internal.diagram.runtime.AgeDiagram)1 DiagramElement (org.osate.ge.internal.diagram.runtime.DiagramElement)1 DiagramNode (org.osate.ge.internal.diagram.runtime.DiagramNode)1 LayoutInfoProvider (org.osate.ge.internal.diagram.runtime.layout.LayoutInfoProvider)1 BusinessObjectNode (org.osate.ge.internal.diagram.runtime.updating.BusinessObjectNode)1 BusinessObjectTreeUpdater (org.osate.ge.internal.diagram.runtime.updating.BusinessObjectTreeUpdater)1 DiagramUpdater (org.osate.ge.internal.diagram.runtime.updating.DiagramUpdater)1 ExtensionRegistryService (org.osate.ge.internal.services.ExtensionRegistryService)1 ProjectProvider (org.osate.ge.internal.services.ProjectProvider)1 ProjectReferenceService (org.osate.ge.internal.services.ProjectReferenceService)1 DefaultDiagramConfigurationDialogModel (org.osate.ge.internal.ui.dialogs.DefaultDiagramConfigurationDialogModel)1 DiagramConfigurationDialog (org.osate.ge.internal.ui.dialogs.DiagramConfigurationDialog)1 InternalDiagramEditor (org.osate.ge.internal.ui.editor.InternalDiagramEditor)1