KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > ant > internal > ui > preferences > FileFilter


1 /*******************************************************************************
2  * Copyright (c) 2003, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11
12 package org.eclipse.ant.internal.ui.preferences;
13
14 import java.util.HashSet JavaDoc;
15 import java.util.List JavaDoc;
16 import java.util.Set JavaDoc;
17
18 import org.eclipse.ant.internal.ui.AntUIPlugin;
19 import org.eclipse.core.resources.IContainer;
20 import org.eclipse.core.resources.IFile;
21 import org.eclipse.core.resources.IResource;
22 import org.eclipse.core.resources.ResourcesPlugin;
23 import org.eclipse.core.runtime.CoreException;
24 import org.eclipse.jface.viewers.Viewer;
25 import org.eclipse.jface.viewers.ViewerFilter;
26 import org.eclipse.swt.custom.BusyIndicator;
27
28 public class FileFilter extends ViewerFilter {
29
30     /**
31      * Objects to filter
32      */

33     private List JavaDoc fFilter;
34     
35     /**
36      * Collection of files and containers to display
37      */

38     private Set JavaDoc fFiles;
39     
40     private String JavaDoc fExtension;
41
42     private boolean fConsiderExtension= true;
43
44     /**
45      * Creates a new filter that filters the given
46      * objects.
47      * Note: considerExtension must be called to initialize the filter
48      */

49     public FileFilter(List JavaDoc objects, String JavaDoc extension) {
50         fFilter = objects;
51         fExtension= extension;
52     }
53
54     /* (non-Javadoc)
55      * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
56      */

57     public boolean select(Viewer viewer, Object JavaDoc parentElement, Object JavaDoc element) {
58         return fFiles.contains(element) && !fFilter.contains(element);
59     }
60     
61     /**
62      * Search for all the matching files in the workspace.
63      */

64     private void init() {
65         BusyIndicator.showWhile(AntUIPlugin.getStandardDisplay(), new Runnable JavaDoc() {
66             public void run() {
67                 fFiles = new HashSet JavaDoc();
68                 traverse(ResourcesPlugin.getWorkspace().getRoot(), fFiles);
69             }
70         });
71     }
72
73     /**
74      * Traverse the given container, adding files to the given set.
75      * Returns whether any files were added
76      */

77     private boolean traverse(IContainer container, Set JavaDoc set) {
78         boolean added = false;
79         try {
80             IResource[] resources = container.members();
81             for (int i = 0; i < resources.length; i++) {
82                 IResource resource = resources[i];
83                 if (resource instanceof IFile) {
84                     IFile file = (IFile) resource;
85                     String JavaDoc ext = file.getFileExtension();
86                     if (!fConsiderExtension || (ext != null && ext.equalsIgnoreCase(fExtension))) {
87                         set.add(file);
88                         added = true;
89                     }
90                 } else if (resource instanceof IContainer) {
91                     if (traverse((IContainer) resource, set)) {
92                         set.add(resource);
93                         added = true;
94                     }
95                 }
96             }
97         } catch (CoreException e) {
98         }
99         return added;
100     }
101     
102     /**
103      * Sets whether this filter will filter based on extension.
104      * @param considerExtension whether to consider a file's extension when filtering
105      */

106     public void considerExtension(boolean considerExtension) {
107         fConsiderExtension= considerExtension;
108         init();
109     }
110 }
Popular Tags