/******************************************************************************* * Copyright (c) 2005, 2006 Eclipse Foundation * 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: * Bjorn Freeman-Benson - initial implementation * Ward Cunningham - initial implementation * Michael Forster - bug 132810 *******************************************************************************/ package org.eclipse.eclipsemonkey.doms.resources; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; /** * Resources */ public class Resources { /** * standardMarkerName */ public static final String standardMarkerName = Messages.Resources_Standard_marker_name; /** * Resources */ public Resources() { } /** * * @param patternString * @return Matching files */ public Object[] filesMatching(String patternString) { return filesMatching(null, patternString, true); } public Object[] filesMatchingIgnoreCase(String patternString) { return filesMatching(null, patternString, false); } public Object[] filesMatchingForProject(String project, String patternString) { return filesMatching(project, patternString, true); } public Object[] filesMatchingForProjectIgnoreCase(String project, String patternString) { return filesMatching(project, patternString, false); } private Object[] filesMatching(String projectName, String patternString, boolean isCaseSensitive) { Pattern pattern = null; if(isCaseSensitive) { pattern = Pattern.compile(patternString); } else { pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE); } Collection result = new ArrayList(); try { IWorkspace workspace = ResourcesPlugin.getWorkspace(); if(projectName == null) { IProject[] projects = workspace.getRoot().getProjects(); for (int i = 0; i < projects.length; i++) { IProject project = projects[i]; walk(project, pattern, result); } } else { IProject project = workspace.getRoot().getProject(projectName); walk(project, pattern, result); } } catch (CoreException x) { // ignore Eclipse internal errors } Object[] array = new Object[result.size()]; int i = 0; for (Iterator iter = result.iterator(); iter.hasNext();) { Object element = iter.next(); array[i++] = element; } return array; } private void walk(IResource resource, Pattern pattern, Collection result) throws CoreException { if (resource instanceof IFolder) { IResource[] children = ((IFolder) resource).members(); for (int i = 0; i < children.length; i++) { IResource resource2 = children[i]; walk(resource2, pattern, result); } } else if (resource instanceof IProject) { IProject project = (IProject) resource; if(!project.isOpen()) return; IResource[] children = project.members(); for (int i = 0; i < children.length; i++) { IResource resource2 = children[i]; walk(resource2, pattern, result); } } else if (resource instanceof IFile) { String path = resource.getFullPath().toString(); Matcher match = pattern.matcher(path); if (match.matches()) { result.add(new File(resource)); } } } }