Search in sources :

Example 1 with SimulatorState

use of edu.uah.rsesc.aadlsimulator.ui.services.SimulatorState in project AGREE by loonwerks.

the class StepBackwardHandler method execute.

public Object execute(ExecutionEvent event) throws ExecutionException {
    try {
        final SimulationUIService simulationUIService = Objects.requireNonNull((SimulationUIService) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getService(SimulationUIService.class), "Unable to retrieve simulation UI service");
        final SimulatorState simulatorState = simulationUIService.getCurrentState();
        final SimulationEngine engine = simulatorState.getSimulationEngine();
        if (engine != null && engine.getCurrentState().canStepBackward()) {
            engine.stepBackward();
        }
    } catch (final Exception ex) {
        final Status status = new Status(IStatus.ERROR, FrameworkUtil.getBundle(getClass()).getSymbolicName(), "Error", ex);
        StatusManager.getManager().handle(status, StatusManager.SHOW | StatusManager.LOG);
    }
    return null;
}
Also used : SimulationUIService(edu.uah.rsesc.aadlsimulator.ui.services.SimulationUIService) SimulationEngine(edu.uah.rsesc.aadlsimulator.SimulationEngine) IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) SimulatorState(edu.uah.rsesc.aadlsimulator.ui.services.SimulatorState) ExecutionException(org.eclipse.core.commands.ExecutionException)

Example 2 with SimulatorState

use of edu.uah.rsesc.aadlsimulator.ui.services.SimulatorState in project AGREE by loonwerks.

the class StopHandler method execute.

public void execute() {
    try {
        final SimulationService simulationService = Objects.requireNonNull((SimulationService) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getService(SimulationService.class), "Unable to retrieve simulation service");
        final SimulationUIService simulationUIService = Objects.requireNonNull((SimulationUIService) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getService(SimulationUIService.class), "Unable to retrieve simulation UI service");
        final SimulatorState simulatorState = simulationUIService.getCurrentState();
        final SimulationEngine engine = simulatorState.getSimulationEngine();
        if (engine != null) {
            simulationService.dispose(engine);
        }
    } catch (final Exception ex) {
        final Status status = new Status(IStatus.ERROR, FrameworkUtil.getBundle(getClass()).getSymbolicName(), "Error", ex);
        StatusManager.getManager().handle(status, StatusManager.SHOW | StatusManager.LOG);
    }
}
Also used : SimulationUIService(edu.uah.rsesc.aadlsimulator.ui.services.SimulationUIService) SimulationEngine(edu.uah.rsesc.aadlsimulator.SimulationEngine) Status(org.eclipse.core.runtime.Status) IStatus(org.eclipse.core.runtime.IStatus) SimulatorState(edu.uah.rsesc.aadlsimulator.ui.services.SimulatorState) SimulationService(edu.uah.rsesc.aadlsimulator.services.SimulationService) ExecutionException(org.eclipse.core.commands.ExecutionException)

Example 3 with SimulatorState

use of edu.uah.rsesc.aadlsimulator.ui.services.SimulatorState in project AGREE by loonwerks.

the class SimulatorTooltipContributor method addTooltipContents.

@Override
public void addTooltipContents(final TooltipContributorContext ctx) {
    final Object bo = ctx.getBusinessObjectContext().getBusinessObject();
    final SimulationUIService simulationUiService = Objects.requireNonNull(EclipseContextFactory.getServiceContext(FrameworkUtil.getBundle(getClass()).getBundleContext()).get(SimulationUIService.class), "unable to get simulation UI service");
    final SimulatorState simulatorState = simulationUiService.getCurrentState();
    if (simulatorState.getEngineState() != null) {
        final SimulationEngineState engineState = simulatorState.getEngineState();
        if (engineState.getNumberOfFrames() > 0) {
            if (bo instanceof FeatureInstance || bo instanceof ComponentInstance) {
                final InstanceObject io = (InstanceObject) bo;
                // Compare the references from the diagram and simulation system instances. Only show tooltip if they match
                // This will ensure that the tooltips only appear for diagrams of instances of the same component implementation
                final URI diagramSystemInstanceUri = getResourceUri(io.getSystemInstance());
                final URI simulationSystemInstanceUri = getResourceUri(simulatorState.getSimulationEngine().getSystemInstance());
                if (diagramSystemInstanceUri != null && diagramSystemInstanceUri.equals(simulationSystemInstanceUri)) {
                    final int frameIndex = simulatorState.getSelectedFrameIndex() == SimulatorState.NO_FRAME_INDEX_SELECTED ? engineState.getNumberOfFrames() - 1 : simulatorState.getSelectedFrameIndex();
                    if (frameIndex < engineState.getNumberOfFrames()) {
                        // Handle the root instance object as a special case because there will not be a state element for it.
                        if (io == io.getSystemInstance()) {
                            final StyledText st = new StyledText(ctx.getTooltip(), SWT.NONE);
                            st.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
                            addTooltipInfo(st, engineState, frameIndex, io.getName(), null, engineState.getRootElements(), io, INDENT_SIZE);
                        } else {
                            final Object stateElement = engineState.findElement(io);
                            if (stateElement != null) {
                                final StyledText st = new StyledText(ctx.getTooltip(), SWT.NONE);
                                st.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
                                addStateElementsInfo(st, engineState, frameIndex, Collections.singleton(stateElement), io, INDENT_SIZE);
                            }
                        }
                    }
                }
            }
        }
    }
}
Also used : SimulationUIService(edu.uah.rsesc.aadlsimulator.ui.services.SimulationUIService) InstanceObject(org.osate.aadl2.instance.InstanceObject) StyledText(org.eclipse.swt.custom.StyledText) SimulationEngineState(edu.uah.rsesc.aadlsimulator.SimulationEngineState) FeatureInstance(org.osate.aadl2.instance.FeatureInstance) SimulatorState(edu.uah.rsesc.aadlsimulator.ui.services.SimulatorState) ComponentInstance(org.osate.aadl2.instance.ComponentInstance) InstanceObject(org.osate.aadl2.instance.InstanceObject) URI(org.eclipse.emf.common.util.URI)

Example 4 with SimulatorState

use of edu.uah.rsesc.aadlsimulator.ui.services.SimulatorState in project AGREE by loonwerks.

the class ExportAction method buildExportArguments.

private ExportArguments buildExportArguments() {
    final SimulationUIService simUiService = (SimulationUIService) Objects.requireNonNull(PlatformUI.getWorkbench().getService(SimulationUIService.class), "Unable to retrieve Simulation UI Service");
    final SimulatorState simulatorState = simUiService.getCurrentState();
    if (!(simulatorState.getEngineState() instanceof AGREESimulationState)) {
        throw new RuntimeException("Simulation engine state must be an AGREESimulationState");
    }
    if (!(simulatorState.getSimulationEngine() instanceof AGREESimulationEngine)) {
        throw new RuntimeException("Simulation engine must be an AGREESimulationEngine");
    }
    final AGREESimulationState agreeSimState = (AGREESimulationState) simulatorState.getEngineState();
    final AGREESimulationEngine engine = (AGREESimulationEngine) simulatorState.getSimulationEngine();
    final ComponentImplementation componentImplementation = engine.getSystemInstance().getComponentImplementation();
    final Counterexample cex = buildCounterexample(agreeSimState);
    final Renaming renaming = engine.getSimulationProgram().getAgreeRenaming();
    return new ExportArguments() {

        @Override
        public ComponentImplementation getComponentImplementation() {
            return componentImplementation;
        }

        @Override
        public Counterexample getCounterexample() {
            return cex;
        }

        @Override
        public Renaming getAgreeRenaming() {
            return renaming;
        }
    };
}
Also used : SimulationUIService(edu.uah.rsesc.aadlsimulator.ui.services.SimulationUIService) ComponentImplementation(org.osate.aadl2.ComponentImplementation) AGREESimulationState(edu.uah.rsesc.aadlsimulator.agree.engine.AGREESimulationState) ExportArguments(edu.uah.rsesc.aadlsimulator.agree.ext.AGREESimulationExporter.ExportArguments) AGREESimulationEngine(edu.uah.rsesc.aadlsimulator.agree.engine.AGREESimulationEngine) SimulatorState(edu.uah.rsesc.aadlsimulator.ui.services.SimulatorState) Counterexample(jkind.results.Counterexample) Renaming(jkind.api.results.Renaming)

Example 5 with SimulatorState

use of edu.uah.rsesc.aadlsimulator.ui.services.SimulatorState in project AGREE by loonwerks.

the class VariablesView method createView.

@PostConstruct
void createView(final Composite parent) {
    final Display display = parent.getDisplay();
    colorManager = new DeviceResourceManager(display);
    unchangedValueColor = colorManager.createColor(new RGB(192, 192, 192));
    constraintErrorColor = colorManager.createColor(red);
    greenImage = createColorIconImage(display, green);
    redImage = createColorIconImage(display, red);
    yellowImage = createColorIconImage(display, yellow);
    customColorImage = createColorIconImage(display, customRgb);
    // Create root composite
    final Composite root = new Composite(parent, SWT.NONE);
    final GridLayout rootLayout = new GridLayout(1, false);
    root.setLayout(rootLayout);
    // Create the variable tree viewer
    treeViewer = new VariablesTreeViewer(root, SWT.FULL_SELECTION);
    // Enable tooltip support
    ColumnViewerToolTipSupport.enableFor(treeViewer);
    treeSelectionTracker = new TreeSelectionTracker(treeViewer);
    GridDataFactory.fillDefaults().grab(true, true).applyTo(treeViewer.getTree());
    treeViewer.setUseHashlookup(true);
    final VariableContentProvider contentProvider = new VariableContentProvider();
    treeViewer.setContentProvider(contentProvider);
    treeViewer.setInput(null);
    treeViewer.setComparator(new ViewerComparator() {

        @Override
        public int compare(final Viewer viewer, final Object e1, final Object e2) {
            if (contentProvider.currentState == null) {
                return 0;
            }
            // Sort component instances before other variables
            final InstanceObject io1 = contentProvider.currentState.getEngineState().getElementInstanceObject(e1);
            final InstanceObject io2 = contentProvider.currentState.getEngineState().getElementInstanceObject(e2);
            if (io1 instanceof ComponentInstance && !(io2 instanceof ComponentInstance)) {
                return -1;
            } else if (io2 instanceof ComponentInstance && !(io1 instanceof ComponentInstance)) {
                return 1;
            }
            // Sort feature instances before the remainder
            if (io1 instanceof FeatureInstance && !(io2 instanceof FeatureInstance)) {
                return -1;
            } else if (io2 instanceof FeatureInstance && !(io1 instanceof FeatureInstance)) {
                return 1;
            }
            final String n1 = contentProvider.currentState.getEngineState().getElementName(e1);
            final String n2 = contentProvider.currentState.getEngineState().getElementName(e2);
            return getComparator().compare(n1, n2);
        }
    });
    treeViewer.setFilters(new ViewerFilter[] { new ViewerFilter() {

        @Override
        public boolean select(final Viewer viewer, final Object parentElement, final Object element) {
            return !contentProvider.currentState.getEngineState().isElementHidden(element);
        }
    } });
    // Create columns
    final TreeViewerColumn nameColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
    nameColumn.getColumn().setWidth(200);
    nameColumn.getColumn().setText("Name");
    nameColumn.getColumn().addControlListener(resizeListener);
    nameColumn.setLabelProvider(new StyledCellLabelProvider() {

        @Override
        public void update(final ViewerCell cell) {
            cell.setText(getText(cell.getElement()));
            cell.setImage(getImage(cell.getElement()));
        }

        private String getText(final Object element) {
            // Get the name of the frame state element
            final SimulatorState state = contentProvider.getCurrentState();
            if (state == null) {
                return "";
            }
            return state.getEngineState().getElementName(element);
        }

        private Image getImage(final Object element) {
            final SimulatorState state = contentProvider.getCurrentState();
            if (state == null) {
                return null;
            }
            final InstanceObject instanceObject = state.getEngineState().getElementInstanceObject(element);
            return instanceObject == null ? null : UiUtil.getModelElementLabelProvider().getImage(instanceObject);
        }
    });
    final TreeViewerColumn nextValueColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
    nextValueColumn.getColumn().setWidth(100);
    nextValueColumn.getColumn().setText("Next Value");
    nextValueColumn.setLabelProvider(new OwnerDrawLabelProvider() {

        @Override
        public void initialize(final ColumnViewer viewer, final ViewerColumn column) {
            super.initialize(viewer, column, true);
        }

        @Override
        public void update(final ViewerCell cell) {
            final String constraintTxt = getConstraintText(cell.getElement());
            final String txt;
            final Color foreground;
            if (constraintTxt == null) {
                // Attempt to retrieve the value for the next frame from from the engine state.
                final SimulatorState state = contentProvider.getCurrentState();
                if (state == null) {
                    txt = "";
                } else {
                    final SimulationEngineState engineState = state.getEngineState();
                    txt = ValueFormatter.formatValue(engineState.getElementValue(engineState.getNumberOfFrames(), cell.getElement()));
                }
                foreground = unchangedValueColor;
            } else {
                txt = constraintTxt;
                foreground = null;
            }
            cell.setText(txt);
            cell.setForeground(foreground);
            super.update(cell);
        }

        private String getConstraintText(final Object element) {
            // Return the invalid value if the input that was entered is not correct
            final ConstraintError constraintError = elementToConstraintErrorMap.get(element);
            if (constraintError != null) {
                return constraintError.constraint;
            }
            final SimulationEngineState engineState = simulationUiService.getCurrentState().getEngineState();
            if (engineState == null) {
                return null;
            }
            final InputConstraint ic = engineState.getElementInputConstraintForNextFrame(element);
            if (ic == null) {
                return null;
            }
            return inputConstraintHelper.unparse(ic);
        }

        @Override
        public String getToolTipText(final Object element) {
            final ConstraintError constraintError = elementToConstraintErrorMap.get(element);
            if (constraintError == null) {
                return super.getToolTipText(element);
            } else {
                return constraintError.errorMessage;
            }
        }

        @Override
        protected void measure(final Event event, final Object element) {
        }

        @Override
        protected void erase(final Event event, final Object element) {
            // Color cells which contain invalid values
            if (elementToConstraintErrorMap.containsKey(element)) {
                final GC gc = event.gc;
                final Color oldBackground = event.gc.getBackground();
                gc.setBackground(constraintErrorColor);
                final Rectangle bounds = event.getBounds();
                gc.fillRectangle(bounds);
                gc.setBackground(oldBackground);
                // Ensure that selection and hover indicators are not drawn for the highlighted cell
                event.detail &= ~SWT.SELECTED;
                event.detail &= ~SWT.HOT;
            }
            // Disable drawing foreground. paint() will draw the foreground text in order to fix coloring issues when the row is selected.
            event.detail &= ~SWT.FOREGROUND;
        }

        @Override
        protected void paint(final Event event, final Object element) {
            // Draw just the text with the appropriate background color
            final TreeItem item = (TreeItem) event.item;
            final Rectangle textBounds = item.getTextBounds(event.index);
            final GC gc = event.gc;
            final String txt = item.getText(event.index);
            gc.setForeground(item.getForeground(event.index));
            String drawTxt = txt;
            // Check the width of the text and truncate it as necessary
            final int maxWidth = Math.max(gc.getClipping().width - 6, textBounds.width);
            if (maxWidth > 0) {
                String truncatedTxt = txt;
                while (gc.textExtent(drawTxt).x > maxWidth && truncatedTxt.length() > 0) {
                    truncatedTxt = truncatedTxt.substring(0, truncatedTxt.length() - 1);
                    drawTxt = truncatedTxt + "...";
                }
                gc.drawString(drawTxt, textBounds.x, textBounds.y, true);
            }
        }
    });
    nextValueEditingSupport = new NextValueEditingSupport(simulationUiService, treeViewer);
    nextValueColumn.setEditingSupport(nextValueEditingSupport);
    nextValueColumn.getColumn().addControlListener(resizeListener);
    // Make headers and lines visible
    final Tree tree = treeViewer.getTree();
    tree.setHeaderVisible(true);
    tree.setLinesVisible(true);
    createContextMenu(tree);
    // Listen for tree resizing
    tree.addControlListener(resizeListener);
    // Create the slider
    frameSlider = new Slider(root, SWT.HORIZONTAL);
    frameSlider.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(final SelectionEvent e) {
            if (!editingTreeViewer) {
                startEditingTreeViewer();
                frameScrollOffset = frameSlider.getMaximum() - frameSlider.getSelection() - frameSlider.getThumb();
                update();
                stopEditingTreeViewer();
            }
        }
    });
    GridDataFactory.fillDefaults().grab(true, false).applyTo(frameSlider);
    // Add listener and populate UI with current state
    simulationUiService.addStateChangeListener(stateListener);
    stateListener.onSimulatorStateChanged(simulationUiService.getCurrentState());
}
Also used : ViewerFilter(org.eclipse.jface.viewers.ViewerFilter) Slider(org.eclipse.swt.widgets.Slider) FeatureInstance(org.osate.aadl2.instance.FeatureInstance) SimulationEngineState(edu.uah.rsesc.aadlsimulator.SimulationEngineState) TreeItem(org.eclipse.swt.widgets.TreeItem) ColumnViewer(org.eclipse.jface.viewers.ColumnViewer) Rectangle(org.eclipse.swt.graphics.Rectangle) ColumnViewer(org.eclipse.jface.viewers.ColumnViewer) TreeViewer(org.eclipse.jface.viewers.TreeViewer) Viewer(org.eclipse.jface.viewers.Viewer) Image(org.eclipse.swt.graphics.Image) OwnerDrawLabelProvider(org.eclipse.jface.viewers.OwnerDrawLabelProvider) InstanceObject(org.osate.aadl2.instance.InstanceObject) GridLayout(org.eclipse.swt.layout.GridLayout) ComponentInstance(org.osate.aadl2.instance.ComponentInstance) SelectionEvent(org.eclipse.swt.events.SelectionEvent) Tree(org.eclipse.swt.widgets.Tree) InputConstraint(edu.uah.rsesc.aadlsimulator.xtext.inputConstraint.InputConstraint) GC(org.eclipse.swt.graphics.GC) StyledCellLabelProvider(org.eclipse.jface.viewers.StyledCellLabelProvider) DeviceResourceManager(org.eclipse.jface.resource.DeviceResourceManager) Composite(org.eclipse.swt.widgets.Composite) ViewerComparator(org.eclipse.jface.viewers.ViewerComparator) Color(org.eclipse.swt.graphics.Color) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) SimulatorState(edu.uah.rsesc.aadlsimulator.ui.services.SimulatorState) RGB(org.eclipse.swt.graphics.RGB) ViewerColumn(org.eclipse.jface.viewers.ViewerColumn) TreeViewerColumn(org.eclipse.jface.viewers.TreeViewerColumn) ViewerCell(org.eclipse.jface.viewers.ViewerCell) TreeViewerColumn(org.eclipse.jface.viewers.TreeViewerColumn) ControlEvent(org.eclipse.swt.events.ControlEvent) BeforeStepForwardEvent(edu.uah.rsesc.aadlsimulator.ui.events.BeforeStepForwardEvent) Event(org.eclipse.swt.widgets.Event) SelectionEvent(org.eclipse.swt.events.SelectionEvent) InstanceObject(org.osate.aadl2.instance.InstanceObject) Display(org.eclipse.swt.widgets.Display) PostConstruct(javax.annotation.PostConstruct)

Aggregations

SimulatorState (edu.uah.rsesc.aadlsimulator.ui.services.SimulatorState)11 SimulationUIService (edu.uah.rsesc.aadlsimulator.ui.services.SimulationUIService)8 SimulationEngine (edu.uah.rsesc.aadlsimulator.SimulationEngine)5 ExecutionException (org.eclipse.core.commands.ExecutionException)5 IStatus (org.eclipse.core.runtime.IStatus)5 Status (org.eclipse.core.runtime.Status)5 SimulationEngineState (edu.uah.rsesc.aadlsimulator.SimulationEngineState)4 SimulatorStateListener (edu.uah.rsesc.aadlsimulator.ui.services.SimulatorStateListener)4 Shell (org.eclipse.swt.widgets.Shell)3 NotificationHandler (edu.uah.rsesc.aadlsimulator.NotificationHandler)2 SimulationEngineNotification (edu.uah.rsesc.aadlsimulator.SimulationEngineNotification)2 AGREESimulationEngine (edu.uah.rsesc.aadlsimulator.agree.engine.AGREESimulationEngine)2 SimulationService (edu.uah.rsesc.aadlsimulator.services.SimulationService)2 SelectStepsDialog (edu.uah.rsesc.aadlsimulator.ui.dialogs.SelectStepsDialog)2 StepForwardCanceledException (edu.uah.rsesc.aadlsimulator.ui.services.StepForwardCanceledException)2 InputConstraint (edu.uah.rsesc.aadlsimulator.xtext.inputConstraint.InputConstraint)2 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)2 Job (org.eclipse.core.runtime.jobs.Job)2 SelectionAdapter (org.eclipse.swt.events.SelectionAdapter)2 SelectionEvent (org.eclipse.swt.events.SelectionEvent)2