1 package org.simantics.scl.ui.tests;
3 import java.util.Comparator;
6 import org.eclipse.core.runtime.CoreException;
7 import org.eclipse.core.runtime.IProgressMonitor;
8 import org.eclipse.core.runtime.IStatus;
9 import org.eclipse.core.runtime.Status;
10 import org.eclipse.jface.dialogs.IDialogConstants;
11 import org.eclipse.jface.dialogs.IDialogSettings;
12 import org.eclipse.jface.viewers.LabelProvider;
13 import org.eclipse.swt.widgets.Button;
14 import org.eclipse.swt.widgets.Composite;
15 import org.eclipse.swt.widgets.Control;
16 import org.eclipse.swt.widgets.Shell;
17 import org.eclipse.ui.IMemento;
18 import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
19 import org.eclipse.ui.dialogs.SearchPattern;
20 import org.simantics.scl.compiler.testing.TestRunnable;
21 import org.simantics.scl.ui.Activator;
23 public class SCLTestsDialog extends FilteredItemsSelectionDialog {
25 private static final String SCL_TEST_DIALOG_SETTINGS = "SCLTestDialogSettings"; //$NON-NLS-1$
27 private List<TestRunnable> tests;
29 public SCLTestsDialog(Shell shell, List<TestRunnable> tests, boolean multi) {
32 setTitle(Messages.SCLTestsDialog_RunSCLTests);
33 setListLabelProvider(new LabelProvider() {
36 public String getText(Object element) {
38 return ((TestRunnable) element).getName();
39 return Messages.SCLTestsDialog_NoName;
42 setSelectionHistory(new ResourceSelectionHistory());
45 private class ResourceSelectionHistory extends SelectionHistory {
47 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#restoreItemFromMemento(org.eclipse.ui.IMemento)
49 protected Object restoreItemFromMemento(IMemento element) {
50 String testName = element.getString("test"); //$NON-NLS-1$
51 return findTestByName(testName);
54 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#storeItemToMemento(java.lang.Object,
55 * org.eclipse.ui.IMemento)
57 protected void storeItemToMemento(Object item, IMemento element) {
58 TestRunnable runnable = (TestRunnable) item;
59 element.putString("test", runnable.getName()); //$NON-NLS-1$
63 private TestRunnable findTestByName(String name) {
64 for (TestRunnable runnable : tests) {
65 if (runnable.getName().equals(name))
72 protected Control createExtendedContentArea(Composite parent) {
73 // TODO Auto-generated method stub
78 protected void createButtonsForButtonBar(Composite parent) {
79 super.createButtonsForButtonBar(parent);
80 Button okButton = getButton(IDialogConstants.OK_ID);
81 okButton.setText(Messages.SCLTestsDialog_RunTest);
82 setButtonLayoutData(okButton);
86 protected IDialogSettings getDialogSettings() {
87 IDialogSettings settings = Activator.getInstance().getDialogSettings()
88 .getSection(SCL_TEST_DIALOG_SETTINGS);
89 if (settings == null) {
90 settings = Activator.getInstance().getDialogSettings()
91 .addNewSection(SCL_TEST_DIALOG_SETTINGS);
97 protected IStatus validateItem(Object item) {
98 return Status.OK_STATUS;
102 protected ItemsFilter createFilter() {
103 return new ItemsFilter() {
105 String patternText = getPattern();
106 patternMatcher = new SearchPattern();
107 if(patternText != null && patternText.length() > 0)
108 patternMatcher.setPattern(patternText);
110 patternMatcher.setPattern("**"); //$NON-NLS-1$
113 public boolean matchItem(Object item) {
114 String testName = ((TestRunnable) item).getName();
115 if(getPattern().indexOf('/') > 0)
116 return matches(testName);
118 for(String part : (testName.split("/"))) //$NON-NLS-1$
126 public boolean isConsistentItem(Object item) {
132 Comparator<TestRunnable> comparator = new Comparator<TestRunnable>() {
134 public int compare(TestRunnable o1, TestRunnable o2) {
135 return o1.getName().compareTo(o2.getName());
140 protected Comparator<TestRunnable> getItemsComparator() {
145 protected void fillContentProvider(AbstractContentProvider contentProvider,
146 ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
147 throws CoreException {
148 progressMonitor.beginTask(Messages.SCLTestsDialog_MonitorSearchingTests, tests.size());
149 for (TestRunnable test : tests) {
150 contentProvider.add(test, itemsFilter);
151 progressMonitor.worked(1);
153 progressMonitor.done();
157 public String getElementName(Object item) {
158 return ((TestRunnable) item).getName();