All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yo1000.dbunit.friend.NamedCsvStringProducer.kt Maven / Gradle / Ivy

package com.yo1000.dbunit.friend

import org.apache.commons.csv.CSVFormat
import org.apache.commons.csv.CSVRecord
import org.dbunit.dataset.Column
import org.dbunit.dataset.DefaultTableMetaData
import org.dbunit.dataset.csv.CsvParserImpl
import org.dbunit.dataset.datatype.DataType
import org.dbunit.dataset.stream.IDataSetConsumer
import org.dbunit.dataset.stream.IDataSetProducer
import java.io.StringReader

class NamedCsvStringProducer(
    private val namedCsvStrings: List
) : IDataSetProducer {
    private var consumer: IDataSetConsumer? = null

    override fun setConsumer(consumer: IDataSetConsumer?) {
        this.consumer = consumer
    }

    override fun produce() {
        consumer?.let { cons ->
            cons.startDataSet()

            for (namedCsvString in namedCsvStrings) {
                val format = CSVFormat.newFormat(namedCsvString.delimiter)
                var startedTable = false
                for ((lineNumber, record: CSVRecord) in format.parse(StringReader(namedCsvString.csv)).withIndex()) {
                    if (lineNumber == 0) {
                        cons.startTable(DefaultTableMetaData(
                            namedCsvString.name,
                            record.values().map { col -> Column(col.trim(), DataType.UNKNOWN) }.toTypedArray()
                        ))
                        startedTable = true
                    } else {
                        cons.row(CsvParserImpl().parse(record
                            .values()
                            .map { it.trim() }
                            .map { it.replace(
                                Regex("^${namedCsvString.enclosure}${namedCsvString.enclosure}$"),
                                "${namedCsvString.enclosure}${namedCsvString.enclosure}${namedCsvString.enclosure}${namedCsvString.enclosure}"
                            ) }
                            .map { it.replace(Regex("^${namedCsvString.enclosure}"), "\"") }
                            .map { it.replace(Regex("${namedCsvString.enclosure}$"), "\"") }
                            .joinToString(separator = ",")
                        ).toTypedArray())
                    }
                }
                if (startedTable) cons.endTable()
            }

            cons.endDataSet()
        } ?: throw NullPointerException()
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy