From bb535a74bf3063405e52eea96b4c867c458d1229 Mon Sep 17 00:00:00 2001 From: YaFedImYaEatIm Date: Mon, 19 Sep 2016 06:50:14 +1200 Subject: [PATCH] Added LOts of Brief Javadocs --- res/userdb.db | Bin 8387584 -> 8387584 bytes .../group9/Controller/AirlineFilter.java | 1 + .../group9/Controller/AirlineParser.java | 16 ++ .../group9/Controller/AirportFilter.java | 59 +++++++ .../group9/Controller/AirportParser.java | 24 +++ .../java/seng202/group9/Controller/App.java | 23 ++- .../seng202/group9/Controller/Dataset.java | 146 +++++++++++++++++- .../group9/Controller/FlightPathParser.java | 16 ++ .../group9/Controller/RouteFilter.java | 43 ++++++ .../group9/Controller/RouteParser.java | 16 ++ .../seng202/group9/Controller/SceneCode.java | 9 +- .../seng202/group9/Controller/Session.java | 16 ++ src/main/java/seng202/group9/Core/City.java | 3 + .../java/seng202/group9/Core/FlightPath.java | 3 + 14 files changed, 370 insertions(+), 5 deletions(-) diff --git a/res/userdb.db b/res/userdb.db index 421baa9d3d5309164634e9777c5a2f150d3e6717..45dbbdf60bb2baaf60ee649bc0d8136afe5f0d03 100644 GIT binary patch delta 26146 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 delta 27949 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 QCoGHYJ&I-SOt(k*UkOzQw*UYD diff --git a/src/main/java/seng202/group9/Controller/AirlineFilter.java b/src/main/java/seng202/group9/Controller/AirlineFilter.java index e48741e..dc1e149 100644 --- a/src/main/java/seng202/group9/Controller/AirlineFilter.java +++ b/src/main/java/seng202/group9/Controller/AirlineFilter.java @@ -164,6 +164,7 @@ public class AirlineFilter extends Filter{ for (Airline airline: arrayList){ baseArray.add(airline); } + reset(); } /** diff --git a/src/main/java/seng202/group9/Controller/AirlineParser.java b/src/main/java/seng202/group9/Controller/AirlineParser.java index 88cf428..1c59193 100644 --- a/src/main/java/seng202/group9/Controller/AirlineParser.java +++ b/src/main/java/seng202/group9/Controller/AirlineParser.java @@ -7,15 +7,27 @@ import seng202.group9.Core.Airline; import java.io.*; import java.util.ArrayList; +/** + * Created By Fan-Wu Yang (fwy13) + */ public class AirlineParser extends Parser { String filePath = ""; ArrayList parsedAirline; + /** + * Constructor takes in a filepath and waits for the parse() call. + * @param filePath + */ public AirlineParser(String filePath){ this.filePath = filePath; parsedAirline = new ArrayList(); } + /** + * Parses data and then returns a message of number of successful parses. + * @return + * @throws DataException + */ public String parse() throws DataException{ int successful = 0; int error = 0; @@ -122,6 +134,10 @@ public class AirlineParser extends Parser { "Airlines With Errors: %2$d", successful, error); } + /** + * Returns the result of the Parse. + * @return + */ public ArrayList getResult(){ return parsedAirline; } diff --git a/src/main/java/seng202/group9/Controller/AirportFilter.java b/src/main/java/seng202/group9/Controller/AirportFilter.java index 595d173..8ec6ba0 100644 --- a/src/main/java/seng202/group9/Controller/AirportFilter.java +++ b/src/main/java/seng202/group9/Controller/AirportFilter.java @@ -13,6 +13,10 @@ public class AirportFilter extends Filter{ private ArrayList baseArray; private ArrayList filteredList; + /** + * Constructor of the Airport FIlter. + * @param baseList + */ public AirportFilter(ArrayList baseList){ filteredList = new ArrayList(); baseArray = new ArrayList(); @@ -22,6 +26,10 @@ public class AirportFilter extends Filter{ } } + /** + * Filters the list by name Case Insensitive. + * @param name + */ public void filterName(String name){ String regexCode = "(?i).*"+name+".*"; int index = 0; @@ -34,6 +42,10 @@ public class AirportFilter extends Filter{ } } + /** + * filters the list by the city Case Insensitive. + * @param city + */ public void filterCity(String city){ String regexCode = "(?i).*"+city+".*"; int index = 0; @@ -46,6 +58,10 @@ public class AirportFilter extends Filter{ } } + /** + * Filters the list by Country Case Insensitive. + * @param country + */ public void filterCountry(String country){ String regexCode = "(?i).*"+country+".*"; int index = 0; @@ -58,6 +74,10 @@ public class AirportFilter extends Filter{ } } + /** + * FIlters list by IATA/FFA Case Insensitive. + * @param IATA_FFA + */ public void filterIATA_FFA(String IATA_FFA){ String regexCode = "(?i).*"+IATA_FFA+".*"; int index = 0; @@ -70,6 +90,10 @@ public class AirportFilter extends Filter{ } } + /** + * Filters the list by ICAO Case Insensitive. + * @param ICAO + */ public void filterICAO(String ICAO){ String regexCode = "(?i).*"+ICAO+".*"; int index = 0; @@ -82,6 +106,10 @@ public class AirportFilter extends Filter{ } } + /** + * FIlters the list by latitude Case Insensitive. + * @param latitude + */ public void filterLatitude(String latitude){ String regexCode = ".*"+latitude+".*"; int index = 0; @@ -94,6 +122,10 @@ public class AirportFilter extends Filter{ } } + /** + * Filters the list by longitude Case Insensitive. + * @param longitude + */ public void filterLongitude(String longitude){ String regexCode = ".*"+longitude+".*"; int index = 0; @@ -106,6 +138,10 @@ public class AirportFilter extends Filter{ } } + /** + * FIlters the list by Altitude Case Insensitive. + * @param altitude + */ public void filterAltitude(String altitude){ String regexCode = ".*"+altitude+".*"; int index = 0; @@ -118,6 +154,10 @@ public class AirportFilter extends Filter{ } } + /** + * FIlters the list by Timezeon Case Insensitive. + * @param timezone + */ public void filterTimezone(String timezone){ String regexCode = "(?i).*"+timezone+".*"; int index = 0; @@ -130,6 +170,10 @@ public class AirportFilter extends Filter{ } } + /** + * Filters the list by Olson Timezone format Case Insensitive. + * @param olson + */ public void filterOlson(String olson){ String regexCode = "(?i).*"+olson+".*"; int index = 0; @@ -142,6 +186,10 @@ public class AirportFilter extends Filter{ } } + /** + * Filters the list by DST Case Insensitive. + * @param DST + */ public void filterDST(String DST){ String regexCode = "(?i).*"+DST+".*"; int index = 0; @@ -154,6 +202,9 @@ public class AirportFilter extends Filter{ } } + /** + * Resets the list to it original state before filter + */ public void reset() { filteredList = new ArrayList(); for (Airport airport: filteredList){ @@ -161,6 +212,10 @@ public class AirportFilter extends Filter{ } } + /** + * gets the filtered list + * @return + */ public ArrayList getFilteredData() { return filteredList; } @@ -170,8 +225,12 @@ public class AirportFilter extends Filter{ for (Airport airport: arrayList){ baseArray.add(airport); } + reset(); } + /** + * prints the filtered list to console. + */ public void printFilter(){ for (Airport airport: filteredList){ System.out.println(airport); diff --git a/src/main/java/seng202/group9/Controller/AirportParser.java b/src/main/java/seng202/group9/Controller/AirportParser.java index b9cf410..f069973 100644 --- a/src/main/java/seng202/group9/Controller/AirportParser.java +++ b/src/main/java/seng202/group9/Controller/AirportParser.java @@ -11,12 +11,19 @@ import java.io.*; import java.lang.reflect.Array; import java.util.ArrayList; +/** + * created by Fan-Wu Yang(fwy13) + */ public class AirportParser extends Parser { String filePath = ""; ArrayList parsedAirports; ArrayList parsedCities; ArrayList parsedCountries; + /** + * Constructer is passed a file path which is then ready for the parse() call. + * @param filePath + */ public AirportParser(String filePath){ this.filePath = filePath; parsedAirports = new ArrayList(); @@ -24,6 +31,11 @@ public class AirportParser extends Parser { parsedCountries = new ArrayList(); } + /** + * Parses the given file and returns a succession message of how many entries were successfully parsed. + * @return + * @throws DataException + */ public String parse() throws DataException{ int successful = 0; int error = 0; @@ -173,14 +185,26 @@ public class AirportParser extends Parser { "Airports With Errors: %2$d", successful, error); } + /** + * gets the parsed Airport results + * @return + */ public ArrayList getResult(){ return parsedAirports; } + /** + * gets the parsed City restuls + * @return + */ public ArrayList getCityResult(){ return parsedCities; } + /** + * gets the parsed COuntry results + * @return + */ public ArrayList getCountryResult(){ return parsedCountries; } diff --git a/src/main/java/seng202/group9/Controller/App.java b/src/main/java/seng202/group9/Controller/App.java index 6d214a6..c1da482 100644 --- a/src/main/java/seng202/group9/Controller/App.java +++ b/src/main/java/seng202/group9/Controller/App.java @@ -18,7 +18,7 @@ import seng202.group9.GUI.*; /** * Main Application frame of the Flight Data Analyser. - * + * Created By Fan-Wu Yang (fwy13) */ public class App extends Application { @@ -132,24 +132,45 @@ public class App extends Application return (Initializable) loader.getController(); } + /** + * Returns the Menu COntroller of the App. + * @return + */ public MenuController getMenuController() { return menuController; } + /** + * returns the current dataset that the user is using. + * @return + */ public Dataset getCurrentDataset(){ return currentDataset; } + /** + * Creates new dataset. + * @param datasetName + * @throws DataException + */ public void createDataset(String datasetName) throws DataException{ Dataset newDataset = new Dataset(datasetName, Dataset.createNew); datasets.add(newDataset); currentDataset = newDataset; } + /** + * gets the amount of datasets the user has. + * @return + */ public ArrayList getDatasets() { return datasets; } + /** + * deletes a dataset. + * @param dataset + */ public void deleteDataset(Dataset dataset){ dataset.deleteDataset(); datasets.remove(dataset); diff --git a/src/main/java/seng202/group9/Controller/Dataset.java b/src/main/java/seng202/group9/Controller/Dataset.java index 5283824..5b26b75 100644 --- a/src/main/java/seng202/group9/Controller/Dataset.java +++ b/src/main/java/seng202/group9/Controller/Dataset.java @@ -819,6 +819,11 @@ public class Dataset { addAirline(airlineToAdd); } + /** + * Adds a Single Airline from the Program to the Database + * @param airlineToAdd + * @throws DataException + */ 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."); @@ -866,6 +871,21 @@ public class Dataset { createDataLinks(); } + /** + * Adds a single Airport from the Program to the Database + * @param name + * @param city + * @param country + * @param IATA_FFA + * @param ICAO + * @param latitude + * @param longitude + * @param altitude + * @param timezone + * @param DST + * @param olsonTz + * @throws DataException + */ public void addAirport(String name, String city, String country, String IATA_FFA, String ICAO, String latitude, String longitude, String altitude, String timezone, String DST, String olsonTz) throws DataException{ try{ @@ -892,10 +912,19 @@ public class Dataset { } } + /** + * gets the name of the dataset. + * @return + */ public String getName() { return name; } + /** + * Adds an Airport to the database and dataset. + * @param airportToAdd + * @throws DataException + */ private void addAirport(Airport airportToAdd) throws DataException{ if (airportToAdd.getIATA_FFA().length() != 0 && airportToAdd.getIATA_FFA().length() != 3){ throw new DataException("IATA/FFA either empty or 3 letters"); @@ -945,7 +974,11 @@ public class Dataset { } } - public void addCity(City city){ + /** + * Adds a city to the dataset and database + * @param city + */ + private void addCity(City city){ if (!cityDictionary.containsKey(city.getName())){ Connection c = null; Statement stmt = null; @@ -971,7 +1004,11 @@ public class Dataset { } } - public void addCountry(Country country){ + /** + * Adds a Country to the dataset and database + * @param country + */ + private void addCountry(Country country){ if (!countryDictionary.containsKey(country.getName())){ Connection c = null; Statement stmt = null; @@ -1020,6 +1057,11 @@ public class Dataset { addRoute(routeToAdd); } + /** + * Adds a single route the dataset and database. + * @param routeToAdd + * @throws DataException + */ public void addRoute(Route routeToAdd) throws DataException{ if (routeToAdd.getAirlineName().length() != 2 && routeToAdd.getAirlineName().length() != 3){ throw new DataException("Airline ICAO code must be 2 or 3 letters."); @@ -1198,18 +1240,43 @@ public class Dataset { flightPathDictionary.get(Integer.valueOf(id)).addFlightPoint(pointToAdd, index); } + /*** + * Adds a single flight Point to an Existing FLight Path. + * @param point + * @param index + * @throws DataException + */ public void addFlightPointToPath(FlightPoint point, int index) throws DataException{ addFlightPointToPath(point.getIndex(), point.getName(), point.getType(), point.getVia(), String.valueOf(point.getAltitude()), String.valueOf( point.getLatitude()),String.valueOf(point.getLongitude()), String.valueOf(point.getHeading()), String.valueOf(point.getLegDistance()), String.valueOf(point.getTotalDistance()), index); } - + /*** + * Adds a single flight Point to an Existing FLight Path appended on the end of the list. + * @param point + * @throws DataException + */ public void addFlightPointToPath(FlightPoint point) throws DataException{ addFlightPointToPath(point.getIndex(), point.getName(), point.getType(), point.getVia(), String.valueOf(point.getAltitude()), String.valueOf( point.getLatitude()),String.valueOf(point.getLongitude()), String.valueOf(point.getHeading()), String.valueOf(point.getLegDistance()), String.valueOf(point.getTotalDistance()), -1); } + /** + * Adds a single flight Point to an Existing FLight Path appended on the end of the list. + * @param id + * @param name + * @param type + * @param via + * @param altitude + * @param latitude + * @param longitude + * @param heading + * @param legDist + * @param totDist + * @throws DataException + */ + public void addFlightPointToPath(int id, String name, String type, String via, String altitude, String latitude, String longitude, String heading, String legDist, String totDist) throws DataException{ addFlightPointToPath(id, name, type, via, altitude, latitude, longitude, heading, legDist, totDist, -1); @@ -1302,6 +1369,10 @@ public class Dataset { createDataLinks(); } + /** + * Deletes an AIrline from the dataset and database based on it index + * @param index + */ public void deleteAirline(int index){ deleteAirline(airlines.get(index)); } @@ -1381,6 +1452,10 @@ public class Dataset { createDataLinks(); } + /** + * Deletes an Airport from the dataset and database based on it index. + * @param index + */ public void deleteAirport(int index){ deleteAirport(airports.get(index)); } @@ -1410,6 +1485,10 @@ public class Dataset { createDataLinks(); } + /** + * Deletes a Route from the dataset and database based on its index + * @param index + */ public void deleteRoute(int index){ deleteRoute(routes.get(index)); } @@ -1428,6 +1507,10 @@ public class Dataset { try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:res/userdb.db"); + stmt = c.createStatement(); + String deletePointsQuery = "DELETE FROM `"+this.name+"_FlightPoints` WHERE `Index_ID` = "+flightPath.getID()+ ";"; + stmt.execute(deletePointsQuery); + stmt.close(); String deleteQuery = "DELETE FROM `"+this.name+"_Flight_Path` WHERE `Path_ID` = " + flightPath.getID() + ";"; stmt = c.createStatement(); stmt.execute(deleteQuery); @@ -1444,6 +1527,10 @@ public class Dataset { } } + /** + * Deletes a flight path from the database based on its index. + * @param index + */ public void deleteFlightPath(int index){ deleteFlightPath(flightPaths.get(index)); } @@ -1470,54 +1557,107 @@ public class Dataset { flightPath.getFlightPoints().remove(flightPoint); } + /** + * deletes a single flight point from a given path. + * @param pathIndex + * @param pointIndex + */ public void deleteFlightPoint(int pathIndex, int pointIndex){ deleteFlightPoint(flightPathDictionary.get(pathIndex).getFlightPoints().get(pointIndex), flightPathDictionary.get(pathIndex)); } + /** + * returns the airlines that are part of this dataset. + * @return + */ public ArrayList getAirlines() { return airlines; } + /** + * returns the airports that are associated with this dataset. + * @return + */ public ArrayList getAirports() { return airports; } + /** + * returns the routes that are associated with this dataset. + * @return + */ public ArrayList getRoutes() { return routes; } + /** + * returns the flight paths that are associated with this dataset. + * @return + */ public ArrayList getFlightPaths() { return flightPaths; } + /** + * returns the countries that are associated with this dataset. + * @return + */ public ArrayList getCountries() { return countries; } + /** + * returns the cities that are associate wit hthis dataset. + * @return + */ public ArrayList getCities() { return cities; } + /** + * returns a dictionary with the airlines that are associated with this datatset. + * @return + */ public LinkedHashMap getAirlineDictionary() { return airlineDictionary; } + /** + * returns a dictionary with the airports that are associated with this dataset. + * @return + */ public LinkedHashMap getAirportDictionary() { return airportDictionary; } + /** + * returns a route dictionary with the routes that are associated wit hthis dataset. + * @return + */ public LinkedHashMap getRouteDictionary() { return routeDictionary; } + /** + * returns a flightpath dictionary with the flights that are associated with this dataset. + * @return + */ public LinkedHashMap getFlightPathDictionary() { return flightPathDictionary; } + /** + * returns a Country Dictionary with the COuntries that are associated with this dataset. + * @return + */ public LinkedHashMap getCountryDictionary() { return countryDictionary; } + /** + * returns a City Dictionary with the Cities that are associated with this datatset. + * @return + */ public LinkedHashMap getCityDictionary() { return cityDictionary; } diff --git a/src/main/java/seng202/group9/Controller/FlightPathParser.java b/src/main/java/seng202/group9/Controller/FlightPathParser.java index 7766e69..84b7c9f 100644 --- a/src/main/java/seng202/group9/Controller/FlightPathParser.java +++ b/src/main/java/seng202/group9/Controller/FlightPathParser.java @@ -5,15 +5,27 @@ import seng202.group9.Core.FlightPoint; import java.io.*; import java.util.ArrayList; +/** + * Created by Fan-Wu Yang(fwy13) + */ public class FlightPathParser extends Parser { String filePath = ""; ArrayList parsedPoints; + /** + * Constructor for parsing flight paths, reads in a file and gets it ready for the parse() call. + * @param filePath + */ public FlightPathParser(String filePath){ this.filePath = filePath; parsedPoints = new ArrayList(); } + /** + * Parses the file that and returns a success message. + * @return + * @throws DataException + */ public String parse() throws DataException{ int successful = 0; int error = 0; @@ -151,6 +163,10 @@ public class FlightPathParser extends Parser { "Flight Points With Errors: %2$d", successful, error); } + /** + * returns the resultant Flight points that are successfully parsed. + * @return + */ public ArrayList getResult(){ return parsedPoints; } diff --git a/src/main/java/seng202/group9/Controller/RouteFilter.java b/src/main/java/seng202/group9/Controller/RouteFilter.java index 89dc1d2..49cb8fe 100644 --- a/src/main/java/seng202/group9/Controller/RouteFilter.java +++ b/src/main/java/seng202/group9/Controller/RouteFilter.java @@ -12,6 +12,10 @@ public class RouteFilter extends Filter{ private ArrayList baseArray; private ArrayList filteredList; + /** + * Constructor which takes in a base List which all data is filtered from. + * @param baseList + */ public RouteFilter(ArrayList baseList){ filteredList = new ArrayList(); baseArray = new ArrayList(); @@ -21,6 +25,10 @@ public class RouteFilter extends Filter{ } } + /** + * Filters the list by the Airline Case Insensitive. + * @param airline + */ public void filterAirline(String airline){ String regexCode = "(?i).*"+airline+".*"; int index = 0; @@ -33,6 +41,10 @@ public class RouteFilter extends Filter{ } } + /** + * filters list by Airport Case Insensitive. + * @param airport + */ public void filterSourceAirport(String airport){ String regexCode = "(?i).*"+airport+".*"; int index = 0; @@ -45,6 +57,10 @@ public class RouteFilter extends Filter{ } } + /** + * filters lsit by destination airport Case Insensitive. + * @param airport + */ public void filterDestinationAirport(String airport){ String regexCode = "(?i).*"+airport+".*"; int index = 0; @@ -57,6 +73,10 @@ public class RouteFilter extends Filter{ } } + /** + * filters the list by its codeshare Case Insensitive. + * @param code + */ public void filterCodeshare(String code){ String regexCode = "(?i).*"+code+".*"; int index = 0; @@ -69,6 +89,10 @@ public class RouteFilter extends Filter{ } } + /** + * filters the list by how many stops it does Case Insensitive, Doesn't have to match exactly. + * @param stops + */ public void filterDestinationStops(String stops){ String regexCode = "(?i).*"+stops+".*"; int index = 0; @@ -81,6 +105,10 @@ public class RouteFilter extends Filter{ } } + /** + * filters the list by the equipment used for the route Case Insensitive. + * @param equipment + */ public void filterEquipment(String equipment){ String regexCode = "(?i).*"+equipment+".*"; int index = 0; @@ -93,6 +121,9 @@ public class RouteFilter extends Filter{ } } + /** + * resets the list to what the baselist. + */ public void reset() { filteredList = new ArrayList(); for (Route airline: filteredList){ @@ -100,17 +131,29 @@ public class RouteFilter extends Filter{ } } + /** + * get the filnal filtered array. + * @return + */ public ArrayList getFilteredData() { return filteredList; } + /** + * sets the new baselist. + * @param arrayList + */ public void setBaseList(ArrayList arrayList) { baseArray = new ArrayList(); for (Route route: arrayList){ baseArray.add(route); } + reset(); } + /** + * prints the filtered list to Console. + */ public void printFilter(){ for (Route route: filteredList){ System.out.println(route); diff --git a/src/main/java/seng202/group9/Controller/RouteParser.java b/src/main/java/seng202/group9/Controller/RouteParser.java index e27db6f..3c705a9 100644 --- a/src/main/java/seng202/group9/Controller/RouteParser.java +++ b/src/main/java/seng202/group9/Controller/RouteParser.java @@ -5,15 +5,27 @@ import seng202.group9.Core.Route; import java.io.*; import java.util.ArrayList; +/** + * Created By Fan-Wu Yang(fwy13) + */ public class RouteParser extends Parser { String filePath = ""; ArrayList parsedRoutes; + /** + * Constructor for Route Parser takes in a file and gets ready for the parse() call. + * @param filePath + */ public RouteParser(String filePath){ this.filePath = filePath; parsedRoutes = new ArrayList(); } + /** + * parses the given file for ROutes. + * @return + * @throws DataException + */ public String parse() throws DataException{ int successful = 0; int error = 0; @@ -153,6 +165,10 @@ public class RouteParser extends Parser { "Routes With Errors: %2$d", successful, error); } + /** + * returns the final successful results. + * @return + */ public ArrayList getResult(){ return parsedRoutes; } diff --git a/src/main/java/seng202/group9/Controller/SceneCode.java b/src/main/java/seng202/group9/Controller/SceneCode.java index b93cb68..de69752 100644 --- a/src/main/java/seng202/group9/Controller/SceneCode.java +++ b/src/main/java/seng202/group9/Controller/SceneCode.java @@ -2,6 +2,7 @@ package seng202.group9.Controller; /** * Created by fwy13 on 16/09/16. + * SceneCode enum is used for Serialization of sessions as well as changing the GUI state from one to the other. */ public enum SceneCode { INITIAL(""), AIRLINE_SUMMARY("airline_summary.fxml"), AIRLINE_RAW_DATA("airline_raw_data.fxml"), @@ -12,10 +13,16 @@ public enum SceneCode { private String filePath; + /** + * COnstructor for Scene + * @param filePath + */ SceneCode(String filePath){ this.filePath = filePath; } - + /** + * gets the filepath of the specific scene + */ public String getFilePath(){ return filePath; } diff --git a/src/main/java/seng202/group9/Controller/Session.java b/src/main/java/seng202/group9/Controller/Session.java index 3b6ceaa..cea2041 100644 --- a/src/main/java/seng202/group9/Controller/Session.java +++ b/src/main/java/seng202/group9/Controller/Session.java @@ -4,23 +4,39 @@ import java.io.Serializable; /** * Created by fwy13 on 16/09/16. + * Users last session state is store here. */ public class Session implements Serializable { private SceneCode sceneDisplayed; + /** + * Constructor for a new session + */ public Session(){ //blank constructor this.sceneDisplayed = SceneCode.INITIAL; } + /** + * Constructor for a previous session. + * @param scene + */ public Session(SceneCode scene){ this.sceneDisplayed = scene; } + /** + * changes the serialized scene. + * @param sceneDisplayed + */ public void setSceneDisplayed(SceneCode sceneDisplayed) { this.sceneDisplayed = sceneDisplayed; } + /** + * gets the last scene displayed. + * @return + */ public SceneCode getSceneDisplayed() { return sceneDisplayed; } diff --git a/src/main/java/seng202/group9/Core/City.java b/src/main/java/seng202/group9/Core/City.java index ed3fdbd..069c183 100644 --- a/src/main/java/seng202/group9/Core/City.java +++ b/src/main/java/seng202/group9/Core/City.java @@ -4,6 +4,9 @@ import seng202.group9.Controller.DataException; import java.util.ArrayList; +/** + * Created By Fan-Wu Yang. + */ public class City { private String name; private String country; diff --git a/src/main/java/seng202/group9/Core/FlightPath.java b/src/main/java/seng202/group9/Core/FlightPath.java index ce4492c..fb24246 100644 --- a/src/main/java/seng202/group9/Core/FlightPath.java +++ b/src/main/java/seng202/group9/Core/FlightPath.java @@ -4,6 +4,9 @@ import seng202.group9.Controller.DataException; import java.util.ArrayList; +/** + * Created By Fan-Wu Yang + */ public class FlightPath { private int ID; private ArrayList flightPoints;