final DocumentBuilder builder = XmlUtils.getDocumentBuilder();
final Document document = builder.newDocument();
// Add document namespaces
final Element div = new XmlElementBuilder("div", document)
.addAttribute("xmlns:page", "urn:jsptagdir:/WEB-INF/tags/form")
.addAttribute("xmlns:fields",
"urn:jsptagdir:/WEB-INF/tags/form/fields")
.addAttribute("xmlns:jsp", "http://java.sun.com/JSP/Page")
.addAttribute("version", "2.0")
.addChild(
new XmlElementBuilder("jsp:output", document)
.addAttribute("omit-xml-declaration", "yes")
.build()).build();
document.appendChild(div);
final Element pageSearch = new XmlElementBuilder("page:search",
document)
.addAttribute(
"id",
XmlUtils.convertId("ps:"
+ webScaffoldMetadata.getAnnotationValues()
.getFormBackingObject()
.getFullyQualifiedTypeName()))
.addAttribute("path",
webScaffoldMetadata.getAnnotationValues().getPath())
.build();
pageSearch.setAttribute("z",
XmlRoundTripUtils.calculateUniqueKeyFor(pageSearch));
final List<FieldMetadata> idFields = persistenceMemberLocator
.getIdentifierFields(formbackingObject);
if (idFields.isEmpty()) {
return null;
}
final Element resultTable = new XmlElementBuilder("fields:table",
document)
.addAttribute(
"id",
XmlUtils.convertId("rt:"
+ webScaffoldMetadata.getAnnotationValues()
.getFormBackingObject()
.getFullyQualifiedTypeName()))
.addAttribute("data", "${searchResults}")
.addAttribute("delete", "false")
.addAttribute("update", "false")
.addAttribute("path",
webScaffoldMetadata.getAnnotationValues().getPath())
.addAttribute(
"typeIdFieldName",
formbackingObject.getSimpleTypeName().toLowerCase()
+ "."
+ idFields.get(0).getFieldName()
.getSymbolName().toLowerCase()
+ SolrUtils.getSolrDynamicFieldPostFix(idFields
.get(0).getFieldType())).build();
resultTable.setAttribute("z",
XmlRoundTripUtils.calculateUniqueKeyFor(resultTable));
final StringBuilder facetFields = new StringBuilder();
int fieldCounter = 0;
final ClassOrInterfaceTypeDetails formbackingClassOrInterfaceDetails = typeLocationService
.getTypeDetails(formbackingObject);
Validate.notNull(formbackingClassOrInterfaceDetails,
"Unable to obtain physical type metadata for type %s",
formbackingObject.getFullyQualifiedTypeName());
final MemberDetails memberDetails = memberDetailsScanner
.getMemberDetails(getClass().getName(),
formbackingClassOrInterfaceDetails);
final MethodMetadata identifierAccessor = persistenceMemberLocator
.getIdentifierAccessor(formbackingObject);
final MethodMetadata versionAccessor = persistenceMemberLocator
.getVersionAccessor(formbackingObject);
for (final MethodMetadata method : memberDetails.getMethods()) {
// Only interested in accessors
if (!BeanInfoUtils.isAccessorMethod(method)) {
continue;
}
if (++fieldCounter < 7) {
if (method.getMethodName().equals(
identifierAccessor.getMethodName())
|| method.getMethodName().equals(
versionAccessor.getMethodName())) {
continue;
}
if (method.hasSameName(identifierAccessor, versionAccessor)) {
continue;
}
final FieldMetadata field = BeanInfoUtils
.getFieldForJavaBeanMethod(memberDetails, method);
if (field == null) {
continue;
}
facetFields
.append(formbackingObject.getSimpleTypeName()
.toLowerCase())
.append(".")
.append(field.getFieldName())
.append(SolrUtils.getSolrDynamicFieldPostFix(field
.getFieldType())).append(",");
final Element columnElement = new XmlElementBuilder(
"fields:column", document)
.addAttribute(
"id",
XmlUtils.convertId("c:"
+ formbackingObject
.getFullyQualifiedTypeName()
+ "."
+ field.getFieldName().getSymbolName()))
.addAttribute(
"property",
formbackingObject.getSimpleTypeName()
.toLowerCase()
+ "."
+ field.getFieldName().getSymbolName()
.toLowerCase()
+ SolrUtils
.getSolrDynamicFieldPostFix(field
.getFieldType()))
.build();
columnElement.setAttribute("z",
XmlRoundTripUtils.calculateUniqueKeyFor(columnElement));
resultTable.appendChild(columnElement);
}
}
final Element searchFacet = new XmlElementBuilder(
"fields:search-facet", document)
.addAttribute(
"id",
XmlUtils.convertId("sfacet:"
+ webScaffoldMetadata.getAnnotationValues()
.getFormBackingObject()
.getFullyQualifiedTypeName()))
.addAttribute("facetFields", facetFields.toString()).build();
searchFacet.setAttribute("z",
XmlRoundTripUtils.calculateUniqueKeyFor(searchFacet));
pageSearch.appendChild(searchFacet);
final Element searchField = new XmlElementBuilder(
"fields:search-field", document).addAttribute(
"id",
XmlUtils.convertId("sfield:"
+ webScaffoldMetadata.getAnnotationValues()
.getFormBackingObject()