/*
* Created on 09.08.2003
*
*/
package net.sourceforge.phpdt.internal.ui.util;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import net.sourceforge.phpeclipse.PHPeclipsePlugin;
import net.sourceforge.phpeclipse.ui.overlaypages.ProjectPrefUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.preference.IPreferenceStore;
public class PHPFileUtil {
private static String[] PHP_EXTENSIONS = null;
public final static String[] SMARTY_EXTENSIONS = { "tpl" };
public static boolean isPHPFile(IFile file) {
String extension = file.getFileExtension();
return isPHPFileName(file.getLocation().toString());
}
public final static String getFileExtension(String name) {
int index = name.lastIndexOf('.');
if (index == -1)
return null;
if (index == (name.length() - 1))
return null; //$NON-NLS-1$
return name.substring(index + 1);
}
/**
* Returns true iff str.toLowerCase().endsWith(".php") implementation is not creating extra strings.
*/
public final static boolean isPHPFileName(String name) {
String extension = getFileExtension(name);
if (extension == null) {
return false;
}
extension = extension.toLowerCase();
PHP_EXTENSIONS = getExtensions();
if (PHP_EXTENSIONS == null) {
return false;
}
for (int i = 0; i < PHP_EXTENSIONS.length; i++) {
if (extension.equals(PHP_EXTENSIONS[i])) {
return true;
}
}
return false;
}
/**
* Returns true iff the file extension is a valid PHP Unit name implementation is not creating extra strings.
*/
public final static boolean isValidPHPUnitName(String filename) {
return PHPFileUtil.isPHPFileName(filename);
}
/**
* @return Returns the PHP extensions.
*/
public static String[] getExtensions() {
if (PHP_EXTENSIONS == null) {
ArrayList list = new ArrayList();
final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
String extensions = store.getString(PHPeclipsePlugin.PHP_EXTENSION_PREFS);
extensions = extensions.trim();
if (extensions.length() != 0) {
StringTokenizer tokenizer = new StringTokenizer(extensions, " ,;:/-|");
String token;
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
if (token != null && token.length() >= 1) {
list.add(token);
}
}
if (list.size() != 0) {
PHP_EXTENSIONS = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
PHP_EXTENSIONS[i] = (String) list.get(i);
}
}
}
}
return PHP_EXTENSIONS;
}
/**
* @param php_extensions
* The PHP extensions to set.
*/
public static void setExtensins(String[] php_extensions) {
PHP_EXTENSIONS = php_extensions;
}
/**
* Creata the file for the given absolute file path
*
* @param absoluteFilePath
* @param project
* @return the file for the given absolute file path or null
if no existing file can be found
*/
public static IFile createFile(IPath absoluteFilePath, IProject project) {
if (absoluteFilePath == null || project == null) {
return null;
}
String projectPath = project.getLocation().toString();
String filePath = absoluteFilePath.toString().substring(projectPath.length() + 1);
return project.getFile(filePath);
}
/**
* Determine the path of an include name string
*
* @param includeNameString
* @param resource
* @param project
* @return the path for the given include filename or null
if no existing file can be found
*/
public static IPath determineFilePath(String includeNameString, IResource resource, IProject project) {
IPath documentRootPath = ProjectPrefUtil.getDocumentRoot(project);
IPath resourcePath = resource.getProjectRelativePath();
File file = null;
IPath path = null;
path = documentRootPath.append(includeNameString);
file = path.toFile();
if (file.exists()) {
return path;
}
if (includeNameString.startsWith("../")) {
path = project.getLocation().append(resourcePath.removeLastSegments(1));
path = path.append(includeNameString);
file = path.toFile();
if (file.exists()) {
return path;
}
}
// int index = includeNameString.indexOf('/');
// if (index < 0) {
// includeNameString contains no path separator
path = project.getLocation().append(resourcePath.removeLastSegments(1));
path = path.append(includeNameString);
file = path.toFile();
if (file.exists()) {
return path;
}
// }
List includePaths = ProjectPrefUtil.getIncludePaths(project);
if (includePaths.size() > 0) {
for (int i = 0; i < includePaths.size(); i++) {
path = new Path(includePaths.get(i).toString()).append(includeNameString);
file = path.toFile();
if (file.exists()) {
return path;
}
}
}
return null;
}
}