package seng302.DataInput; /** * Created by hba56 on 10/05/17. */ import seng302.Exceptions.InvalidPolarFileException; import seng302.Model.Polar; import java.io.*; import java.util.ArrayList; /** * Responsible for parsing a polar data file, and creating a polar data object. */ public class PolarParser { /** * Given a filename, this function parses it and generates a PolarTable object, which can be queried for polar information. * @param filename * @return */ /* ///TEMP PolarTable = ArrayList public static ArrayList parse(String filename) throws InvalidPolarFileException { //Temporary table to return later. ArrayList polarTable = new ArrayList(); //Open the file for reading. InputStream fileStream = PolarParser.class.getClassLoader().getResourceAsStream(filename); if (fileStream == null) { throw new InvalidPolarFileException("Could not open polar data file: " + filename); } //Wrap it with buffered input stream to set encoding and buffer. InputStreamReader in = null; try { in = new InputStreamReader(fileStream, "UTF-8"); } catch (UnsupportedEncodingException e) { throw new InvalidPolarFileException("Unsupported encoding: UTF-8", e); } BufferedReader inputStream = new BufferedReader(in); //We expect the polar data file to have the column headings: // Tws, Twa0, Bsp0, Twa1, Bsp1, UpTwa, UpBsp, Twa2, Bsp2, Twa3, Bsp3, Twa4, Bsp4, Twa5, Bsp5, Twa6, Bsp6, DnTwa, DnBsp, Twa7, Bsp7 //and to have 7 rows of data. //Angles are expected to be in degrees, and velocities in knots. //We read the heading and data rows, and split them into arrays of elements. String[] headings; ArrayList dataRows = new ArrayList<>(7); try { //Heading. //Read heading row. String headingRow = inputStream.readLine(); //Split it into individual headings. headings = headingRow.split(","); //Data rows. while (inputStream.ready()) { //Read line. String dataRow = inputStream.readLine(); //Split line. String[] dataElements = dataRow.split(","); //Add to collection. dataRows.add(dataElements); } } catch (IOException e) { throw new InvalidPolarFileException("Could not read from polar data file: " + filename, e); } //Finished reading in data, now we need to construct polar rows and table from it. //For each row... int rowNumber = 0; for (String[] row : dataRows) { //Create Polar row object. Polar polarRow = new Polar(); //For each column... for (int i = 0; i < row.length; i++) { //Convert value to a double. Double value; try { value = Double.parseDouble(row[i]); } catch (NumberFormatException e) { throw new InvalidPolarFileException("Could not convert (Row,Col): (" + rowNumber + "," + i +") = " + row[i] + "to a double.", e); } //Set the values of the row. //For reference: //Tws, Twa0, Bsp0, Twa1, Bsp1, UpTwa, UpBsp, Twa2, Bsp2, Twa3, Bsp3, Twa4, Bsp4, Twa5, Bsp5, Twa6, Bsp6, DnTwa, DnBsp, Twa7, Bsp7 if (headings[i] == "Tws") { polarRow.setTrueWindSpeed(value); } else if (headings[i] == "Twa0") { polarRow.setTrueWindAngle0(value); } else if (headings[i] == "Bsp0") { polarRow.setBoatSpeed0(value); } else if (headings[i] == "Twa1") { polarRow.setTrueWindAngle1(value); } else if (headings[i] == "Bsp1") { polarRow.setBoatSpeed1(value); } else if (headings[i] == "UpTwa") { polarRow.setUpTrueWindAngel(value); } else if (headings[i] == "UpBsp") { polarRow.setUpBoatSpeed(value); } else if (headings[i] == "Twa2") { polarRow.setTrueWindAngle2(value); } else if (headings[i] == "Bsp2") { polarRow.setBoatSpeed2(value); } else if (headings[i] == "Twa3") { polarRow.setTrueWindAngle3(value); } else if (headings[i] == "Bsp3") { polarRow.setBoatSpeed3(value); } else if (headings[i] == "Twa4") { polarRow.setTrueWindAngle4(value); } else if (headings[i] == "Bsp4") { polarRow.setBoatSpeed4(value); } else if (headings[i] == "Twa5") { polarRow.setTrueWindAngle5(value); } else if (headings[i] == "Bsp5") { polarRow.setBoatSpeed5(value); } else if (headings[i] == "Twa6") { polarRow.setTrueWindAngle6(value); } else if (headings[i] == "Bsp6") { polarRow.setBoatSpeed6(value); } else if (headings[i] == "Twa7") { polarRow.setTrueWindAngle7(value); } else if (headings[i] == "Bsp7") { polarRow.setBoatSpeed7(value); } //Add the polar row to the polar table. polarTable.add(polarRow); } //Increment row number. rowNumber++; } return polarTable; } */ }