package com.gh.mygreen.xlsmapper;
import java.awt.Point;
import java.io.File;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.apache.poi.ss.util.CellReference;
import com.gh.mygreen.xlsmapper.validation.CellFieldError;
import com.gh.mygreen.xlsmapper.validation.SheetBindingErrors;
/**
* テスト時のユーティリティクラス。
* <p>staticインポートして利用する。
* @version 1.0
* @since 0.5
* @author T.TSUCHIE
*
*/
public class TestUtils {
/**
* セルのアドレスを指定してエラーを取得する。
* @param errors
* @param address
* @return 見つからない場合はnullを返す。
*/
public static CellFieldError cellFieldError(final SheetBindingErrors errors, final String address) {
for(CellFieldError error : errors.getCellFieldErrors()) {
if(error.getFormattedCellAddress().equalsIgnoreCase(address)) {
return error;
}
}
return null;
}
/**
* セルのアドレス形式にフォーマットする。
* @param cellAddress
* @return
*/
public static String cellAddress(final Point cellAddress) {
return POIUtils.formatCellAddress(cellAddress);
}
/**
* 任意の時間でフォーマットする。
* @param pattern
* @param date
* @return
*/
public static String format(final String pattern, final Date date) {
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
return formatter.format(date);
}
/**
* 文字列をタイムスタンプに変換する。(yyyy-MM-dd HH:mm:ss.SSS)の形式
* @param value
* @return
*/
public static Timestamp toTimestamp(String value) {
return Timestamp.valueOf(value);
}
/**
* Timestampを{@link java.util.Date}に変換する。
* @param timestamp
* @return
*/
public static Date toUtilDate(Timestamp timestamp) {
return new Date(timestamp.getTime());
}
/**
* Timestampを{@link Calendar}に変換する
* @since 1.0
* @param timestamp
* @return
*/
public static Calendar toCalendar(Timestamp timestamp) {
Calendar cal = Calendar.getInstance();
cal.setTime(timestamp);
return cal;
}
/**
* Timestampを{@link java.sql.Date}に変換する。
* @param timestamp
* @return
*/
public static java.sql.Date toSqlDate(Timestamp timestamp) {
return new java.sql.Date(timestamp.getTime());
}
/**
* Timestampを{@link java.sql.Time}に変換する。
* @param timestamp
* @return
*/
public static java.sql.Time toSqlTime(Timestamp timestamp) {
return new java.sql.Time(timestamp.getTime());
}
/**
* 文字列の比較をする。
* 引数の値がnullでも問題ない。
* @param str1
* @param str2
* @return
*/
public static boolean equalsStr(final String str1, final String str2) {
if(str1 == null && str2 == null) {
return true;
} else if(str1 == null || str2 == null) {
return false;
} else {
return str1.equals(str2);
}
}
/**
* ユニコードに変換する
* @param original
* @return
*/
public static String toUnicode(char c) {
return toUnicode(String.valueOf(c));
}
/**
* ユニコードに変換する
* @param original
* @return
*/
public static String toUnicode(String original) {
if(original == null) {
return "";
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < original.length(); i++) {
sb.append(String.format("\\u%04X", Character.codePointAt(original, i)));
}
String unicode = sb.toString();
return unicode;
}
/**
* リストを作成する。
* @param items
* @return
*/
public static <T> List<T> toList(T... items) {
return Arrays.asList(items);
}
/**
* 配列を作成する。
* @param items
* @return
*/
public static <T> T[] toArray(T... items) {
return items;
}
/**
* 集合を作成する。
* @param items
* @return
*/
public static <T> Set<T> toSet(T... items) {
return new LinkedHashSet<T>(toList(items));
}
/**
* 値をトリムする。
* 引数がnullの場合は、空文字を返す。
* @param value
*/
public static String trim(String value) {
if(value == null) {
return "";
} else {
return value.trim();
}
}
/**
* 文字列の形式のセルのアドレスを、Point形式に変換する。
* @param address
* @return
*/
public static Point toPointAddress(final String address) {
ArgUtils.notEmpty(address, "address");
CellReference ref = new CellReference(address);
return new Point(ref.getCol(), ref.getRow());
}
/**
* 基準日を基準にして、daysを加算した日時を取得する。
* @param base
* @param days
*/
public static Date getDateByDay(Date base, int days) {
Calendar cal = Calendar.getInstance();
cal.setTime(base);
cal.add(Calendar.DAY_OF_MONTH, days);
return cal.getTime();
}
/**
* テスト用の結果出力ディレクトリを作成します。
* <p>target/test_out</p> を作成します。
*
* @return
*/
public static File createOutDir() {
final File dir = new File("target/test_out");
if(!dir.exists()) {
dir.mkdirs();
}
return dir;
}
}