You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
8.1 KiB
225 lines
8.1 KiB
package controllers;
|
|
|
|
import javafx.beans.property.SimpleStringProperty;
|
|
import javafx.collections.FXCollections;
|
|
import javafx.collections.ObservableList;
|
|
import javafx.fxml.FXML;
|
|
import javafx.geometry.Pos;
|
|
import javafx.scene.Scene;
|
|
import javafx.scene.control.*;
|
|
import javafx.scene.layout.AnchorPane;
|
|
import javafx.scene.layout.ColumnConstraints;
|
|
import javafx.scene.layout.GridPane;
|
|
import javafx.scene.layout.RowConstraints;
|
|
import javafx.stage.Popup;
|
|
import javafx.stage.Stage;
|
|
import model.*;
|
|
|
|
import java.net.URL;
|
|
import java.util.HashMap;
|
|
import java.util.ResourceBundle;
|
|
import java.util.regex.Pattern;
|
|
|
|
/**
|
|
* Created by Gondr on 28/05/2017.
|
|
*/
|
|
public class SharedTripsController extends Controller{
|
|
|
|
@FXML
|
|
private TableView<SharedTrip> sharedTripsTable;
|
|
@FXML
|
|
private TableColumn<SharedTrip, String> tripNameColumn;
|
|
@FXML
|
|
private TableColumn<SharedTrip, String> directionColumn;
|
|
@FXML
|
|
private TableColumn<SharedTrip, String> daysColumn;
|
|
@FXML
|
|
private ComboBox<TripStop> stopsFilter;
|
|
@FXML
|
|
private ObservableList<SharedTrip> sharedTrips;
|
|
@FXML
|
|
private TextField stopName;
|
|
@FXML
|
|
private ComboBox<String> directionBox;
|
|
|
|
public void showDetails(){
|
|
SharedTrip trip = sharedTripsTable.getSelectionModel().getSelectedItem();
|
|
Stage tripDetails = new Stage();
|
|
tripDetails.setWidth(600);
|
|
tripDetails.setHeight(400);
|
|
tripDetails.setTitle(String.format("%1s Details", trip.name));
|
|
|
|
AnchorPane wrapper = new AnchorPane();
|
|
|
|
GridPane popUpGrid = new GridPane();
|
|
ColumnConstraints columnConstraints = new ColumnConstraints();
|
|
columnConstraints.setPercentWidth(50);
|
|
popUpGrid.getColumnConstraints().add(columnConstraints);
|
|
popUpGrid.getColumnConstraints().add(columnConstraints);
|
|
|
|
popUpGrid.addColumn(0);
|
|
popUpGrid.addColumn(0);
|
|
popUpGrid.addRow(0);//title
|
|
popUpGrid.addRow(0);//driver title
|
|
popUpGrid.addRow(0);//driver name
|
|
popUpGrid.addRow(0);//driver photo
|
|
popUpGrid.addRow(0);//
|
|
popUpGrid.addRow(0);//Car title
|
|
popUpGrid.addRow(0);//car model
|
|
popUpGrid.addRow(0);//car color
|
|
popUpGrid.addRow(0);//car year
|
|
popUpGrid.addRow(0);//car performance
|
|
popUpGrid.addRow(0);//book button
|
|
|
|
//information
|
|
Label tripTitle = new Label(trip.name);
|
|
tripTitle.setAlignment(Pos.CENTER);
|
|
popUpGrid.add(tripTitle, 0, 0, 2, 1);
|
|
|
|
Label driverTitle = new Label("Driver");
|
|
driverTitle.setAlignment(Pos.CENTER);
|
|
popUpGrid.add(driverTitle, 0, 1);
|
|
|
|
Label driverName = new Label("Driver Name");
|
|
popUpGrid.add(driverName, 0, 2);
|
|
|
|
Label driverPhoto = new Label("Driver Photo");
|
|
popUpGrid.add(driverPhoto, 0, 3);
|
|
|
|
Label carTitle = new Label("Car");
|
|
popUpGrid.add(carTitle, 0, 4);
|
|
|
|
Label carModel = new Label(trip.ride.getModel());
|
|
popUpGrid.add(carModel, 0, 5);
|
|
|
|
Label carPlate = new Label(trip.ride.getLicensePlate());
|
|
popUpGrid.add(carPlate, 0, 6);
|
|
|
|
Label carColour = new Label(trip.ride.getColour());
|
|
popUpGrid.add(carColour, 0, 7);
|
|
|
|
Label carYear = new Label(String.valueOf(trip.ride.getYear()));
|
|
popUpGrid.add(carYear, 0, 8);
|
|
|
|
Label seatsAvailable = new Label(String.valueOf(trip.getSeatsAvailable()));
|
|
popUpGrid.add(seatsAvailable, 0, 9);
|
|
|
|
//stops
|
|
TableView<TripStop> stopTableView = new TableView<>();
|
|
|
|
TableColumn<TripStop, String> addressColumn = new TableColumn<>();
|
|
addressColumn.setText("Address");
|
|
addressColumn.setCellValueFactory(p->new SimpleStringProperty(p.getValue().getName()));
|
|
stopTableView.getColumns().add(addressColumn);
|
|
|
|
TableColumn<TripStop, String> timeColumn = new TableColumn<>();
|
|
timeColumn.setText("Time");
|
|
timeColumn.setCellValueFactory(p->new SimpleStringProperty(p.getValue().getTime()));
|
|
stopTableView.getColumns().add(timeColumn);
|
|
|
|
stopTableView.setItems(trip.route);
|
|
|
|
popUpGrid.add(stopTableView, 1, 1, 1, 9);
|
|
|
|
AnchorPane.setTopAnchor(popUpGrid, 0.0);
|
|
AnchorPane.setBottomAnchor(popUpGrid, 0.0);
|
|
AnchorPane.setRightAnchor(popUpGrid, 0.0);
|
|
AnchorPane.setLeftAnchor(popUpGrid, 0.0);
|
|
|
|
//book button
|
|
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.");
|
|
});
|
|
popUpGrid.add(bookRide, 0, 10, 2, 1);
|
|
|
|
wrapper.getChildren().add(popUpGrid);
|
|
|
|
Scene detailsScene = new Scene(wrapper);
|
|
|
|
tripDetails.setScene(detailsScene);
|
|
|
|
tripDetails.showAndWait();
|
|
}
|
|
|
|
public void resetSearch(){
|
|
stopsFilter.getSelectionModel().select(0);
|
|
}
|
|
|
|
public void search(){
|
|
sharedTrips.remove(0, sharedTrips.size());
|
|
//ignore stop
|
|
boolean ignoreStopFilter = stopsFilter.getSelectionModel().getSelectedIndex() == 0;
|
|
boolean ignoreStopNameSearch = stopName.getText().equals("") || stopName.getText() == null;
|
|
boolean ignoreStopSearch = ignoreStopFilter && ignoreStopNameSearch;
|
|
Pattern stopNamePattern = Pattern.compile(".*"+stopName.getText()+".*", Pattern.CASE_INSENSITIVE);
|
|
//ignore direction
|
|
boolean ignoreDirection = directionBox.getSelectionModel().isSelected(0) || directionBox.getValue() == null;
|
|
for(SharedTrip sharedTrip: Session.session.getDataManager().getAllSharedTrips()){
|
|
if (sharedTrip.isFull()){
|
|
continue;
|
|
}
|
|
//stops are equal
|
|
boolean add = false;
|
|
for (TripStop stop : sharedTrip.route) {
|
|
if (ignoreStopSearch){
|
|
add = true;
|
|
break;
|
|
}
|
|
if (stop.equals(stopsFilter.getValue())) {
|
|
add = true;
|
|
break;
|
|
}
|
|
if (stopNamePattern.matcher(stop.getName()).matches()){
|
|
add = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!ignoreDirection) {
|
|
add = sharedTrip.direction.equals(directionBox.getValue());
|
|
}
|
|
if (add){
|
|
sharedTrips.add(sharedTrip);//for other filters later
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void runLater(){
|
|
sharedTrips = FXCollections.observableArrayList(Session.session.getDataManager().getAllSharedTrips());
|
|
sharedTripsTable.setItems(sharedTrips);
|
|
tripNameColumn.setCellValueFactory(p -> new SimpleStringProperty(p.getValue().name));
|
|
directionColumn.setCellValueFactory(p -> new SimpleStringProperty(p.getValue().direction));
|
|
daysColumn.setCellValueFactory(p -> new SimpleStringProperty(p.getValue().getDays()));
|
|
//add all stops that have shared trips with them. TODO only display visible ones.
|
|
ObservableList<TripStop> stops = FXCollections.observableArrayList();
|
|
stops.add(new TripStop("Any", ""));
|
|
HashMap<TripStop, Boolean> stopAdded = new HashMap<>();
|
|
for (SharedTrip trip:sharedTrips){
|
|
for(TripStop stop: trip.route){
|
|
if (!stopAdded.containsKey(stop)) {
|
|
stops.add(stop);
|
|
stopAdded.put(stop, true);
|
|
}
|
|
}
|
|
}
|
|
stopsFilter.setItems(stops);
|
|
stopsFilter.valueProperty().addListener( e ->{
|
|
search();
|
|
});
|
|
stopName.textProperty().addListener(e-> search());
|
|
directionBox.valueProperty().addListener(e->search());
|
|
}
|
|
|
|
@Override
|
|
public void initialize(URL location, ResourceBundle resources) {
|
|
ObservableList<String> directions = FXCollections.observableArrayList();
|
|
directions.addAll("Any", Trip.TO_UNI, Trip.TO_HOME);
|
|
directionBox.setItems(directions);
|
|
}
|
|
}
|