[570149] SelectSingleFileView tree should be filterable
diff --git a/plugins/org.eclipse.wst.common.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.ui/META-INF/MANIFEST.MF
index 287cc2c..c9942e2 100644
--- a/plugins/org.eclipse.wst.common.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.wst.common.ui; singleton:=true
-Bundle-Version: 1.2.0.qualifier
+Bundle-Version: 1.2.100.qualifier
Bundle-Activator: org.eclipse.wst.common.ui.internal.UIPlugin
Bundle-Vendor: %pluginProvider
Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.common.ui/pom.xml b/plugins/org.eclipse.wst.common.ui/pom.xml
index 30d37f4..3875c09 100644
--- a/plugins/org.eclipse.wst.common.ui/pom.xml
+++ b/plugins/org.eclipse.wst.common.ui/pom.xml
@@ -21,6 +21,6 @@
<groupId>org.eclipse.webtools.common</groupId>
<artifactId>org.eclipse.wst.common.ui</artifactId>
- <version>1.2.0-SNAPSHOT</version>
+ <version>1.2.100-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectMultiFilePage.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectMultiFilePage.java
index 3d0cfad..c3f49cb 100644
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectMultiFilePage.java
+++ b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectMultiFilePage.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2021 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -11,18 +11,42 @@
*******************************************************************************/
package org.eclipse.wst.common.ui.internal.viewers;
-import java.util.*;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.jface.wizard.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
-import org.eclipse.core.resources.*;
-import org.eclipse.ui.*;
-import org.eclipse.ui.model.*;
-import org.eclipse.ui.wizards.datatransfer.*;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.dialogs.FilteredTree;
+import org.eclipse.ui.dialogs.PatternFilter;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.ui.wizards.datatransfer.FileSystemImportWizard;
import org.eclipse.wst.common.ui.internal.Messages;
@@ -37,7 +61,7 @@
Button removeAllButton;
org.eclipse.swt.widgets.List selectedListBox;
Button importButton;
- private Vector fFilters;
+ private java.util.List<ViewerFilter> fFilters;
protected IFile[] fileNames;
IWorkspaceRoot workspaceRoot;
@@ -59,7 +83,6 @@
}
public void createControl(Composite parent) {
-
Composite pageContent = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
@@ -118,39 +141,52 @@
return true;
}
- public void setVisible(boolean visible) {
- if (visible == true) {
- if (fFilters != null) {
- sourceFileViewer.resetFilters();
- for (Iterator i = fFilters.iterator(); i.hasNext();)
- sourceFileViewer.addFilter((ViewerFilter) i.next());
- }
- sourceFileViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
- }
- super.setVisible(visible);
- }
+ public void setVisible(boolean visible) {
+ if (visible == true) {
+ if (fFilters != null) {
+ ViewerFilter[] currentFilters = sourceFileViewer.getFilters();
+ for (Iterator i = fFilters.iterator(); i.hasNext();) {
+ ViewerFilter filter = (ViewerFilter) i.next();
+ boolean alreadySet = false;
+ for (int j = 0; j < currentFilters.length; j++) {
+ alreadySet |= currentFilters[j] == filter;
+ }
+ if (!alreadySet) {
+ sourceFileViewer.addFilter(filter);
+ }
+ }
+ }
+ sourceFileViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
+ }
+ super.setVisible(visible);
+ }
public void setFiles(String[] fileNames) {
int size = Arrays.asList(fileNames).size();
- Vector iFileNames = new Vector();
+ java.util.List<IFile> iFileNames = new ArrayList<>();
for (int i = 0; i < size; i++) {
IResource resource = workspaceRoot.findMember(fileNames[i]);
if (resource instanceof IFile)
- iFileNames.addElement(resource);
+ iFileNames.add((IFile) resource);
}
IFile[] dummyArray = new IFile[iFileNames.size()];
this.fileNames = (IFile[]) (iFileNames.toArray(dummyArray));
}
- public void resetFilters() {
- fFilters = null;
- }
+ public void resetFilters() {
+ if (fFilters != null && sourceFileViewer != null) {
+ for (Iterator<ViewerFilter> i = fFilters.iterator(); i.hasNext();)
+ sourceFileViewer.removeFilter(i.next());
+ }
+ fFilters = null;
+ }
- public void addFilter(ViewerFilter filter) {
- if (fFilters == null)
- fFilters = new Vector();
- fFilters.add(filter);
- }
+ public void addFilter(ViewerFilter filter) {
+ if (fFilters == null) {
+ fFilters = new ArrayList<>();
+ }
+ fFilters.add(filter);
+ }
public void setAddButtonEnabled(boolean isEnabled) {
addButton.setEnabled(isEnabled);
@@ -185,22 +221,17 @@
}
private void createSourceViewer(Composite parent) {
- sourceFileViewer =
- new TreeViewer(
- new Tree(
- parent,
- SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER));
+ sourceFileViewer = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, new PatternFilter(), true, true).getViewer();
sourceFileViewer.setContentProvider(new WorkbenchContentProvider());
sourceFileViewer.setLabelProvider(new WorkbenchLabelProvider());
sourceFileViewer
.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
- java.util.List list;
ISelection selection = event.getSelection();
boolean newFilesSelected = false;
if (selection instanceof IStructuredSelection) {
- list = ((IStructuredSelection) selection).toList();
+ java.util.List list = ((IStructuredSelection) selection).toList();
for (Iterator i = list.iterator(); i.hasNext();) {
IResource resource = (IResource) i.next();
if (resource instanceof IFile) {
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFileView.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFileView.java
index 04b1fb1..d98954c 100644
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFileView.java
+++ b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFileView.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2021 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -11,9 +11,9 @@
*******************************************************************************/
package org.eclipse.wst.common.ui.internal.viewers;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
-import java.util.Vector;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
@@ -32,6 +32,9 @@
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
@@ -45,8 +48,10 @@
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
-import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.FilteredTree;
+import org.eclipse.ui.dialogs.PatternFilter;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.ui.wizards.datatransfer.FileSystemImportWizard;
@@ -62,10 +67,11 @@
protected boolean isFileMandatory;
protected TreeViewer sourceFileViewer;
protected Button importButton;
- protected Vector fFilters;
+ protected java.util.List<ViewerFilter> fFilters;
protected IFile selectedFile;
protected ISelection defaultSelection;
protected Listener listener;
+ private ResourceFilter fExtensionFilter;
public static interface Listener
{
@@ -98,38 +104,38 @@
//Collapse and Expand all buttons
ToolBar toolBar = new ToolBar(smallComposite, SWT.FLAT);
- toolBar.setLayoutData(new GridData(GridData.END, GridData.END, true, false));
+ toolBar.setLayoutData(new GridData(SWT.END, SWT.END, true, false));
ToolItem toolItem = new ToolItem(toolBar, SWT.NONE);
ImageDescriptor imageDescriptor = UIPlugin.getDefault().getImageDescriptor("icons/expandAll.gif");
- Image image = imageDescriptor.createImage();
- toolItem.setImage(image);
+ final Image expandAllImage = imageDescriptor.createImage();
+ toolItem.setImage(expandAllImage);
toolItem.setToolTipText(Messages._UI_POPUP_EXPAND_ALL);
- toolItem.addSelectionListener(new SelectionListener(){
-
- public void widgetDefaultSelected(SelectionEvent e) {
- }
-
- public void widgetSelected(SelectionEvent e) {
- sourceFileViewer.expandAll();
-
- }});
+ toolItem.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ sourceFileViewer.expandAll();
+ }
+ });
toolItem = new ToolItem(toolBar, SWT.NONE);
imageDescriptor = UIPlugin.getDefault().getImageDescriptor("icons/collapseAll.gif");
- image = imageDescriptor.createImage();
- toolItem.setImage(image);
+ final Image collapseAllImage = imageDescriptor.createImage();
+ toolItem.setImage(collapseAllImage);
toolItem.setToolTipText(Messages._UI_POPUP_COLLAPSE_ALL);
- toolItem.addSelectionListener(new SelectionListener(){
+ toolItem.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ sourceFileViewer.collapseAll();
+ }
+ });
- public void widgetDefaultSelected(SelectionEvent e) {
- }
-
- public void widgetSelected(SelectionEvent e) {
- sourceFileViewer.collapseAll();
-
- }});
+ toolBar.addDisposeListener(new DisposeListener() {
+ @Override
+ public void widgetDisposed(DisposeEvent e) {
+ collapseAllImage.dispose();
+ expandAllImage.dispose();
+ }
+ });
createSourceViewer(composite);
createFilterControl(composite);
@@ -150,7 +156,7 @@
protected void createSourceViewer(Composite parent)
{
- sourceFileViewer = new TreeViewer(new Tree(parent, SWT.SINGLE | SWT.BORDER));
+ sourceFileViewer = new FilteredTree(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, new PatternFilter(), true, true).getViewer();
sourceFileViewer.setContentProvider(new WorkbenchContentProvider());
sourceFileViewer.setLabelProvider(new WorkbenchLabelProvider());
sourceFileViewer.addSelectionChangedListener(new ISelectionChangedListener()
@@ -221,7 +227,7 @@
ResourcesPlugin.getWorkspace().addResourceChangeListener(importAddResourceListener);
FileSystemImportWizard importWizard = new FileSystemImportWizard();
- IWorkbench workbench = UIPlugin.getDefault().getWorkbench();
+ IWorkbench workbench = PlatformUI.getWorkbench();
selection = (IStructuredSelection) sourceFileViewer.getSelection();
importWizard.init(workbench, selection != null ? selection : new StructuredSelection());
Shell shell = Display.getCurrent().getActiveShell();
@@ -249,24 +255,27 @@
public void setDefaultSelection(ISelection selection)
{
this.defaultSelection = selection;
- }
-
- public void resetFilters()
- {
- fFilters=null;
}
+ public void resetFilters() {
+ if (fFilters != null && sourceFileViewer != null) {
+ for (Iterator i = fFilters.iterator(); i.hasNext();)
+ sourceFileViewer.removeFilter((ViewerFilter) i.next());
+ }
+ fFilters = null;
+ }
+
public void addFilter(ViewerFilter filter)
{
if (fFilters == null)
{
- fFilters= new Vector();
+ fFilters= new ArrayList<>();
}
fFilters.add(filter);
}
// This is a convenience method that allows filtering of the given file
- // exensions. It internally creates a ResourceFilter so that users of this
+ // extensions. It internally creates a ResourceFilter so that users of this
// class don't have to construct one.
// If the extensions provided don't have '.', one will be added.
public void addFilterExtensions(String[] filterExtensions)
@@ -342,17 +351,14 @@
correctedFilterExtensions[i] = "." + filterExtensions[i];
}
}
- ViewerFilter filter = new ResourceFilter(correctedFilterExtensions, null);
- fFilters= new Vector();
- fFilters.add(filter);
+
if (sourceFileViewer != null)
{
sourceFileViewer.getTree().setRedraw(false);
- sourceFileViewer.resetFilters();
- for (Iterator i=fFilters.iterator(); i.hasNext();)
- {
- sourceFileViewer.addFilter((ViewerFilter)i.next());
- }
+ if (fExtensionFilter != null)
+ sourceFileViewer.removeFilter(fExtensionFilter);
+ fExtensionFilter = new ResourceFilter(correctedFilterExtensions, null);
+ sourceFileViewer.addFilter(fExtensionFilter);
sourceFileViewer.getTree().setRedraw(true);
sourceFileViewer.getTree().redraw();
}
@@ -365,9 +371,10 @@
{
if (fFilters != null)
{
- sourceFileViewer.resetFilters();
for (Iterator i=fFilters.iterator(); i.hasNext();)
- sourceFileViewer.addFilter((ViewerFilter)i.next());
+ sourceFileViewer.removeFilter((ViewerFilter)i.next());
+ for (Iterator i=fFilters.iterator(); i.hasNext();)
+ sourceFileViewer.addFilter((ViewerFilter)i.next());
}
sourceFileViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
sourceFileViewer.expandToLevel(1);
@@ -392,11 +399,11 @@
class ImportAddResourceListener implements IResourceChangeListener, IResourceDeltaVisitor
{
- Vector importedFiles;
+ java.util.List<IFile> importedFiles;
ImportAddResourceListener()
{
- importedFiles = new Vector();
+ importedFiles = new ArrayList<>();
}
public void resourceChanged(IResourceChangeEvent event)
@@ -412,9 +419,7 @@
}
catch (Exception e)
{
- //TODO... log exception
- //UIPlugin.getMsgLogger().write("Exception caught during resource change" + e);
- //UIPlugin.getMsgLogger().writeCurrentThread();
+ UIPlugin.log(e);
}
}
@@ -423,7 +428,7 @@
if (delta.getKind() == IResourceDelta.ADDED)
{
if (delta.getResource() instanceof IFile)
- importedFiles.add(delta.getResource());
+ importedFiles.add((IFile) delta.getResource());
}
return true;
}
@@ -434,12 +439,11 @@
}
// This returns the first imported file in the list of imported files
- public IFile getImportedFile()
- {
- if (importedFiles.isEmpty() == false)
- return (IFile)importedFiles.firstElement();
-
- return null;
+ public IFile getImportedFile() {
+ if (importedFiles.isEmpty() == false) {
+ return importedFiles.get(0);
+ }
+ return null;
}
}