]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/scl/imports/ModuleSelectionDialog.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/scl/imports/ModuleSelectionDialog.java
new file mode 100644 (file)
index 0000000..2ef16b1
--- /dev/null
@@ -0,0 +1,122 @@
+package org.simantics.modeling.ui.scl.imports;\r
+\r
+import java.util.Collection;\r
+import java.util.Comparator;\r
+\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jface.dialogs.IDialogSettings;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;\r
+import org.eclipse.ui.dialogs.SearchPattern;\r
+import org.simantics.Simantics;\r
+import org.simantics.db.common.procedure.adapter.TransientCacheListener;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.request.Read;\r
+import org.simantics.modeling.ui.Activator;\r
+import org.simantics.utils.ui.dialogs.ShowError;\r
+\r
+public class ModuleSelectionDialog extends FilteredItemsSelectionDialog {\r
+\r
+    private static final String SCL_MODULE_SELECTION_DIALOG = "SCL_MODULE_SELECTION_DIALOG";\r
+    \r
+    Read<Collection<String>> query;\r
+    \r
+    public ModuleSelectionDialog(Shell shell, Read<Collection<String>> query) {\r
+        super(shell, true);\r
+        this.query = query;\r
+    }\r
+\r
+    @Override\r
+    protected Control createExtendedContentArea(Composite parent) {\r
+        return null;\r
+    }\r
+\r
+    @Override\r
+    protected IDialogSettings getDialogSettings() {\r
+        IDialogSettings settings = Activator.getDefault()\r
+                .getDialogSettings().getSection(SCL_MODULE_SELECTION_DIALOG);\r
+        if (settings == null)\r
+            settings = Activator.getDefault()\r
+            .getDialogSettings().addNewSection(SCL_MODULE_SELECTION_DIALOG);\r
+        return settings;\r
+    }\r
+\r
+    @Override\r
+    protected IStatus validateItem(Object item) {\r
+        return Status.OK_STATUS;\r
+    }\r
+\r
+    @Override\r
+    protected ItemsFilter createFilter() {\r
+        return new ItemsFilter() {\r
+            {\r
+                String patternText = getPattern();\r
+                patternMatcher = new SearchPattern();\r
+                if(patternText != null && patternText.length() > 0)\r
+                    patternMatcher.setPattern(patternText);\r
+                else \r
+                    patternMatcher.setPattern("*");\r
+            }\r
+            \r
+            @Override\r
+            public boolean matchItem(Object item) {\r
+                if(getPattern().indexOf('/') > 0)\r
+                    return matches((String)item);\r
+                else {\r
+                    for(String part : ((String)item).split("/"))\r
+                        if(matches(part))\r
+                            return true;\r
+                    return false;\r
+                }\r
+            }\r
+\r
+            @Override\r
+            public boolean isConsistentItem(Object item) {\r
+                return true;\r
+            }\r
+            \r
+        };\r
+    }\r
+\r
+    Comparator<String> comparator = new Comparator<String>() {\r
+        @Override\r
+        public int compare(String o1, String o2) {\r
+            return o1.compareTo(o2);\r
+        }\r
+    };\r
+    \r
+    @SuppressWarnings("rawtypes")\r
+    @Override\r
+    protected Comparator getItemsComparator() {\r
+        return comparator;\r
+    }\r
+\r
+    @Override\r
+    protected void fillContentProvider(final AbstractContentProvider contentProvider,\r
+            final ItemsFilter itemsFilter, IProgressMonitor progressMonitor)\r
+            throws CoreException {\r
+        try {\r
+            for(String module : Simantics.getSession().syncRequest(query,\r
+                    TransientCacheListener.<Collection<String>>instance()))\r
+                contentProvider.add(module, itemsFilter);\r
+        } catch (DatabaseException e) {\r
+            ShowError.showError("Failed to find modules",\r
+                    "Exception was thrown during search for modules", e);\r
+            close();\r
+        }\r
+\r
+        if(progressMonitor != null)\r
+            progressMonitor.done();\r
+    }\r
+\r
+    @Override\r
+    public String getElementName(Object item) {\r
+        return (String)item;\r
+    }\r
+\r
+}\r