}
_attrMap = _getMapFromList(attrList);
// Create either an itemNode or groupNode.
MenuNode menuNode = _createMenuNode();
if (menuNode == null)
{
// No menu item is created, so note that we are
// now skipping the subtree
_skipDepth = _nodeDepth;
}
else
{
if ( (_resBundleName != null && !"".equals(_resBundleName))
&& (_resBundleKey != null && !"".equals(_resBundleKey))
)
{
menuNode.setResBundleKey(_resBundleKey);
menuNode.setResBundleName(_resBundleName);
}
// Set the node's MenuContentHandlerUsingApiImpl id so that when
// the node's getLabel() method is called, we can
// use the handlerId to insert into the label
// if it is an EL expression.
menuNode.setHandlerId(getHandlerId());
// Set the root model on the node so we can call into
// the root model from the node to populate its
// idNodeMap (See XMLMenuModel.java)
menuNode.setRootModelKey(getRootModelKey());
// Set the local model (created when parsing a sharedNode)
// on the node in case the node needs to get back to its
// local model.
menuNode.setModelId(getModelId());
// menu nodes need to know how to refer
// back to the specific xml menu model
// so that they can mutate them.
FacesContext facesContext = FacesContext.getCurrentInstance();
Map<String, Object> requestMap =
facesContext.getExternalContext().getRequestMap();
if(!requestMap.containsKey(XMLMenuModel.SHARED_MODEL_INDICATOR_KEY))
menuNode.setRootId( (getId() ) );
else
menuNode.setRootId((Integer) requestMap.get(XMLMenuModel.SHARED_MODEL_INDICATOR_KEY));
List<MenuNode> list = _menuNodes.get(_nodeDepth-1);
list.add(menuNode.getThreadSafeCopy());
}
}
else if (_SHARED_NODE.equals(qualifiedElemName))
{
_nodeDepth++;