package tim.prune.function.weather;
/**
* Class to hold a set of (up to six) weather results,
* so that they don't have to be downloaded again
*/
public class ResultSet
{
/** Array of six results */
private WeatherResults[] _results = new WeatherResults[6];
/** Location id for which these results apply */
private String _locationId = null;
/**
* Clear the array, forget all results
*/
private void clear()
{
for (int i=0; i<6; i++) {
_results[i] = null;
}
}
/**
* Get the specified weather results, if available
* @param inLocationId location id
* @param inCurrent true to get the current weather
* @param inDaily true to get the daily forecast
* @param inHourly true to get the three-hourly forecast
* @param inCelsius true to get celsius
* @return weather results, or null if not available
*/
public WeatherResults getWeather(String inLocationId,
boolean inCurrent, boolean inDaily, boolean inHourly, boolean inCelsius)
{
// Check location
if (inLocationId == null || _locationId == null || !inLocationId.equals(_locationId)) {
return null;
}
// check forecast type
final int numTypesGiven = (inCurrent ? 1 : 0) + (inDaily ? 1 : 0) + (inHourly ? 1 : 0);
if (numTypesGiven != 1) {
System.err.println("getWeather, numtypesgiven = " + numTypesGiven);
return null; // can't ask for more or less than one type
}
// Pull out from array
final int index = (inCurrent ? 0 : (inDaily ? 2 : 4)) + (inCelsius ? 1 : 0);
return _results[index];
}
/**
* Store the given weather results
* @param inResults results object
* @param inLocationId location id
* @param inCurrent true if this is the current weather
* @param inDaily true if this is the daily forecast
* @param inHourly true if this is the three-hourly forecast
* @param inCelsius true if numbers are celsius
*/
public void setWeather(WeatherResults inResults, String inLocationId,
boolean inCurrent, boolean inDaily, boolean inHourly, boolean inCelsius)
{
// Check location
if (inLocationId == null || inLocationId.equals("")) {
return;
}
if (_locationId == null || !inLocationId.equals(_locationId))
{
// coordinates have changed
clear();
_locationId = inLocationId;
}
// check forecast type
final int numTypesGiven = (inCurrent ? 1 : 0) + (inDaily ? 1 : 0) + (inHourly ? 1 : 0);
if (numTypesGiven != 1) {
System.err.println("setWeather, numtypesgiven = " + numTypesGiven);
return; // can't set more or less than one type
}
// Store in array
final int index = (inCurrent ? 0 : (inDaily ? 2 : 4)) + (inCelsius ? 1 : 0);
_results[index] = inResults;
}
}