private static Menu buildMenu()

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;
    }