| /******************************************************************************* |
| * Copyright (c) 2001, 2004 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 |
| * Jens Lukowski/Innoopract - initial renaming/restructuring |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.sse.core.internal.util; |
| |
| |
| |
| import java.io.File; |
| import com.ibm.icu.util.StringTokenizer; |
| |
| /** |
| * Collection of helper methods to manage and convert links Originally part of |
| * the LinksManager |
| */ |
| public class PathHelper { |
| public static final String BACKWARD_SLASH = "\\";//$NON-NLS-1$ |
| |
| public static final String FORWARD_SLASH = "/";//$NON-NLS-1$ |
| public static final String RELATIVE_PATH_SIG = "../";//$NON-NLS-1$ |
| |
| /** |
| * adjust relative path isside the absolute path |
| */ |
| public static String adjustPath(String path) { |
| int i = 0; |
| while ((i = path.indexOf(RELATIVE_PATH_SIG)) > 0) { |
| // split the string into two |
| String part1 = path.substring(0, i - 1); |
| String part2 = path.substring(i + RELATIVE_PATH_SIG.length() - 1); |
| // strip one path seg from part1 |
| int j = part1.lastIndexOf(FORWARD_SLASH); |
| if (j == -1) { |
| // can't resolve. passed path is like |
| // E:/eclipseproject/../../sample.css. |
| return "";//$NON-NLS-1$ |
| } |
| part1 = part1.substring(0, j); |
| path = part1 + part2; |
| } |
| return path; |
| } |
| |
| /** |
| * Append trailing url slash if needed |
| */ |
| public static String appendTrailingURLSlash(String input) { |
| // check to see already a slash |
| if (!input.endsWith(FORWARD_SLASH)) { |
| input += FORWARD_SLASH; |
| } |
| return input; |
| } |
| |
| /** |
| * Convert to relative url based on base |
| */ |
| public static String convertToRelative(String input, String base) { |
| // tokenize the strings |
| StringTokenizer inputTokenizer = new StringTokenizer(input, FORWARD_SLASH); |
| StringTokenizer baseTokenizer = new StringTokenizer(base, FORWARD_SLASH); |
| String token1 = "", token2 = "";//$NON-NLS-2$//$NON-NLS-1$ |
| // |
| // Go through until equls |
| while (true) { |
| if (!inputTokenizer.hasMoreTokens() || !baseTokenizer.hasMoreTokens()) |
| break; |
| token1 = baseTokenizer.nextToken(); |
| token2 = inputTokenizer.nextToken(); |
| if (!token1.equals(token2)) |
| break; |
| } |
| // now generate the backs |
| String output = "";//$NON-NLS-1$ |
| while (baseTokenizer.hasMoreTokens()) { |
| baseTokenizer.nextToken(); |
| output += "../"; //$NON-NLS-1$ |
| } |
| output += token2; |
| // generate the rest |
| while (inputTokenizer.hasMoreTokens()) { |
| output = output + FORWARD_SLASH + inputTokenizer.nextToken(); |
| } |
| return output; |
| } |
| |
| /** |
| * Return the containing folder path. Will handle both url and file path |
| */ |
| public static String getContainingFolderPath(String path) { |
| String retValue = path; |
| |
| int urlSlashIndex = path.lastIndexOf(FORWARD_SLASH); |
| int filePathSlashIndex = path.lastIndexOf(File.separator); |
| int index = filePathSlashIndex; |
| if (urlSlashIndex > filePathSlashIndex) |
| index = urlSlashIndex; |
| if (index >= 0) |
| retValue = path.substring(0, index); |
| return retValue; |
| } |
| |
| /** |
| * Remove leading path separator |
| */ |
| public static String removeLeadingPathSeparator(String path) { |
| if (path.startsWith(File.separator)) |
| path = path.substring(File.separator.length()); |
| return path; |
| } |
| |
| /** |
| * Remove leading path separator |
| */ |
| public static String removeLeadingSeparator(String path) { |
| if (path.startsWith(File.separator)) |
| path = path.substring(File.separator.length()); |
| else if (path.startsWith(FORWARD_SLASH) || path.startsWith(BACKWARD_SLASH)) |
| path = path.substring(FORWARD_SLASH.length()); |
| return path; |
| } |
| |
| /** |
| * Switch to file path slashes |
| */ |
| public static String switchToFilePathSlashes(String path) { |
| path = path.replace(FORWARD_SLASH.charAt(0), File.separatorChar); |
| path = path.replace(BACKWARD_SLASH.charAt(0), File.separatorChar); |
| return path; |
| } |
| |
| /** |
| * Switch to file path slashes |
| */ |
| public static String switchToForwardSlashes(String path) { |
| path = path.replace(File.separatorChar, FORWARD_SLASH.charAt(0)); |
| path = path.replace(BACKWARD_SLASH.charAt(0), FORWARD_SLASH.charAt(0)); |
| return path; |
| } |
| } |