diff --git a/src/main/java/controllers/AddTripController.java b/src/main/java/controllers/AddTripController.java index 62ca31e..62e7fc3 100644 --- a/src/main/java/controllers/AddTripController.java +++ b/src/main/java/controllers/AddTripController.java @@ -63,17 +63,32 @@ public class AddTripController extends Controller{ sat.isSelected(), sun.isSelected()}; boolean boolReoccur = reoccur.getValue() == "Yes"; String failure = ""; + boolean fail = false; if (stops.size() == 0){ failure += "You have not selected a route.\n"; + fail = true; } if (ride.getValue() == null){ failure += "You must select a ride (vehicle) for this trip.\n"; + fail = true; + } + for (TripStop stop: stops){ + if (stop.getTime().equals("")){ + failure += "You must have all times for stops filled out.\n"; + fail = true; + break; + } } - if (!failure.equals("")) { - Trip trip = new Trip(stops, direction.getValue(), ride.getValue(), days, boolReoccur, endDate.getValue().toString()); + if (!fail) { + String date = ""; + if (endDate.getValue() != null && boolReoccur == true){ + date = endDate.getValue().toString(); + } + Trip trip = new Trip(stops, direction.getValue(), ride.getValue(), days, boolReoccur, date); System.out.println(trip); Optional result = popUp(Alert.AlertType.WARNING, "Warning!", "Crucial Information missing", failure, ButtonSets.YesNo); + parent.getSession().getDataManager().addTrip(trip); if (result.get() == ButtonTypes.No){ System.out.println("My Trips page to show up and impletmeneted");//TODO implement here. //changeScene(SceneCode.MY_TRIPS); diff --git a/src/main/java/model/DataManager.java b/src/main/java/model/DataManager.java index 78e19c1..6014032 100644 --- a/src/main/java/model/DataManager.java +++ b/src/main/java/model/DataManager.java @@ -15,19 +15,17 @@ public class DataManager { private ObservableList rides; private ObservableList stops; private ObservableList routes; + private ObservableList trips; - - public DataManager(List rides, List stops, List routes){ + public DataManager(List rides, List stops, List routes, List trips){ this.rides = FXCollections.observableArrayList(rides); this.stops = FXCollections.observableArrayList(stops); this.routes = FXCollections.observableArrayList(routes); + this.trips = FXCollections.observableArrayList(trips); } public DataManager(){ - this(FXCollections.observableArrayList(), FXCollections.observableArrayList(), FXCollections.observableArrayList()); - /*rides = FXCollections.observableArrayList(); - stops = FXCollections.observableArrayList(); - routes = FXCollections.observableArrayList();*/ + this(FXCollections.observableArrayList(), FXCollections.observableArrayList(), FXCollections.observableArrayList(), FXCollections.observableArrayList()); } public ObservableList getRides() { @@ -74,4 +72,18 @@ public class DataManager { return true; } + public ObservableList getTrips() { + return trips; + } + + public boolean addTrip(Trip trip){ + for (Trip t: trips){ + if (trip.equals(t)){ + return false; + } + } + trips.add(trip); + return true; + } + } diff --git a/src/main/java/model/Route.java b/src/main/java/model/Route.java index a5c4b60..a433124 100644 --- a/src/main/java/model/Route.java +++ b/src/main/java/model/Route.java @@ -46,6 +46,16 @@ public class Route { return true; } + @Override + public Route clone(){ + ObservableList stopObservableList = FXCollections.observableArrayList(); + for (Stop stop: stops){ + stopObservableList.add(stop.clone()); + } + Route route = new Route(this.name, stopObservableList); + return route; + } + public String toString(){ return this.name; } diff --git a/src/main/java/model/Stop.java b/src/main/java/model/Stop.java index 6f947b3..308b311 100644 --- a/src/main/java/model/Stop.java +++ b/src/main/java/model/Stop.java @@ -30,4 +30,9 @@ public class Stop { public String toString(){ return address; } + + @Override + public Stop clone(){ + return new Stop(this.getAddress()); + } } diff --git a/src/main/java/model/Trip.java b/src/main/java/model/Trip.java index e4ef571..adfd320 100644 --- a/src/main/java/model/Trip.java +++ b/src/main/java/model/Trip.java @@ -1,18 +1,23 @@ package model; +import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import java.util.ArrayList; +import java.util.Arrays; + /** * Created by Gondr on 5/04/2017. */ public class Trip { - ObservableList route; - String direction; - Ride ride; - boolean[] days; - boolean reoccur; - String endDate; + protected transient ObservableList route; + private ArrayList serialisedRoute; + protected String direction; + protected Ride ride; + protected boolean[] days; + protected boolean reoccur; + protected String endDate; static int MONDAY = 0; static int TUESDAY = 1; @@ -36,4 +41,31 @@ public class Trip { return tripString; } + public boolean equals(Trip trip){ + if (trip.direction.equals(direction) && ride.equals(trip.ride) && Arrays.equals(trip.days,days) && trip.reoccur == reoccur + && trip.endDate.equals(endDate)){ + for (int i = 0; i < trip.route.size(); i++){ + if (!route.get(i).equals(trip.route.get(i))){ + return false; + } + } + return true; + } + return false; + } + + public void serialise(){ + serialisedRoute = new ArrayList<>(route); + for (TripStop trip: serialisedRoute){ + trip.serialise(); + } + } + + public void deserialise(){ + route = FXCollections.observableArrayList(serialisedRoute); + for (TripStop trip: serialisedRoute){ + trip.deserialise(); + } + } + } diff --git a/src/main/java/model/TripStop.java b/src/main/java/model/TripStop.java index c0be4fe..99f7b65 100644 --- a/src/main/java/model/TripStop.java +++ b/src/main/java/model/TripStop.java @@ -9,8 +9,10 @@ import javafx.collections.ObservableList; */ public class TripStop{ - private StringProperty time; - private StringProperty name; + private transient StringProperty time; + private transient StringProperty name; + private String serialiseTime; + private String serialiseName; public TripStop(String name, String time){ this.name = new SimpleStringProperty(name); @@ -36,4 +38,20 @@ public class TripStop{ public StringProperty nameProperty() { return name; } + + protected boolean equals(TripStop trip){ + if (getTime().equals(trip.getTime()) && getName().equals(trip.getName())){ + return true; + } + return false; + } + + public void serialise(){ + serialiseTime = time.getValue(); + serialiseName = name.getValue(); + } + public void deserialise(){ + time = new SimpleStringProperty(serialiseTime); + name = new SimpleStringProperty(serialiseName); + } } diff --git a/src/main/java/utils/DataManagerSerialiser.java b/src/main/java/utils/DataManagerSerialiser.java index 62d9404..e72f49f 100644 --- a/src/main/java/utils/DataManagerSerialiser.java +++ b/src/main/java/utils/DataManagerSerialiser.java @@ -1,10 +1,7 @@ package utils; import com.google.gson.reflect.TypeToken; -import model.DataManager; -import model.Ride; -import model.Route; -import model.Stop; +import model.*; import java.io.*; import java.lang.reflect.Constructor; @@ -23,17 +20,30 @@ public class DataManagerSerialiser extends Serialiser { } + /** + * serialise DataManger + * @param dataManager + * @return + */ public boolean serialise(DataManager dataManager){ ArrayList rides = new ArrayList<>(dataManager.getRides()); ArrayList stops = new ArrayList<>(dataManager.getStops()); ArrayList routes = new ArrayList<>(dataManager.getRoutes()); + ArrayList trips = new ArrayList<>(dataManager.getTrips()); boolean serialRidesSuccess = serialise(rides, "serialisation/rides.json"); boolean serialStopsSuccess = serialise(stops, "serialisation/stops.json"); - boolean serialRoutesSuccess = serialise(routes, "serialisation/routes.json"); - return (serialRidesSuccess && serialStopsSuccess && serialRoutesSuccess); + boolean serialRoutesSuccess = serialiseRoutes(routes, "serialisation/routes.json"); + boolean serialTripsSuccess = serialiseTrips(trips, "serialisation/trips.json"); + return (serialRidesSuccess && serialStopsSuccess && serialRoutesSuccess && serialTripsSuccess); } - public boolean serialise(ArrayList routes, String filepath){ + /** + * Serialises routes + * @param routes Routes to be serialised + * @param filepath File path to serialise it to. + * @return + */ + public boolean serialiseRoutes(ArrayList routes, String filepath){ for (Route route: routes){ route.serialise(); } @@ -49,6 +59,37 @@ public class DataManagerSerialiser extends Serialiser { return true; } + /** + * Serialises trips + * @param trips Trips to be serialised + * @param filepath File path to serialise it to. + * @return + */ + public boolean serialiseTrips(ArrayList trips, String filepath){ + for (Trip trip: trips){ + trip.serialise(); + } + try{ + String path = getClass().getClassLoader().getResource(filepath).getPath(); + Writer writer = new OutputStreamWriter(new FileOutputStream(path), "UTF-8"); + gson.toJson(trips, writer); + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + /** + * loads the data manager from file + * @return whether the data was loaded properly or not + * @throws IOException No File + * @throws NoSuchMethodException No Method to Write + * @throws IllegalAccessException No access allowed to file + * @throws InvocationTargetException Thread error + * @throws InstantiationException Nothing set + */ public DataManager load() throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { Reader reader = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("serialisation/rides.json"), "UTF-8"); ArrayList rides = gson.fromJson(reader, new TypeToken>(){}.getType()); @@ -66,12 +107,15 @@ public class DataManagerSerialiser extends Serialiser { route.deserialise(); } -// Constructor c = DataManager.class.getDeclaredConstructor(List.class, List.class, List.class); -// DataManager dataManager = (DataManager) c.newInstance(rides, stops, routes); -// return dataManager; + Reader reader4 = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("serialisation/trips.json"), "UTF-8"); + ArrayList trips = gson.fromJson(reader4, new TypeToken>(){}.getType()); + reader4.close(); + + for (Trip trip: trips){ + trip.deserialise(); + } - return new DataManager(rides, stops, routes); -// return new DataManager(); + return new DataManager(rides, stops, routes, trips); } } diff --git a/src/main/resources/serialisation/datamanager.json b/src/main/resources/serialisation/datamanager.json deleted file mode 100644 index e940b44..0000000 --- a/src/main/resources/serialisation/datamanager.json +++ /dev/null @@ -1 +0,0 @@ -{"rides":[],"stops":[{"address":"a"}],"routes":[]} \ No newline at end of file diff --git a/src/main/resources/serialisation/trips.json b/src/main/resources/serialisation/trips.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/src/main/resources/serialisation/trips.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/target/classes/controllers/AddTripController$1.class b/target/classes/controllers/AddTripController$1.class index aad0f88..7f6d76d 100644 Binary files a/target/classes/controllers/AddTripController$1.class and b/target/classes/controllers/AddTripController$1.class differ diff --git a/target/classes/controllers/AddTripController$2.class b/target/classes/controllers/AddTripController$2.class index 5b62f4f..64b08ce 100644 Binary files a/target/classes/controllers/AddTripController$2.class and b/target/classes/controllers/AddTripController$2.class differ diff --git a/target/classes/controllers/AddTripController.class b/target/classes/controllers/AddTripController.class index 0f54883..e462fec 100644 Binary files a/target/classes/controllers/AddTripController.class and b/target/classes/controllers/AddTripController.class differ diff --git a/target/classes/model/DataManager.class b/target/classes/model/DataManager.class index 9487de1..cc4e63f 100644 Binary files a/target/classes/model/DataManager.class and b/target/classes/model/DataManager.class differ diff --git a/target/classes/model/Route.class b/target/classes/model/Route.class index 0441ec8..0c983e9 100644 Binary files a/target/classes/model/Route.class and b/target/classes/model/Route.class differ diff --git a/target/classes/model/Stop.class b/target/classes/model/Stop.class index ec3ff59..80a1fe8 100644 Binary files a/target/classes/model/Stop.class and b/target/classes/model/Stop.class differ diff --git a/target/classes/model/Trip.class b/target/classes/model/Trip.class index f52b0f7..2ab8e03 100644 Binary files a/target/classes/model/Trip.class and b/target/classes/model/Trip.class differ diff --git a/target/classes/model/TripStop.class b/target/classes/model/TripStop.class index 983649d..464c3a2 100644 Binary files a/target/classes/model/TripStop.class and b/target/classes/model/TripStop.class differ diff --git a/target/classes/serialisation/datamanager.json b/target/classes/serialisation/datamanager.json deleted file mode 100644 index e940b44..0000000 --- a/target/classes/serialisation/datamanager.json +++ /dev/null @@ -1 +0,0 @@ -{"rides":[],"stops":[{"address":"a"}],"routes":[]} \ No newline at end of file diff --git a/target/classes/serialisation/rides.json b/target/classes/serialisation/rides.json index 0637a08..3c39f97 100644 --- a/target/classes/serialisation/rides.json +++ b/target/classes/serialisation/rides.json @@ -1 +1 @@ -[] \ No newline at end of file +[{"model":"Nissan March","colour":"Baby Blue","licensePlate":"H19405661","year":2004,"numSeats":4}] \ No newline at end of file diff --git a/target/classes/serialisation/trips.json b/target/classes/serialisation/trips.json new file mode 100644 index 0000000..04f4a9f --- /dev/null +++ b/target/classes/serialisation/trips.json @@ -0,0 +1 @@ +[{"serialisedRoute":[{"serialiseTime":"3:00","serialiseName":"1 University Drive"},{"serialiseTime":"3:10","serialiseName":"1 Homestead Lane"}],"direction":"Home","ride":{"model":"Nissan March","colour":"Baby Blue","licensePlate":"H19405661","year":2004,"numSeats":4},"days":[true,false,false,false,false,false,false],"reoccur":false,"endDate":""}] \ No newline at end of file diff --git a/target/classes/utils/DataManagerSerialiser$1.class b/target/classes/utils/DataManagerSerialiser$1.class index 85fee9a..63474da 100644 Binary files a/target/classes/utils/DataManagerSerialiser$1.class and b/target/classes/utils/DataManagerSerialiser$1.class differ diff --git a/target/classes/utils/DataManagerSerialiser$2.class b/target/classes/utils/DataManagerSerialiser$2.class index eca642d..d9d6e98 100644 Binary files a/target/classes/utils/DataManagerSerialiser$2.class and b/target/classes/utils/DataManagerSerialiser$2.class differ diff --git a/target/classes/utils/DataManagerSerialiser$3.class b/target/classes/utils/DataManagerSerialiser$3.class index b35dbb4..b5d979f 100644 Binary files a/target/classes/utils/DataManagerSerialiser$3.class and b/target/classes/utils/DataManagerSerialiser$3.class differ diff --git a/target/classes/utils/DataManagerSerialiser$4.class b/target/classes/utils/DataManagerSerialiser$4.class new file mode 100644 index 0000000..e8cc7bf Binary files /dev/null and b/target/classes/utils/DataManagerSerialiser$4.class differ diff --git a/target/classes/utils/DataManagerSerialiser.class b/target/classes/utils/DataManagerSerialiser.class index ec04265..b4b11fd 100644 Binary files a/target/classes/utils/DataManagerSerialiser.class and b/target/classes/utils/DataManagerSerialiser.class differ