From d0a5273d10f724a40f18f2903b1dc1148408c1f6 Mon Sep 17 00:00:00 2001 From: Luca Sardonini Date: Tue, 23 Jan 2018 13:12:10 +0100 Subject: [PATCH] Display all departures and perform a request to get the destination id if it is null in the stationboard request --- .../timeforcoffee/api/StationService.java | 19 ++++++++- .../liip/timeforcoffee/api/ZvvApiService.java | 39 +++++++++++++++++-- .../FetchStationsSearchEvent.java | 2 +- .../FetchStationsOneSearchErrorEvent.java | 17 ++++++++ .../FetchStationsSearchOneEvent.java | 14 +++++++ .../FetchZvvStationsSearchOneEvent.java | 14 +++++++ .../StationsSearchOneFetchedEvent.java | 16 ++++++++ .../ZvvStationsSearchOneFetchedEvent.java | 16 ++++++++ .../api/mappers/DepartureMapper.java | 7 +--- .../timeforcoffee/api/models/Departure.java | 4 ++ .../presenter/ConnectionsPresenter.java | 16 +++++++- .../presenter/StationSearchPresenter.java | 18 ++++----- 12 files changed, 160 insertions(+), 22 deletions(-) create mode 100644 api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchStationsOneSearchErrorEvent.java create mode 100644 api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchStationsSearchOneEvent.java create mode 100644 api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchZvvStationsSearchOneEvent.java create mode 100644 api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/StationsSearchOneFetchedEvent.java create mode 100644 api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/ZvvStationsSearchOneFetchedEvent.java diff --git a/api/src/main/java/ch/liip/timeforcoffee/api/StationService.java b/api/src/main/java/ch/liip/timeforcoffee/api/StationService.java index ec0844c..b719789 100644 --- a/api/src/main/java/ch/liip/timeforcoffee/api/StationService.java +++ b/api/src/main/java/ch/liip/timeforcoffee/api/StationService.java @@ -9,12 +9,16 @@ import ch.liip.timeforcoffee.api.events.stationsLocationEvents.FetchOpenDataStationsLocationEvent; import ch.liip.timeforcoffee.api.events.stationsLocationEvents.FetchStationsLocationEvent; -import ch.liip.timeforcoffee.api.events.FetchStationsSearchEvent; -import ch.liip.timeforcoffee.api.events.stationsSearchEvents.FetchZvvStationsSearchEvent; import ch.liip.timeforcoffee.api.events.stationsLocationEvents.OpenDataStationsLocationFetchedEvent; import ch.liip.timeforcoffee.api.events.stationsLocationEvents.StationsLocationFetchedEvent; +import ch.liip.timeforcoffee.api.events.stationsSearchEvents.FetchStationsSearchEvent; +import ch.liip.timeforcoffee.api.events.stationsSearchEvents.FetchZvvStationsSearchEvent; import ch.liip.timeforcoffee.api.events.stationsSearchEvents.StationsSearchFetchedEvent; import ch.liip.timeforcoffee.api.events.stationsSearchEvents.ZvvStationsSearchFetchedEvent; +import ch.liip.timeforcoffee.api.events.stationsSearchOneEvents.FetchStationsSearchOneEvent; +import ch.liip.timeforcoffee.api.events.stationsSearchOneEvents.FetchZvvStationsSearchOneEvent; +import ch.liip.timeforcoffee.api.events.stationsSearchOneEvents.StationsSearchOneFetchedEvent; +import ch.liip.timeforcoffee.api.events.stationsSearchOneEvents.ZvvStationsSearchOneFetchedEvent; import ch.liip.timeforcoffee.api.mappers.StationMapper; import ch.liip.timeforcoffee.api.models.Station; @@ -33,6 +37,11 @@ public void onEvent(FetchStationsSearchEvent event) { eventBus.post(new FetchZvvStationsSearchEvent(event.getSearchQuery())); } + @Subscribe + public void onEvent(FetchStationsSearchOneEvent event) { + eventBus.post(new FetchZvvStationsSearchOneEvent(event.getSearchQuery())); + } + @Subscribe public void onEvent(FetchStationsLocationEvent event) { eventBus.post(new FetchOpenDataStationsLocationEvent(event.getQuery())); @@ -48,6 +57,12 @@ public void onEvent(ZvvStationsSearchFetchedEvent event) { eventBus.post(new StationsSearchFetchedEvent(stations)); } + @Subscribe + public void onEvent(ZvvStationsSearchOneFetchedEvent event) { + Station station = StationMapper.fromZvv(event.getStation()); + eventBus.post(new StationsSearchOneFetchedEvent(station)); + } + @Subscribe public void onEvent(OpenDataStationsLocationFetchedEvent event) { ArrayList stations = new ArrayList<>(); diff --git a/api/src/main/java/ch/liip/timeforcoffee/api/ZvvApiService.java b/api/src/main/java/ch/liip/timeforcoffee/api/ZvvApiService.java index 9861e5f..5b31213 100644 --- a/api/src/main/java/ch/liip/timeforcoffee/api/ZvvApiService.java +++ b/api/src/main/java/ch/liip/timeforcoffee/api/ZvvApiService.java @@ -17,6 +17,8 @@ import ch.liip.timeforcoffee.api.events.stationsSearchEvents.FetchStationsSearchErrorEvent; import ch.liip.timeforcoffee.api.events.stationsSearchEvents.FetchZvvStationsSearchEvent; import ch.liip.timeforcoffee.api.events.stationsSearchEvents.ZvvStationsSearchFetchedEvent; +import ch.liip.timeforcoffee.api.events.stationsSearchOneEvents.FetchZvvStationsSearchOneEvent; +import ch.liip.timeforcoffee.api.events.stationsSearchOneEvents.ZvvStationsSearchOneFetchedEvent; import ch.liip.timeforcoffee.zvv.ConnectionsResponse; import ch.liip.timeforcoffee.zvv.Station; import ch.liip.timeforcoffee.zvv.StationboardResponse; @@ -53,8 +55,12 @@ public void onEvent(FetchZvvStationsSearchEvent event) { fetchZvvStations(event.getSearchQuery()); } - public void fetchZvvConnections(String fromStationId, String toStationId, String startDateStr, String endDateStr) { + @Subscribe + public void onEvent(FetchZvvStationsSearchOneEvent event) { + fetchZvvStation(event.getSearchQuery()); + } + public void fetchZvvConnections(String fromStationId, String toStationId, String startDateStr, String endDateStr) { zvvService.getConnections(fromStationId, toStationId, startDateStr, endDateStr) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) @@ -77,7 +83,6 @@ public void onNext(ConnectionsResponse connections) { } public void fetchZvvDepartures(String stationId) { - zvvService.getDepartures(stationId) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) @@ -100,9 +105,8 @@ public void onNext(StationboardResponse stationboard) { } public void fetchZvvStations(String searchQuery) { - if (searchQuery.isEmpty()) { //search query is empty => return an empty station list - List stations = new ArrayList(); + List stations = new ArrayList<>(); eventBus.post(new ZvvStationsSearchFetchedEvent(stations)); return; } @@ -127,4 +131,31 @@ public void onNext(StationsResponse stationsResponse) { } }); } + + public void fetchZvvStation(String searchQuery) { + if (searchQuery.isEmpty()) { //search query is empty => return null + eventBus.post(new ZvvStationsSearchOneFetchedEvent(null)); + return; + } + + zvvService.getStations(searchQuery) + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Subscriber() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + eventBus.post(new FetchStationsSearchErrorEvent(e)) ; + } + + @Override + public void onNext(StationsResponse stationsResponse) { + eventBus.post(new ZvvStationsSearchOneFetchedEvent(stationsResponse.getStations().get(0))); + } + }); + } } diff --git a/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchEvents/FetchStationsSearchEvent.java b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchEvents/FetchStationsSearchEvent.java index b1d2da5..c32b4e4 100644 --- a/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchEvents/FetchStationsSearchEvent.java +++ b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchEvents/FetchStationsSearchEvent.java @@ -1,4 +1,4 @@ -package ch.liip.timeforcoffee.api.events; +package ch.liip.timeforcoffee.api.events.stationsSearchEvents; public class FetchStationsSearchEvent { diff --git a/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchStationsOneSearchErrorEvent.java b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchStationsOneSearchErrorEvent.java new file mode 100644 index 0000000..55cb812 --- /dev/null +++ b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchStationsOneSearchErrorEvent.java @@ -0,0 +1,17 @@ +package ch.liip.timeforcoffee.api.events.stationsSearchOneEvents; + +import retrofit.RetrofitError; + +public class FetchStationsOneSearchErrorEvent { + + private RetrofitError error; + private Throwable throwable; + + public FetchStationsOneSearchErrorEvent(RetrofitError error) { + this.error = error; + } + + public FetchStationsOneSearchErrorEvent(Throwable throwable) { + this.throwable = throwable; + } +} diff --git a/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchStationsSearchOneEvent.java b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchStationsSearchOneEvent.java new file mode 100644 index 0000000..a540df6 --- /dev/null +++ b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchStationsSearchOneEvent.java @@ -0,0 +1,14 @@ +package ch.liip.timeforcoffee.api.events.stationsSearchOneEvents; + +public class FetchStationsSearchOneEvent { + + private String searchQuery; + + public FetchStationsSearchOneEvent(String searchQuery) { + this.searchQuery = searchQuery; + } + + public String getSearchQuery() { + return searchQuery; + } +} diff --git a/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchZvvStationsSearchOneEvent.java b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchZvvStationsSearchOneEvent.java new file mode 100644 index 0000000..9c58d08 --- /dev/null +++ b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/FetchZvvStationsSearchOneEvent.java @@ -0,0 +1,14 @@ +package ch.liip.timeforcoffee.api.events.stationsSearchOneEvents; + +public class FetchZvvStationsSearchOneEvent { + + private final String searchQuery; + + public FetchZvvStationsSearchOneEvent(String searchQuery) { + this.searchQuery = searchQuery; + } + + public String getSearchQuery() { + return searchQuery; + } +} diff --git a/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/StationsSearchOneFetchedEvent.java b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/StationsSearchOneFetchedEvent.java new file mode 100644 index 0000000..9470a3c --- /dev/null +++ b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/StationsSearchOneFetchedEvent.java @@ -0,0 +1,16 @@ +package ch.liip.timeforcoffee.api.events.stationsSearchOneEvents; + +import ch.liip.timeforcoffee.api.models.Station; + +public class StationsSearchOneFetchedEvent { + + private Station station; + + public StationsSearchOneFetchedEvent(Station station) { + this.station = station; + } + + public Station getStation() { + return station; + } +} diff --git a/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/ZvvStationsSearchOneFetchedEvent.java b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/ZvvStationsSearchOneFetchedEvent.java new file mode 100644 index 0000000..12a6a26 --- /dev/null +++ b/api/src/main/java/ch/liip/timeforcoffee/api/events/stationsSearchOneEvents/ZvvStationsSearchOneFetchedEvent.java @@ -0,0 +1,16 @@ +package ch.liip.timeforcoffee.api.events.stationsSearchOneEvents; + +import ch.liip.timeforcoffee.zvv.Station; + +public class ZvvStationsSearchOneFetchedEvent { + + private Station station; + + public ZvvStationsSearchOneFetchedEvent(Station station) { + this.station = station; + } + + public Station getStation() { + return station; + } +} diff --git a/api/src/main/java/ch/liip/timeforcoffee/api/mappers/DepartureMapper.java b/api/src/main/java/ch/liip/timeforcoffee/api/mappers/DepartureMapper.java index a31cf04..ff83cc3 100644 --- a/api/src/main/java/ch/liip/timeforcoffee/api/mappers/DepartureMapper.java +++ b/api/src/main/java/ch/liip/timeforcoffee/api/mappers/DepartureMapper.java @@ -7,10 +7,7 @@ public class DepartureMapper { public static Departure fromZvv(ch.liip.timeforcoffee.zvv.Departure zvvDeparture) { - if(zvvDeparture.getId() == null) { - return null; - } - + int id = zvvDeparture.getId() != null ? Integer.parseInt(zvvDeparture.getId()) : 0; int colorBg = Color.WHITE; int colorFg = Color.BLACK; try { @@ -21,7 +18,7 @@ public static Departure fromZvv(ch.liip.timeforcoffee.zvv.Departure zvvDeparture } return new Departure(zvvDeparture.getName(), - Integer.parseInt(zvvDeparture.getId()), + id, zvvDeparture.getTo(), zvvDeparture.getPlatform(), colorFg, diff --git a/api/src/main/java/ch/liip/timeforcoffee/api/models/Departure.java b/api/src/main/java/ch/liip/timeforcoffee/api/models/Departure.java index fb8cf4d..91d3982 100644 --- a/api/src/main/java/ch/liip/timeforcoffee/api/models/Departure.java +++ b/api/src/main/java/ch/liip/timeforcoffee/api/models/Departure.java @@ -60,6 +60,10 @@ public String getDestinationIdStr() { return String.valueOf(destinationId); } + public void setDestinationId(int destinationId) { + this.destinationId = destinationId; + } + public String getDestinationName() { return destinationName; } diff --git a/mobile/src/main/java/ch/liip/timeforcoffee/presenter/ConnectionsPresenter.java b/mobile/src/main/java/ch/liip/timeforcoffee/presenter/ConnectionsPresenter.java index 24f14b5..2dd7a68 100644 --- a/mobile/src/main/java/ch/liip/timeforcoffee/presenter/ConnectionsPresenter.java +++ b/mobile/src/main/java/ch/liip/timeforcoffee/presenter/ConnectionsPresenter.java @@ -17,6 +17,8 @@ import ch.liip.timeforcoffee.api.events.connectionsEvents.ConnectionsFetchedEvent; import ch.liip.timeforcoffee.api.events.connectionsEvents.FetchConnectionsErrorEvent; import ch.liip.timeforcoffee.api.events.connectionsEvents.FetchConnectionsEvent; +import ch.liip.timeforcoffee.api.events.stationsSearchOneEvents.FetchStationsSearchOneEvent; +import ch.liip.timeforcoffee.api.events.stationsSearchOneEvents.StationsSearchOneFetchedEvent; import ch.liip.timeforcoffee.api.models.Connection; import ch.liip.timeforcoffee.api.models.Departure; import ch.liip.timeforcoffee.api.models.Station; @@ -67,7 +69,19 @@ public void updateConnections() { mActivity.showProgressLayout(true); } - mEventBus.post(new FetchConnectionsEvent(mStation.getIdStr(), mDeparture.getDestinationIdStr(), mDeparture.getDepartureStrForZvv(), mDeparture.getArrivalStrForZvv())); + if (mDeparture.getDestinationId() == 0) { + mEventBus.post(new FetchStationsSearchOneEvent(mDeparture.getDestinationName())); + } else { + mEventBus.post(new FetchConnectionsEvent(mStation.getIdStr(), mDeparture.getDestinationIdStr(), mDeparture.getDepartureStrForZvv(), mDeparture.getArrivalStrForZvv())); + } + } + + @Subscribe + public void onStationsFetchedEvent(StationsSearchOneFetchedEvent event) { + int destinationId = event.getStation().getId(); + mDeparture.setDestinationId(destinationId); + + updateConnections(); } @Subscribe diff --git a/mobile/src/main/java/ch/liip/timeforcoffee/presenter/StationSearchPresenter.java b/mobile/src/main/java/ch/liip/timeforcoffee/presenter/StationSearchPresenter.java index ab13c9c..e15f3f7 100644 --- a/mobile/src/main/java/ch/liip/timeforcoffee/presenter/StationSearchPresenter.java +++ b/mobile/src/main/java/ch/liip/timeforcoffee/presenter/StationSearchPresenter.java @@ -13,8 +13,8 @@ import ch.liip.timeforcoffee.activity.StationSearchActivity; import ch.liip.timeforcoffee.api.StationService; import ch.liip.timeforcoffee.api.ZvvApiService; -import ch.liip.timeforcoffee.api.events.FetchStationsSearchEvent; import ch.liip.timeforcoffee.api.events.stationsSearchEvents.FetchStationsSearchErrorEvent; +import ch.liip.timeforcoffee.api.events.stationsSearchEvents.FetchStationsSearchEvent; import ch.liip.timeforcoffee.api.events.stationsSearchEvents.StationsSearchFetchedEvent; import ch.liip.timeforcoffee.api.models.Station; import ch.liip.timeforcoffee.common.presenter.Presenter; @@ -49,14 +49,7 @@ public StationSearchPresenter(StationSearchActivity activity, String searchQuery @Override public void onResumeView() { - - } - - public void search() { - if (mSearchQuery != null && !mSearchQuery.isEmpty()) { - mActivity.showProgressLayout(true); - mEventBus.post(new FetchStationsSearchEvent(mSearchQuery)); - } + search(); } @Override @@ -67,6 +60,13 @@ public void onRefreshView() { @Override public void onPauseView() { } + public void search() { + if (mSearchQuery != null && !mSearchQuery.isEmpty()) { + mActivity.showProgressLayout(true); + mEventBus.post(new FetchStationsSearchEvent(mSearchQuery)); + } + } + @Subscribe public void onStationsFetchedEvent(StationsSearchFetchedEvent event) { mActivity.showProgressLayout(false);