diff --git a/src/main/java/seng202/group9/Controller/Dataset.java b/src/main/java/seng202/group9/Controller/Dataset.java index 19c4056..00b8676 100644 --- a/src/main/java/seng202/group9/Controller/Dataset.java +++ b/src/main/java/seng202/group9/Controller/Dataset.java @@ -637,13 +637,13 @@ public class Dataset { * @throws DataException */ - /* + public String importFlight(String filePath) throws DataException { FlightPathParser parser = new FlightPathParser(filePath); //remember this still has to append the duplicate message to it. //routes are identified in the diction by routeAirline + routeSourceAirport + routeArrvAirport + routeCodeShare + routeStops + routeEquip; String message = parser.parse(); - ArrayList flightsToImport = parser.getResult(); + ArrayList flightPointsToImport = parser.getResult(); //check for dup int numOfDuplicates = 0; int nextID = -1; @@ -654,49 +654,69 @@ public class Dataset { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:res/userdb.db"); stmt = c.createStatement(); - String queryName = this.name.replace("'", "''").replace("\"", "\"\""); - String IDQuery = "SELECT * FROM `sqlite_sequence` WHERE `name` = '"+queryName+"_Routes' LIMIT 1;"; + String queryName = this.name.replace("'", "''"); + String IDQuery = "SELECT * FROM `sqlite_sequence` WHERE `name` = '"+queryName+"_Flight_Points' LIMIT 1;"; ResultSet IDResult = stmt.executeQuery(IDQuery); while(IDResult.next()){ nextID = Integer.parseInt(IDResult.getString("seq")) + 1;//for some reason sqlite3 stores incremental values as a string... } stmt.close(); stmt = c.createStatement(); - String insertFlightQuery = "INSERT INTO `" + this.name + "_Routes` (`Airline`, `Source_Airport`, `Destination_Airport`," + - " `Codeshare`, `Stops`, `Equipment`) VALUES "; - int numOfRoutes = 0; - for (int i = 0; i < flightsToImport.size(); i ++){ - String routeIdentifier = flightsToImport.get(i).getType() + flightsToImport.get(i).getID() + - flightsToImport.get(i).getAltitude() + flightsToImport.get(i).getLatitude() + - flightsToImport.get(i).getLongitude(); - //if (routeDictionary.containsKey(routeIdentifier)){ - // numOfDuplicates ++; - //}else{ - //route variables - String flightType = flightsToImport.get(i).getType().replace("\"", "\"\""); - String flightID = flightsToImport.get(i).getID().replace("\"", "\"\""); - double flightAltitude = flightsToImport.get(i).getAltitude(); - double flightLatitude = flightsToImport.get(i).getLatitude(); - double flightLongitude = flightsToImport.get(i).getLongitude(); + //ADDED + String firstPt = flightPointsToImport.get(0).getName(); + String lastPt = flightPointsToImport.get(flightPointsToImport.size() - 1).getName(); + FlightPath flightPathToAdd = new FlightPath(firstPt, lastPt); + + String insertFlightPathQuery = "INSERT INTO `" + this.name + "_Flight_Path` (`Source_Airport`, `Destination_Airport`)" + + "VALUES ( \"" + firstPt + "\",\"" + lastPt + "\") "; + stmt.execute(insertFlightPathQuery); + stmt.close(); + stmt = c.createStatement(); + int flightPathId = 0; + String getLastestIndex = "SELECT * FROM `sqlite_sequence` WHERE `name` = \"" + this.name.replace("\"", "\"\"") + + "_Flight_Path\" LIMIT 1;"; + ResultSet lastestIdResult = stmt.executeQuery(getLastestIndex); + while(lastestIdResult.next()){ + flightPathId = Integer.parseInt(lastestIdResult.getString("seq"));//for some reason sqlite3 stores incremental values as a string... + } + stmt.close(); + lastestIdResult.close(); + stmt = c.createStatement(); + flightPathToAdd.setID(flightPathId); + //ADDED + String insertFlightPointQuery = "INSERT INTO `" + this.name + "_Flight_Points` (`Index_ID`, `Name`, `Type`," + + " `Altitude`, `Longitude`, `Latitude`) VALUES "; + int numOfFlights = 0; + for (int i = 0; i < flightPointsToImport.size(); i ++){ + String flightPointIdentifier = flightPointsToImport.get(i).getType() + flightPointsToImport.get(i).getName() + + flightPointsToImport.get(i).getAltitude() + flightPointsToImport.get(i).getLatitude() + + flightPointsToImport.get(i).getLongitude(); + + String flightType = flightPointsToImport.get(i).getType().replace("\"", "\"\""); + String flightName = flightPointsToImport.get(i).getName().replace("\"", "\"\""); + double flightAltitude = flightPointsToImport.get(i).getAltitude(); + double flightLatitude = flightPointsToImport.get(i).getLatitude(); + double flightLongitude = flightPointsToImport.get(i).getLongitude(); //insert import into database - if (numOfRoutes > 0){ - insertFlightQuery += ","; + if (numOfFlights > 0){ + insertFlightPointQuery += ","; } - insertFlightQuery += "(\""+flightType+"\", \"" + flightID + "\", \"" + flightAltitude + "\", " + - "\"" + flightLatitude + "\", " + flightLongitude + "\")"; - flightsToImport.get(i).setID(nextID); + insertFlightPointQuery += "(" + flightPathId +", \""+ flightName +"\", \"" + flightType + "\", "+ flightAltitude + ", " + + "" + flightLatitude + ", " + flightLongitude + ")"; + flightPointsToImport.get(i).setID(nextID); //add data to dataset array. //this is placed after incase the database messes up - flights.add(flightsToImport.get(i)); - routeDictionary.put(routeIdentifier, flightsToImport.get(i)); + flightPathToAdd.addFlightPoint(flightPointsToImport.get(i)); + //routeDictionary.put(routeIdentifier, flightsToImport.get(i)); nextID++; - numOfRoutes++; + numOfFlights++; //} } - if (numOfRoutes > 0){ - stmt.execute(insertRouteQuery); + if (numOfFlights > 0){ + stmt.execute(insertFlightPointQuery); stmt.close(); } + flightPaths.add(flightPathToAdd); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); @@ -705,10 +725,10 @@ public class Dataset { createDataLinks(); return message; } - /* - */ + + /** * This function updates the connections between airports citys countries etc. */