View | Details | Raw Unified | Return to bug 114080 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/pde/internal/ui/wizards/imports/BaseImportWizardSecondPage.java (-1 / +2 lines)
Lines 13-18 Link Here
13
import java.util.ArrayList;
13
import java.util.ArrayList;
14
14
15
import org.eclipse.jface.dialogs.IDialogSettings;
15
import org.eclipse.jface.dialogs.IDialogSettings;
16
import org.eclipse.jface.layout.GridLayoutFactory;
16
import org.eclipse.jface.viewers.IStructuredContentProvider;
17
import org.eclipse.jface.viewers.IStructuredContentProvider;
17
import org.eclipse.jface.viewers.TableViewer;
18
import org.eclipse.jface.viewers.TableViewer;
18
import org.eclipse.jface.wizard.WizardPage;
19
import org.eclipse.jface.wizard.WizardPage;
Lines 94-100 Link Here
94
	
95
	
95
	protected Composite createComputationsOption(Composite parent, int span) {
96
	protected Composite createComputationsOption(Composite parent, int span) {
96
		Composite composite = new Composite(parent, SWT.NONE);
97
		Composite composite = new Composite(parent, SWT.NONE);
97
		composite.setLayout(new GridLayout());
98
		composite.setLayout(GridLayoutFactory.swtDefaults().margins(5, 0).create());
98
		GridData gd = new GridData();
99
		GridData gd = new GridData();
99
		gd.horizontalSpan = span;
100
		gd.horizontalSpan = span;
100
		composite.setLayoutData(gd);
101
		composite.setLayoutData(gd);
(-)src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardDetailedPage.java (-13 / +95 lines)
Lines 7-24 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 *     Joern Dinkla <devnull@dinkla.com> - Bug 210264
10
 *     Joern Dinkla <devnull@dinkla.com> - bug 210264
11
 *     Bartosz Michalik <bartosz.michalik@gmail.com> - bug 114080
11
 *******************************************************************************/
12
 *******************************************************************************/
12
/*
13
 * Created on May 31, 2003
14
 *
15
 * To change this generated comment go to 
16
 * Window>Preferences>Java>Code Generation>Code Template
17
 */
18
package org.eclipse.pde.internal.ui.wizards.imports;
13
package org.eclipse.pde.internal.ui.wizards.imports;
19
14
20
21
22
import java.util.ArrayList;
15
import java.util.ArrayList;
23
import java.util.HashMap;
16
import java.util.HashMap;
24
import java.util.regex.Pattern;
17
import java.util.regex.Pattern;
Lines 28-33 Link Here
28
import org.eclipse.core.runtime.IStatus;
21
import org.eclipse.core.runtime.IStatus;
29
import org.eclipse.core.runtime.Status;
22
import org.eclipse.core.runtime.Status;
30
import org.eclipse.jface.dialogs.Dialog;
23
import org.eclipse.jface.dialogs.Dialog;
24
import org.eclipse.jface.dialogs.IDialogSettings;
25
import org.eclipse.jface.layout.GridLayoutFactory;
31
import org.eclipse.jface.viewers.DoubleClickEvent;
26
import org.eclipse.jface.viewers.DoubleClickEvent;
32
import org.eclipse.jface.viewers.IDoubleClickListener;
27
import org.eclipse.jface.viewers.IDoubleClickListener;
33
import org.eclipse.jface.viewers.ISelection;
28
import org.eclipse.jface.viewers.ISelection;
Lines 67-72 Link Here
67
import org.eclipse.swt.widgets.Text;
62
import org.eclipse.swt.widgets.Text;
68
import org.eclipse.ui.PlatformUI;
63
import org.eclipse.ui.PlatformUI;
69
import org.eclipse.ui.progress.WorkbenchJob;
64
import org.eclipse.ui.progress.WorkbenchJob;
65
import org.osgi.framework.Version;
70
66
71
public class PluginImportWizardDetailedPage extends BaseImportWizardSecondPage {
67
public class PluginImportWizardDetailedPage extends BaseImportWizardSecondPage {
72
68
Lines 82-87 Link Here
82
	private Label fCountLabel;
78
	private Label fCountLabel;
83
	private TableViewer fAvailableListViewer;
79
	private TableViewer fAvailableListViewer;
84
	private Text fFilterText;
80
	private Text fFilterText;
81
	private VersionFilter fVersionFilter;
85
	private AvailableFilter fFilter;
82
	private AvailableFilter fFilter;
86
	// fSelected is used to track the selection in a HashMap so we can efficiently
83
	// fSelected is used to track the selection in a HashMap so we can efficiently
87
	// filter selected items out of the available item list
84
	// filter selected items out of the available item list
Lines 95-100 Link Here
95
	private Button fRemoveButton;
92
	private Button fRemoveButton;
96
	private Button fRemoveAllButton;
93
	private Button fRemoveAllButton;
97
	private Button fAddRequiredButton;
94
	private Button fAddRequiredButton;
95
	private Button fFilterOldVersionButton;
96
	
97
	private static final String SETTINGS_SHOW_LATEST = "showLatestPluginsOnly"; //$NON-NLS-1$
98
	
98
	
99
	private class AvailableFilter extends ViewerFilter {
99
	private class AvailableFilter extends ViewerFilter {
100
		private Pattern fPattern;
100
		private Pattern fPattern;
Lines 120-127 Link Here
120
		public boolean setPattern(String newPattern) {
120
		public boolean setPattern(String newPattern) {
121
			if (!newPattern.endsWith("*")) //$NON-NLS-1$
121
			if (!newPattern.endsWith("*")) //$NON-NLS-1$
122
				newPattern += "*"; //$NON-NLS-1$
122
				newPattern += "*"; //$NON-NLS-1$
123
			if (!newPattern.startsWith("*")) //$NON-NLS-1$
124
				newPattern = "*" + newPattern; //$NON-NLS-1$
125
			if (fPattern != null) {
123
			if (fPattern != null) {
126
				String oldPattern = fPattern.pattern();
124
				String oldPattern = fPattern.pattern();
127
				if (newPattern.equals(oldPattern))
125
				if (newPattern.equals(oldPattern))
Lines 132-137 Link Here
132
		}
130
		}
133
	}
131
	}
134
	
132
	
133
	/**
134
	 * This filter is used to remove older plug-ins from view
135
	 * 
136
	 */
137
	private class VersionFilter extends ViewerFilter {
138
		private HashMap versions = new HashMap();
139
140
		public void setModel(IPluginModelBase[] plugins) {
141
			if (plugins != null && plugins.length > 0) {
142
				versions.clear();
143
			}
144
			for (int i = 0; i < plugins.length; ++i) {
145
				String name = plugins[i].getBundleDescription()
146
						.getSymbolicName();
147
				Version version = plugins[i].getBundleDescription()
148
						.getVersion();
149
				Version oldVersion = (Version) versions.get(name);
150
				if (oldVersion == null || oldVersion.compareTo(version) < 0) {
151
					versions.put(name, version);
152
				}
153
			}
154
		}
155
156
		public boolean select(Viewer viewer, Object parentElement,
157
				Object element) {
158
			IPluginModelBase plugin = (IPluginModelBase) element;
159
			Version hVersion = (Version) versions.get(plugin
160
					.getBundleDescription().getSymbolicName());
161
			if (hVersion == null) return true;
162
			return hVersion.equals(plugin.getBundleDescription().getVersion());
163
		}
164
		
165
		
166
167
	}
168
	
135
	public PluginImportWizardDetailedPage(String pageName, PluginImportWizardFirstPage firstPage) {
169
	public PluginImportWizardDetailedPage(String pageName, PluginImportWizardFirstPage firstPage) {
136
		super(pageName, firstPage);
170
		super(pageName, firstPage);
137
		setTitle(PDEUIMessages.ImportWizard_DetailedPage_title); 
171
		setTitle(PDEUIMessages.ImportWizard_DetailedPage_title); 
Lines 153-159 Link Here
153
		createButtonArea(container);
187
		createButtonArea(container);
154
		createImportList(container).setLayoutData(new GridData(GridData.FILL_BOTH));
188
		createImportList(container).setLayoutData(new GridData(GridData.FILL_BOTH));
155
		updateCount();
189
		updateCount();
156
		createComputationsOption(container, 3);		
190
		
191
		// create container for buttons
192
		Composite buttonContainer = new Composite(container, SWT.NONE);
193
		buttonContainer.setLayout(GridLayoutFactory.fillDefaults().create());
194
		createComputationsOption(buttonContainer, 3);	
195
		createFilterOption(buttonContainer, 3);
196
		
157
		addViewerListeners();
197
		addViewerListeners();
158
		addFilter();
198
		addFilter();
159
		
199
		
Lines 163-171 Link Here
163
		PlatformUI.getWorkbench().getHelpSystem().setHelp(container, IHelpContextIds.PLUGIN_IMPORT_SECOND_PAGE);
203
		PlatformUI.getWorkbench().getHelpSystem().setHelp(container, IHelpContextIds.PLUGIN_IMPORT_SECOND_PAGE);
164
	}
204
	}
165
	
205
	
206
	private void createFilterOption(Composite container, int span) {
207
		Composite parent = new Composite(container, SWT.NONE);
208
		parent.setLayout(GridLayoutFactory.swtDefaults().margins(5, 0).create());
209
		fFilterOldVersionButton = new Button(parent, SWT.CHECK);
210
		fFilterOldVersionButton.setSelection(true);
211
		fFilterOldVersionButton.setText(PDEUIMessages.ImportWizard_DetailedPage_filterDesc);
212
		GridData gData = new GridData(GridData.FILL_HORIZONTAL);
213
		gData.horizontalSpan = span;
214
		fFilterOldVersionButton.setLayoutData(gData);
215
		
216
		if (getDialogSettings().get(SETTINGS_SHOW_LATEST) != null)
217
			fFilterOldVersionButton.setSelection(getDialogSettings().getBoolean(SETTINGS_SHOW_LATEST));
218
		else 
219
			fFilterOldVersionButton.setSelection(true);
220
		
221
		fFilterOldVersionButton.addSelectionListener(new SelectionAdapter() {
222
			public void widgetSelected(SelectionEvent e) {
223
				fAvailableListViewer.removeFilter(fVersionFilter);
224
				if(fFilterOldVersionButton.getSelection()) {
225
					fAvailableListViewer.addFilter(fVersionFilter);
226
				}
227
				fAvailableListViewer.getTable().setRedraw(false);
228
				fAvailableListViewer.refresh();
229
				fAvailableListViewer.getTable().setRedraw(true);
230
			}
231
232
		});
233
	}
234
166
	private void addFilter() {
235
	private void addFilter() {
236
		fVersionFilter = new VersionFilter();
237
		fVersionFilter.setModel(fModels);
167
		fFilter = new AvailableFilter();
238
		fFilter = new AvailableFilter();
168
		fAvailableListViewer.addFilter(fFilter);
239
		fAvailableListViewer.addFilter(fFilter);
240
		fAvailableListViewer.addFilter(fVersionFilter);
169
		fFilterJob = new WorkbenchJob("FilterJob") { //$NON-NLS-1$
241
		fFilterJob = new WorkbenchJob("FilterJob") { //$NON-NLS-1$
170
			public IStatus runInUIThread(IProgressMonitor monitor) {
242
			public IStatus runInUIThread(IProgressMonitor monitor) {
171
				handleFilter();
243
				handleFilter();
Lines 336-341 Link Here
336
408
337
		});
409
		});
338
		SWTUtil.setButtonDimensionHint(fAddRequiredButton);
410
		SWTUtil.setButtonDimensionHint(fAddRequiredButton);
411
	
339
		
412
		
340
		fCountLabel = new Label(container, SWT.NONE);
413
		fCountLabel = new Label(container, SWT.NONE);
341
		fCountLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER));
414
		fCountLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER));
Lines 378-383 Link Here
378
		fImportListViewer.getTable().removeAll();
451
		fImportListViewer.getTable().removeAll();
379
		fSelected = new HashMap();
452
		fSelected = new HashMap();
380
		fFilter.setPattern("*"); //$NON-NLS-1$
453
		fFilter.setPattern("*"); //$NON-NLS-1$
454
		fVersionFilter.setModel(fModels);
381
		fAvailableListViewer.refresh();
455
		fAvailableListViewer.refresh();
382
		pageChanged();
456
		pageChanged();
383
	}
457
	}
Lines 610-616 Link Here
610
		}
684
		}
611
		handleSetImportSelection(result);	
685
		handleSetImportSelection(result);	
612
	}
686
	}
613
	
687
614
	private void handleAddRequiredPlugins() {
688
	private void handleAddRequiredPlugins() {
615
		TableItem[] items = fImportListViewer.getTable().getItems();
689
		TableItem[] items = fImportListViewer.getTable().getItems();
616
		if (items.length == 0)
690
		if (items.length == 0)
Lines 628-633 Link Here
628
		}
702
		}
629
		handleSetImportSelection(result);
703
		handleSetImportSelection(result);
630
	}
704
	}
705
	
631
	public void dispose() {
706
	public void dispose() {
632
		fFilterJob.cancel();
707
		fFilterJob.cancel();
633
	}
708
	}
Lines 635-638 Link Here
635
	private void setBlockSelectionListeners(boolean blockSelectionListeners) {
710
	private void setBlockSelectionListeners(boolean blockSelectionListeners) {
636
		fBlockSelectionListeners = blockSelectionListeners;
711
		fBlockSelectionListeners = blockSelectionListeners;
637
	}
712
	}
713
	
714
	public void storeSettings() {
715
		IDialogSettings settings = getDialogSettings();
716
		settings.put(SETTINGS_SHOW_LATEST, fFilterOldVersionButton.getSelection());
717
		super.storeSettings();
718
	}
719
	
638
}
720
}
(-)src/org/eclipse/pde/internal/ui/pderesources.properties (-1 / +1 lines)
Lines 1104-1110 Link Here
1104
ImplicitDependenicesSection_RemoveAll=Remove All
1104
ImplicitDependenicesSection_RemoveAll=Remove All
1105
ImportWizard_DetailedPage_count = {0} out of {1} selected
1105
ImportWizard_DetailedPage_count = {0} out of {1} selected
1106
ImportWizard_DetailedPage_filter = Filter Available Plug-ins and Fragments
1106
ImportWizard_DetailedPage_filter = Filter Available Plug-ins and Fragments
1107
ImportWizard_DetailedPage_filterDesc=Filter out duplicated plugin with older versions
1107
ImportWizard_DetailedPage_filterDesc=Show latest version of plug-ins only
1108
ImportWizard_DetailedPage_search = &ID (* = any string, ? = any character):
1108
ImportWizard_DetailedPage_search = &ID (* = any string, ? = any character):
1109
1109
1110
ImportWizard_operation_creating = Creating projects from plug-ins...
1110
ImportWizard_operation_creating = Creating projects from plug-ins...

Return to bug 114080