if (config == null)
{
return res;
}
UserEnvironment userEnv = null;
try
{
userEnv = (UserEnvironment) req.getContext().get(UserEnvironment.CONTEXT_KEY);
}
catch (ContextException x)
{
}
Output outMenuList = res.createOutput("menuList");
res.add(outMenuList);
Configuration[] menus = config.getChildren("menu");
for (int i = 0; i < menus.length; ++i)
{
Configuration menuConfig = menus[i];
try
{
if (menuConfig.getAttribute("ifModule", null) != null
&& ! ModuleTools.moduleExists(req, menuConfig.getAttribute("ifModule")))
{
continue;
}
}
catch (ConfigurationException x)
{
}
String menuId = "menu_" + menuConfig.getAttribute("id", "");
Output outMenu = null;
for (Iterator j = outMenuList.getAll().iterator(); j.hasNext();)
{
Output aMenu = (Output) j.next();
if (aMenu.getName().equals(menuId))
{
outMenu = aMenu;
break;
}
}
if (outMenu == null)
{
outMenu = res.createOutput(menuId);
outMenuList.add(outMenu);
outMenu.setAttribute("title", menuConfig.getAttribute("title", "$noTitle"));
}
Command cmd = null;
Configuration[] items = menus[i].getChildren("item");
int numVisibleItems = 0;
for (int j = 0; j < items.length; ++j)
{
Configuration itemConfig = items[j];
boolean itemAllowed = true;
String model = itemConfig.getAttribute("model", null);
if (model == null)
{
log.info("No model specified for menu item " + i + "/" + j);
continue;
}
try
{
boolean validUser = itemConfig.getAttributeAsBoolean("validUser");
try
{
itemAllowed = itemAllowed
&& (validUser == (userEnv != null && userEnv.getUid() != UserEnvironment.ANONYMOUS_UID));
}
catch (AuthorizationException x)
{
itemAllowed = ! validUser;
}
}
catch (ConfigurationException x)
{
}
try
{
String userGroup = itemConfig.getAttribute("userGroup");
try
{
itemAllowed = itemAllowed && userEnv != null && userEnv.getGroups().contains(userGroup);
}
catch (AuthorizationException x)
{
itemAllowed = false;
}
String notUserGroup = itemConfig.getAttribute("notUserGroup");
if (notUserGroup != null)
{
try
{
itemAllowed = itemAllowed && userEnv != null
&& ! userEnv.getGroups().contains(notUserGroup);
}
catch (AuthorizationException x)
{
itemAllowed = false;
}