cmsworkplaceconfiguration.java

来自「找了很久才找到到源代码」· Java 代码 · 共 1,324 行 · 第 1/5 页

JAVA
1,324
字号
            2);
        digester.addCallParam("*/" + N_EXPLORERTYPE + "/" + N_EDITOPTIONS + "/" + N_DEFAULTPROPERTIES, 0, A_ENABLED);
        digester.addCallParam(
            "*/" + N_EXPLORERTYPE + "/" + N_EDITOPTIONS + "/" + N_DEFAULTPROPERTIES,
            1,
            A_SHOWNAVIGATION);

        digester.addCallMethod("*/"
            + N_EXPLORERTYPE
            + "/"
            + N_EDITOPTIONS
            + "/"
            + N_DEFAULTPROPERTIES
            + "/"
            + N_PROPERTY, "addProperty", 1);
        digester.addCallParam("*/"
            + N_EXPLORERTYPE
            + "/"
            + N_EDITOPTIONS
            + "/"
            + N_DEFAULTPROPERTIES
            + "/"
            + N_PROPERTY, 0, A_NAME);

        digester.addCallMethod("*/"
            + N_EXPLORERTYPE
            + "/"
            + N_EDITOPTIONS
            + "/"
            + N_DEFAULTPROPERTIES
            + "/"
            + N_DEFAULTPROPERTY, "addProperty", 1);
        digester.addCallParam("*/"
            + N_EXPLORERTYPE
            + "/"
            + N_EDITOPTIONS
            + "/"
            + N_DEFAULTPROPERTIES
            + "/"
            + N_DEFAULTPROPERTY, 0, A_NAME);

        addContextMenuItemRules(digester, "*");

        digester.addCallMethod("*/" + N_EXPLORERTYPE + "/" + N_EDITOPTIONS + "/" + N_CONTEXTMENU, "createContextMenu");
        digester.addCallMethod("*/" + N_EXPLORERTYPE + "/" + N_EDITOPTIONS, "setEditOptions");
    }

    /**
     * Creates the xml output for explorer type nodes.<p>
     * 
     * @param startNode the startnode to add all rescource types to
     * @param explorerTypes the list of explorer types
     * @param module true if the XML tree for the module config should be generated, false otherwise
     */
    public static void generateExplorerTypesXml(Element startNode, List explorerTypes, boolean module) {

        // we need the default access node later to check if the explorer type is an individual setting
        CmsExplorerTypeAccess defaultAccess = null;
        if (OpenCms.getWorkplaceManager() != null) {
            defaultAccess = OpenCms.getWorkplaceManager().getDefaultAccess();
        }
        // get the menu rule translator to eliminate eventual legacy menu rules
        CmsMenuRuleTranslator menuRuleTranslator = new CmsMenuRuleTranslator();
        Iterator i = explorerTypes.iterator();
        while (i.hasNext()) {
            // create an explorer type node
            CmsExplorerTypeSettings settings = (CmsExplorerTypeSettings)i.next();

            if (settings.isAddititionalModuleExplorerType() == module) {
                Element explorerTypeElement = startNode.addElement(N_EXPLORERTYPE);
                explorerTypeElement.addAttribute(A_NAME, settings.getName());
                explorerTypeElement.addAttribute(A_KEY, settings.getKey());
                explorerTypeElement.addAttribute(A_ICON, settings.getIcon());
                if (settings.getReference() != null) {
                    explorerTypeElement.addAttribute(A_REFERENCE, settings.getReference());
                }
                // create subnode <newresource>
                Element newResElement = explorerTypeElement.addElement(N_NEWRESOURCE);
                if (CmsStringUtil.isNotEmpty(settings.getNewResourcePage())) {
                    newResElement.addAttribute(A_PAGE, settings.getNewResourcePage());
                }
                newResElement.addAttribute(A_HANDLER, settings.getNewResourceHandlerClassName());
                newResElement.addAttribute(A_URI, CmsEncoder.escapeXml(settings.getNewResourceUri()));
                newResElement.addAttribute(A_ORDER, settings.getNewResourceOrder());
                newResElement.addAttribute(A_AUTOSETNAVIGATION, String.valueOf(settings.isAutoSetNavigation()));
                newResElement.addAttribute(A_AUTOSETTITLE, String.valueOf(settings.isAutoSetTitle()));
                newResElement.addAttribute(A_INFO, settings.getInfo());
                newResElement.addAttribute(A_ICON, settings.getDescriptionImage());
                newResElement.addAttribute(A_KEY, settings.getTitleKey());
                // create subnode <accesscontrol>            
                CmsExplorerTypeAccess access = settings.getAccess();
                if (access != defaultAccess) {
                    // don't output the node if this is in fact the default access settings
                    List accessEntries = new ArrayList(access.getAccessEntries().keySet());
                    // sort accessEntries
                    Collections.sort(accessEntries);
                    if (accessEntries.size() > 0) {
                        Element accessControlElement = explorerTypeElement.addElement(N_ACCESSCONTROL);
                        Iterator k = accessEntries.iterator();
                        while (k.hasNext()) {
                            String key = (String)k.next();
                            String value = (String)settings.getAccess().getAccessEntries().get(key);
                            Element accessEntryElement = accessControlElement.addElement(N_ACCESSENTRY);
                            accessEntryElement.addAttribute(A_PRINCIPAL, key);
                            accessEntryElement.addAttribute(A_PERMISSIONS, value);
                        }
                    }
                }
                // create subnode <editoptions>
                if (settings.hasEditOptions()) {
                    Element editOptionsElement = explorerTypeElement.addElement(N_EDITOPTIONS);
                    Element defaultPropertiesElement = editOptionsElement.addElement(N_DEFAULTPROPERTIES);
                    defaultPropertiesElement.addAttribute(A_ENABLED, String.valueOf(settings.isPropertiesEnabled()));
                    defaultPropertiesElement.addAttribute(A_SHOWNAVIGATION, String.valueOf(settings.isShowNavigation()));
                    Iterator m = settings.getProperties().iterator();
                    while (m.hasNext()) {
                        defaultPropertiesElement.addElement(N_DEFAULTPROPERTY).addAttribute(A_NAME, (String)m.next());
                    }
                    Element contextMenuElement = editOptionsElement.addElement(N_CONTEXTMENU);
                    m = settings.getContextMenuEntries().iterator();
                    while (m.hasNext()) {
                        CmsExplorerContextMenuItem item = (CmsExplorerContextMenuItem)m.next();
                        generateContextMenuItemXml(contextMenuElement, menuRuleTranslator, item);
                    }
                }
            }
        }
    }

    /**
     * Adds the context menu item rules to the given digester.<p>
     *  
     * @param digester the digester to add the rules to
     * @param xPathPrefix the path prefix (should be the path to the contextmenu or the multicontextmenu node)
     */
    protected static void addContextMenuItemRules(Digester digester, String xPathPrefix) {

        // add the rules for an entry item
        String xPath = xPathPrefix + "/" + N_ENTRY;
        digester.addObjectCreate(xPath, CmsExplorerContextMenuItem.class);
        digester.addCallMethod(xPath, "setKey", 1);
        digester.addCallParam(xPath, 0, A_KEY);
        digester.addCallMethod(xPath, "setUri", 1);
        digester.addCallParam(xPath, 0, A_URI);
        digester.addCallMethod(xPath, "setRules", 1);
        digester.addCallParam(xPath, 0, A_RULES);
        digester.addCallMethod(xPath, "setRule", 1);
        digester.addCallParam(xPath, 0, A_RULE);
        digester.addCallMethod(xPath, "setTarget", 1);
        digester.addCallParam(xPath, 0, A_TARGET);
        digester.addSetNext(xPath, "addContextMenuEntry");

        // add the rules for a separator item
        xPath = xPathPrefix + "/" + N_SEPARATOR;
        digester.addObjectCreate(xPath, CmsExplorerContextMenuItem.class);
        digester.addSetNext(xPath, "addContextMenuSeparator");
    }

    /**
     * Creates the xml output for context menu item nodes and eventual subnodes.<p>
     * 
     * @param parentElement the parent element to add the item node to
     * @param menuRuleTranslator the menu rule translator to use for legacy rules
     * @param item the context menu item to create the node for
     */
    protected static void generateContextMenuItemXml(
        Element parentElement,
        CmsMenuRuleTranslator menuRuleTranslator,
        CmsExplorerContextMenuItem item) {

        Element itemElement;
        if (CmsExplorerContextMenuItem.TYPE_ENTRY.equals(item.getType())) {
            // create an <entry> node
            itemElement = parentElement.addElement(N_ENTRY);
            itemElement.addAttribute(A_KEY, item.getKey());
            itemElement.addAttribute(A_URI, item.getUri());
            if (item.getTarget() != null) {
                itemElement.addAttribute(A_TARGET, item.getTarget());
            }
            String rule = item.getRule();
            if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(rule)) {
                itemElement.addAttribute(A_RULE, rule);
            } else {
                String legacyRules = item.getRules();
                if (CmsStringUtil.isNotEmpty(legacyRules) && menuRuleTranslator.hasMenuRule(legacyRules)) {
                    itemElement.addAttribute(A_RULE, menuRuleTranslator.getMenuRuleName(legacyRules));
                } else {
                    itemElement.addAttribute(A_RULES, legacyRules);
                }
            }
            if (item.isParentItem()) {
                Iterator i = item.getSubItems().iterator();
                while (i.hasNext()) {
                    CmsExplorerContextMenuItem subItem = (CmsExplorerContextMenuItem)i.next();
                    generateContextMenuItemXml(itemElement, menuRuleTranslator, subItem);
                }
            }
        } else {
            // create a <separator> node
            parentElement.addElement(N_SEPARATOR);
        }
    }

    /**
     * @see org.opencms.configuration.I_CmsXmlConfiguration#addXmlDigesterRules(org.apache.commons.digester.Digester)
     */
    public void addXmlDigesterRules(Digester digester) {

        // add finish rule
        digester.addCallMethod("*/" + N_WORKPLACE, "initializeFinished");

        // generic <param> parameter rules
        digester.addCallMethod(
            "*/" + I_CmsXmlConfiguration.N_PARAM,
            I_CmsConfigurationParameterHandler.ADD_PARAMETER_METHOD,
            2);
        digester.addCallParam("*/" + I_CmsXmlConfiguration.N_PARAM, 0, I_CmsXmlConfiguration.A_NAME);
        digester.addCallParam("*/" + I_CmsXmlConfiguration.N_PARAM, 1);

        // creation of the import/export manager        
        digester.addObjectCreate("*/" + N_WORKPLACE, CmsWorkplaceManager.class);
        // import/export manager finished
        digester.addSetNext("*/" + N_WORKPLACE, "setWorkplaceManager");

        // add default locale rule
        digester.addCallMethod("*/" + N_WORKPLACE + "/" + N_DEFAULTLOCALE, "setDefaultLocale", 0);

        // add default properties on structure setting
        digester.addCallMethod(
            "*/" + N_WORKPLACE + "/" + N_DEFAULTPROPERTIESONSTRUCTURE,
            "setDefaultPropertiesOnStructure",
            0);

        // add default properties on structure setting
        digester.addCallMethod(
            "*/" + N_WORKPLACE + "/" + N_ENABLEADVANCEDPROPERTYTABS,
            "setEnableAdvancedPropertyTabs",
            0);

        // add rules for dialog handlers
        digester.addObjectCreate(
            "*/" + N_WORKPLACE + "/" + N_DIALOGHANDLERS + "/" + N_DIALOGHANDLER,
            A_CLASS,
            CmsConfigurationException.class);
        digester.addSetNext("*/" + N_WORKPLACE + "/" + N_DIALOGHANDLERS + "/" + N_DIALOGHANDLER, "addDialogHandler");

        // add rules for editor handler
        digester.addObjectCreate("*/" + N_WORKPLACE + "/" + N_EDITORHANDLER, A_CLASS, CmsConfigurationException.class);
        digester.addSetNext("*/" + N_WORKPLACE + "/" + N_EDITORHANDLER, "setEditorHandler");

        // add rules for editor action handler
        digester.addObjectCreate("*/" + N_WORKPLACE + "/" + N_EDITORACTION, A_CLASS, CmsConfigurationException.class);
        digester.addSetNext("*/" + N_WORKPLACE + "/" + N_EDITORACTION, "setEditorAction");

        // add rules for editor css handler classes
        digester.addCallMethod(
            "*/" + N_WORKPLACE + "/" + N_EDITORCSSHANDLERS + "/" + N_EDITORCSSHANDLER,
            "addEditorCssHandler",
            1);
        digester.addCallParam("*/" + N_WORKPLACE + "/" + N_EDITORCSSHANDLERS + "/" + N_EDITORCSSHANDLER, 0, A_CLASS);

        // add rules for pre editor action classes
        digester.addCallMethod(
            "*/" + N_WORKPLACE + "/" + N_EDITORPRECONDITIONS + "/" + N_EDITORPRECONDITION,
            "addPreEditorConditionDefinition",

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?