diff --git a/src/main/java/controllers/AddTripController.java b/src/main/java/controllers/AddTripController.java index ec5f661..345af28 100644 --- a/src/main/java/controllers/AddTripController.java +++ b/src/main/java/controllers/AddTripController.java @@ -94,11 +94,10 @@ public class AddTripController extends Controller{ } Trip trip = new Trip(tripName.getText() ,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); + 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); if (result.get() == ButtonTypes.No){ - System.out.println("My Trips page to show up and impletmeneted");//TODO implement here. - //changeScene(SceneCode.MY_TRIPS); + changeScene(SceneCode.MY_TRIPS); } else{ changeScene(SceneCode.ADD_TRIP); } diff --git a/src/main/java/controllers/BaseController.java b/src/main/java/controllers/BaseController.java index 383db9e..755e0ee 100644 --- a/src/main/java/controllers/BaseController.java +++ b/src/main/java/controllers/BaseController.java @@ -53,6 +53,10 @@ public class BaseController extends Controller { changeScene(SceneCode.MY_TRIPS); } + public void shareRide() throws Exception{ + changeScene(SceneCode.MY_TRIPS); + } + 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/Controller.java b/src/main/java/controllers/Controller.java index e4f9a16..acfd981 100644 --- a/src/main/java/controllers/Controller.java +++ b/src/main/java/controllers/Controller.java @@ -23,8 +23,8 @@ public abstract class Controller implements Initializable { this.parent = parent; } - public void changeScene(SceneCode scene) throws Exception { - parent.replaceSceneContent(scene); + public Controller changeScene(SceneCode scene) throws Exception { + return parent.replaceSceneContent(scene); } public void runLater(){ diff --git a/src/main/java/controllers/Main.java b/src/main/java/controllers/Main.java index de278a9..dcf364f 100644 --- a/src/main/java/controllers/Main.java +++ b/src/main/java/controllers/Main.java @@ -72,7 +72,7 @@ public class Main extends Application { * @return * @throws Exception */ - public void replaceSceneContent(SceneCode fxml) throws Exception { + public Controller replaceSceneContent(SceneCode fxml) throws Exception { FXMLLoader loader = new FXMLLoader(); InputStream in = getClass().getClassLoader().getResourceAsStream(fxml.getPath()); Parent page; @@ -101,6 +101,7 @@ public class Main extends Application { controller.setParent(this); controller.runLater(); } + return controller; } public Session getSession() { diff --git a/src/main/java/controllers/MyTripsController.java b/src/main/java/controllers/MyTripsController.java index c661f07..c356416 100644 --- a/src/main/java/controllers/MyTripsController.java +++ b/src/main/java/controllers/MyTripsController.java @@ -2,16 +2,14 @@ package controllers; import javafx.collections.ObservableList; import javafx.fxml.FXML; -import javafx.scene.control.Label; -import javafx.scene.control.ListView; -import javafx.scene.control.TableView; +import javafx.scene.control.*; import javafx.scene.layout.Background; import javafx.scene.layout.BackgroundFill; import javafx.scene.paint.Color; -import model.Trip; -import model.TripStop; +import model.*; import java.net.URL; +import java.util.Optional; import java.util.ResourceBundle; /** @@ -33,6 +31,10 @@ public class MyTripsController extends Controller{ @FXML private Label fridayLabel; @FXML + private Label saturdayLabel; + @FXML + private Label sundayLabel; + @FXML private Label reoccuringLabel; @FXML private Label endDateLabel; @@ -40,10 +42,16 @@ public class MyTripsController extends Controller{ private TableView stopsList; @FXML private ListView tripsList; - @FXML private ObservableList trips; + @FXML + private TableColumn stopTimeColumn; + @FXML + private TableColumn stopNameColumn; + @FXML + private TextField seatsAvailable; + private Trip selectedTrip; - public void setRideDays(Label day, boolean travelling){ + private void setRideDays(Label day, boolean travelling){ if (travelling){ day.setTextFill(Color.GREEN); }else{ @@ -51,24 +59,53 @@ public class MyTripsController extends Controller{ } } + public void shareThisRide(){ + if (selectedTrip != null && seatsAvailable.getText() != null && seatsAvailable.getText() != ""){ + int seats; + try{ + seats = Integer.parseInt(seatsAvailable.getText()); + }catch(NumberFormatException e){ + popUp(Alert.AlertType.WARNING, "WARNING!", "Error in Seats Available Input.", "Seats Input must be an Integer."); + return; + } + if (selectedTrip.ride.getNumSeats() < 0){ + Optional result = popUp(Alert.AlertType.WARNING, "WARNING!", "Seats less than 0.", "This will make all seats unavailable is this what you want?", ButtonSets.YesNo); + if (result.get() == ButtonTypes.No){ + return; + } + } + if (selectedTrip.ride.getNumSeats() > seats){ + parent.getSession().getDataManager().addSharedTrip(new SharedTrip(selectedTrip)); + popUp(Alert.AlertType.CONFIRMATION, "SUCCESS!", "Trip has been successfully shared", "The trip can now be seen by other users when there are seats available."); + //TODO change scene + } else{ + popUp(Alert.AlertType.WARNING, "WARNING!", "Error in Seats Available Input.", "You cannot share more seats than you have available (remember you need one for you to drive in)."); + } + } + } + @Override public void runLater(){ //fill tables etc; trips = parent.getSession().getDataManager().getTrips(); tripsList.setItems(trips); + stopTimeColumn.setCellValueFactory(p -> p.getValue().nameProperty()); + stopNameColumn.setCellValueFactory(p -> p.getValue().nameProperty()); tripsList.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { - Trip trip = tripsList.getSelectionModel().getSelectedItem(); - stopsList.setItems(trip.route); - rideLabel.setText(trip.ride.toString()); - directionLabel.setText(trip.direction); - setRideDays(mondayLabel, trip.days[Trip.MONDAY]); - setRideDays(tuesdayLabel, trip.days[Trip.TUESDAY]); - setRideDays(wednesdayLabel, trip.days[Trip.WEDNESDAY]); - setRideDays(thursdayLabel, trip.days[Trip.THURSDAY]); - setRideDays(fridayLabel, trip.days[Trip.FRIDAY]); - if (trip.reoccur){ + 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(trip.endDate); + endDateLabel.setText(selectedTrip.endDate); }else{ reoccuringLabel.setText("No"); endDateLabel.setText("-"); diff --git a/src/main/java/model/DataManager.java b/src/main/java/model/DataManager.java index 6014032..9a97f19 100644 --- a/src/main/java/model/DataManager.java +++ b/src/main/java/model/DataManager.java @@ -16,16 +16,18 @@ public class DataManager { private ObservableList stops; private ObservableList routes; private ObservableList trips; + private ObservableList sharedTrips; - public DataManager(List rides, List stops, List routes, List trips){ + public DataManager(List rides, List stops, List routes, List trips, List sharedTrips){ this.rides = FXCollections.observableArrayList(rides); this.stops = FXCollections.observableArrayList(stops); this.routes = FXCollections.observableArrayList(routes); this.trips = FXCollections.observableArrayList(trips); + this.sharedTrips = FXCollections.observableArrayList(sharedTrips); } public DataManager(){ - this(FXCollections.observableArrayList(), FXCollections.observableArrayList(), FXCollections.observableArrayList(), FXCollections.observableArrayList()); + this(FXCollections.observableArrayList(), FXCollections.observableArrayList(), FXCollections.observableArrayList(), FXCollections.observableArrayList(), FXCollections.observableArrayList()); } public ObservableList getRides() { @@ -86,4 +88,18 @@ public class DataManager { return true; } + public ObservableList getSharedTrips() { + return sharedTrips; + } + + public boolean addSharedTrip(SharedTrip sharedTrip){ + for (SharedTrip t: sharedTrips){ + if (sharedTrip.equals(t)){ + return false; + } + } + sharedTrips.add(sharedTrip); + return true; + } + } diff --git a/src/main/java/model/Ride.java b/src/main/java/model/Ride.java index f1c6be1..c517f7b 100644 --- a/src/main/java/model/Ride.java +++ b/src/main/java/model/Ride.java @@ -17,6 +17,25 @@ public class Ride { this.numSeats = numSeats; } + public String getModel() { + return model; + } + + public String getColour() { + return colour; + } + + public String getLicensePlate() { + return licensePlate; + } + + public int getYear() { + return year; + } + + public int getNumSeats() { + return numSeats; + } @Override public String toString(){ diff --git a/src/main/java/model/SharedTrip.java b/src/main/java/model/SharedTrip.java new file mode 100644 index 0000000..520de7c --- /dev/null +++ b/src/main/java/model/SharedTrip.java @@ -0,0 +1,12 @@ +package model; + +/** + * Created by Gondr on 28/05/2017. + */ +public class SharedTrip extends Trip { + + public SharedTrip (Trip trip){ + super(trip.name, trip.route, trip.direction, trip.ride, trip.days, trip.reoccur, trip.endDate); + } + +} diff --git a/src/main/java/utils/DataManagerSerialiser.java b/src/main/java/utils/DataManagerSerialiser.java index e72f49f..b7be831 100644 --- a/src/main/java/utils/DataManagerSerialiser.java +++ b/src/main/java/utils/DataManagerSerialiser.java @@ -30,11 +30,13 @@ public class DataManagerSerialiser extends Serialiser { ArrayList stops = new ArrayList<>(dataManager.getStops()); ArrayList routes = new ArrayList<>(dataManager.getRoutes()); ArrayList trips = new ArrayList<>(dataManager.getTrips()); + ArrayList sharedTrips = new ArrayList<>(dataManager.getSharedTrips()); boolean serialRidesSuccess = serialise(rides, "serialisation/rides.json"); boolean serialStopsSuccess = serialise(stops, "serialisation/stops.json"); boolean serialRoutesSuccess = serialiseRoutes(routes, "serialisation/routes.json"); boolean serialTripsSuccess = serialiseTrips(trips, "serialisation/trips.json"); - return (serialRidesSuccess && serialStopsSuccess && serialRoutesSuccess && serialTripsSuccess); + boolean serialSharedTripsSuccess = serialiseSharedTrips(sharedTrips, "serialisation/sharedtrips.json"); + return (serialRidesSuccess && serialStopsSuccess && serialRoutesSuccess && serialTripsSuccess && serialSharedTripsSuccess); } /** @@ -81,6 +83,29 @@ 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 serialiseSharedTrips(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 @@ -115,7 +140,15 @@ public class DataManagerSerialiser extends Serialiser { trip.deserialise(); } - return new DataManager(rides, stops, routes, trips); + Reader reader5 = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("serialisation/trips.json"), "UTF-8"); + ArrayList sharedTrips = gson.fromJson(reader4, new TypeToken>(){}.getType()); + reader5.close(); + + for (SharedTrip trip: sharedTrips){ + trip.deserialise(); + } + + return new DataManager(rides, stops, routes, trips, sharedTrips); } } diff --git a/src/main/resources/scenes/base.fxml b/src/main/resources/scenes/base.fxml index 8388caa..182892e 100644 --- a/src/main/resources/scenes/base.fxml +++ b/src/main/resources/scenes/base.fxml @@ -1,5 +1,6 @@ + @@ -9,7 +10,7 @@ - + @@ -17,7 +18,7 @@ - + @@ -65,10 +66,36 @@ + + + + + + + + + +