diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..11928a2
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,9 @@
+version: 2
+updates:
+- package-ecosystem: maven
+ directory: "/"
+ schedule:
+ interval: daily
+ time: "03:00"
+ open-pull-requests-limit: 10
+ target-branch: master
diff --git a/README.md b/README.md
index 9584326..2cbff62 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,9 @@ Free:
* One Call API
* Air pollution
+Other:
+* Request timeout settings
+
### Will be implemented later:
Free:
@@ -26,14 +29,14 @@ Paid:
com.github.prominenceopenweathermap-api
- 2.2.0
+ 2.3.0
```
### Gradle coordinates:
```groovy
-compile('com.github.prominence:openweathermap-api:2.2.0')
+compile('com.github.prominence:openweathermap-api:2.3.0')
```
### Documentation
@@ -45,14 +48,14 @@ compile('com.github.prominence:openweathermap-api:2.2.0')
* [OpenWeatherMap Java API - 2.1.0](docs/Release_2.1.0.md)
* [OpenWeatherMap Java API - 2.1.1](docs/Release_2.1.1.md)
* [OpenWeatherMap Java API - 2.2.0](docs/Release_2.2.0.md)
-* [OpenWeatherMap Java API - SNAPSHOT](docs/SNAPSHOT.md)
+* [OpenWeatherMap Java API - 2.3.0](docs/Release_2.3.0.md)
### License
MIT
-[ci-shield]: https://travis-ci.org/Prominence/openweathermap-java-api.svg?branch=master
+[ci-shield]: https://travis-ci.org/Prominence/openweathermap-java-api.svg?branch=dev
[ci-link]: https://travis-ci.org/Prominence/openweathermap-java-api
-[codecov-shield]: https://codecov.io/gh/Prominence/openweathermap-java-api/branch/master/graph/badge.svg
+[codecov-shield]: https://codecov.io/gh/Prominence/openweathermap-java-api/branch/dev/graph/badge.svg
[codecov-link]: https://codecov.io/gh/Prominence/openweathermap-java-api
diff --git a/docs/SNAPSHOT.md b/docs/Release_2.3.0.md
similarity index 82%
rename from docs/SNAPSHOT.md
rename to docs/Release_2.3.0.md
index 328fb27..d1fe83b 100644
--- a/docs/SNAPSHOT.md
+++ b/docs/Release_2.3.0.md
@@ -4,20 +4,24 @@
* One Call API
* Air Pollution
+
+Other:
+* Request timeout settings
+
### Maven coordinates:
```xml
com.github.prominenceopenweathermap-api
- 2.1.1-SNAPSHOT
+ 2.3.0
```
### Gradle coordinates:
```groovy
-compile('com.github.prominence:openweathermap-api:2.1.1-SNAPSHOT')
+compile('com.github.prominence:openweathermap-api:2.3.0')
```
### How to use:
@@ -34,6 +38,13 @@ Currently, available APIs are:
* `oneCall()`
* `airPollution()`
+Also, it is possible to set timeouts for the requests on `openWeatherClient` object:
+```java
+openWeatherClient.setReadTimeout(1000);
+openWeatherClient.setConnectTimeout(1000);
+```
+Timeout settings are passed to the requesters as a copy.
+
Default(more or less) customization points:
```java
...
@@ -352,22 +363,25 @@ You are able to set preferable options(via chain methods) and execute appropriat
`com.github.prominence.openweathermap.api.model.onecall.current.Daily`'s useful public methods(setters are not listed):
-| Method | Description |
-|-----------------------------------------------|---------------------------------------------------------------------------------------------------|
-| `getForecastTime()` | Returns `LocalDateTime` object with weather forecast time. |
-| `getSunriseTime()` | Returns `LocalDateTime` object with sunrise time. |
-| `getSunsetTime()` | Returns `LocalDateTime` object with sunset time. |
-| `getWeatherState()` | Returns `WeatherState` object with basic weather state information. |
-| `getTemperature()` | Returns `DailyTemperature` object. Available fields: `value`, `feelsLike`, `dewPoint` and `unit`. |
-| `getAtmosphericPressure()` | Returns `AtmosphericPressure` object. Available fields: `seaLevelValue`. |
-| `getHumidity()` | Returns `Humidity` object. Available fields: `value` and `unit`. |
-| `getWind()` | Returns `Wind` object. Available fields: `speed`, `degrees`, `gust` and `unit`. |
-| `getClouds()` | Returns `Clouds` object. Available fields: `value` and `unit`. |
-| `getUvIndex()` | Returns UV index value. |
-| `getProbabilityOfPrecipitation()` | Returns probability of precipitation(not percentage). |
-| `getProbabilityOfPrecipitationPercentage()` | Returns probability of precipitation percentage. |
-| `getRain()` | Returns `DailyRain` object. Available fields: `value`. |
-| `getSnow()` | Returns `DailySnow` object. Available fields: `value`. |
+| Method | Description |
+|---------------------------------------------|---------------------------------------------------------------------------------------------------|
+| `getForecastTime()` | Returns `LocalDateTime` object with weather forecast time. |
+| `getSunriseTime()` | Returns `LocalDateTime` object with sunrise time. |
+| `getSunsetTime()` | Returns `LocalDateTime` object with sunset time. |
+| `getMoonriseTime()` | Returns `LocalDateTime` object with moonrise time. |
+| `getMoonsetTime()` | Returns `LocalDateTime` object with moonset time. |
+| `getMoonPhase()` | Returns `MoonPhase` object with `MoonType` info and value. |
+| `getWeatherState()` | Returns `WeatherState` object with basic weather state information. |
+| `getTemperature()` | Returns `DailyTemperature` object. Available fields: `value`, `feelsLike`, `dewPoint` and `unit`. |
+| `getAtmosphericPressure()` | Returns `AtmosphericPressure` object. Available fields: `seaLevelValue`. |
+| `getHumidity()` | Returns `Humidity` object. Available fields: `value` and `unit`. |
+| `getWind()` | Returns `Wind` object. Available fields: `speed`, `degrees`, `gust` and `unit`. |
+| `getClouds()` | Returns `Clouds` object. Available fields: `value` and `unit`. |
+| `getUvIndex()` | Returns UV index value. |
+| `getProbabilityOfPrecipitation()` | Returns probability of precipitation(not percentage). |
+| `getProbabilityOfPrecipitationPercentage()` | Returns probability of precipitation percentage. |
+| `getRain()` | Returns `DailyRain` object. Available fields: `value`. |
+| `getSnow()` | Returns `DailySnow` object. Available fields: `value`. |
`com.github.prominence.openweathermap.api.model.onecall.current.Alert`'s useful public methods(setters are not listed):
@@ -475,54 +489,54 @@ final AirPollutionDetails airPollutionDetails = openWeatherClient
### Constants and options
#### Language
-| Constant | Description |
-|-----------------------------------|-------------------------------|
-| Language.AFRIKAANS | Afrikaans language. |
-| Language.ALBANIAN | ALBANIAN language. |
-| Language.ARABIC | Arabic language. |
-| Language.AZERBAIJANI | Azerbaijani language. |
-| Language.BULGARIAN | Bulgarian language. |
-| Language.CATALAN | Catalan language. |
-| Language.CZECH | Czech language. |
-| Language.DANISH | Danish language. |
-| Language.GERMAN | German language. |
-| Language.GREEK | Greek language. |
-| Language.ENGLISH | English language. |
-| Language.BASQUE | Basque language. |
-| Language.PERSIAN | Persian (Farsi) language. |
-| Language.FINNISH | Finnish language. |
-| Language.FRENCH | French language. |
-| Language.GALICIAN | Galician language. |
-| Language.HEBREW | Hebrew language. |
-| Language.HINDI | Hindi language. |
-| Language.CROATIAN | Croatian language. |
-| Language.HUNGARIAN | Hungarian language. |
-| Language.INDONESIAN | Indonesian language. |
-| Language.ITALIAN | Italian language. |
-| Language.JAPANESE | Japanese language. |
-| Language.KOREAN | Korean language. |
-| Language.LATVIAN | Latvian language. |
-| Language.LITHUANIAN | Lithuanian language. |
-| Language.MACEDONIAN | Macedonian language. |
-| Language.NORWEGIAN | Norwegian language. |
-| Language.DUTCH | Dutch language. |
-| Language.POLISH | Polish language. |
-| Language.PORTUGUESE | Portuguese language. |
-| Language.PORTUGUES_BRAZIL | Português Brasil language. |
-| Language.ROMANIAN | Romanian language. |
-| Language.RUSSIAN | Russian language. |
-| Language.SWEDISH | Swedish language. |
-| Language.SLOVAK | Slovak language. |
-| Language.SLOVENIAN | Slovenian language. |
-| Language.SPANISH | Spanish language. |
-| Language.SERBIAN | Serbian language. |
-| Language.THAI | Thai language. |
-| Language.TURKISH | Turkish language. |
-| Language.UKRANIAN | Ukrainian language. |
-| Language.VIETNAMESE | Vietnamese language. |
-| Language.CHINESE_SIMPLIFIED | Chinese Simplified language. |
-| Language.CHINESE_TRADITIONAL | Chinese Traditional language. |
-| Language.ZULU | Zulu language. |
+| Constant | Description |
+|------------------------------|-------------------------------|
+| Language.AFRIKAANS | Afrikaans language. |
+| Language.ALBANIAN | ALBANIAN language. |
+| Language.ARABIC | Arabic language. |
+| Language.AZERBAIJANI | Azerbaijani language. |
+| Language.BULGARIAN | Bulgarian language. |
+| Language.CATALAN | Catalan language. |
+| Language.CZECH | Czech language. |
+| Language.DANISH | Danish language. |
+| Language.GERMAN | German language. |
+| Language.GREEK | Greek language. |
+| Language.ENGLISH | English language. |
+| Language.BASQUE | Basque language. |
+| Language.PERSIAN | Persian (Farsi) language. |
+| Language.FINNISH | Finnish language. |
+| Language.FRENCH | French language. |
+| Language.GALICIAN | Galician language. |
+| Language.HEBREW | Hebrew language. |
+| Language.HINDI | Hindi language. |
+| Language.CROATIAN | Croatian language. |
+| Language.HUNGARIAN | Hungarian language. |
+| Language.INDONESIAN | Indonesian language. |
+| Language.ITALIAN | Italian language. |
+| Language.JAPANESE | Japanese language. |
+| Language.KOREAN | Korean language. |
+| Language.LATVIAN | Latvian language. |
+| Language.LITHUANIAN | Lithuanian language. |
+| Language.MACEDONIAN | Macedonian language. |
+| Language.NORWEGIAN | Norwegian language. |
+| Language.DUTCH | Dutch language. |
+| Language.POLISH | Polish language. |
+| Language.PORTUGUESE | Portuguese language. |
+| Language.PORTUGUES_BRAZIL | Português Brasil language. |
+| Language.ROMANIAN | Romanian language. |
+| Language.RUSSIAN | Russian language. |
+| Language.SWEDISH | Swedish language. |
+| Language.SLOVAK | Slovak language. |
+| Language.SLOVENIAN | Slovenian language. |
+| Language.SPANISH | Spanish language. |
+| Language.SERBIAN | Serbian language. |
+| Language.THAI | Thai language. |
+| Language.TURKISH | Turkish language. |
+| Language.UKRAINIAN | Ukrainian language. |
+| Language.VIETNAMESE | Vietnamese language. |
+| Language.CHINESE_SIMPLIFIED | Chinese Simplified language. |
+| Language.CHINESE_TRADITIONAL | Chinese Traditional language. |
+| Language.ZULU | Zulu language. |
#### Unit
| Constant | Description |
@@ -532,7 +546,7 @@ final AirPollutionDetails airPollutionDetails = openWeatherClient
| Unit.STANDARD_SYSTEM | Kelvin, meter/sec, hPa, mm(rain, snow). |
### Dependencies
-* com.fasterxml.jackson.core:jackson-databind:2.12.2
-* org.slf4j:slf4j-api:1.7.30 (*compile*)
-* org.junit.jupiter:junit-jupiter-engine:5.7.1 (*test*)
-* org.junit.platform:junit-platform-runner:1.7.1 (*test*)
\ No newline at end of file
+* com.fasterxml.jackson.core:jackson-databind:2.13.2.2
+* org.slf4j:slf4j-api:1.7.36 (*compile*)
+* org.junit.jupiter:junit-jupiter-engine:5.8.2 (*test*)
+* org.junit.platform:junit-platform-runner:1.8.2 (*test*)
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 168b4f4..ef080eb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.github.prominenceopenweathermap-api
- 2.2.0
+ 2.3.0jarJava OpenWeatherMap API
@@ -104,7 +104,7 @@
org.apache.maven.pluginsmaven-javadoc-plugin
- 3.2.0
+ 3.3.08
@@ -120,7 +120,7 @@
org.apache.maven.pluginsmaven-gpg-plugin
- 1.6
+ 3.0.1sign-artifacts
@@ -134,7 +134,7 @@
org.jacocojacoco-maven-plugin
- 0.8.6
+ 0.8.7
@@ -163,25 +163,25 @@
com.fasterxml.jackson.corejackson-databind
- 2.12.2
+ 2.13.2.2org.slf4jslf4j-api
- 1.7.30
+ 1.7.36compileorg.junit.jupiterjunit-jupiter-engine
- 5.7.1
+ 5.8.2testorg.junit.platformjunit-platform-runner
- 1.7.1
+ 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 145be6d..c29d1eb 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/OpenWeatherMapClient.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/OpenWeatherMapClient.java
@@ -23,16 +23,14 @@
package com.github.prominence.openweathermap.api;
import com.github.prominence.openweathermap.api.annotation.SubscriptionAvailability;
+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 com.github.prominence.openweathermap.api.request.weather.CurrentWeatherRequesterImpl;
-import static com.github.prominence.openweathermap.api.enums.SubscriptionPlan.*;
+import static com.github.prominence.openweathermap.api.enums.SubscriptionPlan.ALL;
/**
* The main public API client to communicate with OpenWeatherMap services.
@@ -40,6 +38,7 @@ import static com.github.prominence.openweathermap.api.enums.SubscriptionPlan.*;
*/
public class OpenWeatherMapClient {
private final String apiKey;
+ private final TimeoutSettings timeoutSettings = new TimeoutSettings();
/**
* Created OpenWeatherMap client object.
@@ -49,13 +48,21 @@ public class OpenWeatherMapClient {
this.apiKey = apiKey;
}
+ public void setConnectionTimeout(int connectionTimeout) {
+ timeoutSettings.setConnectionTimeout(connectionTimeout);
+ }
+
+ public void setReadTimeout(int readTimeout) {
+ timeoutSettings.setReadTimeout(readTimeout);
+ }
+
/**
* Current Weather API.
* @return requester for retrieving current weather information.
*/
@SubscriptionAvailability(plans = ALL)
public CurrentWeatherRequester currentWeather() {
- return new CurrentWeatherRequesterImpl(apiKey);
+ return new CurrentWeatherRequester(new RequestSettings(apiKey, timeoutSettings));
}
/**
@@ -64,7 +71,7 @@ public class OpenWeatherMapClient {
*/
@SubscriptionAvailability(plans = ALL)
public FiveDayThreeHourStepForecastRequester forecast5Day3HourStep() {
- return new FiveDayThreeHourStepForecastRequesterImpl(apiKey);
+ return new FiveDayThreeHourStepForecastRequester(new RequestSettings(apiKey, timeoutSettings));
}
/**
@@ -74,7 +81,7 @@ public class OpenWeatherMapClient {
*/
@SubscriptionAvailability(plans = ALL)
public OneCallWeatherRequester oneCall() {
- return new OneCallWeatherRequesterImpl(apiKey);
+ return new OneCallWeatherRequester(new RequestSettings(apiKey, timeoutSettings));
}
/**
@@ -84,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/RequestCustomizer.java b/src/main/java/com/github/prominence/openweathermap/api/conf/TimeoutSettings.java
similarity index 52%
rename from src/main/java/com/github/prominence/openweathermap/api/request/RequestCustomizer.java
rename to src/main/java/com/github/prominence/openweathermap/api/conf/TimeoutSettings.java
index daf544e..45dbd10 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/RequestCustomizer.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/conf/TimeoutSettings.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,39 @@
* SOFTWARE.
*/
-package com.github.prominence.openweathermap.api.request;
+package com.github.prominence.openweathermap.api.conf;
-import com.github.prominence.openweathermap.api.enums.Language;
-import com.github.prominence.openweathermap.api.enums.UnitSystem;
+public class TimeoutSettings {
+ private Integer connectionTimeout;
+ private Integer readTimeout;
-/**
- * The interface Request customizer.
- *
- * @param the type parameter
- */
-public interface RequestCustomizer> {
+ public TimeoutSettings() {
+ this(2000, 2000);
+ }
- /**
- * Customize language.
- *
- * @param language the language
- * @return the request customizer
- */
- T language(Language language);
+ public TimeoutSettings(Integer connectionTimeout, Integer readTimeout) {
+ this.connectionTimeout = connectionTimeout;
+ this.readTimeout = readTimeout;
+ }
- /**
- * Customize unit system.
- *
- * @param unitSystem the unit system
- * @return the request customizer
- */
- T unitSystem(UnitSystem unitSystem);
-}
+ public TimeoutSettings(TimeoutSettings from) {
+ this.connectionTimeout = from.connectionTimeout;
+ this.readTimeout = from.readTimeout;
+ }
+
+ public Integer getConnectionTimeout() {
+ return connectionTimeout;
+ }
+
+ public void setConnectionTimeout(Integer connectionTimeout) {
+ this.connectionTimeout = connectionTimeout;
+ }
+
+ public Integer getReadTimeout() {
+ return readTimeout;
+ }
+
+ public void setReadTimeout(Integer readTimeout) {
+ this.readTimeout = readTimeout;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/github/prominence/openweathermap/api/enums/Language.java b/src/main/java/com/github/prominence/openweathermap/api/enums/Language.java
index 47a82ba..5a84c30 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/enums/Language.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/enums/Language.java
@@ -233,9 +233,9 @@ public enum Language {
TURKISH("tr"),
/**
- * Ukranian language.
+ * Ukrainian language.
*/
- UKRANIAN("uk"),
+ UKRAINIAN("uk"),
/**
* Vietnamese language.
diff --git a/src/main/java/com/github/prominence/openweathermap/api/enums/MoonType.java b/src/main/java/com/github/prominence/openweathermap/api/enums/MoonType.java
new file mode 100644
index 0000000..7fdaa8a
--- /dev/null
+++ b/src/main/java/com/github/prominence/openweathermap/api/enums/MoonType.java
@@ -0,0 +1,62 @@
+/*
+ * 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
+ * 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.enums;
+
+public enum MoonType {
+ NEW_MOON,
+ WAXING_CRESCENT,
+ FIRST_QUARTER_MOON,
+ WAXING_GIBBOUS,
+ FULL_MOON,
+ WANING_GIBBOUS,
+ LAST_QUARTER_MOON,
+ WANING_CRESCENT,
+ INVALID;
+
+ private static final double precision = 0.000001d;
+
+ public static MoonType valueOf(double numericValue) {
+ if (equals(numericValue, 0) || equals(numericValue, 1)) {
+ return NEW_MOON;
+ } else if (equals(numericValue, 0.25)) {
+ return FIRST_QUARTER_MOON;
+ } else if (equals(numericValue, 0.5)) {
+ return FULL_MOON;
+ } else if (equals(numericValue, 0.75)) {
+ return LAST_QUARTER_MOON;
+ } else if (numericValue > 0 && numericValue < 0.25) {
+ return WAXING_CRESCENT;
+ } else if (numericValue > 0.25 && numericValue < 0.5) {
+ return WAXING_GIBBOUS;
+ } else if (numericValue > 0.5 && numericValue < 0.75) {
+ return WANING_GIBBOUS;
+ } else if (numericValue > 0.75 && numericValue < 1) {
+ return WANING_CRESCENT;
+ }
+ return INVALID;
+ }
+
+ private static boolean equals(double d1, double d2) {
+ return Math.abs(d1 - d2) < precision;
+ }
+}
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/AsyncRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/enums/ResponseType.java
similarity index 73%
rename from src/main/java/com/github/prominence/openweathermap/api/request/AsyncRequestTerminator.java
rename to src/main/java/com/github/prominence/openweathermap/api/enums/ResponseType.java
index 099f958..4c70a54 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/AsyncRequestTerminator.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/enums/ResponseType.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,15 +20,23 @@
* SOFTWARE.
*/
-package com.github.prominence.openweathermap.api.request;
+package com.github.prominence.openweathermap.api.enums;
-import java.util.concurrent.CompletableFuture;
+public enum ResponseType {
+ HTML("html"),
+ XML("xml");
-/**
- * The interface Async request terminator.
- *
- * @param the type parameter
- * @param the type parameter
- */
-public interface AsyncRequestTerminator extends RequestTerminator, CompletableFuture> {
+ private final String value;
+
+ ResponseType(String value) {
+ this.value = value;
+ }
+
+ /**
+ * Returns language's value.
+ * @return value.
+ */
+ public String getValue() {
+ return value;
+ }
}
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionResponseMapper.java b/src/main/java/com/github/prominence/openweathermap/api/mapper/AirPollutionResponseMapper.java
similarity index 73%
rename from src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionResponseMapper.java
rename to src/main/java/com/github/prominence/openweathermap/api/mapper/AirPollutionResponseMapper.java
index fd9b26e..b6a069e 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionResponseMapper.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/mapper/AirPollutionResponseMapper.java
@@ -1,28 +1,26 @@
/*
+ * Copyright (c) 2022 Alexey Zinchenko
*
- * * 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.
+ * 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;
+package com.github.prominence.openweathermap.api.mapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherResponseMapper.java b/src/main/java/com/github/prominence/openweathermap/api/mapper/CurrentWeatherResponseMapper.java
similarity index 99%
rename from src/main/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherResponseMapper.java
rename to src/main/java/com/github/prominence/openweathermap/api/mapper/CurrentWeatherResponseMapper.java
index be74bee..4e4174e 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherResponseMapper.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/mapper/CurrentWeatherResponseMapper.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,7 +20,7 @@
* SOFTWARE.
*/
-package com.github.prominence.openweathermap.api.request.weather;
+package com.github.prominence.openweathermap.api.mapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastResponseMapper.java b/src/main/java/com/github/prominence/openweathermap/api/mapper/FiveDayThreeHourStepForecastResponseMapper.java
similarity index 99%
rename from src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastResponseMapper.java
rename to src/main/java/com/github/prominence/openweathermap/api/mapper/FiveDayThreeHourStepForecastResponseMapper.java
index b728a7c..9517b7a 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastResponseMapper.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/mapper/FiveDayThreeHourStepForecastResponseMapper.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,7 +20,7 @@
* SOFTWARE.
*/
-package com.github.prominence.openweathermap.api.request.forecast.free;
+package com.github.prominence.openweathermap.api.mapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherResponseMapper.java b/src/main/java/com/github/prominence/openweathermap/api/mapper/OneCallWeatherResponseMapper.java
similarity index 95%
rename from src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherResponseMapper.java
rename to src/main/java/com/github/prominence/openweathermap/api/mapper/OneCallWeatherResponseMapper.java
index 7837b94..d3477b4 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherResponseMapper.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/mapper/OneCallWeatherResponseMapper.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,7 +20,7 @@
* SOFTWARE.
*/
-package com.github.prominence.openweathermap.api.request.onecall;
+package com.github.prominence.openweathermap.api.mapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
@@ -200,6 +200,18 @@ public class OneCallWeatherResponseMapper {
daily.setForecastTime(LocalDateTime.ofInstant(Instant.ofEpochSecond(dailyNode.get("dt").asInt()), TimeZone.getDefault().toZoneId()));
daily.setSunriseTime(LocalDateTime.ofInstant(Instant.ofEpochSecond(dailyNode.get("sunrise").asInt()), TimeZone.getDefault().toZoneId()));
daily.setSunsetTime(LocalDateTime.ofInstant(Instant.ofEpochSecond(dailyNode.get("sunset").asInt()), TimeZone.getDefault().toZoneId()));
+ final JsonNode moonriseTimeNode = dailyNode.get("moonrise");
+ if (moonriseTimeNode != null) {
+ daily.setMoonriseTime(LocalDateTime.ofInstant(Instant.ofEpochSecond(moonriseTimeNode.asInt()), TimeZone.getDefault().toZoneId()));
+ }
+ final JsonNode moonsetTimeNode = dailyNode.get("moonset");
+ if (moonsetTimeNode != null) {
+ daily.setMoonsetTime(LocalDateTime.ofInstant(Instant.ofEpochSecond(moonsetTimeNode.asInt()), TimeZone.getDefault().toZoneId()));
+ }
+ final JsonNode moonPhaseNode = dailyNode.get("moon_phase");
+ if (moonPhaseNode != null) {
+ daily.setMoonPhase(new MoonPhase(moonPhaseNode.asDouble()));
+ }
daily.setWeatherState(parseWeatherState(dailyNode.get("weather").get(0)));
daily.setTemperature(parseDailyTemperature(dailyNode));
diff --git a/src/main/java/com/github/prominence/openweathermap/api/model/onecall/current/Daily.java b/src/main/java/com/github/prominence/openweathermap/api/model/onecall/current/Daily.java
index 4829ce3..e2f8b45 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/model/onecall/current/Daily.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/model/onecall/current/Daily.java
@@ -39,6 +39,10 @@ public class Daily {
private LocalDateTime sunriseTime;
private LocalDateTime sunsetTime;
+ private LocalDateTime moonriseTime;
+ private LocalDateTime moonsetTime;
+ private MoonPhase moonPhase;
+
private WeatherState weatherState;
private DailyTemperature temperature;
private AtmosphericPressure atmosphericPressure;
@@ -104,6 +108,60 @@ public class Daily {
this.sunsetTime = sunsetTime;
}
+ /**
+ * Gets moonrise time.
+ *
+ * @return the moonrise time
+ */
+ public LocalDateTime getMoonriseTime() {
+ return moonriseTime;
+ }
+
+ /**
+ * Sets moonrise time.
+ *
+ * @param moonriseTime the moonrise time
+ */
+ public void setMoonriseTime(LocalDateTime moonriseTime) {
+ this.moonriseTime = moonriseTime;
+ }
+
+ /**
+ * Gets moonset time.
+ *
+ * @return the moonset time
+ */
+ public LocalDateTime getMoonsetTime() {
+ return moonsetTime;
+ }
+
+ /**
+ * Sets moonset time.
+ *
+ * @param moonsetTime the moonset time
+ */
+ public void setMoonsetTime(LocalDateTime moonsetTime) {
+ this.moonsetTime = moonsetTime;
+ }
+
+ /**
+ * Gets moon phase.
+ *
+ * @return the moon phase
+ */
+ public MoonPhase getMoonPhase() {
+ return moonPhase;
+ }
+
+ /**
+ * Sets moon phase.
+ *
+ * @param moonPhase the moon phase
+ */
+ public void setMoonPhase(MoonPhase moonPhase) {
+ this.moonPhase = moonPhase;
+ }
+
/**
* Gets weather state.
*
@@ -311,6 +369,9 @@ public class Daily {
return Objects.equals(forecastTime, daily.forecastTime) &&
Objects.equals(sunriseTime, daily.sunriseTime) &&
Objects.equals(sunsetTime, daily.sunsetTime) &&
+ Objects.equals(moonriseTime, daily.moonriseTime) &&
+ Objects.equals(moonsetTime, daily.moonsetTime) &&
+ Objects.equals(moonPhase, daily.moonPhase) &&
Objects.equals(weatherState, daily.weatherState) &&
Objects.equals(temperature, daily.temperature) &&
Objects.equals(atmosphericPressure, daily.atmosphericPressure) &&
@@ -325,7 +386,7 @@ public class Daily {
@Override
public int hashCode() {
- return Objects.hash(forecastTime, sunriseTime, sunsetTime, weatherState, temperature, atmosphericPressure, humidity, wind, clouds, uvIndex, probabilityOfPrecipitation, rain, snow);
+ return Objects.hash(forecastTime, sunriseTime, sunsetTime, moonriseTime, moonsetTime, moonPhase, weatherState, temperature, atmosphericPressure, humidity, wind, clouds, uvIndex, probabilityOfPrecipitation, rain, snow);
}
@Override
@@ -355,7 +416,7 @@ public class Daily {
}
if (clouds != null) {
stringBuilder.append(" Clouds: ");
- stringBuilder.append(clouds.toString());
+ stringBuilder.append(clouds);
stringBuilder.append('.');
}
if (rain != null) {
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/RequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/model/onecall/current/MoonPhase.java
similarity index 51%
rename from src/main/java/com/github/prominence/openweathermap/api/request/RequestTerminator.java
rename to src/main/java/com/github/prominence/openweathermap/api/model/onecall/current/MoonPhase.java
index 20a8f97..62a277f 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/RequestTerminator.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/model/onecall/current/MoonPhase.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,27 +20,44 @@
* SOFTWARE.
*/
-package com.github.prominence.openweathermap.api.request;
+package com.github.prominence.openweathermap.api.model.onecall.current;
-/**
- * The interface Request terminator.
- *
- * @param the type parameter
- * @param the type parameter
- */
-public interface RequestTerminator {
+import com.github.prominence.openweathermap.api.enums.MoonType;
- /**
- * Java object response format.
- *
- * @return the java object
- */
- T asJava();
+import java.util.Objects;
- /**
- * JSON response format.
- *
- * @return the JSON string
- */
- S asJSON();
+public class MoonPhase {
+ private final double value;
+ private final MoonType type;
+
+ public MoonPhase(Double value) {
+ this.value = value;
+ this.type = MoonType.valueOf(value);
+ }
+
+ public Double getValue() {
+ return value;
+ }
+
+ public MoonType getType() {
+ return type;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ MoonPhase moonPhase = (MoonPhase) o;
+ return Double.compare(moonPhase.value, value) == 0 && type == moonPhase.type;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(value, type);
+ }
+
+ @Override
+ public String toString() {
+ return type.name() + "(" + value + ")";
+ }
}
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
new file mode 100644
index 0000000..db0b103
--- /dev/null
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/RequestSettings.java
@@ -0,0 +1,100 @@
+/*
+ * 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
+ * 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.conf.TimeoutSettings;
+import com.github.prominence.openweathermap.api.enums.Language;
+import com.github.prominence.openweathermap.api.enums.ResponseType;
+import com.github.prominence.openweathermap.api.enums.UnitSystem;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class RequestSettings {
+
+ private static final String LANG_PARAM = "lang";
+ private static final String UNITS_PARAM = "units";
+ private static final String MODE_PARAM = "mode";
+ private static final String API_KEY_PARAM_NAME = "appid";
+
+ private final TimeoutSettings timeoutSettings;
+
+ private final Map requestParameters = new HashMap<>(8);
+
+ private final StringBuilder urlAppenderBuilder = new StringBuilder("");
+
+ private Language language = Language.ENGLISH;
+ private UnitSystem unitSystem = UnitSystem.STANDARD;
+
+ public RequestSettings(String apiKey, TimeoutSettings timeoutSettings) {
+ this.putRequestParameter(API_KEY_PARAM_NAME, apiKey);
+ // make a copy
+ this.timeoutSettings = new TimeoutSettings(timeoutSettings);
+ }
+
+ public TimeoutSettings getTimeoutSettings() {
+ return timeoutSettings;
+ }
+
+ public UnitSystem getUnitSystem() {
+ return unitSystem;
+ }
+
+ public void setUnitSystem(UnitSystem unitSystem) {
+ this.putRequestParameter(UNITS_PARAM, unitSystem.getValue());
+ this.unitSystem = unitSystem;
+ }
+
+ public Language getLanguage() {
+ return language;
+ }
+
+ public void setLanguage(Language language) {
+ this.putRequestParameter(LANG_PARAM, language.getValue());
+ this.language = language;
+ }
+
+ public void setResponseType(ResponseType responseType) {
+ this.putRequestParameter(MODE_PARAM, responseType.getValue());
+ }
+
+ public void putRequestParameter(String key, String value) {
+ this.requestParameters.put(key, value);
+ }
+
+ public void removeRequestParameter(String key) {
+ this.requestParameters.remove(key);
+ }
+
+ public Map getRequestParameters() {
+ return requestParameters;
+ }
+
+ public void appendToURL(String appendix) {
+ urlAppenderBuilder.append(appendix);
+ }
+
+ public StringBuilder getUrlAppender() {
+ return urlAppenderBuilder;
+ }
+}
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 378bfca..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/RequestUrlBuilder.java
+++ /dev/null
@@ -1,98 +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.
- */
-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 45ffcd2..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionAsyncRequestTerminatorImpl.java
+++ /dev/null
@@ -1,61 +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.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 aae8ac1..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequestTerminatorImpl.java
+++ /dev/null
@@ -1,59 +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.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 0faa6b3..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionRequesterImpl.java
+++ /dev/null
@@ -1,67 +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;
-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 8b333e3..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastAsyncRequestTerminatorImpl.java
+++ /dev/null
@@ -1,69 +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.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 5011467..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequestTerminatorImpl.java
+++ /dev/null
@@ -1,67 +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.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 b5a87f2..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastRequesterImpl.java
+++ /dev/null
@@ -1,86 +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.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 d0dddb1..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherRequesterImpl.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.onecall;
-
-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 da2dd81..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.request.onecall.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 a2ea7c7..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.request.onecall.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 e2dc671..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.request.onecall.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 56a6c72..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.request.onecall.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/CurrentWeatherRequester.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherRequester.java
index 9c459d4..c56babd 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherRequester.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherRequester.java
@@ -22,25 +22,30 @@
package com.github.prominence.openweathermap.api.request.weather;
+import com.github.prominence.openweathermap.api.request.RequestSettings;
import com.github.prominence.openweathermap.api.request.weather.multiple.MultipleLocationsCurrentWeatherRequester;
import com.github.prominence.openweathermap.api.request.weather.single.SingleLocationCurrentWeatherRequester;
/**
- * An interface for API methods.
+ * The type Current weather requester.
*/
-public interface CurrentWeatherRequester {
+public class CurrentWeatherRequester {
+ private final RequestSettings requestSettings;
/**
- * Single location current weather requester.
+ * Instantiates a new Current weather requester.
*
- * @return the single location current weather requester
+ * @param requestSettings request settings object.
*/
- SingleLocationCurrentWeatherRequester single();
+ public CurrentWeatherRequester(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ }
- /**
- * Multiple locations current weather requester.
- *
- * @return the multiple locations current weather requester
- */
- MultipleLocationsCurrentWeatherRequester multiple();
+ public SingleLocationCurrentWeatherRequester single() {
+ return new SingleLocationCurrentWeatherRequester(requestSettings);
+ }
+
+ public MultipleLocationsCurrentWeatherRequester multiple() {
+ return new MultipleLocationsCurrentWeatherRequester(requestSettings);
+ }
}
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherRequesterImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherRequesterImpl.java
deleted file mode 100644
index 0b393d6..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherRequesterImpl.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.weather;
-
-import com.github.prominence.openweathermap.api.request.RequestUrlBuilder;
-import com.github.prominence.openweathermap.api.request.weather.multiple.MultipleLocationsCurrentWeatherRequesterImpl;
-import com.github.prominence.openweathermap.api.request.weather.multiple.MultipleLocationsCurrentWeatherRequester;
-import com.github.prominence.openweathermap.api.request.weather.single.SingleLocationCurrentWeatherRequesterImpl;
-import com.github.prominence.openweathermap.api.request.weather.single.SingleLocationCurrentWeatherRequester;
-
-/**
- * The type Current weather requester.
- */
-public class CurrentWeatherRequesterImpl implements CurrentWeatherRequester {
- private final RequestUrlBuilder urlBuilder;
-
- /**
- * Instantiates a new Current weather requester.
- *
- * @param apiKey the api key
- */
- public CurrentWeatherRequesterImpl(String apiKey) {
- urlBuilder = new RequestUrlBuilder(apiKey);
- }
-
- public SingleLocationCurrentWeatherRequester single() {
- return new SingleLocationCurrentWeatherRequesterImpl(urlBuilder);
- }
-
- public MultipleLocationsCurrentWeatherRequester multiple() {
- return new MultipleLocationsCurrentWeatherRequesterImpl(urlBuilder);
- }
-}
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleLocationsCurrentWeatherRequester.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleLocationsCurrentWeatherRequester.java
index 291674e..724ddbc 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleLocationsCurrentWeatherRequester.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleLocationsCurrentWeatherRequester.java
@@ -24,36 +24,45 @@ package com.github.prominence.openweathermap.api.request.weather.multiple;
import com.github.prominence.openweathermap.api.model.Coordinate;
import com.github.prominence.openweathermap.api.model.CoordinateRectangle;
+import com.github.prominence.openweathermap.api.request.RequestSettings;
/**
- * The interface Multiple locations current weather requester.
+ * The type Multiple locations current weather requester.
*/
-public interface MultipleLocationsCurrentWeatherRequester {
+public class MultipleLocationsCurrentWeatherRequester {
+ private final RequestSettings requestSettings;
/**
- * By rectangle multiple result current weather request customizer.
+ * Instantiates a new Multiple locations current weather requester.
*
- * @param rectangle the rectangle
- * @param zoom the zoom
- * @return the multiple result current weather request customizer
+ * @param requestSettings request settings object.
*/
- MultipleResultCurrentWeatherRequestCustomizer byRectangle(CoordinateRectangle rectangle, int zoom);
+ public MultipleLocationsCurrentWeatherRequester(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ }
- /**
- * By cities in cycle multiple result current weather request customizer.
- *
- * @param point the point
- * @return the multiple result cities in circle current weather request customizer
- */
- MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer byCitiesInCycle(Coordinate point);
+ public MultipleResultCurrentWeatherRequestCustomizer byRectangle(CoordinateRectangle rectangle, int zoom) {
+ String coordinates = rectangle.getFormattedRequestString() + "," + zoom;
+ requestSettings.appendToURL("box/city");
+ requestSettings.putRequestParameter("bbox", coordinates);
- /**
- * By cities in cycle multiple result current weather request customizer.
- *
- * @param point the point
- * @param citiesCount the cities count
- * @return the multiple result cities in circle current weather request customizer
- */
- MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer byCitiesInCycle(Coordinate point, int citiesCount);
+ return new MultipleResultCurrentWeatherRequestCustomizer(requestSettings);
+ }
+ public MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer byCitiesInCycle(Coordinate point, int citiesCount) {
+ requestSettings.appendToURL("find");
+ requestSettings.putRequestParameter("lat", Double.toString(point.getLatitude()));
+ requestSettings.putRequestParameter("lon", Double.toString(point.getLongitude()));
+ requestSettings.putRequestParameter("cnt", Integer.toString(citiesCount));
+
+ return new MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer(requestSettings);
+ }
+
+ public MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer byCitiesInCycle(Coordinate point) {
+ requestSettings.appendToURL("find");
+ requestSettings.putRequestParameter("lat", Double.toString(point.getLatitude()));
+ requestSettings.putRequestParameter("lon", Double.toString(point.getLongitude()));
+
+ return new MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer(requestSettings);
+ }
}
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleLocationsCurrentWeatherRequesterImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleLocationsCurrentWeatherRequesterImpl.java
deleted file mode 100644
index ba105cd..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleLocationsCurrentWeatherRequesterImpl.java
+++ /dev/null
@@ -1,71 +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.weather.multiple;
-
-import com.github.prominence.openweathermap.api.request.RequestUrlBuilder;
-import com.github.prominence.openweathermap.api.model.Coordinate;
-import com.github.prominence.openweathermap.api.model.CoordinateRectangle;
-
-/**
- * The type Multiple locations current weather requester.
- */
-public class MultipleLocationsCurrentWeatherRequesterImpl implements MultipleLocationsCurrentWeatherRequester {
- private final RequestUrlBuilder urlBuilder;
-
- /**
- * Instantiates a new Multiple locations current weather requester.
- *
- * @param urlBuilder the url builder
- */
- public MultipleLocationsCurrentWeatherRequesterImpl(RequestUrlBuilder urlBuilder) {
- this.urlBuilder = urlBuilder;
- }
-
- @Override
- public MultipleResultCurrentWeatherRequestCustomizer byRectangle(CoordinateRectangle rectangle, int zoom) {
- String coordinates = rectangle.getFormattedRequestString() + "," + zoom;
- urlBuilder.append("box/city");
- urlBuilder.addRequestParameter("bbox", coordinates);
-
- return new MultipleResultCurrentWeatherRequestCustomizerImpl(urlBuilder);
- }
-
- @Override
- public MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer byCitiesInCycle(Coordinate point, int citiesCount) {
- urlBuilder.append("find");
- urlBuilder.addRequestParameter("lat", Double.toString(point.getLatitude()));
- urlBuilder.addRequestParameter("lon", Double.toString(point.getLongitude()));
- urlBuilder.addRequestParameter("cnt", Integer.toString(citiesCount));
-
- return new MultipleResultCitiesInCircleCurrentWeatherRequestCustomizerImpl(urlBuilder);
- }
-
- @Override
- public MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer byCitiesInCycle(Coordinate point) {
- urlBuilder.append("find");
- urlBuilder.addRequestParameter("lat", Double.toString(point.getLatitude()));
- urlBuilder.addRequestParameter("lon", Double.toString(point.getLongitude()));
-
- return new MultipleResultCitiesInCircleCurrentWeatherRequestCustomizerImpl(urlBuilder);
- }
-}
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator.java
index 31905d1..bd32b97 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator.java
@@ -22,20 +22,44 @@
package com.github.prominence.openweathermap.api.request.weather.multiple;
+import com.github.prominence.openweathermap.api.enums.ResponseType;
import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.request.AsyncRequestTerminator;
+import com.github.prominence.openweathermap.api.request.RequestSettings;
+import com.github.prominence.openweathermap.api.mapper.CurrentWeatherResponseMapper;
+import com.github.prominence.openweathermap.api.utils.RequestUtils;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
- * The interface Multiple result current weather async request terminator.
+ * The type Multiple result current weather async request terminator.
*/
-public interface MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator extends AsyncRequestTerminator, String> {
+public class MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator {
+ private final RequestSettings requestSettings;
+
/**
- * XML response format.
+ * Instantiates a new Multiple result current weather async request terminator.
*
- * @return the completable future
+ * @param requestSettings request settings object.
*/
- CompletableFuture asXML();
+ MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ }
+
+ public CompletableFuture> asJava() {
+ return CompletableFuture.supplyAsync(() -> new CurrentWeatherResponseMapper(requestSettings.getUnitSystem()).getList(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/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminatorImpl.java
deleted file mode 100644
index 189cfb3..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminatorImpl.java
+++ /dev/null
@@ -1,71 +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.weather.multiple;
-
-import com.github.prominence.openweathermap.api.enums.UnitSystem;
-import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.request.RequestUrlBuilder;
-import com.github.prominence.openweathermap.api.request.weather.CurrentWeatherResponseMapper;
-import com.github.prominence.openweathermap.api.utils.RequestUtils;
-
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-
-/**
- * The type Multiple result current weather async request terminator.
- */
-public class MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminatorImpl implements MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator {
- private final RequestUrlBuilder urlBuilder;
- private final UnitSystem unitSystem;
-
- /**
- * Instantiates a new Multiple result current weather async request terminator.
- *
- * @param urlBuilder the url builder
- * @param unitSystem the unit system
- */
- MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) {
- this.urlBuilder = urlBuilder;
- this.unitSystem = unitSystem;
- }
-
- @Override
- public CompletableFuture> asJava() {
- return CompletableFuture.supplyAsync(() -> new CurrentWeatherResponseMapper(unitSystem).getList(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/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer.java
index 336b04c..d9663c9 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer.java
@@ -22,23 +22,40 @@
package com.github.prominence.openweathermap.api.request.weather.multiple;
-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 Multiple result current weather request customizer.
+ * The type Multiple result current weather request customizer.
*/
-public interface MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer extends RequestCustomizer {
- /**
- * Retrieve multiple result current weather request terminator.
- *
- * @return the multiple result current weather request terminator
- */
- MultipleResultCitiesInCircleCurrentWeatherRequestTerminator retrieve();
+public class MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer {
+ private final RequestSettings requestSettings;
/**
- * Retrieve async multiple result current weather async request terminator.
+ * Instantiates a new Multiple result current weather request customizer.
*
- * @return the multiple result current weather async request terminator
+ * @param requestSettings request settings object.
*/
- MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator retrieveAsync();
-}
+ MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ }
+
+ public MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer language(Language language) {
+ requestSettings.setLanguage(language);
+ return this;
+ }
+
+ public MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer unitSystem(UnitSystem unitSystem) {
+ requestSettings.setUnitSystem(unitSystem);
+ return this;
+ }
+
+ public MultipleResultCitiesInCircleCurrentWeatherRequestTerminator retrieve() {
+ return new MultipleResultCitiesInCircleCurrentWeatherRequestTerminator(requestSettings);
+ }
+
+ public MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator retrieveAsync() {
+ return new MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator(requestSettings);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestCustomizerImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestCustomizerImpl.java
deleted file mode 100644
index b753f5d..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestCustomizerImpl.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.weather.multiple;
-
-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 Multiple result current weather request customizer.
- */
-public class MultipleResultCitiesInCircleCurrentWeatherRequestCustomizerImpl implements MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer {
- private final RequestUrlBuilder urlBuilder;
-
- private Language language;
- private UnitSystem unitSystem = UnitSystem.STANDARD;
-
- /**
- * Instantiates a new Multiple result current weather request customizer.
- *
- * @param urlBuilder the url builder
- */
- MultipleResultCitiesInCircleCurrentWeatherRequestCustomizerImpl(RequestUrlBuilder urlBuilder) {
- this.urlBuilder = urlBuilder;
- }
-
- @Override
- public MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer language(Language language) {
- this.language = language;
- return this;
- }
-
- @Override
- public MultipleResultCitiesInCircleCurrentWeatherRequestCustomizer unitSystem(UnitSystem unitSystem) {
- this.unitSystem = unitSystem;
- return this;
- }
-
- @Override
- public MultipleResultCitiesInCircleCurrentWeatherRequestTerminator retrieve() {
- urlBuilder.applyCustomization(language, unitSystem);
- return new MultipleResultCitiesInCircleCurrentWeatherRequestTerminatorImpl(urlBuilder, unitSystem);
- }
-
- @Override
- public MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminator retrieveAsync() {
- urlBuilder.applyCustomization(language, unitSystem);
- return new MultipleResultCitiesInCircleCurrentWeatherAsyncRequestTerminatorImpl(urlBuilder, unitSystem);
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestTerminator.java
index dcd1905..6341bf1 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestTerminator.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestTerminator.java
@@ -22,19 +22,43 @@
package com.github.prominence.openweathermap.api.request.weather.multiple;
+import com.github.prominence.openweathermap.api.enums.ResponseType;
import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.request.RequestTerminator;
+import com.github.prominence.openweathermap.api.request.RequestSettings;
+import com.github.prominence.openweathermap.api.mapper.CurrentWeatherResponseMapper;
+import com.github.prominence.openweathermap.api.utils.RequestUtils;
import java.util.List;
/**
- * The interface Multiple result current weather request terminator.
+ * The type Multiple result current weather request terminator.
*/
-public interface MultipleResultCitiesInCircleCurrentWeatherRequestTerminator extends RequestTerminator, String> {
+public class MultipleResultCitiesInCircleCurrentWeatherRequestTerminator {
+ private final RequestSettings requestSettings;
+
/**
- * XML response format.
+ * Instantiates a new Multiple result current weather request terminator.
*
- * @return the XML string
+ * @param requestSettings request settings object.
*/
- String asXML();
+ MultipleResultCitiesInCircleCurrentWeatherRequestTerminator(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ }
+
+ public List asJava() {
+ return new CurrentWeatherResponseMapper(requestSettings.getUnitSystem()).getList(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/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestTerminatorImpl.java
deleted file mode 100644
index 7e482a2..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCitiesInCircleCurrentWeatherRequestTerminatorImpl.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.weather.multiple;
-
-import com.github.prominence.openweathermap.api.enums.UnitSystem;
-import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.request.RequestUrlBuilder;
-import com.github.prominence.openweathermap.api.request.weather.CurrentWeatherResponseMapper;
-import com.github.prominence.openweathermap.api.utils.RequestUtils;
-
-import java.util.List;
-
-/**
- * The type Multiple result current weather request terminator.
- */
-public class MultipleResultCitiesInCircleCurrentWeatherRequestTerminatorImpl implements MultipleResultCitiesInCircleCurrentWeatherRequestTerminator {
- private final RequestUrlBuilder urlBuilder;
- private final UnitSystem unitSystem;
-
- /**
- * Instantiates a new Multiple result current weather request terminator.
- *
- * @param urlBuilder the url builder
- * @param unitSystem the unit system
- */
- MultipleResultCitiesInCircleCurrentWeatherRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) {
- this.urlBuilder = urlBuilder;
- this.unitSystem = unitSystem;
- }
-
- @Override
- public List asJava() {
- return new CurrentWeatherResponseMapper(unitSystem).getList(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/weather/multiple/MultipleResultCurrentWeatherAsyncRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherAsyncRequestTerminator.java
index 6374a96..3b74133 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherAsyncRequestTerminator.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherAsyncRequestTerminator.java
@@ -23,12 +23,37 @@
package com.github.prominence.openweathermap.api.request.weather.multiple;
import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.request.AsyncRequestTerminator;
+import com.github.prominence.openweathermap.api.request.RequestSettings;
+import com.github.prominence.openweathermap.api.mapper.CurrentWeatherResponseMapper;
+import com.github.prominence.openweathermap.api.utils.RequestUtils;
import java.util.List;
+import java.util.concurrent.CompletableFuture;
/**
- * The interface Multiple result current weather async request terminator.
+ * The type Multiple result current weather async request terminator.
*/
-public interface MultipleResultCurrentWeatherAsyncRequestTerminator extends AsyncRequestTerminator, String> {
+public class MultipleResultCurrentWeatherAsyncRequestTerminator {
+ private final RequestSettings requestSettings;
+
+ /**
+ * Instantiates a new Multiple result current weather async request terminator.
+ *
+ * @param requestSettings request settings object.
+ */
+ MultipleResultCurrentWeatherAsyncRequestTerminator(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ }
+
+ public CompletableFuture> asJava() {
+ return CompletableFuture.supplyAsync(() -> new CurrentWeatherResponseMapper(requestSettings.getUnitSystem()).getList(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/weather/multiple/MultipleResultCurrentWeatherAsyncRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherAsyncRequestTerminatorImpl.java
deleted file mode 100644
index e34c195..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherAsyncRequestTerminatorImpl.java
+++ /dev/null
@@ -1,65 +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.weather.multiple;
-
-import com.github.prominence.openweathermap.api.request.RequestUrlBuilder;
-import com.github.prominence.openweathermap.api.request.weather.CurrentWeatherResponseMapper;
-import com.github.prominence.openweathermap.api.enums.UnitSystem;
-import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.utils.RequestUtils;
-
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-
-/**
- * The type Multiple result current weather async request terminator.
- */
-public class MultipleResultCurrentWeatherAsyncRequestTerminatorImpl implements MultipleResultCurrentWeatherAsyncRequestTerminator {
- private final RequestUrlBuilder urlBuilder;
- private final UnitSystem unitSystem;
-
- /**
- * Instantiates a new Multiple result current weather async request terminator.
- *
- * @param urlBuilder the url builder
- * @param unitSystem the unit system
- */
- MultipleResultCurrentWeatherAsyncRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) {
- this.urlBuilder = urlBuilder;
- this.unitSystem = unitSystem;
- }
-
- @Override
- public CompletableFuture> asJava() {
- return CompletableFuture.supplyAsync(() -> new CurrentWeatherResponseMapper(unitSystem).getList(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/weather/multiple/MultipleResultCurrentWeatherRequestCustomizer.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestCustomizer.java
index 651e413..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,23 +22,40 @@
package com.github.prominence.openweathermap.api.request.weather.multiple;
-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 Multiple result current weather request customizer.
+ * The type Multiple result current weather request customizer.
*/
-public interface MultipleResultCurrentWeatherRequestCustomizer extends RequestCustomizer {
- /**
- * Retrieve multiple result current weather request terminator.
- *
- * @return the multiple result current weather request terminator
- */
- MultipleResultCurrentWeatherRequestTerminator retrieve();
+public class MultipleResultCurrentWeatherRequestCustomizer {
+ private final RequestSettings requestSettings;
/**
- * Retrieve async multiple result current weather async request terminator.
+ * Instantiates a new Multiple result current weather request customizer.
*
- * @return the multiple result current weather async request terminator
+ * @param requestSettings request settings object.
*/
- MultipleResultCurrentWeatherAsyncRequestTerminator retrieveAsync();
-}
+ MultipleResultCurrentWeatherRequestCustomizer(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ }
+
+ public MultipleResultCurrentWeatherRequestCustomizer language(Language language) {
+ requestSettings.setLanguage(language);
+ return this;
+ }
+
+ public MultipleResultCurrentWeatherRequestCustomizer unitSystem(UnitSystem unitSystem) {
+ requestSettings.setUnitSystem(unitSystem);
+ return this;
+ }
+
+ public MultipleResultCurrentWeatherRequestTerminator retrieve() {
+ return new MultipleResultCurrentWeatherRequestTerminator(requestSettings);
+ }
+
+ public MultipleResultCurrentWeatherAsyncRequestTerminator retrieveAsync() {
+ return new MultipleResultCurrentWeatherAsyncRequestTerminator(requestSettings);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestCustomizerImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestCustomizerImpl.java
deleted file mode 100644
index 78d14f8..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestCustomizerImpl.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.weather.multiple;
-
-import com.github.prominence.openweathermap.api.request.RequestUrlBuilder;
-import com.github.prominence.openweathermap.api.enums.Language;
-import com.github.prominence.openweathermap.api.enums.UnitSystem;
-
-/**
- * The type Multiple result current weather request customizer.
- */
-public class MultipleResultCurrentWeatherRequestCustomizerImpl implements MultipleResultCurrentWeatherRequestCustomizer {
- private final RequestUrlBuilder urlBuilder;
-
- private Language language;
- private UnitSystem unitSystem = UnitSystem.STANDARD;
-
- /**
- * Instantiates a new Multiple result current weather request customizer.
- *
- * @param urlBuilder the url builder
- */
- MultipleResultCurrentWeatherRequestCustomizerImpl(RequestUrlBuilder urlBuilder) {
- this.urlBuilder = urlBuilder;
- }
-
- @Override
- public MultipleResultCurrentWeatherRequestCustomizer language(Language language) {
- this.language = language;
- return this;
- }
-
- @Override
- public MultipleResultCurrentWeatherRequestCustomizer unitSystem(UnitSystem unitSystem) {
- this.unitSystem = unitSystem;
- return this;
- }
-
- @Override
- public MultipleResultCurrentWeatherRequestTerminator retrieve() {
- urlBuilder.applyCustomization(language, unitSystem);
- return new MultipleResultCurrentWeatherRequestTerminatorImpl(urlBuilder, unitSystem);
- }
-
- @Override
- public MultipleResultCurrentWeatherAsyncRequestTerminator retrieveAsync() {
- urlBuilder.applyCustomization(language, unitSystem);
- return new MultipleResultCurrentWeatherAsyncRequestTerminatorImpl(urlBuilder, unitSystem);
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestTerminator.java
index aa916f6..1c9859f 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestTerminator.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestTerminator.java
@@ -23,12 +23,36 @@
package com.github.prominence.openweathermap.api.request.weather.multiple;
import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.request.RequestTerminator;
+import com.github.prominence.openweathermap.api.request.RequestSettings;
+import com.github.prominence.openweathermap.api.mapper.CurrentWeatherResponseMapper;
+import com.github.prominence.openweathermap.api.utils.RequestUtils;
import java.util.List;
/**
- * The interface Multiple result current weather request terminator.
+ * The type Multiple result current weather request terminator.
*/
-public interface MultipleResultCurrentWeatherRequestTerminator extends RequestTerminator, String> {
+public class MultipleResultCurrentWeatherRequestTerminator {
+ private final RequestSettings requestSettings;
+
+ /**
+ * Instantiates a new Multiple result current weather request terminator.
+ *
+ * @param requestSettings request settings object.
+ */
+ MultipleResultCurrentWeatherRequestTerminator(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ }
+
+ public List asJava() {
+ return new CurrentWeatherResponseMapper(requestSettings.getUnitSystem()).getList(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/weather/multiple/MultipleResultCurrentWeatherRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestTerminatorImpl.java
deleted file mode 100644
index 3cf256a..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/multiple/MultipleResultCurrentWeatherRequestTerminatorImpl.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.weather.multiple;
-
-import com.github.prominence.openweathermap.api.request.RequestUrlBuilder;
-import com.github.prominence.openweathermap.api.request.weather.CurrentWeatherResponseMapper;
-import com.github.prominence.openweathermap.api.enums.UnitSystem;
-import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.utils.RequestUtils;
-
-import java.util.List;
-
-/**
- * The type Multiple result current weather request terminator.
- */
-public class MultipleResultCurrentWeatherRequestTerminatorImpl implements MultipleResultCurrentWeatherRequestTerminator {
- private final RequestUrlBuilder urlBuilder;
- private final UnitSystem unitSystem;
-
- /**
- * Instantiates a new Multiple result current weather request terminator.
- *
- * @param urlBuilder the url builder
- * @param unitSystem the unit system
- */
- MultipleResultCurrentWeatherRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) {
- this.urlBuilder = urlBuilder;
- this.unitSystem = unitSystem;
- }
-
- @Override
- public List asJava() {
- return new CurrentWeatherResponseMapper(unitSystem).getList(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/weather/single/SingleLocationCurrentWeatherRequester.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleLocationCurrentWeatherRequester.java
index 0dc887a..199a980 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleLocationCurrentWeatherRequester.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleLocationCurrentWeatherRequester.java
@@ -23,69 +23,57 @@
package com.github.prominence.openweathermap.api.request.weather.single;
import com.github.prominence.openweathermap.api.model.Coordinate;
+import com.github.prominence.openweathermap.api.request.RequestSettings;
/**
- * The interface Single location current weather requester.
+ * The type Single location current weather requester.
*/
-public interface SingleLocationCurrentWeatherRequester {
+public class SingleLocationCurrentWeatherRequester {
+ private final RequestSettings requestSettings;
/**
- * By city name current weather request customizer.
+ * Instantiates a new Single location current weather requester.
*
- * @param cityName the city name
- * @return the single result current weather request customizer
+ * @param requestSettings request settings object.
*/
- SingleResultCurrentWeatherRequestCustomizer byCityName(String cityName);
+ public SingleLocationCurrentWeatherRequester(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ this.requestSettings.appendToURL("weather");
+ }
- /**
- * By city name current weather request customizer.
- *
- * @param cityName the city name
- * @param countryCode the country code
- * @return the single result current weather request customizer
- */
- SingleResultCurrentWeatherRequestCustomizer byCityName(String cityName, String countryCode);
+ public SingleResultCurrentWeatherRequestCustomizer byCityName(String cityName) {
+ requestSettings.putRequestParameter("q", cityName);
+ return new SingleResultCurrentWeatherRequestCustomizer(requestSettings);
+ }
- /**
- * By city name current weather request customizer.
- *
- * @param cityName the city name
- * @param stateCode the state code
- * @param countryCode the country code
- * @return the single result current weather request customizer
- */
- SingleResultCurrentWeatherRequestCustomizer byCityName(String cityName, String stateCode, String countryCode);
+ public SingleResultCurrentWeatherRequestCustomizer byCityName(String cityName, String countryCode) {
+ requestSettings.putRequestParameter("q", cityName + "," + countryCode);
+ return new SingleResultCurrentWeatherRequestCustomizer(requestSettings);
+ }
- /**
- * By city id current weather request customizer.
- *
- * @param cityId the city id
- * @return the single result current weather request customizer
- */
- SingleResultCurrentWeatherRequestCustomizer byCityId(long cityId);
+ public SingleResultCurrentWeatherRequestCustomizer byCityName(String cityName, String stateCode, String countryCode) {
+ requestSettings.putRequestParameter("q", cityName + "," + stateCode + "," + countryCode);
+ return new SingleResultCurrentWeatherRequestCustomizer(requestSettings);
+ }
- /**
- * By coordinate current weather request customizer.
- *
- * @param coordinate the coordinate
- * @return the single result current weather request customizer
- */
- SingleResultCurrentWeatherRequestCustomizer byCoordinate(Coordinate coordinate);
+ public SingleResultCurrentWeatherRequestCustomizer byCityId(long cityId) {
+ requestSettings.putRequestParameter("id", String.valueOf(cityId));
+ return new SingleResultCurrentWeatherRequestCustomizer(requestSettings);
+ }
- /**
- * By zip code and country current weather request customizer.
- *
- * @param zipCode the zip code
- * @param countryCode the country code
- * @return the single result current weather request customizer
- */
- SingleResultCurrentWeatherRequestCustomizer byZipCodeAndCountry(String zipCode, String countryCode);
+ public SingleResultCurrentWeatherRequestCustomizer byCoordinate(Coordinate coordinate) {
+ requestSettings.putRequestParameter("lat", String.valueOf(coordinate.getLatitude()));
+ requestSettings.putRequestParameter("lon", String.valueOf(coordinate.getLongitude()));
+ return new SingleResultCurrentWeatherRequestCustomizer(requestSettings);
+ }
- /**
- * By zip code in usa current weather request customizer.
- *
- * @param zipCode the zip code
- * @return the single result current weather request customizer
- */
- SingleResultCurrentWeatherRequestCustomizer byZipCodeInUSA(String zipCode);
+ public SingleResultCurrentWeatherRequestCustomizer byZipCodeAndCountry(String zipCode, String countryCode) {
+ requestSettings.putRequestParameter("zip", zipCode + "," + countryCode);
+ return new SingleResultCurrentWeatherRequestCustomizer(requestSettings);
+ }
+
+ public SingleResultCurrentWeatherRequestCustomizer byZipCodeInUSA(String zipCode) {
+ requestSettings.putRequestParameter("zip", zipCode);
+ return new SingleResultCurrentWeatherRequestCustomizer(requestSettings);
+ }
}
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleLocationCurrentWeatherRequesterImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleLocationCurrentWeatherRequesterImpl.java
deleted file mode 100644
index e26038b..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleLocationCurrentWeatherRequesterImpl.java
+++ /dev/null
@@ -1,81 +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.weather.single;
-
-import com.github.prominence.openweathermap.api.request.RequestUrlBuilder;
-import com.github.prominence.openweathermap.api.model.Coordinate;
-
-/**
- * The type Single location current weather requester.
- */
-public class SingleLocationCurrentWeatherRequesterImpl implements SingleLocationCurrentWeatherRequester {
- private final RequestUrlBuilder urlBuilder;
-
- /**
- * Instantiates a new Single location current weather requester.
- *
- * @param urlBuilder the url builder
- */
- public SingleLocationCurrentWeatherRequesterImpl(RequestUrlBuilder urlBuilder) {
- this.urlBuilder = urlBuilder;
- urlBuilder.append("weather");
- }
-
- public SingleResultCurrentWeatherRequestCustomizer byCityName(String cityName) {
- urlBuilder.addRequestParameter("q", cityName);
- return new SingleResultCurrentWeatherRequestCustomizerImpl(urlBuilder);
- }
-
- public SingleResultCurrentWeatherRequestCustomizer byCityName(String cityName, String countryCode) {
- urlBuilder.addRequestParameter("q", cityName + "," + countryCode);
- return new SingleResultCurrentWeatherRequestCustomizerImpl(urlBuilder);
- }
-
- @Override
- public SingleResultCurrentWeatherRequestCustomizer byCityName(String cityName, String stateCode, String countryCode) {
- urlBuilder.addRequestParameter("q", cityName + "," + stateCode + "," + countryCode);
- return new SingleResultCurrentWeatherRequestCustomizerImpl(urlBuilder);
- }
-
- public SingleResultCurrentWeatherRequestCustomizer byCityId(long cityId) {
- urlBuilder.addRequestParameter("id", cityId);
- return new SingleResultCurrentWeatherRequestCustomizerImpl(urlBuilder);
- }
-
- public SingleResultCurrentWeatherRequestCustomizer byCoordinate(Coordinate coordinate) {
- urlBuilder.addRequestParameter("lat", String.valueOf(coordinate.getLatitude()));
- urlBuilder.addRequestParameter("lon", String.valueOf(coordinate.getLongitude()));
- return new SingleResultCurrentWeatherRequestCustomizerImpl(urlBuilder);
- }
-
- public SingleResultCurrentWeatherRequestCustomizer byZipCodeAndCountry(String zipCode, String countryCode) {
- urlBuilder.addRequestParameter("zip", zipCode + "," + countryCode);
- return new SingleResultCurrentWeatherRequestCustomizerImpl(urlBuilder);
- }
-
- @Override
- public SingleResultCurrentWeatherRequestCustomizer byZipCodeInUSA(String zipCode) {
- urlBuilder.addRequestParameter("zip", zipCode);
- return new SingleResultCurrentWeatherRequestCustomizerImpl(urlBuilder);
- }
-}
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherAsyncRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherAsyncRequestTerminator.java
index 3c4cd61..bfb0136 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherAsyncRequestTerminator.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherAsyncRequestTerminator.java
@@ -22,26 +22,48 @@
package com.github.prominence.openweathermap.api.request.weather.single;
+import com.github.prominence.openweathermap.api.enums.ResponseType;
+import com.github.prominence.openweathermap.api.request.RequestSettings;
+import com.github.prominence.openweathermap.api.mapper.CurrentWeatherResponseMapper;
import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.request.AsyncRequestTerminator;
+import com.github.prominence.openweathermap.api.utils.RequestUtils;
import java.util.concurrent.CompletableFuture;
/**
- * The current weather async request terminator interface.
+ * The type Single result current weather async request terminator.
*/
-public interface SingleResultCurrentWeatherAsyncRequestTerminator extends AsyncRequestTerminator {
- /**
- * XML response format.
- *
- * @return the completable future
- */
- CompletableFuture asXML();
+public class SingleResultCurrentWeatherAsyncRequestTerminator {
+ private final RequestSettings requestSettings;
/**
- * HTML response format.
+ * Instantiates a new Single result current weather async request terminator.
*
- * @return the completable future
+ * @param requestSettings request settings object.
*/
- CompletableFuture asHTML();
+ SingleResultCurrentWeatherAsyncRequestTerminator(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ }
+
+ public CompletableFuture asJava() {
+ return CompletableFuture.supplyAsync(() -> new CurrentWeatherResponseMapper(requestSettings.getUnitSystem()).getSingle(getRawResponse()));
+ }
+
+ public CompletableFuture asJSON() {
+ return CompletableFuture.supplyAsync(this::getRawResponse);
+ }
+
+ public CompletableFuture asXML() {
+ requestSettings.setResponseType(ResponseType.XML);
+ return CompletableFuture.supplyAsync(this::getRawResponse);
+ }
+
+ public CompletableFuture asHTML() {
+ requestSettings.setResponseType(ResponseType.HTML);
+ return CompletableFuture.supplyAsync(this::getRawResponse);
+ }
+
+ private String getRawResponse() {
+ return RequestUtils.getResponse(requestSettings);
+ }
}
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherAsyncRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherAsyncRequestTerminatorImpl.java
deleted file mode 100644
index 88f39b2..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherAsyncRequestTerminatorImpl.java
+++ /dev/null
@@ -1,76 +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.weather.single;
-
-import com.github.prominence.openweathermap.api.request.RequestUrlBuilder;
-import com.github.prominence.openweathermap.api.request.weather.CurrentWeatherResponseMapper;
-import com.github.prominence.openweathermap.api.enums.UnitSystem;
-import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.utils.RequestUtils;
-
-import java.util.concurrent.CompletableFuture;
-
-/**
- * The type Single result current weather async request terminator.
- */
-public class SingleResultCurrentWeatherAsyncRequestTerminatorImpl implements SingleResultCurrentWeatherAsyncRequestTerminator {
- private final RequestUrlBuilder urlBuilder;
- private final UnitSystem unitSystem;
-
- /**
- * Instantiates a new Single result current weather async request terminator.
- *
- * @param urlBuilder the url builder
- * @param unitSystem the unit system
- */
- SingleResultCurrentWeatherAsyncRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) {
- this.urlBuilder = urlBuilder;
- this.unitSystem = unitSystem;
- }
-
- @Override
- public CompletableFuture asJava() {
- return CompletableFuture.supplyAsync(() -> new CurrentWeatherResponseMapper(unitSystem).getSingle(getRawResponse()));
- }
-
- @Override
- public CompletableFuture asJSON() {
- return CompletableFuture.supplyAsync(this::getRawResponse);
- }
-
- @Override
- public CompletableFuture asXML() {
- urlBuilder.addRequestParameter("mode", "xml");
- return CompletableFuture.supplyAsync(this::getRawResponse);
- }
-
- @Override
- public CompletableFuture asHTML() {
- urlBuilder.addRequestParameter("mode", "html");
- 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/weather/single/SingleResultCurrentWeatherRequestCustomizer.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestCustomizer.java
index 9661cf9..982ffe2 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestCustomizer.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestCustomizer.java
@@ -22,24 +22,40 @@
package com.github.prominence.openweathermap.api.request.weather.single;
-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 current weather request customizer interface.
+ * The type Single result current weather request customizer.
*/
-public interface SingleResultCurrentWeatherRequestCustomizer extends RequestCustomizer {
- /**
- * Retrieve current weather request terminator.
- *
- * @return the single result current weather request terminator
- */
- SingleResultCurrentWeatherRequestTerminator retrieve();
+public class SingleResultCurrentWeatherRequestCustomizer {
+ private final RequestSettings requestSettings;
/**
- * Retrieve current weather async request terminator.
+ * Instantiates a new Single result current weather request customizer.
*
- * @return the single result current weather async request terminator
+ * @param requestSettings request settings object.
*/
- SingleResultCurrentWeatherAsyncRequestTerminator retrieveAsync();
+ SingleResultCurrentWeatherRequestCustomizer(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ }
-}
+ public SingleResultCurrentWeatherRequestCustomizer language(Language language) {
+ requestSettings.setLanguage(language);
+ return this;
+ }
+
+ public SingleResultCurrentWeatherRequestCustomizer unitSystem(UnitSystem unitSystem) {
+ requestSettings.setUnitSystem(unitSystem);
+ return this;
+ }
+
+ public SingleResultCurrentWeatherRequestTerminator retrieve() {
+ return new SingleResultCurrentWeatherRequestTerminator(requestSettings);
+ }
+
+ public SingleResultCurrentWeatherAsyncRequestTerminator retrieveAsync() {
+ return new SingleResultCurrentWeatherAsyncRequestTerminator(requestSettings);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestCustomizerImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestCustomizerImpl.java
deleted file mode 100644
index 2734252..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestCustomizerImpl.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.weather.single;
-
-import com.github.prominence.openweathermap.api.request.RequestUrlBuilder;
-import com.github.prominence.openweathermap.api.enums.Language;
-import com.github.prominence.openweathermap.api.enums.UnitSystem;
-
-/**
- * The type Single result current weather request customizer.
- */
-public class SingleResultCurrentWeatherRequestCustomizerImpl implements SingleResultCurrentWeatherRequestCustomizer {
- private final RequestUrlBuilder urlBuilder;
-
- private Language language;
- private UnitSystem unitSystem = UnitSystem.STANDARD;
-
- /**
- * Instantiates a new Single result current weather request customizer.
- *
- * @param urlBuilder the url builder
- */
- SingleResultCurrentWeatherRequestCustomizerImpl(RequestUrlBuilder urlBuilder) {
- this.urlBuilder = urlBuilder;
- }
-
- @Override
- public SingleResultCurrentWeatherRequestCustomizer language(Language language) {
- this.language = language;
- return this;
- }
-
- @Override
- public SingleResultCurrentWeatherRequestCustomizer unitSystem(UnitSystem unitSystem) {
- this.unitSystem = unitSystem;
- return this;
- }
-
- @Override
- public SingleResultCurrentWeatherRequestTerminator retrieve() {
- urlBuilder.applyCustomization(language, unitSystem);
- return new SingleResultCurrentWeatherRequestTerminatorImpl(urlBuilder, unitSystem);
- }
-
- @Override
- public SingleResultCurrentWeatherAsyncRequestTerminator retrieveAsync() {
- urlBuilder.applyCustomization(language, unitSystem);
- return new SingleResultCurrentWeatherAsyncRequestTerminatorImpl(urlBuilder, unitSystem);
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestTerminator.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestTerminator.java
index 499091d..3fbc95c 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestTerminator.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestTerminator.java
@@ -22,24 +22,46 @@
package com.github.prominence.openweathermap.api.request.weather.single;
+import com.github.prominence.openweathermap.api.enums.ResponseType;
import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.request.RequestTerminator;
+import com.github.prominence.openweathermap.api.request.RequestSettings;
+import com.github.prominence.openweathermap.api.mapper.CurrentWeatherResponseMapper;
+import com.github.prominence.openweathermap.api.utils.RequestUtils;
/**
- * The current weather request terminator interface.
+ * The type Single result current weather request terminator.
*/
-public interface SingleResultCurrentWeatherRequestTerminator extends RequestTerminator {
- /**
- * XML response format.
- *
- * @return the XML string
- */
- String asXML();
+public class SingleResultCurrentWeatherRequestTerminator {
+ private final RequestSettings requestSettings;
/**
- * HTML response format.
+ * Instantiates a new Single result current weather request terminator.
*
- * @return the HTML string
+ * @param requestSettings request settings object.
*/
- String asHTML();
+ SingleResultCurrentWeatherRequestTerminator(RequestSettings requestSettings) {
+ this.requestSettings = requestSettings;
+ }
+
+ public Weather asJava() {
+ return new CurrentWeatherResponseMapper(requestSettings.getUnitSystem()).getSingle(asJSON());
+ }
+
+ public String asJSON() {
+ return getRawResponse();
+ }
+
+ public String asXML() {
+ requestSettings.setResponseType(ResponseType.XML);
+ return getRawResponse();
+ }
+
+ public String asHTML() {
+ requestSettings.setResponseType(ResponseType.HTML);
+ return getRawResponse();
+ }
+
+ private String getRawResponse() {
+ return RequestUtils.getResponse(requestSettings);
+ }
}
diff --git a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestTerminatorImpl.java b/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestTerminatorImpl.java
deleted file mode 100644
index 65be3ac..0000000
--- a/src/main/java/com/github/prominence/openweathermap/api/request/weather/single/SingleResultCurrentWeatherRequestTerminatorImpl.java
+++ /dev/null
@@ -1,74 +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.weather.single;
-
-import com.github.prominence.openweathermap.api.request.RequestUrlBuilder;
-import com.github.prominence.openweathermap.api.request.weather.CurrentWeatherResponseMapper;
-import com.github.prominence.openweathermap.api.enums.UnitSystem;
-import com.github.prominence.openweathermap.api.model.weather.Weather;
-import com.github.prominence.openweathermap.api.utils.RequestUtils;
-
-/**
- * The type Single result current weather request terminator.
- */
-public class SingleResultCurrentWeatherRequestTerminatorImpl implements SingleResultCurrentWeatherRequestTerminator {
- private final RequestUrlBuilder urlBuilder;
- private final UnitSystem unitSystem;
-
- /**
- * Instantiates a new Single result current weather request terminator.
- *
- * @param urlBuilder the url builder
- * @param unitSystem the unit system
- */
- SingleResultCurrentWeatherRequestTerminatorImpl(RequestUrlBuilder urlBuilder, UnitSystem unitSystem) {
- this.urlBuilder = urlBuilder;
- this.unitSystem = unitSystem;
- }
-
- @Override
- public Weather asJava() {
- return new CurrentWeatherResponseMapper(unitSystem).getSingle(asJSON());
- }
-
- @Override
- public String asJSON() {
- return getRawResponse();
- }
-
- @Override
- public String asXML() {
- urlBuilder.addRequestParameter("mode", "xml");
- return getRawResponse();
- }
-
- @Override
- public String asHTML() {
- urlBuilder.addRequestParameter("mode", "html");
- return getRawResponse();
- }
-
- private String getRawResponse() {
- return RequestUtils.getResponse(urlBuilder.buildUrl());
- }
-}
diff --git a/src/main/java/com/github/prominence/openweathermap/api/utils/RequestUtils.java b/src/main/java/com/github/prominence/openweathermap/api/utils/RequestUtils.java
index ea8cfe5..c20ec6d 100644
--- a/src/main/java/com/github/prominence/openweathermap/api/utils/RequestUtils.java
+++ b/src/main/java/com/github/prominence/openweathermap/api/utils/RequestUtils.java
@@ -22,8 +22,10 @@
package com.github.prominence.openweathermap.api.utils;
+import com.github.prominence.openweathermap.api.conf.TimeoutSettings;
import com.github.prominence.openweathermap.api.exception.NoDataFoundException;
import com.github.prominence.openweathermap.api.exception.InvalidAuthTokenException;
+import com.github.prominence.openweathermap.api.request.RequestSettings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,17 +37,32 @@ import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
+import java.util.stream.Collectors;
/**
* Utility class for API calls execution.
*/
public final class RequestUtils {
+ private static final String OWM_URL_BASE = "http://api.openweathermap.org/data/2.5/";
+
private static final Logger logger = LoggerFactory.getLogger(RequestUtils.class);
private RequestUtils() {
}
+ public static String getResponse(RequestSettings requestSettings) {
+ StringBuilder requestUrlBuilder = new StringBuilder(OWM_URL_BASE);
+ requestUrlBuilder.append(requestSettings.getUrlAppender());
+ requestUrlBuilder.append('?');
+ String parameters = requestSettings.getRequestParameters().entrySet().stream()
+ .map(entry -> entry.getKey() + "=" + entry.getValue())
+ .collect(Collectors.joining("&"));
+ requestUrlBuilder.append(parameters);
+
+ return getResponse(requestUrlBuilder.toString(), requestSettings.getTimeoutSettings());
+ }
+
/**
* Executes call to provided API url and retrieves response in String representation.
*
@@ -54,6 +71,18 @@ public final class RequestUtils {
* @throws IllegalArgumentException in case if provided parameter isn't a valid url for {@link URL} instance.
*/
public static String getResponse(String url) {
+ return getResponse(url, new TimeoutSettings());
+ }
+
+ /**
+ * Executes call to provided API url and retrieves response in String representation.
+ *
+ * @param url the url to make API request.
+ * @param timeoutSettings an object with timeout settings.
+ * @return response from the request in String representation.
+ * @throws IllegalArgumentException in case if provided parameter isn't a valid url for {@link URL} instance.
+ */
+ public static String getResponse(String url, TimeoutSettings timeoutSettings) {
URL requestUrl;
try {
requestUrl = new URL(url);
@@ -62,7 +91,7 @@ public final class RequestUtils {
throw new IllegalArgumentException(ex);
}
logger.debug("Executing OpenWeatherMap API request: " + url);
- final InputStream requestInputStream = executeRequest(requestUrl);
+ final InputStream requestInputStream = executeRequest(requestUrl, timeoutSettings);
return convertInputStreamToString(requestInputStream);
}
@@ -75,11 +104,20 @@ public final class RequestUtils {
* @throws InvalidAuthTokenException in case if authentication token wasn't set or requested functionality is not permitted for its subscription plan.
* @throws NoDataFoundException in case if there is no any data for requested location(s) or request is invalid.
*/
- private static InputStream executeRequest(URL requestUrl) {
+ private static InputStream executeRequest(URL requestUrl, TimeoutSettings timeoutSettings) {
InputStream resultStream;
try {
HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection();
+
+ if (timeoutSettings.getConnectionTimeout() != null) {
+ connection.setConnectTimeout(timeoutSettings.getConnectionTimeout());
+ }
+
+ if (timeoutSettings.getReadTimeout() != null) {
+ connection.setReadTimeout(timeoutSettings.getReadTimeout());
+ }
+
connection.setRequestMethod("GET");
switch (connection.getResponseCode()) {
diff --git a/src/test/java/com/github/prominence/openweathermap/api/model/onecall/current/MoonPhaseUnitTest.java b/src/test/java/com/github/prominence/openweathermap/api/model/onecall/current/MoonPhaseUnitTest.java
new file mode 100644
index 0000000..e8b0644
--- /dev/null
+++ b/src/test/java/com/github/prominence/openweathermap/api/model/onecall/current/MoonPhaseUnitTest.java
@@ -0,0 +1,100 @@
+/*
+ * 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
+ * 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.model.onecall.current;
+
+import com.github.prominence.openweathermap.api.enums.MoonType;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+public class MoonPhaseUnitTest {
+
+ @Test
+ public void getValue() {
+ final MoonPhase moonPhase = new MoonPhase(0.67);
+
+ assertEquals(0.67, moonPhase.getValue(), 0.000001);
+ }
+
+ @Test
+ public void getType() {
+ final MoonPhase newMoon1 = new MoonPhase(0d);
+ assertEquals(MoonType.NEW_MOON, newMoon1.getType());
+
+ final MoonPhase newMoon2 = new MoonPhase(1d);
+ assertEquals(MoonType.NEW_MOON, newMoon2.getType());
+
+ final MoonPhase firstQuarterMoon = new MoonPhase(0.25d);
+ assertEquals(MoonType.FIRST_QUARTER_MOON, firstQuarterMoon.getType());
+
+ final MoonPhase fullMoon = new MoonPhase(0.5d);
+ assertEquals(MoonType.FULL_MOON, fullMoon.getType());
+
+ final MoonPhase lastQuarterMoon = new MoonPhase(0.75d);
+ assertEquals(MoonType.LAST_QUARTER_MOON, lastQuarterMoon.getType());
+
+ final MoonPhase waxingCrescentMoon = new MoonPhase(0.1d);
+ assertEquals(MoonType.WAXING_CRESCENT, waxingCrescentMoon.getType());
+
+ final MoonPhase waxingGibbousMoon = new MoonPhase(0.4d);
+ assertEquals(MoonType.WAXING_GIBBOUS, waxingGibbousMoon.getType());
+
+ final MoonPhase waningGibbousMoon = new MoonPhase(0.623d);
+ assertEquals(MoonType.WANING_GIBBOUS, waningGibbousMoon.getType());
+
+ final MoonPhase waningCrescentMoon = new MoonPhase(0.9999d);
+ assertEquals(MoonType.WANING_CRESCENT, waningCrescentMoon.getType());
+ }
+
+ @Test
+ public void getEquals() {
+ final MoonPhase phase1 = new MoonPhase(0d);
+ final MoonPhase phase2 = new MoonPhase(0.5d);
+
+ assertNotEquals(phase1, phase2);
+
+ final MoonPhase phase3 = new MoonPhase(0d);
+
+ assertEquals(phase1, phase3);
+ }
+
+ @Test
+ public void getHashCode() {
+ final MoonPhase phase1 = new MoonPhase(0d);
+ final MoonPhase phase2 = new MoonPhase(0.5d);
+
+ assertNotEquals(phase1.hashCode(), phase2.hashCode());
+
+ final MoonPhase phase3 = new MoonPhase(0d);
+
+ assertEquals(phase1.hashCode(), phase3.hashCode());
+ }
+
+ @Test
+ public void getToString() {
+ final MoonPhase phase2 = new MoonPhase(0.5d);
+
+ assertEquals("FULL_MOON(0.5)", phase2.toString());
+ }
+}
diff --git a/src/test/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionResponseMapperUnitTest.java b/src/test/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionResponseMapperUnitTest.java
index b8c86b2..f065062 100644
--- a/src/test/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionResponseMapperUnitTest.java
+++ b/src/test/java/com/github/prominence/openweathermap/api/request/air/pollution/AirPollutionResponseMapperUnitTest.java
@@ -24,6 +24,7 @@
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 org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastResponseMapperUnitTest.java b/src/test/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastResponseMapperUnitTest.java
index 502198c..d8a6ce2 100644
--- a/src/test/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastResponseMapperUnitTest.java
+++ b/src/test/java/com/github/prominence/openweathermap/api/request/forecast/free/FiveDayThreeHourStepForecastResponseMapperUnitTest.java
@@ -23,6 +23,7 @@
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 org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherResponseMapperUnitTest.java b/src/test/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherResponseMapperUnitTest.java
index 5dab17b..d34b4ac 100644
--- a/src/test/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherResponseMapperUnitTest.java
+++ b/src/test/java/com/github/prominence/openweathermap/api/request/onecall/OneCallWeatherResponseMapperUnitTest.java
@@ -23,6 +23,7 @@
package com.github.prominence.openweathermap.api.request.onecall;
import com.github.prominence.openweathermap.api.enums.UnitSystem;
+import com.github.prominence.openweathermap.api.mapper.OneCallWeatherResponseMapper;
import com.github.prominence.openweathermap.api.model.onecall.current.CurrentWeatherData;
import com.github.prominence.openweathermap.api.model.onecall.historical.HistoricalWeatherData;
import org.junit.jupiter.api.Assertions;
diff --git a/src/test/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherResponseMapperUnitTest.java b/src/test/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherResponseMapperUnitTest.java
index fa44fcf..5fe0b22 100644
--- a/src/test/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherResponseMapperUnitTest.java
+++ b/src/test/java/com/github/prominence/openweathermap/api/request/weather/CurrentWeatherResponseMapperUnitTest.java
@@ -23,6 +23,7 @@
package com.github.prominence.openweathermap.api.request.weather;
import com.github.prominence.openweathermap.api.enums.UnitSystem;
+import com.github.prominence.openweathermap.api.mapper.CurrentWeatherResponseMapper;
import com.github.prominence.openweathermap.api.model.weather.Weather;
import org.junit.jupiter.api.Test;