use of edu.uah.rsesc.aadlsimulator.SimulationEngineState in project AGREE by loonwerks.
the class SimulatePossibilitiesChartDialog method createPoints.
private List<ChartPoint> createPoints(final Object xElementData, final Object yElementData, final Object zElementData, final Color color) {
final List<ChartPoint> chartPoints = new ArrayList<>();
for (final SimulationEngineState state : simulationEngineStates) {
final Object xElementValue = state.getElementValue(state.getNumberOfFrames() - 1, xElementData);
final Object yElementValue = state.getElementValue(state.getNumberOfFrames() - 1, yElementData);
if (xElementValue != null && yElementValue != null) {
Object zElementValue = null;
if (zElementData != null) {
zElementValue = state.getElementValue(state.getNumberOfFrames() - 1, zElementData);
}
final ChartPoint chartPoint = chartHelper.createChartPoint(simulationEngineStates.indexOf(state), color);
if (!chartHelper.setChartPointInfo(chartPoint, xElementValue, yElementValue, zElementValue)) {
chartPoints.add(chartPoint);
}
}
}
return chartPoints;
}
use of edu.uah.rsesc.aadlsimulator.SimulationEngineState 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);
}
}
}
}
}
}
}
}
use of edu.uah.rsesc.aadlsimulator.SimulationEngineState in project AGREE by loonwerks.
the class SimulatePossibilitiesHandler method runSimulation.
private void runSimulation(final IProgressMonitor monitor, final Object simControlLock, final SimulationUIService simulationUIService, final SimulationEngine simulationEngine, final List<SimulationEngineState> simulationEngineStates, final SelectStepsDialog dlg) {
// Step forward
for (int i = 0; i < dlg.getSteps(); i++) {
simulationEngine.stepForward();
// Add state to list
simulationEngine.queueNotification(new NotificationHandler() {
@Override
public void handleNotification(final SimulationEngineNotification notification) {
if (monitor.isCanceled()) {
synchronized (simControlLock) {
simControlLock.notify();
}
return;
}
final SimulationEngineState simulationState = simulationEngine.getCurrentState();
simulationEngineStates.add(simulationState);
// Update monitor
monitor.subTask("Simulating step " + simulationEngineStates.size() + " of " + dlg.getSteps());
monitor.worked(1);
}
});
// Step backward
simulationEngine.stepBackward();
}
}
use of edu.uah.rsesc.aadlsimulator.SimulationEngineState in project AGREE by loonwerks.
the class SaveLustreHandler method execute.
public Object execute(ExecutionEvent event) throws ExecutionException {
final SimulationUIService simulationUIService = Objects.requireNonNull((SimulationUIService) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getService(SimulationUIService.class), "Unable to retrieve simulation UI service");
final SimulationEngineState engineState = simulationUIService.getCurrentState().getEngineState();
if (engineState instanceof LustreProgramProvider) {
LustreProgramSaver.handleSave((LustreProgramProvider) engineState);
}
return null;
}
use of edu.uah.rsesc.aadlsimulator.SimulationEngineState 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());
}
Aggregations