cmsexplorercontextmenubuilder.java
来自「找了很久才找到到源代码」· Java 代码 · 共 519 行 · 第 1/2 页
JAVA
519 行
isFirst = false;
} else {
parentIdsBuffer.append(",");
}
parentIdsBuffer.append(pItem.getParent().getKey().hashCode());
pItem = pItem.getParent();
}
if (!isFirst) {
parentIdsBuffer.append("'");
}
String parentIds = parentIdsBuffer.toString();
if (item.isParentItem()) {
// this is a parent item entry, first check if it is displayed at all
CmsMenuItemVisibilityMode mode = CmsMenuItemVisibilityMode.VISIBILITY_INVISIBLE;
String itemRuleName = item.getRule();
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(itemRuleName)) {
CmsMenuRule rule = OpenCms.getWorkplaceManager().getMenuRule(itemRuleName);
if (rule != null) {
// get the first matching rule to apply for visibility
I_CmsMenuItemRule itemRule = rule.getMatchingRule(getCms(), resUtil);
if (itemRule != null) {
// found a rule, now get the rules for all sub items
List itemRules = new ArrayList(item.getSubItems().size());
getSubItemRules(item, itemRules, resUtil);
I_CmsMenuItemRule[] itemRulesArray = new I_CmsMenuItemRule[itemRules.size()];
// determine the visibility for the parent item
mode = itemRule.getVisibility(
getCms(),
resUtil,
(I_CmsMenuItemRule[])itemRules.toArray(itemRulesArray));
}
}
}
// only show the entry if visible sub items were found
if (!mode.isInVisible()) {
if (insertSeparator) {
menu.append(HTML_SEPARATOR);
insertSeparator = false;
}
menu.append("\n<li><a class=\"x\" href=\"javascript:var ocm=1;\" onmouseover=\"window.status='';top.oSubC('");
menu.append(item.getKey().hashCode());
menu.append("'");
if (CmsStringUtil.isNotEmpty(parentIds)) {
// append the parent IDs to keep open
menu.append(",");
menu.append(parentIds);
}
menu.append(");return true;\">");
menu.append(key(item.getKey()));
menu.append("</a>");
// recurse into sub menu items
buildHtmlContextMenu(
item.getSubItems(),
item,
menu,
resUtil,
menuRuleTranslator,
isSingleSelection,
storedModes);
menu.append("</li>");
firstEntryWritten = true;
}
} else if (CmsExplorerContextMenuItem.TYPE_ENTRY.equals(item.getType())) {
// this is a common menu entry
// first determine name, link and target or item
String itemName = key(item.getKey());
String itemLink = " ";
if (item.getUri().startsWith("/")) {
itemLink = getJsp().link(item.getUri());
} else {
itemLink = getJsp().link(CmsWorkplace.PATH_WORKPLACE + item.getUri());
}
String itemTarget = item.getTarget();
if (CmsStringUtil.isEmptyOrWhitespaceOnly(itemTarget)) {
itemTarget = "";
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(getParamActtarget())
&& (item.getUri() != null)
&& item.getUri().startsWith("views/admin/admin-main.jsp")) {
itemTarget = getParamActtarget();
}
}
CmsMenuRule customMenuRule = null;
String itemRuleName = item.getRule();
// check presence of item rule name and determine the correct rule name
if (CmsStringUtil.isEmptyOrWhitespaceOnly(itemRuleName)) {
if (isSingleSelection) {
// no new rule set defined, try to get it with the rule translator
if (menuRuleTranslator.hasMenuRule(item.getRules())) {
// this is a standard known rule, get the name of the matching rule set
itemRuleName = menuRuleTranslator.getMenuRuleName(item.getRules());
item.setRule(itemRuleName);
} else {
// no standard rule, create a new rule set from legacy rule String
customMenuRule = menuRuleTranslator.createMenuRule(item.getRules());
// set the rule name
itemRuleName = customMenuRule.getName();
}
} else {
// for multi context menu, use the standard rule if no rule set name was provided
itemRuleName = CmsMirMultiStandard.RULE_NAME;
if (!storedModes.containsKey(itemRuleName)) {
storedModes.put(itemRuleName, new CmsMirMultiStandard().getVisibility(getCms(), resUtil));
}
}
}
// first try to get the mode from the previously stored modes
CmsMenuItemVisibilityMode mode = (CmsMenuItemVisibilityMode)storedModes.get(itemRuleName);
// no mode found in stored modes
if (mode == null) {
// get the matching rule set
CmsMenuRule rule;
if (customMenuRule != null) {
rule = customMenuRule;
} else {
rule = OpenCms.getWorkplaceManager().getMenuRule(itemRuleName);
}
if (rule != null) {
// get the first matching rule to apply for visibility
I_CmsMenuItemRule itemRule = rule.getMatchingRule(getCms(), resUtil);
if (itemRule != null) {
// found a rule, get visibility mode and store it for later usage
mode = itemRule.getVisibility(getCms(), resUtil);
storedModes.put(item.getRule(), mode);
}
}
}
if (mode != null) {
// found a visibility mode
if (mode.isActive()) {
// item is active
if (insertSeparator) {
menu.append(HTML_SEPARATOR);
insertSeparator = false;
}
StringBuffer link = new StringBuffer(128);
if (isSingleSelection) {
// create link for single resource context menu
link.append("href=\"");
link.append(itemLink);
if (itemLink.indexOf('?') > -1) {
link.append("&resource=");
} else {
link.append("?resource=");
}
link.append(getCms().getSitePath(resUtil[0].getResource()));
link.append("\"");
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(itemTarget)) {
// href has a target set
link.append(" target=\"");
link.append(itemTarget);
link.append("\"");
}
// mouse up event is necessary for Firefox browser
link.append(" onmouseup=\"top.submitSingleAction('");
link.append(itemLink);
link.append("', '");
link.append(itemTarget);
link.append("');\"");
} else {
// create link for multi resource context menu
link.append("href=\"javascript:top.submitMultiAction('");
link.append(itemLink);
link.append("');\"");
// mouse up event is necessary for Firefox browser
link.append(" onmouseup=\"top.submitMultiAction('");
link.append(itemLink);
link.append("');\"");
}
menu.append("\n<li><a ");
menu.append(link);
menu.append(" onmouseover=\"window.status='';top.cSubC(");
// append parent IDs to keep open
menu.append(parentIds);
menu.append(");return true;\"");
menu.append(">");
menu.append(itemName);
menu.append("</a></li>");
firstEntryWritten = true;
} else if (mode.isInActive()) {
// item is inactive
if (insertSeparator) {
menu.append(HTML_SEPARATOR);
insertSeparator = false;
}
menu.append("\n<li>");
menu.append("<a ");
menu.append(" onmouseover=\"window.status='';top.cSubC(");
// append parent IDs to keep open
menu.append(parentIds);
menu.append(");return true;\"");
// append inactive cause message if given
if (CmsStringUtil.isNotEmpty(mode.getMessageKey())) {
menu.append(" title=\"");
menu.append(getMessages().key(CmsEncoder.escapeXml(mode.getMessageKey())));
menu.append("\"");
}
menu.append(" class=\"ina\" href=\"javascript:var ocm=1;\">").append(itemName).append("</a>");
menu.append("</li>");
firstEntryWritten = true;
}
}
} else {
// separator line, set flag to remember that a separator has been set, the separator will then
// be written before the next visible item is appended
if (firstEntryWritten) {
insertSeparator = true;
}
}
} // end while
menu.append("\n</ul>");
}
/**
* @see org.opencms.workplace.CmsWorkplace#initWorkplaceRequestValues(org.opencms.workplace.CmsWorkplaceSettings, javax.servlet.http.HttpServletRequest)
*/
protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) {
fillParamValues(request);
}
/**
* Collects the matching rules of all sub items of a parent context menu entry.<p>
*
* @param item the context menu item to check the sub items for
* @param itemRules the collected rules for the sub items
* @param resourceUtil the resources to be checked against the rules
*/
private void getSubItemRules(CmsExplorerContextMenuItem item, List itemRules, CmsResourceUtil[] resourceUtil) {
Iterator i = item.getSubItems().iterator();
while (i.hasNext()) {
CmsExplorerContextMenuItem subItem = (CmsExplorerContextMenuItem)i.next();
if (subItem.isParentItem()) {
// this is a parent item, recurse into sub items
getSubItemRules(subItem, itemRules, resourceUtil);
} else if (CmsExplorerContextMenuItem.TYPE_ENTRY.equals(subItem.getType())) {
// this is a standard entry, get the matching rule to add to the list
String subItemRuleName = subItem.getRule();
CmsMenuRule subItemRule = OpenCms.getWorkplaceManager().getMenuRule(subItemRuleName);
I_CmsMenuItemRule rule = subItemRule.getMatchingRule(getCms(), resourceUtil);
if (rule != null) {
itemRules.add(rule);
}
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?