{
String controllerName = StringUtils.decapitalize(ClassUtils.getSimpleName(componentType));
// Create a link...
HtmlOutcomeTargetLink link = new HtmlOutcomeTargetLink();
String outcome = getTargetDir();
if (!outcome.isEmpty() && !outcome.startsWith("/"))
{
outcome = "/" + outcome;
}
link.putAttribute("outcome", outcome + "/" + controllerName + "/view");
// ...pointing to the id
String primaryKeyName = "id";
String inspectedType = metawidget.inspect(null, componentType);
if (inspectedType != null)
{
Element root = XmlUtils.documentFromString(inspectedType).getDocumentElement();
NodeList elements = root.getFirstChild().getChildNodes();
for (int loop = 0, length = elements.getLength(); loop < length; loop++)
{
Element element = (Element) elements.item(loop);
if (element.hasAttribute(PRIMARY_KEY))
{
primaryKeyName = element.getAttribute(NAME);
break;
}
}
}
Param param = new Param();
param.putAttribute("name", "id");
param.putAttribute(
"value",
StaticFacesUtils.wrapExpression(dataTable.getAttribute("var") + StringUtils.SEPARATOR_DOT_CHAR
+ primaryKeyName));
link.getChildren().add(param);
link.getChildren().add(column.getChildren().remove(1));
if (columnAttributes.containsKey(FACES_LOOKUP) && columnAttributes.containsKey(REVERSE_PRIMARY_KEY))
{
StaticHtmlMetawidget output = (StaticHtmlMetawidget) link.getChildren().get(1);
String displayExpression = "forgeview:display(" + dataTable.getAttribute("var")
+ StringUtils.SEPARATOR_DOT_CHAR
+ StringUtils.decapitalize(columnAttributes.get(NAME)) + ")";
((BaseStaticXmlWidget) link).putAdditionalNamespaceURI("forgeview", "http://jboss.org/forge/view");
output.setValue(StaticFacesUtils.wrapExpression(displayExpression));
}
if (tableAttributes.get(PARAMETERIZED_TYPE_PATH) != null)
{
// Recreate the EL expression. This is done to ensure that correctly nested EL expressions are created for
// expanded entities. The originally created expression in super.addColumnComponent is incorrect for
// expanded entities since it assumes that all referenced names are at the same level
String valueExpression = dataTable.getAttribute("var") + StringUtils.SEPARATOR_DOT_CHAR
+ tableAttributes.get(PARAMETERIZED_TYPE_PATH) + StringUtils.SEPARATOR_DOT_CHAR
+ StringUtils.decapitalize(columnAttributes.get(NAME));
StaticHtmlMetawidget output = (StaticHtmlMetawidget) link.getChildren().get(1);
output.setValue(StaticFacesUtils.wrapExpression(valueExpression));
}
column.getChildren().add(link);
// If bidirectional, add a footer facet