Class DataRecordFormatterSupport

java.lang.Object
nablarch.core.dataformat.DataRecordFormatterSupport
All Implemented Interfaces:
Closeable, AutoCloseable, DataRecordFormatter
Direct Known Subclasses:
FixedLengthDataRecordFormatter, StructuredDataRecordFormatterSupport, VariableLengthDataRecordFormatter

@Published(tag="architect") public abstract class DataRecordFormatterSupport extends Object implements DataRecordFormatter
フォーマット定義ファイルの内容に従い、ファイルデータの読み書きを行うクラスの抽象基底クラス。

本クラスでは、フォーマット定義情報保持クラス(LayoutDefinition)の初期化および内容の妥当性検証を行い、 実際のファイルデータの読み書きはサブクラスにて行う。

本クラスを継承するクラスでは、以下のディレクティブを指定することができる。

  • ファイルタイプ
  • 文字エンコーディング
  • レコード終端文字列(改行コード)
※ディレクティブとは、文字エンコーディングや改行コード、フィールド区切り文字など、 ファイルを読み書きする際に"ファイル単位"で定義できる各種設定項目のことを示す。

  • Constructor Details

    • DataRecordFormatterSupport

      public DataRecordFormatterSupport()
      コンストラクタ。 ディレクティブを初期化する。
  • Method Details

    • createDirectiveMap

      protected Map<String,DataRecordFormatterSupport.Directive> createDirectiveMap()
      使用するディレクティブの名前とDirectiveのMapを生成する。 サブクラスで使用するディレクティブを追加する場合は、本メソッドをオーバーライドし、任意のディレクティブを追加すること。
      Returns:
      使用するディレクティブの名前と値の型のMap
    • getConvertorSetting

      protected abstract ConvertorSetting getConvertorSetting()
      コンバータの設定情報を取得する。
      Returns:
      コンバータの設定情報
    • initialize

      public DataRecordFormatter initialize()
      フォーマット定義情報保持クラスの初期化を行う。 初期化は本メソッドの1回目の実行時のみ行われ、2回目以降の実行時に初期化は行われない。
      Specified by:
      initialize in interface DataRecordFormatter
      Returns:
      このオブジェクト自体
    • initializeDefinition

      protected void initializeDefinition()
      フォーマット定義情報保持クラス(LayoutDefinition)の初期化および内容の妥当性を検証し、 フォーマット定義情報保持クラスから必要な情報を本クラスのプロパティに設定する。 フォーマット定義情報保持クラスがすでに初期化されている場合、初期化は行わない。
    • validateDirectives

      protected void validateDirectives(Map<String,Object> directive)
      ディレクティブの内容の妥当性を検証する。

      サブクラスで独自のディレクティブを使用する場合は、このメソッドをオーバーライドし、独自のディレクティブに対して妥当性検証を行うこと。

      DataRecordFormatterでは以下の仕様を満たしているかどうかの検証を行う。

      • ディレクティブの値のデータ型が正しい
      • ファイルタイプが定義されている
      • エンコーディングが定義されている
      • エンコーディングがCharset型に変換できる
      • レコード終端文字列が許容されている文字である

      妥当性検証に失敗した場合は、SyntaxErrorExceptionがスローされる。

      Parameters:
      directive - ディレクティブ
    • initializeField

      protected void initializeField(Map<String,Object> directive)
      フィールドを初期化する。

      DataRecordFormatterSupportでは、ディレクティブに設定された以下の値をフィールドに設定する。

      • レコード終端文字列
      • 文字エンコーディング
      Parameters:
      directive - ディレクティブ
    • validateDirectivesDataType

      protected void validateDirectivesDataType(Map<String,Object> directive)
      定義されたすべてのディレクティブの値のデータ型が正しいことを検証する。
      Parameters:
      directive - ディレクティブ
    • initializeClassifier

      protected void initializeClassifier()
      レコード識別情報が存在する場合(マルチレイアウトファイルの場合)、 レコード識別情報に関連するフィールド定義クラスの初期化(コンバータ設定およびエンコーディング設定)を行う。

      レコード種別識別定義の場合は、フィールド位置の整合性チェックは行わない。

    • initializeFieldDefinition

      protected void initializeFieldDefinition()
      フィールド定義クラスについて、以下の初期化処理を行う。
      • コンバータ設定
      • エンコーディング設定
      • 差分定義が行われている場合は、親のフィールド定義情報を反映
      • レコード長、フィールド長の妥当性検証
    • setFieldProperty

      protected void setFieldProperty(FieldDefinition field, RecordDefinition recordDef)
      フィールド定義情報保持クラスのプロパティを設定する。
      Parameters:
      field - フィールド定義情報保持クラス
      recordDef - レコード定義情報保持クラス
    • validateRecordLength

      protected void validateRecordLength(int head, RecordDefinition record)
      レコード長の妥当性を検証する。
      Parameters:
      head - 位置
      record - レコード定義情報保持クラス
    • validatePosition

      protected void validatePosition(int head, FieldDefinition field)
      開始位置と、現在位置の妥当性を検証する。
      Parameters:
      head - 位置
      field - フィールド定義情報保持クラス
    • addConvertorToField

      protected void addConvertorToField(FieldDefinition field, RecordDefinition recordDefinition)
      フィールドのフォーマット定義を保持するクラスに関連するコンバータを生成し、フィールド定義クラスに設定する。 コンバータを生成する役割を担うコンバータファクトリは、サブクラスで指定されたコンバータ情報設定クラスをもとに生成する。 getConvertorSetting()
      Parameters:
      field - フォーマット定義を保持するクラス
      recordDefinition - レコード定義情報保持クラス
    • createCharacterReplacer

      protected CharacterReplacer createCharacterReplacer(FieldDefinition field, String replacementType)
      デフォルトの寄せ字コンバータを生成する。
      Parameters:
      field - フィールド
      replacementType - 寄せ字変換タイプ
      Returns:
      デフォルトの寄せ字コンバータ
    • setDataTypeProperty

      protected DataRecordFormatterSupport setDataTypeProperty(DataType<?,?> dataType)
      データタイプの設定を行う。ファイルタイプ個別の設定を行う必要がある場合、必要に応じてサブクラスでオーバーライドする。
      Parameters:
      dataType - データタイプ
      Returns:
      このオブジェクト自体
    • setValueConvertorProperty

      protected void setValueConvertorProperty(ValueConvertor<?,?> valueConvertor)
      コンバータの設定を行う。ファイルタイプ個別の設定を行う必要がある場合、必要に応じてサブクラスでオーバーライドする。
      Parameters:
      valueConvertor - コンバータ
    • setDefinition

      public DataRecordFormatter setDefinition(LayoutDefinition definition)
      フォーマット定義ファイルの情報を保持するクラスを設定する。
      Specified by:
      setDefinition in interface DataRecordFormatter
      Parameters:
      definition - フォーマット定義ファイルの定義情報
      Returns:
      本クラスのインスタンス
    • getDefinition

      protected LayoutDefinition getDefinition()
      フォーマット定義ファイルの情報を保持するクラスを取得する。
      Returns:
      フォーマット定義ファイルの情報を保持するクラス
    • setAllowedRecordSeparatorList

      public DataRecordFormatterSupport setAllowedRecordSeparatorList(List<String> allowedRecordSeparatorList)
      許容するレコード終端文字列のリストを設定する。
      Parameters:
      allowedRecordSeparatorList - 許容されるレコード終端文字列のリスト
      Returns:
      このオブジェクト自体
    • getRecordNumber

      public int getRecordNumber()
      読み込みまたは書き込み中のレコードのレコード番号を取得する。
      Specified by:
      getRecordNumber in interface DataRecordFormatter
      Returns:
      recordNumber 読み込みまたは書き込み中のレコードのレコード番号
    • incrementRecordNumber

      protected void incrementRecordNumber()
      読み込みまたは書き込み中のレコードのレコード番号をインクリメントする。
    • setRecordNumber

      protected void setRecordNumber(int recordNumber)
      読み込みまたは書き込み中のレコードのレコード番号を設定する。
      Parameters:
      recordNumber - 読み込みまたは書き込み中のレコードのレコード番号
    • getDefaultEncoding

      public Charset getDefaultEncoding()
      デフォルトの文字エンコーディングを取得する。
      Returns:
      文字エンコーディング
    • getRecordSeparator

      protected String getRecordSeparator()
      レコード終端文字列を取得する。
      Returns:
      レコード終端文字列
    • setDefaultReplacementType

      public DataRecordFormatterSupport setDefaultReplacementType(Map<String,String> defaultReplacementType)
      データタイプ名に対応するデフォルトの寄せ字変換タイプ名を設定する。
      Parameters:
      defaultReplacementType - データタイプ名に対応するデフォルトの寄せ字変換タイプ名
      Returns:
      このオブジェクト自体
    • newInvalidDataFormatException

      protected final InvalidDataFormatException newInvalidDataFormatException(Object... msgElements)
      引数を連結したものをメッセージとして、InvalidDataFormatExceptionを生成する。
      この例外には、フォーマットファイルのパスと例外発生時の行番号が設定される。
      Parameters:
      msgElements - メッセージ要素
      Returns:
      InvalidDataFormatExceptionインスタンス
    • addFormatAndRecordNumberTo

      protected final InvalidDataFormatException addFormatAndRecordNumberTo(InvalidDataFormatException e)
      InvalidDataFormatExceptionに フォーマットファイルのパスと例外発生時の行番号を設定する。
      Parameters:
      e - 設定対象の例外インスタンス
      Returns:
      引数で与えられたインスタンス
    • getFileType

      public String getFileType()
      このフォーマッタが取り扱うファイル種別を返却する。
      Returns:
      ファイル種別
    • getMimeType

      public String getMimeType()
      このフォーマッタが取り扱うファイルのmime-typeを返却する。
      デフォルトではtext/plainを返却する。必要に応じサブクラスでオーバーライドすること。
      Returns:
      ファイルのmime-type