]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.ui/src/org/simantics/ui/workbench/dialogs/ResourceSelectionDialog.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / workbench / dialogs / ResourceSelectionDialog.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.ui.workbench.dialogs;\r
13 \r
14 import java.util.Comparator;\r
15 import java.util.Map;\r
16 \r
17 import org.eclipse.core.runtime.CoreException;\r
18 import org.eclipse.core.runtime.IProgressMonitor;\r
19 import org.eclipse.core.runtime.IStatus;\r
20 import org.eclipse.core.runtime.Status;\r
21 import org.eclipse.jface.dialogs.IDialogSettings;\r
22 import org.eclipse.jface.viewers.ILabelProvider;\r
23 import org.eclipse.jface.viewers.LabelProvider;\r
24 import org.eclipse.swt.widgets.Composite;\r
25 import org.eclipse.swt.widgets.Control;\r
26 import org.eclipse.swt.widgets.Shell;\r
27 import org.eclipse.ui.IMemento;\r
28 import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;\r
29 import org.eclipse.ui.dialogs.SearchPattern;\r
30 import org.simantics.db.Resource;\r
31 import org.simantics.db.exception.InvalidResourceReferenceException;\r
32 import org.simantics.db.service.SerialisationSupport;\r
33 import org.simantics.ui.SimanticsUI;\r
34 \r
35 public abstract class ResourceSelectionDialog<T> extends FilteredItemsSelectionDialog {\r
36 \r
37     Map<T, String> nameMap;\r
38     String         title;      \r
39     \r
40     class ResourceSelectionHistory extends FilteredItemsSelectionDialog.SelectionHistory {\r
41 \r
42         @Override\r
43         protected Object restoreItemFromMemento(IMemento memento) {\r
44             // FIXME: somehow create a collective transaction inside which the Graph.getRandomAccessReference should be invoked.\r
45 //            Resource r = SimanticsUI.getSession().getRandomAccessReference(memento.getTextData());\r
46 //            return r;\r
47             return null;\r
48         }\r
49 \r
50         @Override\r
51         protected void storeItemToMemento(Object item, IMemento memento) {\r
52             if(item instanceof Resource) {\r
53                 try {\r
54                         SerialisationSupport support = SimanticsUI.getSession().getService(SerialisationSupport.class);\r
55                     memento.putTextData(support.getResourceSerializer().createRandomAccessId((Resource)item));\r
56                 } catch (InvalidResourceReferenceException e) {\r
57                     e.printStackTrace();\r
58                 }\r
59             }\r
60         }\r
61         \r
62     };\r
63     \r
64     public ResourceSelectionDialog(Shell shell, Map<T, String> parameter, String title) {\r
65         super(shell, true);\r
66         this.nameMap = parameter;\r
67         this.title = title;\r
68         \r
69         ILabelProvider labelProvider = new LabelProvider() {\r
70             @Override\r
71             public String getText(Object element) {\r
72                 return nameMap.get(element);\r
73             }\r
74         }; \r
75                                \r
76         setListLabelProvider(labelProvider);\r
77         setDetailsLabelProvider(labelProvider);\r
78         \r
79         setSelectionHistory(new ResourceSelectionHistory());\r
80         setTitle(title);\r
81         \r
82     }\r
83 \r
84     @Override\r
85     protected Control createExtendedContentArea(Composite parent) {\r
86         // Don't create anything extra at the moment\r
87         return null;\r
88     }                                        \r
89 \r
90     class ResourceSelectionDialogItemsFilter extends FilteredItemsSelectionDialog.ItemsFilter {\r
91         \r
92         public ResourceSelectionDialogItemsFilter() {\r
93             String patternText = getPattern();\r
94             patternMatcher = new SearchPattern();\r
95             if(patternText != null && patternText.length() > 0)\r
96                 patternMatcher.setPattern(patternText);\r
97             else \r
98                 patternMatcher.setPattern("*");            \r
99         }\r
100         \r
101         @Override\r
102         public boolean isConsistentItem(Object item) {\r
103             return true;\r
104         }\r
105 \r
106         @Override\r
107         public boolean matchItem(Object item) {\r
108             return matches(nameMap.get(item));\r
109         }\r
110     }\r
111     \r
112     @Override\r
113     protected ItemsFilter createFilter() {                                \r
114         return new ResourceSelectionDialogItemsFilter();\r
115     }\r
116 \r
117     @Override\r
118     protected void fillContentProvider(AbstractContentProvider contentProvider,\r
119             ItemsFilter itemsFilter, IProgressMonitor progressMonitor) throws CoreException {        \r
120         for(T o : nameMap.keySet())\r
121             contentProvider.add(o, itemsFilter);\r
122         if (progressMonitor != null)\r
123             progressMonitor.done();\r
124     }\r
125 \r
126     protected abstract IDialogSettings getBaseDialogSettings();     \r
127     \r
128     @Override\r
129     protected IDialogSettings getDialogSettings() {\r
130         IDialogSettings base = getBaseDialogSettings();\r
131         IDialogSettings settings = base.getSection(title);\r
132         if (settings == null)\r
133             settings = base.addNewSection(title);\r
134         return settings;                                \r
135     }\r
136 \r
137     @Override\r
138     public String getElementName(Object item) {\r
139         return nameMap.get(item);\r
140     }\r
141 \r
142     @Override\r
143     protected Comparator<?> getItemsComparator() {\r
144         return new Comparator<Object>() {\r
145 \r
146             @Override\r
147             public int compare(Object o1, Object o2) {\r
148                 return nameMap.get(o1).compareToIgnoreCase(nameMap.get(o2));\r
149             }\r
150             \r
151         };\r
152     }\r
153 \r
154     @Override\r
155     protected IStatus validateItem(Object item) {\r
156         return Status.OK_STATUS;\r
157     }\r
158 }\r