package com.celements.navigation; import java.util.Collection; import java.util.HashSet; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xwiki.component.annotation.Component; import org.xwiki.component.annotation.Requirement; import org.xwiki.model.reference.DocumentReference; import org.xwiki.model.reference.WikiReference; import org.xwiki.query.QueryManager; import com.celements.common.cache.AbstractDocumentReferenceCache; import com.celements.query.IQueryExecutionServiceRole; import com.google.common.base.Strings; import com.xpn.xwiki.XWikiException; import com.xpn.xwiki.objects.BaseObject; @Component(NavigationCache.NAME) public class NavigationCache extends AbstractDocumentReferenceCache<String> { private static final Logger LOGGER = LoggerFactory.getLogger(NavigationCache.class); public static final String NAME = "NavigationCache"; @Requirement private INavigationClassConfig navClassConf; @Override protected DocumentReference getCacheClassRef(WikiReference wikiRef) { return navClassConf.getNavigationConfigClassRef(wikiRef); } @Override protected Collection<String> getKeysForResult(DocumentReference docRef) throws XWikiException { Collection<String> ret = new HashSet<String>(); List<BaseObject> navConfObjs = getContext().getWiki().getDocument(docRef, getContext()).getXObjects(getCacheClassRef(webUtils.getWikiRef(docRef))); if (navConfObjs != null) { for (BaseObject obj : navConfObjs) { String spaceName = getMenuSpaceName(obj); if (!spaceName.isEmpty()) { ret.add(spaceName); } } } return ret; } private String getMenuSpaceName(BaseObject obj) { String spaceName = ""; if (obj != null) { spaceName = Strings.nullToEmpty(obj.getStringValue(INavigationClassConfig.MENU_SPACE_FIELD)); } return spaceName; } @Override protected Logger getLogger() { return LOGGER; } void injectQueryManager(QueryManager queryManager) { this.queryManager = queryManager; } void injectQueryExecService(IQueryExecutionServiceRole queryExecService) { this.queryExecService = queryExecService; } }