Added Route Parser to Dataset, Runtime takes a while optimisation may be needed

main
YaFedImYaEatIm 9 years ago
parent 6f861400c2
commit a0f5505e27

Binary file not shown.

@ -55,9 +55,8 @@ public class App extends Application
e.printStackTrace(); e.printStackTrace();
} }
//testing out route parser //testing out route parser
RouteParser routeParser = new RouteParser("res/Samples/Routes.txt");
try { try {
System.out.println(routeParser.parse()); System.out.println(currentDataset.importRoute("res/Samples/Routes.txt"));
} catch (DataException e) { } catch (DataException e) {
e.printStackTrace(); e.printStackTrace();
} }

@ -13,8 +13,8 @@ import java.util.LinkedHashMap;
public class Dataset { public class Dataset {
String name; String name;
static boolean getExisting = true; static boolean getExisting = true;//constructor variables for action
static boolean createNew = false; static boolean createNew = false;//constructor variables for action
ArrayList<Airline> airlines; ArrayList<Airline> airlines;
ArrayList<Airport> airports; ArrayList<Airport> airports;
ArrayList<Route> routes; ArrayList<Route> routes;
@ -217,14 +217,14 @@ public class Dataset {
//String codeShare, int stops, String equipment) //String codeShare, int stops, String equipment)
int routeID = rs.getInt("Route_ID"); int routeID = rs.getInt("Route_ID");
String routeAirline = rs.getString("Airline"); String routeAirline = rs.getString("Airline");
String routeDestAirport = rs.getString("Source_Airport"); String routeSourceAirport = rs.getString("Source_Airport");
String routeArrvAirport = rs.getString("Destination_Airport"); String routeArrvAirport = rs.getString("Destination_Airport");
String routeCodeShare = rs.getString("Codeshare"); String routeCodeShare = rs.getString("Codeshare");
int routeStops = rs.getInt("Stops"); int routeStops = rs.getInt("Stops");
String routeEquip = rs.getString("Equipment"); String routeEquip = rs.getString("Equipment");
Route routeToAdd = new Route(routeID, routeAirline, routeDestAirport, routeArrvAirport, routeCodeShare, routeStops, routeEquip); Route routeToAdd = new Route(routeID, routeAirline, routeSourceAirport, routeArrvAirport, routeCodeShare, routeStops, routeEquip);
//unique identifier for the dictionary //unique identifier for the dictionary
String identifier = routeAirline + routeDestAirport + routeArrvAirport + routeCodeShare + routeStops + routeEquip; String identifier = routeAirline + routeSourceAirport + routeArrvAirport + routeCodeShare + routeStops + routeEquip;
routeDictionary.put(identifier, routeToAdd); routeDictionary.put(identifier, routeToAdd);
routes.add(routeToAdd); routes.add(routeToAdd);
} }
@ -354,6 +354,7 @@ public class Dataset {
/** /**
* Imports Airline files to the dataset * Imports Airline files to the dataset
* @param filePath * @param filePath
* @return Success Message
* @throws DataException * @throws DataException
*/ */
public String importAirline(String filePath) throws DataException { public String importAirline(String filePath) throws DataException {
@ -390,16 +391,16 @@ public class Dataset {
//insert import into database //insert import into database
String airName = airlinesToImport.get(i).getName().replace("'", "''").replace("\"", "\"\""); String airName = airlinesToImport.get(i).getName().replace("'", "''").replace("\"", "\"\"");
String airAlias = airlinesToImport.get(i).getAlias().replace("'", "''").replace("\"", "\"\""); String airAlias = airlinesToImport.get(i).getAlias().replace("'", "''").replace("\"", "\"\"");
String airIATA = airlinesToImport.get(i).getAlias().replace("'", "''").replace("\"", "\"\""); String airIATA = airlinesToImport.get(i).getIATA().replace("'", "''").replace("\"", "\"\"");
String airICAO = airlinesToImport.get(i).getAlias().replace("'", "''").replace("\"", "\"\""); String airICAO = airlinesToImport.get(i).getICAO().replace("'", "''").replace("\"", "\"\"");
String airCallsign = airlinesToImport.get(i).getAlias().replace("'", "''").replace("\"", "\"\""); String airCallsign = airlinesToImport.get(i).getCallSign().replace("'", "''").replace("\"", "\"\"");
String airCountry = airlinesToImport.get(i).getAlias().replace("'", "''").replace("\"", "\"\""); String airCountry = airlinesToImport.get(i).getCountry().replace("'", "''").replace("\"", "\"\"");
String airActive = airlinesToImport.get(i).getAlias().replace("'", "''").replace("\"", "\"\""); String airActive = airlinesToImport.get(i).getActive().replace("'", "''").replace("\"", "\"\"");
if (numOfAirlines > 0){ if (numOfAirlines > 0){
insertAirlineQuery += ","; insertAirlineQuery += ",";
} }
insertAirlineQuery += "(\""+airName+"\", \"" + airAlias + "\", \"" + airIATA + "\"," + insertAirlineQuery += "(\""+airName+"\", \"" + airAlias + "\", \"" + airIATA + "\"," +
" \"" + airICAO + "\", \"" + airCallsign + "\", \"" + airCountry + "\", \"" + airActive + "\");"; " \"" + airICAO + "\", \"" + airCallsign + "\", \"" + airCountry + "\", \"" + airActive + "\")";
airlinesToImport.get(i).setID(nextID); airlinesToImport.get(i).setID(nextID);
//add data to dataset array. //add data to dataset array.
//this is placed after incase the database messes up //this is placed after incase the database messes up
@ -424,6 +425,7 @@ public class Dataset {
/** /**
* Imports Airline files to the dataset * Imports Airline files to the dataset
* @param filePath * @param filePath
* @return Success Message
* @throws DataException * @throws DataException
*/ */
public String importAirport(String filePath) throws DataException { public String importAirport(String filePath) throws DataException {
@ -488,7 +490,6 @@ public class Dataset {
} }
stmt.close(); stmt.close();
stmt = c.createStatement(); stmt = c.createStatement();
System.out.println("Inserting Cities Now");
/*/////////////// /*///////////////
//Insert Cities// //Insert Cities//
///////////////*/ ///////////////*/
@ -519,7 +520,6 @@ public class Dataset {
} }
stmt.close(); stmt.close();
stmt = c.createStatement(); stmt = c.createStatement();
System.out.println("Inserting Countries Now");
/*////////////////// /*//////////////////
//Insert Countries// //Insert Countries//
//////////////////*/ //////////////////*/
@ -555,6 +555,80 @@ public class Dataset {
createDataLinks(); createDataLinks();
return message; return message;
} }
/**
* Imports Airline files to dataset
* @param filePath
* @return Success Message
* @throws DataException
*/
public String importRoute(String filePath) throws DataException {
RouteParser parser = new RouteParser(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<Route> routesToImport = parser.getResult();
//check for dup
int numOfDuplicates = 0;
int nextID = -1;
//query database.
Connection c = null;
Statement stmt = null;
try {
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;";
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 insertRouteQuery = "INSERT INTO `" + this.name + "_Routes` (`Airline`, `Source_Airport`, `Destination_Airport`," +
" `Codeshare`, `Stops`, `Equipment`) VALUES ";
int numOfRoutes = 0;
for (int i = 0; i < routesToImport.size(); i ++){
String routeIdentifier = routesToImport.get(i).getAirline() + routesToImport.get(i).departsFrom() + routesToImport.get(i).arrivesAt() +
routesToImport.get(i).getCode() + routesToImport.get(i).getStops() + routesToImport.get(i).getEquipment();
if (routeDictionary.containsKey(routeIdentifier)){
numOfDuplicates ++;
}else{
//route variables
String routeAirline = routesToImport.get(i).getAirline().replace("\"", "\"\"");
String routeSource = routesToImport.get(i).departsFrom().replace("\"", "\"\"");
String routeDestination = routesToImport.get(i).arrivesAt().replace("\"", "\"\"");
String routeCode = routesToImport.get(i).getCode().replace("\"", "\"\"");
int routeStops = routesToImport.get(i).getStops();
String routeEquipment = routesToImport.get(i).getEquipment().replace("\"", "\"\"");
//insert import into database
if (numOfRoutes > 0){
insertRouteQuery += ",";
}
insertRouteQuery += "(\""+routeAirline+"\", \"" + routeSource + "\", \"" + routeDestination + "\", " +
"\"" + routeCode + "\", " + routeStops + ", \"" + routeEquipment + "\")";
routesToImport.get(i).setID(nextID);
//add data to dataset array.
//this is placed after incase the database messes up
routes.add(routesToImport.get(i));
routeDictionary.put(routeIdentifier, routesToImport.get(i));
nextID++;
numOfRoutes++;
}
}
if (numOfRoutes > 0){
stmt.execute(insertRouteQuery);
stmt.close();
}
} catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
System.exit(0);
}
message += "\nDuplicates ommitted: "+numOfDuplicates;
createDataLinks();
return message;
}
/** /**
* This function updates the connections between airports citys countries etc. * This function updates the connections between airports citys countries etc.
*/ */

Loading…
Cancel
Save