/******************************************************************************* * Copyright (c) 2003, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jst.j2ee.internal.dialogs; import java.util.Hashtable; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.viewers.Viewer; public class TypedFileViewerFilter extends org.eclipse.jface.viewers.ViewerFilter { private String[] fAcceptedExtensions; private Hashtable visitedElements; public TypedFileViewerFilter(String[] acceptedExtensions) { fAcceptedExtensions = acceptedExtensions; visitedElements = new Hashtable(); } public boolean isFilterProperty(Object element, Object property) { return false; } public boolean isValid(Object element) { if (IFile.class.isInstance(element)) return isValidFile((IFile) element); if (IContainer.class.isInstance(element)) return isValidContainer((IContainer) element); return false; } /* * A valid container is one that contains at least one valid member. */ public boolean isValidContainer(IContainer container) { IResource[] members; Object valid = visitedElements.get(container); if (valid != null) return ((Boolean) valid).booleanValue(); try { members = container.members(); for (int i = 0; i < members.length; i++) { if (isValid(members[i])) { visitedElements.put(container, Boolean.TRUE); return true; } } } catch (CoreException e) { // Do nothing } visitedElements.put(container, Boolean.FALSE); return false; } public boolean isValidFile(IFile file) { String ext = file.getFileExtension(); for (int i = 0; i < fAcceptedExtensions.length; i++) { if (fAcceptedExtensions[i].equalsIgnoreCase(ext)) { return true; } } return false; } @Override public boolean select(Viewer viewer, Object parentElement, Object element) { return isValid(element); } }