From 44b543e65c0dfb492907501be4850536a87cb580 Mon Sep 17 00:00:00 2001 From: Prominence Date: Thu, 14 Apr 2022 23:30:44 +0300 Subject: [PATCH] Another portion of refactoring. Updated dependencies. --- pom.xml | 8 +- .../api/OpenWeatherMapClient.java | 9 +- .../api/request/AsyncRequestTerminator.java | 34 ------- .../api/request/RequestCustomizer.java | 50 ---------- .../api/request/RequestSettings.java | 4 + .../api/request/RequestTerminator.java | 46 --------- .../api/request/RequestUrlBuilder.java | 99 ------------------- .../AirPollutionAsyncRequestTerminator.java | 32 +++++- ...irPollutionAsyncRequestTerminatorImpl.java | 62 ------------ .../AirPollutionRequestCustomizer.java | 29 +++--- .../AirPollutionRequestCustomizerImpl.java | 45 --------- .../AirPollutionRequestTerminator.java | 30 +++++- .../AirPollutionRequestTerminatorImpl.java | 60 ----------- .../air/pollution/AirPollutionRequester.java | 79 ++++++++------- .../pollution/AirPollutionRequesterImpl.java | 68 ------------- .../CurrentAirPollutionRequester.java | 27 +++-- .../ForecastAirPollutionRequester.java} | 30 +++--- .../HistoricalAirPollutionRequester.java} | 33 +++---- .../CurrentAirPollutionRequesterImpl.java | 53 ---------- .../ForecastAirPollutionRequester.java | 41 -------- .../ForecastAirPollutionRequesterImpl.java | 53 ---------- .../HistoricalAirPollutionRequester.java | 43 -------- .../HistoricalAirPollutionRequesterImpl.java | 55 ----------- ...ourStepForecastAsyncRequestTerminator.java | 36 +++++-- ...tepForecastAsyncRequestTerminatorImpl.java | 70 ------------- ...hreeHourStepForecastRequestCustomizer.java | 52 ++++++---- ...HourStepForecastRequestCustomizerImpl.java | 84 ---------------- ...hreeHourStepForecastRequestTerminator.java | 36 +++++-- ...HourStepForecastRequestTerminatorImpl.java | 68 ------------- ...FiveDayThreeHourStepForecastRequester.java | 92 ++++++++--------- ...DayThreeHourStepForecastRequesterImpl.java | 87 ---------------- .../onecall/OneCallWeatherRequester.java | 28 +++--- .../onecall/OneCallWeatherRequesterImpl.java | 56 ----------- ...lCurrentWeatherAsyncRequestTerminator.java | 32 +++++- ...rentWeatherAsyncRequestTerminatorImpl.java | 64 ------------ ...neCallCurrentWeatherRequestCustomizer.java | 59 +++++++---- ...llCurrentWeatherRequestCustomizerImpl.java | 88 ----------------- ...neCallCurrentWeatherRequestTerminator.java | 29 +++++- ...llCurrentWeatherRequestTerminatorImpl.java | 62 ------------ .../OneCallCurrentWeatherRequester.java | 23 +++-- ...storicalWeatherAsyncRequestTerminator.java | 32 +++++- ...icalWeatherAsyncRequestTerminatorImpl.java | 64 ------------ ...allHistoricalWeatherRequestCustomizer.java | 41 +++++--- ...istoricalWeatherRequestCustomizerImpl.java | 70 ------------- ...allHistoricalWeatherRequestTerminator.java | 30 +++++- ...istoricalWeatherRequestTerminatorImpl.java | 62 ------------ .../OneCallHistoricalWeatherRequester.java | 25 +++-- ...ResultCurrentWeatherRequestCustomizer.java | 4 +- 48 files changed, 539 insertions(+), 1745 deletions(-) delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/AsyncRequestTerminator.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/RequestCustomizer.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/RequestTerminator.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/RequestUrlBuilder.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionAsyncRequestTerminatorImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestCustomizerImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestTerminatorImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequesterImpl.java rename src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/{current => }/CurrentAirPollutionRequester.java (59%) rename src/main/java/com/github/prominence/openweathermap/api/request/{onecall/current/OneCallCurrentWeatherRequesterImpl.java => air/pollution/ForecastAirPollutionRequester.java} (54%) rename src/main/java/com/github/prominence/openweathermap/api/request/{onecall/historical/OneCallHistoricalWeatherRequesterImpl.java => air/pollution/HistoricalAirPollutionRequester.java} (51%) delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/current/CurrentAirPollutionRequesterImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/forecast/ForecastAirPollutionRequester.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/forecast/ForecastAirPollutionRequesterImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/historical/HistoricalAirPollutionRequester.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/historical/HistoricalAirPollutionRequesterImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastAsyncRequestTerminatorImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestCustomizerImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestTerminatorImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequesterImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherRequesterImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherAsyncRequestTerminatorImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestCustomizerImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestTerminatorImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherAsyncRequestTerminatorImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestCustomizerImpl.java delete mode 100644 src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestTerminatorImpl.java diff --git a/pom.xml b/pom.xml index 6d9a854..f5e3b4b 100644 --- a/pom.xml +++ b/pom.xml @@ -163,25 +163,25 @@ com.fasterxml.jackson.core jackson-databind - 2.12.4 + 2.13.2.2 org.slf4j slf4j-api - 1.7.32 + 1.7.36 compile org.junit.jupiter junit-jupiter-engine - 5.7.2 + 5.8.2 test org.junit.platform junit-platform-runner - 1.7.2 + 1.8.2 \ No newline at end of file diff --git a/src/main/java/com/github/prominence/openweathermap/api/OpenWeatherMapClient.java b/src/main/java/com/github/prominence/openweathermap/api/OpenWeatherMapClient.java index 7dc8465..c29d1eb 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/OpenWeatherMapClient.java +++ b/src/main/java/com/github/prominence/openweathermap/api/OpenWeatherMapClient.java @@ -26,11 +26,8 @@ import com.github.prominence.openweathermap.api.annotation.SubscriptionAvailabil import com.github.prominence.openweathermap.api.conf.TimeoutSettings; import com.github.prominence.openweathermap.api.request.RequestSettings; import com.github.prominence.openweathermap.api.request.air.pollution.AirPollutionRequester; -import com.github.prominence.openweathermap.api.request.air.pollution.AirPollutionRequesterImpl; import com.github.prominence.openweathermap.api.request.forecast.free.FiveDayThreeHourStepForecastRequester; -import com.github.prominence.openweathermap.api.request.forecast.free.FiveDayThreeHourStepForecastRequesterImpl; import com.github.prominence.openweathermap.api.request.onecall.OneCallWeatherRequester; -import com.github.prominence.openweathermap.api.request.onecall.OneCallWeatherRequesterImpl; import com.github.prominence.openweathermap.api.request.weather.CurrentWeatherRequester; import static com.github.prominence.openweathermap.api.enums.SubscriptionPlan.ALL; @@ -74,7 +71,7 @@ public class OpenWeatherMapClient { */ @SubscriptionAvailability(plans = ALL) public FiveDayThreeHourStepForecastRequester forecast5Day3HourStep() { - return new FiveDayThreeHourStepForecastRequesterImpl(apiKey); + return new FiveDayThreeHourStepForecastRequester(new RequestSettings(apiKey, timeoutSettings)); } /** @@ -84,7 +81,7 @@ public class OpenWeatherMapClient { */ @SubscriptionAvailability(plans = ALL) public OneCallWeatherRequester oneCall() { - return new OneCallWeatherRequesterImpl(apiKey); + return new OneCallWeatherRequester(new RequestSettings(apiKey, timeoutSettings)); } /** @@ -94,6 +91,6 @@ public class OpenWeatherMapClient { */ @SubscriptionAvailability(plans = ALL) public AirPollutionRequester airPollution() { - return new AirPollutionRequesterImpl(apiKey); + return new AirPollutionRequester(new RequestSettings(apiKey, timeoutSettings)); } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/AsyncRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/AsyncRequestTerminator.java deleted file mode 100644 index 099f958..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/AsyncRequestTerminator.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request; - -import java.util.concurrent.CompletableFuture; - -/** - * The interface Async request terminator. - * - * @param the type parameter - * @param the type parameter - */ -public interface AsyncRequestTerminator extends RequestTerminator, CompletableFuture> { -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/RequestCustomizer.java b/src/main/java/com/github/prominence/openweathermap/api/request/RequestCustomizer.java deleted file mode 100644 index daf544e..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/RequestCustomizer.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request; - -import com.github.prominence.openweathermap.api.enums.Language; -import com.github.prominence.openweathermap.api.enums.UnitSystem; - -/** - * The interface Request customizer. - * - * @param the type parameter - */ -public interface RequestCustomizer> { - - /** - * Customize language. - * - * @param language the language - * @return the request customizer - */ - T language(Language language); - - /** - * Customize unit system. - * - * @param unitSystem the unit system - * @return the request customizer - */ - T unitSystem(UnitSystem unitSystem); -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/RequestSettings.java b/src/main/java/com/github/prominence/openweathermap/api/request/RequestSettings.java index 3ce73ed..db0b103 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/RequestSettings.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/RequestSettings.java @@ -82,6 +82,10 @@ public class RequestSettings { this.requestParameters.put(key, value); } + public void removeRequestParameter(String key) { + this.requestParameters.remove(key); + } + public Map getRequestParameters() { return requestParameters; } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/RequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/RequestTerminator.java deleted file mode 100644 index 20a8f97..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/RequestTerminator.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request; - -/** - * The interface Request terminator. - * - * @param the type parameter - * @param the type parameter - */ -public interface RequestTerminator { - - /** - * Java object response format. - * - * @return the java object - */ - T asJava(); - - /** - * JSON response format. - * - * @return the JSON string - */ - S asJSON(); -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/RequestUrlBuilder.java b/src/main/java/com/github/prominence/openweathermap/api/request/RequestUrlBuilder.java deleted file mode 100644 index 5d4240d..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/RequestUrlBuilder.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request; - -import com.github.prominence.openweathermap.api.enums.Language; -import com.github.prominence.openweathermap.api.enums.UnitSystem; - -import java.util.HashMap; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * The type Request url builder. - */ -@Deprecated -public class RequestUrlBuilder { - - private static final String API_KEY_PARAM_NAME = "appid"; - - private final StringBuilder builder = new StringBuilder("http://api.openweathermap.org/data/2.5/"); - private final Map requestParameters = new HashMap<>(); - - /** - * Instantiates a new Request url builder. - * - * @param key the API key - */ - public RequestUrlBuilder(String key) { - requestParameters.put(API_KEY_PARAM_NAME, key); - } - - /** - * Appends value. - * - * @param value the value - */ - public void append(String value) { - builder.append(value); - } - - /** - * Adds request parameter. - * - * @param key the key - * @param value the value - */ - public void addRequestParameter(String key, Object value) { - requestParameters.put(key, value); - } - - /** - * Applies customization. - * - * @param language the language - * @param unitSystem the unit system - */ - public void applyCustomization(Language language, UnitSystem unitSystem) { - if (language != null) { - addRequestParameter("lang", language.getValue()); - } - if (unitSystem != null && unitSystem != UnitSystem.STANDARD) { - addRequestParameter("units", unitSystem.getValue()); - } - } - - /** - * Builds url string. - * - * @return the string - */ - public String buildUrl() { - final String joinedParameters = requestParameters.entrySet().stream() - .map(entry -> entry.getKey() + "=" + entry.getValue()) - .collect(Collectors.joining("&")); - builder.append('?'); - builder.append(joinedParameters); - return builder.toString(); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionAsyncRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionAsyncRequestTerminator.java index 608e60f..06e64e0 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionAsyncRequestTerminator.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionAsyncRequestTerminator.java @@ -24,11 +24,37 @@ package com.github.prominence.openweathermap.api.request.air.pollution; +import com.github.prominence.openweathermap.api.mapper.AirPollutionResponseMapper; import com.github.prominence.openweathermap.api.model.air.pollution.AirPollutionDetails; -import com.github.prominence.openweathermap.api.request.AsyncRequestTerminator; +import com.github.prominence.openweathermap.api.request.RequestSettings; +import com.github.prominence.openweathermap.api.utils.RequestUtils; + +import java.util.concurrent.CompletableFuture; /** - * The interface Current air pollution async request terminator. + * The type Air pollution async request terminator. */ -public interface AirPollutionAsyncRequestTerminator extends AsyncRequestTerminator { +public class AirPollutionAsyncRequestTerminator { + private final RequestSettings requestSettings; + + /** + * Instantiates a new Air pollution async request terminator. + * + * @param requestSettings request settings object. + */ + public AirPollutionAsyncRequestTerminator(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public CompletableFuture asJava() { + return CompletableFuture.supplyAsync(() -> new AirPollutionResponseMapper().mapToAirPollution(getRawResponse())); + } + + public CompletableFuture asJSON() { + return CompletableFuture.supplyAsync(this::getRawResponse); + } + + private String getRawResponse() { + return RequestUtils.getResponse(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionAsyncRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionAsyncRequestTerminatorImpl.java deleted file mode 100644 index 12bb2cd..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionAsyncRequestTerminatorImpl.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * - * * Copyright (c) 2021 Alexey Zinchenko - * * - * * Permission is hereby granted, free of charge, to any person obtaining a copy - * * of this software and associated documentation files (the "Software"), to deal - * * in the Software without restriction, including without limitation the rights - * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * * copies of the Software, and to permit persons to whom the Software is - * * furnished to do so, subject to the following conditions: - * * - * * The above copyright notice and this permission notice shall be included in all - * * copies or substantial portions of the Software. - * * - * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * * SOFTWARE. - * - */ - -package com.github.prominence.openweathermap.api.request.air.pollution; - -import com.github.prominence.openweathermap.api.mapper.AirPollutionResponseMapper; -import com.github.prominence.openweathermap.api.model.air.pollution.AirPollutionDetails; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.utils.RequestUtils; - -import java.util.concurrent.CompletableFuture; - -/** - * The type Air pollution async request terminator. - */ -public class AirPollutionAsyncRequestTerminatorImpl implements AirPollutionAsyncRequestTerminator { - private final RequestUrlBuilder urlBuilder; - - /** - * Instantiates a new Air pollution async request terminator. - * - * @param urlBuilder the url builder - */ - public AirPollutionAsyncRequestTerminatorImpl(RequestUrlBuilder urlBuilder) { - this.urlBuilder = urlBuilder; - } - - @Override - public CompletableFuture asJava() { - return CompletableFuture.supplyAsync(() -> new AirPollutionResponseMapper().mapToAirPollution(getRawResponse())); - } - - @Override - public CompletableFuture asJSON() { - return CompletableFuture.supplyAsync(this::getRawResponse); - } - - private String getRawResponse() { - return RequestUtils.getResponse(urlBuilder.buildUrl()); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestCustomizer.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestCustomizer.java index d4b35ef..6bd8b3c 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestCustomizer.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestCustomizer.java @@ -24,21 +24,28 @@ package com.github.prominence.openweathermap.api.request.air.pollution; +import com.github.prominence.openweathermap.api.request.RequestSettings; + /** - * The interface Current air pollution request customizer. + * The Air Pollution request customizer. */ -public interface AirPollutionRequestCustomizer { - /** - * Retrieve current air pollution request terminator. - * - * @return the current air pollution request terminator - */ - AirPollutionRequestTerminator retrieve(); +public class AirPollutionRequestCustomizer { + private final RequestSettings requestSettings; /** - * Retrieve async current air pollution async request terminator. + * Instantiates a new Air pollution request customizer. * - * @return the current air pollution async request terminator + * @param requestSettings request settings object. */ - AirPollutionAsyncRequestTerminator retrieveAsync(); + public AirPollutionRequestCustomizer(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public AirPollutionRequestTerminator retrieve() { + return new AirPollutionRequestTerminator(requestSettings); + } + + public AirPollutionAsyncRequestTerminator retrieveAsync() { + return new AirPollutionAsyncRequestTerminator(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestCustomizerImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestCustomizerImpl.java deleted file mode 100644 index 2c75b81..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestCustomizerImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * - * * Copyright (c) 2021 Alexey Zinchenko - * * - * * Permission is hereby granted, free of charge, to any person obtaining a copy - * * of this software and associated documentation files (the "Software"), to deal - * * in the Software without restriction, including without limitation the rights - * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * * copies of the Software, and to permit persons to whom the Software is - * * furnished to do so, subject to the following conditions: - * * - * * The above copyright notice and this permission notice shall be included in all - * * copies or substantial portions of the Software. - * * - * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * * SOFTWARE. - * - */ - -package com.github.prominence.openweathermap.api.request.air.pollution; - -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; - -public class AirPollutionRequestCustomizerImpl implements AirPollutionRequestCustomizer { - private final RequestUrlBuilder urlBuilder; - - public AirPollutionRequestCustomizerImpl(RequestUrlBuilder urlBuilder) { - this.urlBuilder = urlBuilder; - } - - @Override - public AirPollutionRequestTerminator retrieve() { - return new AirPollutionRequestTerminatorImpl(urlBuilder); - } - - @Override - public AirPollutionAsyncRequestTerminator retrieveAsync() { - return new AirPollutionAsyncRequestTerminatorImpl(urlBuilder); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestTerminator.java index 64f4870..4aeb066 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestTerminator.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestTerminator.java @@ -24,11 +24,35 @@ package com.github.prominence.openweathermap.api.request.air.pollution; +import com.github.prominence.openweathermap.api.mapper.AirPollutionResponseMapper; import com.github.prominence.openweathermap.api.model.air.pollution.AirPollutionDetails; -import com.github.prominence.openweathermap.api.request.RequestTerminator; +import com.github.prominence.openweathermap.api.request.RequestSettings; +import com.github.prominence.openweathermap.api.utils.RequestUtils; /** - * The interface Current air pollution request terminator. + * The type Air pollution request terminator. */ -public interface AirPollutionRequestTerminator extends RequestTerminator { +public class AirPollutionRequestTerminator { + private final RequestSettings requestSettings; + + /** + * Instantiates a new Air pollution request terminator. + * + * @param requestSettings request settings object. + */ + public AirPollutionRequestTerminator(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public AirPollutionDetails asJava() { + return new AirPollutionResponseMapper().mapToAirPollution(getRawResponse()); + } + + public String asJSON() { + return getRawResponse(); + } + + private String getRawResponse() { + return RequestUtils.getResponse(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestTerminatorImpl.java deleted file mode 100644 index 7becb96..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestTerminatorImpl.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * - * * Copyright (c) 2021 Alexey Zinchenko - * * - * * Permission is hereby granted, free of charge, to any person obtaining a copy - * * of this software and associated documentation files (the "Software"), to deal - * * in the Software without restriction, including without limitation the rights - * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * * copies of the Software, and to permit persons to whom the Software is - * * furnished to do so, subject to the following conditions: - * * - * * The above copyright notice and this permission notice shall be included in all - * * copies or substantial portions of the Software. - * * - * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * * SOFTWARE. - * - */ - -package com.github.prominence.openweathermap.api.request.air.pollution; - -import com.github.prominence.openweathermap.api.mapper.AirPollutionResponseMapper; -import com.github.prominence.openweathermap.api.model.air.pollution.AirPollutionDetails; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.utils.RequestUtils; - -/** - * The type Air pollution request terminator. - */ -public class AirPollutionRequestTerminatorImpl implements AirPollutionRequestTerminator { - private final RequestUrlBuilder urlBuilder; - - /** - * Instantiates a new Air pollution request terminator. - * - * @param urlBuilder the url builder - */ - public AirPollutionRequestTerminatorImpl(RequestUrlBuilder urlBuilder) { - this.urlBuilder = urlBuilder; - } - - @Override - public AirPollutionDetails asJava() { - return new AirPollutionResponseMapper().mapToAirPollution(getRawResponse()); - } - - @Override - public String asJSON() { - return getRawResponse(); - } - - private String getRawResponse() { - return RequestUtils.getResponse(urlBuilder.buildUrl()); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequester.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequester.java index e0f4ba3..cb7a913 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequester.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequester.java @@ -1,53 +1,58 @@ /* - * Copyright (c) 2021 Alexey Zinchenko * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: + * * Copyright (c) 2021 Alexey Zinchenko + * * + * * Permission is hereby granted, free of charge, to any person obtaining a copy + * * of this software and associated documentation files (the "Software"), to deal + * * in the Software without restriction, including without limitation the rights + * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * * copies of the Software, and to permit persons to whom the Software is + * * furnished to do so, subject to the following conditions: + * * + * * The above copyright notice and this permission notice shall be included in all + * * copies or substantial portions of the Software. + * * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * * SOFTWARE. * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. */ package com.github.prominence.openweathermap.api.request.air.pollution; -import com.github.prominence.openweathermap.api.request.air.pollution.current.CurrentAirPollutionRequester; -import com.github.prominence.openweathermap.api.request.air.pollution.forecast.ForecastAirPollutionRequester; -import com.github.prominence.openweathermap.api.request.air.pollution.historical.HistoricalAirPollutionRequester; +import com.github.prominence.openweathermap.api.request.RequestSettings; /** - * The interface Air pollution requester. + * The type Air pollution requester. */ -public interface AirPollutionRequester { - /** - * Current current air pollution requester. - * - * @return the current air pollution requester - */ - CurrentAirPollutionRequester current(); +public class AirPollutionRequester { + private final RequestSettings requestSettings; /** - * Forecast forecast air pollution requester. + * Instantiates a new Air pollution requester. * - * @return the forecast air pollution requester + * @param requestSettings request settings object. */ - ForecastAirPollutionRequester forecast(); + public AirPollutionRequester(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } - /** - * Historical historical air pollution requester. - * - * @return the historical air pollution requester - */ - HistoricalAirPollutionRequester historical(); + public CurrentAirPollutionRequester current() { + requestSettings.appendToURL("air_pollution"); + return new CurrentAirPollutionRequester(requestSettings); + } + + public ForecastAirPollutionRequester forecast() { + requestSettings.appendToURL("air_pollution/forecast"); + return new ForecastAirPollutionRequester(requestSettings); + } + + public HistoricalAirPollutionRequester historical() { + requestSettings.appendToURL("air_pollution/history"); + return new HistoricalAirPollutionRequester(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequesterImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequesterImpl.java deleted file mode 100644 index ebc7a6c..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequesterImpl.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * - * * Copyright (c) 2021 Alexey Zinchenko - * * - * * Permission is hereby granted, free of charge, to any person obtaining a copy - * * of this software and associated documentation files (the "Software"), to deal - * * in the Software without restriction, including without limitation the rights - * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * * copies of the Software, and to permit persons to whom the Software is - * * furnished to do so, subject to the following conditions: - * * - * * The above copyright notice and this permission notice shall be included in all - * * copies or substantial portions of the Software. - * * - * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * * SOFTWARE. - * - */ - -package com.github.prominence.openweathermap.api.request.air.pollution; - -import com.github.prominence.openweathermap.api.conf.TimeoutSettings; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.request.air.pollution.current.CurrentAirPollutionRequester; -import com.github.prominence.openweathermap.api.request.air.pollution.current.CurrentAirPollutionRequesterImpl; -import com.github.prominence.openweathermap.api.request.air.pollution.forecast.ForecastAirPollutionRequester; -import com.github.prominence.openweathermap.api.request.air.pollution.forecast.ForecastAirPollutionRequesterImpl; -import com.github.prominence.openweathermap.api.request.air.pollution.historical.HistoricalAirPollutionRequester; -import com.github.prominence.openweathermap.api.request.air.pollution.historical.HistoricalAirPollutionRequesterImpl; - -/** - * The type Air pollution requester. - */ -public class AirPollutionRequesterImpl implements AirPollutionRequester { - private final RequestUrlBuilder urlBuilder; - - /** - * Instantiates a new Air pollution requester. - * - * @param apiKey the api key - */ - public AirPollutionRequesterImpl(String apiKey) { - urlBuilder = new RequestUrlBuilder(apiKey); - } - - @Override - public CurrentAirPollutionRequester current() { - urlBuilder.append("air_pollution"); - return new CurrentAirPollutionRequesterImpl(urlBuilder); - } - - @Override - public ForecastAirPollutionRequester forecast() { - urlBuilder.append("air_pollution/forecast"); - return new ForecastAirPollutionRequesterImpl(urlBuilder); - } - - @Override - public HistoricalAirPollutionRequester historical() { - urlBuilder.append("air_pollution/history"); - return new HistoricalAirPollutionRequesterImpl(urlBuilder); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/current/CurrentAirPollutionRequester.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/CurrentAirPollutionRequester.java similarity index 59% rename from src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/current/CurrentAirPollutionRequester.java rename to src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/CurrentAirPollutionRequester.java index f9ef4a4..7ab4630 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/current/CurrentAirPollutionRequester.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/CurrentAirPollutionRequester.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Alexey Zinchenko + * Copyright (c) 2022 Alexey Zinchenko * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,20 +20,29 @@ * SOFTWARE. */ -package com.github.prominence.openweathermap.api.request.air.pollution.current; +package com.github.prominence.openweathermap.api.request.air.pollution; import com.github.prominence.openweathermap.api.model.Coordinate; -import com.github.prominence.openweathermap.api.request.air.pollution.AirPollutionRequestCustomizer; +import com.github.prominence.openweathermap.api.request.RequestSettings; /** - * The interface Current air pollution requester. + * The type Current air pollution requester. */ -public interface CurrentAirPollutionRequester { +public class CurrentAirPollutionRequester { + private final RequestSettings requestSettings; + /** - * By coordinate current air pollution request customizer. + * Instantiates a new Current air pollution requester. * - * @param coordinate the coordinate - * @return the current air pollution request customizer + * @param requestSettings request settings object. */ - AirPollutionRequestCustomizer byCoordinate(Coordinate coordinate); + public CurrentAirPollutionRequester(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public AirPollutionRequestCustomizer byCoordinate(Coordinate coordinate) { + requestSettings.putRequestParameter("lat", String.valueOf(coordinate.getLatitude())); + requestSettings.putRequestParameter("lon", String.valueOf(coordinate.getLongitude())); + return new AirPollutionRequestCustomizer(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequesterImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/ForecastAirPollutionRequester.java similarity index 54% rename from src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequesterImpl.java rename to src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/ForecastAirPollutionRequester.java index 3da0121..0dfd06c 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequesterImpl.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/ForecastAirPollutionRequester.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Alexey Zinchenko + * Copyright (c) 2022 Alexey Zinchenko * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,31 +20,29 @@ * SOFTWARE. */ -package com.github.prominence.openweathermap.api.request.onecall.current; +package com.github.prominence.openweathermap.api.request.air.pollution; import com.github.prominence.openweathermap.api.model.Coordinate; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; +import com.github.prominence.openweathermap.api.request.RequestSettings; /** - * The type One call current weather requester. + * The type Forecast air pollution requester. */ -public class OneCallCurrentWeatherRequesterImpl implements OneCallCurrentWeatherRequester { - private final RequestUrlBuilder urlBuilder; +public class ForecastAirPollutionRequester { + private final RequestSettings requestSettings; /** - * Instantiates a new One call current weather requester. + * Instantiates a new Forecast air pollution requester. * - * @param urlBuilder the url builder + * @param requestSettings request settings object. */ - public OneCallCurrentWeatherRequesterImpl(RequestUrlBuilder urlBuilder) { - this.urlBuilder = urlBuilder; - urlBuilder.append("onecall"); + public ForecastAirPollutionRequester(RequestSettings requestSettings) { + this.requestSettings = requestSettings; } - @Override - public OneCallCurrentWeatherRequestCustomizer byCoordinate(Coordinate coordinate) { - urlBuilder.addRequestParameter("lat", String.valueOf(coordinate.getLatitude())); - urlBuilder.addRequestParameter("lon", String.valueOf(coordinate.getLongitude())); - return new OneCallCurrentWeatherRequestCustomizerImpl(urlBuilder); + public AirPollutionRequestCustomizer byCoordinate(Coordinate coordinate) { + requestSettings.putRequestParameter("lat", String.valueOf(coordinate.getLatitude())); + requestSettings.putRequestParameter("lon", String.valueOf(coordinate.getLongitude())); + return new AirPollutionRequestCustomizer(requestSettings); } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequesterImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/HistoricalAirPollutionRequester.java similarity index 51% rename from src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequesterImpl.java rename to src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/HistoricalAirPollutionRequester.java index 928b46a..506c8b2 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequesterImpl.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/HistoricalAirPollutionRequester.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Alexey Zinchenko + * Copyright (c) 2022 Alexey Zinchenko * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,32 +20,31 @@ * SOFTWARE. */ -package com.github.prominence.openweathermap.api.request.onecall.historical; +package com.github.prominence.openweathermap.api.request.air.pollution; import com.github.prominence.openweathermap.api.model.Coordinate; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; +import com.github.prominence.openweathermap.api.request.RequestSettings; /** - * The type One call historical weather requester. + * The type Historical air pollution requester. */ -public class OneCallHistoricalWeatherRequesterImpl implements OneCallHistoricalWeatherRequester { - private final RequestUrlBuilder urlBuilder; +public class HistoricalAirPollutionRequester { + private final RequestSettings requestSettings; /** - * Instantiates a new One call historical weather requester. + * Instantiates a new Historical air pollution requester. * - * @param urlBuilder the url builder + * @param requestSettings request settings object. */ - public OneCallHistoricalWeatherRequesterImpl(RequestUrlBuilder urlBuilder) { - this.urlBuilder = urlBuilder; - urlBuilder.append("onecall/timemachine"); + public HistoricalAirPollutionRequester(RequestSettings requestSettings) { + this.requestSettings = requestSettings; } - @Override - public OneCallHistoricalWeatherRequestCustomizer byCoordinateAndTimestamp(Coordinate coordinate, long unixTime) { - urlBuilder.addRequestParameter("lat", coordinate.getLatitude()); - urlBuilder.addRequestParameter("lon", coordinate.getLongitude()); - urlBuilder.addRequestParameter("dt", unixTime); - return new OneCallHistoricalWeatherRequestCustomizerImpl(urlBuilder); + public AirPollutionRequestCustomizer byCoordinateAndPeriod(Coordinate coordinate, long startUnixTime, long endUnixTime) { + requestSettings.putRequestParameter("lat", String.valueOf(coordinate.getLatitude())); + requestSettings.putRequestParameter("lon", String.valueOf(coordinate.getLongitude())); + requestSettings.putRequestParameter("start", String.valueOf(startUnixTime)); + requestSettings.putRequestParameter("end", String.valueOf(endUnixTime)); + return new AirPollutionRequestCustomizer(requestSettings); } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/current/CurrentAirPollutionRequesterImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/current/CurrentAirPollutionRequesterImpl.java deleted file mode 100644 index 4b770a0..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/current/CurrentAirPollutionRequesterImpl.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * - * * Copyright (c) 2021 Alexey Zinchenko - * * - * * Permission is hereby granted, free of charge, to any person obtaining a copy - * * of this software and associated documentation files (the "Software"), to deal - * * in the Software without restriction, including without limitation the rights - * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * * copies of the Software, and to permit persons to whom the Software is - * * furnished to do so, subject to the following conditions: - * * - * * The above copyright notice and this permission notice shall be included in all - * * copies or substantial portions of the Software. - * * - * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * * SOFTWARE. - * - */ - -package com.github.prominence.openweathermap.api.request.air.pollution.current; - -import com.github.prominence.openweathermap.api.model.Coordinate; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.request.air.pollution.AirPollutionRequestCustomizer; -import com.github.prominence.openweathermap.api.request.air.pollution.AirPollutionRequestCustomizerImpl; - -/** - * The type Current air pollution requester. - */ -public class CurrentAirPollutionRequesterImpl implements CurrentAirPollutionRequester { - private final RequestUrlBuilder urlBuilder; - - /** - * Instantiates a new Current air pollution requester. - * - * @param urlBuilder the url builder - */ - public CurrentAirPollutionRequesterImpl(RequestUrlBuilder urlBuilder) { - this.urlBuilder = urlBuilder; - } - - @Override - public AirPollutionRequestCustomizer byCoordinate(Coordinate coordinate) { - urlBuilder.addRequestParameter("lat", String.valueOf(coordinate.getLatitude())); - urlBuilder.addRequestParameter("lon", String.valueOf(coordinate.getLongitude())); - return new AirPollutionRequestCustomizerImpl(urlBuilder); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/forecast/ForecastAirPollutionRequester.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/forecast/ForecastAirPollutionRequester.java deleted file mode 100644 index 7dec255..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/forecast/ForecastAirPollutionRequester.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * - * * Copyright (c) 2021 Alexey Zinchenko - * * - * * Permission is hereby granted, free of charge, to any person obtaining a copy - * * of this software and associated documentation files (the "Software"), to deal - * * in the Software without restriction, including without limitation the rights - * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * * copies of the Software, and to permit persons to whom the Software is - * * furnished to do so, subject to the following conditions: - * * - * * The above copyright notice and this permission notice shall be included in all - * * copies or substantial portions of the Software. - * * - * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * * SOFTWARE. - * - */ - -package com.github.prominence.openweathermap.api.request.air.pollution.forecast; - -import com.github.prominence.openweathermap.api.model.Coordinate; -import com.github.prominence.openweathermap.api.request.air.pollution.AirPollutionRequestCustomizer; - -/** - * The interface Forecast air pollution requester. - */ -public interface ForecastAirPollutionRequester { - /** - * By coordinate forecast air pollution request customizer. - * - * @param coordinate the coordinate - * @return the forecast air pollution request customizer - */ - AirPollutionRequestCustomizer byCoordinate(Coordinate coordinate); -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/forecast/ForecastAirPollutionRequesterImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/forecast/ForecastAirPollutionRequesterImpl.java deleted file mode 100644 index 87d5e37..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/forecast/ForecastAirPollutionRequesterImpl.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * - * * Copyright (c) 2021 Alexey Zinchenko - * * - * * Permission is hereby granted, free of charge, to any person obtaining a copy - * * of this software and associated documentation files (the "Software"), to deal - * * in the Software without restriction, including without limitation the rights - * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * * copies of the Software, and to permit persons to whom the Software is - * * furnished to do so, subject to the following conditions: - * * - * * The above copyright notice and this permission notice shall be included in all - * * copies or substantial portions of the Software. - * * - * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * * SOFTWARE. - * - */ - -package com.github.prominence.openweathermap.api.request.air.pollution.forecast; - -import com.github.prominence.openweathermap.api.model.Coordinate; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.request.air.pollution.AirPollutionRequestCustomizer; -import com.github.prominence.openweathermap.api.request.air.pollution.AirPollutionRequestCustomizerImpl; - -/** - * The type Forecast air pollution requester. - */ -public class ForecastAirPollutionRequesterImpl implements ForecastAirPollutionRequester { - private final RequestUrlBuilder urlBuilder; - - /** - * Instantiates a new Forecast air pollution requester. - * - * @param urlBuilder the url builder - */ - public ForecastAirPollutionRequesterImpl(RequestUrlBuilder urlBuilder) { - this.urlBuilder = urlBuilder; - } - - @Override - public AirPollutionRequestCustomizer byCoordinate(Coordinate coordinate) { - urlBuilder.addRequestParameter("lat", String.valueOf(coordinate.getLatitude())); - urlBuilder.addRequestParameter("lon", String.valueOf(coordinate.getLongitude())); - return new AirPollutionRequestCustomizerImpl(urlBuilder); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/historical/HistoricalAirPollutionRequester.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/historical/HistoricalAirPollutionRequester.java deleted file mode 100644 index f06dc1d..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/historical/HistoricalAirPollutionRequester.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * * Copyright (c) 2021 Alexey Zinchenko - * * - * * Permission is hereby granted, free of charge, to any person obtaining a copy - * * of this software and associated documentation files (the "Software"), to deal - * * in the Software without restriction, including without limitation the rights - * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * * copies of the Software, and to permit persons to whom the Software is - * * furnished to do so, subject to the following conditions: - * * - * * The above copyright notice and this permission notice shall be included in all - * * copies or substantial portions of the Software. - * * - * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * * SOFTWARE. - * - */ - -package com.github.prominence.openweathermap.api.request.air.pollution.historical; - -import com.github.prominence.openweathermap.api.model.Coordinate; -import com.github.prominence.openweathermap.api.request.air.pollution.AirPollutionRequestCustomizer; - -/** - * The interface Historical air pollution requester. - */ -public interface HistoricalAirPollutionRequester { - /** - * By coordinate historical air pollution request customizer. - * - * @param coordinate the coordinate - * @param startUnixTime the start unix time - * @param endUnixTime the end unix time - * @return the historical air pollution request customizer - */ - AirPollutionRequestCustomizer byCoordinateAndPeriod(Coordinate coordinate, long startUnixTime, long endUnixTime); -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/historical/HistoricalAirPollutionRequesterImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/historical/HistoricalAirPollutionRequesterImpl.java deleted file mode 100644 index 8ea1618..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/historical/HistoricalAirPollutionRequesterImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * * Copyright (c) 2021 Alexey Zinchenko - * * - * * Permission is hereby granted, free of charge, to any person obtaining a copy - * * of this software and associated documentation files (the "Software"), to deal - * * in the Software without restriction, including without limitation the rights - * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * * copies of the Software, and to permit persons to whom the Software is - * * furnished to do so, subject to the following conditions: - * * - * * The above copyright notice and this permission notice shall be included in all - * * copies or substantial portions of the Software. - * * - * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * * SOFTWARE. - * - */ - -package com.github.prominence.openweathermap.api.request.air.pollution.historical; - -import com.github.prominence.openweathermap.api.model.Coordinate; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.request.air.pollution.AirPollutionRequestCustomizer; -import com.github.prominence.openweathermap.api.request.air.pollution.AirPollutionRequestCustomizerImpl; - -/** - * The type Historical air pollution requester. - */ -public class HistoricalAirPollutionRequesterImpl implements HistoricalAirPollutionRequester { - private final RequestUrlBuilder urlBuilder; - - /** - * Instantiates a new Historical air pollution requester. - * - * @param urlBuilder the url builder - */ - public HistoricalAirPollutionRequesterImpl(RequestUrlBuilder urlBuilder) { - this.urlBuilder = urlBuilder; - } - - @Override - public AirPollutionRequestCustomizer byCoordinateAndPeriod(Coordinate coordinate, long startUnixTime, long endUnixTime) { - urlBuilder.addRequestParameter("lat", String.valueOf(coordinate.getLatitude())); - urlBuilder.addRequestParameter("lon", String.valueOf(coordinate.getLongitude())); - urlBuilder.addRequestParameter("start", String.valueOf(startUnixTime)); - urlBuilder.addRequestParameter("end", String.valueOf(endUnixTime)); - return new AirPollutionRequestCustomizerImpl(urlBuilder); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastAsyncRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastAsyncRequestTerminator.java index a2eeb14..ea442dc 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastAsyncRequestTerminator.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastAsyncRequestTerminator.java @@ -22,21 +22,43 @@ package com.github.prominence.openweathermap.api.request.forecast.free; +import com.github.prominence.openweathermap.api.enums.ResponseType; +import com.github.prominence.openweathermap.api.mapper.FiveDayThreeHourStepForecastResponseMapper; import com.github.prominence.openweathermap.api.model.forecast.Forecast; -import com.github.prominence.openweathermap.api.request.AsyncRequestTerminator; +import com.github.prominence.openweathermap.api.request.RequestSettings; +import com.github.prominence.openweathermap.api.utils.RequestUtils; import java.util.concurrent.CompletableFuture; - /** - * The forecast async request terminator interface. + * Async request terminator. */ -public interface FiveDayThreeHourStepForecastAsyncRequestTerminator extends AsyncRequestTerminator { +public class FiveDayThreeHourStepForecastAsyncRequestTerminator { + private final RequestSettings requestSettings; /** - * XML response format. + * Instantiates a new async request terminator. * - * @return the completable future + * @param requestSettings request settings object. */ - CompletableFuture asXML(); + FiveDayThreeHourStepForecastAsyncRequestTerminator(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public CompletableFuture asJava() { + return CompletableFuture.supplyAsync(() -> new FiveDayThreeHourStepForecastResponseMapper(requestSettings.getUnitSystem()).mapToForecast(getRawResponse())); + } + + public CompletableFuture asJSON() { + return CompletableFuture.supplyAsync(this::getRawResponse); + } + + public CompletableFuture asXML() { + requestSettings.setResponseType(ResponseType.XML); + return CompletableFuture.supplyAsync(this::getRawResponse); + } + + private String getRawResponse() { + return RequestUtils.getResponse(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastAsyncRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastAsyncRequestTerminatorImpl.java deleted file mode 100644 index 055572e..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastAsyncRequestTerminatorImpl.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request.forecast.free; - -import com.github.prominence.openweathermap.api.enums.UnitSystem; -import com.github.prominence.openweathermap.api.mapper.FiveDayThreeHourStepForecastResponseMapper; -import com.github.prominence.openweathermap.api.model.forecast.Forecast; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.utils.RequestUtils; - -import java.util.concurrent.CompletableFuture; - -/** - * Async request terminator. - */ -public class FiveDayThreeHourStepForecastAsyncRequestTerminatorImpl implements FiveDayThreeHourStepForecastAsyncRequestTerminator { - private final RequestUrlBuilder urlBuilder; - private final UnitSystem unitSystem; - - /** - * Instantiates a new async request terminator. - * - * @param urlBuilder the url builder - * @param unitSystem the unit system - */ - FiveDayThreeHourStepForecastAsyncRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) { - this.urlBuilder = urlBuilder; - this.unitSystem = unitSystem; - } - - @Override - public CompletableFuture asJava() { - return CompletableFuture.supplyAsync(() -> new FiveDayThreeHourStepForecastResponseMapper(unitSystem).mapToForecast(getRawResponse())); - } - - @Override - public CompletableFuture asJSON() { - return CompletableFuture.supplyAsync(this::getRawResponse); - } - - @Override - public CompletableFuture asXML() { - urlBuilder.addRequestParameter("mode", "xml"); - return CompletableFuture.supplyAsync(this::getRawResponse); - } - - private String getRawResponse() { - return RequestUtils.getResponse(urlBuilder.buildUrl()); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestCustomizer.java b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestCustomizer.java index 1c2960b..33c4ea3 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestCustomizer.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestCustomizer.java @@ -22,31 +22,45 @@ package com.github.prominence.openweathermap.api.request.forecast.free; -import com.github.prominence.openweathermap.api.request.RequestCustomizer; +import com.github.prominence.openweathermap.api.enums.Language; +import com.github.prominence.openweathermap.api.enums.UnitSystem; +import com.github.prominence.openweathermap.api.request.RequestSettings; /** - * The forecast request customizer interface. + * The forecast request customizer. */ -public interface FiveDayThreeHourStepForecastRequestCustomizer extends RequestCustomizer { - /** - * Count customizer. - * - * @param numberOfTimestamps the number of timestamps - * @return forecast request customizer - */ - FiveDayThreeHourStepForecastRequestCustomizer count(int numberOfTimestamps); +public class FiveDayThreeHourStepForecastRequestCustomizer { + private final RequestSettings requestSettings; /** - * Retrieve forecast request terminator. + * Instantiates a new forecast request customizer. * - * @return forecast request terminator + * @param requestSettings request settings object. */ - FiveDayThreeHourStepForecastRequestTerminator retrieve(); + FiveDayThreeHourStepForecastRequestCustomizer(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } - /** - * Retrieve forecast async request terminator. - * - * @return forecast async request terminator - */ - FiveDayThreeHourStepForecastAsyncRequestTerminator retrieveAsync(); + public FiveDayThreeHourStepForecastRequestCustomizer language(Language language) { + requestSettings.setLanguage(language); + return this; + } + + public FiveDayThreeHourStepForecastRequestCustomizer unitSystem(UnitSystem unitSystem) { + requestSettings.setUnitSystem(unitSystem); + return this; + } + + public FiveDayThreeHourStepForecastRequestCustomizer count(int numberOfTimestamps) { + requestSettings.putRequestParameter("cnt", Integer.toString(numberOfTimestamps)); + return this; + } + + public FiveDayThreeHourStepForecastRequestTerminator retrieve() { + return new FiveDayThreeHourStepForecastRequestTerminator(requestSettings); + } + + public FiveDayThreeHourStepForecastAsyncRequestTerminator retrieveAsync() { + return new FiveDayThreeHourStepForecastAsyncRequestTerminator(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestCustomizerImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestCustomizerImpl.java deleted file mode 100644 index 4e2fbae..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestCustomizerImpl.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request.forecast.free; - -import com.github.prominence.openweathermap.api.enums.Language; -import com.github.prominence.openweathermap.api.enums.UnitSystem; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; - -/** - * The forecast request customizer. - */ -public class FiveDayThreeHourStepForecastRequestCustomizerImpl implements FiveDayThreeHourStepForecastRequestCustomizer { - private final RequestUrlBuilder urlBuilder; - - private Language language; - private UnitSystem unitSystem = UnitSystem.STANDARD; - private int count = -1; - - /** - * Instantiates a new forecast request customizer. - * - * @param urlBuilder the url builder - */ - FiveDayThreeHourStepForecastRequestCustomizerImpl(RequestUrlBuilder urlBuilder) { - this.urlBuilder = urlBuilder; - } - - @Override - public FiveDayThreeHourStepForecastRequestCustomizer language(Language language) { - this.language = language; - return this; - } - - @Override - public FiveDayThreeHourStepForecastRequestCustomizer unitSystem(UnitSystem unitSystem) { - this.unitSystem = unitSystem; - return this; - } - - @Override - public FiveDayThreeHourStepForecastRequestCustomizer count(int numberOfTimestamps) { - count = numberOfTimestamps; - return this; - } - - @Override - public FiveDayThreeHourStepForecastRequestTerminator retrieve() { - applyCustomization(); - return new FiveDayThreeHourStepForecastRequestTerminatorImpl(urlBuilder, unitSystem); - } - - @Override - public FiveDayThreeHourStepForecastAsyncRequestTerminator retrieveAsync() { - applyCustomization(); - return new FiveDayThreeHourStepForecastAsyncRequestTerminatorImpl(urlBuilder, unitSystem); - } - - private void applyCustomization() { - urlBuilder.applyCustomization(language, unitSystem); - if (count >= 0) { - urlBuilder.addRequestParameter("cnt", count); - } - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestTerminator.java index 0f07243..16bcf76 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestTerminator.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestTerminator.java @@ -22,19 +22,41 @@ package com.github.prominence.openweathermap.api.request.forecast.free; +import com.github.prominence.openweathermap.api.enums.ResponseType; +import com.github.prominence.openweathermap.api.mapper.FiveDayThreeHourStepForecastResponseMapper; import com.github.prominence.openweathermap.api.model.forecast.Forecast; -import com.github.prominence.openweathermap.api.request.RequestTerminator; - +import com.github.prominence.openweathermap.api.request.RequestSettings; +import com.github.prominence.openweathermap.api.utils.RequestUtils; /** - * The forecast request terminator interface. + * The forecast request terminator. */ -public interface FiveDayThreeHourStepForecastRequestTerminator extends RequestTerminator { +public class FiveDayThreeHourStepForecastRequestTerminator { + private final RequestSettings requestSettings; /** - * XML response format. + * Instantiates a new forecast request terminator. * - * @return the XML string + * @param requestSettings request settings object. */ - String asXML(); + FiveDayThreeHourStepForecastRequestTerminator(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public Forecast asJava() { + return new FiveDayThreeHourStepForecastResponseMapper(requestSettings.getUnitSystem()).mapToForecast(getRawResponse()); + } + + public String asJSON() { + return getRawResponse(); + } + + public String asXML() { + requestSettings.setResponseType(ResponseType.XML); + return getRawResponse(); + } + + private String getRawResponse() { + return RequestUtils.getResponse(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestTerminatorImpl.java deleted file mode 100644 index 6ec5a45..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestTerminatorImpl.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request.forecast.free; - -import com.github.prominence.openweathermap.api.enums.UnitSystem; -import com.github.prominence.openweathermap.api.mapper.FiveDayThreeHourStepForecastResponseMapper; -import com.github.prominence.openweathermap.api.model.forecast.Forecast; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.utils.RequestUtils; - -/** - * The forecast request terminator. - */ -public class FiveDayThreeHourStepForecastRequestTerminatorImpl implements FiveDayThreeHourStepForecastRequestTerminator { - private final RequestUrlBuilder urlBuilder; - private final UnitSystem unitSystem; - - /** - * Instantiates a new forecast request terminator. - * - * @param urlBuilder the url builder - * @param unitSystem the unit system - */ - FiveDayThreeHourStepForecastRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) { - this.urlBuilder = urlBuilder; - this.unitSystem = unitSystem; - } - - @Override - public Forecast asJava() { - return new FiveDayThreeHourStepForecastResponseMapper(unitSystem).mapToForecast(getRawResponse()); - } - - @Override - public String asJSON() { - return getRawResponse(); - } - - @Override - public String asXML() { - urlBuilder.addRequestParameter("mode", "xml"); - return getRawResponse(); - } - - private String getRawResponse() { - return RequestUtils.getResponse(urlBuilder.buildUrl()); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequester.java b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequester.java index a19211f..54a829f 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequester.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequester.java @@ -23,69 +23,57 @@ package com.github.prominence.openweathermap.api.request.forecast.free; import com.github.prominence.openweathermap.api.model.Coordinate; +import com.github.prominence.openweathermap.api.request.RequestSettings; /** - * An interface for API methods. + * The forecast requester. */ -public interface FiveDayThreeHourStepForecastRequester { +public class FiveDayThreeHourStepForecastRequester { + private final RequestSettings requestSettings; /** - * By city name forecast request customizer. + * Instantiates a new forecast requester. * - * @param cityName the city name - * @return the forecast request customizer + * @param requestSettings request settings object. */ - FiveDayThreeHourStepForecastRequestCustomizer byCityName(String cityName); + public FiveDayThreeHourStepForecastRequester(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + this.requestSettings.appendToURL("forecast"); + } - /** - * By city name forecast request customizer. - * - * @param cityName the city name - * @param stateCode the state code - * @return the forecast request customizer - */ - FiveDayThreeHourStepForecastRequestCustomizer byCityName(String cityName, String stateCode); + public FiveDayThreeHourStepForecastRequestCustomizer byCityName(String cityName) { + requestSettings.putRequestParameter("q", cityName); + return new FiveDayThreeHourStepForecastRequestCustomizer(requestSettings); + } - /** - * By city name forecast request customizer. - * - * @param cityName the city name - * @param stateCode the state code - * @param countryCode the country code - * @return the forecast request customizer - */ - FiveDayThreeHourStepForecastRequestCustomizer byCityName(String cityName, String stateCode, String countryCode); + public FiveDayThreeHourStepForecastRequestCustomizer byCityName(String cityName, String stateCode) { + requestSettings.putRequestParameter("q", cityName + "," + stateCode); + return new FiveDayThreeHourStepForecastRequestCustomizer(requestSettings); + } - /** - * By city id forecast request customizer. - * - * @param cityId the city id - * @return the forecast request customizer - */ - FiveDayThreeHourStepForecastRequestCustomizer byCityId(long cityId); + public FiveDayThreeHourStepForecastRequestCustomizer byCityName(String cityName, String stateCode, String countryCode) { + requestSettings.putRequestParameter("q", cityName + "," + stateCode + "," + countryCode); + return new FiveDayThreeHourStepForecastRequestCustomizer(requestSettings); + } - /** - * By coordinate forecast request customizer. - * - * @param coordinate the coordinate - * @return the forecast request customizer - */ - FiveDayThreeHourStepForecastRequestCustomizer byCoordinate(Coordinate coordinate); + public FiveDayThreeHourStepForecastRequestCustomizer byCityId(long cityId) { + requestSettings.putRequestParameter("id", Long.toString(cityId)); + return new FiveDayThreeHourStepForecastRequestCustomizer(requestSettings); + } - /** - * By zip code and country forecast request customizer. - * - * @param zipCode the zip code - * @param countryCode the country code - * @return the forecast request customizer - */ - FiveDayThreeHourStepForecastRequestCustomizer byZipCodeAndCountry(String zipCode, String countryCode); + public FiveDayThreeHourStepForecastRequestCustomizer byCoordinate(Coordinate coordinate) { + requestSettings.putRequestParameter("lat", String.valueOf(coordinate.getLatitude())); + requestSettings.putRequestParameter("lon", String.valueOf(coordinate.getLongitude())); + return new FiveDayThreeHourStepForecastRequestCustomizer(requestSettings); + } - /** - * By zip code in USA forecast request customizer. - * - * @param zipCode the zip code - * @return the forecast request customizer - */ - FiveDayThreeHourStepForecastRequestCustomizer byZipCodeInUSA(String zipCode); + public FiveDayThreeHourStepForecastRequestCustomizer byZipCodeAndCountry(String zipCode, String countryCode) { + requestSettings.putRequestParameter("zip", zipCode + "," + countryCode); + return new FiveDayThreeHourStepForecastRequestCustomizer(requestSettings); + } + + public FiveDayThreeHourStepForecastRequestCustomizer byZipCodeInUSA(String zipCode) { + requestSettings.putRequestParameter("zip", zipCode); + return new FiveDayThreeHourStepForecastRequestCustomizer(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequesterImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequesterImpl.java deleted file mode 100644 index 76c3a92..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequesterImpl.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request.forecast.free; - -import com.github.prominence.openweathermap.api.conf.TimeoutSettings; -import com.github.prominence.openweathermap.api.model.Coordinate; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; - -/** - * The forecast requester. - */ -public class FiveDayThreeHourStepForecastRequesterImpl implements FiveDayThreeHourStepForecastRequester { - private final RequestUrlBuilder urlBuilder; - - /** - * Instantiates a new forecast requester. - * - * @param apiKey the api key - */ - public FiveDayThreeHourStepForecastRequesterImpl(String apiKey) { - urlBuilder = new RequestUrlBuilder(apiKey); - urlBuilder.append("forecast"); - } - - @Override - public FiveDayThreeHourStepForecastRequestCustomizer byCityName(String cityName) { - urlBuilder.addRequestParameter("q", cityName); - return new FiveDayThreeHourStepForecastRequestCustomizerImpl(urlBuilder); - } - - @Override - public FiveDayThreeHourStepForecastRequestCustomizer byCityName(String cityName, String stateCode) { - urlBuilder.addRequestParameter("q", cityName + "," + stateCode); - return new FiveDayThreeHourStepForecastRequestCustomizerImpl(urlBuilder); - } - - @Override - public FiveDayThreeHourStepForecastRequestCustomizer byCityName(String cityName, String stateCode, String countryCode) { - urlBuilder.addRequestParameter("q", cityName + "," + stateCode + "," + countryCode); - return new FiveDayThreeHourStepForecastRequestCustomizerImpl(urlBuilder); - } - - @Override - public FiveDayThreeHourStepForecastRequestCustomizer byCityId(long cityId) { - urlBuilder.addRequestParameter("id", cityId); - return new FiveDayThreeHourStepForecastRequestCustomizerImpl(urlBuilder); - } - - @Override - public FiveDayThreeHourStepForecastRequestCustomizer byCoordinate(Coordinate coordinate) { - urlBuilder.addRequestParameter("lat", String.valueOf(coordinate.getLatitude())); - urlBuilder.addRequestParameter("lon", String.valueOf(coordinate.getLongitude())); - return new FiveDayThreeHourStepForecastRequestCustomizerImpl(urlBuilder); - } - - @Override - public FiveDayThreeHourStepForecastRequestCustomizer byZipCodeAndCountry(String zipCode, String countryCode) { - urlBuilder.addRequestParameter("zip", zipCode + "," + countryCode); - return new FiveDayThreeHourStepForecastRequestCustomizerImpl(urlBuilder); - } - - @Override - public FiveDayThreeHourStepForecastRequestCustomizer byZipCodeInUSA(String zipCode) { - urlBuilder.addRequestParameter("zip", zipCode); - return new FiveDayThreeHourStepForecastRequestCustomizerImpl(urlBuilder); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherRequester.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherRequester.java index 2b58177..9440d15 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherRequester.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherRequester.java @@ -22,24 +22,30 @@ package com.github.prominence.openweathermap.api.request.onecall; +import com.github.prominence.openweathermap.api.request.RequestSettings; import com.github.prominence.openweathermap.api.request.onecall.current.OneCallCurrentWeatherRequester; import com.github.prominence.openweathermap.api.request.onecall.historical.OneCallHistoricalWeatherRequester; /** - * The interface One call weather requester. + * The type One call weather requester. */ -public interface OneCallWeatherRequester { - /** - * Current one call current weather requester. - * - * @return the one call current weather requester - */ - OneCallCurrentWeatherRequester current(); +public class OneCallWeatherRequester { + private final RequestSettings requestSettings; /** - * Historical one call historical weather requester. + * Instantiates a new One call weather requester. * - * @return the one call historical weather requester + * @param requestSettings request settings object. */ - OneCallHistoricalWeatherRequester historical(); + public OneCallWeatherRequester(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public OneCallCurrentWeatherRequester current() { + return new OneCallCurrentWeatherRequester(requestSettings); + } + + public OneCallHistoricalWeatherRequester historical() { + return new OneCallHistoricalWeatherRequester(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherRequesterImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherRequesterImpl.java deleted file mode 100644 index ab04420..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherRequesterImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request.onecall; - -import com.github.prominence.openweathermap.api.conf.TimeoutSettings; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.request.onecall.current.OneCallCurrentWeatherRequester; -import com.github.prominence.openweathermap.api.request.onecall.current.OneCallCurrentWeatherRequesterImpl; -import com.github.prominence.openweathermap.api.request.onecall.historical.OneCallHistoricalWeatherRequester; -import com.github.prominence.openweathermap.api.request.onecall.historical.OneCallHistoricalWeatherRequesterImpl; - -/** - * The type One call weather requester. - */ -public class OneCallWeatherRequesterImpl implements OneCallWeatherRequester { - private final RequestUrlBuilder urlBuilder; - - /** - * Instantiates a new One call weather requester. - * - * @param apiKey the api key - */ - public OneCallWeatherRequesterImpl(String apiKey) { - urlBuilder = new RequestUrlBuilder(apiKey); - } - - @Override - public OneCallCurrentWeatherRequester current() { - return new OneCallCurrentWeatherRequesterImpl(urlBuilder); - } - - @Override - public OneCallHistoricalWeatherRequester historical() { - return new OneCallHistoricalWeatherRequesterImpl(urlBuilder); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherAsyncRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherAsyncRequestTerminator.java index 63811e5..d2acb66 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherAsyncRequestTerminator.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherAsyncRequestTerminator.java @@ -22,11 +22,37 @@ package com.github.prominence.openweathermap.api.request.onecall.current; +import com.github.prominence.openweathermap.api.mapper.OneCallWeatherResponseMapper; import com.github.prominence.openweathermap.api.model.onecall.current.CurrentWeatherData; -import com.github.prominence.openweathermap.api.request.AsyncRequestTerminator; +import com.github.prominence.openweathermap.api.request.RequestSettings; +import com.github.prominence.openweathermap.api.utils.RequestUtils; + +import java.util.concurrent.CompletableFuture; /** - * The interface One call current weather async request terminator. + * The type One call current weather async request terminator. */ -public interface OneCallCurrentWeatherAsyncRequestTerminator extends AsyncRequestTerminator { +public class OneCallCurrentWeatherAsyncRequestTerminator { + private final RequestSettings requestSettings; + + /** + * Instantiates a new One call current weather async request terminator. + * + * @param requestSettings request settings object. + */ + OneCallCurrentWeatherAsyncRequestTerminator(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public CompletableFuture asJava() { + return CompletableFuture.supplyAsync(() -> new OneCallWeatherResponseMapper(requestSettings.getUnitSystem()).mapToCurrent(getRawResponse())); + } + + public CompletableFuture asJSON() { + return CompletableFuture.supplyAsync(this::getRawResponse); + } + + private String getRawResponse() { + return RequestUtils.getResponse(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherAsyncRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherAsyncRequestTerminatorImpl.java deleted file mode 100644 index cfd5755..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherAsyncRequestTerminatorImpl.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request.onecall.current; - -import com.github.prominence.openweathermap.api.enums.UnitSystem; -import com.github.prominence.openweathermap.api.model.onecall.current.CurrentWeatherData; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.mapper.OneCallWeatherResponseMapper; -import com.github.prominence.openweathermap.api.utils.RequestUtils; - -import java.util.concurrent.CompletableFuture; - -/** - * The type One call current weather async request terminator. - */ -public class OneCallCurrentWeatherAsyncRequestTerminatorImpl implements OneCallCurrentWeatherAsyncRequestTerminator { - private final RequestUrlBuilder urlBuilder; - private final UnitSystem unitSystem; - - /** - * Instantiates a new One call current weather async request terminator. - * - * @param urlBuilder the url builder - * @param unitSystem the unit system - */ - OneCallCurrentWeatherAsyncRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) { - this.urlBuilder = urlBuilder; - this.unitSystem = unitSystem; - } - - @Override - public CompletableFuture asJava() { - return CompletableFuture.supplyAsync(() -> new OneCallWeatherResponseMapper(unitSystem).mapToCurrent(getRawResponse())); - } - - @Override - public CompletableFuture asJSON() { - return CompletableFuture.supplyAsync(this::getRawResponse); - } - - private String getRawResponse() { - return RequestUtils.getResponse(urlBuilder.buildUrl()); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestCustomizer.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestCustomizer.java index 33143c4..7ed9b7c 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestCustomizer.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestCustomizer.java @@ -22,32 +22,53 @@ package com.github.prominence.openweathermap.api.request.onecall.current; +import com.github.prominence.openweathermap.api.enums.Language; import com.github.prominence.openweathermap.api.enums.OneCallResultOptions; -import com.github.prominence.openweathermap.api.request.RequestCustomizer; +import com.github.prominence.openweathermap.api.enums.UnitSystem; +import com.github.prominence.openweathermap.api.request.RequestSettings; + +import java.util.stream.Collectors; +import java.util.stream.Stream; /** - * The interface One call current weather request customizer. + * The type One call current weather request customizer. */ -public interface OneCallCurrentWeatherRequestCustomizer extends RequestCustomizer { - /** - * Exclude one call current weather request customizer. - * - * @param excludeOptions the exclude options - * @return the one call current weather request customizer - */ - OneCallCurrentWeatherRequestCustomizer exclude(OneCallResultOptions... excludeOptions); +public class OneCallCurrentWeatherRequestCustomizer { + private final RequestSettings requestSettings; /** - * Retrieve one call current weather request terminator. + * Instantiates a new One call current weather request customizer. * - * @return the one call current weather request terminator + * @param requestSettings request settings object. */ - OneCallCurrentWeatherRequestTerminator retrieve(); + OneCallCurrentWeatherRequestCustomizer(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } - /** - * Retrieve async one call current weather async request terminator. - * - * @return the one call current weather async request terminator - */ - OneCallCurrentWeatherAsyncRequestTerminator retrieveAsync(); + public OneCallCurrentWeatherRequestCustomizer language(Language language) { + requestSettings.setLanguage(language); + return this; + } + + public OneCallCurrentWeatherRequestCustomizer unitSystem(UnitSystem unitSystem) { + this.requestSettings.setUnitSystem(unitSystem); + return this; + } + + public OneCallCurrentWeatherRequestCustomizer exclude(OneCallResultOptions... excludeOptions) { + if (excludeOptions != null && excludeOptions.length > 0) { + requestSettings.putRequestParameter("exclude", Stream.of(excludeOptions).map(OneCallResultOptions::getValue).collect(Collectors.joining(","))); + } else { + requestSettings.removeRequestParameter("exclude"); + } + return this; + } + + public OneCallCurrentWeatherRequestTerminator retrieve() { + return new OneCallCurrentWeatherRequestTerminator(requestSettings); + } + + public OneCallCurrentWeatherAsyncRequestTerminator retrieveAsync() { + return new OneCallCurrentWeatherAsyncRequestTerminator(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestCustomizerImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestCustomizerImpl.java deleted file mode 100644 index a55636a..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestCustomizerImpl.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request.onecall.current; - -import com.github.prominence.openweathermap.api.enums.Language; -import com.github.prominence.openweathermap.api.enums.OneCallResultOptions; -import com.github.prominence.openweathermap.api.enums.UnitSystem; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; - -import java.util.stream.Collectors; -import java.util.stream.Stream; - -/** - * The type One call current weather request customizer. - */ -public class OneCallCurrentWeatherRequestCustomizerImpl implements OneCallCurrentWeatherRequestCustomizer { - private final RequestUrlBuilder urlBuilder; - - private Language language; - private UnitSystem unitSystem = UnitSystem.STANDARD; - private OneCallResultOptions[] excludeOptions; - - /** - * Instantiates a new One call current weather request customizer. - * - * @param urlBuilder the url builder - */ - OneCallCurrentWeatherRequestCustomizerImpl(RequestUrlBuilder urlBuilder) { - this.urlBuilder = urlBuilder; - } - - @Override - public OneCallCurrentWeatherRequestCustomizer language(Language language) { - this.language = language; - return this; - } - - @Override - public OneCallCurrentWeatherRequestCustomizer unitSystem(UnitSystem unitSystem) { - this.unitSystem = unitSystem; - return this; - } - - @Override - public OneCallCurrentWeatherRequestCustomizer exclude(OneCallResultOptions... excludeOptions) { - this.excludeOptions = excludeOptions; - return this; - } - - @Override - public OneCallCurrentWeatherRequestTerminator retrieve() { - applyCustomization(); - return new OneCallCurrentWeatherRequestTerminatorImpl(urlBuilder, unitSystem); - } - - @Override - public OneCallCurrentWeatherAsyncRequestTerminator retrieveAsync() { - applyCustomization(); - return new OneCallCurrentWeatherAsyncRequestTerminatorImpl(urlBuilder, unitSystem); - } - - private void applyCustomization() { - urlBuilder.applyCustomization(language, unitSystem); - if (excludeOptions != null) { - urlBuilder.addRequestParameter("exclude", Stream.of(excludeOptions).map(OneCallResultOptions::getValue).collect(Collectors.joining(","))); - } - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestTerminator.java index a23d3b1..9cf97ee 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestTerminator.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestTerminator.java @@ -22,12 +22,35 @@ package com.github.prominence.openweathermap.api.request.onecall.current; +import com.github.prominence.openweathermap.api.mapper.OneCallWeatherResponseMapper; import com.github.prominence.openweathermap.api.model.onecall.current.CurrentWeatherData; -import com.github.prominence.openweathermap.api.request.RequestTerminator; +import com.github.prominence.openweathermap.api.request.RequestSettings; +import com.github.prominence.openweathermap.api.utils.RequestUtils; /** - * The interface One call current weather request terminator. + * The type One call current weather request terminator. */ -public interface OneCallCurrentWeatherRequestTerminator extends RequestTerminator { +public class OneCallCurrentWeatherRequestTerminator { + private final RequestSettings requestSettings; + /** + * Instantiates a new One call current weather request terminator. + * + * @param requestSettings request settings object. + */ + OneCallCurrentWeatherRequestTerminator(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public CurrentWeatherData asJava() { + return new OneCallWeatherResponseMapper(requestSettings.getUnitSystem()).mapToCurrent(getRawResponse()); + } + + public String asJSON() { + return getRawResponse(); + } + + private String getRawResponse() { + return RequestUtils.getResponse(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestTerminatorImpl.java deleted file mode 100644 index 2c55e64..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequestTerminatorImpl.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request.onecall.current; - -import com.github.prominence.openweathermap.api.enums.UnitSystem; -import com.github.prominence.openweathermap.api.model.onecall.current.CurrentWeatherData; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.mapper.OneCallWeatherResponseMapper; -import com.github.prominence.openweathermap.api.utils.RequestUtils; - -/** - * The type One call current weather request terminator. - */ -public class OneCallCurrentWeatherRequestTerminatorImpl implements OneCallCurrentWeatherRequestTerminator { - private final RequestUrlBuilder urlBuilder; - private final UnitSystem unitSystem; - - /** - * Instantiates a new One call current weather request terminator. - * - * @param urlBuilder the url builder - * @param unitSystem the unit system - */ - OneCallCurrentWeatherRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) { - this.urlBuilder = urlBuilder; - this.unitSystem = unitSystem; - } - - @Override - public CurrentWeatherData asJava() { - return new OneCallWeatherResponseMapper(unitSystem).mapToCurrent(getRawResponse()); - } - - @Override - public String asJSON() { - return getRawResponse(); - } - - private String getRawResponse() { - return RequestUtils.getResponse(urlBuilder.buildUrl()); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequester.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequester.java index edc40ec..e756bb9 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequester.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/current/OneCallCurrentWeatherRequester.java @@ -23,16 +23,27 @@ package com.github.prominence.openweathermap.api.request.onecall.current; import com.github.prominence.openweathermap.api.model.Coordinate; +import com.github.prominence.openweathermap.api.request.RequestSettings; /** - * The interface One call current weather requester. + * The type One call current weather requester. */ -public interface OneCallCurrentWeatherRequester { +public class OneCallCurrentWeatherRequester { + private final RequestSettings requestSettings; + /** - * By coordinate one call current weather request customizer. + * Instantiates a new One call current weather requester. * - * @param coordinate the coordinate - * @return the one call current weather request customizer + * @param requestSettings request settings object. */ - OneCallCurrentWeatherRequestCustomizer byCoordinate(Coordinate coordinate); + public OneCallCurrentWeatherRequester(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + this.requestSettings.appendToURL("onecall"); + } + + public OneCallCurrentWeatherRequestCustomizer byCoordinate(Coordinate coordinate) { + requestSettings.putRequestParameter("lat", String.valueOf(coordinate.getLatitude())); + requestSettings.putRequestParameter("lon", String.valueOf(coordinate.getLongitude())); + return new OneCallCurrentWeatherRequestCustomizer(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherAsyncRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherAsyncRequestTerminator.java index 7984522..d17ea54 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherAsyncRequestTerminator.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherAsyncRequestTerminator.java @@ -22,11 +22,37 @@ package com.github.prominence.openweathermap.api.request.onecall.historical; +import com.github.prominence.openweathermap.api.mapper.OneCallWeatherResponseMapper; import com.github.prominence.openweathermap.api.model.onecall.historical.HistoricalWeatherData; -import com.github.prominence.openweathermap.api.request.AsyncRequestTerminator; +import com.github.prominence.openweathermap.api.request.RequestSettings; +import com.github.prominence.openweathermap.api.utils.RequestUtils; + +import java.util.concurrent.CompletableFuture; /** - * The interface One call historical weather async request terminator. + * The type One call historical weather async request terminator. */ -public interface OneCallHistoricalWeatherAsyncRequestTerminator extends AsyncRequestTerminator { +public class OneCallHistoricalWeatherAsyncRequestTerminator { + private final RequestSettings requestSettings; + + /** + * Instantiates a new One call historical weather async request terminator. + * + * @param requestSettings request settings object. + */ + public OneCallHistoricalWeatherAsyncRequestTerminator(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public CompletableFuture asJava() { + return CompletableFuture.supplyAsync(() -> new OneCallWeatherResponseMapper(requestSettings.getUnitSystem()).mapToHistorical(getRawResponse())); + } + + public CompletableFuture asJSON() { + return CompletableFuture.supplyAsync(this::getRawResponse); + } + + private String getRawResponse() { + return RequestUtils.getResponse(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherAsyncRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherAsyncRequestTerminatorImpl.java deleted file mode 100644 index 9cce000..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherAsyncRequestTerminatorImpl.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request.onecall.historical; - -import com.github.prominence.openweathermap.api.enums.UnitSystem; -import com.github.prominence.openweathermap.api.model.onecall.historical.HistoricalWeatherData; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.mapper.OneCallWeatherResponseMapper; -import com.github.prominence.openweathermap.api.utils.RequestUtils; - -import java.util.concurrent.CompletableFuture; - -/** - * The type One call historical weather async request terminator. - */ -public class OneCallHistoricalWeatherAsyncRequestTerminatorImpl implements OneCallHistoricalWeatherAsyncRequestTerminator { - private final RequestUrlBuilder urlBuilder; - private final UnitSystem unitSystem; - - /** - * Instantiates a new One call historical weather async request terminator. - * - * @param urlBuilder the url builder - * @param unitSystem the unit system - */ - public OneCallHistoricalWeatherAsyncRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) { - this.urlBuilder = urlBuilder; - this.unitSystem = unitSystem; - } - - @Override - public CompletableFuture asJava() { - return CompletableFuture.supplyAsync(() -> new OneCallWeatherResponseMapper(unitSystem).mapToHistorical(getRawResponse())); - } - - @Override - public CompletableFuture asJSON() { - return CompletableFuture.supplyAsync(this::getRawResponse); - } - - private String getRawResponse() { - return RequestUtils.getResponse(urlBuilder.buildUrl()); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestCustomizer.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestCustomizer.java index 57ce89f..47b978d 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestCustomizer.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestCustomizer.java @@ -22,23 +22,40 @@ package com.github.prominence.openweathermap.api.request.onecall.historical; -import com.github.prominence.openweathermap.api.request.RequestCustomizer; +import com.github.prominence.openweathermap.api.enums.Language; +import com.github.prominence.openweathermap.api.enums.UnitSystem; +import com.github.prominence.openweathermap.api.request.RequestSettings; /** - * The interface One call historical weather request customizer. + * The type One call historical weather request customizer. */ -public interface OneCallHistoricalWeatherRequestCustomizer extends RequestCustomizer { - /** - * Retrieve one call historical weather request terminator. - * - * @return the one call historical weather request terminator - */ - OneCallHistoricalWeatherRequestTerminator retrieve(); +public class OneCallHistoricalWeatherRequestCustomizer { + private final RequestSettings requestSettings; /** - * Retrieve async one call historical weather async request terminator. + * Instantiates a new One call historical weather request customizer. * - * @return the one call historical weather async request terminator + * @param requestSettings request settings object. */ - OneCallHistoricalWeatherAsyncRequestTerminator retrieveAsync(); + public OneCallHistoricalWeatherRequestCustomizer(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public OneCallHistoricalWeatherRequestCustomizer language(Language language) { + requestSettings.setLanguage(language); + return this; + } + + public OneCallHistoricalWeatherRequestCustomizer unitSystem(UnitSystem unitSystem) { + requestSettings.setUnitSystem(unitSystem); + return this; + } + + public OneCallHistoricalWeatherRequestTerminator retrieve() { + return new OneCallHistoricalWeatherRequestTerminator(requestSettings); + } + + public OneCallHistoricalWeatherAsyncRequestTerminator retrieveAsync() { + return new OneCallHistoricalWeatherAsyncRequestTerminator(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestCustomizerImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestCustomizerImpl.java deleted file mode 100644 index f6b109f..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestCustomizerImpl.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request.onecall.historical; - -import com.github.prominence.openweathermap.api.enums.Language; -import com.github.prominence.openweathermap.api.enums.UnitSystem; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; - -/** - * The type One call historical weather request customizer. - */ -public class OneCallHistoricalWeatherRequestCustomizerImpl implements OneCallHistoricalWeatherRequestCustomizer { - private final RequestUrlBuilder urlBuilder; - - private Language language; - private UnitSystem unitSystem = UnitSystem.STANDARD; - - /** - * Instantiates a new One call historical weather request customizer. - * - * @param urlBuilder the url builder - */ - public OneCallHistoricalWeatherRequestCustomizerImpl(RequestUrlBuilder urlBuilder) { - this.urlBuilder = urlBuilder; - } - - @Override - public OneCallHistoricalWeatherRequestCustomizer language(Language language) { - this.language = language; - return this; - } - - @Override - public OneCallHistoricalWeatherRequestCustomizer unitSystem(UnitSystem unitSystem) { - this.unitSystem = unitSystem; - return this; - } - - @Override - public OneCallHistoricalWeatherRequestTerminator retrieve() { - urlBuilder.applyCustomization(language, unitSystem); - return new OneCallHistoricalWeatherRequestTerminatorImpl(urlBuilder, unitSystem); - } - - @Override - public OneCallHistoricalWeatherAsyncRequestTerminator retrieveAsync() { - urlBuilder.applyCustomization(language, unitSystem); - return new OneCallHistoricalWeatherAsyncRequestTerminatorImpl(urlBuilder, unitSystem); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestTerminator.java index 5ab6405..7c89d9d 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestTerminator.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestTerminator.java @@ -22,11 +22,35 @@ package com.github.prominence.openweathermap.api.request.onecall.historical; +import com.github.prominence.openweathermap.api.mapper.OneCallWeatherResponseMapper; import com.github.prominence.openweathermap.api.model.onecall.historical.HistoricalWeatherData; -import com.github.prominence.openweathermap.api.request.RequestTerminator; +import com.github.prominence.openweathermap.api.request.RequestSettings; +import com.github.prominence.openweathermap.api.utils.RequestUtils; /** - * The interface One call historical weather request terminator. + * The type One call historical weather request terminator. */ -public interface OneCallHistoricalWeatherRequestTerminator extends RequestTerminator { +public class OneCallHistoricalWeatherRequestTerminator { + private final RequestSettings requestSettings; + + /** + * Instantiates a new One call historical weather request terminator. + * + * @param requestSettings request settings object. + */ + public OneCallHistoricalWeatherRequestTerminator(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + } + + public HistoricalWeatherData asJava() { + return new OneCallWeatherResponseMapper(requestSettings.getUnitSystem()).mapToHistorical(getRawResponse()); + } + + public String asJSON() { + return getRawResponse(); + } + + private String getRawResponse() { + return RequestUtils.getResponse(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestTerminatorImpl.java deleted file mode 100644 index ab462f1..0000000 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequestTerminatorImpl.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2021 Alexey Zinchenko - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.prominence.openweathermap.api.request.onecall.historical; - -import com.github.prominence.openweathermap.api.enums.UnitSystem; -import com.github.prominence.openweathermap.api.model.onecall.historical.HistoricalWeatherData; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; -import com.github.prominence.openweathermap.api.mapper.OneCallWeatherResponseMapper; -import com.github.prominence.openweathermap.api.utils.RequestUtils; - -/** - * The type One call historical weather request terminator. - */ -public class OneCallHistoricalWeatherRequestTerminatorImpl implements OneCallHistoricalWeatherRequestTerminator { - private final RequestUrlBuilder urlBuilder; - private final UnitSystem unitSystem; - - /** - * Instantiates a new One call historical weather request terminator. - * - * @param urlBuilder the url builder - * @param unitSystem the unit system - */ - public OneCallHistoricalWeatherRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) { - this.urlBuilder = urlBuilder; - this.unitSystem = unitSystem; - } - - @Override - public HistoricalWeatherData asJava() { - return new OneCallWeatherResponseMapper(unitSystem).mapToHistorical(getRawResponse()); - } - - @Override - public String asJSON() { - return getRawResponse(); - } - - private String getRawResponse() { - return RequestUtils.getResponse(urlBuilder.buildUrl()); - } -} diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequester.java b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequester.java index 6cb4849..17a6c95 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequester.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/onecall/historical/OneCallHistoricalWeatherRequester.java @@ -23,17 +23,28 @@ package com.github.prominence.openweathermap.api.request.onecall.historical; import com.github.prominence.openweathermap.api.model.Coordinate; +import com.github.prominence.openweathermap.api.request.RequestSettings; /** - * The interface One call historical weather requester. + * The type One call historical weather requester. */ -public interface OneCallHistoricalWeatherRequester { +public class OneCallHistoricalWeatherRequester { + private final RequestSettings requestSettings; + /** - * By coordinate and timestamp one call historical weather request customizer. + * Instantiates a new One call historical weather requester. * - * @param coordinate the coordinate - * @param unixTime the unix time - * @return the one call historical weather request customizer + * @param requestSettings request settings object. */ - OneCallHistoricalWeatherRequestCustomizer byCoordinateAndTimestamp(Coordinate coordinate, long unixTime); + public OneCallHistoricalWeatherRequester(RequestSettings requestSettings) { + this.requestSettings = requestSettings; + this.requestSettings.appendToURL("onecall/timemachine"); + } + + public OneCallHistoricalWeatherRequestCustomizer byCoordinateAndTimestamp(Coordinate coordinate, long unixTime) { + requestSettings.putRequestParameter("lat", Double.toString(coordinate.getLatitude())); + requestSettings.putRequestParameter("lon", Double.toString(coordinate.getLongitude())); + requestSettings.putRequestParameter("dt", Long.toString(unixTime)); + return new OneCallHistoricalWeatherRequestCustomizer(requestSettings); + } } diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestCustomizer.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestCustomizer.java index 90b33a0..522bcd9 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestCustomizer.java +++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestCustomizer.java @@ -22,11 +22,9 @@ package com.github.prominence.openweathermap.api.request.weather.multiple; -import com.github.prominence.openweathermap.api.conf.TimeoutSettings; -import com.github.prominence.openweathermap.api.request.RequestSettings; -import com.github.prominence.openweathermap.api.request.RequestUrlBuilder; import com.github.prominence.openweathermap.api.enums.Language; import com.github.prominence.openweathermap.api.enums.UnitSystem; +import com.github.prominence.openweathermap.api.request.RequestSettings; /** * The type Multiple result current weather request customizer.