From a89e5f7b95f89467358712c2d9b8458d997a571e Mon Sep 17 00:00:00 2001 From: YaFedImYaEatIm Date: Wed, 14 Sep 2016 10:25:58 +1200 Subject: [PATCH] Made Add Airline FUnction --- .../java/seng202/group9/Controller/App.java | 6 +- .../seng202/group9/Controller/Dataset.java | 71 ++++++++++++++++--- .../java/seng202/group9/Core/Airline.java | 23 ++++++ 3 files changed, 88 insertions(+), 12 deletions(-) diff --git a/src/main/java/seng202/group9/Controller/App.java b/src/main/java/seng202/group9/Controller/App.java index fd6bfbb..f589eed 100644 --- a/src/main/java/seng202/group9/Controller/App.java +++ b/src/main/java/seng202/group9/Controller/App.java @@ -54,13 +54,17 @@ public class App extends Application e.printStackTrace(); } primaryStage.show(); - /* //testing out dataset try { currentDataset = new Dataset("test's", Dataset.getExisting); }catch (DataException e){ e.printStackTrace(); } + try { + currentDataset.addAirline("Dota2", "Valve", "D2", "DOT", "Defence of the Ancients", "Steam", "Y"); + }catch (DataException e){ + e.printStackTrace(); + }/* //testing out airport parser try { System.out.println(currentDataset.importAirport("res/Samples/Airports.txt")); diff --git a/src/main/java/seng202/group9/Controller/Dataset.java b/src/main/java/seng202/group9/Controller/Dataset.java index 19c4056..a6138b5 100644 --- a/src/main/java/seng202/group9/Controller/Dataset.java +++ b/src/main/java/seng202/group9/Controller/Dataset.java @@ -21,12 +21,12 @@ public class Dataset { ArrayList flightPaths; ArrayList countries; ArrayList cities; - LinkedHashMap airlineDictionary; - LinkedHashMap airportDictionary; - LinkedHashMap routeDictionary; - LinkedHashMap flightPathDictionary; - LinkedHashMap countryDictionary; - LinkedHashMap cityDictionary; + LinkedHashMap airlineDictionary; + LinkedHashMap airportDictionary; + LinkedHashMap routeDictionary; + LinkedHashMap flightPathDictionary; + LinkedHashMap countryDictionary; + LinkedHashMap cityDictionary; /** * @@ -42,11 +42,11 @@ public class Dataset { this.routes = new ArrayList(); this.cities = new ArrayList(); this.countries = new ArrayList(); - this.airlineDictionary = new LinkedHashMap(); - this.airportDictionary = new LinkedHashMap();; - this.routeDictionary = new LinkedHashMap();; - this.countryDictionary = new LinkedHashMap();; - this.cityDictionary = new LinkedHashMap();; + this.airlineDictionary = new LinkedHashMap(); + this.airportDictionary = new LinkedHashMap();; + this.routeDictionary = new LinkedHashMap();; + this.countryDictionary = new LinkedHashMap();; + this.cityDictionary = new LinkedHashMap();; if (action == getExisting){ updateDataset(); //after this make connections. ie filling in the country.cities airports.routes etc @@ -585,6 +585,7 @@ public class Dataset { 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 "; @@ -717,6 +718,54 @@ public class Dataset { } + public void addAirline(String name, String alias, String IATA, String ICAO, String callsign, String country, String active) throws DataException{ + Airline airlineToAdd = new Airline(name, alias, IATA, ICAO, callsign, country, active); + addAirline(airlineToAdd); + } + + public void addAirline(Airline airlineToAdd) throws DataException{ + if (airlineToAdd.getIATA().length() != 0 && airlineToAdd.getIATA().length() != 2){ + throw new DataException("IATA is either empty or length of 2 Letters."); + } + if (airlineToAdd.getICAO().length() != 0 && airlineToAdd.getICAO().length() != 3){ + throw new DataException("ICAO is either empty or length of 3 Letters."); + } + if (airlineToAdd.getActive().length() != 1){ + throw new DataException ("Active must be Y or N."); + } + for (String key : airlineDictionary.keySet()){ + airlineDictionary.get(key).hasDuplicate(airlineToAdd); + } + //checking is done now we add it to the dictionary and the database + //query database. + Connection c = null; + Statement stmt = null; + try { + Class.forName("org.sqlite.JDBC"); + c = DriverManager.getConnection("jdbc:sqlite:res/userdb.db"); + //add the airline + stmt = c.createStatement(); + String insertAirlineQuery = "INSERT INTO `" + this.name + "_Airline` (`Name`, `Alias`, `IATA`, `ICAO`" + + ", `Callsign`, `Country`, `Active`) VALUES (\""+airlineToAdd.getName()+"\", \"" + airlineToAdd.getAlias() + "\", " + + "\"" + airlineToAdd.getIATA() + "\", \"" + airlineToAdd.getICAO() + "\", \"" + airlineToAdd.getCallSign() + "\", " + + "\"" + airlineToAdd.getCountry() + "\", \"" + airlineToAdd.getActive() + "\");"; + stmt.execute(insertAirlineQuery); + //get the airline id + stmt = c.createStatement(); + String airlineIDQuery = "SELECT * FROM `sqlite_sequence` WHERE `name` = \""+this.name+"_Airline\" LIMIT 1;"; + ResultSet airlineIDRes= stmt.executeQuery(airlineIDQuery); + int airlineID = 0; + while (airlineIDRes.next()){ + airlineID = Integer.parseInt(airlineIDRes.getString("seq")); + } + airlineToAdd.setID(airlineID); + airlines.add(airlineToAdd); + } catch ( Exception e ) { + System.err.println( e.getClass().getName() + ": " + e.getMessage() ); + System.exit(0); + } + } + public ArrayList getAirlines() { return airlines; } diff --git a/src/main/java/seng202/group9/Core/Airline.java b/src/main/java/seng202/group9/Core/Airline.java index f98368b..e423c72 100644 --- a/src/main/java/seng202/group9/Core/Airline.java +++ b/src/main/java/seng202/group9/Core/Airline.java @@ -228,6 +228,29 @@ public class Airline { public void delRoutes(int index){ routes.remove(index); } + + /** + * checks if the airline has a duplicate unique entry to another. Used for validating + * @param airline + * @return + */ + public void hasDuplicate(Airline airline) throws DataException{ + if (this.name == airline.getName()){ + throw new DataException("This Airline Name already Exists, Please Choose Another."); + } + if (this.IATA != "" && this.IATA == airline.getIATA()){ + throw new DataException("This IATA Code already Exists, Please Choose Another."); + } + if (this.ICAO != "" && this.ICAO == airline.getICAO()){ + throw new DataException("This ICAO Code already Exists, Please Choose Another."); + } + if (this.alias != "" && this.alias == airline.getAlias()){ + throw new DataException("This Alias already Exists, Please Choose Another."); + } + if (this.callSign != "" && this.callSign == airline.getCallSign()){ + throw new DataException("This Callsign already Exists, Please Choose Another."); + } + } /** * returns the name of the airline when concatenated to a string. */