package edu.pdx.cs410J.grader; import au.com.bytecode.opencsv.CSVReader; import com.google.common.annotations.VisibleForTesting; import java.io.IOException; import java.io.Reader; public class D2LSurveyResponsesCSVParser { @VisibleForTesting int questionColumnIndex = -1; @VisibleForTesting int responseColumnIndex = -1; private final SurveyResponsesFromD2L responses; public D2LSurveyResponsesCSVParser(Reader reader) throws IOException { CSVReader csv = new CSVReader( reader ); String[] firstLine = csv.readNext(); extractColumnNamesFromFirstLineOfCsv(firstLine); responses = new SurveyResponsesFromD2L(); String[] surveyLine; while ((surveyLine = csv.readNext()) != null) { addQuestionAndResponseFromLineOfCsv(surveyLine); } } private void addQuestionAndResponseFromLineOfCsv(String[] surveyLine) { String question = getQuestionFromSurveyLine(surveyLine); String response = getResponseFromSurveyLine(surveyLine); this.responses.noteQuestionAndResponse(question, response); } private String getResponseFromSurveyLine(String[] surveyLine) { return surveyLine[responseColumnIndex]; } private String getQuestionFromSurveyLine(String[] surveyLine) { return surveyLine[questionColumnIndex]; } private void extractColumnNamesFromFirstLineOfCsv(String[] firstLine) { for (int columnIndex = 0; columnIndex < firstLine.length; columnIndex++) { String columnHeading = firstLine[columnIndex]; if ("Q Text".equals(columnHeading)) { this.questionColumnIndex = columnIndex; } else if ("Answer".equals(columnHeading)) { this.responseColumnIndex = columnIndex; } } } public SurveyResponsesFromD2L getSurveyResponses() { return this.responses; } }