# 保存済みの列車ロケーション情報 odpt:Train を処理する Factory Pattern のクラス
class TokyoMetro::Factory::Generate::Api::TrainLocation::List < TokyoMetro::Factory::Generate::Api::MetaClass::List::Date

  include ::TokyoMetro::ClassNameLibrary::Api::TrainLocation

  # Constructor
  # @param y [Integer] 情報が保存された年
  # @param m [Integer] 情報が保存された月
  # @param d [Integer] 情報が保存された日
  # @param railway_line [String] 列車ロケーション情報の路線名
  # @param file_type [String (filename)] ファイルの名称
  # @param db_dirname [String (dirname)] データが格納されているディレクトリの名称
  # @param db_dirname_sub [String (dirname) or nil] データが格納されているサブディレクトリの名称
  # @note ni の場合は全路線を取得する。また、具体的な路線名を指定する場合は "Ginza" , "Marunouchi" などと指定する。(一度に指定できるのは1路線のみ)
  def initialize( y , m , d , railway_line , file_type , db_dirname , db_dirname_sub )
    @railway_line = railway_line
    super( y , m , d , file_type , db_dirname , db_dirname_sub )
  end

  # 個々の列車ロケーション情報の配列
  # @param max [Integer or nil] 配列の要素の最大値
  # @note max を nil とした場合は無制限で、同一の路線・年月日のすべての情報を配列に格納する。
  # @return [TokyoMetro::Api::TrainLocation::List]
  def generate( max = nil )
    super( max )
  end

  # 保存済みの情報からインスタンスの配列を復元するメソッド
  # @param y [Integer] 情報が保存された年
  # @param m [Integer] 情報が保存された月
  # @param d [Integer] 情報が保存された日
  # @param file_type [String (filename)] ファイルの名称
  # @param db_dirname [String (dirname)] データが格納されているディレクトリの名称
  # @param db_dirname_sub [String (dirname) or nil] データが格納されているサブディレクトリの名称
  # @param max [Integer or nil] 配列の要素の最大値
  # @note max を nil とした場合は無制限で、すべての情報を配列に格納する。
  # @return [TokyoMetro::Api::TrainLocation::List]
  def self.process( railway_line , y , m , d , file_type , db_dirname , db_dirname_sub , max )
    self.new( railway_line , y , m , d , file_type , db_dirname , db_dirname_sub ).generate( max )
  end

  private

  def db_dirname
    if @db_dirname_sub.nil?
      "#{@db_dirname}/#{dirname_for_date}/**"
    elsif @db_dirname_sub.string?
      "#{@db_dirname}/#{dirname_for_date}/#{railway_line_dirname}/**"
    else
      raise "Error: The instance variable \"db_dirname_sub\" is not valid."
    end
  end

  def railway_line_dirname
    if @railway_line.nil?
      "TokyoMetro/**"
    elsif @railway_line.string?
      "TokyoMetro/#{@railway_line}"
    else
        raise "Error: The instance variable \"db_dirname_sub\" is not valid."
    end
  end

end