InstantiateSelectionDialog.java
package org.osate.ui.dialogs;
import java.io.IOException;
import java.util.List;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.xtext.ui.label.AbstractLabelProvider;
import org.osate.aadl2.ComponentImplementation;
import org.osate.aadl2.SystemImplementation;
import org.osate.core.OsateCorePlugin;
import org.osate.ui.UiUtil;
/**
* @since 4.0
*/
public class InstantiateSelectionDialog extends ElementListSelectionDialog {
private final boolean systemsOnlyDefault;
private Button dontShowButton;
private Button systemsOnlyButton;
public InstantiateSelectionDialog(final Shell shell, final boolean systemsOnly,
final List<ComponentImplementation> fromAadl, final List<SystemImplementation> systems) {
super(shell, new AbstractLabelProvider(UiUtil.getModelElementLabelProvider()) {
@Override
public String getText(final Object element) {
final String original = super.getText(element);
final String qualifiedName = ((ComponentImplementation) element).getQualifiedName();
final String classifierCategory = original.substring(0, original.lastIndexOf(' '));
return qualifiedName + " - " + classifierCategory;
}
});
systemsOnlyDefault = systemsOnly;
setTitle("Select Component Implementations");
setMessage("Select the component implementations to instantiate from the selected .aadl files.");
setElements(fromAadl.toArray());
setMultipleSelection(true);
setInitialElementSelections(systemsOnly ? systems : fromAadl);
setBlockOnOpen(true);
}
@Override
protected Control createDialogArea(final Composite parent) {
Composite contents = (Composite) super.createDialogArea(parent);
dontShowButton = new Button(contents, SWT.CHECK);
dontShowButton.setText("Don't show this dialog again");
GridData data = new GridData();
data.grabExcessVerticalSpace = false;
data.grabExcessHorizontalSpace = true;
data.horizontalAlignment = GridData.FILL;
data.verticalAlignment = GridData.BEGINNING;
dontShowButton.setLayoutData(data);
dontShowButton.setFont(parent.getFont());
systemsOnlyButton = new Button(contents, SWT.CHECK);
systemsOnlyButton.setText("Only systems by default");
GridData data2 = new GridData();
data2.grabExcessVerticalSpace = false;
data2.grabExcessHorizontalSpace = true;
data2.horizontalAlignment = GridData.FILL;
data2.verticalAlignment = GridData.BEGINNING;
systemsOnlyButton.setLayoutData(data2);
systemsOnlyButton.setFont(parent.getFont());
systemsOnlyButton.setSelection(systemsOnlyDefault);
return contents;
}
@Override
protected void okPressed() {
final IPreferenceStore prefs = OsateCorePlugin.getDefault().getPreferenceStore();
if (dontShowButton.getSelection()) {
// User just toggled the "don't show option"
if (MessageDialog.openQuestion(getShell(), "Confirm change",
"This results dialog will be hidden in the future. "
+ "You can restore it by going to the \"OSATE > Instantiation\" preference pane. "
+ "Do you wish to make this change?")) {
prefs.setValue(OsateCorePlugin.ALWAYS_SHOW_INSTANTIATION_AADL_DIALOG, false);
}
}
prefs.setValue(OsateCorePlugin.ONLY_INSTANTIATE_SYSTEM_IMPLS, systemsOnlyButton.getSelection());
if (prefs.needsSaving()) {
final Job saveJob = Job.create("Save preferences", monitor -> {
try {
((IPersistentPreferenceStore) prefs).save();
} catch (final IOException e) {
Display.getDefault().asyncExec(() -> {
MessageDialog.openError(getShell(), "Error",
"There was a problem saving the preferences: " + e.getMessage());
});
}
});
saveJob.schedule();
}
super.okPressed();
}
}