### Eclipse Workspace Patch 1.0 #P org.eclipse.pde.ui Index: src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardDetailedPage.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardDetailedPage.java,v retrieving revision 1.86 diff -u -r1.86 PluginImportWizardDetailedPage.java --- src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardDetailedPage.java 29 Nov 2007 16:09:52 -0000 1.86 +++ src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardDetailedPage.java 29 Nov 2007 23:28:49 -0000 @@ -67,6 +67,7 @@ import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.progress.WorkbenchJob; +import org.osgi.framework.Version; public class PluginImportWizardDetailedPage extends BaseImportWizardSecondPage { @@ -82,6 +83,7 @@ private Label fCountLabel; private TableViewer fAvailableListViewer; private Text fFilterText; + private VersionFilter fVersionFilter; private AvailableFilter fFilter; // fSelected is used to track the selection in a HashMap so we can efficiently // filter selected items out of the available item list @@ -120,8 +122,6 @@ public boolean setPattern(String newPattern) { if (!newPattern.endsWith("*")) //$NON-NLS-1$ newPattern += "*"; //$NON-NLS-1$ - if (!newPattern.startsWith("*")) //$NON-NLS-1$ - newPattern = "*" + newPattern; //$NON-NLS-1$ if (fPattern != null) { String oldPattern = fPattern.pattern(); if (newPattern.equals(oldPattern)) @@ -132,6 +132,40 @@ } } + /** + * This filter is used to remove older plug-ins from view + * + */ + private class VersionFilter extends ViewerFilter { + private HashMap versions = new HashMap(); + + public void setModel(IPluginModelBase[] plugins) { + if (plugins != null && plugins.length > 0) { + versions.clear(); + } + for (int i = 0; i < plugins.length; ++i) { + String name = plugins[i].getBundleDescription() + .getSymbolicName(); + Version version = plugins[i].getBundleDescription() + .getVersion(); + Version oldVersion = (Version) versions.get(name); + if (oldVersion == null || oldVersion.compareTo(version) < 0) { + versions.put(name, version); + } + } + } + + public boolean select(Viewer viewer, Object parentElement, + Object element) { + IPluginModelBase plugin = (IPluginModelBase) element; + Version hVersion = (Version) versions.get(plugin + .getBundleDescription().getSymbolicName()); + if (hVersion == null) return true; + return hVersion.equals(plugin.getBundleDescription().getVersion()); + } + + } + public PluginImportWizardDetailedPage(String pageName, PluginImportWizardFirstPage firstPage) { super(pageName, firstPage); setTitle(PDEUIMessages.ImportWizard_DetailedPage_title); @@ -164,8 +198,11 @@ } private void addFilter() { + fVersionFilter = new VersionFilter(); + fVersionFilter.setModel(fModels); fFilter = new AvailableFilter(); fAvailableListViewer.addFilter(fFilter); + fAvailableListViewer.addFilter(fVersionFilter); fFilterJob = new WorkbenchJob("FilterJob") { //$NON-NLS-1$ public IStatus runInUIThread(IProgressMonitor monitor) { handleFilter(); @@ -378,6 +415,7 @@ fImportListViewer.getTable().removeAll(); fSelected = new HashMap(); fFilter.setPattern("*"); //$NON-NLS-1$ + fVersionFilter.setModel(fModels); fAvailableListViewer.refresh(); pageChanged(); }