]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLModuleSelectionDialog.java
Preventing unnecessary ModuleSource compilation in SCL-editor
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor2 / SCLModuleSelectionDialog.java
1 package org.simantics.scl.ui.editor2;
2
3 import java.util.Comparator;
4
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.compiler.common.names.Name;
18 import org.simantics.scl.compiler.elaboration.modules.SCLValue;
19 import org.simantics.scl.osgi.SCLOsgi;
20 import org.simantics.scl.ui.Activator;
21
22 import gnu.trove.procedure.TObjectProcedure;
23
24 public class SCLModuleSelectionDialog extends FilteredItemsSelectionDialog {
25     private static final String DIALOG_SETTINGS = "SCLModuleSelectionDialogSettings";
26
27     public SCLModuleSelectionDialog(Shell shell) {
28         super(shell, false);
29         setTitle("Choose an SCL module");
30         setSelectionHistory(new ModuleSelectionHistory());
31         setListLabelProvider(new LabelProvider() {
32             @Override
33             public String getText(Object element) {
34                 if(element == null)
35                     return "";
36                 return (String)element;
37             }
38         });
39     }
40
41     private class ModuleSelectionHistory extends SelectionHistory {
42         protected Object restoreItemFromMemento(IMemento element) {
43             //return element.getString("resource"); //$NON-NLS-1$
44             return null;
45         }
46         protected void storeItemToMemento(Object item, IMemento element) {
47             //element.putString("resource", item.toString()); //$NON-NLS-1$
48         }
49     }
50
51     @Override
52     protected Control createExtendedContentArea(Composite parent) {
53         return null;
54     }
55
56     protected IDialogSettings getDialogSettings() {
57          IDialogSettings settings = Activator.getInstance().getDialogSettings().getSection(DIALOG_SETTINGS);
58          if (settings == null)
59              settings = Activator.getInstance().getDialogSettings().addNewSection(DIALOG_SETTINGS);
60          return settings;
61     }
62
63     @Override
64     protected IStatus validateItem(Object item) {
65         return Status.OK_STATUS;
66     }
67
68     @Override
69     protected ItemsFilter createFilter() {
70         return new ItemsFilter() {
71             {
72                 String patternText = getPattern();
73                 patternMatcher = new SearchPattern();
74                 if(patternText != null && patternText.length() > 0)
75                     patternMatcher.setPattern(patternText);
76                 else 
77                     patternMatcher.setPattern("*");
78             }
79             
80             @Override
81             public boolean matchItem(Object item) {
82                 String text = item.toString();
83                 if(getPattern().contains("/"))
84                     return matches(text);
85                 else {
86                     int p = text.lastIndexOf('/');
87                     if(p >= 0)
88                         text = text.substring(p+1);
89                     return matches(text);
90                 }
91             }
92
93             @Override
94             public boolean isConsistentItem(Object item) {
95                 return true;
96             }
97             
98         };
99     }
100
101     @SuppressWarnings("rawtypes")
102     @Override
103     protected Comparator getItemsComparator() {
104         return new Comparator() {
105             public int compare(Object arg0, Object arg1) {
106                 String a = (String)arg0;
107                 String b = (String)arg1;
108                 return a.compareTo(b);
109             }
110         };
111     }
112
113     @Override
114     protected void fillContentProvider(AbstractContentProvider contentProvider,
115             ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
116                     throws CoreException {
117         progressMonitor.beginTask("Searching", 1); //$NON-NLS-1$
118         SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {
119             @Override
120             public boolean execute(String moduleName) {
121                 contentProvider.add(moduleName, itemsFilter);
122                 return true;
123             }
124         });
125         progressMonitor.worked(1);
126         progressMonitor.done();
127     }
128
129     @Override
130     public String getElementName(Object item) {
131         return item.toString();
132     }
133
134 }