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 + -
显示快捷键?