001/*
002  GRANITE DATA SERVICES
003  Copyright (C) 2011 GRANITE DATA SERVICES S.A.S.
004
005  This file is part of Granite Data Services.
006
007  Granite Data Services is free software; you can redistribute it and/or modify
008  it under the terms of the GNU Library General Public License as published by
009  the Free Software Foundation; either version 2 of the License, or (at your
010  option) any later version.
011
012  Granite Data Services is distributed in the hope that it will be useful, but
013  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
014  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
015  for more details.
016
017  You should have received a copy of the GNU Library General Public License
018  along with this library; if not, see <http://www.gnu.org/licenses/>.
019*/
020
021package org.granite.builder.ui;
022
023import java.util.Collections;
024import java.util.List;
025
026import org.eclipse.core.resources.IFolder;
027import org.eclipse.core.resources.IProject;
028import org.eclipse.core.runtime.CoreException;
029import org.eclipse.core.runtime.IPath;
030import org.eclipse.jdt.core.IJavaProject;
031import org.eclipse.jface.viewers.Viewer;
032import org.eclipse.jface.viewers.ViewerFilter;
033import org.granite.builder.util.ProjectUtil;
034
035/**
036 * @author Franck WOLFF
037 */
038public class JavaFoldersViewerFilter extends ViewerFilter {
039
040        private final IJavaProject project;
041        private final List<IPath> sourceFolderPaths;
042        
043        public JavaFoldersViewerFilter(IJavaProject project) {
044                this.project = project;
045                this.sourceFolderPaths = getSourceFolders(project);
046        }
047        
048        private static List<IPath> getSourceFolders(IJavaProject project) {
049                try {
050                        return ProjectUtil.getSourceFolders(project);
051                } catch (CoreException e) {
052                        return Collections.emptyList();
053                }
054        }
055
056        @Override
057        public boolean select(Viewer viewer, Object parentElement, Object element) {
058                if (IProject.class.isInstance(element) && element.equals(project.getProject()))
059                        return true;
060                if (IFolder.class.isInstance(element)) {
061                        IPath path = ((IFolder)element).getFullPath();
062                        for (IPath sPath : sourceFolderPaths) {
063                                if (path.equals(sPath) || path.isPrefixOf(sPath))
064                                        return true;
065                        }
066                }
067                return false;
068        }
069}