mirror of
https://bitbucket.org/ethauvin/owm-japis.git
synced 2025-04-25 09:47:11 -07:00
Fixed bug of wrong data and time and improved code formatting.
This commit is contained in:
parent
4535ffd037
commit
0e90f5dcda
6 changed files with 1513 additions and 1184 deletions
|
@ -25,59 +25,73 @@ import java.util.Date;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides default implementations for {@link net.aksingh.java.api.owm.CurrentWeatherData}
|
* This class provides default implementations for
|
||||||
* and {@link net.aksingh.java.api.owm.ForecastWeatherData} classes.
|
* {@link net.aksingh.java.api.owm.CurrentWeatherData} and
|
||||||
* Standard behaviors like the <code>has</code> and the <code>get</code>
|
* {@link net.aksingh.java.api.owm.ForecastWeatherData} classes. Standard
|
||||||
* methods for information about weather or forecast (for example,
|
* behaviors like the <code>has</code> and the <code>get</code> methods for
|
||||||
* temperature, pressure, weather, clouds, wind, etc.) are defined here.
|
* information about weather or forecast (for example, temperature, pressure,
|
||||||
*
|
* weather, clouds, wind, etc.) are defined here.
|
||||||
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/07/26
|
* @version 2013/07/26
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
abstract public class AbstractWeatherData {
|
abstract public class AbstractWeatherData {
|
||||||
/** Key for JSON object - Clouds */
|
|
||||||
protected final String JSON_CLOUDS = "clouds";
|
|
||||||
/** Key for JSON object - Coordinates (Geographic coordinates) */
|
|
||||||
protected final String JSON_COORD = "coord";
|
|
||||||
/** Key for JSON object - Main (Temperature, pressure, etc.) */
|
|
||||||
protected final String JSON_MAIN = "main";
|
|
||||||
/** Key for JSON array - Weather (Weather name, description, etc.) */
|
|
||||||
protected final String JSON_WEATHER = "weather";
|
|
||||||
/** Key for JSON object - Wind */
|
|
||||||
protected final String JSON_WIND = "wind";
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Key for JSON object - Clouds
|
||||||
|
*/
|
||||||
|
protected final String JSON_CLOUDS = "clouds";
|
||||||
|
/**
|
||||||
|
* Key for JSON object - Coordinates (Geographic coordinates)
|
||||||
|
*/
|
||||||
|
protected final String JSON_COORD = "coord";
|
||||||
|
/**
|
||||||
|
* Key for JSON object - Main (Temperature, pressure, etc.)
|
||||||
|
*/
|
||||||
|
protected final String JSON_MAIN = "main";
|
||||||
|
/**
|
||||||
|
* Key for JSON array - Weather (Weather name, description, etc.)
|
||||||
|
*/
|
||||||
|
protected final String JSON_WEATHER = "weather";
|
||||||
|
/**
|
||||||
|
* Key for JSON object - Wind
|
||||||
|
*/
|
||||||
|
protected final String JSON_WIND = "wind";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
************************
|
************************
|
||||||
* Defining sub-classes
|
* Defining sub-classes
|
||||||
************************
|
************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides default implementations for <code>Clouds</code>.
|
* This class provides default implementations for <code>Clouds</code>.
|
||||||
* Standard behaviors like the <code>has</code> and the <code>get</code>
|
* Standard behaviors like the <code>has</code> and the <code>get</code>
|
||||||
* methods for information about clouds (for example, percentage of
|
* methods for information about clouds (for example, percentage of clouds,
|
||||||
* clouds, etc.) are defined here.
|
* etc.) are defined here.
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/07/27
|
* @version 2013/07/27
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
abstract public static class Clouds {
|
abstract public static class Clouds {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Key for JSON variable <code>Clouds -> All</code>
|
* Key for JSON variable <code>Clouds -> All</code> (percentage of all
|
||||||
* (percentage of all clouds)
|
* clouds)
|
||||||
*/
|
*/
|
||||||
private final String JSON_CLOUDS_ALL = "all";
|
private final String JSON_CLOUDS_ALL = "all";
|
||||||
|
|
||||||
/** Percentage of all clouds */
|
/**
|
||||||
|
* Percentage of all clouds
|
||||||
|
*/
|
||||||
private final float percentOfClouds;
|
private final float percentOfClouds;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -89,9 +103,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about clouds
|
* @param jsonObj JSON object containing data about clouds
|
||||||
*/
|
*/
|
||||||
public Clouds(JSONObject jsonObj) {
|
public Clouds(JSONObject jsonObj) {
|
||||||
|
@ -100,7 +114,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for percentage of all clouds is available or not.
|
* Tells if the data for percentage of all clouds is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasPercentageOfClouds() {
|
public boolean hasPercentageOfClouds() {
|
||||||
return (this.percentOfClouds != Float.NaN);
|
return (this.percentOfClouds != Float.NaN);
|
||||||
|
@ -108,39 +124,49 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for percentage of all clouds.
|
* Returns data for percentage of all clouds.
|
||||||
* @return Percentage of all clouds if available,
|
* <p>
|
||||||
* otherwise <code>Float.NaN</code>, i.e., Not a Number.
|
* @return Percentage of all clouds if available, otherwise
|
||||||
|
* <code>Float.NaN</code>, i.e., Not a Number.
|
||||||
*/
|
*/
|
||||||
public float getPercentageOfClouds() {
|
public float getPercentageOfClouds() {
|
||||||
return this.percentOfClouds;
|
return this.percentOfClouds;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides default implementations for <code>Coord</code>.
|
* This class provides default implementations for <code>Coord</code>.
|
||||||
* Standard behaviors like the <code>has</code> and the <code>get</code>
|
* Standard behaviors like the <code>has</code> and the <code>get</code>
|
||||||
* methods for information about geographic coordinates (latitude
|
* methods for information about geographic coordinates (latitude and
|
||||||
* and longitude) are defined here.
|
* longitude) are defined here.
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/07/28
|
* @version 2013/07/28
|
||||||
*/
|
*/
|
||||||
abstract public static class Coord {
|
abstract public static class Coord {
|
||||||
/** Key for JSON variable <code>Coord -> Latitude</code> */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON variable <code>Coord -> Latitude</code>
|
||||||
|
*/
|
||||||
private final String JSON_COORD_LATITUDE = "lat";
|
private final String JSON_COORD_LATITUDE = "lat";
|
||||||
/** Key for JSON variable <code>Coord -> Longitude</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Coord -> Longitude</code>
|
||||||
|
*/
|
||||||
private final String JSON_COORD_LONGITUDE = "lon";
|
private final String JSON_COORD_LONGITUDE = "lon";
|
||||||
|
|
||||||
/** Latitude */
|
/**
|
||||||
|
* Latitude
|
||||||
|
*/
|
||||||
private final float lat;
|
private final float lat;
|
||||||
/** Longitude */
|
/**
|
||||||
|
* Longitude
|
||||||
|
*/
|
||||||
private final float lon;
|
private final float lon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -153,9 +179,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about coordinates
|
* @param jsonObj JSON object containing data about coordinates
|
||||||
*/
|
*/
|
||||||
public Coord(JSONObject jsonObj) {
|
public Coord(JSONObject jsonObj) {
|
||||||
|
@ -165,7 +191,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for latitude of the city is available or not.
|
* Tells if the data for latitude of the city is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasLatitude() {
|
public boolean hasLatitude() {
|
||||||
return (this.lat != Float.NaN);
|
return (this.lat != Float.NaN);
|
||||||
|
@ -173,7 +201,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for longitude of the city is available or not.
|
* Tells if the data for longitude of the city is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasLongitude() {
|
public boolean hasLongitude() {
|
||||||
return (this.lon != Float.NaN);
|
return (this.lon != Float.NaN);
|
||||||
|
@ -181,8 +211,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for latitude of the city.
|
* Returns data for latitude of the city.
|
||||||
* @return Latitude of the city if available,
|
* <p>
|
||||||
* otherwise <code>Float.NaN</code>, i.e., Not a Number.
|
* @return Latitude of the city if available, otherwise
|
||||||
|
* <code>Float.NaN</code>, i.e., Not a Number.
|
||||||
*/
|
*/
|
||||||
public float getLatitude() {
|
public float getLatitude() {
|
||||||
return this.lat;
|
return this.lat;
|
||||||
|
@ -190,52 +221,74 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for longitude of the city.
|
* Returns data for longitude of the city.
|
||||||
* @return Longitude of the city if available,
|
* <p>
|
||||||
* otherwise <code>Float.NaN</code>, i.e., Not a Number.
|
* @return Longitude of the city if available, otherwise
|
||||||
|
* <code>Float.NaN</code>, i.e., Not a Number.
|
||||||
*/
|
*/
|
||||||
public float getLongitude() {
|
public float getLongitude() {
|
||||||
return this.lon;
|
return this.lon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides default implementations for <code>Main</code>.
|
* This class provides default implementations for <code>Main</code>.
|
||||||
* Standard behaviors like the <code>has</code> and the <code>get</code>
|
* Standard behaviors like the <code>has</code> and the <code>get</code>
|
||||||
* methods for information about main weather elements (for example,
|
* methods for information about main weather elements (for example,
|
||||||
* temperature, pressure, humidity, etc.) are defined here.
|
* temperature, pressure, humidity, etc.) are defined here.
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/07/28
|
* @version 2013/07/28
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
abstract public static class Main {
|
abstract public static class Main {
|
||||||
/** Key for JSON variable <code>Main -> Temperature</code> */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON variable <code>Main -> Temperature</code>
|
||||||
|
*/
|
||||||
private final String JSON_MAIN_TEMP = "temp";
|
private final String JSON_MAIN_TEMP = "temp";
|
||||||
/** Key for JSON variable <code>Main -> Minimum temperature</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Main -> Minimum temperature</code>
|
||||||
|
*/
|
||||||
private final String JSON_MAIN_TEMP_MIN = "temp_min";
|
private final String JSON_MAIN_TEMP_MIN = "temp_min";
|
||||||
/** Key for JSON variable <code>Main -> Maximum temperature</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Main -> Maximum temperature</code>
|
||||||
|
*/
|
||||||
private final String JSON_MAIN_TEMP_MAX = "temp_max";
|
private final String JSON_MAIN_TEMP_MAX = "temp_max";
|
||||||
/** Key for JSON variable <code>Main -> Pressure</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Main -> Pressure</code>
|
||||||
|
*/
|
||||||
private final String JSON_MAIN_PRESSURE = "pressure";
|
private final String JSON_MAIN_PRESSURE = "pressure";
|
||||||
/** Key for JSON variable <code>Main -> Humidity</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Main -> Humidity</code>
|
||||||
|
*/
|
||||||
private final String JSON_MAIN_HUMIDITY = "humidity";
|
private final String JSON_MAIN_HUMIDITY = "humidity";
|
||||||
|
|
||||||
/** Temperature */
|
/**
|
||||||
|
* Temperature
|
||||||
|
*/
|
||||||
private final float temp;
|
private final float temp;
|
||||||
/** Minimum temperature */
|
/**
|
||||||
|
* Minimum temperature
|
||||||
|
*/
|
||||||
private final float minTemp;
|
private final float minTemp;
|
||||||
/** Maximum temperature */
|
/**
|
||||||
|
* Maximum temperature
|
||||||
|
*/
|
||||||
private final float maxTemp;
|
private final float maxTemp;
|
||||||
/** Pressure */
|
/**
|
||||||
|
* Pressure
|
||||||
|
*/
|
||||||
private final float pressure;
|
private final float pressure;
|
||||||
/** Humidity */
|
/**
|
||||||
|
* Humidity
|
||||||
|
*/
|
||||||
private final float humidity;
|
private final float humidity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -251,9 +304,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about main weather
|
* @param jsonObj JSON object containing data about main weather
|
||||||
* elements. For example, temperature, pressure, etc.
|
* elements. For example, temperature, pressure, etc.
|
||||||
*/
|
*/
|
||||||
|
@ -267,23 +320,31 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for temperature of the city is available or not.
|
* Tells if the data for temperature of the city is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasTemperature() {
|
public boolean hasTemperature() {
|
||||||
return (this.temp != Float.NaN);
|
return (this.temp != Float.NaN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for minimum temperature of the city is available or not.
|
* Tells if the data for minimum temperature of the city is available or
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* not.
|
||||||
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasMinTemperature() {
|
public boolean hasMinTemperature() {
|
||||||
return (this.minTemp != Float.NaN);
|
return (this.minTemp != Float.NaN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for maximum temperature of the city is available or not.
|
* Tells if the data for maximum temperature of the city is available or
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* not.
|
||||||
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasMaxTemperature() {
|
public boolean hasMaxTemperature() {
|
||||||
return (this.maxTemp != Float.NaN);
|
return (this.maxTemp != Float.NaN);
|
||||||
|
@ -291,7 +352,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for pressure of the city is available or not.
|
* Tells if the data for pressure of the city is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasPressure() {
|
public boolean hasPressure() {
|
||||||
return (this.pressure != Float.NaN);
|
return (this.pressure != Float.NaN);
|
||||||
|
@ -299,7 +362,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for humidity of the city is available or not.
|
* Tells if the data for humidity of the city is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasHumidity() {
|
public boolean hasHumidity() {
|
||||||
return (this.humidity != Float.NaN);
|
return (this.humidity != Float.NaN);
|
||||||
|
@ -307,8 +372,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for temperature of the city.
|
* Returns data for temperature of the city.
|
||||||
* @return Temperature of the city if available,
|
* <p>
|
||||||
* otherwise <code>Float.NaN</code>, i.e., Not a Number.
|
* @return Temperature of the city if available, otherwise
|
||||||
|
* <code>Float.NaN</code>, i.e., Not a Number.
|
||||||
*/
|
*/
|
||||||
public float getTemperature() {
|
public float getTemperature() {
|
||||||
return this.temp;
|
return this.temp;
|
||||||
|
@ -316,8 +382,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for minimum temperature of the city.
|
* Returns data for minimum temperature of the city.
|
||||||
* @return Minimum temperature of the city if available,
|
* <p>
|
||||||
* otherwise <code>Float.NaN</code>, i.e., Not a Number.
|
* @return Minimum temperature of the city if available, otherwise
|
||||||
|
* <code>Float.NaN</code>, i.e., Not a Number.
|
||||||
*/
|
*/
|
||||||
public float getMinTemperature() {
|
public float getMinTemperature() {
|
||||||
return this.minTemp;
|
return this.minTemp;
|
||||||
|
@ -325,8 +392,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for maximum temperature of the city.
|
* Returns data for maximum temperature of the city.
|
||||||
* @return Maximum temperature of the city if available,
|
* <p>
|
||||||
* otherwise <code>Float.NaN</code>, i.e., Not a Number.
|
* @return Maximum temperature of the city if available, otherwise
|
||||||
|
* <code>Float.NaN</code>, i.e., Not a Number.
|
||||||
*/
|
*/
|
||||||
public float getMaxTemperature() {
|
public float getMaxTemperature() {
|
||||||
return this.maxTemp;
|
return this.maxTemp;
|
||||||
|
@ -334,8 +402,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for pressure of the city.
|
* Returns data for pressure of the city.
|
||||||
* @return Pressure of the city if available,
|
* <p>
|
||||||
* otherwise <code>Float.NaN</code>, i.e., Not a Number.
|
* @return Pressure of the city if available, otherwise
|
||||||
|
* <code>Float.NaN</code>, i.e., Not a Number.
|
||||||
*/
|
*/
|
||||||
public float getPressure() {
|
public float getPressure() {
|
||||||
return this.pressure;
|
return this.pressure;
|
||||||
|
@ -343,48 +412,67 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for humidity of the city.
|
* Returns data for humidity of the city.
|
||||||
* @return Humidity of the city if available,
|
* <p>
|
||||||
* otherwise <code>Float.NaN</code>, i.e., Not a Number.
|
* @return Humidity of the city if available, otherwise
|
||||||
|
* <code>Float.NaN</code>, i.e., Not a Number.
|
||||||
*/
|
*/
|
||||||
public float getHumidity() {
|
public float getHumidity() {
|
||||||
return this.humidity;
|
return this.humidity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides default implementations for <code>Weather</code>.
|
* This class provides default implementations for <code>Weather</code>.
|
||||||
* Standard behaviors like the <code>has</code> and the <code>get</code>
|
* Standard behaviors like the <code>has</code> and the <code>get</code>
|
||||||
* methods for information about weather (for example, id, name,
|
* methods for information about weather (for example, id, name,
|
||||||
* description, icon, etc.) are defined here.
|
* description, icon, etc.) are defined here.
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/07/28
|
* @version 2013/07/28
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
abstract public static class Weather {
|
abstract public static class Weather {
|
||||||
/** Key for JSON variable in array <code>Weather -> ID</code> */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON variable in array <code>Weather -> ID</code>
|
||||||
|
*/
|
||||||
private final String JSON_WEATHER_ID = "id";
|
private final String JSON_WEATHER_ID = "id";
|
||||||
/** Key for JSON variable in array <code>Weather -> Main (name of weather)</code> */
|
/**
|
||||||
|
* Key for JSON variable in array
|
||||||
|
* <code>Weather -> Main (name of weather)</code>
|
||||||
|
*/
|
||||||
private final String JSON_WEATHER_MAIN = "main";
|
private final String JSON_WEATHER_MAIN = "main";
|
||||||
/** Key for JSON variable <code>Weather -> Description</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Weather -> Description</code>
|
||||||
|
*/
|
||||||
private final String JSON_WEATHER_DESCRIPTION = "description";
|
private final String JSON_WEATHER_DESCRIPTION = "description";
|
||||||
/** Key for JSON variable in array <code>Weather -> Icon</code> */
|
/**
|
||||||
|
* Key for JSON variable in array <code>Weather -> Icon</code>
|
||||||
|
*/
|
||||||
private final String JSON_WEATHER_ICON = "icon";
|
private final String JSON_WEATHER_ICON = "icon";
|
||||||
|
|
||||||
/** Weather ID */
|
/**
|
||||||
|
* Weather ID
|
||||||
|
*/
|
||||||
private final int id;
|
private final int id;
|
||||||
/** Weather name */
|
/**
|
||||||
|
* Weather name
|
||||||
|
*/
|
||||||
private final String name;
|
private final String name;
|
||||||
/** Weather description */
|
/**
|
||||||
|
* Weather description
|
||||||
|
*/
|
||||||
private final String description;
|
private final String description;
|
||||||
/** Weather icon */
|
/**
|
||||||
|
* Weather icon
|
||||||
|
*/
|
||||||
private final String icon;
|
private final String icon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -399,10 +487,11 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @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) {
|
||||||
this.id = jsonObj.optInt(this.JSON_WEATHER_ID, Integer.MIN_VALUE);
|
this.id = jsonObj.optInt(this.JSON_WEATHER_ID, Integer.MIN_VALUE);
|
||||||
|
@ -413,7 +502,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for weather's code is available or not.
|
* Tells if the data for weather's code is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasWeatherCode() {
|
public boolean hasWeatherCode() {
|
||||||
return (this.id != Integer.MIN_VALUE);
|
return (this.id != Integer.MIN_VALUE);
|
||||||
|
@ -421,7 +512,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for weather's name is available or not.
|
* Tells if the data for weather's name is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasWeatherName() {
|
public boolean hasWeatherName() {
|
||||||
return (this.name != null);
|
return (this.name != null);
|
||||||
|
@ -429,7 +522,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for weather's description is available or not.
|
* Tells if the data for weather's description is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasWeatherDescription() {
|
public boolean hasWeatherDescription() {
|
||||||
return (this.description != null);
|
return (this.description != null);
|
||||||
|
@ -437,7 +532,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for name of weather's icon is available or not.
|
* Tells if the data for name of weather's icon is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasWeatherIconName() {
|
public boolean hasWeatherIconName() {
|
||||||
return (this.icon != null);
|
return (this.icon != null);
|
||||||
|
@ -445,8 +542,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for code for weather of the city.
|
* Returns data for code for weather of the city.
|
||||||
* @return Code for weather of the city if available,
|
* <p>
|
||||||
* otherwise <code>Integer.MIN_VALUE</code>
|
* @return Code for weather of the city if available, otherwise
|
||||||
|
* <code>Integer.MIN_VALUE</code>
|
||||||
*/
|
*/
|
||||||
public int getWeatherCode() {
|
public int getWeatherCode() {
|
||||||
return this.id;
|
return this.id;
|
||||||
|
@ -454,8 +552,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for name for weather of the city.
|
* Returns data for name for weather of the city.
|
||||||
* @return Name for weather of the city if available,
|
* <p>
|
||||||
* otherwise <code>null</code>
|
* @return Name for weather of the city if available, otherwise
|
||||||
|
* <code>null</code>
|
||||||
*/
|
*/
|
||||||
public String getWeatherName() {
|
public String getWeatherName() {
|
||||||
return this.name;
|
return this.name;
|
||||||
|
@ -463,8 +562,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for description for weather of the city.
|
* Returns data for description for weather of the city.
|
||||||
* @return Description for weather of the city if available,
|
* <p>
|
||||||
* otherwise <code>null</code>
|
* @return Description for weather of the city if available, otherwise
|
||||||
|
* <code>null</code>
|
||||||
*/
|
*/
|
||||||
public String getWeatherDescription() {
|
public String getWeatherDescription() {
|
||||||
return this.description;
|
return this.description;
|
||||||
|
@ -472,40 +572,50 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for name of icon for weather of the city.
|
* Returns data for name of icon for weather of the city.
|
||||||
* @return Name of icon for weather of the city if available,
|
* <p>
|
||||||
* otherwise <code>null</code>
|
* @return Name of icon for weather of the city if available, otherwise
|
||||||
|
* <code>null</code>
|
||||||
*/
|
*/
|
||||||
public String getWeatherIconName() {
|
public String getWeatherIconName() {
|
||||||
return this.icon;
|
return this.icon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides default implementations for <code>Wind</code>.
|
* This class provides default implementations for <code>Wind</code>.
|
||||||
* Standard behaviors like the <code>has</code> and the <code>get</code>
|
* Standard behaviors like the <code>has</code> and the <code>get</code>
|
||||||
* methods for information about wind (for example, speed, degree,
|
* methods for information about wind (for example, speed, degree, etc.) are
|
||||||
* etc.) are defined here.
|
* defined here.
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/07/28
|
* @version 2013/07/28
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
abstract public static class Wind {
|
abstract public static class Wind {
|
||||||
/** Key for JSON variable <code>Wind -> Speed</code> */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON variable <code>Wind -> Speed</code>
|
||||||
|
*/
|
||||||
private final String JSON_WIND_SPEED = "speed";
|
private final String JSON_WIND_SPEED = "speed";
|
||||||
/** Key for JSON variable <code>Wind -> Degree</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Wind -> Degree</code>
|
||||||
|
*/
|
||||||
private final String JSON_WIND_DEGREE = "deg";
|
private final String JSON_WIND_DEGREE = "deg";
|
||||||
|
|
||||||
/** Wind speed */
|
/**
|
||||||
|
* Wind speed
|
||||||
|
*/
|
||||||
private final float speed;
|
private final float speed;
|
||||||
/** Wind degree (direction of wind) */
|
/**
|
||||||
|
* Wind degree (direction of wind)
|
||||||
|
*/
|
||||||
private final float degree;
|
private final float degree;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -518,9 +628,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about wind
|
* @param jsonObj JSON object containing data about wind
|
||||||
*/
|
*/
|
||||||
public Wind(JSONObject jsonObj) {
|
public Wind(JSONObject jsonObj) {
|
||||||
|
@ -530,16 +640,20 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for speed of wind in the city is available or not.
|
* Tells if the data for speed of wind in the city is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasWindSpeed() {
|
public boolean hasWindSpeed() {
|
||||||
return (this.speed != Float.NaN);
|
return (this.speed != Float.NaN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for degree (degree gives direction) of wind
|
* Tells if the data for degree (degree gives direction) of wind in the
|
||||||
* in the city is available or not.
|
* city is available or not.
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* <p>
|
||||||
|
* @return <code>true</code> if data available, otherwise
|
||||||
|
* <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasWindDegree() {
|
public boolean hasWindDegree() {
|
||||||
return (this.hasWindSpeed() && (this.degree != Float.NaN));
|
return (this.hasWindSpeed() && (this.degree != Float.NaN));
|
||||||
|
@ -547,8 +661,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for speed of wind in the city.
|
* Returns data for speed of wind in the city.
|
||||||
* @return Speed of wind in the city if available,
|
* <p>
|
||||||
* otherwise <code>Float.NaN</code>, i.e., Not a Number.
|
* @return Speed of wind in the city if available, otherwise
|
||||||
|
* <code>Float.NaN</code>, i.e., Not a Number.
|
||||||
*/
|
*/
|
||||||
public float getWindSpeed() {
|
public float getWindSpeed() {
|
||||||
return this.speed;
|
return this.speed;
|
||||||
|
@ -556,34 +671,36 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for degree of wind in the city.
|
* Returns data for degree of wind in the city.
|
||||||
* @return Degree of wind in the city if available,
|
* <p>
|
||||||
* otherwise <code>Float.NaN</code>, i.e., Not a Number.
|
* @return Degree of wind in the city if available, otherwise
|
||||||
|
* <code>Float.NaN</code>, i.e., Not a Number.
|
||||||
*/
|
*/
|
||||||
public float getWindDegree() {
|
public float getWindDegree() {
|
||||||
return this.degree;
|
return this.degree;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
***********************
|
***********************
|
||||||
* Declaring this class
|
* Declaring this class
|
||||||
***********************
|
***********************
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
/** Key for JSON variable Date-Time (date & time of the weather) */
|
* Key for JSON variable Date-Time (date & time of the weather)
|
||||||
|
*/
|
||||||
private final String JSON_DATE_TIME = "dt";
|
private final String JSON_DATE_TIME = "dt";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Date and time of the weather. This is answer for the question that
|
* Date and time of the weather. This is answer for the question that when
|
||||||
* when is/will be this weather.
|
* is/will be this weather.
|
||||||
*/
|
*/
|
||||||
private final Date dateTime;
|
private final Date dateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -595,9 +712,9 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing weather data
|
* @param jsonObj JSON object containing weather data
|
||||||
*/
|
*/
|
||||||
public AbstractWeatherData(JSONObject jsonObj) {
|
public AbstractWeatherData(JSONObject jsonObj) {
|
||||||
|
@ -621,6 +738,7 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the data for date and time of this weather is available or not.
|
* Tells if the data for date and time of this weather is available or not.
|
||||||
|
* <p>
|
||||||
* @return <code>true</code> if data available, otherwise <code>false</code>
|
* @return <code>true</code> if data available, otherwise <code>false</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasDateTime() {
|
public boolean hasDateTime() {
|
||||||
|
@ -629,6 +747,7 @@ abstract public class AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns data for date and time of this weather.
|
* Returns data for date and time of this weather.
|
||||||
|
* <p>
|
||||||
* @return Date and time (in object of {@link java.util.Date}) if available,
|
* @return Date and time (in object of {@link java.util.Date}) if available,
|
||||||
* otherwise <code>null</code>
|
* otherwise <code>null</code>
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -29,58 +29,62 @@ import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses current weather data (from the JSON data) and provides methods
|
* Parses current weather data (from the JSON data) and provides methods to
|
||||||
* to get/access the information about current weather.
|
* get/access the information about current weather. This class provides
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>has</code> and <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e., if
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* the data was available (successfully downloaded) and was parsed correctly.
|
||||||
* downloaded) and was parsed correctly.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <code>get</code> methods can be used to access the data, if the data exists,
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* otherwise <code>get</code> methods will give value as per following
|
||||||
* following basis:<br>
|
* basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public class CurrentWeatherData extends AbstractWeatherData {
|
public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
/** Key for JSON object - Rain */
|
|
||||||
private final String JSON_RAIN = "rain";
|
|
||||||
/** Key for JSON object - Sys */
|
|
||||||
private final String JSON_SYS = "sys";
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Key for JSON object - Rain
|
||||||
|
*/
|
||||||
|
private final String JSON_RAIN = "rain";
|
||||||
|
/**
|
||||||
|
* Key for JSON object - Sys
|
||||||
|
*/
|
||||||
|
private final String JSON_SYS = "sys";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
************************
|
************************
|
||||||
* Declaring sub-classes
|
* Declaring sub-classes
|
||||||
************************
|
************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about clouds (from the JSON data) and provides methods
|
* Parses data about clouds (from the JSON data) and provides methods to
|
||||||
* to get/access the information.
|
* get/access the information. This class provides <code>has</code> and
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e.,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* if the data was available (successfully downloaded) and was parsed
|
||||||
* downloaded) and was parsed correctly.
|
* correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -89,8 +93,9 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -102,9 +107,9 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about clouds
|
* @param jsonObj JSON object containing data about clouds
|
||||||
*/
|
*/
|
||||||
public Clouds(JSONObject jsonObj) {
|
public Clouds(JSONObject jsonObj) {
|
||||||
|
@ -112,25 +117,25 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about geographic coordinates (from the JSON data)
|
* Parses data about geographic coordinates (from the JSON data) and
|
||||||
* and provides methods to get/access the information.
|
* provides methods to get/access the information. This class provides
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>has</code> and <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e.,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* if the data was available (successfully downloaded) and was parsed
|
||||||
* downloaded) and was parsed correctly.
|
* correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -139,8 +144,9 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -152,9 +158,9 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about coordinates
|
* @param jsonObj JSON object containing data about coordinates
|
||||||
*/
|
*/
|
||||||
public Coord(JSONObject jsonObj) {
|
public Coord(JSONObject jsonObj) {
|
||||||
|
@ -162,25 +168,25 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about main weather elements (from the JSON data) and
|
* Parses data about main weather elements (from the JSON data) and provides
|
||||||
* provides methods to get/access the information.
|
* methods to get/access the information. This class provides
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>has</code> and <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e.,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* if the data was available (successfully downloaded) and was parsed
|
||||||
* downloaded) and was parsed correctly.
|
* correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -189,8 +195,9 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -202,51 +209,57 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about main
|
* @param jsonObj JSON object containing data about main weather
|
||||||
* weather elements (temperature, pressure, etc.)
|
* elements (temperature, pressure, etc.)
|
||||||
*/
|
*/
|
||||||
public Main(JSONObject jsonObj) {
|
public Main(JSONObject jsonObj) {
|
||||||
super(jsonObj);
|
super(jsonObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about rain (from the JSON data) and provides methods
|
* Parses data about rain (from the JSON data) and provides methods to
|
||||||
* to get/access the information.
|
* get/access the information. This class provides <code>has</code> and
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e.,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* if the data was available (successfully downloaded) and was parsed
|
||||||
* downloaded) and was parsed correctly.
|
* correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public static class Rain {
|
public static class Rain {
|
||||||
/** Key for JSON variable <code>Rain -> Rain per 3 hours</code> */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON variable <code>Rain -> Rain per 3 hours</code>
|
||||||
|
*/
|
||||||
private final String JSON_RAIN_3HOURS = "3h";
|
private final String JSON_RAIN_3HOURS = "3h";
|
||||||
|
|
||||||
/** Rain per 3 hours */
|
/**
|
||||||
|
* Rain per 3 hours
|
||||||
|
*/
|
||||||
private final float rain3h;
|
private final float rain3h;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -258,9 +271,9 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about rain
|
* @param jsonObj JSON object containing data about rain
|
||||||
*/
|
*/
|
||||||
public Rain(JSONObject jsonObj) {
|
public Rain(JSONObject jsonObj) {
|
||||||
|
@ -276,48 +289,62 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about country, sunrise, and sunset (from the JSON data)
|
* Parses data about country, sunrise, and sunset (from the JSON data) and
|
||||||
* and provides methods to get/access the information.
|
* provides methods to get/access the information. This class provides
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>has</code> and <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e.,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* if the data was available (successfully downloaded) and was parsed
|
||||||
* downloaded) and was parsed correctly.
|
* correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public static class Sys {
|
public static class Sys {
|
||||||
/** Key for JSON variable <code>Sys -> Country</code> */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON variable <code>Sys -> Country</code>
|
||||||
|
*/
|
||||||
private final String JSON_SYS_COUNTRY_CODE = "country";
|
private final String JSON_SYS_COUNTRY_CODE = "country";
|
||||||
/** Key for JSON variable <code>Sys -> Sunrise</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Sys -> Sunrise</code>
|
||||||
|
*/
|
||||||
private final String JSON_SYS_SUNRISE = "sunrise";
|
private final String JSON_SYS_SUNRISE = "sunrise";
|
||||||
/** Key for JSON variable <code>Sys -> Sunset</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Sys -> Sunset</code>
|
||||||
|
*/
|
||||||
private final String JSON_SYS_SUNSET = "sunset";
|
private final String JSON_SYS_SUNSET = "sunset";
|
||||||
|
|
||||||
/** Country code for the city */
|
/**
|
||||||
|
* Country code for the city
|
||||||
|
*/
|
||||||
private final String countryCode;
|
private final String countryCode;
|
||||||
/** Sunrise time */
|
/**
|
||||||
|
* Sunrise time
|
||||||
|
*/
|
||||||
private final Date sunrise;
|
private final Date sunrise;
|
||||||
/** Sunset time */
|
/**
|
||||||
|
* Sunset time
|
||||||
|
*/
|
||||||
private final Date sunset;
|
private final Date sunset;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -331,9 +358,9 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about country, sunrise,
|
* @param jsonObj JSON object containing data about country, sunrise,
|
||||||
* and sunset.
|
* and sunset.
|
||||||
*/
|
*/
|
||||||
|
@ -342,14 +369,28 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
|
|
||||||
long sr_secs = jsonObj.optLong(this.JSON_SYS_SUNRISE, Long.MIN_VALUE);
|
long sr_secs = jsonObj.optLong(this.JSON_SYS_SUNRISE, Long.MIN_VALUE);
|
||||||
if (sr_secs != 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 {
|
} else {
|
||||||
this.sunrise = null;
|
this.sunrise = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
long ss_secs = jsonObj.optLong(this.JSON_SYS_SUNSET, Long.MIN_VALUE);
|
long ss_secs = jsonObj.optLong(this.JSON_SYS_SUNSET, Long.MIN_VALUE);
|
||||||
if (ss_secs != 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 {
|
} else {
|
||||||
this.sunset = null;
|
this.sunset = null;
|
||||||
}
|
}
|
||||||
|
@ -380,25 +421,25 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about weather code, name, etc. (from the JSON data)
|
* Parses data about weather code, name, etc. (from the JSON data) and
|
||||||
* and provides methods to get/access the information.
|
* provides methods to get/access the information. This class provides
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>has</code> and <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e.,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* if the data was available (successfully downloaded) and was parsed
|
||||||
* downloaded) and was parsed correctly.
|
* correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -407,83 +448,91 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*/
|
*/
|
||||||
public Weather () {
|
public Weather() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @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);
|
super(jsonObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about winds (from the JSON data) and provides methods
|
* Parses data about winds (from the JSON data) and provides methods to
|
||||||
* to get/access the information.
|
* get/access the information. This class provides <code>has</code> and
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e.,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* if the data was available (successfully downloaded) and was parsed
|
||||||
* downloaded) and was parsed correctly.
|
* correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public static class Wind extends AbstractWeatherData.Wind {
|
public static class Wind extends AbstractWeatherData.Wind {
|
||||||
/** Key for JSON variable <code>Wind -> Gust</code> */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON variable <code>Wind -> Gust</code>
|
||||||
|
*/
|
||||||
private final String JSON_WIND_GUST = "gust";
|
private final String JSON_WIND_GUST = "gust";
|
||||||
|
|
||||||
/** Wind gust */
|
/**
|
||||||
|
* Wind gust
|
||||||
|
*/
|
||||||
private final float gust;
|
private final float gust;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*/
|
*/
|
||||||
public Wind () {
|
public Wind() {
|
||||||
super ();
|
super();
|
||||||
|
|
||||||
this.gust = Float.NaN;
|
this.gust = Float.NaN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about wind
|
* @param jsonObj JSON object containing data about wind
|
||||||
*/
|
*/
|
||||||
public Wind (JSONObject jsonObj) {
|
public Wind(JSONObject jsonObj) {
|
||||||
super (jsonObj);
|
super(jsonObj);
|
||||||
|
|
||||||
this.gust = (float) jsonObj.optDouble(this.JSON_WIND_GUST, Double.NaN);
|
this.gust = (float) jsonObj.optDouble(this.JSON_WIND_GUST, Double.NaN);
|
||||||
}
|
}
|
||||||
|
@ -497,29 +546,43 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
***********************
|
***********************
|
||||||
* Declaring this class
|
* Declaring this class
|
||||||
***********************
|
***********************
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
/** Key for JSON variable <code>Base</code> */
|
* Key for JSON variable <code>Base</code>
|
||||||
|
*/
|
||||||
private final String JSON_BASE = "base";
|
private final String JSON_BASE = "base";
|
||||||
/** Key for JSON variable <code>City code (ID)</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>City code (ID)</code>
|
||||||
|
*/
|
||||||
private final String JSON_CITY_ID = "id";
|
private final String JSON_CITY_ID = "id";
|
||||||
/** Key for JSON variable <code>City name</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>City name</code>
|
||||||
|
*/
|
||||||
private final String JSON_CITY_NAME = "name";
|
private final String JSON_CITY_NAME = "name";
|
||||||
/** Key for JSON variable <code>Response code</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Response code</code>
|
||||||
|
*/
|
||||||
private final String JSON_RESPONSE_CODE = "cod";
|
private final String JSON_RESPONSE_CODE = "cod";
|
||||||
|
|
||||||
/** Base */
|
/**
|
||||||
|
* Base
|
||||||
|
*/
|
||||||
private final String base;
|
private final String base;
|
||||||
/** City code (ID) */
|
/**
|
||||||
|
* City code (ID)
|
||||||
|
*/
|
||||||
private final long cityID;
|
private final long cityID;
|
||||||
/** City name */
|
/**
|
||||||
|
* City name
|
||||||
|
*/
|
||||||
private final String cityName;
|
private final String cityName;
|
||||||
/** Response code */
|
/**
|
||||||
|
* Response code
|
||||||
|
*/
|
||||||
private final int responseCode;
|
private final int responseCode;
|
||||||
|
|
||||||
private final Clouds clouds;
|
private final Clouds clouds;
|
||||||
|
@ -529,16 +592,20 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
private final Sys sys;
|
private final Sys sys;
|
||||||
private final Wind wind;
|
private final Wind wind;
|
||||||
|
|
||||||
/** List of weather information (code, name, etc.) */
|
/**
|
||||||
|
* List of weather information (code, name, etc.)
|
||||||
|
*/
|
||||||
private final List<Weather> weatherList;
|
private final List<Weather> weatherList;
|
||||||
/** Count (number) of elements in list of weather information */
|
/**
|
||||||
|
* Count (number) of elements in list of weather information
|
||||||
|
*/
|
||||||
private final int weatherListCount;
|
private final int weatherListCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing current weather data
|
* @param jsonObj JSON object containing current weather data
|
||||||
*/
|
*/
|
||||||
public CurrentWeatherData(JSONObject jsonObj) {
|
public CurrentWeatherData(JSONObject jsonObj) {
|
||||||
|
@ -568,7 +635,7 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
this.weatherList = (jsonArrWeather != null) ? new ArrayList<Weather>(jsonArrWeather.length()) : Collections.EMPTY_LIST;
|
this.weatherList = (jsonArrWeather != null) ? new ArrayList<Weather>(jsonArrWeather.length()) : Collections.EMPTY_LIST;
|
||||||
if (this.weatherList != Collections.EMPTY_LIST) {
|
if (this.weatherList != Collections.EMPTY_LIST) {
|
||||||
for (int i = 0; i < jsonArrWeather.length(); i++) {
|
for (int i = 0; i < jsonArrWeather.length(); i++) {
|
||||||
JSONObject jsonObjWeather = jsonArrWeather.optJSONObject (i);
|
JSONObject jsonObjWeather = jsonArrWeather.optJSONObject(i);
|
||||||
if (jsonObjWeather != null) {
|
if (jsonObjWeather != null) {
|
||||||
this.weatherList.add(new Weather(jsonObjWeather));
|
this.weatherList.add(new Weather(jsonObjWeather));
|
||||||
}
|
}
|
||||||
|
@ -613,7 +680,6 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Objects
|
// Objects
|
||||||
|
|
||||||
public Clouds getClouds_Object() {
|
public Clouds getClouds_Object() {
|
||||||
return this.clouds;
|
return this.clouds;
|
||||||
}
|
}
|
||||||
|
@ -639,7 +705,6 @@ public class CurrentWeatherData extends AbstractWeatherData {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lists
|
// Lists
|
||||||
|
|
||||||
public boolean hasWeather_List() {
|
public boolean hasWeather_List() {
|
||||||
return (this.weatherListCount != 0);
|
return (this.weatherListCount != 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,87 +28,96 @@ import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses daily forecast data (from the JSON data) and provides methods
|
* Parses daily forecast data (from the JSON data) and provides methods to
|
||||||
* to get/access the information about daily forecasted weather.
|
* get/access the information about daily forecasted weather. This class
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* provides <code>has</code> and <code>get</code> methods to access the
|
||||||
* to access the information.
|
* information.
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <p>
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* <code>has</code> methods can be used to check if the data exists, i.e., if
|
||||||
* downloaded) and was parsed correctly.
|
* the data was available (successfully downloaded) and was parsed correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* <code>get</code> methods can be used to access the data, if the data exists,
|
||||||
* following basis:<br>
|
* otherwise <code>get</code> methods will give value as per following
|
||||||
|
* basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Objects: Data initialized with default/non-parameterized constructor<br>
|
* Objects: Data initialized with default/non-parameterized constructor<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public class DailyForecastData {
|
public class DailyForecastData {
|
||||||
/** Key for JSON object - City */
|
|
||||||
private final String JSON_CITY = "city";
|
|
||||||
/** Key for JSON object - List of forecasts */
|
|
||||||
private final String JSON_FORECAST_LIST = "list";
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Key for JSON object - City
|
||||||
|
*/
|
||||||
|
private final String JSON_CITY = "city";
|
||||||
|
/**
|
||||||
|
* Key for JSON object - List of forecasts
|
||||||
|
*/
|
||||||
|
private final String JSON_FORECAST_LIST = "list";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
************************
|
************************
|
||||||
* Declaring sub-classes
|
* Declaring sub-classes
|
||||||
************************
|
************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about city (from the JSON data)
|
* Parses data about city (from the JSON data) and provides methods to
|
||||||
* and provides methods to get/access the information.
|
* get/access the information. For example, city name, coordinates, country
|
||||||
* For example, city name, coordinates, country name, population, etc.
|
* name, population, etc. This class provides <code>has</code> and
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e.,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* if the data was available (successfully downloaded) and was parsed
|
||||||
* downloaded) and was parsed correctly.
|
* correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public static class City {
|
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)
|
* Key for JSON object - Coordinates
|
||||||
* and provides methods to get/access the information.
|
*/
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
private final String JSON_CITY_COORD = "coord";
|
||||||
* to access the information.
|
|
||||||
*
|
/**
|
||||||
* <p><code>has</code> methods can be used to check
|
* Parses data about geographic coordinates (from the JSON data) and
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* provides methods to get/access the information. This class provides
|
||||||
* downloaded) and was parsed correctly.
|
* <code>has</code> and <code>get</code> methods to access the
|
||||||
*
|
* information.
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <p>
|
||||||
|
* <code>has</code> methods can be used to check if the data exists,
|
||||||
|
* i.e., if the data was available (successfully downloaded) and was
|
||||||
|
* parsed correctly.
|
||||||
|
* <p>
|
||||||
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -117,8 +126,9 @@ public class DailyForecastData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -130,9 +140,9 @@ public class DailyForecastData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about clouds
|
* @param jsonObj JSON object containing data about clouds
|
||||||
*/
|
*/
|
||||||
public Coord(JSONObject jsonObj) {
|
public Coord(JSONObject jsonObj) {
|
||||||
|
@ -140,31 +150,47 @@ public class DailyForecastData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
/** Key for JSON variable <code>City code (ID)</code> */
|
* Key for JSON variable <code>City code (ID)</code>
|
||||||
|
*/
|
||||||
private final String JSON_CITY_ID = "id";
|
private final String JSON_CITY_ID = "id";
|
||||||
/** Key for JSON variable <code>City name</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>City name</code>
|
||||||
|
*/
|
||||||
private final String JSON_CITY_NAME = "name";
|
private final String JSON_CITY_NAME = "name";
|
||||||
/** Key for JSON variable <code>Country code of city</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Country code of city</code>
|
||||||
|
*/
|
||||||
private final String JSON_CITY_COUNTRY_CODE = "country";
|
private final String JSON_CITY_COUNTRY_CODE = "country";
|
||||||
/** Key for JSON variable <code>Population of city</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Population of city</code>
|
||||||
|
*/
|
||||||
private final String JSON_CITY_POPULATION = "population";
|
private final String JSON_CITY_POPULATION = "population";
|
||||||
|
|
||||||
/** City code (ID) */
|
/**
|
||||||
|
* City code (ID)
|
||||||
|
*/
|
||||||
private final long cityID;
|
private final long cityID;
|
||||||
/** City name */
|
/**
|
||||||
|
* City name
|
||||||
|
*/
|
||||||
private final String cityName;
|
private final String cityName;
|
||||||
/** Country code of city */
|
/**
|
||||||
|
* Country code of city
|
||||||
|
*/
|
||||||
private final String countryCode;
|
private final String countryCode;
|
||||||
/** Population of city */
|
/**
|
||||||
|
* Population of city
|
||||||
|
*/
|
||||||
private final long population;
|
private final long population;
|
||||||
|
|
||||||
private final Coord coord;
|
private final Coord coord;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -181,9 +207,9 @@ public class DailyForecastData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about city
|
* @param jsonObj JSON object containing data about city
|
||||||
*/
|
*/
|
||||||
public City(JSONObject jsonObj) {
|
public City(JSONObject jsonObj) {
|
||||||
|
@ -229,37 +255,39 @@ public class DailyForecastData {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Objects
|
// Objects
|
||||||
|
|
||||||
public Coord getCoordinates_Object() {
|
public Coord getCoordinates_Object() {
|
||||||
return this.coord;
|
return this.coord;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about forecasts (from the JSON data)
|
* Parses data about forecasts (from the JSON data) and provides methods to
|
||||||
* and provides methods to get/access the information.
|
* get/access the information. This class provides <code>has</code> and
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e.,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* if the data was available (successfully downloaded) and was parsed
|
||||||
* downloaded) and was parsed correctly.
|
* correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public static class Forecast extends AbstractWeatherData {
|
public static class Forecast extends AbstractWeatherData {
|
||||||
/** Key for JSON object - Temperature */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON object - Temperature
|
||||||
|
*/
|
||||||
public final String JSON_TEMP = "temp";
|
public final String JSON_TEMP = "temp";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -267,26 +295,26 @@ public class DailyForecastData {
|
||||||
* Declaring sub-sub-classes
|
* Declaring sub-sub-classes
|
||||||
***************************
|
***************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about weather (from the JSON data)
|
* Parses data about weather (from the JSON data) and provides methods
|
||||||
* and provides methods to get/access the information.
|
* to get/access the information. For example, weather id, name, etc.
|
||||||
* For example, weather id, name, etc.
|
* This class provides <code>has</code> and <code>get</code> methods to
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* i.e., if the data was available (successfully downloaded) and was
|
||||||
* downloaded) and was parsed correctly.
|
* parsed correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -295,83 +323,111 @@ public class DailyForecastData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*/
|
*/
|
||||||
public Weather () {
|
public Weather() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about weather
|
* @param jsonObj JSON object containing data about weather
|
||||||
*/
|
*/
|
||||||
public Weather (JSONObject jsonObj) {
|
public Weather(JSONObject jsonObj) {
|
||||||
super(jsonObj);
|
super(jsonObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about temperature (from the JSON data)
|
* Parses data about temperature (from the JSON data) and provides
|
||||||
* and provides methods to get/access the information.
|
* methods to get/access the information. For example, weather id, name,
|
||||||
* For example, weather id, name, etc.
|
* etc. This class provides <code>has</code> and <code>get</code>
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* i.e., if the data was available (successfully downloaded) and was
|
||||||
* downloaded) and was parsed correctly.
|
* parsed correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public static class Temperature {
|
public static class Temperature {
|
||||||
/** Key for JSON variable <code>Temp -> Day</code> */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON variable <code>Temp -> Day</code>
|
||||||
|
*/
|
||||||
public final String JSON_TEMP_DAY = "day";
|
public final String JSON_TEMP_DAY = "day";
|
||||||
/** Key for JSON variable <code>Temp -> Minimum</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Temp -> Minimum</code>
|
||||||
|
*/
|
||||||
public final String JSON_TEMP_MIN = "min";
|
public final String JSON_TEMP_MIN = "min";
|
||||||
/** Key for JSON variable <code>Temp -> Maximum</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Temp -> Maximum</code>
|
||||||
|
*/
|
||||||
public final String JSON_TEMP_MAX = "max";
|
public final String JSON_TEMP_MAX = "max";
|
||||||
/** Key for JSON variable <code>Temp -> Night</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Temp -> Night</code>
|
||||||
|
*/
|
||||||
public final String JSON_TEMP_NIGHT = "night";
|
public final String JSON_TEMP_NIGHT = "night";
|
||||||
/** Key for JSON variable <code>Temp -> Evening</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Temp -> Evening</code>
|
||||||
|
*/
|
||||||
public final String JSON_TEMP_EVENING = "eve";
|
public final String JSON_TEMP_EVENING = "eve";
|
||||||
/** Key for JSON variable <code>Temp -> Morning</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Temp -> Morning</code>
|
||||||
|
*/
|
||||||
public final String JSON_TEMP_MORNING = "morn";
|
public final String JSON_TEMP_MORNING = "morn";
|
||||||
|
|
||||||
/** Day temperature */
|
/**
|
||||||
|
* Day temperature
|
||||||
|
*/
|
||||||
private final float dayTemp;
|
private final float dayTemp;
|
||||||
/** Minimum temperature */
|
/**
|
||||||
|
* Minimum temperature
|
||||||
|
*/
|
||||||
private final float minTemp;
|
private final float minTemp;
|
||||||
/** Maximum temperature */
|
/**
|
||||||
|
* Maximum temperature
|
||||||
|
*/
|
||||||
private final float maxTemp;
|
private final float maxTemp;
|
||||||
/** Night temperature */
|
/**
|
||||||
|
* Night temperature
|
||||||
|
*/
|
||||||
private final float nightTemp;
|
private final float nightTemp;
|
||||||
/** Evening temperature */
|
/**
|
||||||
|
* Evening temperature
|
||||||
|
*/
|
||||||
private final float eveTemp;
|
private final float eveTemp;
|
||||||
/** Morning temperature */
|
/**
|
||||||
|
* Morning temperature
|
||||||
|
*/
|
||||||
private final float mornTemp;
|
private final float mornTemp;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -388,9 +444,9 @@ public class DailyForecastData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about temperature
|
* @param jsonObj JSON object containing data about temperature
|
||||||
*/
|
*/
|
||||||
public Temperature(JSONObject jsonObj) {
|
public Temperature(JSONObject jsonObj) {
|
||||||
|
@ -456,40 +512,64 @@ public class DailyForecastData {
|
||||||
* Declaring this sub-class
|
* Declaring this sub-class
|
||||||
************************
|
************************
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
/** Key for JSON variable <code>Pressure</code> */
|
* Key for JSON variable <code>Pressure</code>
|
||||||
|
*/
|
||||||
private final String JSON_FORECAST_PRESSURE = "pressure";
|
private final String JSON_FORECAST_PRESSURE = "pressure";
|
||||||
/** Key for JSON variable <code>Humidity</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Humidity</code>
|
||||||
|
*/
|
||||||
private final String JSON_FORECAST_HUMIDITY = "humidity";
|
private final String JSON_FORECAST_HUMIDITY = "humidity";
|
||||||
/** Key for JSON variable <code>Wind speed</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Wind speed</code>
|
||||||
|
*/
|
||||||
private final String JSON_FORECAST_WIND_SPEED = "speed";
|
private final String JSON_FORECAST_WIND_SPEED = "speed";
|
||||||
/** Key for JSON variable <code>Wind degree</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Wind degree</code>
|
||||||
|
*/
|
||||||
private final String JSON_FORECAST_WIND_DEGREE = "deg";
|
private final String JSON_FORECAST_WIND_DEGREE = "deg";
|
||||||
/** Key for JSON variable <code>Percentage of clouds</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Percentage of clouds</code>
|
||||||
|
*/
|
||||||
private final String JSON_FORECAST_CLOUDS = "clouds";
|
private final String JSON_FORECAST_CLOUDS = "clouds";
|
||||||
|
|
||||||
/** Pressure */
|
/**
|
||||||
|
* Pressure
|
||||||
|
*/
|
||||||
private final float pressure;
|
private final float pressure;
|
||||||
/** Humidity */
|
/**
|
||||||
|
* Humidity
|
||||||
|
*/
|
||||||
private final float humidity;
|
private final float humidity;
|
||||||
/** Wind speed */
|
/**
|
||||||
|
* Wind speed
|
||||||
|
*/
|
||||||
private final float windSpeed;
|
private final float windSpeed;
|
||||||
/** Wind degree */
|
/**
|
||||||
|
* Wind degree
|
||||||
|
*/
|
||||||
private final float windDegree;
|
private final float windDegree;
|
||||||
/** Percentage of clouds */
|
/**
|
||||||
|
* Percentage of clouds
|
||||||
|
*/
|
||||||
private final float cloudsPercent;
|
private final float cloudsPercent;
|
||||||
|
|
||||||
private final Temperature temp;
|
private final Temperature temp;
|
||||||
|
|
||||||
/** List of weather information (code, name, etc.) */
|
/**
|
||||||
|
* List of weather information (code, name, etc.)
|
||||||
|
*/
|
||||||
private final List<Weather> weatherList;
|
private final List<Weather> weatherList;
|
||||||
/** Count (number) of elements in list of weather information */
|
/**
|
||||||
|
* Count (number) of elements in list of weather information
|
||||||
|
*/
|
||||||
private final int weatherListCount;
|
private final int weatherListCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -512,9 +592,9 @@ public class DailyForecastData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about forecasts
|
* @param jsonObj JSON object containing data about forecasts
|
||||||
*/
|
*/
|
||||||
public Forecast(JSONObject jsonObj) {
|
public Forecast(JSONObject jsonObj) {
|
||||||
|
@ -532,8 +612,8 @@ public class DailyForecastData {
|
||||||
JSONArray jsonArrWeather = (jsonObj != null) ? jsonObj.optJSONArray(this.JSON_WEATHER) : null;
|
JSONArray jsonArrWeather = (jsonObj != null) ? jsonObj.optJSONArray(this.JSON_WEATHER) : null;
|
||||||
this.weatherList = (jsonArrWeather != null) ? new ArrayList<Weather>(jsonArrWeather.length()) : Collections.EMPTY_LIST;
|
this.weatherList = (jsonArrWeather != null) ? new ArrayList<Weather>(jsonArrWeather.length()) : Collections.EMPTY_LIST;
|
||||||
if (this.weatherList != Collections.EMPTY_LIST) {
|
if (this.weatherList != Collections.EMPTY_LIST) {
|
||||||
for (int i = 0; i < jsonArrWeather.length (); i++) {
|
for (int i = 0; i < jsonArrWeather.length(); i++) {
|
||||||
JSONObject jsonObjWeather = jsonArrWeather.optJSONObject (i);
|
JSONObject jsonObjWeather = jsonArrWeather.optJSONObject(i);
|
||||||
if (jsonObjWeather != null) {
|
if (jsonObjWeather != null) {
|
||||||
this.weatherList.add(new Weather(jsonObjWeather));
|
this.weatherList.add(new Weather(jsonObjWeather));
|
||||||
}
|
}
|
||||||
|
@ -583,13 +663,11 @@ public class DailyForecastData {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Objects
|
// Objects
|
||||||
|
|
||||||
public Temperature getTemperature_Object() {
|
public Temperature getTemperature_Object() {
|
||||||
return this.temp;
|
return this.temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lists
|
// Lists
|
||||||
|
|
||||||
public boolean hasWeather_List() {
|
public boolean hasWeather_List() {
|
||||||
return (this.weatherListCount != 0);
|
return (this.weatherListCount != 0);
|
||||||
}
|
}
|
||||||
|
@ -603,39 +681,53 @@ public class DailyForecastData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
***********************
|
***********************
|
||||||
* Declaring this class
|
* Declaring this class
|
||||||
***********************
|
***********************
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
/** Key for JSON variable <code>Response code</code> */
|
* Key for JSON variable <code>Response code</code>
|
||||||
|
*/
|
||||||
private final String JSON_RESPONSE_CODE = "cod";
|
private final String JSON_RESPONSE_CODE = "cod";
|
||||||
/** Key for JSON variable <code>Response time</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Response time</code>
|
||||||
|
*/
|
||||||
private final String JSON_RESPONSE_TIME = "message";
|
private final String JSON_RESPONSE_TIME = "message";
|
||||||
/** Key for JSON variable <code>Forecast count</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Forecast count</code>
|
||||||
|
*/
|
||||||
private final String JSON_RESPONSE_FORECAST_COUNT = "cnt";
|
private final String JSON_RESPONSE_FORECAST_COUNT = "cnt";
|
||||||
|
|
||||||
/** Response code */
|
/**
|
||||||
|
* Response code
|
||||||
|
*/
|
||||||
private final String responseCode;
|
private final String responseCode;
|
||||||
/** Response time */
|
/**
|
||||||
|
* Response time
|
||||||
|
*/
|
||||||
private final float responseTime;
|
private final float responseTime;
|
||||||
/** Forecast count */
|
/**
|
||||||
|
* Forecast count
|
||||||
|
*/
|
||||||
private final int responseForecastCount;
|
private final int responseForecastCount;
|
||||||
|
|
||||||
private final City city;
|
private final City city;
|
||||||
|
|
||||||
/** List of forecast information */
|
/**
|
||||||
|
* List of forecast information
|
||||||
|
*/
|
||||||
private final List<Forecast> forecastList;
|
private final List<Forecast> forecastList;
|
||||||
/** Count (number) of elements in list of forecast information */
|
/**
|
||||||
|
* Count (number) of elements in list of forecast information
|
||||||
|
*/
|
||||||
private final int forecastListCount;
|
private final int forecastListCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about daily forecasts
|
* @param jsonObj JSON object containing data about daily forecasts
|
||||||
*/
|
*/
|
||||||
public DailyForecastData(JSONObject jsonObj) {
|
public DailyForecastData(JSONObject jsonObj) {
|
||||||
|
@ -684,13 +776,11 @@ public class DailyForecastData {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Objects
|
// Objects
|
||||||
|
|
||||||
public City getCity_Object() {
|
public City getCity_Object() {
|
||||||
return this.city;
|
return this.city;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lists
|
// Lists
|
||||||
|
|
||||||
public boolean hasForecast_List() {
|
public boolean hasForecast_List() {
|
||||||
return (this.forecastListCount != 0);
|
return (this.forecastListCount != 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,86 +28,95 @@ import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses forecast weather data (from the JSON data) and provides methods
|
* Parses forecast weather data (from the JSON data) and provides methods to
|
||||||
* to get/access the information about forecasted weather.
|
* get/access the information about forecasted weather. This class provides
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>has</code> and <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e., if
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* the data was available (successfully downloaded) and was parsed correctly.
|
||||||
* downloaded) and was parsed correctly.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <code>get</code> methods can be used to access the data, if the data exists,
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* otherwise <code>get</code> methods will give value as per following
|
||||||
* following basis:<br>
|
* basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Objects: Data initialized with default/non-parameterized constructor<br>
|
* Objects: Data initialized with default/non-parameterized constructor<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public class ForecastWeatherData {
|
public class ForecastWeatherData {
|
||||||
/** Key for JSON object - City */
|
|
||||||
private final String JSON_CITY = "city";
|
|
||||||
/** Key for JSON object - List of forecasts */
|
|
||||||
private final String JSON_FORECAST_LIST = "list";
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Key for JSON object - City
|
||||||
|
*/
|
||||||
|
private final String JSON_CITY = "city";
|
||||||
|
/**
|
||||||
|
* Key for JSON object - List of forecasts
|
||||||
|
*/
|
||||||
|
private final String JSON_FORECAST_LIST = "list";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
************************
|
************************
|
||||||
* Declaring sub-classes
|
* Declaring sub-classes
|
||||||
************************
|
************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about city (from the JSON data)
|
* Parses data about city (from the JSON data) and provides methods to
|
||||||
* and provides methods to get/access the information.
|
* get/access the information. For example, city name, coordinates, country
|
||||||
* For example, city name, coordinates, country name, population, etc.
|
* name, population, etc. This class provides <code>has</code> and
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e.,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* if the data was available (successfully downloaded) and was parsed
|
||||||
* downloaded) and was parsed correctly.
|
* correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public static class City {
|
public static class City {
|
||||||
/** Key for JSON object - Coordinates */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON object - Coordinates
|
||||||
|
*/
|
||||||
private final String JSON_CITY_COORD = "coord";
|
private final String JSON_CITY_COORD = "coord";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about geographic coordinates (from the JSON data)
|
* Parses data about geographic coordinates (from the JSON data) and
|
||||||
* and provides methods to get/access the information.
|
* provides methods to get/access the information. This class provides
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>has</code> and <code>get</code> methods to access the
|
||||||
* to access the information.
|
* information.
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <p>
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* <code>has</code> methods can be used to check if the data exists,
|
||||||
* downloaded) and was parsed correctly.
|
* i.e., if the data was available (successfully downloaded) and was
|
||||||
*
|
* parsed correctly.
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -116,8 +125,9 @@ public class ForecastWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -129,9 +139,9 @@ public class ForecastWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about clouds
|
* @param jsonObj JSON object containing data about clouds
|
||||||
*/
|
*/
|
||||||
public Coord(JSONObject jsonObj) {
|
public Coord(JSONObject jsonObj) {
|
||||||
|
@ -139,31 +149,47 @@ public class ForecastWeatherData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
/** Key for JSON variable <code>City code (ID)</code> */
|
* Key for JSON variable <code>City code (ID)</code>
|
||||||
|
*/
|
||||||
private final String JSON_CITY_ID = "id";
|
private final String JSON_CITY_ID = "id";
|
||||||
/** Key for JSON variable <code>City name</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>City name</code>
|
||||||
|
*/
|
||||||
private final String JSON_CITY_NAME = "name";
|
private final String JSON_CITY_NAME = "name";
|
||||||
/** Key for JSON variable <code>Country code of city</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Country code of city</code>
|
||||||
|
*/
|
||||||
private final String JSON_CITY_COUNTRY_CODE = "country";
|
private final String JSON_CITY_COUNTRY_CODE = "country";
|
||||||
/** Key for JSON variable <code>Population of city</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Population of city</code>
|
||||||
|
*/
|
||||||
private final String JSON_CITY_POPULATION = "population";
|
private final String JSON_CITY_POPULATION = "population";
|
||||||
|
|
||||||
/** City code (ID) */
|
/**
|
||||||
|
* City code (ID)
|
||||||
|
*/
|
||||||
private final long cityID;
|
private final long cityID;
|
||||||
/** City name */
|
/**
|
||||||
|
* City name
|
||||||
|
*/
|
||||||
private final String cityName;
|
private final String cityName;
|
||||||
/** Country code of city */
|
/**
|
||||||
|
* Country code of city
|
||||||
|
*/
|
||||||
private final String countryCode;
|
private final String countryCode;
|
||||||
/** Population of city */
|
/**
|
||||||
|
* Population of city
|
||||||
|
*/
|
||||||
private final long population;
|
private final long population;
|
||||||
|
|
||||||
private final Coord coord;
|
private final Coord coord;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -180,9 +206,9 @@ public class ForecastWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about city
|
* @param jsonObj JSON object containing data about city
|
||||||
*/
|
*/
|
||||||
public City(JSONObject jsonObj) {
|
public City(JSONObject jsonObj) {
|
||||||
|
@ -228,37 +254,39 @@ public class ForecastWeatherData {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Objects
|
// Objects
|
||||||
|
|
||||||
public Coord getCoordinates_Object() {
|
public Coord getCoordinates_Object() {
|
||||||
return this.coord;
|
return this.coord;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about forecasts (from the JSON data)
|
* Parses data about forecasts (from the JSON data) and provides methods to
|
||||||
* and provides methods to get/access the information.
|
* get/access the information. This class provides <code>has</code> and
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists, i.e.,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* if the data was available (successfully downloaded) and was parsed
|
||||||
* downloaded) and was parsed correctly.
|
* correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public static class Forecast extends AbstractWeatherData {
|
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";
|
private final String JSON_SYS = "sys";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -266,25 +294,25 @@ public class ForecastWeatherData {
|
||||||
* Declaring sub-sub-classes
|
* Declaring sub-sub-classes
|
||||||
***************************
|
***************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about clouds (from the JSON data)
|
* Parses data about clouds (from the JSON data) and provides methods to
|
||||||
* and provides methods to get/access the information.
|
* get/access the information. This class provides <code>has</code> and
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* i.e., if the data was available (successfully downloaded) and was
|
||||||
* downloaded) and was parsed correctly.
|
* parsed correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -293,8 +321,9 @@ public class ForecastWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -306,9 +335,9 @@ public class ForecastWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about clouds
|
* @param jsonObj JSON object containing data about clouds
|
||||||
*/
|
*/
|
||||||
public Clouds(JSONObject jsonObj) {
|
public Clouds(JSONObject jsonObj) {
|
||||||
|
@ -317,47 +346,63 @@ public class ForecastWeatherData {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about main weather elements (from the JSON data)
|
* Parses data about main weather elements (from the JSON data) and
|
||||||
* and provides methods to get/access the information.
|
* provides methods to get/access the information. For example,
|
||||||
* For example, temperature, pressure, sea level, etc.
|
* temperature, pressure, sea level, etc. This class provides
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>has</code> and <code>get</code> methods to access the
|
||||||
* to access the information.
|
* information.
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <p>
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* <code>has</code> methods can be used to check if the data exists,
|
||||||
* downloaded) and was parsed correctly.
|
* i.e., if the data was available (successfully downloaded) and was
|
||||||
*
|
* parsed correctly.
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public static class Main extends AbstractWeatherData.Main {
|
public static class Main extends AbstractWeatherData.Main {
|
||||||
/** Key for JSON variable <code>Main -> Sea level</code> */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON variable <code>Main -> Sea level</code>
|
||||||
|
*/
|
||||||
private final String JSON_MAIN_SEA_LEVEL = "sea_level";
|
private final String JSON_MAIN_SEA_LEVEL = "sea_level";
|
||||||
/** Key for JSON variable <code>Main -> Ground level</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Main -> Ground level</code>
|
||||||
|
*/
|
||||||
private final String JSON_MAIN_GRND_LEVEL = "grnd_level";
|
private final String JSON_MAIN_GRND_LEVEL = "grnd_level";
|
||||||
/** Key for JSON variable <code>Main -> Temperature KF</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Main -> Temperature KF</code>
|
||||||
|
*/
|
||||||
private final String JSON_MAIN_TMP_KF = "temp_kf";
|
private final String JSON_MAIN_TMP_KF = "temp_kf";
|
||||||
|
|
||||||
/** Sea level */
|
/**
|
||||||
|
* Sea level
|
||||||
|
*/
|
||||||
private final float seaLevel;
|
private final float seaLevel;
|
||||||
/** Ground level */
|
/**
|
||||||
|
* Ground level
|
||||||
|
*/
|
||||||
private final float groundLevel;
|
private final float groundLevel;
|
||||||
/** Temperature KF */
|
/**
|
||||||
|
* Temperature KF
|
||||||
|
*/
|
||||||
private final float tempKF;
|
private final float tempKF;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -373,11 +418,11 @@ public class ForecastWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about main
|
* @param jsonObj JSON object containing data about main weather
|
||||||
* weather elements
|
* elements
|
||||||
*/
|
*/
|
||||||
public Main(JSONObject jsonObj) {
|
public Main(JSONObject jsonObj) {
|
||||||
super(jsonObj);
|
super(jsonObj);
|
||||||
|
@ -413,39 +458,47 @@ public class ForecastWeatherData {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about main weather elements (from the JSON data)
|
* Parses data about main weather elements (from the JSON data) and
|
||||||
* and provides methods to get/access the information.
|
* provides methods to get/access the information. For example,
|
||||||
* For example, temperature, pressure, sea level, etc.
|
* temperature, pressure, sea level, etc. This class provides
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>has</code> and <code>get</code> methods to access the
|
||||||
* to access the information.
|
* information.
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <p>
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* <code>has</code> methods can be used to check if the data exists,
|
||||||
* downloaded) and was parsed correctly.
|
* i.e., if the data was available (successfully downloaded) and was
|
||||||
*
|
* parsed correctly.
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
*/
|
*/
|
||||||
public static class Sys {
|
public static class Sys {
|
||||||
/** Key for JSON variable <code>Sys -> Pod</code> */
|
|
||||||
|
/**
|
||||||
|
* Key for JSON variable <code>Sys -> Pod</code>
|
||||||
|
*/
|
||||||
private final String JSON_SYS_POD = "pod";
|
private final String JSON_SYS_POD = "pod";
|
||||||
|
|
||||||
/** Pod */
|
/**
|
||||||
|
* Pod
|
||||||
|
*/
|
||||||
private final String pod;
|
private final String pod;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -457,11 +510,11 @@ public class ForecastWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about sys.
|
* @param jsonObj JSON object containing data about sys. For
|
||||||
* For example, pod, etc.
|
* example, pod, etc.
|
||||||
*/
|
*/
|
||||||
public Sys(JSONObject jsonObj) {
|
public Sys(JSONObject jsonObj) {
|
||||||
this.pod = (jsonObj != null) ? jsonObj.optString(this.JSON_SYS_POD, null) : null;
|
this.pod = (jsonObj != null) ? jsonObj.optString(this.JSON_SYS_POD, null) : null;
|
||||||
|
@ -477,24 +530,25 @@ public class ForecastWeatherData {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about weather (from the JSON data)
|
* Parses data about weather (from the JSON data) and provides methods
|
||||||
* and provides methods to get/access the information.
|
* to get/access the information. For example, weather id, name, etc.
|
||||||
* For example, weather id, name, etc.
|
* This class provides <code>has</code> and <code>get</code> methods to
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* i.e., if the data was available (successfully downloaded) and was
|
||||||
* downloaded) and was parsed correctly.
|
* parsed correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -503,48 +557,50 @@ public class ForecastWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*/
|
*/
|
||||||
public Weather () {
|
public Weather() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about weather
|
* @param jsonObj JSON object containing data about weather code,
|
||||||
* code, name, etc.
|
* name, etc.
|
||||||
*/
|
*/
|
||||||
public Weather (JSONObject jsonObj) {
|
public Weather(JSONObject jsonObj) {
|
||||||
super(jsonObj);
|
super(jsonObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses data about wind (from the JSON data)
|
* Parses data about wind (from the JSON data) and provides methods to
|
||||||
* and provides methods to get/access the information.
|
* get/access the information. This class provides <code>has</code> and
|
||||||
* This class provides <code>has</code> and <code>get</code> methods
|
* <code>get</code> methods to access the information.
|
||||||
* to access the information.
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* <p><code>has</code> methods can be used to check
|
* <code>has</code> methods can be used to check if the data exists,
|
||||||
* if the data exists, i.e., if the data was available (successfully
|
* i.e., if the data was available (successfully downloaded) and was
|
||||||
* downloaded) and was parsed correctly.
|
* parsed correctly.
|
||||||
*
|
* <p>
|
||||||
* <p><code>get</code> methods can be used to access the data, if the data
|
* <p>
|
||||||
|
* <code>get</code> methods can be used to access the data, if the data
|
||||||
* exists, otherwise <code>get</code> methods will give value as per
|
* exists, otherwise <code>get</code> methods will give value as per
|
||||||
* following basis:<br>
|
* following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/07
|
* @version 2013/08/07
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -553,26 +609,27 @@ public class ForecastWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
* Others: <code>null</code><br>
|
* Others: <code>null</code><br>
|
||||||
*/
|
*/
|
||||||
public Wind () {
|
public Wind() {
|
||||||
super ();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about wind
|
* @param jsonObj JSON object containing data about wind
|
||||||
*/
|
*/
|
||||||
public Wind (JSONObject jsonObj) {
|
public Wind(JSONObject jsonObj) {
|
||||||
super (jsonObj);
|
super(jsonObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -581,12 +638,14 @@ public class ForecastWeatherData {
|
||||||
* Declaring this sub-class
|
* Declaring this sub-class
|
||||||
************************
|
************************
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* Key for JSON variable <code>Date time text</code>
|
||||||
/** Key for JSON variable <code>Date time text</code> */
|
*/
|
||||||
private final String JSON_DATE_TIME_TEXT = "dt_txt";
|
private final String JSON_DATE_TIME_TEXT = "dt_txt";
|
||||||
|
|
||||||
/** Date time text */
|
/**
|
||||||
|
* Date time text
|
||||||
|
*/
|
||||||
private final String dateTimeText;
|
private final String dateTimeText;
|
||||||
|
|
||||||
private final Clouds clouds;
|
private final Clouds clouds;
|
||||||
|
@ -594,15 +653,20 @@ public class ForecastWeatherData {
|
||||||
private final Sys sys;
|
private final Sys sys;
|
||||||
private final Wind wind;
|
private final Wind wind;
|
||||||
|
|
||||||
/** List of weather information (code, name, etc.) */
|
/**
|
||||||
|
* List of weather information (code, name, etc.)
|
||||||
|
*/
|
||||||
private final List<Weather> weatherList;
|
private final List<Weather> weatherList;
|
||||||
/** Count (number) of elements in list of weather information */
|
/**
|
||||||
|
* Count (number) of elements in list of weather information
|
||||||
|
*/
|
||||||
private final int weatherListCount;
|
private final int weatherListCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Non-parameterized constructor
|
* Non-parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* <p>Initializes variables as per following basis:<br>
|
* <p>
|
||||||
|
* Initializes variables as per following basis:<br>
|
||||||
* Boolean: <code>false</code><br>
|
* Boolean: <code>false</code><br>
|
||||||
* Integral: Minimum value (MIN_VALUE)<br>
|
* Integral: Minimum value (MIN_VALUE)<br>
|
||||||
* Floating point: Not a number (NaN)<br>
|
* Floating point: Not a number (NaN)<br>
|
||||||
|
@ -623,9 +687,9 @@ public class ForecastWeatherData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about forecasts
|
* @param jsonObj JSON object containing data about forecasts
|
||||||
*/
|
*/
|
||||||
public Forecast(JSONObject jsonObj) {
|
public Forecast(JSONObject jsonObj) {
|
||||||
|
@ -645,8 +709,8 @@ public class ForecastWeatherData {
|
||||||
JSONArray jsonArrWeather = (jsonObj != null) ? jsonObj.optJSONArray(this.JSON_WEATHER) : null;
|
JSONArray jsonArrWeather = (jsonObj != null) ? jsonObj.optJSONArray(this.JSON_WEATHER) : null;
|
||||||
this.weatherList = (jsonArrWeather != null) ? new ArrayList<Weather>(jsonArrWeather.length()) : Collections.EMPTY_LIST;
|
this.weatherList = (jsonArrWeather != null) ? new ArrayList<Weather>(jsonArrWeather.length()) : Collections.EMPTY_LIST;
|
||||||
if (this.weatherList != Collections.EMPTY_LIST) {
|
if (this.weatherList != Collections.EMPTY_LIST) {
|
||||||
for (int i = 0; i < jsonArrWeather.length (); i++) {
|
for (int i = 0; i < jsonArrWeather.length(); i++) {
|
||||||
JSONObject jsonObjWeather = jsonArrWeather.optJSONObject (i);
|
JSONObject jsonObjWeather = jsonArrWeather.optJSONObject(i);
|
||||||
if (jsonObjWeather != null) {
|
if (jsonObjWeather != null) {
|
||||||
this.weatherList.add(new Weather(jsonObjWeather));
|
this.weatherList.add(new Weather(jsonObjWeather));
|
||||||
}
|
}
|
||||||
|
@ -667,7 +731,6 @@ public class ForecastWeatherData {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Objects
|
// Objects
|
||||||
|
|
||||||
public Clouds getClouds_Object() {
|
public Clouds getClouds_Object() {
|
||||||
return this.clouds;
|
return this.clouds;
|
||||||
}
|
}
|
||||||
|
@ -685,7 +748,6 @@ public class ForecastWeatherData {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lists
|
// Lists
|
||||||
|
|
||||||
public boolean hasWeather_List() {
|
public boolean hasWeather_List() {
|
||||||
return (this.weatherListCount != 0);
|
return (this.weatherListCount != 0);
|
||||||
}
|
}
|
||||||
|
@ -699,39 +761,53 @@ public class ForecastWeatherData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
***********************
|
***********************
|
||||||
* Declaring this class
|
* Declaring this class
|
||||||
***********************
|
***********************
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
/** Key for JSON variable <code>Response code</code> */
|
* Key for JSON variable <code>Response code</code>
|
||||||
|
*/
|
||||||
private final String JSON_RESPONSE_CODE = "cod";
|
private final String JSON_RESPONSE_CODE = "cod";
|
||||||
/** Key for JSON variable <code>Response time</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Response time</code>
|
||||||
|
*/
|
||||||
private final String JSON_RESPONSE_TIME = "message";
|
private final String JSON_RESPONSE_TIME = "message";
|
||||||
/** Key for JSON variable <code>Forecast count</code> */
|
/**
|
||||||
|
* Key for JSON variable <code>Forecast count</code>
|
||||||
|
*/
|
||||||
private final String JSON_RESPONSE_FORECAST_COUNT = "cnt";
|
private final String JSON_RESPONSE_FORECAST_COUNT = "cnt";
|
||||||
|
|
||||||
/** Response code */
|
/**
|
||||||
|
* Response code
|
||||||
|
*/
|
||||||
private final String responseCode;
|
private final String responseCode;
|
||||||
/** Response time */
|
/**
|
||||||
|
* Response time
|
||||||
|
*/
|
||||||
private final float responseTime;
|
private final float responseTime;
|
||||||
/** Forecast count */
|
/**
|
||||||
|
* Forecast count
|
||||||
|
*/
|
||||||
private final int responseForecastCount;
|
private final int responseForecastCount;
|
||||||
|
|
||||||
private final City city;
|
private final City city;
|
||||||
|
|
||||||
/** List of forecast information */
|
/**
|
||||||
|
* List of forecast information
|
||||||
|
*/
|
||||||
private final List<Forecast> forecastList;
|
private final List<Forecast> forecastList;
|
||||||
/** Count (number) of elements in list of forecast information */
|
/**
|
||||||
|
* Count (number) of elements in list of forecast information
|
||||||
|
*/
|
||||||
private final int forecastListCount;
|
private final int forecastListCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameterized constructor
|
* Parameterized constructor
|
||||||
*
|
* <p>
|
||||||
* Initializes variables from values from the given JSON object.
|
* Initializes variables from values from the given JSON object.
|
||||||
*
|
* <p>
|
||||||
* @param jsonObj JSON object containing data about clouds
|
* @param jsonObj JSON object containing data about clouds
|
||||||
*/
|
*/
|
||||||
public ForecastWeatherData(JSONObject jsonObj) {
|
public ForecastWeatherData(JSONObject jsonObj) {
|
||||||
|
@ -780,13 +856,11 @@ public class ForecastWeatherData {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Objects
|
// Objects
|
||||||
|
|
||||||
public City getCity_Object() {
|
public City getCity_Object() {
|
||||||
return this.city;
|
return this.city;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lists
|
// Lists
|
||||||
|
|
||||||
public boolean hasForecast_List() {
|
public boolean hasForecast_List() {
|
||||||
return (this.forecastListCount != 0);
|
return (this.forecastListCount != 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ import org.json.JSONObject;
|
||||||
/**
|
/**
|
||||||
* Provides methods to get weather, forecast, and other data from
|
* Provides methods to get weather, forecast, and other data from
|
||||||
* OpenWeatherMap.org
|
* OpenWeatherMap.org
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/05
|
* @version 2013/08/05
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -69,7 +69,7 @@ public class OpenWeatherMap {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the parameter.
|
* Returns the parameter.
|
||||||
*
|
* <p>
|
||||||
* @return Parameter
|
* @return Parameter
|
||||||
*/
|
*/
|
||||||
public String getParameter() {
|
public String getParameter() {
|
||||||
|
@ -364,8 +364,7 @@ public class OpenWeatherMap {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* *********************
|
* *********************
|
||||||
* Declaring this class
|
* Declaring this class *********************
|
||||||
**********************
|
|
||||||
*/
|
*/
|
||||||
private final OWM_Response owmResponse;
|
private final OWM_Response owmResponse;
|
||||||
|
|
||||||
|
|
|
@ -28,15 +28,15 @@ import java.net.URL;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides various tools, which help doing tasks in this application.
|
* Provides various tools, which help doing tasks in this application. For
|
||||||
* For example, tool for downloading content from the Internet, tool for
|
* example, tool for downloading content from the Internet, tool for correcting,
|
||||||
* correcting, etc.
|
* etc.
|
||||||
*
|
* <p>
|
||||||
* <p>Note: This class directly do not provide any functions, but has
|
* <p>
|
||||||
* <code>static</code> sub-classes which provide various
|
* Note: This class directly do not provide any functions, but has
|
||||||
* related tools, i.e., this class only behaves as the container for those
|
* <code>static</code> sub-classes which provide various related tools, i.e.,
|
||||||
* classes.
|
* this class only behaves as the container for those classes.
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2014-07-01
|
* @version 2014-07-01
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -45,7 +45,7 @@ public class Tools {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides methods to download data or files from the Internet.
|
* Provides methods to download data or files from the Internet.
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013-07-24
|
* @version 2013-07-24
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -53,24 +53,23 @@ public class Tools {
|
||||||
public static class Downloader {
|
public static class Downloader {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Downloads a page/content from the Internet.
|
* Downloads a page/content from the Internet. This method gets the
|
||||||
* This method gets the content of the web page, whose URL is given by
|
* content of the web page, whose URL is given by the
|
||||||
* the <code>pageAddress</code>.
|
* <code>pageAddress</code>.
|
||||||
*
|
* <p>
|
||||||
* <p>NOTE: <code>pageAddress</code> should be a correct URL, else
|
* <p>
|
||||||
* this method will throw {@link MalformedURLException}.
|
* NOTE: <code>pageAddress</code> should be a correct URL, else this
|
||||||
*
|
* method will throw {@link MalformedURLException}.
|
||||||
* @param pageAddress
|
* <p>
|
||||||
* Address of the web page to get from the Internet.
|
* @param pageAddress Address of the web page to get from the Internet.
|
||||||
*
|
* <p>
|
||||||
* @return Content of the web page
|
* @return Content of the web page
|
||||||
*
|
* <p>
|
||||||
* @throws MalformedURLException
|
* @throws MalformedURLException Address of the web page is not correct.
|
||||||
* Address of the web page is not correct.
|
* <p>
|
||||||
*
|
* @throws IOException Error while loading the page from the
|
||||||
* @throws IOException
|
* Internet or connection got
|
||||||
* Error while loading the page from the Internet or connection
|
* disconnected.
|
||||||
* got disconnected.
|
|
||||||
*/
|
*/
|
||||||
public static String downloadPage(String pageAddress)
|
public static String downloadPage(String pageAddress)
|
||||||
throws MalformedURLException, IOException {
|
throws MalformedURLException, IOException {
|
||||||
|
@ -89,11 +88,10 @@ public class Tools {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides methods to do conversions.
|
* Provides methods to do conversions. For example, converting degree to
|
||||||
* For example, converting degree to direction, etc.
|
* direction, etc.
|
||||||
*
|
* <p>
|
||||||
* @author Ashutosh Kumar Singh
|
* @author Ashutosh Kumar Singh
|
||||||
* @version 2013/08/05
|
* @version 2013/08/05
|
||||||
* @since 2.5.0.1
|
* @since 2.5.0.1
|
||||||
|
@ -102,14 +100,14 @@ public class Tools {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts degree to direction.
|
* Converts degree to direction.
|
||||||
* @param degree
|
* <p>
|
||||||
|
* @param degree <p>
|
||||||
* @return Direction
|
* @return Direction
|
||||||
*
|
* <p>
|
||||||
* @throws IllegalArgumentException
|
* @throws IllegalArgumentException Degree should be between 0 and 360.
|
||||||
* Degree should be between 0 and 360.
|
|
||||||
*/
|
*/
|
||||||
public String convertDegree2Direction(float degree)
|
public String convertDegree2Direction(float degree)
|
||||||
throws IllegalArgumentException{
|
throws IllegalArgumentException {
|
||||||
String direction;
|
String direction;
|
||||||
|
|
||||||
// degree should be between 0 and 360
|
// degree should be between 0 and 360
|
||||||
|
@ -119,53 +117,37 @@ public class Tools {
|
||||||
|
|
||||||
if (degree <= 11.25f) {
|
if (degree <= 11.25f) {
|
||||||
direction = "N";
|
direction = "N";
|
||||||
}
|
} else if (degree <= 33.75f) {
|
||||||
else if (degree <= 33.75f) {
|
|
||||||
direction = "NNE";
|
direction = "NNE";
|
||||||
}
|
} else if (degree <= 56.25f) {
|
||||||
else if (degree <= 56.25f) {
|
|
||||||
direction = "NE";
|
direction = "NE";
|
||||||
}
|
} else if (degree <= 78.75f) {
|
||||||
else if (degree <= 78.75f) {
|
|
||||||
direction = "ENE";
|
direction = "ENE";
|
||||||
}
|
} else if (degree <= 101.25f) {
|
||||||
else if (degree <= 101.25f) {
|
|
||||||
direction = "E";
|
direction = "E";
|
||||||
}
|
} else if (degree <= 123.75f) {
|
||||||
else if (degree <= 123.75f) {
|
|
||||||
direction = "ESE";
|
direction = "ESE";
|
||||||
}
|
} else if (degree <= 146.25f) {
|
||||||
else if (degree <= 146.25f) {
|
|
||||||
direction = "SE";
|
direction = "SE";
|
||||||
}
|
} else if (degree <= 168.75f) {
|
||||||
else if (degree <= 168.75f) {
|
|
||||||
direction = "SSE";
|
direction = "SSE";
|
||||||
}
|
} else if (degree <= 191.25f) {
|
||||||
else if (degree <= 191.25f) {
|
|
||||||
direction = "S";
|
direction = "S";
|
||||||
}
|
} else if (degree <= 213.75f) {
|
||||||
else if (degree <= 213.75f) {
|
|
||||||
direction = "SSW";
|
direction = "SSW";
|
||||||
}
|
} else if (degree <= 236.25f) {
|
||||||
else if (degree <= 236.25f) {
|
|
||||||
direction = "SW";
|
direction = "SW";
|
||||||
}
|
} else if (degree <= 258.75f) {
|
||||||
else if (degree <= 258.75f) {
|
|
||||||
direction = "WSW";
|
direction = "WSW";
|
||||||
}
|
} else if (degree <= 281.25f) {
|
||||||
else if (degree <= 281.25f) {
|
|
||||||
direction = "W";
|
direction = "W";
|
||||||
}
|
} else if (degree <= 303.75f) {
|
||||||
else if (degree <= 303.75f) {
|
|
||||||
direction = "WNW";
|
direction = "WNW";
|
||||||
}
|
} else if (degree <= 326.25f) {
|
||||||
else if (degree <= 326.25f) {
|
|
||||||
direction = "NW";
|
direction = "NW";
|
||||||
}
|
} else if (degree <= 348.75f) {
|
||||||
else if (degree <= 348.75f) {
|
|
||||||
direction = "NNW";
|
direction = "NNW";
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
direction = "N";
|
direction = "N";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue