1 package org.simantics.scl.ui.editor2;
3 import java.util.Comparator;
5 import org.eclipse.core.runtime.CoreException;
6 import org.eclipse.core.runtime.IProgressMonitor;
7 import org.eclipse.core.runtime.IStatus;
8 import org.eclipse.core.runtime.Status;
9 import org.eclipse.jface.dialogs.IDialogSettings;
10 import org.eclipse.jface.viewers.LabelProvider;
11 import org.eclipse.swt.widgets.Composite;
12 import org.eclipse.swt.widgets.Control;
13 import org.eclipse.swt.widgets.Shell;
14 import org.eclipse.ui.IMemento;
15 import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
16 import org.eclipse.ui.dialogs.SearchPattern;
17 import org.simantics.scl.osgi.SCLOsgi;
18 import org.simantics.scl.ui.Activator;
20 import gnu.trove.procedure.TObjectProcedure;
22 public class SCLModuleSelectionDialog extends FilteredItemsSelectionDialog {
23 private static final String DIALOG_SETTINGS = "SCLModuleSelectionDialogSettings"; //$NON-NLS-1$
25 public SCLModuleSelectionDialog(Shell shell) {
27 setTitle(Messages.SCLModuleSelectionDialog_ChooseSCLModule);
28 setSelectionHistory(new ModuleSelectionHistory());
29 setListLabelProvider(new LabelProvider() {
31 public String getText(Object element) {
33 return ""; //$NON-NLS-1$
34 return (String)element;
39 private class ModuleSelectionHistory extends SelectionHistory {
40 protected Object restoreItemFromMemento(IMemento element) {
41 //return element.getString("resource"); //$NON-NLS-1$
44 protected void storeItemToMemento(Object item, IMemento element) {
45 //element.putString("resource", item.toString()); //$NON-NLS-1$
50 protected Control createExtendedContentArea(Composite parent) {
54 protected IDialogSettings getDialogSettings() {
55 IDialogSettings settings = Activator.getInstance().getDialogSettings().getSection(DIALOG_SETTINGS);
57 settings = Activator.getInstance().getDialogSettings().addNewSection(DIALOG_SETTINGS);
62 protected IStatus validateItem(Object item) {
63 return Status.OK_STATUS;
67 protected ItemsFilter createFilter() {
68 return new ItemsFilter() {
70 String patternText = getPattern();
71 patternMatcher = new SearchPattern();
72 if(patternText != null && patternText.length() > 0)
73 patternMatcher.setPattern(patternText);
75 patternMatcher.setPattern("*"); //$NON-NLS-1$
79 public boolean matchItem(Object item) {
80 String text = item.toString();
81 if(getPattern().contains("/")) //$NON-NLS-1$
84 int p = text.lastIndexOf('/');
86 text = text.substring(p+1);
92 public boolean isConsistentItem(Object item) {
99 @SuppressWarnings("rawtypes")
101 protected Comparator getItemsComparator() {
102 return new Comparator() {
103 public int compare(Object arg0, Object arg1) {
104 String a = (String)arg0;
105 String b = (String)arg1;
106 return a.compareTo(b);
112 protected void fillContentProvider(AbstractContentProvider contentProvider,
113 ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
114 throws CoreException {
115 progressMonitor.beginTask(Messages.SCLModuleSelectionDialog_Searching, 1);
116 SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {
118 public boolean execute(String moduleName) {
119 contentProvider.add(moduleName, itemsFilter);
123 progressMonitor.worked(1);
124 progressMonitor.done();
128 public String getElementName(Object item) {
129 return item.toString();