package mil.nga.giat.geowave.adapter.vector.stats; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import mil.nga.giat.geowave.core.geotime.store.statistics.TimeRangeDataStatistics; import mil.nga.giat.geowave.core.index.ByteArrayId; import mil.nga.giat.geowave.core.index.sfc.data.NumericRange; import mil.nga.giat.geowave.core.store.adapter.statistics.DataStatistics; import org.opengis.feature.simple.SimpleFeature; public class FeatureTimeRangeStatistics extends TimeRangeDataStatistics<SimpleFeature> implements FeatureStatistic { protected FeatureTimeRangeStatistics() { super(); } public FeatureTimeRangeStatistics( final ByteArrayId dataAdapterId, final String fieldName ) { super( dataAdapterId, fieldName); } public static final ByteArrayId composeId( final String fieldName ) { return composeId( STATS_TYPE.getString(), fieldName); } @Override public String getFieldName() { return decomposeNameFromId(this.getStatisticsId()); } public Date getMaxTime() { Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT")); c.setTimeInMillis((long) this.getMax()); return c.getTime(); } public Date getMinTime() { Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT")); c.setTimeInMillis((long) this.getMin()); return c.getTime(); } @Override protected NumericRange getRange( final SimpleFeature entry ) { final Object o = entry.getAttribute(getFieldName()); Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT")); if (o == null) return null; if (o instanceof Date) { c.setTime((Date) o); } else if (o instanceof Calendar) { c.setTime(((Calendar) c).getTime()); } else if (o instanceof Number) { c.setTimeInMillis(((Number) o).longValue()); } final long time = c.getTimeInMillis(); return new NumericRange( time, time); } public DataStatistics<SimpleFeature> duplicate() { return new FeatureTimeRangeStatistics( this.dataAdapterId, getFieldName()); } public String toString() { StringBuffer buffer = new StringBuffer(); Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT")); c.setTimeInMillis((long) getMin()); Date min = c.getTime(); c.setTimeInMillis((long) getMax()); Date max = c.getTime(); buffer.append( "range[adapter=").append( super.getDataAdapterId().getString()); buffer.append( ", field=").append( getFieldName()); if (isSet()) { buffer.append( ", min=").append( min); buffer.append( ", max=").append( max); } else { buffer.append(", No Values"); } buffer.append("]"); return buffer.toString(); } }