com.celements.web.utils.WebUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.celements.web.utils.WebUtils.java

Source

/*
 * 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.web.utils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.Vector;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xwiki.model.reference.DocumentReference;

import com.celements.inheritor.InheritorFactory;
import com.celements.navigation.NavigationClasses;
import com.celements.navigation.TreeNode;
import com.celements.navigation.filter.ExternalUsageFilter;
import com.celements.navigation.filter.INavFilter;
import com.celements.navigation.filter.InternalRightsFilter;
import com.celements.navigation.service.ITreeNodeCache;
import com.celements.navigation.service.ITreeNodeService;
import com.celements.navigation.service.TreeNodeService;
import com.celements.pagetype.IPageType;
import com.celements.pagetype.PageTypeApi;
import com.celements.web.plugin.cmd.AttachmentURLCommand;
import com.celements.web.plugin.cmd.EmptyCheckCommand;
import com.celements.web.service.IWebUtilsService;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.api.Attachment;
import com.xpn.xwiki.api.Document;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.objects.BaseObject;
import com.xpn.xwiki.web.Utils;
import com.xpn.xwiki.web.XWikiMessageTool;

public class WebUtils implements IWebUtils {

    private static Log LOGGER = LogFactory.getFactory().getInstance(WebUtils.class);

    private static IWebUtils instance;

    private AttachmentURLCommand attachmentUrlCmd;

    private InheritorFactory injectedInheritorFactory;
    private ITreeNodeService injectedTreeNodeService;

    /**
     * FOR TEST ONLY!!!
     * Please use getInstance instead.
     */
    WebUtils() {
    }

    public static IWebUtils getInstance() {
        if (instance == null) {
            instance = new WebUtils();
        }
        return instance;
    }

    void injectInheritorFactory(InheritorFactory injectedInheritorFactory) {
        this.injectedInheritorFactory = injectedInheritorFactory;
    }

    InheritorFactory getInheritorFactory() {
        if (injectedInheritorFactory != null) {
            return injectedInheritorFactory;
        }
        return new InheritorFactory();
    }

    void injectTreeNodeService(ITreeNodeService injectedTreeNodeService) {
        this.injectedTreeNodeService = injectedTreeNodeService;
    }

    private ITreeNodeService getTreeNodeService() {
        if (injectedTreeNodeService != null) {
            return injectedTreeNodeService;
        }
        ITreeNodeService ret = Utils.getComponent(ITreeNodeService.class);
        if (injectedInheritorFactory != null) {
            ((TreeNodeService) ret).injectInheritorFactory(injectedInheritorFactory);
        }
        return ret;
    }

    private ITreeNodeCache getTreeNodeCache() {
        return Utils.getComponent(ITreeNodeCache.class);
    }

    private IWebUtilsService getWebUtilsService() {
        return Utils.getComponent(IWebUtilsService.class);
    }

    private AttachmentURLCommand getAttachmentUrlCmd() {
        if (attachmentUrlCmd == null) {
            attachmentUrlCmd = new AttachmentURLCommand();
        }
        return attachmentUrlCmd;
    }

    /**
     * @deprecated since 2.17.0 instead use TreeNodeCache
     */
    @Deprecated
    public int queryCount() {
        return getTreeNodeCache().queryCount();
    }

    /**
     * @deprecated since 2.17.0 instead use TreeNodeCache
     */
    @Deprecated
    public void flushMenuItemCache(XWikiContext context) {
        getTreeNodeCache().flushMenuItemCache();
    }

    /**
     * @deprecated  since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public List<String> getDocumentParentsList(String fullName, boolean includeDoc, XWikiContext context) {
        ArrayList<String> docParents = new ArrayList<String>();
        try {
            String nextParent;
            if (includeDoc) {
                nextParent = fullName;
            } else {
                nextParent = getParentFullName(fullName, context);
            }
            while (!"".equals(nextParent) && (context.getWiki().exists(nextParent, context))
                    && !docParents.contains(nextParent)) {
                docParents.add(nextParent);
                nextParent = getParentFullName(nextParent, context);
            }
        } catch (XWikiException e) {
            LOGGER.error(e, e);
        }
        return docParents;
    }

    @Deprecated
    private String getParentFullName(String fullName, XWikiContext context) throws XWikiException {
        return context.getWiki().getDocument(fullName, context).getParent();
    }

    /**
     * @deprecated  since 2.17.0 instead use EmptyCheckCommand
     */
    @Deprecated
    public boolean isEmptyRTEDocument(XWikiDocument localdoc) {
        return isEmptyRTEString(localdoc.getContent());
    }

    /**
     * @deprecated  since 2.17.0 instead use EmptyCheckCommand
     */
    @Deprecated
    public boolean isEmptyRTEString(String rteContent) {
        return new EmptyCheckCommand().isEmptyRTEString(rteContent);
    }

    /**
     * @deprecated since 2.17.0 instead use TreeNodeService
     */
    @Deprecated
    public int getActiveMenuItemPos(int menuLevel, String menuPart, XWikiContext context) {
        return getTreeNodeService().getActiveMenuItemPos(menuLevel, menuPart);
    }

    /**
     * @deprecated since 2.17.0 instead use TreeNodeService
     */
    @Deprecated
    public int getMenuItemPos(String fullName, String menuPart, XWikiContext context) {
        return getTreeNodeService().getMenuItemPos(getRef(fullName), menuPart);
    }

    /**
     * 
     * @deprecated since 2.17.0 instead use TreeNodeService.getSubNodesForParent
     */
    @Deprecated
    public List<com.xpn.xwiki.api.Object> getSubMenuItemsForParent(String parent, String menuSpace, String menuPart,
            XWikiContext context) {
        ExternalUsageFilter filter = new ExternalUsageFilter();
        filter.setMenuPart(menuPart);
        return getSubMenuItemsForParent(parent, menuSpace, filter, context);
    }

    /**
     * @deprecated since 2.14.0 use getSubNodesForParent instead
     */
    @Deprecated
    public List<BaseObject> getSubMenuItemsForParent_internal(String parent, String menuSpace, String menuPart,
            XWikiContext context) {
        InternalRightsFilter filter = new InternalRightsFilter();
        filter.setMenuPart(menuPart);
        return getSubMenuItemsForParent(parent, menuSpace, filter, context);
    }

    /**
     * @deprecated since 2.14.0 instead use TreeNodeService directly
     */
    @Deprecated
    public List<TreeNode> getSubNodesForParent(String parent, String menuSpace, String menuPart,
            XWikiContext context) {
        return getTreeNodeService().getSubNodesForParent(parent, menuSpace, menuPart);
    }

    /**
     * @deprecated since 2.14.0 use getSubNodesForParent instead
     */
    @Deprecated
    public <T> List<T> getSubMenuItemsForParent(String parent, String menuSpace, INavFilter<T> filter,
            XWikiContext context) {
        return getTreeNodeService().getSubMenuItemsForParent(parent, menuSpace, filter);
    }

    /**
     * @deprecated since 2.14.0 instead use TreeNodeService directly
     */
    @Deprecated
    public <T> List<TreeNode> getSubNodesForParent(String parent, String menuSpace, INavFilter<T> filter,
            XWikiContext context) {
        return getTreeNodeService().getSubNodesForParent(parent, menuSpace, filter);
    }

    /**
     * @deprecated since 2.17.0 instead use TreeNodeService
     */
    @Deprecated
    public List<com.xpn.xwiki.api.Object> getMenuItemsForHierarchyLevel(int menuLevel, String menuPart,
            XWikiContext context) {
        String parent = getParentForLevel(menuLevel, context);
        if (parent != null) {
            List<com.xpn.xwiki.api.Object> submenuItems = getSubMenuItemsForParent(parent, "", menuPart, context);
            LOGGER.debug("submenuItems for parent: " + parent + " ; " + submenuItems);
            return submenuItems;
        }
        LOGGER.debug("parent is null");
        return new ArrayList<com.xpn.xwiki.api.Object>();
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public String getParentForLevel(int menuLevel, XWikiContext context) {
        String parent = null;
        if (menuLevel == 1) {
            parent = ""; // mainMenu
        } else {
            List<String> parentList = getDocumentParentsList(context.getDoc().getFullName(), true, context);
            int startAtItem = parentList.size() - menuLevel + 1;
            if (startAtItem >= 0) {
                parent = parentList.get(startAtItem);
            }
        }
        return parent;
    }

    /**
     * @deprecated since 2.17.0 instead use TreeNodeService
     */
    @Deprecated
    public BaseObject getPrevMenuItem(String fullName, XWikiContext context) throws XWikiException {
        TreeNode prevTreeNode = getTreeNodeService().getPrevMenuItem(getRef(fullName));
        if (prevTreeNode != null) {
            DocumentReference docRef = prevTreeNode.getDocumentReference();
            return context.getWiki().getDocument(docRef, context).getXObject(getRef("Celements2.MenuItem"));
        }
        return null;
    }

    /**
     * @deprecated since 2.17.0 instead use TreeNodeService
     */
    @Deprecated
    public BaseObject getNextMenuItem(String fullName, XWikiContext context) throws XWikiException {
        TreeNode nextTreeNode = getTreeNodeService().getNextMenuItem(getRef(fullName));
        if (nextTreeNode != null) {
            DocumentReference docRef = nextTreeNode.getDocumentReference();
            return context.getWiki().getDocument(docRef, context)
                    .getXObject(new NavigationClasses().getMenuItemClassRef(context.getDatabase()));
        }
        return null;
    }

    /* (non-Javadoc)
     * @see com.celements.web.utils.IWebUtils#getConfigDocByInheritance(com.xpn.xwiki.doc.XWikiDocument, java.lang.String, com.xpn.xwiki.XWikiContext)
     */
    @Deprecated
    public XWikiDocument getConfigDocByInheritance(XWikiDocument doc, String className, XWikiContext context)
            throws XWikiException {
        XWikiDocument preferenceDoc = context.getWiki().getDocument(doc.getSpace() + ".WebPreferences", context);
        if (preferenceDoc.getObject(className, false, context) == null) {
            preferenceDoc = context.getWiki().getDocument("XWiki.XWikiPreferences", context);
            if (preferenceDoc.getObject(className, false, context) == null) {
                String skinDocName = context.getWiki().getSpacePreference("skin", context);
                if ((skinDocName != null) && (context.getWiki().exists(skinDocName, context))) {
                    preferenceDoc = context.getWiki().getDocument(skinDocName, context);
                }
            }
        }
        return preferenceDoc;
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public String getDocSectionAsJSON(String regex, String fullName, int section, XWikiContext context)
            throws XWikiException {
        return getWebUtilsService().getDocSectionAsJSON(regex, getRef(fullName), section);
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public String getDocSection(String regex, String fullName, int section, XWikiContext context)
            throws XWikiException {
        return getWebUtilsService().getDocSection(regex, getRef(fullName), section);
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public int countSections(String regex, String fullName, XWikiContext context) throws XWikiException {
        return getWebUtilsService().countSections(regex, getRef(fullName));
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public IPageType getPageTypeApi(String fullName, XWikiContext context) throws XWikiException {
        return new PageTypeApi(fullName, context);
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public List<String> getAllowedLanguages(XWikiContext context) {
        return getWebUtilsService().getAllowedLanguages();
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public Date parseDate(String date, String format) {
        return getWebUtilsService().parseDate(date, format);
    }

    /**
     * @deprecated since 2.14.0 instead use WebUtilsService directly
     */
    @Deprecated
    public XWikiMessageTool getMessageTool(String adminLanguage, XWikiContext context) {
        return getWebUtilsService().getMessageTool(adminLanguage);
    }

    /**
     * @deprecated since 2.14.0 instead use WebUtilsService directly
     */
    @Deprecated
    public XWikiMessageTool getAdminMessageTool(XWikiContext context) {
        return getWebUtilsService().getAdminMessageTool();
    }

    /**
     * @deprecated since 2.14.0 instead use WebUtilsService directly
     */
    @Deprecated
    public String getAdminLanguage(XWikiContext context) {
        return getWebUtilsService().getAdminLanguage();
    }

    /**
     * @deprecated since 2.14.0 instead use WebUtilsService directly
     */
    @Deprecated
    public String getAdminLanguage(String userFullName, XWikiContext context) {
        return getWebUtilsService().getAdminLanguage(userFullName);
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public boolean hasParentSpace(XWikiContext context) {
        return getWebUtilsService().hasParentSpace();
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public String getParentSpace(XWikiContext context) {
        return getWebUtilsService().getParentSpace();
    }

    /**
     * @deprecated since 2.17.0 instead use TreeNodeService
     */
    @Deprecated
    public Integer getMaxConfiguredNavigationLevel(XWikiContext context) {
        return getTreeNodeService().getMaxConfiguredNavigationLevel();
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public List<Attachment> getAttachmentListSorted(Document doc, String comparator) throws ClassNotFoundException {
        return this.getWebUtilsService().getAttachmentListSorted(doc, comparator);
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService directly
     */
    @Deprecated
    public List<Attachment> getAttachmentListSorted(Document doc, String comparator, boolean imagesOnly, int start,
            int nb) throws ClassNotFoundException {
        return this.getWebUtilsService().getAttachmentListSorted(doc, comparator, imagesOnly, start, nb);
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public String getAttachmentListSortedAsJSON(Document doc, String comparator, boolean imagesOnly) {
        return this.getWebUtilsService().getAttachmentListSortedAsJSON(doc, comparator, imagesOnly);
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public String getAttachmentListSortedAsJSON(Document doc, String comparator, boolean imagesOnly, int start,
            int nb) {
        return this.getWebUtilsService().getAttachmentListSortedAsJSON(doc, comparator, imagesOnly, start, nb);
    }

    /**
     * @deprecated since 2.17.0 instead use ImageService
     */
    public List<Attachment> getRandomImages(String fullName, int num, XWikiContext context) {
        try {
            Document imgDoc = context.getWiki().getDocument(fullName, context).newDocument(context);
            List<Attachment> allImagesList = getWebUtilsService().getAttachmentListSorted(imgDoc,
                    "AttachmentAscendingNameComparator", true);
            if (allImagesList.size() > 0) {
                List<Attachment> preSetImgList = prepareMaxCoverSet(num, allImagesList);
                List<Attachment> imgList = new ArrayList<Attachment>(num);
                Random rand = new Random();
                for (int i = 1; i <= num; i++) {
                    int nextimg = rand.nextInt(preSetImgList.size());
                    imgList.add(preSetImgList.remove(nextimg));
                }
                return imgList;
            }
        } catch (XWikiException e) {
            LOGGER.error(e, e);
        }
        return Collections.emptyList();
    }

    <T> List<T> prepareMaxCoverSet(int num, List<T> allImagesList) {
        List<T> preSetImgList = new Vector<T>(num);
        preSetImgList.addAll(allImagesList);
        for (int i = 2; i <= coveredQuotient(allImagesList.size(), num); i++) {
            preSetImgList.addAll(allImagesList);
        }
        return preSetImgList;
    }

    int coveredQuotient(int divisor, int dividend) {
        if (dividend >= 0) {
            return ((dividend + divisor - 1) / divisor);
        } else {
            return (dividend / divisor);
        }
    }

    /**
     * @deprecated since 2.11.6 instead use WebUtilsService directly
     */
    @Deprecated
    public boolean isAdminUser(XWikiContext context) {
        return getWebUtilsService().isAdminUser();
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public String getJSONContent(XWikiDocument cdoc, XWikiContext context) {
        return getWebUtilsService().getJSONContent(cdoc);
    }

    /**
     * @deprecated since 2.14.0 instead use AttachmentURLCommand directly
     */
    @Deprecated
    public String getAttachmentURL(String link, XWikiContext context) {
        return getAttachmentUrlCmd().getAttachmentURL(link, context);
    }

    /**
     * @deprecated since 2.14.0 instead use AttachmentURLCommand directly
     */
    @Deprecated
    public String getAttachmentName(String link) {
        return getAttachmentUrlCmd().getAttachmentName(link);
    }

    /**
     * @deprecated since 2.14.0 instead use AttachmentURLCommand directly
     */
    @Deprecated
    public String getPageFullName(String link) {
        return getAttachmentUrlCmd().getPageFullName(link);
    }

    /**
     * @deprecated since 2.14.0 instead use AttachmentURLCommand directly
     */
    @Deprecated
    public boolean isAttachmentLink(String link) {
        return getAttachmentUrlCmd().isAttachmentLink(link);
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public String getUserNameForDocName(String authorDocName, XWikiContext context) throws XWikiException {
        return getWebUtilsService().getUserNameForDocRef(getRef(authorDocName));
    }

    /**
     * @deprecated since 2.17.0 instead use WebUtilsService
     */
    @Deprecated
    public String getMajorVersion(XWikiDocument doc) {
        return getWebUtilsService().getMajorVersion(doc);
    }

    DocumentReference getRef(String s) {
        return getWebUtilsService().resolveDocumentReference(s);
    }

}