feat: refactor JSON fetcher

This commit is contained in:
Martin Eyben 2024-11-24 13:12:17 +01:00
parent 10e36d97c4
commit 00f77897c9
10 changed files with 12 additions and 42 deletions

View File

@ -1,15 +1,11 @@
package eirb.pg203;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.util.Locale;
import eirb.pg203.utils.JSONFetcher;
import eirb.pg203.utils.JSONFetcherInterface;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@ -23,7 +19,7 @@ import eirb.pg203.utils.Coords;
public class City {
private String cityName;
private Coords cityCoords;
JSONFetcherInterface JSONFetcher = new JSONFetcher();
JSONFetcher JSONFetcher = new JSONFetcher();
/**
* Fetch data from adresse.data.gouv.fr

View File

@ -1,7 +1,5 @@
package eirb.pg203;
import eirb.pg203.utils.JSONFetcherInterface;
import org.json.JSONArray;
import org.json.JSONObject;
import eirb.pg203.utils.JSONFetcher;
@ -24,7 +22,7 @@ import eirb.pg203.WeatherData.Condition;
public class OpenMeteo implements WeatherDataAPI {
private static final String forecastBaseURL = "https://api.open-meteo.com/v1/forecast";
private static final String dailyQuery = "weather_code,temperature_2m_max,temperature_2m_min,wind_speed_10m_max,wind_direction_10m_dominant";
JSONFetcherInterface JSONFetcher = new JSONFetcher();
JSONFetcher JSONFetcher = new JSONFetcher();
Clock clock = Clock.systemUTC();
/**

View File

@ -1,6 +1,5 @@
package eirb.pg203;
import eirb.pg203.utils.JSONFetcherInterface;
import org.json.JSONObject;
import org.json.JSONArray;
@ -25,7 +24,7 @@ public class OpenWeatherMap implements WeatherDataAPI {
private static final String forecastBaseURL = "https://api.openweathermap.org/data/2.5/forecast";
private String APIKey;
Clock clock = Clock.systemUTC();
JSONFetcherInterface JSONFetcher = new JSONFetcher();
JSONFetcher JSONFetcher = new JSONFetcher();
OpenWeatherMap(String APIKey) {
this.APIKey = APIKey;

View File

@ -1,6 +1,5 @@
package eirb.pg203;
import eirb.pg203.utils.JSONFetcherInterface;
import org.json.JSONArray;
import org.json.JSONObject;
@ -19,7 +18,7 @@ import java.util.Locale;
*/
public class WeatherAPI implements WeatherDataAPI{
private final String weatherAPIKey;
JSONFetcherInterface JSONFetcher = new JSONFetcher();
JSONFetcher JSONFetcher = new JSONFetcher();
private static final String forecastBaseURL = "https://api.weatherapi.com/v1/forecast.json";
WeatherAPI(String weatherAPIKey) {

View File

@ -12,7 +12,7 @@ import org.json.JSONObject;
/**
* Util for http calls
*/
public class JSONFetcher implements JSONFetcherInterface{
public class JSONFetcher {
/**
* No need for constructor
@ -44,7 +44,6 @@ public class JSONFetcher implements JSONFetcherInterface{
* @return Json object of the response
* @throws IOException if the request failed
*/
@Override
public JSONObject fetch(URL url) throws IOException {
String result = fetchString(url);
@ -57,7 +56,6 @@ public class JSONFetcher implements JSONFetcherInterface{
* @return JSON array
* @throws IOException when request failed
*/
@Override
public JSONArray fetchArray(URL url) throws IOException {
String result = fetchString(url);

View File

@ -1,16 +0,0 @@
package eirb.pg203.utils;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.IOException;
import java.net.URL;
/**
* Interface use to be overrided by a fake jsonFetcher during tests
*/
public interface JSONFetcherInterface {
JSONObject fetch(URL url) throws IOException;
JSONArray fetchArray(URL url) throws IOException;
}

View File

@ -2,7 +2,6 @@ package eirb.pg203.fakeJSONFetcher;
import eirb.pg203.utils.FileResourcesUtils;
import eirb.pg203.utils.JSONFetcher;
import eirb.pg203.utils.JSONFetcherInterface;
import eirb.pg203.utils.SplitQueryUrl;
import org.json.JSONArray;
import org.json.JSONObject;
@ -13,7 +12,7 @@ import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
public class FakeJSONFetcherCity implements JSONFetcherInterface {
public class FakeJSONFetcherCity extends JSONFetcher{
JSONObject unknownCity = FileResourcesUtils.getFileFromResourceAsJson("City/fakeCity.json");
private static HashMap<String, JSONObject> cities(){

View File

@ -1,16 +1,14 @@
package eirb.pg203.fakeJSONFetcher;
import eirb.pg203.utils.FileResourcesUtils;
import eirb.pg203.utils.JSONFetcherInterface;
import eirb.pg203.utils.SplitQueryUrl;
import eirb.pg203.utils.JSONFetcher;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.IOException;
import java.net.URL;
import java.util.Map;
public class FakeJSONFetcherOpenMeteo implements JSONFetcherInterface {
public class FakeJSONFetcherOpenMeteo extends JSONFetcher {
private JSONObject responseExample() {
return FileResourcesUtils.getFileFromResourceAsJson("OpenMeteo/Bordeaux-partial-cloudy-rain-sunny.json");
}

View File

@ -1,17 +1,16 @@
package eirb.pg203.fakeJSONFetcher;
import eirb.pg203.utils.FileResourcesUtils;
import eirb.pg203.utils.JSONFetcherInterface;
import eirb.pg203.utils.JSONFetcher;
import eirb.pg203.utils.SplitQueryUrl;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.IOException;
import java.net.URL;
import java.time.Instant;
import java.util.Map;
public class FakeJSONFetcherOpenWeatherMap implements JSONFetcherInterface {
public class FakeJSONFetcherOpenWeatherMap extends JSONFetcher {
private final String apiKey = "realKey";
private final JSONObject wrongKeyResponse = FileResourcesUtils.getFileFromResourceAsJson("OpenWeatherMap/wrong-apikey.json");

View File

@ -1,7 +1,7 @@
package eirb.pg203.fakeJSONFetcher;
import eirb.pg203.utils.FileResourcesUtils;
import eirb.pg203.utils.JSONFetcherInterface;
import eirb.pg203.utils.JSONFetcher;
import eirb.pg203.utils.SplitQueryUrl;
import org.json.JSONArray;
import org.json.JSONObject;
@ -11,7 +11,7 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.Map;
public class FakeJSONFetcherWeatherAPI implements JSONFetcherInterface {
public class FakeJSONFetcherWeatherAPI extends JSONFetcher {
private final static String baseUrlFormat = "https://api.weatherapi.com/v1/forecast.json?key=%s&q=%s&days=%d";
private final String apiKey = "realKey";
private static final JSONObject wrongKeyRequest = FileResourcesUtils.getFileFromResourceAsJson("WeatherAPI/wrong-apikey.json");