diff options
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/ArchiveFileViewerFilter.java')
-rw-r--r-- | jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/ArchiveFileViewerFilter.java | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/ArchiveFileViewerFilter.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/ArchiveFileViewerFilter.java new file mode 100644 index 0000000000..3f66b67618 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/ArchiveFileViewerFilter.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2009 Oracle. + * 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: + * Oracle - initial API and implementation + *******************************************************************************/ +package org.eclipse.jpt.ui.internal.jface; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerFilter; +import org.eclipse.jpt.ui.JptUiPlugin; + +/** + * This filter will deny showing any file that are not JAR files or folders + * that don't contain any JAR files in its sub-hierarchy. + */ +public class ArchiveFileViewerFilter + extends ViewerFilter +{ + private static final String[] archiveExtensions= { "jar", "zip" }; //$NON-NLS-1$ + + + public ArchiveFileViewerFilter() { + super(); + } + + + @Override + public boolean select( + Viewer viewer, Object parentElement, Object element) { + if (element instanceof IFile) { + return isArchivePath(((IFile)element).getFullPath()); + } + else if (element instanceof IFolder) { + IFolder folder = (IFolder) element; + try { + for (IResource each : folder.members()) { + if (select(viewer, folder, each)) { + return true; + } + } + } + catch (CoreException ce) { + // just skip this one, then + JptUiPlugin.log(ce); + } + } + return false; + } + + public static boolean isArchivePath(IPath path) { + String ext= path.getFileExtension(); + if (ext != null && ext.length() != 0) { + for (int i= 0; i < archiveExtensions.length; i++) { + if (ext.equalsIgnoreCase(archiveExtensions[i])) { + return true; + } + } + } + return false; + } +} |