/*******************************************************************************
* Copyright (c) 2000, 2010 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.wst.jsdt.internal.compiler.util;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.wst.jsdt.core.compiler.CharOperation;
public class EclipseUtil {
private EclipseUtil() {
// TODO Auto-generated constructor stub
}
/**
* <p>Determine if the given path is a match for the given match path. If one path is
* file system absolute and another is relative or absolute to the workspace then the
* path that is not file system absolute will be converted to file system absolute.
* The matching pattern can contain *, **, or ? wild cards.</p>
*
* @param pathChars check to see if this path matches the <code>matchpathChars</code>
* @param matchPathChars check to see if the given <code>pathChars</code> match this pattern
* @return <code>true</code> if the given <code>pathChars</code> match the given given
* <code>matchPathChars<code>, <code>false</code> otherwise.
*/
public static boolean pathMatch(char[] pathChars, char[] matchPathChars) {
IPath path = new Path(new String(pathChars));
IPath matchPath = new Path(new String(matchPathChars));
//determine if either path is file system absolute
IPath fileSystemWorkspacePath = ResourcesPlugin.getWorkspace().getRoot().getLocation();
boolean isPathFileSystemAbsolute = fileSystemWorkspacePath.isPrefixOf(path);
boolean isMatchPathFileSystemAbsolute = fileSystemWorkspacePath.isPrefixOf(matchPath);
/* if the two paths are not both file system absolute or both workspace absolute
* then transform the none file system absolute path to file system absolute
*/
if((!isPathFileSystemAbsolute && isMatchPathFileSystemAbsolute) || (isPathFileSystemAbsolute && !isMatchPathFileSystemAbsolute)){
if(!isPathFileSystemAbsolute) {
boolean hadTrailingSeparator = path.hasTrailingSeparator();
path = ResourcesPlugin.getWorkspace().getRoot().getFile(path).getLocation();
if(hadTrailingSeparator) {
path = path.addTrailingSeparator();
}
}
if(!isMatchPathFileSystemAbsolute) {
boolean hadTrailingSeparator = matchPath.hasTrailingSeparator();
matchPath = ResourcesPlugin.getWorkspace().getRoot().getFile(matchPath).getLocation();
if(hadTrailingSeparator) {
matchPath = matchPath.addTrailingSeparator();
}
}
}
//be sure both are absolute now (fixes 'project1\file.js' to '\project1\file.js')
path = path.makeAbsolute();
matchPath = matchPath.makeAbsolute();
return CharOperation.pathMatch(matchPath.toPortableString().toCharArray(), path.toPortableString().toCharArray(), true, IPath.SEPARATOR);
}
}