// Not interested in fields that are not exposed via a mutator and
// accessor and in identifiers and version fields
if (method.hasSameName(identifierAccessor, versionAccessor)) {
continue;
}
final FieldMetadata field = BeanInfoUtils
.getFieldForJavaBeanMethod(memberDetails, method);
if (field == null
|| !BeanInfoUtils.hasAccessorAndMutator(field,
memberDetails)) {
continue;
}
final JavaType returnType = method.getReturnType();
if (!JdkJavaType.isDateField(returnType)) {
continue;
}
final AnnotationMetadata annotation = MemberFindingUtils
.getAnnotationOfType(field.getAnnotations(),
DATE_TIME_FORMAT);
final JavaSymbolName patternSymbol = new JavaSymbolName("pattern");
final JavaSymbolName styleSymbol = new JavaSymbolName("style");
DateTimeFormatDetails dateTimeFormat = null;
if (annotation != null) {
if (annotation.getAttributeNames().contains(styleSymbol)) {
dateTimeFormat = DateTimeFormatDetails.withStyle(annotation
.getAttribute(styleSymbol).getValue().toString());
}
else if (annotation.getAttributeNames().contains(patternSymbol)) {
dateTimeFormat = DateTimeFormatDetails
.withPattern(annotation.getAttribute(patternSymbol)
.getValue().toString());
}
}
if (dateTimeFormat != null) {
registerDependency(field.getDeclaredByMetadataId(),
metadataIdentificationString);
dates.put(field.getFieldName(), dateTimeFormat);
if (javaTypePersistenceMetadataDetails != null) {
for (final String finder : javaTypePersistenceMetadataDetails
.getFinderNames()) {
if (finder.contains(StringUtils.capitalize(field
.getFieldName().getSymbolName()) + "Between")) {
dates.put(
new JavaSymbolName("min"
+ StringUtils.capitalize(field
.getFieldName()
.getSymbolName())),
dateTimeFormat);
dates.put(
new JavaSymbolName("max"
+ StringUtils.capitalize(field
.getFieldName()
.getSymbolName())),
dateTimeFormat);
}
}
}
}
else {
LOGGER.warning("It is recommended to use @DateTimeFormat(style=\"M-\") on "
+ field.getFieldType().getFullyQualifiedTypeName()
+ "."
+ field.getFieldName()
+ " to use automatic date conversion in Spring MVC");
}
}
return Collections.unmodifiableMap(dates);
}