Skip to content

Commit

Permalink
Fix to accept Object type as an argument of each method of StringFunc…
Browse files Browse the repository at this point in the history
…tion (#268)
  • Loading branch information
HidekiSugimoto189 committed Oct 27, 2020
1 parent 3fa2fdc commit 4376154
Show file tree
Hide file tree
Showing 7 changed files with 272 additions and 72 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -756,7 +756,7 @@ protected StringBuilder wrapIfComment(final StringBuilder original, final String
String camelColName = col.getCamelColumnName();
// フィールドがセットされていない場合はカラム自体を削る
if (isStringType(col.getDataType())) {
if (emptyStringEqualsNull) {
if (emptyStringEqualsNull && !col.isNullable()) {
original.append("/*IF SF.isNotEmpty(").append(camelColName).append(") */")
.append(System.lineSeparator());
} else {
Expand Down
146 changes: 88 additions & 58 deletions src/main/java/jp/co/future/uroborosql/utils/StringFunction.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
package jp.co.future.uroborosql.utils;

import java.util.Objects;
import java.util.Optional;

import jp.co.future.uroborosql.dialect.Dialect;

Expand Down Expand Up @@ -58,7 +59,7 @@ public StringFunction(final Dialect dialect) {
* @return null または 空文字の場合<code>true</code>
*/
public boolean isEmpty(final Object obj) {
return StringUtils.isEmpty(Objects.toString(obj, ""));
return StringUtils.isEmpty(getStringValue(obj, ""));
}

/**
Expand All @@ -78,7 +79,7 @@ public boolean isEmpty(final Object obj) {
* @return null、空文字のいずれでもない場合<code>true</code>
*/
public boolean isNotEmpty(final Object obj) {
return StringUtils.isNotEmpty(Objects.toString(obj, ""));
return StringUtils.isNotEmpty(getStringValue(obj, ""));
}

/**
Expand All @@ -98,7 +99,7 @@ public boolean isNotEmpty(final Object obj) {
* @return null または 空文字もしくは空白の場合<code>true</code>
*/
public boolean isBlank(final Object obj) {
return StringUtils.isBlank(Objects.toString(obj, ""));
return StringUtils.isBlank(getStringValue(obj, ""));
}

/**
Expand All @@ -118,7 +119,7 @@ public boolean isBlank(final Object obj) {
* @return null、空文字、空白のいずれでもない場合<code>true</code>
*/
public boolean isNotBlank(final Object obj) {
return StringUtils.isNotBlank(Objects.toString(obj, ""));
return StringUtils.isNotBlank(getStringValue(obj, ""));
}

/**
Expand All @@ -134,11 +135,11 @@ public boolean isNotBlank(final Object obj) {
*
* @see StringUtils#trim(String)
*
* @param str トリムする文字列
* @param obj トリムする文字列を表すオブジェクト
* @return トリム後の文字列。入力が<code>null</code>の場合は<code>null</code>
*/
public String trim(final String str) {
return StringUtils.trim(str);
public String trim(final Object obj) {
return StringUtils.trim(getStringValue(obj));
}

/**
Expand All @@ -155,11 +156,11 @@ public String trim(final String str) {
*
* @see StringUtils#trimToEmpty(String)
*
* @param str トリムする文字列
* @param obj トリムする文字列を表すオブジェクト
* @return トリム後の文字列。入力が<code>null</code>の場合は空文字となる
*/
public String trimToEmpty(final String str) {
return StringUtils.trimToEmpty(str);
public String trimToEmpty(final Object obj) {
return StringUtils.trimToEmpty(getStringValue(obj));
}

/**
Expand All @@ -176,12 +177,12 @@ public String trimToEmpty(final String str) {
*
* @see StringUtils#left(String, int)
*
* @param str 対象文字列
* @param obj 対象文字列を表すオブジェクト
* @param len 文字数
* @return 文字列の先頭から文字数で指定した長さの文字列
*/
public String left(final String str, final int len) {
return StringUtils.left(str, len);
public String left(final Object obj, final int len) {
return StringUtils.left(getStringValue(obj), len);
}

/**
Expand All @@ -198,12 +199,12 @@ public String left(final String str, final int len) {
*
* @see StringUtils#right(String, int)
*
* @param str 対象文字列
* @param obj 対象文字列を表すオブジェクト
* @param len 文字数
* @return 文字列の最後から文字数で指定した長さの文字列
*/
public String right(final String str, final int len) {
return StringUtils.right(str, len);
public String right(final Object obj, final int len) {
return StringUtils.right(getStringValue(obj), len);
}

/**
Expand All @@ -222,13 +223,13 @@ public String right(final String str, final int len) {
*
* @see StringUtils#mid(String, int, int)
*
* @param str 対象文字列
* @param obj 対象文字列を表すオブジェクト
* @param pos 開始位置
* @param len 文字数
* @return 文字列の開始位置から文字数で指定した長さの文字列
*/
public String mid(final String str, final int pos, final int len) {
return StringUtils.mid(str, pos, len);
public String mid(final Object obj, final int pos, final int len) {
return StringUtils.mid(getStringValue(obj), pos, len);
}

/**
Expand All @@ -245,12 +246,12 @@ public String mid(final String str, final int pos, final int len) {
*
* @see StringUtils#rightPad(String, int)
*
* @param str 文字列
* @param obj 文字列を表すオブジェクト
* @param size 文字埋め後の長さ
* @return 指定した長さになるまで末尾に空白を埋めた文字列
*/
public String rightPad(final String str, final int size) {
return StringUtils.rightPad(str, size);
public String rightPad(final Object obj, final int size) {
return StringUtils.rightPad(getStringValue(obj), size);
}

/**
Expand All @@ -267,13 +268,13 @@ public String rightPad(final String str, final int size) {
*
* @see StringUtils#rightPad(String, int, char)
*
* @param str 文字列
* @param obj 文字列を表すオブジェクト
* @param size 文字埋め後の長さ
* @param padChar 埋め込み文字
* @return 指定した長さになるまで末尾に埋め込み文字を埋めた文字列
*/
public String rightPad(final String str, final int size, final char padChar) {
return StringUtils.rightPad(str, size, padChar);
public String rightPad(final Object obj, final int size, final char padChar) {
return StringUtils.rightPad(getStringValue(obj), size, padChar);
}

/**
Expand All @@ -290,12 +291,12 @@ public String rightPad(final String str, final int size, final char padChar) {
*
* @see StringUtils#leftPad(String, int)
*
* @param str 文字列
* @param obj 文字列を表すオブジェクト
* @param size 文字埋め後の長さ
* @return 指定した長さになるまで先頭に空白を埋めた文字列
*/
public String leftPad(final String str, final int size) {
return StringUtils.leftPad(str, size);
public String leftPad(final Object obj, final int size) {
return StringUtils.leftPad(getStringValue(obj), size);
}

/**
Expand All @@ -312,13 +313,13 @@ public String leftPad(final String str, final int size) {
*
* @see StringUtils#leftPad(String, int, char)
*
* @param str 文字列
* @param obj 文字列を表すオブジェクト
* @param size 文字埋め後の長さ
* @param padChar 埋め込み文字
* @return 指定した長さになるまで末尾に埋め込み文字を埋めた文字列
*/
public String leftPad(final String str, final int size, final char padChar) {
return StringUtils.leftPad(str, size, padChar);
public String leftPad(final Object obj, final int size, final char padChar) {
return StringUtils.leftPad(getStringValue(obj), size, padChar);
}

/**
Expand All @@ -336,11 +337,11 @@ public String leftPad(final String str, final int size, final char padChar) {
*
* @see StringUtils#split(String)
*
* @param str 変換元文字列 または {@code null}
* @param obj 変換元文字列を表すオブジェクト または {@code null}
* @return 空白で区切った文字列配列
*/
public String[] split(final String str) {
return StringUtils.split(str);
public String[] split(final Object obj) {
return StringUtils.split(getStringValue(obj));
}

/**
Expand All @@ -358,12 +359,12 @@ public String[] split(final String str) {
*
* @see StringUtils#split(String, char)
*
* @param str 変換元文字列 または {@code null}
* @param obj 変換元文字列を表すオブジェクト または {@code null}
* @param separatorChar 区切り文字
* @return 区切り文字で区切った文字列配列
*/
public String[] split(final String str, final char separatorChar) {
return StringUtils.split(str, separatorChar);
public String[] split(final Object obj, final char separatorChar) {
return StringUtils.split(getStringValue(obj), separatorChar);
}

/**
Expand All @@ -381,13 +382,13 @@ public String[] split(final String str, final char separatorChar) {
*
* @see StringUtils#split(String, String, int)
*
* @param str 変換元文字列 または {@code null}
* @param obj 変換元文字列を表すオブジェクト または {@code null}
* @param separatorChars 区切り文字
* @param max 作成する配列の最大値。最大値を超える場合は最後の要素に残りのすべての文字列が入る
* @return 区切り文字で区切った文字列配列
*/
public String[] split(final String str, final String separatorChars, final int max) {
return StringUtils.split(str, separatorChars, max);
public String[] split(final Object obj, final String separatorChars, final int max) {
return StringUtils.split(getStringValue(obj), separatorChars, max);
}

/**
Expand All @@ -403,11 +404,11 @@ public String[] split(final String str, final String separatorChars, final int m
* @see StringUtils#capitalize(String)
* @see #uncapitalize(String)
*
* @param str 文字列
* @param obj 文字列を表すオブジェクト
* @return 先頭を大文字にした文字列
*/
public String capitalize(final String str) {
return StringUtils.capitalize(str);
public String capitalize(final Object obj) {
return StringUtils.capitalize(getStringValue(obj));
}

/**
Expand All @@ -423,11 +424,11 @@ public String capitalize(final String str) {
* @see StringUtils#uncapitalize(String)
* @see #capitalize(String)
*
* @param str 文字列
* @param obj 文字列を表すオブジェクト
* @return 先頭を小文字にした文字列
*/
public String uncapitalize(final String str) {
return StringUtils.uncapitalize(str);
public String uncapitalize(final Object obj) {
return StringUtils.uncapitalize(getStringValue(obj));
}

/**
Expand All @@ -442,17 +443,18 @@ public String uncapitalize(final String str) {
* - null -&gt; %
* </pre>
*
* @param text テキスト
* @param obj テキストを表すオブジェクト
* @return 指定されたテキストで始まるLIKE句用の検索文字列
*/
public String startsWith(final CharSequence text) {
public String startsWith(final Object obj) {
if (dialect == null) {
throw new IllegalStateException("dialect is not set.");
}
if (StringUtils.isEmpty(text)) {
CharSequence val = getStringValue(obj);
if (StringUtils.isEmpty(val)) {
return "%";
} else {
return dialect.escapeLikePattern(text) + "%";
return dialect.escapeLikePattern(val) + "%";
}
}

Expand All @@ -468,17 +470,18 @@ public String startsWith(final CharSequence text) {
* - null -&gt; %
* </pre>
*
* @param text テキスト
* @param obj テキストを表すオブジェクト
* @return 指定されたテキストを含むLIKE句用の検索文字列
*/
public String contains(final CharSequence text) {
public String contains(final Object obj) {
if (dialect == null) {
throw new IllegalStateException("dialect is not set.");
}
if (StringUtils.isEmpty(text)) {
CharSequence val = getStringValue(obj);
if (StringUtils.isEmpty(val)) {
return "%";
} else {
return "%" + dialect.escapeLikePattern(text) + "%";
return "%" + dialect.escapeLikePattern(val) + "%";
}
}

Expand All @@ -494,17 +497,18 @@ public String contains(final CharSequence text) {
* - null -&gt; %
* </pre>
*
* @param text テキスト
* @param obj テキストを表すオブジェクト
* @return 指定されたテキストで終わるLIKE句用の検索文字列
*/
public String endsWith(final CharSequence text) {
public String endsWith(final Object obj) {
if (dialect == null) {
throw new IllegalStateException("dialect is not set.");
}
if (StringUtils.isEmpty(text)) {
CharSequence val = getStringValue(obj);
if (StringUtils.isEmpty(val)) {
return "%";
} else {
return "%" + dialect.escapeLikePattern(text);
return "%" + dialect.escapeLikePattern(val);
}
}

Expand Down Expand Up @@ -559,4 +563,30 @@ public Long incrementLong(final Long num) {
return num + 1L;
}

/**
* 引数のオブジェクトを文字列に変換した値を取得する.
*
* @param obj 変換対象オブジェクト
* @return オブジェクトの文字列表現
*/
private String getStringValue(final Object obj) {
return getStringValue(obj, null);
}

/**
* 引数のオブジェクトを文字列に変換した値を取得する.
*
* @param obj 変換対象オブジェクト
* @param nullDefault objが<code>null</code>の場合の初期値
* @return オブジェクトの文字列表現
*/
private String getStringValue(final Object obj, final String nullDefault) {
Object val = obj instanceof Optional ? ((Optional<?>) obj).orElse(null) : obj;
if (val instanceof String) {
return String.class.cast(val);
} else {
return Objects.toString(val, nullDefault);
}
}

}

0 comments on commit 4376154

Please sign in to comment.