+++ /dev/null
-package tim.prune.function.weather;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.TimeZone;
-
-import tim.prune.gui.DisplayUtils;
-
-
-/**
- * Model for results of weather forecast from openweathermap.org
- */
-public class WeatherResults
-{
- /** List of forecasts */
- private ArrayList<SingleForecast> _forecastList = new ArrayList<SingleForecast>();
- /** Flag whether the units are metric (Celsius) or not (Fahrenheit) */
- private boolean _tempsCelsius = true;
- /** Location name */
- private String _locationName = null;
- /** Last update timestamp */
- private String _updateTime = null;
- /** Sunrise and sunset times as HH:MM */
- private String _sunriseTime = null, _sunsetTime = null;
-
-
- /**
- * Add a single forecast to this model (for the current weather)
- * @param inResults current results
- */
- public void setForecast(SingleForecast inResults)
- {
- _forecastList.clear();
- if (inResults != null) {
- _forecastList.add(inResults);
- }
- }
-
- /**
- * Add a list of forecasts to this model
- * @param inList list of forecasts to add
- */
- public void setForecasts(ArrayList<SingleForecast> inList)
- {
- _forecastList.clear();
- if (inList != null && inList.size() > 0) {
- _forecastList.addAll(inList);
- }
- }
-
- /** @return the number of forecasts */
- public int getNumForecasts()
- {
- return _forecastList.size();
- }
-
- /**
- * @param inIndex index of forecast starting from 0
- * @return the specified forecast
- */
- public SingleForecast getForecast(int inIndex)
- {
- if (inIndex < 0 || inIndex >= getNumForecasts()) {
- return null;
- }
- return _forecastList.get(inIndex);
- }
-
- /**
- * Clear the list of forecasts
- */
- public void clear()
- {
- _forecastList.clear();
- _sunriseTime = _sunsetTime = null;
- _updateTime = null;
- }
-
- /**
- * @param inCelsius true for celsius, false for fahrenheit
- */
- public void setTempsCelsius(boolean inCelsius)
- {
- _tempsCelsius = inCelsius;
- }
-
- /** @return true if this forecast uses Celsius */
- public boolean isCelsius() {
- return _tempsCelsius;
- }
-
- /**
- * Set the sunrise and sunset times (only from current weather, not from forecast)
- * @param inRiseTime sunrise time as YYYY-MM-DDThh:mm:ss
- * @param inSetTime sunset time as YYYY-MM-DDThh:mm:ss
- */
- public void setSunriseSunsetTimes(String inRiseTime, String inSetTime)
- {
- _sunriseTime = _sunsetTime = null;
- if (inRiseTime != null && inRiseTime.length() == 19
- && inSetTime != null && inSetTime.length() == 19)
- {
- // Convert from UTC to system's time zone (not necessarily target's time zone!)
- _sunriseTime = convertToLocalTimezone(inRiseTime.substring(11, 16));
- _sunsetTime = convertToLocalTimezone(inSetTime.substring(11, 16));
- }
- }
-
- /** @return sunrise time as HH:MM */
- public String getSunriseTime() {
- return _sunriseTime;
- }
- /** @return sunset time as HH:MM */
- public String getSunsetTime() {
- return _sunsetTime;
- }
-
- /** @param inName location name */
- public void setLocationName(String inName) {
- _locationName = inName;
- }
-
- /** @return location name */
- public String getLocationName() {
- return _locationName;
- }
-
- /** @param inTime timestamp of forecast */
- public void setUpdateTime(String inTime) {
- _updateTime = inTime;
- }
-
- /** @return timestamp of last update */
- public String getUpdateTime()
- {
- return _updateTime;
- }
-
- /**
- * Convert the given UTC time (HH:MM) into current timezone of computer
- * @param inTimeString sunrise/sunset time in UTC (HH:MM)
- * @return time in this timezone (HH:MM)
- */
- private static String convertToLocalTimezone(String inTimeString)
- {
- if (inTimeString != null && inTimeString.length() == 5)
- {
- try
- {
- final int hour = Integer.parseInt(inTimeString.substring(0, 2));
- final int min = Integer.parseInt(inTimeString.substring(3));
- Calendar utcCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
- utcCal.set(Calendar.HOUR_OF_DAY, hour);
- utcCal.set(Calendar.MINUTE, min);
- // Make a second calendar in the current time zone and apply values
- Calendar currCal = Calendar.getInstance();
- currCal.setTimeInMillis(utcCal.getTimeInMillis());
- return DisplayUtils.makeTimeString(currCal.get(Calendar.HOUR_OF_DAY),
- currCal.get(Calendar.MINUTE));
- }
- catch (NumberFormatException e) {} // ignore, just drop through
- }
- // Couldn't be parsed / converted
- return inTimeString;
- }
-}