pl.jalokim.propertiestojson.resolvers.primitives.custom.TextToLocalDateResolver Maven / Gradle / Ivy
package pl.jalokim.propertiestojson.resolvers.primitives.custom;
import pl.jalokim.propertiestojson.resolvers.PrimitiveJsonTypesResolver;
import pl.jalokim.propertiestojson.resolvers.primitives.string.TextToConcreteObjectResolver;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Optional;
/**
* results of this resolver you can see in those test classes:
*
* @see LocalDateTimeResolverTest
* @see LocalDateTimeResolverTest
*/
public class TextToLocalDateResolver implements TextToConcreteObjectResolver {
private static final String DATE_FORMAT = "dd-MM-yyyy";
private final DateTimeFormatter formatter;
public TextToLocalDateResolver() {
this(DATE_FORMAT);
}
public TextToLocalDateResolver(String formatOfDate) {
formatter = DateTimeFormatter.ofPattern(formatOfDate);
}
/**
* This method will be called in first conversion phase
* if your condition is met then return concrete value of Object.
* if it doesn't meet its condition then return Optional.empty() for allow go to others type resolver in order.
* This will be called only for read properties from Map<String,String>, File with properties, InputStream with properties
*
* @param primitiveJsonTypesResolver primitiveJsonTypesResolver
* @param propertyValue currently processing property value
* @param propertyKey currently processing property key
* @return optional value
*/
@Override
public Optional returnObjectWhenCanBeResolved(PrimitiveJsonTypesResolver primitiveJsonTypesResolver,
String propertyValue,
String propertyKey) {
try {
return Optional.ofNullable(LocalDate.parse(propertyValue, formatter)); // if parse then will return LocalDate
} catch(Exception ex) {
return Optional.empty(); // if not, then allow another resolvers to crate java object from String
}
}
}