Class NumberConvertorSupport

java.lang.Object
nablarch.core.validation.convertor.NumberConvertorSupport
All Implemented Interfaces:
Convertor
Direct Known Subclasses:
BigDecimalConvertor, IntegerConvertor

public abstract class NumberConvertorSupport extends Object implements Convertor
数値のコンバータの作成を助けるサポートクラス。
数値のコンバータは変換前にバリデーションを行うが、各コンバータが行う共通バリデーションは当クラスにて行う。

共通バリデーションでは、以下のいずれかの場合、バリデーションOKとする。

  • 値がnullでnullを許容している場合(allowNullValueがtrueの場合)
  • 値がNumberに代入可能な型の場合
  • 値がString型の場合
  • 値がString配列で要素数が1の場合(配列内の値がnullの場合はallowNullValueがtrueの場合)

トリム仕様

値の前後の空白文字はトリムしてから変換可否の判定および変換を行う。

See Also:
  • Constructor Details

    • NumberConvertorSupport

      public NumberConvertorSupport()
  • Method Details

    • setInvalidDigitsIntegerMessageId

      public void setInvalidDigitsIntegerMessageId(String invalidDigitsMessageId)
      小数部を指定しなかった場合の桁数不正時のデフォルトのエラーメッセージのメッセージIDを設定する。
      デフォルトメッセージの例 : "{0}には{1}桁以下の数値を入力してください。"
      Parameters:
      invalidDigitsMessageId - 小数部を指定しなかった場合の桁数不正時のデフォルトのエラーメッセージのメッセージID
    • setInvalidDigitsFractionMessageId

      public void setInvalidDigitsFractionMessageId(String invalidDigitsFractionMessageId)
      小数部を指定した場合の桁数不正時のデフォルトのエラーメッセージのメッセージIDを設定する。
      デフォルトメッセージの例 : "{0}には整数部{1}桁以下、小数部{2}桁以下の数値を入力してください。"
      Parameters:
      invalidDigitsFractionMessageId - 小数部を指定した場合の桁数不正時のデフォルトのエラーメッセージのメッセージID
    • setMultiInputMessageId

      public void setMultiInputMessageId(String multiInputMessageId)
      入力値に複数の文字列が設定された場合のデフォルトのエラーメッセージのメッセージIDを設定する。
      デフォルトメッセージの例 : "{0}の値が不正です。"
      Parameters:
      multiInputMessageId - 入力値に複数の文字列が設定された場合のデフォルトのエラーメッセージのメッセージID
    • setAllowNullValue

      public void setAllowNullValue(boolean allowNullValue)
      変換対象の値にnullを許可するか否かを設定する。 設定を省略した場合、nullが許可される。
      Parameters:
      allowNullValue - nullを許可するか否か。許可する場合は、true
    • isConvertible

      public <T> boolean isConvertible(ValidationContext<T> context, String propertyName, Object propertyDisplayName, Object value, Annotation format)
      変換可否のプレチェックを行う。
      変換できない文字列であった場合、エラーメッセージをValidationContextに追加し、falseを返却する。
      Specified by:
      isConvertible in interface Convertor
      Type Parameters:
      T - バリデーション結果で取得できる型
      Parameters:
      context - ValidationContext
      propertyName - プロパティ名
      propertyDisplayName - プロパティの表示名オブジェクト
      value - 変換可否のプレチェックを行う値
      format - フォーマットを指定するアノテーション(指定がない場合null)
      Returns:
      変換できる場合true
    • convert

      public <T> Object convert(ValidationContext<T> context, String propertyName, Object value, Annotation format)
      変換を行う。
      変換に失敗した場合、ValidationContextにエラー内容を設定する。
      Specified by:
      convert in interface Convertor
      Type Parameters:
      T - バリデーション結果で取得できる型
      Parameters:
      context - ValidationContext
      propertyName - プロパティ名
      value - 変換する値(データ型は様々な形式がありえる。)
      format - フォーマットを指定するアノテーション(指定がない場合null)
      Returns:
      変換結果のオブジェクト
    • convertToPropertyType

      @Published(tag="architect") protected abstract Number convertToPropertyType(String numberString)
      トリムおよびフォーマットを行った文字列を、プロパティの型のオブジェクトへ変換する。
      Parameters:
      numberString - トリムおよびフォーマットを行った文字列
      Returns:
      プロパティの型のオブジェクト(数値型)
    • convertToString

      protected String convertToString(Object value)
      パラメータのオブジェクトを文字列に変換する。 以下に該当しないオブジェクトの場合には、nullを返却する。
      • String配列
      • String
      値の前後の空白文字はトリムする。
      Parameters:
      value - 変換対象のオブジェクト
      Returns:
      変換後の文字列
    • createPattern

      @Published(tag="architect") protected abstract Pattern createPattern(Digits digits, DecimalFormatSymbols symbols)
      Digitsに対応する正規表現を作成する。
      Parameters:
      digits - 数値フォーマット指定のアノテーション
      symbols - 小数点に使用する文字や1000の区切り文字を提供するDecimalFormatSymbols
      Returns:
      フォーマットを表わすパターン
    • getDecimalFormatSymbols

      protected <T> DecimalFormatSymbols getDecimalFormatSymbols(ValidationContext<T> context, String propertyName)
      プロパティに対するDecimalFormatSymbolsを取得する。

      ConversionUtil#getFormatSpec(ValidationContext, String)を呼び出し、 10進数に対する有効なフォーマット仕様(decimal)が取得できた場合は、 フォーマット仕様に設定された言語を使用して生成したDecimalFormatSymbolsを返す。

      プロパティに対する有効なフォーマット仕様が存在しない場合は、 getDefaultDecimalFormatSymbols()を呼び出し、 デフォルトのDecimalFormatSymbolsを返す。

      Type Parameters:
      T - バリデーション結果で取得できる型
      Parameters:
      context - ValidationContext
      propertyName - プロパティ名
      Returns:
      プロパティに対するDecimalFormatSymbols
    • getDefaultDecimalFormatSymbols

      protected DecimalFormatSymbols getDefaultDecimalFormatSymbols()
      デフォルトのDecimalFormatSymbolsを返す。
      デフォルト実装では日本語に対するDecimalFormatSymbols(小数点の文字=ドット、1000の区切り文字=カンマ)を返す。
      Returns:
      日本語に対するDecimalFormatSymbols(小数点の文字=ドット、1000の区切り文字=カンマ)
    • convertToNumber

      protected String convertToNumber(String number, DecimalFormatSymbols symbols)
      言語に応じた数字をNumberに変換可能な数字に変換する。

      ConversionUtil#convertToNumber(String, DecimalFormatSymbols)に処理を委譲する。

      Parameters:
      number - 数字
      symbols - 数字に使用されている小数点や1000の区切り文字を提供するDecimalFormatSymbols
      Returns:
      Numberに変換可能な数字
    • trim

      protected String trim(String value)
      トリムを実行する。
      Parameters:
      value - トリム対象の文字列
      Returns:
      トリム後の文字列