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

org.diirt.graphene.profile.io.CSVReader Maven / Gradle / Ivy

There is a newer version: 3.1.7
Show newest version
/**
 * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
 * All rights reserved. Use is subject to license terms. See LICENSE.TXT
 */
package org.diirt.graphene.profile.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Handles reading from the .CSV file.
 * 
 * @author asbarber
 */
public class CSVReader {
    
    /**
     * Quote delimiter for a .CSV formatted output file.
     */
    public static final String QUOTE = "\"";
    
    /**
     * Comma delimiter for a .CSV formatted output file.
     */
    public static final String DELIM = ",";
    
    /**
     * Prevents instantiation.
     */
    private CSVReader() {}
    
    
    //Parsing CSV File
    //--------------------------------------------------------------------------
    
    /**
     * Parse the entries from the row that are delimited by a comma.
     * @param row the string to be parsed
     * @return a List containing every entry from the row
     */
    private static List          parseRow(String row){
        if (row == null){
            throw new IllegalArgumentException("Requires non-null row data.");
        }        
        
        return Arrays.asList(row.split(DELIM));
    }
    
    /**
     * Reads an entry for each entry in the .CSV file.
     * @param csvFile .CSV file to read from
     * @return a List containing every row represented as a List of entries
     */
    private static List>    parseRows(List rows){
        if (rows == null){
            throw new IllegalArgumentException("Requires non-null list of rows.");
        }
        
        List> parsed = new ArrayList<>();
        

        for (String row: rows){
            if (row == null){
                throw new IllegalArgumentException("Requires non-null row data.");
            }
            
            parsed.add( CSVReader.parseRow(row) );
        }
        
        return parsed;
    }

    /**
     * Reads a string for each row in the .CSV file and validates the file
     * as a valid .CSV file.
     * @param csvFile .CSV file to read from
     * @return a List with each row as a string
     */
    public static List           readRows(File csvFile){
        CSVFinder.validateCSV(csvFile);
        
        List rows = new ArrayList<>();
        String row;
        FileReader fr = null;
        BufferedReader reader;
        
        try{
            fr = new FileReader(csvFile);
            reader = new BufferedReader(fr);
            
            while ( (row = reader.readLine()) != null ){
                rows.add(row);
            }
            
            reader.close();
        }
        catch(FileNotFoundException ex){
            throw new IllegalArgumentException("The file " + csvFile.getPath() + " does not exist");
        }
        catch (IOException ex){
            System.err.println("Could not close BufferedReader stream.");
        }
        finally{
            try {             
                if (fr != null){
                    fr.close();
                }
            }
            catch (IOException ex){
                System.err.println("Could not close FileReader stream.");
            }
        }
        
        return rows;
    }
    
    /**
     * Reads an entry for each entry in the .CSV file and validates the file
     * as a valid .CSV file.
     * @param csvFile .CSV file to read from
     * @return a List container every row represented as a List of entries
     */
    public static List>     parseCSV(File csvFile){
        CSVFinder.validateCSV(csvFile);
        
        return parseRows(readRows(csvFile));
    }
    
    //--------------------------------------------------------------------------
    
    
    //Validating CSV File
    //--------------------------------------------------------------------------
    
    /**
     * Ensures that each file name contains three components as delimited
     * by the "-" character.
     * The first component represents a date, the second represents
     * the graph type, and the third type represents Table2D.
     * 

* Throws an illegal argument exception if the graph type and component * sizes are incorrect. * * @param csvA file A corresponding to one Table2D output file * @param csvB file B corresponding to one Table2D output file */ public static void validate2DTablesNames(File csvA, File csvB){ CSVFinder.validateCSV(csvA); CSVFinder.validateCSV(csvB); //{Date, Graph Type, Table.csv} String[] compA = csvA.getName().split("-"); String[] compB = csvB.getName().split("-"); if (compA.length != 3){ throw new IllegalArgumentException("File A is name incorrectly"); } if (compB.length != 3){ throw new IllegalArgumentException("File B is name incorrectly"); } if (!compA[1].equals(compB[1])){ throw new IllegalArgumentException("The files are not the same graph type."); } } /** * Ensures that the data is non-null, the data has the same size, * and each inner list has the same size in both datasets. *

* Throws an illegal argument exception if these conditions are not met. * * @param dataA one set of CSV entries * @param dataB another set of CSV entries */ public static void validate2DTables(List> dataA, List> dataB){ if (dataA == null){ throw new IllegalArgumentException("Data must not be null."); } if (dataB == null){ throw new IllegalArgumentException("Data must not be null."); } if (dataA.size() != dataB.size()){ throw new IllegalArgumentException("Must have same number of rows."); } int rows = dataA.size(); for (int i = 0; i < rows; ++i){ if (dataA.get(i) == null){ throw new IllegalArgumentException("Row " + i + " of dataset 1 is null."); } if (dataB.get(i) == null){ throw new IllegalArgumentException("Row " + i + " of dataset 2 is null."); } if (dataA.get(i).size() != dataB.get(i).size()){ throw new IllegalArgumentException("Row " + i + " of dataset 1 and dataset2 must have the same number of columns."); } } } //-------------------------------------------------------------------------- }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy