/*  OpenOlap viewer
 *  パッケージ名：openolap.viewer.common
 *  ファイル：StringUtil.java
 *  説明：
 *
 *  作成日: 2004/01/09
 */
package openolap.viewer.common;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *  クラス：StringUtil
 *  説明：
 */
public class StringUtil {

	public static String changeNullToEmpty(String string){
		if(string == null){
			return "";
		} else {
			return string;
		}
	}

	public static String addStartTAGMark(String string){
		return "<" + string + ">";
	}

	public static String addEndTAGMark(String string){
		return "</" + string + ">";
	}


	// 文字列に含まれる「*」を、全て「%」に置換する
	public static String changeKomeToPercent(String string){
		return string.replace('*', '%');
	}

	/**
	 * 文字列の置換を行い、置換された文字列を返す。
	 * マッチするものはすべて置換する
	 */
	public static String regReplaceAll(String preString, String afterString, String string) {
		Pattern pattern = Pattern.compile(preString);
		Matcher matcher = pattern.matcher(string);
		return matcher.replaceAll(afterString);
	}



	// 文字列をデリミタで分割し、ArrayListを返す
	public static ArrayList splitString(String string, String delimiter) {
		ArrayList list = new ArrayList();
		StringTokenizer st = new StringTokenizer(string,delimiter);
		while ( st.hasMoreTokens() ) {
			list.add(st.nextToken());
		}
		return list;
	}

	// 複数の文字列を格納したArrayListから、指定されたデリミタで区切るひとつの文字列を生成する
	public static String joinList(ArrayList stringList, String delimiter) {
		if (stringList == null) {
			throw new IllegalArgumentException();
		}

		String returnString = "";
		Iterator iter = stringList.iterator();
		int i = 0;
		while (iter.hasNext()) {
			if(i>0) {
				returnString += delimiter;
			}
			returnString += (String) iter.next();
			i++;
		}
		return returnString;
	}

	// 複数の文字列を格納したArrayListから、指定された文字列を含まない文字列を取得する
	public static ArrayList exceptElement(ArrayList stringList, String exceptString) {
		if (stringList == null) {
			throw new IllegalArgumentException();
		}

		ArrayList exceptedList = new ArrayList();
		Iterator iter = stringList.iterator();
		while (iter.hasNext()) {
			String string = (String) iter.next();
			if (string.indexOf(exceptString) == -1) {
				exceptedList.add(string);
			}
		}
		return exceptedList;
	}



	// 文字列の接頭もしくは接尾に指定された数の指定された文字を付与する
	public static String addString(String str, String position, int repeatNumber, String repeatString) {
		if ( (position == null) || (repeatString == null) ) { throw new IllegalArgumentException(); }
		if ( (!position.equals("last")) && (!position.equals("first")) ) { throw new IllegalArgumentException(); }
		if ( repeatNumber<0 ) { throw new IllegalArgumentException(); }

		String addedString = str;
		if (position.equals("last")) {
			for (int i = 0; i < repeatNumber; i++) {
				addedString = addedString + repeatString;
			}
		} else if (position.equals("first")) {
			for (int i = 0; i < repeatNumber; i++) {
				addedString = repeatString + addedString;
			}
		}

		return addedString;
	}

}
