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