From 0e90f5dcda3fdc4fe18d432064ea0468c28affba Mon Sep 17 00:00:00 2001 From: Ashutosh Kumar Singh Date: Tue, 1 Jul 2014 23:33:55 +0530 Subject: [PATCH] Fixed bug of wrong data and time and improved code formatting. --- .../java/api/owm/AbstractWeatherData.java | 531 +++++++++------ .../java/api/owm/CurrentWeatherData.java | 549 +++++++++------- .../java/api/owm/DailyForecastData.java | 602 ++++++++++------- .../java/api/owm/ForecastWeatherData.java | 622 ++++++++++-------- .../aksingh/java/api/owm/OpenWeatherMap.java | 257 ++++---- src/net/aksingh/java/api/owm/Tools.java | 136 ++-- 6 files changed, 1513 insertions(+), 1184 deletions(-) diff --git a/src/net/aksingh/java/api/owm/AbstractWeatherData.java b/src/net/aksingh/java/api/owm/AbstractWeatherData.java index bee14be..0b46a1c 100644 --- a/src/net/aksingh/java/api/owm/AbstractWeatherData.java +++ b/src/net/aksingh/java/api/owm/AbstractWeatherData.java @@ -25,59 +25,73 @@ import java.util.Date; import org.json.JSONObject; /** - * This class provides default implementations for {@link net.aksingh.java.api.owm.CurrentWeatherData} - * and {@link net.aksingh.java.api.owm.ForecastWeatherData} classes. - * Standard behaviors like the has and the get - * methods for information about weather or forecast (for example, - * temperature, pressure, weather, clouds, wind, etc.) are defined here. - * + * This class provides default implementations for + * {@link net.aksingh.java.api.owm.CurrentWeatherData} and + * {@link net.aksingh.java.api.owm.ForecastWeatherData} classes. Standard + * behaviors like the has and the get methods for + * information about weather or forecast (for example, temperature, pressure, + * weather, clouds, wind, etc.) are defined here. + *

* @author Ashutosh Kumar Singh * @version 2013/07/26 * @since 2.5.0.1 */ abstract public class AbstractWeatherData { - /** Key for JSON object - Clouds */ + + /** + * Key for JSON object - Clouds + */ protected final String JSON_CLOUDS = "clouds"; - /** Key for JSON object - Coordinates (Geographic coordinates) */ + /** + * Key for JSON object - Coordinates (Geographic coordinates) + */ protected final String JSON_COORD = "coord"; - /** Key for JSON object - Main (Temperature, pressure, etc.) */ + /** + * Key for JSON object - Main (Temperature, pressure, etc.) + */ protected final String JSON_MAIN = "main"; - /** Key for JSON array - Weather (Weather name, description, etc.) */ + /** + * Key for JSON array - Weather (Weather name, description, etc.) + */ protected final String JSON_WEATHER = "weather"; - /** Key for JSON object - Wind */ + /** + * Key for JSON object - Wind + */ protected final String JSON_WIND = "wind"; - - + /* ************************ * Defining sub-classes ************************ */ - /** * This class provides default implementations for Clouds. - * Standard behaviors like the has and the get - * methods for information about clouds (for example, percentage of - * clouds, etc.) are defined here. - * + * Standard behaviors like the has and the get + * methods for information about clouds (for example, percentage of clouds, + * etc.) are defined here. + *

* @author Ashutosh Kumar Singh * @version 2013/07/27 * @since 2.5.0.1 */ abstract public static class Clouds { + /** - * Key for JSON variable Clouds -> All - * (percentage of all clouds) + * Key for JSON variable Clouds -> All (percentage of all + * clouds) */ private final String JSON_CLOUDS_ALL = "all"; - - /** Percentage of all clouds */ + + /** + * Percentage of all clouds + */ private final float percentOfClouds; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -86,61 +100,73 @@ abstract public class AbstractWeatherData { public Clouds() { this.percentOfClouds = Float.NaN; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about clouds */ public Clouds(JSONObject jsonObj) { this.percentOfClouds = (float) jsonObj.optDouble(this.JSON_CLOUDS_ALL, Double.NaN); } - + /** * Tells if the data for percentage of all clouds is available or not. - * @return true if data available, otherwise false + *

+ * @return true if data available, otherwise + * false */ public boolean hasPercentageOfClouds() { return (this.percentOfClouds != Float.NaN); } - + /** * Returns data for percentage of all clouds. - * @return Percentage of all clouds if available, - * otherwise Float.NaN, i.e., Not a Number. + *

+ * @return Percentage of all clouds if available, otherwise + * Float.NaN, i.e., Not a Number. */ public float getPercentageOfClouds() { return this.percentOfClouds; } } - - + /** * This class provides default implementations for Coord. - * Standard behaviors like the has and the get - * methods for information about geographic coordinates (latitude - * and longitude) are defined here. - * + * Standard behaviors like the has and the get + * methods for information about geographic coordinates (latitude and + * longitude) are defined here. + *

* @author Ashutosh Kumar Singh * @version 2013/07/28 */ abstract public static class Coord { - /** Key for JSON variable Coord -> Latitude */ + + /** + * Key for JSON variable Coord -> Latitude + */ private final String JSON_COORD_LATITUDE = "lat"; - /** Key for JSON variable Coord -> Longitude */ + /** + * Key for JSON variable Coord -> Longitude + */ private final String JSON_COORD_LONGITUDE = "lon"; - - /** Latitude */ + + /** + * Latitude + */ private final float lat; - /** Longitude */ + /** + * Longitude + */ private final float lon; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -150,92 +176,119 @@ abstract public class AbstractWeatherData { this.lat = Float.NaN; this.lon = Float.NaN; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about coordinates */ public Coord(JSONObject jsonObj) { this.lat = (float) jsonObj.optDouble(this.JSON_COORD_LATITUDE, Double.NaN); this.lon = (float) jsonObj.optDouble(this.JSON_COORD_LONGITUDE, Double.NaN); } - + /** * Tells if the data for latitude of the city is available or not. - * @return true if data available, otherwise false + *

+ * @return true if data available, otherwise + * false */ public boolean hasLatitude() { return (this.lat != Float.NaN); } - + /** * Tells if the data for longitude of the city is available or not. - * @return true if data available, otherwise false + *

+ * @return true if data available, otherwise + * false */ public boolean hasLongitude() { return (this.lon != Float.NaN); } - + /** * Returns data for latitude of the city. - * @return Latitude of the city if available, - * otherwise Float.NaN, i.e., Not a Number. + *

+ * @return Latitude of the city if available, otherwise + * Float.NaN, i.e., Not a Number. */ public float getLatitude() { return this.lat; } - + /** * Returns data for longitude of the city. - * @return Longitude of the city if available, - * otherwise Float.NaN, i.e., Not a Number. + *

+ * @return Longitude of the city if available, otherwise + * Float.NaN, i.e., Not a Number. */ public float getLongitude() { return this.lon; } } - - + /** * This class provides default implementations for Main. - * Standard behaviors like the has and the get - * methods for information about main weather elements (for example, + * Standard behaviors like the has and the get + * methods for information about main weather elements (for example, * temperature, pressure, humidity, etc.) are defined here. - * + *

* @author Ashutosh Kumar Singh * @version 2013/07/28 * @since 2.5.0.1 */ abstract public static class Main { - /** Key for JSON variable Main -> Temperature */ + + /** + * Key for JSON variable Main -> Temperature + */ private final String JSON_MAIN_TEMP = "temp"; - /** Key for JSON variable Main -> Minimum temperature */ + /** + * Key for JSON variable Main -> Minimum temperature + */ private final String JSON_MAIN_TEMP_MIN = "temp_min"; - /** Key for JSON variable Main -> Maximum temperature */ + /** + * Key for JSON variable Main -> Maximum temperature + */ private final String JSON_MAIN_TEMP_MAX = "temp_max"; - /** Key for JSON variable Main -> Pressure */ + /** + * Key for JSON variable Main -> Pressure + */ private final String JSON_MAIN_PRESSURE = "pressure"; - /** Key for JSON variable Main -> Humidity */ + /** + * Key for JSON variable Main -> Humidity + */ private final String JSON_MAIN_HUMIDITY = "humidity"; - - /** Temperature */ + + /** + * Temperature + */ private final float temp; - /** Minimum temperature */ + /** + * Minimum temperature + */ private final float minTemp; - /** Maximum temperature */ + /** + * Maximum temperature + */ private final float maxTemp; - /** Pressure */ + /** + * Pressure + */ private final float pressure; - /** Humidity */ + /** + * Humidity + */ private final float humidity; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -248,13 +301,13 @@ abstract public class AbstractWeatherData { this.pressure = Float.NaN; this.humidity = Float.NaN; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * - * @param jsonObj JSON object containing data about main weather + *

+ * @param jsonObj JSON object containing data about main weather * elements. For example, temperature, pressure, etc. */ public Main(JSONObject jsonObj) { @@ -264,127 +317,162 @@ abstract public class AbstractWeatherData { this.pressure = (float) jsonObj.optDouble(this.JSON_MAIN_PRESSURE, Double.NaN); this.humidity = (float) jsonObj.optDouble(this.JSON_MAIN_HUMIDITY, Double.NaN); } - + /** * Tells if the data for temperature of the city is available or not. - * @return true if data available, otherwise false + *

+ * @return true if data available, otherwise + * false */ public boolean hasTemperature() { return (this.temp != Float.NaN); } - + /** - * Tells if the data for minimum temperature of the city is available or not. - * @return true if data available, otherwise false + * Tells if the data for minimum temperature of the city is available or + * not. + *

+ * @return true if data available, otherwise + * false */ public boolean hasMinTemperature() { return (this.minTemp != Float.NaN); } - + /** - * Tells if the data for maximum temperature of the city is available or not. - * @return true if data available, otherwise false + * Tells if the data for maximum temperature of the city is available or + * not. + *

+ * @return true if data available, otherwise + * false */ public boolean hasMaxTemperature() { return (this.maxTemp != Float.NaN); } - + /** * Tells if the data for pressure of the city is available or not. - * @return true if data available, otherwise false + *

+ * @return true if data available, otherwise + * false */ public boolean hasPressure() { return (this.pressure != Float.NaN); } - + /** * Tells if the data for humidity of the city is available or not. - * @return true if data available, otherwise false + *

+ * @return true if data available, otherwise + * false */ public boolean hasHumidity() { return (this.humidity != Float.NaN); } - + /** * Returns data for temperature of the city. - * @return Temperature of the city if available, - * otherwise Float.NaN, i.e., Not a Number. + *

+ * @return Temperature of the city if available, otherwise + * Float.NaN, i.e., Not a Number. */ public float getTemperature() { return this.temp; } - + /** * Returns data for minimum temperature of the city. - * @return Minimum temperature of the city if available, - * otherwise Float.NaN, i.e., Not a Number. + *

+ * @return Minimum temperature of the city if available, otherwise + * Float.NaN, i.e., Not a Number. */ public float getMinTemperature() { return this.minTemp; } - + /** * Returns data for maximum temperature of the city. - * @return Maximum temperature of the city if available, - * otherwise Float.NaN, i.e., Not a Number. + *

+ * @return Maximum temperature of the city if available, otherwise + * Float.NaN, i.e., Not a Number. */ public float getMaxTemperature() { return this.maxTemp; } - + /** * Returns data for pressure of the city. - * @return Pressure of the city if available, - * otherwise Float.NaN, i.e., Not a Number. + *

+ * @return Pressure of the city if available, otherwise + * Float.NaN, i.e., Not a Number. */ public float getPressure() { return this.pressure; } - + /** * Returns data for humidity of the city. - * @return Humidity of the city if available, - * otherwise Float.NaN, i.e., Not a Number. + *

+ * @return Humidity of the city if available, otherwise + * Float.NaN, i.e., Not a Number. */ public float getHumidity() { return this.humidity; } - } - - + } + /** * This class provides default implementations for Weather. - * Standard behaviors like the has and the get - * methods for information about weather (for example, id, name, + * Standard behaviors like the has and the get + * methods for information about weather (for example, id, name, * description, icon, etc.) are defined here. - * + *

* @author Ashutosh Kumar Singh * @version 2013/07/28 * @since 2.5.0.1 */ abstract public static class Weather { - /** Key for JSON variable in array Weather -> ID */ + + /** + * Key for JSON variable in array Weather -> ID + */ private final String JSON_WEATHER_ID = "id"; - /** Key for JSON variable in array Weather -> Main (name of weather) */ + /** + * Key for JSON variable in array + * Weather -> Main (name of weather) + */ private final String JSON_WEATHER_MAIN = "main"; - /** Key for JSON variable Weather -> Description */ + /** + * Key for JSON variable Weather -> Description + */ private final String JSON_WEATHER_DESCRIPTION = "description"; - /** Key for JSON variable in array Weather -> Icon */ + /** + * Key for JSON variable in array Weather -> Icon + */ private final String JSON_WEATHER_ICON = "icon"; - - /** Weather ID */ + + /** + * Weather ID + */ private final int id; - /** Weather name */ + /** + * Weather name + */ private final String name; - /** Weather description */ + /** + * Weather description + */ private final String description; - /** Weather icon */ + /** + * Weather icon + */ private final String icon; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -396,13 +484,14 @@ abstract public class AbstractWeatherData { this.description = null; this.icon = null; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * - * @param jsonObj JSON object containing data about weather id, name, etc. + *

+ * @param jsonObj JSON object containing data about weather id, name, + * etc. */ public Weather(JSONObject jsonObj) { this.id = jsonObj.optInt(this.JSON_WEATHER_ID, Integer.MIN_VALUE); @@ -410,102 +499,123 @@ abstract public class AbstractWeatherData { this.description = jsonObj.optString(this.JSON_WEATHER_DESCRIPTION, null); this.icon = jsonObj.optString(this.JSON_WEATHER_ICON, null); } - + /** * Tells if the data for weather's code is available or not. - * @return true if data available, otherwise false + *

+ * @return true if data available, otherwise + * false */ public boolean hasWeatherCode() { return (this.id != Integer.MIN_VALUE); } - + /** * Tells if the data for weather's name is available or not. - * @return true if data available, otherwise false + *

+ * @return true if data available, otherwise + * false */ public boolean hasWeatherName() { return (this.name != null); } - + /** * Tells if the data for weather's description is available or not. - * @return true if data available, otherwise false + *

+ * @return true if data available, otherwise + * false */ public boolean hasWeatherDescription() { return (this.description != null); } - + /** * Tells if the data for name of weather's icon is available or not. - * @return true if data available, otherwise false + *

+ * @return true if data available, otherwise + * false */ public boolean hasWeatherIconName() { return (this.icon != null); } - + /** * Returns data for code for weather of the city. - * @return Code for weather of the city if available, - * otherwise Integer.MIN_VALUE + *

+ * @return Code for weather of the city if available, otherwise + * Integer.MIN_VALUE */ public int getWeatherCode() { return this.id; } - + /** * Returns data for name for weather of the city. - * @return Name for weather of the city if available, - * otherwise null + *

+ * @return Name for weather of the city if available, otherwise + * null */ public String getWeatherName() { return this.name; } - + /** * Returns data for description for weather of the city. - * @return Description for weather of the city if available, - * otherwise null + *

+ * @return Description for weather of the city if available, otherwise + * null */ public String getWeatherDescription() { return this.description; } - + /** * Returns data for name of icon for weather of the city. - * @return Name of icon for weather of the city if available, - * otherwise null + *

+ * @return Name of icon for weather of the city if available, otherwise + * null */ public String getWeatherIconName() { return this.icon; } } - - + /** * This class provides default implementations for Wind. - * Standard behaviors like the has and the get - * methods for information about wind (for example, speed, degree, - * etc.) are defined here. - * + * Standard behaviors like the has and the get + * methods for information about wind (for example, speed, degree, etc.) are + * defined here. + *

* @author Ashutosh Kumar Singh * @version 2013/07/28 * @since 2.5.0.1 */ abstract public static class Wind { - /** Key for JSON variable Wind -> Speed */ + + /** + * Key for JSON variable Wind -> Speed + */ private final String JSON_WIND_SPEED = "speed"; - /** Key for JSON variable Wind -> Degree */ + /** + * Key for JSON variable Wind -> Degree + */ private final String JSON_WIND_DEGREE = "deg"; - - /** Wind speed */ + + /** + * Wind speed + */ private final float speed; - /** Wind degree (direction of wind) */ + /** + * Wind degree (direction of wind) + */ private final float degree; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -515,75 +625,82 @@ abstract public class AbstractWeatherData { this.speed = Float.NaN; this.degree = Float.NaN; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about wind */ public Wind(JSONObject jsonObj) { this.speed = (float) jsonObj.optDouble(this.JSON_WIND_SPEED, Double.NaN); this.degree = (float) jsonObj.optDouble(this.JSON_WIND_DEGREE, Double.NaN); } - + /** * Tells if the data for speed of wind in the city is available or not. - * @return true if data available, otherwise false + *

+ * @return true if data available, otherwise + * false */ public boolean hasWindSpeed() { return (this.speed != Float.NaN); } - + /** - * Tells if the data for degree (degree gives direction) of wind - * in the city is available or not. - * @return true if data available, otherwise false + * Tells if the data for degree (degree gives direction) of wind in the + * city is available or not. + *

+ * @return true if data available, otherwise + * false */ public boolean hasWindDegree() { return (this.hasWindSpeed() && (this.degree != Float.NaN)); } - + /** * Returns data for speed of wind in the city. - * @return Speed of wind in the city if available, - * otherwise Float.NaN, i.e., Not a Number. + *

+ * @return Speed of wind in the city if available, otherwise + * Float.NaN, i.e., Not a Number. */ public float getWindSpeed() { return this.speed; } - + /** * Returns data for degree of wind in the city. - * @return Degree of wind in the city if available, - * otherwise Float.NaN, i.e., Not a Number. + *

+ * @return Degree of wind in the city if available, otherwise + * Float.NaN, i.e., Not a Number. */ public float getWindDegree() { return this.degree; } } - - + /* *********************** * Declaring this class *********************** */ - - /** Key for JSON variable Date-Time (date & time of the weather) */ - private final String JSON_DATE_TIME = "dt"; - /** - * Date and time of the weather. This is answer for the question that - * when is/will be this weather. + * Key for JSON variable Date-Time (date & time of the weather) + */ + private final String JSON_DATE_TIME = "dt"; + + /** + * Date and time of the weather. This is answer for the question that when + * is/will be this weather. */ private final Date dateTime; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -592,45 +709,47 @@ abstract public class AbstractWeatherData { public AbstractWeatherData() { this.dateTime = null; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing weather data */ public AbstractWeatherData(JSONObject jsonObj) { // getting seconds from the data long sec = (jsonObj != null) ? jsonObj.optLong(this.JSON_DATE_TIME, Long.MIN_VALUE) : Long.MIN_VALUE; - + // converting seconds to Date object if (sec != Long.MIN_VALUE) { /* - @bugfix It always return "Sat Jan 17 04:10:42 CET 1970" - Issue: #3 given at http://code.aksingh.net/owm-japis/issue/3/problem-with-datetime - Incorrect: this.dateTime = new Date(sec); - Correct: this.dateTime = new Date(sec * 1000); - Reason: Date requires milliseconds but previously, seconds were provided. - */ + @bugfix It always return "Sat Jan 17 04:10:42 CET 1970" + Issue: #3 given at http://code.aksingh.net/owm-japis/issue/3/problem-with-datetime + Incorrect: this.dateTime = new Date(sec); + Correct: this.dateTime = new Date(sec * 1000); + Reason: Date requires milliseconds but previously, seconds were provided. + */ this.dateTime = new Date(sec * 1000); } else { this.dateTime = null; } } - + /** * Tells if the data for date and time of this weather is available or not. + *

* @return true if data available, otherwise false */ public boolean hasDateTime() { return (this.dateTime != null); } - + /** * Returns data for date and time of this weather. - * @return Date and time (in object of {@link java.util.Date}) if available, - * otherwise null + *

+ * @return Date and time (in object of {@link java.util.Date}) if available, + * otherwise null */ public Date getDateTime() { return this.dateTime; diff --git a/src/net/aksingh/java/api/owm/CurrentWeatherData.java b/src/net/aksingh/java/api/owm/CurrentWeatherData.java index 3cf2701..0eecf2c 100644 --- a/src/net/aksingh/java/api/owm/CurrentWeatherData.java +++ b/src/net/aksingh/java/api/owm/CurrentWeatherData.java @@ -29,68 +29,73 @@ import org.json.JSONArray; import org.json.JSONObject; /** - * Parses current weather data (from the JSON data) and provides methods - * to get/access the information about current weather. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per - * following basis:
+ * Parses current weather data (from the JSON data) and provides methods to + * get/access the information about current weather. This class provides + * has and get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., if + * the data was available (successfully downloaded) and was parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data exists, + * otherwise get methods will give value as per following + * basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public class CurrentWeatherData extends AbstractWeatherData { - /** Key for JSON object - Rain */ + + /** + * Key for JSON object - Rain + */ private final String JSON_RAIN = "rain"; - /** Key for JSON object - Sys */ + /** + * Key for JSON object - Sys + */ private final String JSON_SYS = "sys"; - - + /* ************************ * Declaring sub-classes ************************ */ - /** - * Parses data about clouds (from the JSON data) and provides methods - * to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about clouds (from the JSON data) and provides methods to + * get/access the information. This class provides has and + * get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., + * if the data was available (successfully downloaded) and was parsed + * correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Clouds extends AbstractWeatherData.Clouds { - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -99,48 +104,49 @@ public class CurrentWeatherData extends AbstractWeatherData { public Clouds() { super(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about clouds */ public Clouds(JSONObject jsonObj) { super(jsonObj); } } - - + /** - * Parses data about geographic coordinates (from the JSON data) - * and provides methods to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about geographic coordinates (from the JSON data) and + * provides methods to get/access the information. This class provides + * has and get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., + * if the data was available (successfully downloaded) and was parsed + * correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Coord extends AbstractWeatherData.Coord { - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -149,48 +155,49 @@ public class CurrentWeatherData extends AbstractWeatherData { public Coord() { super(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about coordinates */ public Coord(JSONObject jsonObj) { super(jsonObj); } } - - + /** - * Parses data about main weather elements (from the JSON data) and - * provides methods to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about main weather elements (from the JSON data) and provides + * methods to get/access the information. This class provides + * has and get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., + * if the data was available (successfully downloaded) and was parsed + * correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Main extends AbstractWeatherData.Main { - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -199,54 +206,60 @@ public class CurrentWeatherData extends AbstractWeatherData { public Main() { super(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * - * @param jsonObj JSON object containing data about main - * weather elements (temperature, pressure, etc.) + *

+ * @param jsonObj JSON object containing data about main weather + * elements (temperature, pressure, etc.) */ public Main(JSONObject jsonObj) { super(jsonObj); } } - - + /** - * Parses data about rain (from the JSON data) and provides methods - * to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about rain (from the JSON data) and provides methods to + * get/access the information. This class provides has and + * get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., + * if the data was available (successfully downloaded) and was parsed + * correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Rain { - /** Key for JSON variable Rain -> Rain per 3 hours */ + + /** + * Key for JSON variable Rain -> Rain per 3 hours + */ private final String JSON_RAIN_3HOURS = "3h"; - - /** Rain per 3 hours */ + + /** + * Rain per 3 hours + */ private final float rain3h; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -255,69 +268,83 @@ public class CurrentWeatherData extends AbstractWeatherData { public Rain() { this.rain3h = Float.NaN; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about rain */ public Rain(JSONObject jsonObj) { this.rain3h = (float) jsonObj.optDouble(this.JSON_RAIN_3HOURS, Double.NaN); } - + public boolean hasRain3Hours() { return (this.rain3h != Float.NaN); } - + public float getRain3Hours() { return this.rain3h; } } - - + /** - * Parses data about country, sunrise, and sunset (from the JSON data) - * and provides methods to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about country, sunrise, and sunset (from the JSON data) and + * provides methods to get/access the information. This class provides + * has and get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., + * if the data was available (successfully downloaded) and was parsed + * correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Sys { - /** Key for JSON variable Sys -> Country */ + + /** + * Key for JSON variable Sys -> Country + */ private final String JSON_SYS_COUNTRY_CODE = "country"; - /** Key for JSON variable Sys -> Sunrise */ + /** + * Key for JSON variable Sys -> Sunrise + */ private final String JSON_SYS_SUNRISE = "sunrise"; - /** Key for JSON variable Sys -> Sunset */ + /** + * Key for JSON variable Sys -> Sunset + */ private final String JSON_SYS_SUNSET = "sunset"; - - /** Country code for the city */ + + /** + * Country code for the city + */ private final String countryCode; - /** Sunrise time */ + /** + * Sunrise time + */ private final Date sunrise; - /** Sunset time */ + /** + * Sunset time + */ private final Date sunset; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -328,326 +355,364 @@ public class CurrentWeatherData extends AbstractWeatherData { this.sunrise = null; this.sunset = null; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * - * @param jsonObj JSON object containing data about country, sunrise, + *

+ * @param jsonObj JSON object containing data about country, sunrise, * and sunset. */ public Sys(JSONObject jsonObj) { this.countryCode = jsonObj.optString(this.JSON_SYS_COUNTRY_CODE, null); - + long sr_secs = jsonObj.optLong(this.JSON_SYS_SUNRISE, Long.MIN_VALUE); if (sr_secs != Long.MIN_VALUE) { - this.sunrise = new Date(sr_secs); + /* + @bugfix Incorrect date and time + Issue: #3 given at http://code.aksingh.net/owm-japis/issue/3/problem-with-datetime + Incorrect: this.sunrise = new Date(sr_secs); + Correct: this.sunrise = new Date(sr_secs * 1000); + Reason: Date requires milliseconds but previously, seconds were provided. + */ + this.sunrise = new Date(sr_secs * 1000); } else { this.sunrise = null; } - + long ss_secs = jsonObj.optLong(this.JSON_SYS_SUNSET, Long.MIN_VALUE); if (ss_secs != Long.MIN_VALUE) { - this.sunset = new Date(ss_secs); + /* + @bugfix Incorrect date and time + Issue: #3 given at http://code.aksingh.net/owm-japis/issue/3/problem-with-datetime + Incorrect: this.sunrise = new Date(ss_secs); + Correct: this.sunrise = new Date(ss_secs * 1000); + Reason: Date requires milliseconds but previously, seconds were provided. + */ + this.sunset = new Date(ss_secs * 1000); } else { this.sunset = null; } } - + public boolean hasCountryCode() { return (this.countryCode != null); } - + public boolean hasSunriseTime() { return (this.sunrise != null); } - + public boolean hasSunsetTime() { return (this.sunset != null); } - + public String getCountryCode() { return this.countryCode; } - + public Date getSunriseTime() { return this.sunrise; } - + public Date getSunsetTime() { return this.sunset; } } - - + /** - * Parses data about weather code, name, etc. (from the JSON data) - * and provides methods to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about weather code, name, etc. (from the JSON data) and + * provides methods to get/access the information. This class provides + * has and get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., + * if the data was available (successfully downloaded) and was parsed + * correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Weather extends AbstractWeatherData.Weather { - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
*/ - public Weather () { + public Weather() { super(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * - * @param jsonObj JSON object containing data about weather id, name, etc. + *

+ * @param jsonObj JSON object containing data about weather id, name, + * etc. */ - public Weather (JSONObject jsonObj) { + public Weather(JSONObject jsonObj) { super(jsonObj); } } - - + /** - * Parses data about winds (from the JSON data) and provides methods - * to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about winds (from the JSON data) and provides methods to + * get/access the information. This class provides has and + * get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., + * if the data was available (successfully downloaded) and was parsed + * correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Wind extends AbstractWeatherData.Wind { - /** Key for JSON variable Wind -> Gust */ + + /** + * Key for JSON variable Wind -> Gust + */ private final String JSON_WIND_GUST = "gust"; - - /** Wind gust */ + + /** + * Wind gust + */ private final float gust; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
*/ - public Wind () { - super (); - + public Wind() { + super(); + this.gust = Float.NaN; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about wind */ - public Wind (JSONObject jsonObj) { - super (jsonObj); - + public Wind(JSONObject jsonObj) { + super(jsonObj); + this.gust = (float) jsonObj.optDouble(this.JSON_WIND_GUST, Double.NaN); } - + public boolean hasWindGust() { return (this.gust != Float.NaN); } - + public float getWindGust() { return this.gust; } } - - + /* *********************** * Declaring this class *********************** */ - - /** Key for JSON variable Base */ + /** + * Key for JSON variable Base + */ private final String JSON_BASE = "base"; - /** Key for JSON variable City code (ID) */ + /** + * Key for JSON variable City code (ID) + */ private final String JSON_CITY_ID = "id"; - /** Key for JSON variable City name */ + /** + * Key for JSON variable City name + */ private final String JSON_CITY_NAME = "name"; - /** Key for JSON variable Response code */ + /** + * Key for JSON variable Response code + */ private final String JSON_RESPONSE_CODE = "cod"; - - /** Base */ + + /** + * Base + */ private final String base; - /** City code (ID) */ + /** + * City code (ID) + */ private final long cityID; - /** City name */ + /** + * City name + */ private final String cityName; - /** Response code */ + /** + * Response code + */ private final int responseCode; - + private final Clouds clouds; private final Coord coord; private final Main main; private final Rain rain; private final Sys sys; private final Wind wind; - - /** List of weather information (code, name, etc.) */ + + /** + * List of weather information (code, name, etc.) + */ private final List weatherList; - /** Count (number) of elements in list of weather information */ + /** + * Count (number) of elements in list of weather information + */ private final int weatherListCount; - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing current weather data */ public CurrentWeatherData(JSONObject jsonObj) { super(jsonObj); - + this.base = (jsonObj != null) ? jsonObj.optString(this.JSON_BASE, null) : null; this.cityID = (jsonObj != null) ? jsonObj.optLong(this.JSON_CITY_ID, Long.MIN_VALUE) : Long.MIN_VALUE; this.cityName = (jsonObj != null) ? jsonObj.optString(this.JSON_CITY_NAME, null) : null; this.responseCode = (jsonObj != null) ? jsonObj.optInt(this.JSON_RESPONSE_CODE, Integer.MIN_VALUE) : Integer.MIN_VALUE; - + JSONObject jsonObjClouds = (jsonObj != null) ? jsonObj.optJSONObject(this.JSON_CLOUDS) : null; this.clouds = (jsonObjClouds != null) ? new Clouds(jsonObjClouds) : new Clouds(); - + JSONObject jsonObjCoord = (jsonObj != null) ? jsonObj.optJSONObject(this.JSON_COORD) : null; this.coord = (jsonObjCoord != null) ? new Coord(jsonObjCoord) : new Coord(); - + JSONObject jsonObjMain = (jsonObj != null) ? jsonObj.optJSONObject(this.JSON_MAIN) : null; this.main = (jsonObjMain != null) ? new Main(jsonObjMain) : new Main(); - + JSONObject jsonObjRain = (jsonObj != null) ? jsonObj.optJSONObject(this.JSON_RAIN) : null; this.rain = (jsonObjRain != null) ? new Rain(jsonObjRain) : new Rain(); - + JSONObject jsonObjSys = (jsonObj != null) ? jsonObj.optJSONObject(this.JSON_SYS) : null; this.sys = (jsonObjSys != null) ? new Sys(jsonObjSys) : new Sys(); - + JSONArray jsonArrWeather = (jsonObj != null) ? jsonObj.optJSONArray(this.JSON_WEATHER) : null; this.weatherList = (jsonArrWeather != null) ? new ArrayList(jsonArrWeather.length()) : Collections.EMPTY_LIST; if (this.weatherList != Collections.EMPTY_LIST) { for (int i = 0; i < jsonArrWeather.length(); i++) { - JSONObject jsonObjWeather = jsonArrWeather.optJSONObject (i); + JSONObject jsonObjWeather = jsonArrWeather.optJSONObject(i); if (jsonObjWeather != null) { this.weatherList.add(new Weather(jsonObjWeather)); } } } this.weatherListCount = this.weatherList.size(); - + JSONObject jsonObjWind = (jsonObj != null) ? jsonObj.optJSONObject(this.JSON_WIND) : null; this.wind = (jsonObjWind != null) ? new Wind(jsonObjWind) : new Wind(); } - + public boolean hasBaseStation() { return (this.base != null); } - + public boolean hasCityCode() { return (this.cityID != Long.MIN_VALUE); } - + public boolean hasCityName() { return (this.cityName != null); } - + public boolean hasResponseCode() { return (this.responseCode != Integer.MIN_VALUE); } - + public String getBaseStation() { return this.base; } - + public long getCityCode() { return this.cityID; } - + public String getCityName() { return this.cityName; } - + public int getResponseCode() { return this.responseCode; } - + // Objects - public Clouds getClouds_Object() { return this.clouds; } - + public Coord getCoordinates_Object() { return this.coord; } - + public Main getMainData_Object() { return this.main; } - + public Rain getRain_Object() { return this.rain; } - + public Sys getSysData_Object() { return this.sys; } - + public Wind getWind_Object() { return this.wind; } - + // Lists - public boolean hasWeather_List() { return (this.weatherListCount != 0); } - + public int getWeather_List_Count() { return this.weatherListCount; } - + public List getWeather_List() { return this.weatherList; } diff --git a/src/net/aksingh/java/api/owm/DailyForecastData.java b/src/net/aksingh/java/api/owm/DailyForecastData.java index 140990c..8acdf2e 100644 --- a/src/net/aksingh/java/api/owm/DailyForecastData.java +++ b/src/net/aksingh/java/api/owm/DailyForecastData.java @@ -28,97 +28,107 @@ import org.json.JSONArray; import org.json.JSONObject; /** - * Parses daily forecast data (from the JSON data) and provides methods - * to get/access the information about daily forecasted weather. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per - * following basis:
+ * Parses daily forecast data (from the JSON data) and provides methods to + * get/access the information about daily forecasted weather. This class + * provides has and get methods to access the + * information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., if + * the data was available (successfully downloaded) and was parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data exists, + * otherwise get methods will give value as per following + * basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Objects: Data initialized with default/non-parameterized constructor
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public class DailyForecastData { - /** Key for JSON object - City */ + + /** + * Key for JSON object - City + */ private final String JSON_CITY = "city"; - /** Key for JSON object - List of forecasts */ + /** + * Key for JSON object - List of forecasts + */ private final String JSON_FORECAST_LIST = "list"; - - + /* ************************ * Declaring sub-classes ************************ */ - /** - * Parses data about city (from the JSON data) - * and provides methods to get/access the information. - * For example, city name, coordinates, country name, population, etc. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about city (from the JSON data) and provides methods to + * get/access the information. For example, city name, coordinates, country + * name, population, etc. This class provides has and + * get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., + * if the data was available (successfully downloaded) and was parsed + * correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class City { - /** Key for JSON object - Coordinates */ - private final String JSON_CITY_COORD = "coord"; - - + /** - * Parses data about geographic coordinates (from the JSON data) - * and provides methods to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Key for JSON object - Coordinates + */ + private final String JSON_CITY_COORD = "coord"; + + /** + * Parses data about geographic coordinates (from the JSON data) and + * provides methods to get/access the information. This class provides + * has and get methods to access the + * information. + *

+ *

+ * has methods can be used to check if the data exists, + * i.e., if the data was available (successfully downloaded) and was + * parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Coord extends AbstractWeatherData.Coord { - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -127,44 +137,60 @@ public class DailyForecastData { public Coord() { super(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about clouds */ public Coord(JSONObject jsonObj) { super(jsonObj); } } - - - /** Key for JSON variable City code (ID) */ + + /** + * Key for JSON variable City code (ID) + */ private final String JSON_CITY_ID = "id"; - /** Key for JSON variable City name */ + /** + * Key for JSON variable City name + */ private final String JSON_CITY_NAME = "name"; - /** Key for JSON variable Country code of city */ + /** + * Key for JSON variable Country code of city + */ private final String JSON_CITY_COUNTRY_CODE = "country"; - /** Key for JSON variable Population of city */ + /** + * Key for JSON variable Population of city + */ private final String JSON_CITY_POPULATION = "population"; - - /** City code (ID) */ + + /** + * City code (ID) + */ private final long cityID; - /** City name */ + /** + * City name + */ private final String cityName; - /** Country code of city */ + /** + * Country code of city + */ private final String countryCode; - /** Population of city */ + /** + * Population of city + */ private final long population; - + private final Coord coord; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -175,15 +201,15 @@ public class DailyForecastData { this.cityName = null; this.countryCode = null; this.population = Long.MIN_VALUE; - + this.coord = new Coord(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about city */ public City(JSONObject jsonObj) { @@ -191,187 +217,217 @@ public class DailyForecastData { this.cityName = (jsonObj != null) ? jsonObj.optString(this.JSON_CITY_NAME, null) : null; this.countryCode = (jsonObj != null) ? jsonObj.optString(this.JSON_CITY_COUNTRY_CODE, null) : null; this.population = (jsonObj != null) ? jsonObj.optLong(this.JSON_CITY_POPULATION, Long.MIN_VALUE) : Long.MIN_VALUE; - + JSONObject jsonObjCoord = (jsonObj != null) ? jsonObj.optJSONObject(this.JSON_CITY_COORD) : null; this.coord = (jsonObjCoord != null) ? new Coord(jsonObjCoord) : new Coord(); } - + public boolean hasCityCode() { return (this.cityID != Long.MIN_VALUE); } - + public boolean hasCityName() { return (this.cityName != null); } - + public boolean hasCountryCode() { return (this.countryCode != null); } - + public boolean hasCityPopulation() { return (this.population != Long.MIN_VALUE); } - + public long getCityCode() { return this.cityID; } - + public String getCityName() { return this.cityName; } - + public String getCountryCode() { return this.countryCode; } - + public long getCityPopulation() { return this.population; } - + // Objects - public Coord getCoordinates_Object() { return this.coord; } } - - + /** - * Parses data about forecasts (from the JSON data) - * and provides methods to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about forecasts (from the JSON data) and provides methods to + * get/access the information. This class provides has and + * get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., + * if the data was available (successfully downloaded) and was parsed + * correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Forecast extends AbstractWeatherData { - /** Key for JSON object - Temperature */ - public final String JSON_TEMP = "temp"; - - /* - *************************** - * Declaring sub-sub-classes - *************************** - */ - + /** - * Parses data about weather (from the JSON data) - * and provides methods to get/access the information. - * For example, weather id, name, etc. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Key for JSON object - Temperature + */ + public final String JSON_TEMP = "temp"; + + /* + *************************** + * Declaring sub-sub-classes + *************************** + */ + /** + * Parses data about weather (from the JSON data) and provides methods + * to get/access the information. For example, weather id, name, etc. + * This class provides has and get methods to + * access the information. + *

+ *

+ * has methods can be used to check if the data exists, + * i.e., if the data was available (successfully downloaded) and was + * parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Weather extends AbstractWeatherData.Weather { - + /** - * Non-parameterized constructor - * - *

Initializes variables as per following basis:
- * Boolean: false
- * Integral: Minimum value (MIN_VALUE)
- * Floating point: Not a number (NaN)
- * Others: null
- */ - public Weather () { + * Non-parameterized constructor + *

+ *

+ * Initializes variables as per following basis:
+ * Boolean: false
+ * Integral: Minimum value (MIN_VALUE)
+ * Floating point: Not a number (NaN)
+ * Others: null
+ */ + public Weather() { super(); } - + /** - * Parameterized constructor - * - * Initializes variables from values from the given JSON object. - * - * @param jsonObj JSON object containing data about weather - */ - public Weather (JSONObject jsonObj) { + * Parameterized constructor + *

+ * Initializes variables from values from the given JSON object. + *

+ * @param jsonObj JSON object containing data about weather + */ + public Weather(JSONObject jsonObj) { super(jsonObj); } } - + /** - * Parses data about temperature (from the JSON data) - * and provides methods to get/access the information. - * For example, weather id, name, etc. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about temperature (from the JSON data) and provides + * methods to get/access the information. For example, weather id, name, + * etc. This class provides has and get + * methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, + * i.e., if the data was available (successfully downloaded) and was + * parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Temperature { - /** Key for JSON variable Temp -> Day */ + + /** + * Key for JSON variable Temp -> Day + */ public final String JSON_TEMP_DAY = "day"; - /** Key for JSON variable Temp -> Minimum */ + /** + * Key for JSON variable Temp -> Minimum + */ public final String JSON_TEMP_MIN = "min"; - /** Key for JSON variable Temp -> Maximum */ + /** + * Key for JSON variable Temp -> Maximum + */ public final String JSON_TEMP_MAX = "max"; - /** Key for JSON variable Temp -> Night */ + /** + * Key for JSON variable Temp -> Night + */ public final String JSON_TEMP_NIGHT = "night"; - /** Key for JSON variable Temp -> Evening */ + /** + * Key for JSON variable Temp -> Evening + */ public final String JSON_TEMP_EVENING = "eve"; - /** Key for JSON variable Temp -> Morning */ + /** + * Key for JSON variable Temp -> Morning + */ public final String JSON_TEMP_MORNING = "morn"; - - /** Day temperature */ + + /** + * Day temperature + */ private final float dayTemp; - /** Minimum temperature */ + /** + * Minimum temperature + */ private final float minTemp; - /** Maximum temperature */ + /** + * Maximum temperature + */ private final float maxTemp; - /** Night temperature */ + /** + * Night temperature + */ private final float nightTemp; - /** Evening temperature */ + /** + * Evening temperature + */ private final float eveTemp; - /** Morning temperature */ + /** + * Morning temperature + */ private final float mornTemp; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -385,12 +441,12 @@ public class DailyForecastData { this.eveTemp = Float.NaN; this.mornTemp = Float.NaN; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about temperature */ public Temperature(JSONObject jsonObj) { @@ -401,95 +457,119 @@ public class DailyForecastData { this.eveTemp = (jsonObj != null) ? (float) jsonObj.optDouble(this.JSON_TEMP_EVENING, Double.NaN) : Float.NaN; this.mornTemp = (jsonObj != null) ? (float) jsonObj.optDouble(this.JSON_TEMP_MORNING, Double.NaN) : Float.NaN; } - + public boolean hasDayTemperature() { return (this.dayTemp != Float.NaN); } - + public boolean hasMinimumTemperature() { return (this.minTemp != Float.NaN); } - + public boolean hasMaximumTemperature() { return (this.maxTemp != Float.NaN); } - + public boolean hasNightTemperature() { return (this.nightTemp != Float.NaN); } - + public boolean hasEveningTemperature() { return (this.eveTemp != Float.NaN); } - + public boolean hasMorningTemperature() { return (this.mornTemp != Float.NaN); } - + public float getDayTemperature() { return this.dayTemp; } - + public float getMinimumTemperature() { return this.minTemp; } - + public float getMaximumTemperature() { return this.maxTemp; } - + public float getNightTemperature() { return this.nightTemp; } - + public float getEveningTemperature() { return this.eveTemp; } - + public float getMorningTemperature() { return this.mornTemp; } } /* - ************************ - * Declaring this sub-class - ************************ - */ - - /** Key for JSON variable Pressure */ + ************************ + * Declaring this sub-class + ************************ + */ + /** + * Key for JSON variable Pressure + */ private final String JSON_FORECAST_PRESSURE = "pressure"; - /** Key for JSON variable Humidity */ + /** + * Key for JSON variable Humidity + */ private final String JSON_FORECAST_HUMIDITY = "humidity"; - /** Key for JSON variable Wind speed */ + /** + * Key for JSON variable Wind speed + */ private final String JSON_FORECAST_WIND_SPEED = "speed"; - /** Key for JSON variable Wind degree */ + /** + * Key for JSON variable Wind degree + */ private final String JSON_FORECAST_WIND_DEGREE = "deg"; - /** Key for JSON variable Percentage of clouds */ + /** + * Key for JSON variable Percentage of clouds + */ private final String JSON_FORECAST_CLOUDS = "clouds"; - - /** Pressure */ + + /** + * Pressure + */ private final float pressure; - /** Humidity */ + /** + * Humidity + */ private final float humidity; - /** Wind speed */ + /** + * Wind speed + */ private final float windSpeed; - /** Wind degree */ + /** + * Wind degree + */ private final float windDegree; - /** Percentage of clouds */ + /** + * Percentage of clouds + */ private final float cloudsPercent; private final Temperature temp; - - /** List of weather information (code, name, etc.) */ + + /** + * List of weather information (code, name, etc.) + */ private final List weatherList; - /** Count (number) of elements in list of weather information */ + /** + * Count (number) of elements in list of weather information + */ private final int weatherListCount; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -497,32 +577,32 @@ public class DailyForecastData { */ public Forecast() { super(); - + this.pressure = Float.NaN; this.humidity = Float.NaN; this.windSpeed = Float.NaN; this.windDegree = Float.NaN; this.cloudsPercent = Float.NaN; - + this.temp = new Temperature(); this.weatherList = Collections.EMPTY_LIST; this.weatherListCount = this.weatherList.size(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about forecasts */ public Forecast(JSONObject jsonObj) { super(jsonObj); - + JSONObject jsonObjTemp = (jsonObj != null) ? jsonObj.optJSONObject(this.JSON_TEMP) : null; this.temp = (jsonObjTemp != null) ? new Temperature(jsonObjTemp) : new Temperature(); - + this.humidity = (jsonObj != null) ? (float) jsonObj.optDouble(this.JSON_FORECAST_HUMIDITY, Double.NaN) : Float.NaN; this.pressure = (jsonObj != null) ? (float) jsonObj.optDouble(this.JSON_FORECAST_PRESSURE, Double.NaN) : Float.NaN; this.windSpeed = (jsonObj != null) ? (float) jsonObj.optDouble(this.JSON_FORECAST_WIND_SPEED, Double.NaN) : Float.NaN; @@ -532,8 +612,8 @@ public class DailyForecastData { JSONArray jsonArrWeather = (jsonObj != null) ? jsonObj.optJSONArray(this.JSON_WEATHER) : null; this.weatherList = (jsonArrWeather != null) ? new ArrayList(jsonArrWeather.length()) : Collections.EMPTY_LIST; if (this.weatherList != Collections.EMPTY_LIST) { - for (int i = 0; i < jsonArrWeather.length (); i++) { - JSONObject jsonObjWeather = jsonArrWeather.optJSONObject (i); + for (int i = 0; i < jsonArrWeather.length(); i++) { + JSONObject jsonObjWeather = jsonArrWeather.optJSONObject(i); if (jsonObjWeather != null) { this.weatherList.add(new Weather(jsonObjWeather)); } @@ -541,55 +621,53 @@ public class DailyForecastData { } this.weatherListCount = this.weatherList.size(); } - + public boolean hasHumidity() { return (this.humidity != Float.NaN); } - + public boolean hasPressure() { return (this.pressure != Float.NaN); } - + public boolean hasWindSpeed() { return (this.windSpeed != Float.NaN); } - + public boolean hasWindDegree() { return (this.windDegree != Float.NaN); } - + public boolean hasPercentageOfClouds() { return (this.cloudsPercent != Float.NaN); } - + public float getHumidity() { return this.humidity; } - + public float getPressure() { return this.pressure; } - + public float getWindSpeed() { return this.windSpeed; } - + public float getWindDegree() { return this.windDegree; } - + public float getPercentageOfClouds() { return this.cloudsPercent; } // Objects - public Temperature getTemperature_Object() { return this.temp; } // Lists - public boolean hasWeather_List() { return (this.weatherListCount != 0); } @@ -602,50 +680,64 @@ public class DailyForecastData { return this.weatherList; } } - - + /* *********************** * Declaring this class *********************** */ - - /** Key for JSON variable Response code */ + /** + * Key for JSON variable Response code + */ private final String JSON_RESPONSE_CODE = "cod"; - /** Key for JSON variable Response time */ + /** + * Key for JSON variable Response time + */ private final String JSON_RESPONSE_TIME = "message"; - /** Key for JSON variable Forecast count */ + /** + * Key for JSON variable Forecast count + */ private final String JSON_RESPONSE_FORECAST_COUNT = "cnt"; - - /** Response code */ + + /** + * Response code + */ private final String responseCode; - /** Response time */ + /** + * Response time + */ private final float responseTime; - /** Forecast count */ + /** + * Forecast count + */ private final int responseForecastCount; - + private final City city; - - /** List of forecast information */ + + /** + * List of forecast information + */ private final List forecastList; - /** Count (number) of elements in list of forecast information */ + /** + * Count (number) of elements in list of forecast information + */ private final int forecastListCount; - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about daily forecasts */ public DailyForecastData(JSONObject jsonObj) { this.responseCode = (jsonObj != null) ? jsonObj.optString(this.JSON_RESPONSE_CODE, null) : null; this.responseTime = (jsonObj != null) ? (float) jsonObj.optDouble(this.JSON_RESPONSE_TIME, Double.NaN) : Float.NaN; this.responseForecastCount = (jsonObj != null) ? jsonObj.optInt(this.JSON_RESPONSE_FORECAST_COUNT, Integer.MIN_VALUE) : Integer.MIN_VALUE; - + JSONObject jsonObjCity = (jsonObj != null) ? jsonObj.optJSONObject(this.JSON_CITY) : null; this.city = (jsonObjCity != null) ? new City(jsonObjCity) : new City(); - + JSONArray jsonArrForecast = (jsonObj != null) ? jsonObj.optJSONArray(this.JSON_FORECAST_LIST) : null; this.forecastList = (jsonArrForecast != null) ? new ArrayList(jsonArrForecast.length()) : Collections.EMPTY_LIST; if (this.forecastList != Collections.EMPTY_LIST) { @@ -658,47 +750,45 @@ public class DailyForecastData { } this.forecastListCount = this.forecastList.size(); } - + public boolean hasResponseCode() { return (this.responseCode != null); } - + public boolean hasResponseTime() { return (this.responseTime != Float.NaN); } - + public boolean hasResponseForecastCount() { return (this.responseForecastCount != Integer.MIN_VALUE); } - + public String getResponseCode() { return this.responseCode; } - + public float getResponseTime() { return this.responseTime; } - + public int getResponseForecastCount() { return this.responseForecastCount; } - + // Objects - public City getCity_Object() { return this.city; } - + // Lists - public boolean hasForecast_List() { return (this.forecastListCount != 0); } - + public int getForecast_List_Count() { return this.forecastListCount; } - + public List getForecast_List() { return this.forecastList; } diff --git a/src/net/aksingh/java/api/owm/ForecastWeatherData.java b/src/net/aksingh/java/api/owm/ForecastWeatherData.java index c2aae9d..537af34 100644 --- a/src/net/aksingh/java/api/owm/ForecastWeatherData.java +++ b/src/net/aksingh/java/api/owm/ForecastWeatherData.java @@ -28,96 +28,106 @@ import org.json.JSONArray; import org.json.JSONObject; /** - * Parses forecast weather data (from the JSON data) and provides methods - * to get/access the information about forecasted weather. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per - * following basis:
+ * Parses forecast weather data (from the JSON data) and provides methods to + * get/access the information about forecasted weather. This class provides + * has and get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., if + * the data was available (successfully downloaded) and was parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data exists, + * otherwise get methods will give value as per following + * basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Objects: Data initialized with default/non-parameterized constructor
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public class ForecastWeatherData { - /** Key for JSON object - City */ + + /** + * Key for JSON object - City + */ private final String JSON_CITY = "city"; - /** Key for JSON object - List of forecasts */ + /** + * Key for JSON object - List of forecasts + */ private final String JSON_FORECAST_LIST = "list"; - - + /* ************************ * Declaring sub-classes ************************ */ - /** - * Parses data about city (from the JSON data) - * and provides methods to get/access the information. - * For example, city name, coordinates, country name, population, etc. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about city (from the JSON data) and provides methods to + * get/access the information. For example, city name, coordinates, country + * name, population, etc. This class provides has and + * get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., + * if the data was available (successfully downloaded) and was parsed + * correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class City { - /** Key for JSON object - Coordinates */ - private final String JSON_CITY_COORD = "coord"; - + /** - * Parses data about geographic coordinates (from the JSON data) - * and provides methods to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Key for JSON object - Coordinates + */ + private final String JSON_CITY_COORD = "coord"; + + /** + * Parses data about geographic coordinates (from the JSON data) and + * provides methods to get/access the information. This class provides + * has and get methods to access the + * information. + *

+ *

+ * has methods can be used to check if the data exists, + * i.e., if the data was available (successfully downloaded) and was + * parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Coord extends AbstractWeatherData.Coord { - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -126,44 +136,60 @@ public class ForecastWeatherData { public Coord() { super(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about clouds */ public Coord(JSONObject jsonObj) { super(jsonObj); } } - - - /** Key for JSON variable City code (ID) */ + + /** + * Key for JSON variable City code (ID) + */ private final String JSON_CITY_ID = "id"; - /** Key for JSON variable City name */ + /** + * Key for JSON variable City name + */ private final String JSON_CITY_NAME = "name"; - /** Key for JSON variable Country code of city */ + /** + * Key for JSON variable Country code of city + */ private final String JSON_CITY_COUNTRY_CODE = "country"; - /** Key for JSON variable Population of city */ + /** + * Key for JSON variable Population of city + */ private final String JSON_CITY_POPULATION = "population"; - - /** City code (ID) */ + + /** + * City code (ID) + */ private final long cityID; - /** City name */ + /** + * City name + */ private final String cityName; - /** Country code of city */ + /** + * Country code of city + */ private final String countryCode; - /** Population of city */ + /** + * Population of city + */ private final long population; - + private final Coord coord; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -174,15 +200,15 @@ public class ForecastWeatherData { this.cityName = null; this.countryCode = null; this.population = Long.MIN_VALUE; - + this.coord = new Coord(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about city */ public City(JSONObject jsonObj) { @@ -190,111 +216,114 @@ public class ForecastWeatherData { this.cityName = (jsonObj != null) ? jsonObj.optString(this.JSON_CITY_NAME, null) : null; this.countryCode = (jsonObj != null) ? jsonObj.optString(this.JSON_CITY_COUNTRY_CODE, null) : null; this.population = (jsonObj != null) ? jsonObj.optLong(this.JSON_CITY_POPULATION, Long.MIN_VALUE) : Long.MIN_VALUE; - + JSONObject jsonObjCoord = (jsonObj != null) ? jsonObj.optJSONObject(this.JSON_CITY_COORD) : null; this.coord = (jsonObjCoord != null) ? new Coord(jsonObjCoord) : new Coord(); } - + public boolean hasCityCode() { return (this.cityID != Long.MIN_VALUE); } - + public boolean hasCityName() { return (this.cityName != null); } - + public boolean hasCountryCode() { return (this.countryCode != null); } - + public boolean hasCityPopulation() { return (this.population != Long.MIN_VALUE); } - + public long getCityCode() { return this.cityID; } - + public String getCityName() { return this.cityName; } - + public String getCountryCode() { return this.countryCode; } - + public long getCityPopulation() { return this.population; } - + // Objects - public Coord getCoordinates_Object() { return this.coord; } } - - + /** - * Parses data about forecasts (from the JSON data) - * and provides methods to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about forecasts (from the JSON data) and provides methods to + * get/access the information. This class provides has and + * get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, i.e., + * if the data was available (successfully downloaded) and was parsed + * correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Forecast extends AbstractWeatherData { - /** Key for JSON object - Sys (pod, etc.) */ + + /** + * Key for JSON object - Sys (pod, etc.) + */ private final String JSON_SYS = "sys"; /* - *************************** - * Declaring sub-sub-classes - *************************** - */ - + *************************** + * Declaring sub-sub-classes + *************************** + */ /** - * Parses data about clouds (from the JSON data) - * and provides methods to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about clouds (from the JSON data) and provides methods to + * get/access the information. This class provides has and + * get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, + * i.e., if the data was available (successfully downloaded) and was + * parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Clouds extends AbstractWeatherData.Clouds { - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -303,61 +332,77 @@ public class ForecastWeatherData { public Clouds() { super(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about clouds */ public Clouds(JSONObject jsonObj) { super(jsonObj); } } - + /** - * Parses data about main weather elements (from the JSON data) - * and provides methods to get/access the information. - * For example, temperature, pressure, sea level, etc. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about main weather elements (from the JSON data) and + * provides methods to get/access the information. For example, + * temperature, pressure, sea level, etc. This class provides + * has and get methods to access the + * information. + *

+ *

+ * has methods can be used to check if the data exists, + * i.e., if the data was available (successfully downloaded) and was + * parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Main extends AbstractWeatherData.Main { - /** Key for JSON variable Main -> Sea level */ + + /** + * Key for JSON variable Main -> Sea level + */ private final String JSON_MAIN_SEA_LEVEL = "sea_level"; - /** Key for JSON variable Main -> Ground level */ + /** + * Key for JSON variable Main -> Ground level + */ private final String JSON_MAIN_GRND_LEVEL = "grnd_level"; - /** Key for JSON variable Main -> Temperature KF */ + /** + * Key for JSON variable Main -> Temperature KF + */ private final String JSON_MAIN_TMP_KF = "temp_kf"; - /** Sea level */ + /** + * Sea level + */ private final float seaLevel; - /** Ground level */ + /** + * Ground level + */ private final float groundLevel; - /** Temperature KF */ + /** + * Temperature KF + */ private final float tempKF; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -370,14 +415,14 @@ public class ForecastWeatherData { this.groundLevel = Float.NaN; this.tempKF = Float.NaN; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * - * @param jsonObj JSON object containing data about main - * weather elements + *

+ * @param jsonObj JSON object containing data about main weather + * elements */ public Main(JSONObject jsonObj) { super(jsonObj); @@ -411,41 +456,49 @@ public class ForecastWeatherData { return this.tempKF; } } - + /** - * Parses data about main weather elements (from the JSON data) - * and provides methods to get/access the information. - * For example, temperature, pressure, sea level, etc. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about main weather elements (from the JSON data) and + * provides methods to get/access the information. For example, + * temperature, pressure, sea level, etc. This class provides + * has and get methods to access the + * information. + *

+ *

+ * has methods can be used to check if the data exists, + * i.e., if the data was available (successfully downloaded) and was + * parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Sys { - /** Key for JSON variable Sys -> Pod */ + + /** + * Key for JSON variable Sys -> Pod + */ private final String JSON_SYS_POD = "pod"; - - /** Pod */ + + /** + * Pod + */ private final String pod; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -454,14 +507,14 @@ public class ForecastWeatherData { public Sys() { this.pod = null; } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * - * @param jsonObj JSON object containing data about sys. - * For example, pod, etc. + *

+ * @param jsonObj JSON object containing data about sys. For + * example, pod, etc. */ public Sys(JSONObject jsonObj) { this.pod = (jsonObj != null) ? jsonObj.optString(this.JSON_SYS_POD, null) : null; @@ -475,134 +528,145 @@ public class ForecastWeatherData { return this.pod; } } - + /** - * Parses data about weather (from the JSON data) - * and provides methods to get/access the information. - * For example, weather id, name, etc. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about weather (from the JSON data) and provides methods + * to get/access the information. For example, weather id, name, etc. + * This class provides has and get methods to + * access the information. + *

+ *

+ * has methods can be used to check if the data exists, + * i.e., if the data was available (successfully downloaded) and was + * parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Weather extends AbstractWeatherData.Weather { - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
*/ - public Weather () { + public Weather() { super(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * - * @param jsonObj JSON object containing data about weather - * code, name, etc. + *

+ * @param jsonObj JSON object containing data about weather code, + * name, etc. */ - public Weather (JSONObject jsonObj) { + public Weather(JSONObject jsonObj) { super(jsonObj); } } - + /** - * Parses data about wind (from the JSON data) - * and provides methods to get/access the information. - * This class provides has and get methods - * to access the information. - * - *

has methods can be used to check - * if the data exists, i.e., if the data was available (successfully - * downloaded) and was parsed correctly. - * - *

get methods can be used to access the data, if the data - * exists, otherwise get methods will give value as per + * Parses data about wind (from the JSON data) and provides methods to + * get/access the information. This class provides has and + * get methods to access the information. + *

+ *

+ * has methods can be used to check if the data exists, + * i.e., if the data was available (successfully downloaded) and was + * parsed correctly. + *

+ *

+ * get methods can be used to access the data, if the data + * exists, otherwise get methods will give value as per * following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
- * + *

* @author Ashutosh Kumar Singh * @version 2013/08/07 * @since 2.5.0.1 */ public static class Wind extends AbstractWeatherData.Wind { - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
* Others: null
*/ - public Wind () { - super (); + public Wind() { + super(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about wind */ - public Wind (JSONObject jsonObj) { - super (jsonObj); + public Wind(JSONObject jsonObj) { + super(jsonObj); } } /* - ************************ - * Declaring this sub-class - ************************ - */ - - - /** Key for JSON variable Date time text */ + ************************ + * Declaring this sub-class + ************************ + */ + /** + * Key for JSON variable Date time text + */ private final String JSON_DATE_TIME_TEXT = "dt_txt"; - - /** Date time text */ + + /** + * Date time text + */ private final String dateTimeText; private final Clouds clouds; private final Main main; private final Sys sys; private final Wind wind; - - /** List of weather information (code, name, etc.) */ + + /** + * List of weather information (code, name, etc.) + */ private final List weatherList; - /** Count (number) of elements in list of weather information */ + /** + * Count (number) of elements in list of weather information + */ private final int weatherListCount; - + /** * Non-parameterized constructor - * - *

Initializes variables as per following basis:
+ *

+ *

+ * Initializes variables as per following basis:
* Boolean: false
* Integral: Minimum value (MIN_VALUE)
* Floating point: Not a number (NaN)
@@ -613,19 +677,19 @@ public class ForecastWeatherData { this.dateTimeText = null; - this.clouds = new Clouds(); + this.clouds = new Clouds(); this.main = new Main(); this.sys = new Sys(); this.weatherList = Collections.EMPTY_LIST; this.weatherListCount = this.weatherList.size(); this.wind = new Wind(); } - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about forecasts */ public Forecast(JSONObject jsonObj) { @@ -645,8 +709,8 @@ public class ForecastWeatherData { JSONArray jsonArrWeather = (jsonObj != null) ? jsonObj.optJSONArray(this.JSON_WEATHER) : null; this.weatherList = (jsonArrWeather != null) ? new ArrayList(jsonArrWeather.length()) : Collections.EMPTY_LIST; if (this.weatherList != Collections.EMPTY_LIST) { - for (int i = 0; i < jsonArrWeather.length (); i++) { - JSONObject jsonObjWeather = jsonArrWeather.optJSONObject (i); + for (int i = 0; i < jsonArrWeather.length(); i++) { + JSONObject jsonObjWeather = jsonArrWeather.optJSONObject(i); if (jsonObjWeather != null) { this.weatherList.add(new Weather(jsonObjWeather)); } @@ -667,7 +731,6 @@ public class ForecastWeatherData { } // Objects - public Clouds getClouds_Object() { return this.clouds; } @@ -685,7 +748,6 @@ public class ForecastWeatherData { } // Lists - public boolean hasWeather_List() { return (this.weatherListCount != 0); } @@ -698,50 +760,64 @@ public class ForecastWeatherData { return this.weatherList; } } - - + /* *********************** * Declaring this class *********************** */ - - /** Key for JSON variable Response code */ + /** + * Key for JSON variable Response code + */ private final String JSON_RESPONSE_CODE = "cod"; - /** Key for JSON variable Response time */ + /** + * Key for JSON variable Response time + */ private final String JSON_RESPONSE_TIME = "message"; - /** Key for JSON variable Forecast count */ + /** + * Key for JSON variable Forecast count + */ private final String JSON_RESPONSE_FORECAST_COUNT = "cnt"; - - /** Response code */ + + /** + * Response code + */ private final String responseCode; - /** Response time */ + /** + * Response time + */ private final float responseTime; - /** Forecast count */ + /** + * Forecast count + */ private final int responseForecastCount; - + private final City city; - - /** List of forecast information */ + + /** + * List of forecast information + */ private final List forecastList; - /** Count (number) of elements in list of forecast information */ + /** + * Count (number) of elements in list of forecast information + */ private final int forecastListCount; - + /** * Parameterized constructor - * + *

* Initializes variables from values from the given JSON object. - * + *

* @param jsonObj JSON object containing data about clouds */ public ForecastWeatherData(JSONObject jsonObj) { this.responseCode = (jsonObj != null) ? jsonObj.optString(this.JSON_RESPONSE_CODE, null) : null; this.responseTime = (jsonObj != null) ? (float) jsonObj.optDouble(this.JSON_RESPONSE_TIME, Double.NaN) : Float.NaN; this.responseForecastCount = (jsonObj != null) ? jsonObj.optInt(this.JSON_RESPONSE_FORECAST_COUNT, Integer.MIN_VALUE) : Integer.MIN_VALUE; - + JSONObject jsonObjCity = (jsonObj != null) ? jsonObj.optJSONObject(this.JSON_CITY) : null; this.city = (jsonObjCity != null) ? new City(jsonObjCity) : new City(); - + JSONArray jsonArrForecast = (jsonObj != null) ? jsonObj.optJSONArray(this.JSON_FORECAST_LIST) : null; this.forecastList = (jsonArrForecast != null) ? new ArrayList(jsonArrForecast.length()) : Collections.EMPTY_LIST; if (this.forecastList != Collections.EMPTY_LIST) { @@ -754,47 +830,45 @@ public class ForecastWeatherData { } this.forecastListCount = this.forecastList.size(); } - + public boolean hasResponseCode() { return (this.responseCode != null); } - + public boolean hasResponseTime() { return (this.responseTime != Float.NaN); } - + public boolean hasResponseForecastCount() { return (this.responseForecastCount != Integer.MIN_VALUE); } - + public String getResponseCode() { return this.responseCode; } - + public float getResponseTime() { return this.responseTime; } - + public int getResponseForecastCount() { return this.responseForecastCount; } - + // Objects - public City getCity_Object() { return this.city; } - + // Lists - public boolean hasForecast_List() { return (this.forecastListCount != 0); } - + public int getForecast_List_Count() { return this.forecastListCount; } - + public List getForecast_List() { return this.forecastList; } diff --git a/src/net/aksingh/java/api/owm/OpenWeatherMap.java b/src/net/aksingh/java/api/owm/OpenWeatherMap.java index fc03cd6..586b1e3 100644 --- a/src/net/aksingh/java/api/owm/OpenWeatherMap.java +++ b/src/net/aksingh/java/api/owm/OpenWeatherMap.java @@ -30,7 +30,7 @@ import org.json.JSONObject; /** * Provides methods to get weather, forecast, and other data from * OpenWeatherMap.org - * + *

* @author Ashutosh Kumar Singh * @version 2013/08/05 * @since 2.5.0.1 @@ -69,7 +69,7 @@ public class OpenWeatherMap { /** * Returns the parameter. - * + *

* @return Parameter */ public String getParameter() { @@ -98,15 +98,15 @@ public class OpenWeatherMap { String response; String address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_CURRENT_WEATHER.getParameter() - + OWM_URL.PARAMETER_CITY_NAME.getParameter() - + URLEncoder.encode(cityName, "US-ASCII") + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_CURRENT_WEATHER.getParameter() + + OWM_URL.PARAMETER_CITY_NAME.getParameter() + + URLEncoder.encode(cityName, "US-ASCII") + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -119,16 +119,16 @@ public class OpenWeatherMap { String response; address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_CURRENT_WEATHER.getParameter() - + OWM_URL.PARAMETER_CITY_NAME.getParameter() - + URLEncoder.encode(cityName, "US-ASCII") - + "," + countryCode + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_CURRENT_WEATHER.getParameter() + + OWM_URL.PARAMETER_CITY_NAME.getParameter() + + URLEncoder.encode(cityName, "US-ASCII") + + "," + countryCode + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -141,15 +141,15 @@ public class OpenWeatherMap { String response; address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_CURRENT_WEATHER.getParameter() - + OWM_URL.PARAMETER_CITY_ID.getParameter() - + Long.toString(cityCode) + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_CURRENT_WEATHER.getParameter() + + OWM_URL.PARAMETER_CITY_ID.getParameter() + + Long.toString(cityCode) + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -162,17 +162,17 @@ public class OpenWeatherMap { String response; address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_CURRENT_WEATHER.getParameter() - + OWM_URL.PARAMETER_LATITUDE.getParameter() - + Float.toString(latitude) + "&" - + OWM_URL.PARAMETER_LONGITUDE.getParameter() - + Float.toString(longitude) + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_CURRENT_WEATHER.getParameter() + + OWM_URL.PARAMETER_LATITUDE.getParameter() + + Float.toString(latitude) + "&" + + OWM_URL.PARAMETER_LONGITUDE.getParameter() + + Float.toString(longitude) + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -185,15 +185,15 @@ public class OpenWeatherMap { String response; address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_FORECAST_WEATHER.getParameter() - + OWM_URL.PARAMETER_CITY_NAME.getParameter() - + URLEncoder.encode(cityName, "US-ASCII") + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_FORECAST_WEATHER.getParameter() + + OWM_URL.PARAMETER_CITY_NAME.getParameter() + + URLEncoder.encode(cityName, "US-ASCII") + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -206,16 +206,16 @@ public class OpenWeatherMap { String response; address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_FORECAST_WEATHER.getParameter() - + OWM_URL.PARAMETER_CITY_NAME.getParameter() - + URLEncoder.encode(cityName, "US-ASCII") - + "," + countryCode + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_FORECAST_WEATHER.getParameter() + + OWM_URL.PARAMETER_CITY_NAME.getParameter() + + URLEncoder.encode(cityName, "US-ASCII") + + "," + countryCode + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -228,15 +228,15 @@ public class OpenWeatherMap { String response; address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_FORECAST_WEATHER.getParameter() - + OWM_URL.PARAMETER_CITY_ID.getParameter() - + Long.toString(cityCode) + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_FORECAST_WEATHER.getParameter() + + OWM_URL.PARAMETER_CITY_ID.getParameter() + + Long.toString(cityCode) + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -249,17 +249,17 @@ public class OpenWeatherMap { String response; address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_FORECAST_WEATHER.getParameter() - + OWM_URL.PARAMETER_LATITUDE.getParameter() - + Float.toString(latitude) + "&" - + OWM_URL.PARAMETER_LONGITUDE.getParameter() - + Float.toString(longitude) + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_FORECAST_WEATHER.getParameter() + + OWM_URL.PARAMETER_LATITUDE.getParameter() + + Float.toString(latitude) + "&" + + OWM_URL.PARAMETER_LONGITUDE.getParameter() + + Float.toString(longitude) + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -272,17 +272,17 @@ public class OpenWeatherMap { String response; address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_DAILY_FORECAST.getParameter() - + OWM_URL.PARAMETER_CITY_NAME.getParameter() - + URLEncoder.encode(cityName, "US-ASCII") + "&" - + OWM_URL.PARAMETER_COUNT.getParameter() - + Byte.toString(count) + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_DAILY_FORECAST.getParameter() + + OWM_URL.PARAMETER_CITY_NAME.getParameter() + + URLEncoder.encode(cityName, "US-ASCII") + "&" + + OWM_URL.PARAMETER_COUNT.getParameter() + + Byte.toString(count) + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -295,18 +295,18 @@ public class OpenWeatherMap { String response; address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_DAILY_FORECAST.getParameter() - + OWM_URL.PARAMETER_CITY_NAME.getParameter() - + URLEncoder.encode(cityName, "US-ASCII") - + "," + countryCode + "&" - + OWM_URL.PARAMETER_COUNT.getParameter() - + Byte.toString(count) + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_DAILY_FORECAST.getParameter() + + OWM_URL.PARAMETER_CITY_NAME.getParameter() + + URLEncoder.encode(cityName, "US-ASCII") + + "," + countryCode + "&" + + OWM_URL.PARAMETER_COUNT.getParameter() + + Byte.toString(count) + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -319,17 +319,17 @@ public class OpenWeatherMap { String response; address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_DAILY_FORECAST.getParameter() - + OWM_URL.PARAMETER_CITY_ID.getParameter() - + Long.toString(cityCode) + "&" - + OWM_URL.PARAMETER_COUNT.getParameter() - + Byte.toString(count) + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_DAILY_FORECAST.getParameter() + + OWM_URL.PARAMETER_CITY_ID.getParameter() + + Long.toString(cityCode) + "&" + + OWM_URL.PARAMETER_COUNT.getParameter() + + Byte.toString(count) + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -342,19 +342,19 @@ public class OpenWeatherMap { String response; address = OWM_URL.BASE_URL.getParameter() - + OWM_URL.PARAMETER_DAILY_FORECAST.getParameter() - + OWM_URL.PARAMETER_LATITUDE.getParameter() - + Float.toString(latitude) + "&" - + OWM_URL.PARAMETER_COUNT.getParameter() - + Byte.toString(count) + "&" - + OWM_URL.PARAMETER_LONGITUDE.getParameter() - + Float.toString(longitude) + "&" - + OWM_URL.PARAMETER_MODE.getParameter() - + this.OWM_MODE_VALUE + "&" - + OWM_URL.PARAMETER_UNITS.getParameter() - + this.OWM_UNITS_VALUE + "&" - + OWM_URL.PARAMETER_APPID.getParameter() - + this.OWM_APPID_VALUE; + + OWM_URL.PARAMETER_DAILY_FORECAST.getParameter() + + OWM_URL.PARAMETER_LATITUDE.getParameter() + + Float.toString(latitude) + "&" + + OWM_URL.PARAMETER_COUNT.getParameter() + + Byte.toString(count) + "&" + + OWM_URL.PARAMETER_LONGITUDE.getParameter() + + Float.toString(longitude) + "&" + + OWM_URL.PARAMETER_MODE.getParameter() + + this.OWM_MODE_VALUE + "&" + + OWM_URL.PARAMETER_UNITS.getParameter() + + this.OWM_UNITS_VALUE + "&" + + OWM_URL.PARAMETER_APPID.getParameter() + + this.OWM_APPID_VALUE; response = Tools.Downloader.downloadPage(address); @@ -364,8 +364,7 @@ public class OpenWeatherMap { /** * ********************* - * Declaring this class - ********************** + * Declaring this class ********************* */ private final OWM_Response owmResponse; diff --git a/src/net/aksingh/java/api/owm/Tools.java b/src/net/aksingh/java/api/owm/Tools.java index 7471bd8..048e5fa 100644 --- a/src/net/aksingh/java/api/owm/Tools.java +++ b/src/net/aksingh/java/api/owm/Tools.java @@ -28,15 +28,15 @@ import java.net.URL; import java.util.Scanner; /** - * Provides various tools, which help doing tasks in this application. - * For example, tool for downloading content from the Internet, tool for - * correcting, etc. - * - *

Note: This class directly do not provide any functions, but has - * static sub-classes which provide various - * related tools, i.e., this class only behaves as the container for those - * classes. - * + * Provides various tools, which help doing tasks in this application. For + * example, tool for downloading content from the Internet, tool for correcting, + * etc. + *

+ *

+ * Note: This class directly do not provide any functions, but has + * static sub-classes which provide various related tools, i.e., + * this class only behaves as the container for those classes. + *

* @author Ashutosh Kumar Singh * @version 2014-07-01 * @since 2.5.0.1 @@ -45,7 +45,7 @@ public class Tools { /** * Provides methods to download data or files from the Internet. - * + *

* @author Ashutosh Kumar Singh * @version 2013-07-24 * @since 2.5.0.1 @@ -53,123 +53,105 @@ public class Tools { public static class Downloader { /** - * Downloads a page/content from the Internet. - * This method gets the content of the web page, whose URL is given by - * the pageAddress. - * - *

NOTE: pageAddress should be a correct URL, else - * this method will throw {@link MalformedURLException}. - * - * @param pageAddress - * Address of the web page to get from the Internet. - * + * Downloads a page/content from the Internet. This method gets the + * content of the web page, whose URL is given by the + * pageAddress. + *

+ *

+ * NOTE: pageAddress should be a correct URL, else this + * method will throw {@link MalformedURLException}. + *

+ * @param pageAddress Address of the web page to get from the Internet. + *

* @return Content of the web page - * - * @throws MalformedURLException - * Address of the web page is not correct. - * - * @throws IOException - * Error while loading the page from the Internet or connection - * got disconnected. + *

+ * @throws MalformedURLException Address of the web page is not correct. + *

+ * @throws IOException Error while loading the page from the + * Internet or connection got + * disconnected. */ - public static String downloadPage(String pageAddress) + public static String downloadPage(String pageAddress) throws MalformedURLException, IOException { String webPage = null; URL url = new URL(pageAddress); InputStream iStream = url.openStream(); - if (iStream != null) { + if (iStream != null) { // converting InputStream to String (as we require String) - webPage = (new Scanner(iStream)).useDelimiter("\\A").next(); + webPage = (new Scanner(iStream)).useDelimiter("\\A").next(); } iStream.close(); return webPage; } } - - + /** - * Provides methods to do conversions. - * For example, converting degree to direction, etc. - * + * Provides methods to do conversions. For example, converting degree to + * direction, etc. + *

* @author Ashutosh Kumar Singh * @version 2013/08/05 * @since 2.5.0.1 */ public static class Convertor { - + /** * Converts degree to direction. - * @param degree + *

+ * @param degree

* @return Direction - * - * @throws IllegalArgumentException - * Degree should be between 0 and 360. + *

+ * @throws IllegalArgumentException Degree should be between 0 and 360. */ - public String convertDegree2Direction(float degree) - throws IllegalArgumentException{ + public String convertDegree2Direction(float degree) + throws IllegalArgumentException { String direction; - + // degree should be between 0 and 360 if ((degree < 0.0f) || (degree > 360.0f)) { throw new IllegalArgumentException("Degree cannot be less than 0 or more than 360."); } - + if (degree <= 11.25f) { direction = "N"; - } - else if (degree <= 33.75f) { + } else if (degree <= 33.75f) { direction = "NNE"; - } - else if (degree <= 56.25f) { + } else if (degree <= 56.25f) { direction = "NE"; - } - else if (degree <= 78.75f) { + } else if (degree <= 78.75f) { direction = "ENE"; - } - else if (degree <= 101.25f) { + } else if (degree <= 101.25f) { direction = "E"; - } - else if (degree <= 123.75f) { + } else if (degree <= 123.75f) { direction = "ESE"; - } - else if (degree <= 146.25f) { + } else if (degree <= 146.25f) { direction = "SE"; - } - else if (degree <= 168.75f) { + } else if (degree <= 168.75f) { direction = "SSE"; - } - else if (degree <= 191.25f) { + } else if (degree <= 191.25f) { direction = "S"; - } - else if (degree <= 213.75f) { + } else if (degree <= 213.75f) { direction = "SSW"; - } - else if (degree <= 236.25f) { + } else if (degree <= 236.25f) { direction = "SW"; - } - else if (degree <= 258.75f) { + } else if (degree <= 258.75f) { direction = "WSW"; - } - else if (degree <= 281.25f) { + } else if (degree <= 281.25f) { direction = "W"; - } - else if (degree <= 303.75f) { + } else if (degree <= 303.75f) { direction = "WNW"; - } - else if (degree <= 326.25f) { + } else if (degree <= 326.25f) { direction = "NW"; - } - else if (degree <= 348.75f) { + } else if (degree <= 348.75f) { direction = "NNW"; - } - else { + } else { direction = "N"; } return direction; } } -} \ No newline at end of file +}