public Map<String, Object> getFactoryOptions(Object nodeObject) {
if (nodeObject == null) {
return null;
}
LayoutComponent desc = getLayoutComponent();
Map<String, Object> props = new HashMap<String, Object>();
if (nodeObject.toString().equals(_objectName)) {
// This case deals with the top node.
// NOTE: All supported options must be handled here,
// otherwise they'll be ignored.
// NOTE: Options will be evaluated later, do not eval here.
setProperty(props, "text", desc.getOption("text"));
setProperty(props, "url", desc.getOption("url"));
setProperty(props, "imageURL", desc.getOption("imageURL"));
setProperty(props, "target", desc.getOption("target"));
setProperty(props, "action", desc.getOption("action"));
// NOTE: Although actionListener is supported, LH currently
// implements this to be the ActionListener of the "turner"
// which is inconsistent with "action". We should make use
// of the "Handler" feature which provides a "toggle"
// CommandEvent.
setProperty(props, "actionListener", desc.getOption("actionListener"));
setProperty(props, "expanded", desc.getOption("expanded"));
setProperty(props, "rendered", desc.getOption("rendered"));
} else {
// This case deals with the children
// NOTE: All supported options must be handled here,
// otherwise they'll be ignored
// FIXME: There was a check near here (in DynamicTreeNode.updateKids(...) for
// FIXME: isChildValid... figure out how we want to expose an "exludes" list
// FIXME: or filter to make this more generalized.
if (nodeObject instanceof ObjectName) {
if (_nameAtt != null) {
setProperty(props, "text",
(String) JMXUtil.getAttribute(
(ObjectName) nodeObject, _nameAtt));
} else if (_nameMethod != null) {
// This is for monitoring MBeans, they don't have a name
// attr, but perhaps a getName() method.
setProperty(props, "text", (String) JMXUtil.invoke(
(ObjectName) nodeObject, _nameMethod, null, null));
}
if (!props.containsKey("text")) {
// fallback to the object name
setProperty(props, "text", nodeObject.toString());
}
} else if (nodeObject instanceof String) {
setProperty(props, "text", (String) nodeObject);
/*
FIXME: This is from line #108 - 109 of DynamicTreeNode.java:
node.setAttribute("webServiceKey", webServiceKeyMap.get(name));
node.setAttribute("webServiceName", name);
*/
} else {
throw new RuntimeException("'" + nodeObject
+ "' Illegal type ("
+ nodeObject.getClass().getName()
+ ") for tree processing");
}
// Finish setting the child properties
setProperty(props, "url", desc.getOption("childURL"));
setProperty(props, "imageURL", desc.getOption("childImageURL"));
setProperty(props, "target", desc.getOption("childTarget"));
setProperty(props, "action", desc.getOption("childAction"));
String tt = (String) desc.getOption("targetConfigName");
if (!GuiUtil.isEmpty(tt)){
setProperty(props, "targetConfigName", tt);
}
String check = (String) desc.getOption("checkAdminServer");
if (!GuiUtil.isEmpty(check)){
String serverName = (String) props.get("text");
if (serverName.equals("server")){
setProperty(props, "text", "server (Admin Server)");
setProperty(props, "serverName", "server");
}else
setProperty(props, "serverName", serverName);
}
// We are using "childActionListener" for the hyperlink, not the TreeNode
// setProperty(props, "actionListener", desc.getOption("childActionListener"));
setProperty(props, "expanded", desc.getOption("childExpanded"));
}
// Return the options
return props;
}