From 434017c55836a88114a9f3319e1b52d1750d8d79 Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Thu, 1 Jun 2017 13:09:23 +1200 Subject: [PATCH] Story 7 is done --- src/main/java/controllers/BaseController.java | 4 ++ .../controllers/SearchStopsController.java | 60 ++++++++++++++++++ .../controllers/SharedTripsController.java | 41 ++++++++++-- src/main/java/model/SceneCode.java | 2 +- src/main/java/model/TripStop.java | 4 ++ src/main/resources/scenes/base.fxml | 5 ++ src/main/resources/scenes/mystops.fxml | 6 +- src/main/resources/scenes/searchstops.fxml | 36 +++++++++++ src/main/resources/scenes/sharedtrips.fxml | 10 ++- .../classes/controllers/BaseController.class | Bin 3014 -> 3132 bytes .../controllers/SearchStopsController.class | Bin 0 -> 3770 bytes .../controllers/SharedTripsController.class | Bin 4910 -> 6772 bytes target/classes/model/SceneCode.class | Bin 2387 -> 2463 bytes target/classes/scenes/base.fxml | 5 ++ target/classes/scenes/mystops.fxml | 6 +- target/classes/scenes/searchstops.fxml | 36 +++++++++++ target/classes/scenes/sharedtrips.fxml | 10 ++- 17 files changed, 212 insertions(+), 13 deletions(-) create mode 100644 src/main/java/controllers/SearchStopsController.java create mode 100644 src/main/resources/scenes/searchstops.fxml create mode 100644 target/classes/controllers/SearchStopsController.class create mode 100644 target/classes/scenes/searchstops.fxml diff --git a/src/main/java/controllers/BaseController.java b/src/main/java/controllers/BaseController.java index 5460990..b0a0303 100644 --- a/src/main/java/controllers/BaseController.java +++ b/src/main/java/controllers/BaseController.java @@ -37,6 +37,10 @@ public class BaseController extends Controller { changeScene(SceneCode.MY_STOPS); } + public void searchStops() throws Exception{ + changeScene(SceneCode.SEARCH_STOPS); + } + public void addRoute() throws Exception{ changeScene(SceneCode.ADD_ROUTE); } diff --git a/src/main/java/controllers/SearchStopsController.java b/src/main/java/controllers/SearchStopsController.java new file mode 100644 index 0000000..2cd16f1 --- /dev/null +++ b/src/main/java/controllers/SearchStopsController.java @@ -0,0 +1,60 @@ +package controllers; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.control.ListView; +import javafx.scene.control.TextField; +import model.Stop; + +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.ResourceBundle; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created by Gondr on 1/06/2017. + */ +public class SearchStopsController extends Controller { + + @FXML + ListView stopsList; + @FXML + TextField stopAddress; + @FXML + TextField stopSuburb; + + private List listOfAllStops; + private ObservableList shownStops; + + public void search(){ + shownStops.remove(0, shownStops.size()); + Pattern addressPattern = Pattern.compile(".*", Pattern.CASE_INSENSITIVE); + if (stopAddress.getText() != "" && stopAddress.getText() != null){ + addressPattern = Pattern.compile(".*"+stopAddress.getText()+".*", Pattern.CASE_INSENSITIVE); + } + for (Stop stop:listOfAllStops){ + if (addressPattern.matcher(stop.getAddress()).matches()){ + shownStops.add(stop); + } + } + } + + @Override + public void runLater() { + listOfAllStops = new ArrayList<>(parent.getSession().getDataManager().getStops()); + shownStops = FXCollections.observableArrayList(listOfAllStops); + stopsList.setItems(shownStops); + stopAddress.textProperty().addListener(e->{ + search(); + }); + } + + @Override + public void initialize(URL location, ResourceBundle resources) { + + } +} diff --git a/src/main/java/controllers/SharedTripsController.java b/src/main/java/controllers/SharedTripsController.java index df0c4c6..5be5d54 100644 --- a/src/main/java/controllers/SharedTripsController.java +++ b/src/main/java/controllers/SharedTripsController.java @@ -7,12 +7,15 @@ import javafx.fxml.FXML; import javafx.scene.control.ComboBox; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; +import javafx.scene.control.TextField; import model.SharedTrip; import model.Stop; import model.TripStop; import java.net.URL; +import java.util.HashMap; import java.util.ResourceBundle; +import java.util.regex.Pattern; /** * Created by Gondr on 28/05/2017. @@ -28,25 +31,38 @@ public class SharedTripsController extends Controller{ @FXML private TableColumn daysColumn; @FXML - private ComboBox stopsFilter; + private ComboBox stopsFilter; @FXML private ObservableList sharedTrips; + @FXML + private TextField stopName; + + public void resetSearch(){ + stopsFilter.getSelectionModel().select(0); + } public void search(){ - sharedTrips.removeAll(); sharedTrips.remove(0, sharedTrips.size()); + boolean ignoreStopFilter = stopsFilter.getSelectionModel().getSelectedIndex() == 0; + boolean ignoreStopNameSearch = stopName.getText().equals("") || stopName.getText() == null; + Pattern stopNamePattern = Pattern.compile(".*"+stopName.getText()+".*", Pattern.CASE_INSENSITIVE); for(SharedTrip sharedTrip: parent.getSession().getDataManager().getSharedTrips()){ //stops are equal boolean added = false; - for (TripStop stop: sharedTrip.route){ - if (stop.equals(stopsFilter.getValue())){ + for (TripStop stop : sharedTrip.route) { + if (stop.equals(stopsFilter.getValue()) || ignoreStopFilter) { + sharedTrips.add(sharedTrip); + added = true; + break; + } + if (stopNamePattern.matcher(stop.getName()).matches()){ sharedTrips.add(sharedTrip); added = true; break; } } if (added){ - continue; + continue;//for other filters later } } } @@ -58,10 +74,23 @@ public class SharedTripsController extends Controller{ tripNameColumn.setCellValueFactory(p -> new SimpleStringProperty(p.getValue().name)); directionColumn.setCellValueFactory(p -> new SimpleStringProperty(p.getValue().direction)); daysColumn.setCellValueFactory(p -> new SimpleStringProperty(p.getValue().getDays())); - stopsFilter.setItems(parent.getSession().getDataManager().getStops()); + //add all stops that have shared trips with them. TODO only display visible ones. + ObservableList stops = FXCollections.observableArrayList(); + stops.add(new TripStop("None", "")); + HashMap 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()); } @Override diff --git a/src/main/java/model/SceneCode.java b/src/main/java/model/SceneCode.java index 7f57f2c..7d0f5cd 100644 --- a/src/main/java/model/SceneCode.java +++ b/src/main/java/model/SceneCode.java @@ -15,7 +15,7 @@ public enum SceneCode { MAIN("main", false), BASE("base", false), //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"); + MY_ROUTES("myroutes"), ADD_TRIP("addtrip"), MY_TRIPS("mytrips"), SHARED_RIDES("sharedtrips"), SEARCH_STOPS("searchstops"); private String path; private boolean loadMenu; diff --git a/src/main/java/model/TripStop.java b/src/main/java/model/TripStop.java index 02da1cf..3c3ea3f 100644 --- a/src/main/java/model/TripStop.java +++ b/src/main/java/model/TripStop.java @@ -58,4 +58,8 @@ public class TripStop{ time = new SimpleStringProperty(serialiseTime); name = new SimpleStringProperty(serialiseName); } + + public String toString(){ + return getName(); + } } diff --git a/src/main/resources/scenes/base.fxml b/src/main/resources/scenes/base.fxml index 8cf462d..298d590 100644 --- a/src/main/resources/scenes/base.fxml +++ b/src/main/resources/scenes/base.fxml @@ -57,6 +57,11 @@