/******************************************************************************* * Copyright (C) 2003-2007, 2013, Guillaume Brocker * * 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: * Guillaume Brocker - Initial API and implementation * ******************************************************************************/ package eclox.core.doxyfiles; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; /** * Implements a resource collector that will search for available doxyfiles * either from the workbenck resources' root or from a given resource. * * @author gbrocker */ public class ResourceCollector implements IResourceVisitor { /** * a collection of all collected resources */ private Collection<IResource> m_doxyfiles = new ArrayList<IResource>(); /** * Runs a collector from the workspace resources' root. * * @return a resource collector containing collected doxfiles */ public static ResourceCollector run() throws CoreException { return run( ResourcesPlugin.getWorkspace().getRoot() ); } /** * Runs a collector from the given root resource. * * @param resource a resource to search for doxyfiles * * @return a resource collector containing collected doxfiles */ public static ResourceCollector run(IResource root) throws CoreException { ResourceCollector collector = new ResourceCollector(); root.accept( collector ); return collector; } /** * @see org.eclipse.core.resources.IResourceVisitor#visit(org.eclipse.core.resources.IResource) */ public boolean visit(IResource resource) throws CoreException { // Determine if the current resource is doxyfile, and if so, stores the resource if( resource.isAccessible() && Doxyfile.isDoxyfile(resource) == true ) { m_doxyfiles.add( resource ); } return true; } /** * Tells if the collector is empty. * * @return true or false */ public boolean isEmpty() { return m_doxyfiles.isEmpty(); } /** * Retrieves the first doxyfile. * * @return the first doxyfile, or null when none */ public IFile getFirst() { return m_doxyfiles.isEmpty() ? null : (IFile) m_doxyfiles.iterator().next(); } /** * Retrieves the collection with all collected dixyfile resources. * * @return a collection with all collected doxyfile resources */ public Collection<IResource> getDoxyfiles() { return m_doxyfiles; } /** * Retrieves the number of collected doxyfiles. * * @return the number of collected doxyfiles */ public int getSize() { return m_doxyfiles.size(); } /** * Retrieves the iterator on the collection of collected doxyfile resources. * * @return an iterator instance */ public Iterator<IResource> iterator() { return m_doxyfiles.iterator(); } }