]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/tests/SCLTestsDialog.java
75e6e836e539aaea4e7b5069766765bbc5310cdb
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / tests / SCLTestsDialog.java
1 package org.simantics.scl.ui.tests;
2
3 import java.util.Comparator;
4 import java.util.List;
5
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;
22
23 public class SCLTestsDialog extends FilteredItemsSelectionDialog {
24
25     private static final String SCL_TEST_DIALOG_SETTINGS = "SCLTestDialogSettings";
26     
27     private List<TestRunnable> tests;
28
29     public SCLTestsDialog(Shell shell, List<TestRunnable> tests, boolean multi) {
30         super(shell, multi);
31         this.tests = tests;
32         setTitle("Run SCL Tests");
33         setListLabelProvider(new LabelProvider() {
34             
35             @Override
36             public String getText(Object element) {
37                 if (element != null)
38                     return ((TestRunnable) element).getName();
39                 return "No name!";
40             }
41         });
42         setSelectionHistory(new ResourceSelectionHistory());
43     }
44     
45     private class ResourceSelectionHistory extends SelectionHistory {
46         /*
47          * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#restoreItemFromMemento(org.eclipse.ui.IMemento)
48          */
49         protected Object restoreItemFromMemento(IMemento element) {
50            String testName = element.getString("test"); //$NON-NLS-1$
51            return findTestByName(testName);
52         }
53         /*
54          * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#storeItemToMemento(java.lang.Object,
55          *      org.eclipse.ui.IMemento)
56          */
57         protected void storeItemToMemento(Object item, IMemento element) {
58             TestRunnable runnable = (TestRunnable) item;
59             element.putString("test", runnable.getName()); //$NON-NLS-1$
60         }
61      }
62     
63     private TestRunnable findTestByName(String name) {
64         for (TestRunnable runnable : tests) {
65             if (runnable.getName().equals(name))
66                 return runnable;
67         }
68         return null;
69     }
70     
71     @Override
72     protected Control createExtendedContentArea(Composite parent) {
73         // TODO Auto-generated method stub
74         return null;
75     }
76     
77     @Override
78     protected void createButtonsForButtonBar(Composite parent) {
79         super.createButtonsForButtonBar(parent);
80         Button okButton = getButton(IDialogConstants.OK_ID);
81         okButton.setText("Run test");
82         setButtonLayoutData(okButton);
83     }
84
85     @Override
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);
92         }
93         return settings;
94     }
95
96     @Override
97     protected IStatus validateItem(Object item) {
98         return Status.OK_STATUS;
99     }
100
101     @Override
102     protected ItemsFilter createFilter() {
103         return new ItemsFilter() {
104             {
105                 String patternText = getPattern();
106                 patternMatcher = new SearchPattern();
107                 if(patternText != null && patternText.length() > 0)
108                     patternMatcher.setPattern(patternText);
109                 else 
110                     patternMatcher.setPattern("**");
111             }
112             @Override
113             public boolean matchItem(Object item) {
114                 String testName = ((TestRunnable) item).getName();
115                 if(getPattern().indexOf('/') > 0)
116                     return matches(testName);
117                 else {
118                     for(String part : (testName.split("/")))
119                         if(matches(part))
120                             return true;
121                     return false;
122                 }
123             }
124             
125             @Override
126             public boolean isConsistentItem(Object item) {
127                 return true;
128             }
129         };
130     }
131
132     Comparator<TestRunnable> comparator = new Comparator<TestRunnable>() {
133         @Override
134         public int compare(TestRunnable o1, TestRunnable o2) {
135             return o1.getName().compareTo(o2.getName());
136         }
137     };
138     
139     @Override
140     protected Comparator<TestRunnable> getItemsComparator() {
141         return comparator;
142     }
143
144     @Override
145     protected void fillContentProvider(AbstractContentProvider contentProvider,
146             ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
147             throws CoreException {
148         progressMonitor.beginTask("Searching tests..", tests.size());
149         for (TestRunnable test : tests) {
150             contentProvider.add(test, itemsFilter);
151             progressMonitor.worked(1);
152         }
153         progressMonitor.done();
154     }
155
156     @Override
157     public String getElementName(Object item) {
158         return ((TestRunnable) item).getName();
159     }
160 }