in app/src/main/java/org/apache/roller/weblogger/ui/core/util/menu/MenuHelper.java [139:270]
private static Menu buildMenu(String menuId, ParsedMenu menuConfig,
String currentAction, User user, Weblog weblog)
throws WebloggerException {
// log.debug("creating menu for action - " + currentAction);
Menu tabMenu = new Menu();
UserManager umgr = WebloggerFactory.getWeblogger().getUserManager();
// Hack - for blogger convenience, the design tab of the edit
// menu defaults to the templates tab item (instead of theme edit)
// if the weblog is using a custom theme.
boolean customThemeOverride = "editor".equals(menuId)
&& WeblogTheme.CUSTOM.equals(weblog.getEditorTheme());
// iterate over tabs from parsed config
for (ParsedTab configTab : menuConfig.getTabs()) {
// log.debug("config tab = " + configTab.getName());
// does this tab have an enabledProperty?
boolean includeTab = true;
if (configTab.getEnabledProperty() != null) {
includeTab = getBooleanProperty(configTab.getEnabledProperty());
} else if (configTab.getDisabledProperty() != null) {
includeTab = !getBooleanProperty(configTab.getDisabledProperty());
}
// user roles check
if (includeTab && configTab.getGlobalPermissionActions() != null
&& !configTab.getGlobalPermissionActions().isEmpty()) {
try {
GlobalPermission perm = new GlobalPermission( configTab.getGlobalPermissionActions());
if (!umgr.checkPermission(perm, user)) {
includeTab = false;
}
} catch (WebloggerException ex) {
log.error("ERROR: fetching user roles", ex);
includeTab = false;
}
}
// weblog permissions check
if (includeTab && configTab.getWeblogPermissionActions() != null
&& !configTab.getWeblogPermissionActions().isEmpty()) {
WeblogPermission perm = new WeblogPermission(weblog, configTab.getWeblogPermissionActions());
includeTab = umgr.checkPermission(perm, user);
}
if (includeTab) {
// log.debug("tab allowed - " + configTab.getName());
// all checks passed, tab should be included
MenuTab tab = new MenuTab();
tab.setKey(configTab.getName());
// setup tab items
boolean firstItem = true;
boolean selectable = true;
for (ParsedTabItem configTabItem : configTab.getTabItems()) {
boolean includeItem = true;
if (configTabItem.getEnabledProperty() != null) {
includeItem = getBooleanProperty(configTabItem.getEnabledProperty());
} else if (configTabItem.getDisabledProperty() != null) {
includeItem = !getBooleanProperty(configTabItem.getDisabledProperty());
}
// user roles check
if (includeItem
&& configTabItem.getGlobalPermissionActions() != null
&& !configTabItem.getGlobalPermissionActions() .isEmpty()) {
GlobalPermission perm = new GlobalPermission(
configTabItem.getGlobalPermissionActions());
if (!umgr.checkPermission(perm, user)) {
includeItem = false;
}
}
// weblog permissions check
if (includeItem
&& configTabItem.getWeblogPermissionActions() != null
&& !configTabItem.getWeblogPermissionActions().isEmpty()) {
WeblogPermission perm = new WeblogPermission(weblog, configTabItem.getWeblogPermissionActions());
includeItem = umgr.checkPermission(perm, user);
}
if (includeItem) {
// log.debug("tab item allowed - "
// + configTabItem.getName());
// all checks passed, item should be included
MenuTabItem tabItem = new MenuTabItem();
tabItem.setKey(configTabItem.getName());
tabItem.setAction(configTabItem.getAction());
// is this the selected item? Only one can be selected
// so skip the rest
if (currentAction != null && selectable
&& isSelected(currentAction, configTabItem)) {
tabItem.setSelected(true);
tab.setSelected(true);
selectable = false;
}
// the url for the tab is the url of the first tab item
if (firstItem) {
if (customThemeOverride && "tabbedmenu.design".equals(tab.getKey())) {
tab.setAction("templates");
} else {
tab.setAction(tabItem.getAction());
}
firstItem = false;
}
// add the item
tab.addItem(tabItem);
}
}
// add the tab
tabMenu.addTab(tab);
}
}
return tabMenu;
}