package com.aol.one.dwh.infra.sql import java.sql.ResultSet import com.aol.one.dwh.infra.parser.StringToTimestampParser import com.aol.one.dwh.infra.util.LogTrait import org.apache.commons.dbutils.ResultSetHandler class ListStringResultHandler(numberOfPartitions: Int, format: String) extends ResultSetHandler[Option[Long]] with LogTrait { override def handle(resultSet: ResultSet): Option[Long] = { val result = Iterator .continually(resultSet.next) .takeWhile(identity) .map { _ => getColumnValues(numberOfPartitions, resultSet) }.toList parseValuesToTimestamp(result, format) } private def getColumnValues(numberOfPartitions: Int, resultSet: ResultSet): String = { (1 to numberOfPartitions) .map( index => resultSet.getString(index)) .toList .mkString(":") } private def parseValuesToTimestamp(values: List[String], format: String): Option[Long] = { values .map(value => StringToTimestampParser.parse(value, format)) .max } }