Class AbstractDateStringConverter

java.lang.Object
nablarch.common.date.AbstractDateStringConverter
All Implemented Interfaces:
Convertor, ExtendedStringConvertor
Direct Known Subclasses:
YYYYMMConvertor, YYYYMMDDConvertor

public abstract class AbstractDateStringConverter extends Object implements ExtendedStringConvertor
日付を表す文字列を値に変換する抽象クラス。
Author:
T.Kawasaki
See Also:
  • Constructor Details

    • AbstractDateStringConverter

      protected AbstractDateStringConverter(String datePattern, String dataType)
      コンストラクタ。
      Parameters:
      datePattern - フォーマットに使用する日付パターン
      dataType - "データタイプ{パターン}"形式のデータタイプ
  • Method Details

    • setParseFailedMessageId

      public void setParseFailedMessageId(String parseFailedMessageId)
      指定された日付文字列への変換失敗時のメッセージIDを設定する。
      Parameters:
      parseFailedMessageId - 指定された日付文字列への変換失敗時のメッセージID
    • convert

      public <T> Object convert(ValidationContext<T> context, String propertyName, Object value, Annotation annotation)
      変換を行う。
      変換に失敗した場合、ValidationContextにエラー内容を設定する。

      値がnullまたは空文字の場合は値をそのまま返す。 値の変換は、#convert(String, String)メソッドに委譲する。

      Specified by:
      convert in interface Convertor
      Type Parameters:
      T - バリデーション結果で取得できる型
      Parameters:
      context - ValidationContext
      propertyName - プロパティ名
      value - 変換する値(データ型は様々な形式がありえる。)
      annotation - フォーマットを指定するアノテーション(指定がない場合null)
      Returns:
      変換結果のオブジェクト
    • convert

      protected String convert(String value, FormatSpec formatSpec)
      指定されたフォーマット仕様で値を変換する。

      はじめに指定されたフォーマット仕様で値の解析を試みる。 指定されたフォーマット仕様で解析できない場合は、 getNumbersOnlyFormat(String)メソッドを使用し、 日付文字列の区切り文字を取り除いたフォーマットで解析する。

      最後に解析結果として取得できるDateオブジェクトを、所定のパターン(datePattern)の 文字列に変換する。

      Parameters:
      value - 値
      formatSpec - フォーマット仕様
      Returns:
      変換後の値
    • getTargetClass

      public Class<?> getTargetClass()
      変換対象のクラスを取得する。
      Specified by:
      getTargetClass in interface Convertor
      Returns:
      変換対象のクラス
    • isConvertible

      public <T> boolean isConvertible(ValidationContext<T> context, String propertyName, Object propertyDisplayName, Object value, Annotation format)
      変換可否のプレチェックを行う。
      変換できない文字列であった場合、エラーメッセージをValidationContextに追加し、falseを返却する。

      値がnullまたは空文字の場合はconvertメソッドでnullを返すため、本メソッドはtrueを返す。 値の変換可否チェックは、#isConvertible(String, String)メソッドに委譲する。

      値が変換不可の場合は、バリデーション結果メッセージを設定しfalseを返す。 メッセージIDは、YYYYMMDDアノテーションのmessageId属性の値を使用する。 YYYYMMDDアノテーションにメッセージIDが指定されていない場合は、 本クラスのparseFailedMessageIdプロパティの値をメッセージIDに使用する。

      Specified by:
      isConvertible in interface Convertor
      Type Parameters:
      T - バリデーション結果で取得できる型
      Parameters:
      context - ValidationContext
      propertyName - プロパティ名
      propertyDisplayName - プロパティの表示名オブジェクト
      value - 変換可否のプレチェックを行う値
      format - フォーマットを指定するアノテーション(指定がない場合null)
      Returns:
      変換できる場合true
    • isConvertible

      protected boolean isConvertible(String value, FormatSpec formatSpec)
      指定されたフォーマット仕様で値が変換可能か否かを判定する。
       はじめに指定されたフォーマット仕様で値が変換可能か否かを判定する。
       指定されたフォーマット仕様で変換不可の場合は、
       getNumbersOnlyFormat(String)メソッドを使用し、
       日付文字列の区切り文字を取り除いたフォーマットで変換可能か否かを判定する。
       
      Parameters:
      value - 値
      formatSpec - フォーマット仕様
      Returns:
      変換可能な場合はtrue
    • getFormatSpec

      protected <T> FormatSpec getFormatSpec(ValidationContext<T> context, String propertyName, String allowFormat)
      プロパティの変換に使用するフォーマット仕様を取得する。

      ConversionUtil.getFormatSpec(ValidationContext, String)を呼び出し、 プロパティに対する有効なフォーマット仕様(yyyymmddなど)を取得して返す。

      プロパティに対する有効なフォーマット仕様が存在しない場合は、 allowFormatから生成したフォーマット仕様を返す。

      Type Parameters:
      T - バリデーション結果で取得できる型
      Parameters:
      context - ValidationContext
      propertyName - プロパティ名
      allowFormat - フォーマット
      Returns:
      変換に使用するフォーマット仕様
    • getNumbersOnlyFormat

      protected String getNumbersOnlyFormat(String format)
      フォーマット文字列から日付文字列の区切り文字を取り除いた値を返す。

      DateUtil.getNumbersOnlyFormat(String)に処理を委譲する。

      Parameters:
      format - フォーマット文字列
      Returns:
      フォーマット文字列から年月日の区切り文字を取り除いた値
    • getAnnotationDataFrom

      protected abstract nablarch.common.date.AbstractDateStringConverter.AnnotationData getAnnotationDataFrom(Annotation annotation)
      アノテーションから値を取得する。
      Parameters:
      annotation - アノテーション
      Returns:
      アノテーションに設定された値