### Eclipse Workspace Patch 1.0 #P org.eclipse.pde.ui Index: src/org/eclipse/pde/internal/ui/wizards/imports/BaseImportWizardSecondPage.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/BaseImportWizardSecondPage.java,v retrieving revision 1.34 diff -u -r1.34 BaseImportWizardSecondPage.java --- src/org/eclipse/pde/internal/ui/wizards/imports/BaseImportWizardSecondPage.java 8 Jun 2007 16:43:37 -0000 1.34 +++ src/org/eclipse/pde/internal/ui/wizards/imports/BaseImportWizardSecondPage.java 3 Dec 2007 21:38:24 -0000 @@ -13,6 +13,7 @@ import java.util.ArrayList; import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.wizard.WizardPage; @@ -94,7 +95,7 @@ protected Composite createComputationsOption(Composite parent, int span) { Composite composite = new Composite(parent, SWT.NONE); - composite.setLayout(new GridLayout()); + composite.setLayout(GridLayoutFactory.swtDefaults().margins(5, 0).create()); GridData gd = new GridData(); gd.horizontalSpan = span; composite.setLayoutData(gd); 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 3 Dec 2007 21:38:24 -0000 @@ -7,18 +7,11 @@ * * Contributors: * IBM Corporation - initial API and implementation - * Joern Dinkla - Bug 210264 + * Joern Dinkla - bug 210264 + * Bartosz Michalik - bug 114080 *******************************************************************************/ -/* - * Created on May 31, 2003 - * - * To change this generated comment go to - * Window>Preferences>Java>Code Generation>Code Template - */ package org.eclipse.pde.internal.ui.wizards.imports; - - import java.util.ArrayList; import java.util.HashMap; import java.util.regex.Pattern; @@ -28,6 +21,8 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; @@ -67,6 +62,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 +78,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 @@ -95,6 +92,9 @@ private Button fRemoveButton; private Button fRemoveAllButton; private Button fAddRequiredButton; + private Button fFilterOldVersionButton; + + private static final String SETTINGS_SHOW_LATEST = "showLatestPluginsOnly"; //$NON-NLS-1$ private class AvailableFilter extends ViewerFilter { private Pattern fPattern; @@ -120,8 +120,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 +130,42 @@ } } + /** + * 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); @@ -153,7 +187,13 @@ createButtonArea(container); createImportList(container).setLayoutData(new GridData(GridData.FILL_BOTH)); updateCount(); - createComputationsOption(container, 3); + + // create container for buttons + Composite buttonContainer = new Composite(container, SWT.NONE); + buttonContainer.setLayout(GridLayoutFactory.fillDefaults().create()); + createComputationsOption(buttonContainer, 3); + createFilterOption(buttonContainer, 3); + addViewerListeners(); addFilter(); @@ -163,9 +203,41 @@ PlatformUI.getWorkbench().getHelpSystem().setHelp(container, IHelpContextIds.PLUGIN_IMPORT_SECOND_PAGE); } + private void createFilterOption(Composite container, int span) { + Composite parent = new Composite(container, SWT.NONE); + parent.setLayout(GridLayoutFactory.swtDefaults().margins(5, 0).create()); + fFilterOldVersionButton = new Button(parent, SWT.CHECK); + fFilterOldVersionButton.setSelection(true); + fFilterOldVersionButton.setText(PDEUIMessages.ImportWizard_DetailedPage_filterDesc); + GridData gData = new GridData(GridData.FILL_HORIZONTAL); + gData.horizontalSpan = span; + fFilterOldVersionButton.setLayoutData(gData); + + if (getDialogSettings().get(SETTINGS_SHOW_LATEST) != null) + fFilterOldVersionButton.setSelection(getDialogSettings().getBoolean(SETTINGS_SHOW_LATEST)); + else + fFilterOldVersionButton.setSelection(true); + + fFilterOldVersionButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + fAvailableListViewer.removeFilter(fVersionFilter); + if(fFilterOldVersionButton.getSelection()) { + fAvailableListViewer.addFilter(fVersionFilter); + } + fAvailableListViewer.getTable().setRedraw(false); + fAvailableListViewer.refresh(); + fAvailableListViewer.getTable().setRedraw(true); + } + + }); + } + 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(); @@ -336,6 +408,7 @@ }); SWTUtil.setButtonDimensionHint(fAddRequiredButton); + fCountLabel = new Label(container, SWT.NONE); fCountLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER)); @@ -378,6 +451,7 @@ fImportListViewer.getTable().removeAll(); fSelected = new HashMap(); fFilter.setPattern("*"); //$NON-NLS-1$ + fVersionFilter.setModel(fModels); fAvailableListViewer.refresh(); pageChanged(); } @@ -610,7 +684,7 @@ } handleSetImportSelection(result); } - + private void handleAddRequiredPlugins() { TableItem[] items = fImportListViewer.getTable().getItems(); if (items.length == 0) @@ -628,6 +702,7 @@ } handleSetImportSelection(result); } + public void dispose() { fFilterJob.cancel(); } @@ -635,4 +710,11 @@ private void setBlockSelectionListeners(boolean blockSelectionListeners) { fBlockSelectionListeners = blockSelectionListeners; } + + public void storeSettings() { + IDialogSettings settings = getDialogSettings(); + settings.put(SETTINGS_SHOW_LATEST, fFilterOldVersionButton.getSelection()); + super.storeSettings(); + } + } Index: src/org/eclipse/pde/internal/ui/pderesources.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties,v retrieving revision 1.942 diff -u -r1.942 pderesources.properties --- src/org/eclipse/pde/internal/ui/pderesources.properties 3 Dec 2007 20:23:12 -0000 1.942 +++ src/org/eclipse/pde/internal/ui/pderesources.properties 3 Dec 2007 21:38:24 -0000 @@ -1104,7 +1104,7 @@ ImplicitDependenicesSection_RemoveAll=Remove All ImportWizard_DetailedPage_count = {0} out of {1} selected ImportWizard_DetailedPage_filter = Filter Available Plug-ins and Fragments -ImportWizard_DetailedPage_filterDesc=Filter out duplicated plugin with older versions +ImportWizard_DetailedPage_filterDesc=Show latest version of plug-ins only ImportWizard_DetailedPage_search = &ID (* = any string, ? = any character): ImportWizard_operation_creating = Creating projects from plug-ins...