X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2Fscl%2Fimports%2FModuleSelectionDialog.java;fp=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2Fscl%2Fimports%2FModuleSelectionDialog.java;h=2ef16b1e1db23e1dc96d472c6d8da22e7a36aceb;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git 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 index 000000000..2ef16b1e1 --- /dev/null +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/scl/imports/ModuleSelectionDialog.java @@ -0,0 +1,122 @@ +package org.simantics.modeling.ui.scl.imports; + +import java.util.Collection; +import java.util.Comparator; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog; +import org.eclipse.ui.dialogs.SearchPattern; +import org.simantics.Simantics; +import org.simantics.db.common.procedure.adapter.TransientCacheListener; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.request.Read; +import org.simantics.modeling.ui.Activator; +import org.simantics.utils.ui.dialogs.ShowError; + +public class ModuleSelectionDialog extends FilteredItemsSelectionDialog { + + private static final String SCL_MODULE_SELECTION_DIALOG = "SCL_MODULE_SELECTION_DIALOG"; + + Read> query; + + public ModuleSelectionDialog(Shell shell, Read> query) { + super(shell, true); + this.query = query; + } + + @Override + protected Control createExtendedContentArea(Composite parent) { + return null; + } + + @Override + protected IDialogSettings getDialogSettings() { + IDialogSettings settings = Activator.getDefault() + .getDialogSettings().getSection(SCL_MODULE_SELECTION_DIALOG); + if (settings == null) + settings = Activator.getDefault() + .getDialogSettings().addNewSection(SCL_MODULE_SELECTION_DIALOG); + return settings; + } + + @Override + protected IStatus validateItem(Object item) { + return Status.OK_STATUS; + } + + @Override + protected ItemsFilter createFilter() { + return new ItemsFilter() { + { + String patternText = getPattern(); + patternMatcher = new SearchPattern(); + if(patternText != null && patternText.length() > 0) + patternMatcher.setPattern(patternText); + else + patternMatcher.setPattern("*"); + } + + @Override + public boolean matchItem(Object item) { + if(getPattern().indexOf('/') > 0) + return matches((String)item); + else { + for(String part : ((String)item).split("/")) + if(matches(part)) + return true; + return false; + } + } + + @Override + public boolean isConsistentItem(Object item) { + return true; + } + + }; + } + + Comparator comparator = new Comparator() { + @Override + public int compare(String o1, String o2) { + return o1.compareTo(o2); + } + }; + + @SuppressWarnings("rawtypes") + @Override + protected Comparator getItemsComparator() { + return comparator; + } + + @Override + protected void fillContentProvider(final AbstractContentProvider contentProvider, + final ItemsFilter itemsFilter, IProgressMonitor progressMonitor) + throws CoreException { + try { + for(String module : Simantics.getSession().syncRequest(query, + TransientCacheListener.>instance())) + contentProvider.add(module, itemsFilter); + } catch (DatabaseException e) { + ShowError.showError("Failed to find modules", + "Exception was thrown during search for modules", e); + close(); + } + + if(progressMonitor != null) + progressMonitor.done(); + } + + @Override + public String getElementName(Object item) { + return (String)item; + } + +}