diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/helper/DateTimeUtils.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/helper/DateTimeUtils.java new file mode 100644 index 0000000..a52ffa0 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/helper/DateTimeUtils.java @@ -0,0 +1,22 @@ +package com.utopiaindustries.hseobservationsapp.helper; + +import android.os.Build; + +import androidx.annotation.RequiresApi; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class DateTimeUtils { + + public static final String HTML5_DATETIME_INPUT_FORMAT_WITH_SECONDS = "yyyy-MM-dd'T'HH:mm:ss"; + + /** + * format localdatetime into a given format string + */ + @RequiresApi(api = Build.VERSION_CODES.O) + public static String getFormattedDateTimeString(LocalDateTime dateTime, String dateTimeFormat ) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern( dateTimeFormat ); + return dateTime.format( formatter ); + } +} diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/helper/ReleaseAsset.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/helper/ReleaseAsset.java index e13ae13..d80744e 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/helper/ReleaseAsset.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/helper/ReleaseAsset.java @@ -1,5 +1,11 @@ package com.utopiaindustries.hseobservationsapp.helper; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.utopiaindustries.hseobservationsapp.utils.jackson.ZonedDateTimeDeserializer; + import java.time.ZonedDateTime; diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/jackson/LocalDateTimeDeserializer.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/jackson/LocalDateTimeDeserializer.java new file mode 100644 index 0000000..be184df --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/jackson/LocalDateTimeDeserializer.java @@ -0,0 +1,35 @@ +package com.utopiaindustries.hseobservationsapp.utils.jackson; + +import android.os.Build; + +import androidx.annotation.RequiresApi; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.utopiaindustries.hseobservationsapp.helper.DateTimeUtils; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class LocalDateTimeDeserializer extends StdDeserializer { + + private static final long serialVersionUID = 1L; + + @RequiresApi(api = Build.VERSION_CODES.O) + public LocalDateTimeDeserializer() { + super( LocalDateTime.class ); + } + + @RequiresApi(api = Build.VERSION_CODES.O) + @Override + public LocalDateTime deserialize( JsonParser parser, DeserializationContext ctxt ) throws IOException, JsonProcessingException { + JsonNode node = parser.getCodec().readTree( parser ); + String dateStr = node.asText(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern( DateTimeUtils.HTML5_DATETIME_INPUT_FORMAT_WITH_SECONDS ); + return LocalDateTime.parse( dateStr, formatter ); + } +} diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/jackson/LocalDateTimeSerializer.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/jackson/LocalDateTimeSerializer.java new file mode 100644 index 0000000..4d3e12e --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/jackson/LocalDateTimeSerializer.java @@ -0,0 +1,25 @@ +package com.utopiaindustries.hseobservationsapp.utils.jackson; + + +import android.os.Build; + +import androidx.annotation.RequiresApi; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.utopiaindustries.hseobservationsapp.helper.DateTimeUtils; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@RequiresApi(api = Build.VERSION_CODES.O) +public class LocalDateTimeSerializer extends JsonSerializer { + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern( DateTimeUtils.HTML5_DATETIME_INPUT_FORMAT_WITH_SECONDS ); + + @Override + public void serialize( LocalDateTime value, JsonGenerator gen, SerializerProvider serializers ) throws IOException { + gen.writeString( value.format( FORMATTER ) ); + } +} diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/jackson/ZonedDateTimeDeserializer.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/jackson/ZonedDateTimeDeserializer.java new file mode 100644 index 0000000..eebb755 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/jackson/ZonedDateTimeDeserializer.java @@ -0,0 +1,35 @@ +package com.utopiaindustries.hseobservationsapp.utils.jackson; + +import android.os.Build; + +import androidx.annotation.RequiresApi; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; + +public class ZonedDateTimeDeserializer extends StdDeserializer { + + private static final long serialVersionUID = 1L; + + @RequiresApi(api = Build.VERSION_CODES.O) + public ZonedDateTimeDeserializer() { + super( LocalDateTime.class ); + } + + @RequiresApi(api = Build.VERSION_CODES.O) + @Override + public ZonedDateTime deserialize( JsonParser parser, DeserializationContext ctxt ) throws IOException, JsonProcessingException { + JsonNode node = parser.getCodec().readTree( parser ); + String dateStr = node.asText(); + DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME; + return ZonedDateTime.parse( dateStr, formatter ); + } +}