/* * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package com.celements.navigation; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.xwiki.model.reference.DocumentReference; import org.xwiki.model.reference.SpaceReference; import com.celements.web.service.IWebUtilsService; import com.xpn.xwiki.XWikiContext; import com.xpn.xwiki.XWikiException; import com.xpn.xwiki.api.Api; import com.xpn.xwiki.doc.XWikiDocument; import com.xpn.xwiki.objects.BaseObject; import com.xpn.xwiki.web.Utils; public class NavigationApi extends Api { private static Log LOGGER = LogFactory.getFactory().getInstance(NavigationApi.class); private INavigation navigation; private NavigationApi(INavigation navigation, XWikiContext context) { super(context); this.navigation = navigation; } public static NavigationApi getAPIObject(INavigation navigation, XWikiContext context) { return new NavigationApi(navigation, context); } public static NavigationApi createNavigation(XWikiContext context) { return getAPIObject(Navigation.createNavigation(), context); } /** * getMultilingualMenuName DOES NOT allow empty menu names as return value in contrast * to getMultilingualMenuNameOnly * * @param fullName * @param language * @return */ public String getMultilingualMenuName(String fullName, String language) { return navigation.getMenuNameCmd().getMultilingualMenuName(fullName, language, context); } public String getMultilingualMenuName(com.xpn.xwiki.api.Object menuItem, String language) { return navigation.getMenuNameCmd().getMultilingualMenuName(menuItem, language, context); } public String getMultilingualMenuName(com.xpn.xwiki.api.Object menuItem, String language, boolean allowEmptyMenuNames) { return navigation.getMenuNameCmd().getMultilingualMenuName(menuItem.getXWikiObject(), language, allowEmptyMenuNames, context); } /** * getMultilingualMenuNameOnly DOES allow empty menu names as return value in contrast * to getMultilingualMenuName * * @param fullName * @param language * @return */ public String getMultilingualMenuNameOnly(String fullName, String language) { return navigation.getMenuNameCmd().getMultilingualMenuNameOnly(fullName, language, true, context); } public String getMultilingualMenuNameOnly(String fullName, String language, boolean allowEmptyMenuNames) { return navigation.getMenuNameCmd().getMultilingualMenuNameOnly(fullName, language, allowEmptyMenuNames, context); } public String includeNavigation() { return navigation.includeNavigation(); } public String includeNavigation(DocumentReference parentRef) { return navigation.includeNavigation(parentRef); } public int getMenuItemPos(String fullName) { return navigation.getMenuItemPos(fullName, context); } public int getActiveMenuItemPos(int menuLevel) { return navigation.getActiveMenuItemPos(menuLevel, context); } public List<com.xpn.xwiki.api.Object> getMenuItemsForHierarchyLevel(int menuLevel) { return navigation.getMenuItemsForHierarchyLevel(menuLevel, context); } public void setFromHierarchyLevel(int fromHierarchyLevel) { navigation.setFromHierarchyLevel(fromHierarchyLevel); } public void setToHierarchyLevel(int toHierarchyLevel) { navigation.setToHierarchyLevel(toHierarchyLevel); } public void setMenuPart(String menuPart) { navigation.setMenuPart(menuPart); } /** * @param menuSpace * (default: $doc.web) * @deprecated since 2.57.0 instead use setNodeSpace */ @Deprecated public void setMenuSpace(String menuSpace) { navigation.setMenuSpace(menuSpace); } public void setNodeSpace(SpaceReference newNodeSpaceRef) { navigation.setNodeSpace(newNodeSpaceRef); } public String getPrevMenuItemFullName(com.xpn.xwiki.api.Object menuItem) { if (menuItem != null) { return navigation.getPrevMenuItemFullName(menuItem.getName(), context); } return null; } public String getNextMenuItemFullName(com.xpn.xwiki.api.Object menuItem) { return navigation.getNextMenuItemFullName(menuItem.getName(), context); } public boolean isNavigationEnabled() { return navigation.isNavigationEnabled(); } private DocumentReference getNavigationConfigClassRef(XWikiDocument doc) { return getNavigationClasses().getNavigationConfigClassRef(getWebUtilsService().getWikiRef( doc.getDocumentReference()).getName()); } public void loadConfigByName(String configName) { navigation.loadConfigByName(configName, context); } /** * @deprecated since 2.18.0 instead use loadConfigFromDoc(DocumentReference) */ @Deprecated public void loadConfigFromDoc(String fullName) { DocumentReference configDocRef = getWebUtilsService().resolveDocumentReference(fullName); loadConfig_internal(configDocRef, null); } /** * @deprecated since 2.18.0 instead use loadConfigFromDoc(DocumentReference, int) */ @Deprecated public void loadConfigFromDoc(String fullName, int objNum) { DocumentReference configDocRef = getWebUtilsService().resolveDocumentReference(fullName); loadConfig_internal(configDocRef, objNum); } public void loadConfigFromDoc(DocumentReference configDocRef) { loadConfig_internal(configDocRef, null); } public void loadConfigFromDoc(DocumentReference configDocRef, int objNum) { loadConfig_internal(configDocRef, objNum); } private void loadConfig_internal(DocumentReference configDocRef, Integer objNum) { try { XWikiDocument doc = context.getWiki().getDocument(configDocRef, context); BaseObject navConfigXobj = getNavigationConfigObject(doc, objNum); if (navConfigXobj != null) { LOGGER.debug("loadConfig_internal: configName [" + navConfigXobj.getStringValue( "menu_element_name") + "] , " + navConfigXobj); navigation.loadConfigFromObject(navConfigXobj); } else { LOGGER.warn("cannot load navigation config from doc [" + configDocRef + "]," + " because no config object found."); } } catch (XWikiException exp) { LOGGER.warn("failed to get document [" + configDocRef + "]."); } } private BaseObject getNavigationConfigObject(XWikiDocument doc, Integer objNum) { BaseObject navConfigXobj; if (objNum == null) { LOGGER.debug("get xobject for [" + getNavigationConfigClassRef(doc) + "] on doc [" + doc.getDocumentReference() + "]."); navConfigXobj = doc.getXObject(getNavigationConfigClassRef(doc)); } else { LOGGER.debug("get xobject objNum [" + objNum + "] for [" + getNavigationConfigClassRef(doc) + "] on doc [" + doc.getDocumentReference() + "]."); navConfigXobj = doc.getXObject(getNavigationConfigClassRef(doc), objNum); } return navConfigXobj; } public void setCMcssClass(String cmCssClass) { navigation.setCMcssClass(cmCssClass); } public String getEmptyDictKey() { return navigation.getEmptyDictKey(); } public void setEmptyDictKeySuffix(String emptyDictKeySuffix) { navigation.setEmptyDictKeySuffix(emptyDictKeySuffix); } public SpaceReference getNodeSpaceRef() { return navigation.getNodeSpaceRef(); } /** * @deprecated since 2.30.0 instead use getNodeSpaceRef() */ @Deprecated public String getMenuSpace() { return navigation.getMenuSpace(context); } public String getUniqueId(String menuItemName) { return navigation.getUniqueId(menuItemName); } public void setShowAll(boolean showAll) { navigation.setShowAll(showAll); } public void setHasLink(boolean hasLink) { navigation.setHasLink(hasLink); } public void addUlCSSClass(String cssClass) { navigation.addUlCSSClass(cssClass); } public void setLanguage(String language) { navigation.setLanguage(language); } public void setShowInactiveToLevel(int showInactiveToLevel) { navigation.setShowInactiveToLevel(showInactiveToLevel); } public void setPresentationType(String presentationTypeHint) { navigation.setPresentationType(presentationTypeHint); } private IWebUtilsService getWebUtilsService() { return Utils.getComponent(IWebUtilsService.class); } private INavigationClassConfig getNavigationClasses() { return Utils.getComponent(INavigationClassConfig.class); } public boolean isEmptyMainMenu() { return navigation.isEmptyMainMenu(); } public boolean isEmpty() { boolean isEmpty = navigation.isEmpty(); LOGGER.debug("isEmpty api: returning [" + isEmpty + "]."); return isEmpty; } public void setOffset(int offset) { navigation.setOffset(offset); } public int getOffset() { return navigation.getOffset(); } public void setNumberOfItem(int nrOfItem) { navigation.setNumberOfItem(nrOfItem); } public int getNumberOfItem() { return navigation.getNumberOfItem(); } /** * use hasMore() instead */ @Deprecated public int getEffectiveNumberOfItems() { return navigation.getEffectiveNumberOfItems(); } public boolean hasMore() { return navigation.hasMore(); } }