use of edu.uah.rsesc.aadlsimulator.NotificationHandler 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.NotificationHandler in project AGREE by loonwerks.
the class SimulatePossibilitiesHandler method openChart.
private void openChart(final IProgressMonitor monitor, final Shell shell, final Object simControlLock, final SimulationUIService simulationUIService, final SimulationEngine simulationEngine, final List<SimulationEngineState> simulationEngineStates, final SimulationEngineState initialState) {
simulationEngine.queueNotification(new NotificationHandler() {
@Override
public void handleNotification(final SimulationEngineNotification notification) {
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
try {
if (!simulationEngineStates.isEmpty() && !monitor.isCanceled()) {
// Listening for cancellation
final SimulatorStateListener simListener = new SimulatorStateListener() {
@Override
public void onSimulatorStateChanged(SimulatorState simulatorState) {
if (simulationUIService.getCurrentState().getEngineState() == null) {
if (shell != null && !shell.isDisposed()) {
// Close SimulatingPossibilitiesView on cancel
shell.close();
// Notify on cancel
synchronized (simControlLock) {
simControlLock.notify();
}
}
}
}
};
simulationUIService.addStateChangeListener(simListener);
try {
// Notify to complete progress monitor
synchronized (simControlLock) {
simControlLock.notify();
}
monitor.done();
// Lock simulation while chart is open
simulationUIService.lockUserInterface();
final SimulatePossibilitiesChartDialog view = new SimulatePossibilitiesChartDialog(shell, simulationUIService, simulationEngineStates);
final SetValueSelectionAdapter setValueSelectionAdapter = view.getSetValueSelectionAdapter();
final SimulationEngineState returnedState = setValueSelectionAdapter.getSelectedState();
if (returnedState != null) {
setSelectedState(view, returnedState);
}
} finally {
simulationUIService.removeStateChangeListener(simListener);
}
}
} finally {
simulationUIService.unlockUserInterface();
}
}
private void setSelectedState(final SimulatePossibilitiesChartDialog view, final SimulationEngineState returnedState) {
final SimulationEngine originalSimulationEngine = simulationUIService.getCurrentState().getSimulationEngine();
for (final ChartElement chartElement : view.getChartElements()) {
final Object simulationStateElement = chartElement.getSimulationStateElement();
if (simulationStateElement != null) {
final Object value = returnedState.getElementValue(returnedState.getNumberOfFrames() - 1, simulationStateElement);
if (value != null) {
if (value instanceof BigInteger) {
final IntegerLiteral il = InputConstraintFactory.eINSTANCE.createIntegerLiteral();
il.setValue((BigInteger) value);
originalSimulationEngine.setInputConstraint(simulationStateElement, il);
} else if (value instanceof Rational) {
final Rational rational = (Rational) value;
final BinaryExpression be = ExpressionFactory.createFraction(rational.numerator, rational.denominator);
originalSimulationEngine.setInputConstraint(simulationStateElement, be);
} else if (value instanceof Boolean) {
final BooleanLiteral bl = InputConstraintFactory.eINSTANCE.createBooleanLiteral();
bl.setValue((Boolean) value);
originalSimulationEngine.setInputConstraint(simulationStateElement, bl);
} else {
throw new RuntimeException("Unhandled Type: " + returnedState.getElementType(simulationStateElement));
}
}
}
}
simulationUIService.stepForward();
originalSimulationEngine.resetInputConstraints();
for (final ChartElement chartElement : view.getChartElements()) {
final Object simulationStateElement = chartElement.getSimulationStateElement();
if (simulationStateElement != null) {
originalSimulationEngine.setInputConstraint(simulationStateElement, initialState.getElementInputConstraintForNextFrame(simulationStateElement));
}
}
}
});
}
});
}
use of edu.uah.rsesc.aadlsimulator.NotificationHandler in project AGREE by loonwerks.
the class StepForwardMultipleTimesHandler method runSimulation.
protected void runSimulation(final IProgressMonitor monitor, final Object simControlLock, final SimulationUIService simulationUIService, final SimulationService simulationService, final SimulationEngine simulationEngine, final SelectStepsDialog dlg) {
for (int i = 1; i <= dlg.getSteps(); i++) {
// Step forward
simulationEngine.stepForward();
final String subTaskMsg = "Simulating step " + i + " of " + dlg.getSteps();
// Add state to list
simulationEngine.queueNotification(new NotificationHandler() {
@Override
public void handleNotification(final SimulationEngineNotification notification) {
if (monitor.isCanceled() || !notification.getEngineState().canStepForward()) {
if (!notification.getEngineState().canStepForward()) {
final Status status = new Status(IStatus.ERROR, FrameworkUtil.getBundle(getClass()).getSymbolicName(), "Simulation has halted.");
StatusManager.getManager().handle(status, StatusManager.SHOW);
}
simulationEngine.clearPendingCommands();
synchronized (simControlLock) {
simControlLock.notify();
}
return;
}
// Update monitor
monitor.subTask(subTaskMsg);
monitor.worked(1);
}
});
}
simulationEngine.queueNotification(new NotificationHandler() {
@Override
public void handleNotification(final SimulationEngineNotification notification) {
monitor.done();
synchronized (simControlLock) {
simControlLock.notify();
}
}
});
}
use of edu.uah.rsesc.aadlsimulator.NotificationHandler in project AGREE by loonwerks.
the class OpenVariablesChartHandler method execute.
public Object execute(ExecutionEvent event) throws ExecutionException {
try {
final SimulationUIService simulationUIService = (SimulationUIService) Objects.requireNonNull(PlatformUI.getWorkbench().getService(SimulationUIService.class), "unable to get simulation UI service");
// Open Value Visualization Chart
simulationUIService.getCurrentState().getSimulationEngine().queueNotification(new NotificationHandler() {
@Override
public void handleNotification(final SimulationEngineNotification notification) {
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
if (simulationUIService.getCurrentState().getEngineState().getNumberOfFrames() != 0) {
simulationUIService.lockUserInterface();
final Shell shell = new Shell(Display.getDefault().getActiveShell(), SWT.SHELL_TRIM & ~SWT.MIN);
// Listening for cancellation
final SimulatorStateListener simCanceledListener = new SimulatorStateListener() {
@Override
public void onSimulatorStateChanged(SimulatorState simulatorState) {
if (simulationUIService.getCurrentState().getEngineState() == null) {
if (shell != null && !shell.isDisposed()) {
// Close view on cancel
shell.close();
}
}
}
};
simulationUIService.addStateChangeListener(simCanceledListener);
try {
new VariablesChartDialog(shell, simulationUIService);
} finally {
simulationUIService.removeStateChangeListener(simCanceledListener);
simulationUIService.unlockUserInterface();
}
}
}
});
}
});
} 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;
}
Aggregations