--- /dev/null
+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;
+ }
+}