package org.fluxtream.core.metadata;
import java.util.Calendar;
import java.util.List;
import java.util.TimeZone;
import java.util.TreeMap;
import org.fluxtream.core.TimeUnit;
import org.fluxtream.core.TimezoneMap;
import org.fluxtream.core.domain.metadata.VisitedCity;
import org.fluxtream.core.utils.TimeUtils;
import org.joda.time.DateMidnight;
import org.joda.time.DateTimeConstants;
public class DayMetadata extends AbstractTimespanMetadata {
public String date;
public DayMetadata() {}
@Override
protected TimeUnit getTimespanTimeUnit() {
return TimeUnit.DAY;
}
public DayMetadata(String forDate) {
long timeForDate = TimeUtils.dateFormatterUTC.parseDateTime(forDate).getMillis();
DateMidnight dateMidnight = new DateMidnight(timeForDate);
start = dateMidnight.getMillis();
end = start + DateTimeConstants.MILLIS_PER_DAY;
this.startDate = this.endDate = this.date = forDate;
}
public DayMetadata(VisitedCity consensusVisitedCity,
VisitedCity previousInferredCity, VisitedCity nextInferredCity,
TreeMap<String, TimeZone> consensusTimezones, TimezoneMap timezoneMap,
List<VisitedCity> cities, List<VisitedCity> consensusCities,
String date) {
super(consensusVisitedCity, previousInferredCity, nextInferredCity, consensusTimezones, timezoneMap, cities, consensusCities);
this.start = getStartTimeForDate(consensusVisitedCity, date);
this.end = start + DateTimeConstants.MILLIS_PER_DAY;
this.startDate = this.endDate = this.date = date;
}
public Calendar getStartCalendar() {
TimeZone tz = null;
if(this.consensusVisitedCity!=null && this.consensusVisitedCity.city!=null) {
// Note that there are strings in the geo_timezone column
// of the cities table which cause getTimeZone to throw an exception
try {
tz=TimeZone.getTimeZone(this.consensusVisitedCity.city.geo_timezone);
}
catch (Exception e) {
System.out.println("Failed to parse timezone for " + consensusVisitedCity.city.geo_timezone + ", using UTC");
}
}
else {
System.out.println("Invalid consensusVisitedCity, using UTC");
}
if(tz==null) {
tz = TimeZone.getTimeZone("GMT");
}
Calendar c = Calendar.getInstance(tz);
c.setTimeInMillis(start);
return c;
}
}