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;
}
}
}
catch (ConfigurationException x)
{
}
if (itemAllowed)
{
cmd = res.createCommand(model);
outMenu.add(cmd);
cmd.setLabel(itemConfig.getAttribute("title", "$noTitle"));
cmd.setAttribute("hasNext", new Boolean(j + 1 < items.length));
cmd.setAttribute("bundle", itemConfig.getAttribute("bundle", "Aktera"));
if (itemConfig.getAttribute("icon", null) != null)
{
cmd.setAttribute("icon", itemConfig.getAttribute("icon", "menu-bullet"));
}
++numVisibleItems;
}
}
outMenu.setAttribute("numVisibleItems", new Integer(numVisibleItems));
if (cmd != null)
{
cmd.setAttribute("last", new Boolean(true));
}
}
return res;
}