From 1ecbe8db4a463f50338127403db9dcb84fa2523a Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Fri, 2 Jun 2017 04:25:15 +1200 Subject: [PATCH] Story 5 done --- .../java/controllers/AddTripController.java | 6 +- src/main/java/controllers/BaseController.java | 8 ++ src/main/java/controllers/Main.java | 3 +- src/main/java/controllers/MainController.java | 1 + .../controllers/MyBookingsController.java | 108 +++++++++++++++ .../controllers/MySharedTripsController.java | 107 +++++++++++++++ .../java/controllers/MyTripsController.java | 2 +- .../controllers/SharedTripsController.java | 1 + src/main/java/model/DataManager.java | 10 ++ src/main/java/model/Driver.java | 24 ++++ src/main/java/model/SceneCode.java | 3 +- src/main/java/model/SharedTrip.java | 13 +- src/main/java/model/Trip.java | 5 +- src/main/java/model/User.java | 27 +++- src/main/resources/scenes/base.fxml | 12 +- src/main/resources/scenes/mybookedtrips.fxml | 129 ++++++++++++++++++ src/main/resources/scenes/mysharedtrips.fxml | 129 ++++++++++++++++++ .../controllers/AddTripController$1.class | Bin 1896 -> 1896 bytes .../controllers/AddTripController$2.class | Bin 2104 -> 2104 bytes .../controllers/AddTripController.class | Bin 8829 -> 8766 bytes .../classes/controllers/BaseController.class | Bin 3170 -> 3409 bytes target/classes/controllers/Main.class | Bin 6917 -> 6981 bytes .../classes/controllers/MainController.class | Bin 4278 -> 4219 bytes .../controllers/MyBookingsController$1.class | Bin 0 -> 1080 bytes .../controllers/MyBookingsController.class | Bin 0 -> 6151 bytes .../MySharedTripsController$1.class | Bin 0 -> 1098 bytes .../controllers/MySharedTripsController.class | Bin 0 -> 6243 bytes .../controllers/MyTripsController.class | Bin 7822 -> 7879 bytes .../controllers/SharedTripsController.class | Bin 12420 -> 12373 bytes target/classes/model/DataManager.class | Bin 13345 -> 13631 bytes target/classes/model/Driver$LicenseType.class | Bin 1589 -> 1589 bytes target/classes/model/Driver.class | Bin 1274 -> 2002 bytes target/classes/model/SceneCode.class | Bin 2691 -> 2853 bytes target/classes/model/SharedTrip.class | Bin 1822 -> 2033 bytes target/classes/model/Trip$Days.class | Bin 1669 -> 1669 bytes target/classes/model/Trip.class | Bin 2957 -> 3017 bytes target/classes/model/User$AccountType.class | Bin 1464 -> 1464 bytes target/classes/model/User.class | Bin 2710 -> 3933 bytes target/classes/scenes/base.fxml | 12 +- target/classes/scenes/mybookedtrips.fxml | 129 ++++++++++++++++++ target/classes/scenes/mysharedtrips.fxml | 129 ++++++++++++++++++ target/classes/serialisation/drivers.json | 2 +- target/classes/serialisation/sharedtrips.json | 2 +- target/classes/serialisation/trips.json | 2 +- target/maven-archiver/pom.properties | 5 - .../compile/default-compile/createdFiles.lst | 25 ---- .../compile/default-compile/inputFiles.lst | 22 --- .../default-testCompile/createdFiles.lst | 4 - .../default-testCompile/inputFiles.lst | 4 - target/ride-sharing-system-1.0-SNAPSHOT.jar | Bin 37377 -> 0 bytes .../TEST-controllers.MainControllerTest.xml | 67 --------- .../TEST-model.DataManagerTest.xml | 69 ---------- .../controllers.MainControllerTest.txt | 4 - .../model.DataManagerTest.txt | 4 - 54 files changed, 847 insertions(+), 221 deletions(-) create mode 100644 src/main/java/controllers/MyBookingsController.java create mode 100644 src/main/java/controllers/MySharedTripsController.java create mode 100644 src/main/resources/scenes/mybookedtrips.fxml create mode 100644 src/main/resources/scenes/mysharedtrips.fxml create mode 100644 target/classes/controllers/MyBookingsController$1.class create mode 100644 target/classes/controllers/MyBookingsController.class create mode 100644 target/classes/controllers/MySharedTripsController$1.class create mode 100644 target/classes/controllers/MySharedTripsController.class create mode 100644 target/classes/scenes/mybookedtrips.fxml create mode 100644 target/classes/scenes/mysharedtrips.fxml delete mode 100644 target/maven-archiver/pom.properties delete mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst delete mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst delete mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst delete mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst delete mode 100644 target/ride-sharing-system-1.0-SNAPSHOT.jar delete mode 100644 target/surefire-reports/TEST-controllers.MainControllerTest.xml delete mode 100644 target/surefire-reports/TEST-model.DataManagerTest.xml delete mode 100644 target/surefire-reports/controllers.MainControllerTest.txt delete mode 100644 target/surefire-reports/model.DataManagerTest.txt diff --git a/src/main/java/controllers/AddTripController.java b/src/main/java/controllers/AddTripController.java index 24590be..f8cd457 100644 --- a/src/main/java/controllers/AddTripController.java +++ b/src/main/java/controllers/AddTripController.java @@ -88,11 +88,7 @@ public class AddTripController extends Controller{ } if (!fail) { - String date = ""; - if (endDate.getValue() != null && boolReoccur == true){ - date = endDate.getValue().toString(); - } - Trip trip = new Trip(tripName.getText() ,stops, direction.getValue(), ride.getValue(), days, boolReoccur, date); + Trip trip = new Trip(tripName.getText() ,stops, direction.getValue(), ride.getValue(), days, boolReoccur, endDate.getValue()); System.out.println(trip); Optional result = popUp(Alert.AlertType.CONFIRMATION, "Success!", "Trip Added", String.format("Your Trip %1s has been added successfully!\n\nWould you like to add another trip?", tripName.getText()), ButtonSets.YesNo); parent.getSession().getDataManager().addTrip(trip); diff --git a/src/main/java/controllers/BaseController.java b/src/main/java/controllers/BaseController.java index b53dd02..3ccdb56 100644 --- a/src/main/java/controllers/BaseController.java +++ b/src/main/java/controllers/BaseController.java @@ -66,6 +66,14 @@ public class BaseController extends Controller { changeScene(SceneCode.SHARED_RIDES); } + public void mySharedRides() throws Exception{ + changeScene(SceneCode.MY_SHARED_RIDES); + } + + public void myBookings() throws Exception{ + changeScene(SceneCode.MY_BOOKINGS); + } + public void setContent(Parent parent1){ //remove all children that do not belong to the original fxml while (base.getChildren().size() > childNum) { diff --git a/src/main/java/controllers/Main.java b/src/main/java/controllers/Main.java index 2289dd6..7e37e92 100644 --- a/src/main/java/controllers/Main.java +++ b/src/main/java/controllers/Main.java @@ -17,6 +17,7 @@ import utils.DataManagerSerialiser; import java.io.IOException; import java.io.InputStream; +import java.time.LocalDate; /** @@ -73,7 +74,7 @@ public class Main extends Application { ObservableList tripStops = FXCollections.observableArrayList(); tripStops.addAll(tripStop1, tripStop4); - Trip trip = new Trip("Home to Uni", tripStops, "University", ride, days, true, "30-12-2017"); + Trip trip = new Trip("Home to Uni", tripStops, "University", ride, days, true, LocalDate.of(2017, 12, 30)); this.session.getDataManager().addRides(ride); diff --git a/src/main/java/controllers/MainController.java b/src/main/java/controllers/MainController.java index 438ea11..2f4e6a3 100644 --- a/src/main/java/controllers/MainController.java +++ b/src/main/java/controllers/MainController.java @@ -51,6 +51,7 @@ public class MainController extends Controller{ for (String s: notifications){ popUp(Alert.AlertType.INFORMATION, "Notification!", "You have received a Notification", s); } + notifications.clear(); } } diff --git a/src/main/java/controllers/MyBookingsController.java b/src/main/java/controllers/MyBookingsController.java new file mode 100644 index 0000000..40f1df2 --- /dev/null +++ b/src/main/java/controllers/MyBookingsController.java @@ -0,0 +1,108 @@ +package controllers; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.*; +import javafx.scene.paint.Color; +import model.*; + +import java.net.URL; +import java.util.Comparator; +import java.util.Optional; +import java.util.ResourceBundle; + +/** + * Created by Gondr on 2/06/2017. + */ +public class MyBookingsController extends Controller { + @FXML + private Label rideLabel; + @FXML + private Label directionLabel; + @FXML + private Label mondayLabel; + @FXML + private Label tuesdayLabel; + @FXML + private Label wednesdayLabel; + @FXML + private Label thursdayLabel; + @FXML + private Label fridayLabel; + @FXML + private Label saturdayLabel; + @FXML + private Label sundayLabel; + @FXML + private Label reoccuringLabel; + @FXML + private Label endDateLabel; + @FXML + private TableView stopsList; + @FXML + private ListView tripsList; + private ObservableList trips; + @FXML + private TableColumn stopTimeColumn; + @FXML + private TableColumn stopNameColumn; + private Trip selectedTrip; + + private void setRideDays(Label day, boolean travelling){ + if (travelling){ + day.setTextFill(Color.GREEN); + }else{ + day.setTextFill(Color.RED); + } + } + + public void cancelRide(){ + + } + + @Override + public void runLater(){ + //fill tables etc; + Session.session.getUser().populateBookings(); + trips = FXCollections.observableArrayList(Session.session.getUser().getBookings()); + Comparator comparatorByStartDate = new Comparator() { + @Override + public int compare(SharedTrip o1, SharedTrip o2) { + return (int)(o1.getStartDate().toEpochDay() - o2.getStartDate().toEpochDay()); + } + }; + FXCollections.sort(trips, comparatorByStartDate); + tripsList.setItems(trips); + stopTimeColumn.setCellValueFactory(p -> p.getValue().nameProperty()); + stopNameColumn.setCellValueFactory(p -> p.getValue().nameProperty()); + tripsList.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + selectedTrip = tripsList.getSelectionModel().getSelectedItem(); + stopsList.setItems(selectedTrip.route); + rideLabel.setText(selectedTrip.ride.toString()); + directionLabel.setText(selectedTrip.direction); + setRideDays(mondayLabel, selectedTrip.days[Trip.MONDAY]); + setRideDays(tuesdayLabel, selectedTrip.days[Trip.TUESDAY]); + setRideDays(wednesdayLabel, selectedTrip.days[Trip.WEDNESDAY]); + setRideDays(thursdayLabel, selectedTrip.days[Trip.THURSDAY]); + setRideDays(fridayLabel, selectedTrip.days[Trip.FRIDAY]); + setRideDays(saturdayLabel, selectedTrip.days[Trip.SATURDAY]); + setRideDays(sundayLabel, selectedTrip.days[Trip.SUNDAY]); + if (selectedTrip.reoccur){ + reoccuringLabel.setText("Yes"); + endDateLabel.setText(selectedTrip.endDate.toString()); + }else{ + reoccuringLabel.setText("No"); + endDateLabel.setText("-"); + } + }); + } + + @Override + public void initialize(URL location, ResourceBundle resources) { + rideLabel.setText("-"); + directionLabel.setText("-"); + reoccuringLabel.setText("-"); + endDateLabel.setText("-"); + } +} diff --git a/src/main/java/controllers/MySharedTripsController.java b/src/main/java/controllers/MySharedTripsController.java new file mode 100644 index 0000000..b70ecb0 --- /dev/null +++ b/src/main/java/controllers/MySharedTripsController.java @@ -0,0 +1,107 @@ +package controllers; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.*; +import javafx.scene.paint.Color; +import model.*; + +import java.net.URL; +import java.util.Comparator; +import java.util.Optional; +import java.util.ResourceBundle; + +/** + * Created by Gondr on 2/06/2017. + */ +public class MySharedTripsController extends Controller{ + @FXML + private Label rideLabel; + @FXML + private Label directionLabel; + @FXML + private Label mondayLabel; + @FXML + private Label tuesdayLabel; + @FXML + private Label wednesdayLabel; + @FXML + private Label thursdayLabel; + @FXML + private Label fridayLabel; + @FXML + private Label saturdayLabel; + @FXML + private Label sundayLabel; + @FXML + private Label reoccuringLabel; + @FXML + private Label endDateLabel; + @FXML + private TableView stopsList; + @FXML + private ListView tripsList; + private ObservableList trips; + @FXML + private TableColumn stopTimeColumn; + @FXML + private TableColumn stopNameColumn; + private SharedTrip selectedTrip; + + private void setRideDays(Label day, boolean travelling){ + if (travelling){ + day.setTextFill(Color.GREEN); + }else{ + day.setTextFill(Color.RED); + } + } + + public void cancelRide(){ + + } + + @Override + public void runLater(){ + //fill tables etc; + trips = FXCollections.observableArrayList(parent.getSession().getDataManager().getSharedTrips()); + tripsList.setItems(trips); + Comparator comparatorByStartDate = new Comparator() { + @Override + public int compare(SharedTrip o1, SharedTrip o2) { + return (int)(o1.getStartDate().toEpochDay() - o2.getStartDate().toEpochDay()); + } + }; + FXCollections.sort(trips, comparatorByStartDate); + stopTimeColumn.setCellValueFactory(p -> p.getValue().nameProperty()); + stopNameColumn.setCellValueFactory(p -> p.getValue().nameProperty()); + tripsList.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + selectedTrip = tripsList.getSelectionModel().getSelectedItem(); + stopsList.setItems(selectedTrip.route); + rideLabel.setText(selectedTrip.ride.toString()); + directionLabel.setText(selectedTrip.direction); + setRideDays(mondayLabel, selectedTrip.days[Trip.MONDAY]); + setRideDays(tuesdayLabel, selectedTrip.days[Trip.TUESDAY]); + setRideDays(wednesdayLabel, selectedTrip.days[Trip.WEDNESDAY]); + setRideDays(thursdayLabel, selectedTrip.days[Trip.THURSDAY]); + setRideDays(fridayLabel, selectedTrip.days[Trip.FRIDAY]); + setRideDays(saturdayLabel, selectedTrip.days[Trip.SATURDAY]); + setRideDays(sundayLabel, selectedTrip.days[Trip.SUNDAY]); + if (selectedTrip.reoccur){ + reoccuringLabel.setText("Yes"); + endDateLabel.setText(selectedTrip.endDate.toString()); + }else{ + reoccuringLabel.setText("No"); + endDateLabel.setText("-"); + } + }); + } + + @Override + public void initialize(URL location, ResourceBundle resources) { + rideLabel.setText("-"); + directionLabel.setText("-"); + reoccuringLabel.setText("-"); + endDateLabel.setText("-"); + } +} diff --git a/src/main/java/controllers/MyTripsController.java b/src/main/java/controllers/MyTripsController.java index 381308c..e95ec14 100644 --- a/src/main/java/controllers/MyTripsController.java +++ b/src/main/java/controllers/MyTripsController.java @@ -109,7 +109,7 @@ public class MyTripsController extends Controller{ setRideDays(sundayLabel, selectedTrip.days[Trip.SUNDAY]); if (selectedTrip.reoccur){ reoccuringLabel.setText("Yes"); - endDateLabel.setText(selectedTrip.endDate); + endDateLabel.setText(selectedTrip.endDate.toString()); }else{ reoccuringLabel.setText("No"); endDateLabel.setText("-"); diff --git a/src/main/java/controllers/SharedTripsController.java b/src/main/java/controllers/SharedTripsController.java index 82239d5..8adcd0a 100644 --- a/src/main/java/controllers/SharedTripsController.java +++ b/src/main/java/controllers/SharedTripsController.java @@ -130,6 +130,7 @@ public class SharedTripsController extends Controller{ Button bookRide = new Button("Book Ride"); bookRide.setOnAction(e->{ trip.bookSeat(Session.session.getUser()); + Session.session.getUser().book(trip); tripDetails.close(); search(); popUp(Alert.AlertType.CONFIRMATION, "Success!", "You have Successfully booked a ride!", "The ride has been successfully booked and can be viewed in your booked rides."); diff --git a/src/main/java/model/DataManager.java b/src/main/java/model/DataManager.java index 12780b8..f84d794 100644 --- a/src/main/java/model/DataManager.java +++ b/src/main/java/model/DataManager.java @@ -161,7 +161,17 @@ public class DataManager { routes.putIfAbsent(Session.session.getUser().getID(), FXCollections.observableArrayList()); trips.putIfAbsent(Session.session.getUser().getID(), FXCollections.observableArrayList()); sharedTrips.putIfAbsent(Session.session.getUser().getID(), FXCollections.observableArrayList()); + if (Session.session.getUser().bookings == null) { + Session.session.getUser().bookings = new ArrayList<>(); + } notifications.putIfAbsent(Session.session.getUser().getID(), FXCollections.observableArrayList()); + //expiry things for Driver + if (Session.session.getUser() instanceof Driver){ + String licenseOverdue = ((Driver)Session.session.getUser()).getLicenseNotification(); + if (licenseOverdue != null){ + notifications.get(Session.session.getUser().getID()).add(licenseOverdue); + } + } } ////////////////////////////// //Getters and Setters diff --git a/src/main/java/model/Driver.java b/src/main/java/model/Driver.java index 29b4d0e..e90d09a 100644 --- a/src/main/java/model/Driver.java +++ b/src/main/java/model/Driver.java @@ -14,6 +14,7 @@ public class Driver extends User{ protected String licenseNumber; protected LocalDate licenseDateIssued; protected LocalDate licenseDateExpire; + private LocalDate lastNotified; public enum LicenseType{ RESTRICTED("Restricted"), FULL("Full"), FULL2YEARS("Full for 2 Years"); @@ -44,6 +45,29 @@ public class Driver extends User{ this.licenseNumber = licenseNumber; this.licenseDateIssued = licenseDateIssued; this.licenseDateExpire = licenseDateExpire; + lastNotified = LocalDate.MIN; + } + + public String getLicenseNotification(){ + if (licenseDateExpire.minusWeeks(4).isBefore(LocalDate.now())){ + if (licenseDateExpire.minusWeeks(2).isBefore(LocalDate.now())){ + if (licenseDateExpire.minusWeeks(1).isBefore(LocalDate.now())){ + if (licenseDateExpire.minusWeeks(1).isAfter(lastNotified)){ + lastNotified = LocalDate.now(); + return "Your License is expiring in 1 weeks."; + } + } + if (licenseDateExpire.minusWeeks(2).isAfter(lastNotified)){ + lastNotified = LocalDate.now(); + return "Your License is expiring in 2 weeks."; + } + } + if (licenseDateExpire.minusWeeks(4).isAfter(lastNotified)){ + lastNotified = LocalDate.now(); + return "Your License is expiring in 4 weeks."; + } + } + return null; } } diff --git a/src/main/java/model/SceneCode.java b/src/main/java/model/SceneCode.java index bd3b029..bb23777 100644 --- a/src/main/java/model/SceneCode.java +++ b/src/main/java/model/SceneCode.java @@ -16,7 +16,8 @@ public enum SceneCode { //screens after login HOME("home"),ADD_RIDE("addride"),MY_RIDES("myrides"), ADD_STOPS("addstops"), MY_STOPS("mystops"), ADD_ROUTE("addroute"), MY_ROUTES("myroutes"), ADD_TRIP("addtrip"), MY_TRIPS("mytrips"), SHARED_RIDES("sharedtrips"), SEARCH_STOPS("searchstops"), - REGISTER("register", false), ADD_PHOTO("addphoto", false), REGISTER_DRIVER("registerdriver", false); + REGISTER("register", false), ADD_PHOTO("addphoto", false), REGISTER_DRIVER("registerdriver", false), MY_SHARED_RIDES("mysharedtrips"), + MY_BOOKINGS("mybookedtrips"); private String path; private boolean loadMenu; diff --git a/src/main/java/model/SharedTrip.java b/src/main/java/model/SharedTrip.java index 41a7dcc..3355ed4 100644 --- a/src/main/java/model/SharedTrip.java +++ b/src/main/java/model/SharedTrip.java @@ -1,5 +1,7 @@ package model; +import java.time.LocalDate; + /** * Created by Gondr on 28/05/2017. */ @@ -7,14 +9,19 @@ public class SharedTrip extends Trip { private int seatsAvailable; - private User[] userBookings; + protected User[] userBookings; + + private LocalDate startDate; public SharedTrip (Trip trip, int seatsAvailable){ super(trip.name, trip.route, trip.direction, trip.ride, trip.days, trip.reoccur, trip.endDate); userBookings = new User[this.ride.getNumSeats() - 1]; + startDate = LocalDate.now(); this.seatsAvailable = seatsAvailable; } + + public String getDays(){ String daysString = ""; for (int i = 0; i < 7; i++){ @@ -37,6 +44,10 @@ public class SharedTrip extends Trip { seatsAvailable -= 1; } + public LocalDate getStartDate(){ + return startDate; + } + public boolean isFull(){ return seatsAvailable == 0; } diff --git a/src/main/java/model/Trip.java b/src/main/java/model/Trip.java index 5b48ff3..3ca752d 100644 --- a/src/main/java/model/Trip.java +++ b/src/main/java/model/Trip.java @@ -3,6 +3,7 @@ package model; import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; @@ -17,7 +18,7 @@ public class Trip { public Ride ride; public boolean[] days; public boolean reoccur; - public String endDate; + public LocalDate endDate; public String name; public static int MONDAY = 0; @@ -64,7 +65,7 @@ public class Trip { } } - public Trip(String name, ObservableList route, String direction, Ride ride, boolean[] days, boolean reoccur, String endDate){ + public Trip(String name, ObservableList route, String direction, Ride ride, boolean[] days, boolean reoccur, LocalDate endDate){ this.name = name; this.route = route; this.direction = direction; diff --git a/src/main/java/model/User.java b/src/main/java/model/User.java index 85ce6be..78e0eb2 100644 --- a/src/main/java/model/User.java +++ b/src/main/java/model/User.java @@ -6,6 +6,8 @@ import javafx.scene.image.Image; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; +import java.util.ArrayList; +import java.util.Arrays; /** * Created by Gondr on 1/06/2017. @@ -21,6 +23,7 @@ public class User { transient protected Image photo; private byte[] image; protected String ID; + protected transient ArrayList bookings; public enum AccountType{ PASSENGER("Passenger"), DRIVER("Driver"); @@ -51,7 +54,7 @@ public class User { this.mobilephone = mobilephone; this.photo = photo; this.accountType = AccountType.PASSENGER; - + bookings = new ArrayList<>(); } public boolean checkPassword(String p){ @@ -66,6 +69,14 @@ public class User { return ID; } + public void book(SharedTrip trip){ + bookings.add(trip); + } + + public ArrayList getBookings() { + return bookings; + } + public void serialise(){ try { BufferedImage bi = SwingFXUtils.fromFXImage(photo, null); @@ -80,6 +91,19 @@ public class User { } + public void populateBookings(){ + bookings = new ArrayList<>(); + for (SharedTrip s: Session.session.getDataManager().getAllSharedTrips()){ + for (User u: s.userBookings){ + if (u != null) { + if (u.getStudentNumber() == this.studentNumber) { + this.bookings.add(s); + } + } + } + } + } + public void deserialise(){ ByteArrayInputStream in = new ByteArrayInputStream(image); BufferedImage bi = null; @@ -89,5 +113,6 @@ public class User { e.printStackTrace(); } photo = SwingFXUtils.toFXImage(bi, null); + } } diff --git a/src/main/resources/scenes/base.fxml b/src/main/resources/scenes/base.fxml index 298d590..ca366b4 100644 --- a/src/main/resources/scenes/base.fxml +++ b/src/main/resources/scenes/base.fxml @@ -57,11 +57,21 @@