]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/scl/imports/ModuleSelectionDialog.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / scl / imports / ModuleSelectionDialog.java
1 package org.simantics.modeling.ui.scl.imports;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Comparator;\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.IDialogSettings;\r
11 import org.eclipse.swt.widgets.Composite;\r
12 import org.eclipse.swt.widgets.Control;\r
13 import org.eclipse.swt.widgets.Shell;\r
14 import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;\r
15 import org.eclipse.ui.dialogs.SearchPattern;\r
16 import org.simantics.Simantics;\r
17 import org.simantics.db.common.procedure.adapter.TransientCacheListener;\r
18 import org.simantics.db.exception.DatabaseException;\r
19 import org.simantics.db.request.Read;\r
20 import org.simantics.modeling.ui.Activator;\r
21 import org.simantics.utils.ui.dialogs.ShowError;\r
22 \r
23 public class ModuleSelectionDialog extends FilteredItemsSelectionDialog {\r
24 \r
25     private static final String SCL_MODULE_SELECTION_DIALOG = "SCL_MODULE_SELECTION_DIALOG";\r
26     \r
27     Read<Collection<String>> query;\r
28     \r
29     public ModuleSelectionDialog(Shell shell, Read<Collection<String>> query) {\r
30         super(shell, true);\r
31         this.query = query;\r
32     }\r
33 \r
34     @Override\r
35     protected Control createExtendedContentArea(Composite parent) {\r
36         return null;\r
37     }\r
38 \r
39     @Override\r
40     protected IDialogSettings getDialogSettings() {\r
41         IDialogSettings settings = Activator.getDefault()\r
42                 .getDialogSettings().getSection(SCL_MODULE_SELECTION_DIALOG);\r
43         if (settings == null)\r
44             settings = Activator.getDefault()\r
45             .getDialogSettings().addNewSection(SCL_MODULE_SELECTION_DIALOG);\r
46         return settings;\r
47     }\r
48 \r
49     @Override\r
50     protected IStatus validateItem(Object item) {\r
51         return Status.OK_STATUS;\r
52     }\r
53 \r
54     @Override\r
55     protected ItemsFilter createFilter() {\r
56         return new ItemsFilter() {\r
57             {\r
58                 String patternText = getPattern();\r
59                 patternMatcher = new SearchPattern();\r
60                 if(patternText != null && patternText.length() > 0)\r
61                     patternMatcher.setPattern(patternText);\r
62                 else \r
63                     patternMatcher.setPattern("*");\r
64             }\r
65             \r
66             @Override\r
67             public boolean matchItem(Object item) {\r
68                 if(getPattern().indexOf('/') > 0)\r
69                     return matches((String)item);\r
70                 else {\r
71                     for(String part : ((String)item).split("/"))\r
72                         if(matches(part))\r
73                             return true;\r
74                     return false;\r
75                 }\r
76             }\r
77 \r
78             @Override\r
79             public boolean isConsistentItem(Object item) {\r
80                 return true;\r
81             }\r
82             \r
83         };\r
84     }\r
85 \r
86     Comparator<String> comparator = new Comparator<String>() {\r
87         @Override\r
88         public int compare(String o1, String o2) {\r
89             return o1.compareTo(o2);\r
90         }\r
91     };\r
92     \r
93     @SuppressWarnings("rawtypes")\r
94     @Override\r
95     protected Comparator getItemsComparator() {\r
96         return comparator;\r
97     }\r
98 \r
99     @Override\r
100     protected void fillContentProvider(final AbstractContentProvider contentProvider,\r
101             final ItemsFilter itemsFilter, IProgressMonitor progressMonitor)\r
102             throws CoreException {\r
103         try {\r
104             for(String module : Simantics.getSession().syncRequest(query,\r
105                     TransientCacheListener.<Collection<String>>instance()))\r
106                 contentProvider.add(module, itemsFilter);\r
107         } catch (DatabaseException e) {\r
108             ShowError.showError("Failed to find modules",\r
109                     "Exception was thrown during search for modules", e);\r
110             close();\r
111         }\r
112 \r
113         if(progressMonitor != null)\r
114             progressMonitor.done();\r
115     }\r
116 \r
117     @Override\r
118     public String getElementName(Object item) {\r
119         return (String)item;\r
120     }\r
121 \r
122 }\r