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

com.zebrunner.carina.dataprovider.parser.csv.CSVParser Maven / Gradle / Ivy

package com.zebrunner.carina.dataprovider.parser.csv;

import au.com.bytecode.opencsv.CSVReader;
import com.zebrunner.carina.dataprovider.parser.DSBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.FileReader;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class CSVParser {

    private CSVParser() {
        // hide
    }

    private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

    public static CSVTable parseCsvFile(DSBean dsBean, char separator, char quote) {
        CSVTable csvTable = new CSVTable(dsBean.getExecuteColumn(), dsBean.getExecuteValue());

        List data = readData(dsBean, separator, quote);
        if (data.isEmpty()) {
            throw new RuntimeException("Unable to retrieve data from CSV DataProvider! Verify separator and quote settings.");
        }

        csvTable.setHeaders(Arrays.asList(data.get(0)));

        mapData(csvTable, data);

        return csvTable;
    }

    @SuppressWarnings("unchecked")
    private static List readData(DSBean dsBean, char separator, char quote) {
        CSVReader reader = null;
        List list = new ArrayList<>();
        try {
            String csvFile = ClassLoader.getSystemResource(dsBean.getDsFile()).getFile();
            try (FileReader fileReader = new FileReader(csvFile)) {
                reader = new CSVReader(fileReader, separator, quote);
                list = reader.readAll();
            }
        } catch (IOException e) {
            LOGGER.error("Unable to read data from CSV DataProvider", e);
        } finally {
            try {
                assert reader != null;
                reader.close();
            } catch (IOException e) {
                LOGGER.error("Unable to close CSV Reader", e);
            }
        }
        return list;
    }

    private static void mapData(CSVTable table, List data) {
        for (int i = 1; i < data.size(); i ++) {
            table.addDataRow(List.of(data.get(i)));
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy