package mil.nga.giat.geowave.core.geotime.store.field; import java.nio.ByteBuffer; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import mil.nga.giat.geowave.core.index.ByteArrayId; import mil.nga.giat.geowave.core.geotime.TimeUtils; import mil.nga.giat.geowave.core.store.data.field.FieldReader; import mil.nga.giat.geowave.core.store.data.field.FieldSerializationProviderSpi; import mil.nga.giat.geowave.core.store.data.field.FieldWriter; public class CalendarSerializationProvider implements FieldSerializationProviderSpi<Calendar> { @Override public FieldReader<Calendar> getFieldReader() { return new CalendarReader(); } @Override public FieldWriter<Object, Calendar> getFieldWriter() { return new CalendarWriter(); } protected static class CalendarReader implements FieldReader<Calendar> { @Override public Calendar readField( final byte[] fieldData ) { if ((fieldData == null) || (fieldData.length < 8)) { return null; } final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); cal.setTime(new Date( ByteBuffer.wrap( fieldData).getLong())); return cal; } } protected static class CalendarWriter implements FieldWriter<Object, Calendar> { @Override public byte[] writeField( final Calendar cal ) { if (cal == null) { return new byte[] {}; } final ByteBuffer buf = ByteBuffer.allocate(8); buf.putLong(TimeUtils.calendarToGMTMillis(cal)); return buf.array(); } @Override public byte[] getVisibility( final Object rowValue, final ByteArrayId fieldId, final Calendar fieldValue ) { return new byte[] {}; } } }