Merge branch 'WIP_Flights' into 'master'

Flights



See merge request !3
main
Liam Beckett 9 years ago
commit 30181d39da

@ -54,13 +54,14 @@ public class App extends Application
e.printStackTrace(); e.printStackTrace();
} }
primaryStage.show(); primaryStage.show();
/* /*
//testing out dataset //testing out dataset
try { try {
currentDataset = new Dataset("test's", Dataset.getExisting); currentDataset = new Dataset("test's", Dataset.getExisting);
}catch (DataException e){ }catch (DataException e){
e.printStackTrace(); e.printStackTrace();
} }
//testing out airport parser //testing out airport parser
try { try {
System.out.println(currentDataset.importAirport("res/Samples/Airports.txt")); System.out.println(currentDataset.importAirport("res/Samples/Airports.txt"));
@ -79,7 +80,13 @@ public class App extends Application
} catch (DataException e) { } catch (DataException e) {
e.printStackTrace(); e.printStackTrace();
} }
*/
try {
System.out.println(currentDataset.importFlight("res/Samples/NZCH-WSSS.csv"));
} catch (DataException e) {
e.printStackTrace();
}
*/
} }
/** /**

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

@ -21,6 +21,13 @@ public class FlightPath {
this.flightPoints = new ArrayList<FlightPoint>(); this.flightPoints = new ArrayList<FlightPoint>();
} }
public FlightPath(String departureAirport, String arrivalAirport){
this.ID = -1;
this.departureAirport = departureAirport;
this.arrivalAirport = arrivalAirport;
this.flightPoints = new ArrayList<FlightPoint>();
}
public ArrayList<FlightPoint> getFlightPoints() { public ArrayList<FlightPoint> getFlightPoints() {
return flightPoints; return flightPoints;
} }

@ -15,14 +15,14 @@ public class FlightPoint {
private double latitude; private double latitude;
private double longitude; private double longitude;
public FlightPoint(String type, String via, double altitude, double latitude, double longitude){ public FlightPoint(String type, String name, double altitude, double latitude, double longitude){
//extra calculations will have to be used to find heading, legdistance and total distance. If necessary //extra calculations will have to be used to find heading, legdistance and total distance. If necessary
//Type 1 file the file the lecturers gave us //Type 1 file the file the lecturers gave us
this.name = ""; this.name = name;
this.ID = -1; this.ID = -1;
this.indexID = -1; this.indexID = -1;
this.type = type; this.type = type;
this.via = via; this.via = "";
this.heading = 0; this.heading = 0;
this.altitude = altitude; this.altitude = altitude;
this.legDistance = 0.0; this.legDistance = 0.0;

@ -4,10 +4,11 @@
<?import javafx.scene.control.Button?> <?import javafx.scene.control.Button?>
<?import javafx.scene.control.ListView?> <?import javafx.scene.control.ListView?>
<?import javafx.scene.control.ScrollPane?> <?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.Pane?> <?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?> <?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Rectangle?> <?import javafx.scene.shape.Rectangle?>
<?import javafx.scene.text.Font?> <?import javafx.scene.text.Font?>
@ -17,77 +18,101 @@
<children> <children>
<ScrollPane prefHeight="800.0" prefWidth="800.0"> <ScrollPane prefHeight="800.0" prefWidth="800.0">
<content> <content>
<AnchorPane prefHeight="800.0" prefWidth="800.0"> <AnchorPane prefHeight="600.0" prefWidth="800.0">
<children> <children>
<HBox alignment="CENTER" prefHeight="300.0" prefWidth="583.0" AnchorPane.topAnchor="25.0"> <GridPane prefHeight="600.0" prefWidth="800.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="493.0" minWidth="10.0" prefWidth="484.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="393.0" minWidth="10.0" prefWidth="316.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="261.0" minHeight="0.0" prefHeight="48.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="711.0" minHeight="10.0" prefHeight="542.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children> <children>
<AnchorPane prefHeight="300.0" prefWidth="330.0"> <GridPane GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="237.0" minWidth="10.0" prefWidth="217.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="268.0" minWidth="10.0" prefWidth="267.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="172.0" minHeight="0.0" prefHeight="44.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="461.0" minHeight="10.0" prefHeight="454.0" vgrow="SOMETIMES" />
</rowConstraints>
<children> <children>
<Pane layoutY="-6.0" prefHeight="60.0" prefWidth="330.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <Pane prefHeight="400.0" prefWidth="150.0" GridPane.rowIndex="1">
<children>
<ListView layoutX="20.0" layoutY="31.0" prefHeight="400.0" prefWidth="177.0" />
</children>
</Pane>
<Pane prefHeight="60.0" prefWidth="330.0">
<children> <children>
<Text layoutX="21.0" layoutY="40.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Flight Data Summary"> <Text layoutX="21.0" layoutY="40.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Flight Data Summary">
<font> <font>
<Font size="29.0" /> <Font size="48.0" />
</font> </font>
</Text> </Text>
</children> </children>
</Pane> </Pane>
<Pane layoutY="52.0" prefHeight="240.0" prefWidth="480.0" AnchorPane.bottomAnchor="0.0"> <Pane prefHeight="934.0" prefWidth="474.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<Rectangle arcHeight="5.0" arcWidth="5.0" fill="#0d93e0" height="220.0" layoutX="170.0" layoutY="10.0" smooth="false" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" width="160.0" />
<Pane layoutX="25.0" layoutY="10.0" prefHeight="220.0" prefWidth="120.0">
<children> <children>
<ListView prefHeight="220.0" prefWidth="120.0" /> <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#0d93e0" height="400.0" layoutX="5.0" layoutY="31.0" smooth="false" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" width="257.0" />
</children>
</Pane>
</children> </children>
<padding> <padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding> </padding>
</Pane> </Pane>
</children> </children>
</AnchorPane> </GridPane>
<AnchorPane prefHeight="300.0" prefWidth="253.0"> <GridPane GridPane.columnIndex="1" GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="347.0" minHeight="10.0" prefHeight="346.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="356.0" minHeight="10.0" prefHeight="152.0" vgrow="SOMETIMES" />
</rowConstraints>
<children> <children>
<Pane layoutY="200.0" prefHeight="100.0" prefWidth="253.0"> <Pane prefHeight="160.0" prefWidth="295.0" GridPane.rowIndex="1">
<children> <children>
<Button layoutX="20.0" layoutY="14.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="65.0" text="Airports"> <Button layoutX="33.0" layoutY="82.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="65.0" text="Airports">
<font> <font>
<Font size="12.0" /> <Font size="12.0" />
</font> </font>
</Button> </Button>
<Button layoutX="94.0" layoutY="14.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="65.0" text="Routes"> <Button layoutX="126.0" layoutY="81.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="65.0" text="Routes">
<font> <font>
<Font size="12.0" /> <Font size="12.0" />
</font> </font>
</Button> </Button>
<Button layoutX="169.0" layoutY="14.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="65.0" text="Airlines"> <Button layoutX="218.0" layoutY="81.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="65.0" text="Airlines">
<font> <font>
<Font size="12.0" /> <Font size="12.0" />
</font> </font>
</Button> </Button>
<Button layoutX="20.0" layoutY="61.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="214.0" text="Flight Raw Data" /> <Button layoutX="33.0" layoutY="129.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="250.0" text="Flight Raw Data" />
</children> </children>
<padding> <padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding> </padding>
</Pane> </Pane>
<Pane prefHeight="200.0" prefWidth="253.0"> <Pane prefHeight="200.0" prefWidth="200.0">
<children> <children>
<TextArea layoutX="20.0" layoutY="20.0" prefHeight="160.0" prefWidth="213.0"> <Pane prefHeight="350.0" prefWidth="316.0">
<padding> <children>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> <ListView layoutX="25.0" layoutY="16.0" prefHeight="318.0" prefWidth="266.0" />
</padding>
</TextArea>
</children> </children>
<padding> <padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding> </padding>
</Pane> </Pane>
</children> </children>
</AnchorPane> </Pane>
</children>
</GridPane>
</children> </children>
</HBox> </GridPane>
</children> </children>
</AnchorPane> </AnchorPane>
</content> </content>

Loading…
Cancel
Save