// Path: 1-hi-utils/src/main/java/com/helpinput/core/LoggerBase.java
// public static final Logger logger =LoggerFactory.getLogger(LoggerBase.class);


import java.util.List;
import org.apache.commons.lang.StringUtils;
import static com.helpinput.core.LoggerBase.logger;
import java.util.ArrayList ;
/*
 * Copyright 2013-2015 the original author or authors.
 *
 * 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.
 */
 
/**
 *@Author: niaoge(Zhengsheng Xia)
 *@Email 78493244@qq.com
 *@Date: 2015-6-10
 */
package com.helpinput.core;





/**
 * 类 名: PathUtils 描 述: 对于路径问题处理的工具类 作 者: Vv 创 建： 2012-11-29 版 本：
 * 历 史: (版本) 作者 时间 注释
 */
public class PathUtil {
	public static final String PATH_OLD_SPLIT = "\\\\";
	public static final String PATH_OTHER_SPLIT = "//";
	public static final String PATH_SPLIT = "/";
	public static final String UPPER_PATH = "..";
	public static final String PATH_HTML = "http://";
	
	/**
	 * 
	 * 描 述：追加目录 作 者：Vv 历 史: (版本) 作者 时间 注释
	 * 
	 * @param parentPath
	 *            上级目录 如：D:/AA
	 * @param subPath
	 *            子目录 如：BB
	 * @return 以目录名结尾 如： D:/AA/BB
	 */
	public static String appendPath(String parentPath, String subPath) {
		
		if (StringUtils.isNotBlank(parentPath) && !parentPath.endsWith(PATH_SPLIT)) {
			parentPath += PATH_SPLIT;
		}
		if (StringUtils.isNotBlank(subPath)) {
			parentPath = parentPath + subPath;
		}
		
		return processPath(parentPath);
	}
	
	/**
	 * 
	 * 描 述：根据当前路径获取目标路径的相对路径（传入参数为绝对路径） 算法： 1.将路径分割为文件名的数组
	 * 2.循环当前目录（currentPath）的文件名数组，分别与目标路径（targetPath）的文件数组里的同一位置（索引值i相同）比较
	 * 2a.如果同一索引值对应的文件夹名相同，则表示存在相对路径，循环继续（continue），直到一索引值对应的文件夹名不相同时，跳出循环
	 * 2b.如果两个路径的起始部分不一致，则表示不存在相对路径，返回目标路径 3.根据2中循环结束时的索引值，获取相对路径文件名的集合并组成String
	 * 作 者：Vv 历 史: (版本) 作者 时间 注释
	 * 
	 * @param currentPath
	 * @param targetPath
	 * @return 存在相对路径，则返回相对路径；否则，返回目标路径
	 * @throws ProcessPathException
	 */
	public static String getRelativePath(String currentPath, String targetPath) {
		if (StringUtils.isBlank(currentPath) || StringUtils.isBlank(targetPath)) {
// Path: 1-hi-utils/src/main/java/com/helpinput/core/LoggerBase.java
// public static final Logger logger =LoggerFactory.getLogger(LoggerBase.class);


// Path: 1-hi-utils/src/main/java/com/helpinput/core/PathUtil.java
import java.util.List;
import org.apache.commons.lang.StringUtils;
import static com.helpinput.core.LoggerBase.logger;
import java.util.ArrayList ;

/*
 * Copyright 2013-2015 the original author or authors.
 *
 * 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.
 */
 
/**
 *@Author: niaoge(Zhengsheng Xia)
 *@Email 78493244@qq.com
 *@Date: 2015-6-10
 */
package com.helpinput.core;





/**
 * 类 名: PathUtils 描 述: 对于路径问题处理的工具类 作 者: Vv 创 建： 2012-11-29 版 本：
 * 历 史: (版本) 作者 时间 注释
 */
public class PathUtil {
	public static final String PATH_OLD_SPLIT = "\\\\";
	public static final String PATH_OTHER_SPLIT = "//";
	public static final String PATH_SPLIT = "/";
	public static final String UPPER_PATH = "..";
	public static final String PATH_HTML = "http://";
	
	/**
	 * 
	 * 描 述：追加目录 作 者：Vv 历 史: (版本) 作者 时间 注释
	 * 
	 * @param parentPath
	 *            上级目录 如：D:/AA
	 * @param subPath
	 *            子目录 如：BB
	 * @return 以目录名结尾 如： D:/AA/BB
	 */
	public static String appendPath(String parentPath, String subPath) {
		
		if (StringUtils.isNotBlank(parentPath) && !parentPath.endsWith(PATH_SPLIT)) {
			parentPath += PATH_SPLIT;
		}
		if (StringUtils.isNotBlank(subPath)) {
			parentPath = parentPath + subPath;
		}
		
		return processPath(parentPath);
	}
	
	/**
	 * 
	 * 描 述：根据当前路径获取目标路径的相对路径（传入参数为绝对路径） 算法： 1.将路径分割为文件名的数组
	 * 2.循环当前目录（currentPath）的文件名数组，分别与目标路径（targetPath）的文件数组里的同一位置（索引值i相同）比较
	 * 2a.如果同一索引值对应的文件夹名相同，则表示存在相对路径，循环继续（continue），直到一索引值对应的文件夹名不相同时，跳出循环
	 * 2b.如果两个路径的起始部分不一致，则表示不存在相对路径，返回目标路径 3.根据2中循环结束时的索引值，获取相对路径文件名的集合并组成String
	 * 作 者：Vv 历 史: (版本) 作者 时间 注释
	 * 
	 * @param currentPath
	 * @param targetPath
	 * @return 存在相对路径，则返回相对路径；否则，返回目标路径
	 * @throws ProcessPathException
	 */
	public static String getRelativePath(String currentPath, String targetPath) {
		if (StringUtils.isBlank(currentPath) || StringUtils.isBlank(targetPath)) {
			logger.error("The currentPath or targetPath parameter is required and can't be null or blank.");