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