123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package com.vaadin.sass.util;
-
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
- import java.util.LinkedList;
- import java.util.List;
-
- public class StringUtil {
- private static final String FOLDER_SEPARATOR = "/"; // folder separator
-
- private static final String WINDOWS_FOLDER_SEPARATOR = "\\"; // Windows
- // folder
- // separator
-
- private static final String TOP_PATH = ".."; // top folder
-
- private static final String CURRENT_PATH = "."; // current folder
-
- public static String cleanPath(String path) {
- String pathToUse = replace(path, WINDOWS_FOLDER_SEPARATOR,
- FOLDER_SEPARATOR);
- String[] pathArray = delimitedListToStringArray(pathToUse,
- FOLDER_SEPARATOR);
- List pathElements = new LinkedList();
- int tops = 0;
- for (int i = pathArray.length - 1; i >= 0; i--) {
- if (CURRENT_PATH.equals(pathArray[i])) {
- // do nothing
- } else if (TOP_PATH.equals(pathArray[i])) {
- tops++;
- } else {
- if (tops > 0) {
- tops--;
- } else {
- pathElements.add(0, pathArray[i]);
- }
- }
- }
- for (int i = 0; i < tops; i++) {
- pathElements.add(0, TOP_PATH);
- }
- return collectionToDelimitedString(pathElements, FOLDER_SEPARATOR);
- }
-
- public static String replace(String inString, String oldPattern,
- String newPattern) {
- if (inString == null) {
- return null;
- }
- if (oldPattern == null || newPattern == null) {
- return inString;
- }
-
- StringBuffer sbuf = new StringBuffer();
- // output StringBuffer we'll build up
- int pos = 0; // our position in the old string
- int index = inString.indexOf(oldPattern);
- // the index of an occurrence we've found, or -1
- int patLen = oldPattern.length();
- while (index >= 0) {
- sbuf.append(inString.substring(pos, index));
- sbuf.append(newPattern);
- pos = index + patLen;
- index = inString.indexOf(oldPattern, pos);
- }
- sbuf.append(inString.substring(pos));
-
- // remember to append any characters to the right of a match
- return sbuf.toString();
- }
-
- public static String[] delimitedListToStringArray(String str,
- String delimiter) {
- if (str == null) {
- return new String[0];
- }
- if (delimiter == null) {
- return new String[] { str };
- }
-
- List result = new ArrayList();
- int pos = 0;
- int delPos = 0;
- while ((delPos = str.indexOf(delimiter, pos)) != -1) {
- result.add(str.substring(pos, delPos));
- pos = delPos + delimiter.length();
- }
- if (str.length() > 0 && pos <= str.length()) {
- // Add rest of String, but not in case of empty input.
- result.add(str.substring(pos));
- }
-
- return (String[]) result.toArray(new String[result.size()]);
- }
-
- public static String collectionToDelimitedString(Collection coll,
- String delim, String prefix, String suffix) {
- if (coll == null) {
- return "";
- }
-
- StringBuffer sb = new StringBuffer();
- Iterator it = coll.iterator();
- int i = 0;
- while (it.hasNext()) {
- if (i > 0) {
- sb.append(delim);
- }
- sb.append(prefix).append(it.next()).append(suffix);
- i++;
- }
- return sb.toString();
- }
-
- public static String collectionToDelimitedString(Collection coll,
- String delim) {
- return collectionToDelimitedString(coll, delim, "", "");
- }
- }
|