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; } }