]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/imports/internal/SCLModuleSelectionDialog.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / imports / internal / SCLModuleSelectionDialog.java
1 package org.simantics.scl.ui.imports.internal;\r
2 \r
3 import gnu.trove.procedure.TObjectProcedure;\r
4 \r
5 import java.util.Comparator;\r
6 \r
7 import org.eclipse.core.runtime.CoreException;\r
8 import org.eclipse.core.runtime.IProgressMonitor;\r
9 import org.eclipse.core.runtime.IStatus;\r
10 import org.eclipse.core.runtime.Status;\r
11 import org.eclipse.jface.dialogs.IDialogSettings;\r
12 import org.eclipse.swt.widgets.Composite;\r
13 import org.eclipse.swt.widgets.Control;\r
14 import org.eclipse.swt.widgets.Shell;\r
15 import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;\r
16 import org.eclipse.ui.dialogs.SearchPattern;\r
17 import org.simantics.scl.osgi.SCLOsgi;\r
18 import org.simantics.scl.ui.Activator;\r
19 \r
20 public class SCLModuleSelectionDialog extends FilteredItemsSelectionDialog {\r
21 \r
22     private static final String SCL_MODULE_SELECTION_DIALOG = "SCL_MODULE_SELECTION_DIALOG";\r
23     \r
24     public SCLModuleSelectionDialog(Shell shell) {\r
25         super(shell, true);\r
26     }\r
27 \r
28     @Override\r
29     protected Control createExtendedContentArea(Composite parent) {\r
30         return null;\r
31     }\r
32 \r
33     @Override\r
34     protected IDialogSettings getDialogSettings() {\r
35         IDialogSettings settings = org.simantics.scl.ui.Activator.getInstance()\r
36                 .getDialogSettings().getSection(SCL_MODULE_SELECTION_DIALOG);\r
37         if (settings == null)\r
38             settings = Activator.getInstance()\r
39             .getDialogSettings().addNewSection(SCL_MODULE_SELECTION_DIALOG);\r
40         return settings;\r
41     }\r
42 \r
43     @Override\r
44     protected IStatus validateItem(Object item) {\r
45         return Status.OK_STATUS;\r
46     }\r
47 \r
48     @Override\r
49     protected ItemsFilter createFilter() {\r
50         return new ItemsFilter() {\r
51             {\r
52                 String patternText = getPattern();\r
53                 patternMatcher = new SearchPattern();\r
54                 if(patternText != null && patternText.length() > 0)\r
55                     patternMatcher.setPattern(patternText);\r
56                 else \r
57                     patternMatcher.setPattern("*");\r
58             }\r
59             \r
60             @Override\r
61             public boolean matchItem(Object item) {\r
62                 if(getPattern().indexOf('/') > 0)\r
63                     return matches((String)item);\r
64                 else {\r
65                     for(String part : ((String)item).split("/"))\r
66                         if(matches(part))\r
67                             return true;\r
68                     return false;\r
69                 }\r
70             }\r
71 \r
72             @Override\r
73             public boolean isConsistentItem(Object item) {\r
74                 return true;\r
75             }\r
76             \r
77         };\r
78     }\r
79 \r
80     Comparator<String> comparator = new Comparator<String>() {\r
81         @Override\r
82         public int compare(String o1, String o2) {\r
83             return o1.compareTo(o2);\r
84         }\r
85     };\r
86     \r
87     @SuppressWarnings("rawtypes")\r
88     @Override\r
89     protected Comparator getItemsComparator() {\r
90         return comparator;\r
91     }\r
92 \r
93     @Override\r
94     protected void fillContentProvider(final AbstractContentProvider contentProvider,\r
95             final ItemsFilter itemsFilter, IProgressMonitor progressMonitor)\r
96             throws CoreException {\r
97         SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {\r
98             @Override\r
99             public boolean execute(String module) {\r
100                 contentProvider.add(module, itemsFilter);\r
101                 return true;\r
102             }\r
103         });\r
104         if(progressMonitor != null)\r
105             progressMonitor.done();\r
106     }\r
107 \r
108     @Override\r
109     public String getElementName(Object item) {\r
110         return (String)item;\r
111     }\r
112 \r
113 }\r