/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.ngrinder.common.util;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
/**
* Utility class for path manipulation.
*
* @author JunHo Yoon
* @since 3.0
*/
public abstract class PathUtils {
public static final int MAX_PATH_LENGTH = 40;
/**
* Remove prepended / from the given path.
*
* @param path path containing /
* @return / removed path
*/
public static String removePrependedSlash(String path) {
if (path.startsWith("/")) {
return path.substring(1);
}
return path;
}
/**
* Join two path without appending '/'.
*
* @param path1 path1
* @param path2 path2
* @return joined path
*/
public static String join(String path1, String path2) {
path1 = trimPathSeparatorBothSides(path1);
path2 = trimPathSeparatorBothSides(path2);
return FilenameUtils.normalizeNoEndSeparator(path1 + "/" + path2, true);
}
/**
* Trim both leading and tailing of the path separator '/' from the given path.
*
* @param path the given path
* @return a path which is removed the path separator both sides
*/
public static String trimPathSeparatorBothSides(String path) {
int len = path.length();
int st = 0;
int off = 0;
char[] val = path.toCharArray();
while ((st < len) && (val[off + st] == '/')) {
st++;
}
while ((st < len) && (val[off + len - 1] == '/')) {
len--;
}
return ((st > 0) || (len < path.length())) ? path.substring(st, len) : path;
}
/**
* Remove prepended / on the given path.
*
* @param path path containing /
* @return / removed path
*/
public static String removeDuplicatedPrependedSlash(String path) {
if (path.startsWith("//")) {
return path.substring(1);
}
return path;
}
/**
* Get the shorten displayable path from the given path.
*
* @param path path
* @return shortPath
*/
public static String getShortPath(String path) {
if (path.length() >= MAX_PATH_LENGTH && StringUtils.contains(path, "/")) {
String start = path.substring(0, path.indexOf("/") + 1);
String end = path.substring(path.lastIndexOf("/"), path.length());
return start + "..." + end;
} else {
return path;
}
}
}