]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/imports/internal/SCLModuleSelectionDialog.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/imports/internal/SCLModuleSelectionDialog.java
new file mode 100644 (file)
index 0000000..6eb447b
--- /dev/null
@@ -0,0 +1,113 @@
+package org.simantics.scl.ui.imports.internal;\r
+\r
+import gnu.trove.procedure.TObjectProcedure;\r
+\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.scl.osgi.SCLOsgi;\r
+import org.simantics.scl.ui.Activator;\r
+\r
+public class SCLModuleSelectionDialog extends FilteredItemsSelectionDialog {\r
+\r
+    private static final String SCL_MODULE_SELECTION_DIALOG = "SCL_MODULE_SELECTION_DIALOG";\r
+    \r
+    public SCLModuleSelectionDialog(Shell shell) {\r
+        super(shell, true);\r
+    }\r
+\r
+    @Override\r
+    protected Control createExtendedContentArea(Composite parent) {\r
+        return null;\r
+    }\r
+\r
+    @Override\r
+    protected IDialogSettings getDialogSettings() {\r
+        IDialogSettings settings = org.simantics.scl.ui.Activator.getInstance()\r
+                .getDialogSettings().getSection(SCL_MODULE_SELECTION_DIALOG);\r
+        if (settings == null)\r
+            settings = Activator.getInstance()\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
+        SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {\r
+            @Override\r
+            public boolean execute(String module) {\r
+                contentProvider.add(module, itemsFilter);\r
+                return true;\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