From 948f99d524171a6ec86c50b3266263dfb127e139 Mon Sep 17 00:00:00 2001 From: arandaaron04 Date: Wed, 29 Nov 2023 18:05:03 -0500 Subject: [PATCH 1/7] GOStationCoordinatesApiClass.java added. --- src/data_access/API/GOStationCoordinatesApiClass.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/data_access/API/GOStationCoordinatesApiClass.java diff --git a/src/data_access/API/GOStationCoordinatesApiClass.java b/src/data_access/API/GOStationCoordinatesApiClass.java new file mode 100644 index 0000000..22ec157 --- /dev/null +++ b/src/data_access/API/GOStationCoordinatesApiClass.java @@ -0,0 +1,4 @@ +package data_access.API; + +public class GOStationCoordinatesApiClass { +} From faaa294849c5cc1d03a2fcd998555b1610e37120 Mon Sep 17 00:00:00 2001 From: arandaaron04 Date: Wed, 29 Nov 2023 20:01:20 -0500 Subject: [PATCH 2/7] Main and FileStationDataAccessObject updated accordingly; fixed GOStationCoordinatesApiClass.java. --- src/app/Main.java | 3 +- .../API/GOStationCoordinatesApiClass.java | 53 ++++++++++++++++++- .../FileStationDataAccessObject.java | 5 +- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/app/Main.java b/src/app/Main.java index 22368d5..dfeb236 100644 --- a/src/app/Main.java +++ b/src/app/Main.java @@ -1,5 +1,6 @@ package app; +import data_access.API.GOStationCoordinatesApiClass; import data_access.API.GOVehicleApiClass; import data_access.text_file.FileStationDataAccessObject; import data_access.API.GOStationApiClass; @@ -56,7 +57,7 @@ public static void main(String[] args) { FileStationDataAccessObject stationDataAccessObject; try { stationDataAccessObject = new FileStationDataAccessObject("./revisedStopData.txt", new StationFactory(), - new TrainFactory(), new GOStationApiClass(), new GOVehicleApiClass()); + new TrainFactory(), new GOStationApiClass(), new GOVehicleApiClass(), new GOStationCoordinatesApiClass()); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/data_access/API/GOStationCoordinatesApiClass.java b/src/data_access/API/GOStationCoordinatesApiClass.java index 22ec157..875088a 100644 --- a/src/data_access/API/GOStationCoordinatesApiClass.java +++ b/src/data_access/API/GOStationCoordinatesApiClass.java @@ -1,4 +1,55 @@ package data_access.API; -public class GOStationCoordinatesApiClass { +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class GOStationCoordinatesApiClass implements TrainApiInterface { + private final String PARTIAL_API_URL = "OpenDataAPI/api/V1"; + public GOStationCoordinatesApiClass () { + } + public List retrieveStationCoordinates(String stationId){ + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + HttpUrl httpUrl = new HttpUrl.Builder() + .scheme("http") + .host("api.openmetrolinx.com") + .addPathSegment(PARTIAL_API_URL) + .addPathSegment("Stop") + .addPathSegment("Details") + .addPathSegment(stationId) //getting station information for the station with the id denoted by stationId + .addQueryParameter("key", API_KEY) + .build(); + + Request request = new Request.Builder() + .url(httpUrl) + .addHeader("content-type", "application/json") + .build(); + try { + Response response = client.newCall(request).execute(); + String trainInfoJsonData = response.body().string(); + JSONObject metaDataJsonObj = new JSONObject(trainInfoJsonData); // This is where the MetaData is located at + + JSONObject stopJsonObj = metaDataJsonObj.getJSONObject("Stop"); + List coordinatesList = new ArrayList<>(); + JSONObject longitude = stopJsonObj.getJSONObject("Longitude"); + JSONObject latitude = stopJsonObj.getJSONObject("Latitude"); + coordinatesList.add(longitude.getString("Longitude")); + coordinatesList.add(latitude.getString("Latitude")); + + return coordinatesList; + + } catch (IOException | JSONException e) { + throw new RuntimeException(e); + } + + } } diff --git a/src/data_access/text_file/FileStationDataAccessObject.java b/src/data_access/text_file/FileStationDataAccessObject.java index f5027cf..49f865b 100644 --- a/src/data_access/text_file/FileStationDataAccessObject.java +++ b/src/data_access/text_file/FileStationDataAccessObject.java @@ -1,6 +1,7 @@ package data_access.text_file; import data_access.API.GOStationApiClass; +import data_access.API.GOStationCoordinatesApiClass; import data_access.API.GOVehicleApiClass; import entity.*; import use_case.StationInfo.StationInfoDataAccessInterface; @@ -21,14 +22,16 @@ public class FileStationDataAccessObject implements SearchDataAccessInterface, S private final GOStationApiClass goStationApiClass; private final GOVehicleApiClass goVehicleApiClass; + private final GOStationCoordinatesApiClass goStationCoordinatesApiClass; public FileStationDataAccessObject(String txtFilePath, StationFactory stationFactory, TrainFactory trainFactory, - GOStationApiClass goStationApiClass, GOVehicleApiClass goVehicleApiClass) throws IOException { + GOStationApiClass goStationApiClass, GOVehicleApiClass goVehicleApiClass, GOStationCoordinatesApiClass goStationCoordinatesApiClass) throws IOException { this.stationFactory = stationFactory; this.trainFactory = trainFactory; this.goStationApiClass = goStationApiClass; this.goVehicleApiClass = goVehicleApiClass; + this.goStationCoordinatesApiClass = goStationCoordinatesApiClass; stationTxtFile = new File(txtFilePath); // Reading the provided txt file that has a path specified by attribute txtFilePath From 98a59ff657091b879036e2938f5cba6c956adc9b Mon Sep 17 00:00:00 2001 From: arandaaron04 Date: Fri, 1 Dec 2023 02:30:08 -0500 Subject: [PATCH 3/7] CoordinatesFunction.java --- src/CoordinatesFunction.java | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/CoordinatesFunction.java diff --git a/src/CoordinatesFunction.java b/src/CoordinatesFunction.java new file mode 100644 index 0000000..a72b51f --- /dev/null +++ b/src/CoordinatesFunction.java @@ -0,0 +1,32 @@ +// Java program for the haversine formula +public class CoordinatesFunctions { + + private double GOTRAINSPEED = 38.88; // 140(km/hr) = 38.88(m/s) + + static double haversineDistance(double lat1, double lon1, + double lat2, double lon2) + { + // distance between latitudes and longitudes + double dLat = Math.toRadians(lat2 - lat1); + double dLon = Math.toRadians(lon2 - lon1); + + // convert to radians + lat1 = Math.toRadians(lat1); + lat2 = Math.toRadians(lat2); + + // apply formulae + double a = Math.pow(Math.sin(dLat / 2), 2) + + Math.pow(Math.sin(dLon / 2), 2) * + Math.cos(lat1) * + Math.cos(lat2); + double rad = 6371; + double c = 2 * Math.asin(Math.sqrt(a)); + return rad * c; + } + + static double time(double distance, double speed) { + double time = distance / speed; + + return time; + } +} From 7affa0fa547c87efb174ec1ed1b9115d0f4e437e Mon Sep 17 00:00:00 2001 From: arandaaron04 Date: Fri, 1 Dec 2023 02:30:41 -0500 Subject: [PATCH 4/7] CoordinatesFunction.java --- src/{CoordinatesFunction.java => CoordinatesFunctions.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{CoordinatesFunction.java => CoordinatesFunctions.java} (100%) diff --git a/src/CoordinatesFunction.java b/src/CoordinatesFunctions.java similarity index 100% rename from src/CoordinatesFunction.java rename to src/CoordinatesFunctions.java From ae520f7475b0c9f075072196c7a5ce3310dfc637 Mon Sep 17 00:00:00 2001 From: arandaaron04 Date: Fri, 1 Dec 2023 02:33:39 -0500 Subject: [PATCH 5/7] ShowIncomingVehiclesView.java added Labels --- src/view/ShowIncomingVehiclesView.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/view/ShowIncomingVehiclesView.java b/src/view/ShowIncomingVehiclesView.java index e08b1a9..34b6248 100644 --- a/src/view/ShowIncomingVehiclesView.java +++ b/src/view/ShowIncomingVehiclesView.java @@ -18,6 +18,8 @@ public class ShowIncomingVehiclesView extends JPanel implements ActionListener, private final ShowIncomingVehiclesViewModel showIncomingVehiclesViewModel; JLabel stationName; JLabel stationIncomingVehicles; + JLabel stationEstimatedTimeOfArrival; + JLabel stationTimeOfArrival; public ShowIncomingVehiclesView(ShowIncomingVehiclesViewModel showIncomingVehiclesViewModel) { this.showIncomingVehiclesViewModel = showIncomingVehiclesViewModel; @@ -32,12 +34,22 @@ public ShowIncomingVehiclesView(ShowIncomingVehiclesViewModel showIncomingVehicl JLabel stationIncomingVehiclesLabel = new JLabel("Incoming Vehicles: "); stationIncomingVehicles = new JLabel(); + JLabel stationEstimatedTimeOfArrivalLabel = new JLabel("Estimated Time of Arrival: "); + stationEstimatedTimeOfArrival = new JLabel(); + + JLabel stationTimeOfArrivalLabel = new JLabel("Time of Arrival: "); + stationTimeOfArrival = new JLabel(); + this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); this.add(title); this.add(stationNameLabel); this.add(stationName); this.add(stationIncomingVehiclesLabel); this.add(stationIncomingVehicles); + this.add(stationEstimatedTimeOfArrivalLabel); + this.add(stationEstimatedTimeOfArrival); + this.add(stationTimeOfArrivalLabel); + this.add(stationTimeOfArrival); } @Override From 65ff090b0670bc0c43c08ca216f179167ac6860f Mon Sep 17 00:00:00 2001 From: arandaaron04 Date: Fri, 1 Dec 2023 02:42:29 -0500 Subject: [PATCH 6/7] CoordinatesFunctions.java fixed time function, may or may not use final double --- src/CoordinatesFunctions.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/CoordinatesFunctions.java b/src/CoordinatesFunctions.java index a72b51f..5c848f7 100644 --- a/src/CoordinatesFunctions.java +++ b/src/CoordinatesFunctions.java @@ -1,7 +1,7 @@ // Java program for the haversine formula public class CoordinatesFunctions { - private double GOTRAINSPEED = 38.88; // 140(km/hr) = 38.88(m/s) + // private final double GOTRAINSPEED = 38.88; // 140(km/hr) = 38.88(m/s) static double haversineDistance(double lat1, double lon1, double lat2, double lon2) @@ -24,9 +24,9 @@ static double haversineDistance(double lat1, double lon1, return rad * c; } - static double time(double distance, double speed) { - double time = distance / speed; + static double time(double distance) { // double speed may be changed + final double GOTRAINSPEED = 38.88; - return time; + return distance / GOTRAINSPEED; } } From 8b1901ced11b1445d791567d5f62bf24c9aadc2b Mon Sep 17 00:00:00 2001 From: arandaaron04 Date: Fri, 1 Dec 2023 02:50:12 -0500 Subject: [PATCH 7/7] CoordinatesFunctions.java javaDocs and small changes --- src/CoordinatesFunctions.java | 38 +++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/CoordinatesFunctions.java b/src/CoordinatesFunctions.java index 5c848f7..6e67267 100644 --- a/src/CoordinatesFunctions.java +++ b/src/CoordinatesFunctions.java @@ -3,27 +3,49 @@ public class CoordinatesFunctions { // private final double GOTRAINSPEED = 38.88; // 140(km/hr) = 38.88(m/s) + /** + * Takes the Longitude and Latitude of two points and solves for distance. + * + * @param lat1 + * @param lon1 + * @param lat2 + * @param lon2 + * @return distance + */ static double haversineDistance(double lat1, double lon1, double lat2, double lon2) { - // distance between latitudes and longitudes - double dLat = Math.toRadians(lat2 - lat1); - double dLon = Math.toRadians(lon2 - lon1); + /** + * The distance between latitudes and longitudes + */ + double distanceLatitude = Math.toRadians(lat2 - lat1); + double distanceLongitude = Math.toRadians(lon2 - lon1); - // convert to radians + /** + * Convert to Radians + */ lat1 = Math.toRadians(lat1); lat2 = Math.toRadians(lat2); - // apply formulae - double a = Math.pow(Math.sin(dLat / 2), 2) + - Math.pow(Math.sin(dLon / 2), 2) * + /** + * Using Haversine to compute distance between the two + */ + double a = Math.pow(Math.sin(distanceLatitude / 2), 2) + + Math.pow(Math.sin(distanceLongitude / 2), 2) * Math.cos(lat1) * Math.cos(lat2); double rad = 6371; double c = 2 * Math.asin(Math.sqrt(a)); - return rad * c; + + return rad * c; // Distance between the two } + /** + * Calculates the time using speed and distance. + * + * @param distance + * @return time + */ static double time(double distance) { // double speed may be changed final double GOTRAINSPEED = 38.88;