Skip to content

Package: FcoreSelectionDialog$FcoreSearchItemsFilter

FcoreSelectionDialog$FcoreSearchItemsFilter

nameinstructionbranchcomplexitylinemethod
FcoreSelectionDialog.FcoreSearchItemsFilter(FcoreSelectionDialog)
M: 7 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
equalsFilter(FilteredItemsSelectionDialog.ItemsFilter)
M: 13 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 5 C: 0
0%
M: 1 C: 0
0%
isConsistentItem(Object)
M: 7 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
isSubFilter(FilteredItemsSelectionDialog.ItemsFilter)
M: 13 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 5 C: 0
0%
M: 1 C: 0
0%
matchItem(Object)
M: 11 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /**
2: * Copyright (c) 2009-2010 Thales Corporate Services S.A.S.
3: * This program and the accompanying materials
4: * are made available under the terms of the Eclipse Public License v2.0
5: * which accompanies this distribution, and is available at
6: * https://www.eclipse.org/legal/epl-v2.0
7: *
8: * SPDX-License-Identifier: EPL-2.0
9: *
10: * Contributors:
11: * Thales Corporate Services S.A.S - initial API and implementation
12: */
13: package org.eclipse.egf.core.ui.dialogs;
14:
15: import java.io.File;
16: import java.io.Serializable;
17: import java.util.ArrayList;
18: import java.util.Comparator;
19: import java.util.List;
20:
21: import org.eclipse.core.runtime.CoreException;
22: import org.eclipse.core.runtime.IProgressMonitor;
23: import org.eclipse.core.runtime.IStatus;
24: import org.eclipse.core.runtime.Status;
25: import org.eclipse.egf.core.EGFCorePlugin;
26: import org.eclipse.egf.core.fcore.IPlatformFcore;
27: import org.eclipse.egf.core.ui.EGFCoreUIPlugin;
28: import org.eclipse.egf.core.ui.IEGFCoreUIImages;
29: import org.eclipse.egf.core.ui.l10n.CoreUIMessages;
30: import org.eclipse.emf.common.util.URI;
31: import org.eclipse.emf.common.util.UniqueEList;
32: import org.eclipse.jface.dialogs.IDialogSettings;
33: import org.eclipse.jface.viewers.ILabelDecorator;
34: import org.eclipse.jface.viewers.ILabelProvider;
35: import org.eclipse.jface.viewers.LabelProvider;
36: import org.eclipse.jface.viewers.StructuredSelection;
37: import org.eclipse.swt.graphics.Image;
38: import org.eclipse.swt.widgets.Composite;
39: import org.eclipse.swt.widgets.Control;
40: import org.eclipse.swt.widgets.Shell;
41: import org.eclipse.ui.IMemento;
42:
43: /**
44: * @author Xavier Maysonnave
45: *
46: */
47: public class FcoreSelectionDialog extends AbstractFilteredItemsSelectionDialog {
48:
49: private static final String DIALOG_SETTINGS = "org.eclipse.egf.core.ui.dialogs.FcoreSelectionDialog"; //$NON-NLS-1$
50:
51: /**
52: * <code>FcoreSelectionHistory</code> provides behavior specific to
53: * fcores - storing and restoring <code>IPlatformFcore</code>s state
54: * to/from XML (memento).
55: */
56: private class FcoreSelectionHistory extends SelectionHistory {
57:
58: private static final String TAG_URI = "path"; //$NON-NLS-1$
59:
60: private IPlatformFcore _previous;
61:
62: public FcoreSelectionHistory() {
63: super();
64: }
65:
66: @Override
67: protected Object restoreItemFromMemento(IMemento memento) {
68: // Get the IPlatformFcore URI
69: String tag = memento.getString(TAG_URI);
70: if (tag == null) {
71: return null;
72: }
73: URI uri = URI.createURI(tag);
74: // TODO: We should have an index to improve such control
75: for (IPlatformFcore fcore : EGFCorePlugin.getPlatformFcores()) {
76: if (fcore.getURI().equals(uri)) {
77: _previous = fcore;
78: return fcore;
79: }
80: }
81: return null;
82: }
83:
84: @Override
85: protected void storeItemToMemento(Object item, IMemento element) {
86: if (getReturnCode() == OK) {
87: Object[] items = getHistoryItems();
88: for (int i = 0; i < items.length; i++) {
89: IPlatformFcore fcore = (IPlatformFcore) items[i];
90: element.putString(TAG_URI, fcore.getURI().toString());
91: }
92: } else if (_previous != null) {
93: element.putString(TAG_URI, _previous.getURI().toString());
94: }
95: }
96:
97: }
98:
99: private class FcoreSearchItemsFilter extends ItemsFilter {
100:
101: @Override
102: public boolean matchItem(Object item) {
103:• if (item instanceof IPlatformFcore == false) {
104: return false;
105: }
106: return (matches(((IPlatformFcore) item).getName()));
107: }
108:
109: @Override
110: public boolean isConsistentItem(Object item) {
111:• if (item instanceof IPlatformFcore) {
112: return true;
113: }
114: return false;
115: }
116:
117: @Override
118: public boolean isSubFilter(ItemsFilter filter) {
119:• if (super.isSubFilter(filter) == false) {
120: return false;
121: }
122:• if (filter instanceof FcoreSearchItemsFilter) {
123: return true;
124: }
125: return false;
126: }
127:
128: @Override
129: public boolean equalsFilter(ItemsFilter filter) {
130:• if (super.equalsFilter(filter) == false) {
131: return false;
132: }
133:• if (filter instanceof FcoreSearchItemsFilter) {
134: return true;
135: }
136: return false;
137: }
138:
139: }
140:
141: private static class FcoreSearchComparator implements Comparator<IPlatformFcore>, Serializable {
142:
143: public static final long serialVersionUID = 1L;
144:
145: public int compare(IPlatformFcore fc1, IPlatformFcore fc2) {
146: if (fc1.getName() == null) {
147: return -1;
148: }
149: if (fc2.getName() == null) {
150: return 1;
151: }
152: return fc1.getName().compareTo(fc2.getName());
153: }
154:
155: }
156:
157: private static IPlatformFcore[] getElements() {
158: return EGFCorePlugin.getPlatformFcores();
159: }
160:
161: private ILabelProvider _labelProvider = new LabelProvider() {
162:
163: @Override
164: public Image getImage(Object element) {
165: if (element instanceof IPlatformFcore == false) {
166: return super.getImage(element);
167: }
168: return EGFCoreUIPlugin.getDefault().getImage(IEGFCoreUIImages.IMG_FCORE);
169: }
170:
171: @Override
172: public String getText(Object element) {
173: if (element instanceof IPlatformFcore == false) {
174: return super.getText(element);
175: }
176: return ((IPlatformFcore) element).getName();
177: }
178: };
179:
180: private class ResourceSelectionLabelProvider extends LabelProvider implements ILabelDecorator {
181:
182: public ResourceSelectionLabelProvider() {
183: // Nothing to do
184: }
185:
186: public String decorateText(String text, Object element) {
187: if (element instanceof IPlatformFcore == false) {
188: return getText(element);
189: }
190: return ((IPlatformFcore) element).getURI().toString();
191: }
192:
193: public Image decorateImage(Image image, Object element) {
194: if (element instanceof IPlatformFcore == false) {
195: return getImage(element);
196: }
197: return EGFCoreUIPlugin.getDefault().getImage(IEGFCoreUIImages.IMG_FCORE);
198: }
199:
200: }
201:
202: private ILabelProvider _detailsLabelProvider = new LabelProvider() {
203:
204: @Override
205: public Image getImage(Object element) {
206: if (element instanceof IPlatformFcore == false) {
207: return super.getImage(element);
208: }
209: IPlatformFcore fc = (IPlatformFcore) element;
210: File file = new File(fc.getPlatformBundle().getInstallLocation());
211: if (file.exists() && file.isDirectory()) {
212: return EGFCoreUIPlugin.getDefault().getImage(IEGFCoreUIImages.IMG_DIRECTORY);
213: } else if (file.exists() && file.isFile()) {
214: return EGFCoreUIPlugin.getDefault().getImage(IEGFCoreUIImages.IMG_JAR);
215: }
216: return EGFCoreUIPlugin.getDefault().getImage(IEGFCoreUIImages.IMG_FCORE);
217: }
218:
219: @Override
220: public String getText(Object element) {
221: if (element instanceof IPlatformFcore == false) {
222: return super.getText(element);
223: }
224: StringBuffer buffer = new StringBuffer();
225: IPlatformFcore fcore = (IPlatformFcore) element;
226: if (fcore.isTarget()) {
227: buffer.append(" [Target]"); //$NON-NLS-1$
228: } else if (fcore.isRuntime()) {
229: buffer.append(" [Runtime]"); //$NON-NLS-1$
230: } else {
231: buffer.append(" [Workspace]"); //$NON-NLS-1$
232: }
233: buffer.append(" ["); //$NON-NLS-1$
234: buffer.append(fcore.getPlatformBundle().getInstallLocation());
235: buffer.append("]"); //$NON-NLS-1$
236: return buffer.toString();
237: }
238: };
239:
240: private IPlatformFcore[] _fcores;
241:
242: public FcoreSelectionDialog(Shell parentShell, boolean multipleSelection) {
243: this(parentShell, getElements(), multipleSelection);
244: }
245:
246: public FcoreSelectionDialog(Shell parentShell, IPlatformFcore[] factoryComponents, boolean multipleSelection) {
247: super(parentShell, multipleSelection);
248: _fcores = factoryComponents;
249: setTitle(CoreUIMessages._UI_FcoreSelection_label);
250: setMessage(CoreUIMessages._UI_SelectRegisteredFcore);
251: setListLabelProvider(getLabelProvider());
252: setListSelectionLabelDecorator(getSelectionLabelProvider());
253: setDetailsLabelProvider(getDetailsLabelProvider());
254: setSeparatorLabel(CoreUIMessages._UI_FilteredItemsSelectionDialog_platformSeparatorLabel);
255: setSelectionHistory(new FcoreSelectionHistory());
256: }
257:
258: /**
259: * Handle selection
260: *
261: * @param selection
262: * the new selection
263: */
264: @Override
265: protected void handleSelected(StructuredSelection selection) {
266: if (selection == null || selection.isEmpty()) {
267: return;
268: }
269: super.handleSelected(selection);
270: if (selection.size() != 0) {
271: List<IPlatformFcore> fcores = new UniqueEList<IPlatformFcore>();
272: for (Object object : selection.toList()) {
273: if (object instanceof IPlatformFcore) {
274: fcores.add((IPlatformFcore) object);
275: }
276: }
277: notifySelectionListeners(fcores.toArray());
278: }
279: }
280:
281: protected ILabelProvider getLabelProvider() {
282: return _labelProvider;
283: }
284:
285: protected ILabelDecorator getSelectionLabelProvider() {
286: return new ResourceSelectionLabelProvider();
287: }
288:
289: protected ILabelProvider getDetailsLabelProvider() {
290: return _detailsLabelProvider;
291: }
292:
293: /**
294: * Hack to use a dialog in a wizard page
295: *
296: * @return the current shell or its parent shell
297: */
298: @Override
299: public Shell getShell() {
300: return super.getShell() != null ? super.getShell() : getParentShell();
301: }
302:
303: /**
304: * Hack to use a dialog in a wizard page
305: *
306: * @return Control
307: *
308: */
309: public Control createPage(Composite parent) {
310: return dialogArea = createDialogArea(parent);
311: }
312:
313: /**
314: * Returns the list of selections made by the user, or <code>null</code>
315: * if the selection was canceled. A computeResult is done when this dialog
316: * is used in a wizard page
317: *
318: * @return the array of selected elements, or <code>null</code> if Cancel
319: * was pressed
320: */
321: @Override
322: public Object[] getResult() {
323: Object[] result = super.getResult();
324: if (result == null) {
325: return null;
326: }
327: List<IPlatformFcore> resultToReturn = new ArrayList<IPlatformFcore>();
328: for (int i = 0; i < result.length; i++) {
329: if (result[i] instanceof IPlatformFcore) {
330: resultToReturn.add(((IPlatformFcore) result[i]));
331: }
332: }
333: return resultToReturn.toArray();
334: }
335:
336: @Override
337: protected Control createExtendedContentArea(Composite parent) {
338: return null;
339: }
340:
341: @Override
342: protected ItemsFilter createFilter() {
343: return new FcoreSearchItemsFilter();
344: }
345:
346: @Override
347: protected void fillContentProvider(AbstractContentProvider contentProvider, ItemsFilter itemsFilter, IProgressMonitor progressMonitor) throws CoreException {
348: for (int i = 0; i < _fcores.length; i++) {
349: contentProvider.add(_fcores[i], itemsFilter);
350: progressMonitor.worked(1);
351: }
352: progressMonitor.done();
353: }
354:
355: @Override
356: protected IDialogSettings getDialogSettings() {
357: IDialogSettings settings = EGFCoreUIPlugin.getDefault().getDialogSettings().getSection(DIALOG_SETTINGS);
358: if (settings == null) {
359: settings = EGFCoreUIPlugin.getDefault().getDialogSettings().addNewSection(DIALOG_SETTINGS);
360: }
361: return settings;
362: }
363:
364: @Override
365: public String getElementName(Object item) {
366: if (item instanceof IPlatformFcore) {
367: IPlatformFcore fc = (IPlatformFcore) item;
368: return fc.getURI().toString();
369: }
370: return null;
371: }
372:
373: @Override
374: protected Comparator<IPlatformFcore> getItemsComparator() {
375: return new FcoreSearchComparator();
376: }
377:
378: @Override
379: protected IStatus validateItem(Object item) {
380: return new Status(IStatus.OK, EGFCoreUIPlugin.getDefault().getBundle().getSymbolicName(), 0, "", null); //$NON-NLS-1$
381: }
382:
383: }