1 package org.simantics.modeling.ui.scl.imports;
\r
3 import java.util.Collection;
\r
4 import java.util.Comparator;
\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
23 public class ModuleSelectionDialog extends FilteredItemsSelectionDialog {
\r
25 private static final String SCL_MODULE_SELECTION_DIALOG = "SCL_MODULE_SELECTION_DIALOG";
\r
27 Read<Collection<String>> query;
\r
29 public ModuleSelectionDialog(Shell shell, Read<Collection<String>> query) {
\r
35 protected Control createExtendedContentArea(Composite parent) {
\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
50 protected IStatus validateItem(Object item) {
\r
51 return Status.OK_STATUS;
\r
55 protected ItemsFilter createFilter() {
\r
56 return new ItemsFilter() {
\r
58 String patternText = getPattern();
\r
59 patternMatcher = new SearchPattern();
\r
60 if(patternText != null && patternText.length() > 0)
\r
61 patternMatcher.setPattern(patternText);
\r
63 patternMatcher.setPattern("*");
\r
67 public boolean matchItem(Object item) {
\r
68 if(getPattern().indexOf('/') > 0)
\r
69 return matches((String)item);
\r
71 for(String part : ((String)item).split("/"))
\r
79 public boolean isConsistentItem(Object item) {
\r
86 Comparator<String> comparator = new Comparator<String>() {
\r
88 public int compare(String o1, String o2) {
\r
89 return o1.compareTo(o2);
\r
93 @SuppressWarnings("rawtypes")
\r
95 protected Comparator getItemsComparator() {
\r
100 protected void fillContentProvider(final AbstractContentProvider contentProvider,
\r
101 final ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
\r
102 throws CoreException {
\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
113 if(progressMonitor != null)
\r
114 progressMonitor.done();
\r
118 public String getElementName(Object item) {
\r
119 return (String)item;
\r