001: /*******************************************************************************
002: * Copyright (c) 2003, 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.internal.ui.wizards.imports;
011:
012: import java.util.ArrayList;
013: import java.util.HashMap;
014: import java.util.regex.Pattern;
015:
016: import org.eclipse.core.resources.IProject;
017: import org.eclipse.core.runtime.IProgressMonitor;
018: import org.eclipse.core.runtime.IStatus;
019: import org.eclipse.core.runtime.Status;
020: import org.eclipse.jface.dialogs.Dialog;
021: import org.eclipse.jface.viewers.DoubleClickEvent;
022: import org.eclipse.jface.viewers.IDoubleClickListener;
023: import org.eclipse.jface.viewers.ISelection;
024: import org.eclipse.jface.viewers.ISelectionChangedListener;
025: import org.eclipse.jface.viewers.IStructuredContentProvider;
026: import org.eclipse.jface.viewers.IStructuredSelection;
027: import org.eclipse.jface.viewers.SelectionChangedEvent;
028: import org.eclipse.jface.viewers.TableViewer;
029: import org.eclipse.jface.viewers.Viewer;
030: import org.eclipse.jface.viewers.ViewerFilter;
031: import org.eclipse.osgi.util.NLS;
032: import org.eclipse.pde.core.plugin.IPluginModelBase;
033: import org.eclipse.pde.internal.core.PDECore;
034: import org.eclipse.pde.internal.core.WorkspaceModelManager;
035: import org.eclipse.pde.internal.core.plugin.AbstractPluginModelBase;
036: import org.eclipse.pde.internal.core.util.PatternConstructor;
037: import org.eclipse.pde.internal.ui.IHelpContextIds;
038: import org.eclipse.pde.internal.ui.PDEPlugin;
039: import org.eclipse.pde.internal.ui.PDEUIMessages;
040: import org.eclipse.pde.internal.ui.elements.DefaultContentProvider;
041: import org.eclipse.pde.internal.ui.util.SWTUtil;
042: import org.eclipse.pde.internal.ui.wizards.ListUtil;
043: import org.eclipse.swt.SWT;
044: import org.eclipse.swt.custom.ScrolledComposite;
045: import org.eclipse.swt.events.ModifyEvent;
046: import org.eclipse.swt.events.ModifyListener;
047: import org.eclipse.swt.events.SelectionAdapter;
048: import org.eclipse.swt.events.SelectionEvent;
049: import org.eclipse.swt.layout.GridData;
050: import org.eclipse.swt.layout.GridLayout;
051: import org.eclipse.swt.widgets.Button;
052: import org.eclipse.swt.widgets.Composite;
053: import org.eclipse.swt.widgets.Group;
054: import org.eclipse.swt.widgets.Label;
055: import org.eclipse.swt.widgets.Table;
056: import org.eclipse.swt.widgets.TableItem;
057: import org.eclipse.swt.widgets.Text;
058: import org.eclipse.ui.PlatformUI;
059: import org.eclipse.ui.progress.WorkbenchJob;
060:
061: public class PluginImportWizardDetailedPage extends
062: BaseImportWizardSecondPage {
063:
064: class ContentProvider extends DefaultContentProvider implements
065: IStructuredContentProvider {
066: public Object[] getElements(Object element) {
067: return fModels;
068: }
069: }
070:
071: private Label fCountLabel;
072: private TableViewer fAvailableListViewer;
073: private Text fFilterText;
074: private AvailableFilter fFilter;
075: // fSelected is used to track the selection in a HashMap so we can efficiently
076: // filter selected items out of the available item list
077: private HashMap fSelected;
078: // this job is used to delay the full filter refresh for 200 milliseconds in case the user is still typing
079: private WorkbenchJob fFilterJob;
080: // used to block the selection listeners from updating button enablement when programatically removing items
081: private boolean fBlockSelectionListeners;
082: private Button fAddButton;
083: private Button fAddAllButton;
084: private Button fRemoveButton;
085: private Button fRemoveAllButton;
086: private Button fAddRequiredButton;
087:
088: private class AvailableFilter extends ViewerFilter {
089: private Pattern fPattern;
090:
091: public AvailableFilter() {
092: setPattern("*"); //$NON-NLS-1$
093: }
094:
095: public boolean select(Viewer viewer, Object parentElement,
096: Object element) {
097: // filter out any items that are currently selected
098: // on a full refresh, these will have been added back to the list
099: if (fSelected.containsKey(element))
100: return false;
101: if (!(element instanceof AbstractPluginModelBase))
102: return false;
103: String itemID = ((AbstractPluginModelBase) element)
104: .getPluginBase().getId();
105: if (fPattern.matcher(itemID).matches())
106: return true;
107: return false;
108: }
109:
110: public boolean setPattern(String newPattern) {
111: if (!newPattern.endsWith("*")) //$NON-NLS-1$
112: newPattern += "*"; //$NON-NLS-1$
113: if (fPattern != null) {
114: String oldPattern = fPattern.pattern();
115: if (newPattern.equals(oldPattern))
116: return false;
117: }
118: fPattern = PatternConstructor.createPattern(newPattern,
119: true);
120: return true;
121: }
122: }
123:
124: public PluginImportWizardDetailedPage(String pageName,
125: PluginImportWizardFirstPage firstPage) {
126: super (pageName, firstPage);
127: setTitle(PDEUIMessages.ImportWizard_DetailedPage_title);
128: setMessage(PDEUIMessages.ImportWizard_DetailedPage_desc);
129: fSelected = new HashMap();
130: }
131:
132: public void createControl(Composite parent) {
133: Composite container = new Composite(parent, SWT.NONE);
134: GridLayout layout = new GridLayout();
135: layout.numColumns = 3;
136: layout.makeColumnsEqualWidth = false;
137: layout.horizontalSpacing = 5;
138: layout.verticalSpacing = 10;
139: container.setLayout(layout);
140:
141: createScrollArea(container);
142: createAvailableList(container).setLayoutData(
143: new GridData(GridData.FILL_BOTH));
144: createButtonArea(container);
145: createImportList(container).setLayoutData(
146: new GridData(GridData.FILL_BOTH));
147: updateCount();
148: createComputationsOption(container, 3);
149: addViewerListeners();
150: addFilter();
151:
152: initialize();
153: setControl(container);
154: Dialog.applyDialogFont(container);
155: PlatformUI.getWorkbench().getHelpSystem().setHelp(container,
156: IHelpContextIds.PLUGIN_IMPORT_SECOND_PAGE);
157: }
158:
159: private void addFilter() {
160: fFilter = new AvailableFilter();
161: fAvailableListViewer.addFilter(fFilter);
162: fFilterJob = new WorkbenchJob("FilterJob") { //$NON-NLS-1$
163: public IStatus runInUIThread(IProgressMonitor monitor) {
164: handleFilter();
165: return Status.OK_STATUS;
166: }
167: };
168: fFilterJob.setSystem(true);
169: }
170:
171: private void initialize() {
172: updateButtonEnablement(true, true);
173: setPageComplete(false);
174: }
175:
176: private void addViewerListeners() {
177: fAvailableListViewer
178: .addDoubleClickListener(new IDoubleClickListener() {
179: public void doubleClick(DoubleClickEvent event) {
180: handleAdd();
181: }
182: });
183:
184: fImportListViewer
185: .addDoubleClickListener(new IDoubleClickListener() {
186: public void doubleClick(DoubleClickEvent event) {
187: handleRemove();
188: }
189: });
190:
191: fAvailableListViewer
192: .addSelectionChangedListener(new ISelectionChangedListener() {
193: public void selectionChanged(
194: SelectionChangedEvent event) {
195: if (!fBlockSelectionListeners)
196: updateSelectionBasedEnablement(event
197: .getSelection(), true);
198: }
199: });
200:
201: fImportListViewer
202: .addSelectionChangedListener(new ISelectionChangedListener() {
203: public void selectionChanged(
204: SelectionChangedEvent event) {
205: if (!fBlockSelectionListeners)
206: updateSelectionBasedEnablement(event
207: .getSelection(), false);
208: }
209: });
210:
211: fFilterText.addModifyListener(new ModifyListener() {
212: public void modifyText(ModifyEvent e) {
213: fFilterJob.cancel();
214: fFilterJob.schedule(200);
215: }
216: });
217:
218: }
219:
220: private Composite createAvailableList(Composite parent) {
221: Composite container = new Composite(parent, SWT.NONE);
222: GridLayout layout = new GridLayout();
223: layout.marginWidth = 0;
224: layout.marginHeight = 0;
225: container.setLayout(layout);
226: container.setLayoutData(new GridData());
227:
228: Label label = new Label(container, SWT.NONE);
229: label
230: .setText(PDEUIMessages.ImportWizard_DetailedPage_availableList);
231:
232: Table table = new Table(container, SWT.BORDER | SWT.MULTI
233: | SWT.V_SCROLL);
234: GridData gd = new GridData(GridData.FILL_BOTH);
235: gd.heightHint = 200;
236: gd.widthHint = 225;
237: table.setLayoutData(gd);
238:
239: fAvailableListViewer = new TableViewer(table);
240: fAvailableListViewer.setLabelProvider(PDEPlugin.getDefault()
241: .getLabelProvider());
242: fAvailableListViewer.setContentProvider(new ContentProvider());
243: fAvailableListViewer.setInput(PDECore.getDefault()
244: .getModelManager());
245: fAvailableListViewer.setComparator(ListUtil.PLUGIN_COMPARATOR);
246:
247: return container;
248: }
249:
250: private Composite createButtonArea(Composite parent) {
251: ScrolledComposite comp = new ScrolledComposite(parent,
252: SWT.V_SCROLL | SWT.H_SCROLL);
253: GridLayout layout = new GridLayout();
254: layout.marginWidth = layout.marginHeight = 0;
255: comp.setLayoutData(new GridData(GridData.FILL_VERTICAL));
256: Composite container = new Composite(comp, SWT.NONE);
257: layout = new GridLayout();
258: layout.marginWidth = 0;
259: container.setLayout(layout);
260: GridData gd = new GridData(GridData.FILL_VERTICAL);
261: gd.verticalIndent = 15;
262: container.setLayoutData(gd);
263:
264: Button button = new Button(container, SWT.PUSH);
265: button
266: .setText(PDEUIMessages.ImportWizard_DetailedPage_existing);
267: button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
268: button.addSelectionListener(new SelectionAdapter() {
269: public void widgetSelected(SelectionEvent e) {
270: handleExistingProjects();
271: }
272: });
273: SWTUtil.setButtonDimensionHint(button);
274:
275: button = new Button(container, SWT.PUSH);
276: button
277: .setText(PDEUIMessages.ImportWizard_DetailedPage_existingUnshared);
278: button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
279: button.addSelectionListener(new SelectionAdapter() {
280: public void widgetSelected(SelectionEvent e) {
281: handleExistingUnshared();
282: }
283: });
284: SWTUtil.setButtonDimensionHint(button);
285:
286: fAddButton = new Button(container, SWT.PUSH);
287: fAddButton.setText(PDEUIMessages.ImportWizard_DetailedPage_add);
288: fAddButton
289: .setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
290: fAddButton.addSelectionListener(new SelectionAdapter() {
291: public void widgetSelected(SelectionEvent e) {
292: handleAdd();
293: }
294: });
295: SWTUtil.setButtonDimensionHint(fAddButton);
296:
297: fAddAllButton = new Button(container, SWT.PUSH);
298: fAddAllButton
299: .setText(PDEUIMessages.ImportWizard_DetailedPage_addAll);
300: fAddAllButton.setLayoutData(new GridData(
301: GridData.FILL_HORIZONTAL));
302: fAddAllButton.addSelectionListener(new SelectionAdapter() {
303: public void widgetSelected(SelectionEvent e) {
304: handleAddAll();
305: }
306: });
307: SWTUtil.setButtonDimensionHint(fAddAllButton);
308:
309: fRemoveButton = new Button(container, SWT.PUSH);
310: fRemoveButton
311: .setText(PDEUIMessages.ImportWizard_DetailedPage_remove);
312: fRemoveButton.setLayoutData(new GridData(
313: GridData.FILL_HORIZONTAL));
314: fRemoveButton.addSelectionListener(new SelectionAdapter() {
315: public void widgetSelected(SelectionEvent e) {
316: handleRemove();
317: }
318: });
319: SWTUtil.setButtonDimensionHint(fRemoveButton);
320:
321: fRemoveAllButton = new Button(container, SWT.PUSH);
322: fRemoveAllButton
323: .setText(PDEUIMessages.ImportWizard_DetailedPage_removeAll);
324: fRemoveAllButton.setLayoutData(new GridData(
325: GridData.FILL_HORIZONTAL));
326: fRemoveAllButton.addSelectionListener(new SelectionAdapter() {
327: public void widgetSelected(SelectionEvent e) {
328: handleRemoveAll();
329: }
330: });
331: SWTUtil.setButtonDimensionHint(fRemoveAllButton);
332:
333: button = new Button(container, SWT.PUSH);
334: button.setText(PDEUIMessages.ImportWizard_DetailedPage_swap);
335: button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
336: button.addSelectionListener(new SelectionAdapter() {
337: public void widgetSelected(SelectionEvent e) {
338: handleSwap();
339: }
340: });
341: SWTUtil.setButtonDimensionHint(button);
342:
343: fAddRequiredButton = new Button(container, SWT.PUSH);
344: fAddRequiredButton
345: .setText(PDEUIMessages.ImportWizard_DetailedPage_addRequired);
346: fAddRequiredButton.setLayoutData(new GridData(
347: GridData.FILL_HORIZONTAL));
348: fAddRequiredButton.addSelectionListener(new SelectionAdapter() {
349: public void widgetSelected(SelectionEvent e) {
350: handleAddRequiredPlugins();
351: }
352:
353: });
354: SWTUtil.setButtonDimensionHint(fAddRequiredButton);
355:
356: fCountLabel = new Label(container, SWT.NONE);
357: fCountLabel.setLayoutData(new GridData(
358: GridData.HORIZONTAL_ALIGN_CENTER));
359: comp.setContent(container);
360: comp.setMinHeight(250);
361: comp.setExpandHorizontal(true);
362: comp.setExpandVertical(true);
363: return container;
364: }
365:
366: private Composite createScrollArea(Composite parent) {
367: Group container = new Group(parent, SWT.NONE);
368: GridLayout layout = new GridLayout(2, false);
369: layout.marginWidth = layout.marginHeight = 6;
370: container.setLayout(layout);
371:
372: GridData gd = new GridData(GridData.FILL_HORIZONTAL);
373: gd.horizontalSpan = 3;
374: container.setLayoutData(gd);
375: container
376: .setText(PDEUIMessages.ImportWizard_DetailedPage_filter);
377:
378: Label filterLabel = new Label(container, SWT.NONE);
379: filterLabel
380: .setText(PDEUIMessages.ImportWizard_DetailedPage_search);
381:
382: fFilterText = new Text(container, SWT.BORDER);
383: fFilterText.setText(""); //$NON-NLS-1$
384: gd = new GridData(GridData.FILL_HORIZONTAL);
385: fFilterText.setLayoutData(gd);
386:
387: return container;
388: }
389:
390: public void setVisible(boolean visible) {
391: super .setVisible(visible);
392: if (visible)
393: fFilterText.setFocus();
394: setPageComplete(visible
395: && fImportListViewer.getTable().getItemCount() > 0);
396:
397: }
398:
399: protected void refreshPage() {
400: fImportListViewer.getTable().removeAll();
401: fSelected = new HashMap();
402: fFilter.setPattern("*"); //$NON-NLS-1$
403: fAvailableListViewer.refresh();
404: pageChanged();
405: }
406:
407: protected void pageChanged() {
408: pageChanged(false, false);
409: }
410:
411: protected void pageChanged(boolean doAddEnablement,
412: boolean doRemoveEnablement) {
413: updateCount();
414: updateButtonEnablement(doAddEnablement, doRemoveEnablement);
415: setPageComplete(fImportListViewer.getTable().getItemCount() > 0);
416: }
417:
418: private void updateCount() {
419: fCountLabel.setText(NLS.bind(
420: PDEUIMessages.ImportWizard_DetailedPage_count,
421: (new String[] {
422: new Integer(fImportListViewer.getTable()
423: .getItemCount()).toString(),
424: new Integer(fModels.length).toString() })));
425: fCountLabel.getParent().layout();
426: }
427:
428: private void updateButtonEnablement(boolean doAddEnablement,
429: boolean doRemoveEnablement) {
430: int availableCount = fAvailableListViewer.getTable()
431: .getItemCount();
432: int importCount = fImportListViewer.getTable().getItemCount();
433:
434: if (doAddEnablement)
435: updateSelectionBasedEnablement(fAvailableListViewer
436: .getSelection(), true);
437: if (doRemoveEnablement)
438: updateSelectionBasedEnablement(fImportListViewer
439: .getSelection(), false);
440:
441: fAddAllButton.setEnabled(availableCount > 0);
442: fRemoveAllButton.setEnabled(importCount > 0);
443: fAddRequiredButton.setEnabled(importCount > 0);
444: }
445:
446: private void updateSelectionBasedEnablement(
447: ISelection theSelection, boolean available) {
448: if (available)
449: fAddButton.setEnabled(!theSelection.isEmpty());
450: else
451: fRemoveButton.setEnabled(!theSelection.isEmpty());
452: }
453:
454: private void handleAdd() {
455: IStructuredSelection ssel = (IStructuredSelection) fAvailableListViewer
456: .getSelection();
457: if (ssel.size() > 0) {
458: Table table = fAvailableListViewer.getTable();
459: int index = table.getSelectionIndices()[0];
460: Object[] selection = ssel.toArray();
461: setBlockSelectionListeners(true);
462: setRedraw(false);
463: for (int i = 0; i < selection.length; i++) {
464: doAdd(selection[i]);
465: }
466: setRedraw(true);
467: setBlockSelectionListeners(false);
468: table.setSelection(index < table.getItemCount() ? index
469: : table.getItemCount() - 1);
470: pageChanged(true, false);
471: }
472: }
473:
474: private void handleAddAll() {
475: TableItem[] items = fAvailableListViewer.getTable().getItems();
476:
477: ArrayList data = new ArrayList();
478: for (int i = 0; i < items.length; i++) {
479: data.add(items[i].getData());
480: }
481: if (data.size() > 0) {
482: Object[] datas = data.toArray();
483: setBlockSelectionListeners(true);
484: setRedraw(false);
485: for (int i = 0; i < datas.length; i++) {
486: doAdd(datas[i]);
487: }
488: setRedraw(true);
489: setBlockSelectionListeners(false);
490: pageChanged(true, false);
491: }
492: }
493:
494: private void handleFilter() {
495: boolean changed = false;
496: String newFilter;
497: if (fFilterText == null
498: || (newFilter = fFilterText.getText().trim()).length() == 0)
499: newFilter = "*"; //$NON-NLS-1$
500: changed = fFilter.setPattern(newFilter);
501: if (changed) {
502: fAvailableListViewer.getTable().setRedraw(false);
503: fAvailableListViewer.refresh();
504: fAvailableListViewer.getTable().setRedraw(true);
505: updateButtonEnablement(false, false);
506: }
507: }
508:
509: private void handleRemove() {
510: IStructuredSelection ssel = (IStructuredSelection) fImportListViewer
511: .getSelection();
512: if (ssel.size() > 0) {
513: Table table = fImportListViewer.getTable();
514: int index = table.getSelectionIndices()[0];
515: Object[] selection = ssel.toArray();
516: setBlockSelectionListeners(true);
517: setRedraw(false);
518: for (int i = 0; i < selection.length; i++) {
519: doRemove(selection[i]);
520: }
521: setRedraw(true);
522: setBlockSelectionListeners(false);
523: table.setSelection(index < table.getItemCount() ? index
524: : table.getItemCount() - 1);
525: pageChanged(false, true);
526: }
527: }
528:
529: private void doAdd(Object o) {
530: fImportListViewer.add(o);
531: fAvailableListViewer.remove(o);
532: fSelected.put(o, null);
533: }
534:
535: private void doRemove(Object o) {
536: fSelected.remove(o);
537: fImportListViewer.remove(o);
538: if (fFilter.select(fAvailableListViewer, null, o))
539: fAvailableListViewer.add(o);
540: }
541:
542: // used to prevent flicker during operations that move items between lists
543: private void setRedraw(boolean redraw) {
544: fAvailableListViewer.getTable().setRedraw(redraw);
545: fImportListViewer.getTable().setRedraw(redraw);
546: }
547:
548: private void handleRemoveAll() {
549: TableItem[] items = fImportListViewer.getTable().getItems();
550:
551: ArrayList data = new ArrayList();
552: for (int i = 0; i < items.length; i++) {
553: data.add(items[i].getData());
554: }
555: if (data.size() > 0) {
556: Object[] datas = data.toArray();
557: setBlockSelectionListeners(true);
558: setRedraw(false);
559: for (int i = 0; i < datas.length; i++) {
560: doRemove(datas[i]);
561: }
562: setRedraw(true);
563: setBlockSelectionListeners(false);
564: pageChanged(false, true);
565: }
566: }
567:
568: private void handleSetImportSelection(ArrayList newSelectionList) {
569: if (newSelectionList.size() == 0) {
570: handleRemoveAll();
571: pageChanged();
572: return;
573: }
574: TableItem[] items = fImportListViewer.getTable().getItems();
575: Object[] oldSelection = new Object[items.length];
576: for (int i = 0; i < items.length; i++) {
577: oldSelection[i] = items[i].getData();
578: }
579: setRedraw(false);
580: // remove items that were in the old selection, but are not in the new one
581: for (int i = 0; i < oldSelection.length; i++) {
582: if (newSelectionList.contains(oldSelection[i])) {
583: newSelectionList.remove(oldSelection[i]);
584: } else {
585: doRemove(oldSelection[i]);
586: }
587: }
588: // add items that were not in the old selection and are in the new one
589: Object[] newSelection = newSelectionList.toArray();
590: for (int i = 0; i < newSelection.length; i++) {
591: doAdd(newSelection[i]);
592: }
593: setRedraw(true);
594: pageChanged();
595: }
596:
597: private void handleSwap() {
598: TableItem[] aItems = fAvailableListViewer.getTable().getItems();
599: TableItem[] iItems = fImportListViewer.getTable().getItems();
600:
601: setRedraw(false);
602: ArrayList data = new ArrayList();
603: for (int i = 0; i < iItems.length; i++) {
604: data.add(iItems[i].getData());
605: }
606: if (data.size() > 0) {
607: Object[] datas = data.toArray();
608: for (int i = 0; i < datas.length; i++) {
609: doRemove(datas[i]);
610: }
611: }
612:
613: data.clear();
614: for (int i = 0; i < aItems.length; i++) {
615: data.add(aItems[i].getData());
616: }
617: if (data.size() > 0) {
618: Object[] datas = data.toArray();
619: for (int i = 0; i < datas.length; i++) {
620: doAdd(datas[i]);
621: }
622: }
623: setRedraw(true);
624: pageChanged();
625: }
626:
627: private void handleExistingProjects() {
628: ArrayList result = new ArrayList();
629: for (int i = 0; i < fModels.length; i++) {
630: String id = fModels[i].getPluginBase().getId();
631: IProject project = (IProject) PDEPlugin.getWorkspace()
632: .getRoot().findMember(id);
633: if (project != null && project.isOpen()
634: && WorkspaceModelManager.isPluginProject(project)) {
635: result.add(fModels[i]);
636: }
637: }
638: handleSetImportSelection(result);
639: }
640:
641: private void handleExistingUnshared() {
642: ArrayList result = new ArrayList();
643: for (int i = 0; i < fModels.length; i++) {
644: String id = fModels[i].getPluginBase().getId();
645: IProject project = (IProject) PDEPlugin.getWorkspace()
646: .getRoot().findMember(id);
647: if (project != null
648: && WorkspaceModelManager.isUnsharedProject(project)
649: && WorkspaceModelManager.isPluginProject(project)) {
650: result.add(fModels[i]);
651: }
652: }
653: handleSetImportSelection(result);
654: }
655:
656: private void handleAddRequiredPlugins() {
657: TableItem[] items = fImportListViewer.getTable().getItems();
658: if (items.length == 0)
659: return;
660: if (items.length == 1) {
661: IPluginModelBase model = (IPluginModelBase) items[0]
662: .getData();
663: if (model.getPluginBase().getId().equals(
664: "org.eclipse.core.boot")) { //$NON-NLS-1$
665: return;
666: }
667: }
668:
669: ArrayList result = new ArrayList();
670: for (int i = 0; i < items.length; i++) {
671: addPluginAndDependencies((IPluginModelBase) items[i]
672: .getData(), result, fAddFragmentsButton
673: .getSelection());
674: }
675: handleSetImportSelection(result);
676: }
677:
678: public void dispose() {
679: fFilterJob.cancel();
680: }
681:
682: private void setBlockSelectionListeners(
683: boolean blockSelectionListeners) {
684: fBlockSelectionListeners = blockSelectionListeners;
685: }
686: }
|