All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.ade.galleries.CmsSiteSelectorOptionBuilder Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

There is a newer version: 18.0
Show newest version
/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (C) Alkacon Software (http://www.alkacon.com)
 *
 * This library 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 library 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.
 *
 * For further information about Alkacon Software, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.ade.galleries;

import org.opencms.ade.configuration.CmsADEConfigData;
import org.opencms.ade.galleries.shared.CmsSiteSelectorOption;
import org.opencms.ade.galleries.shared.CmsSiteSelectorOption.Type;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsResourceFilter;
import org.opencms.main.CmsException;
import org.opencms.main.CmsLog;
import org.opencms.main.OpenCms;
import org.opencms.site.CmsSite;
import org.opencms.site.CmsSiteManagerImpl;
import org.opencms.util.CmsStringUtil;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;

import org.apache.commons.logging.Log;

/**
 * Helper class for building the options for the site selector in the gallery dialog.

*/ public class CmsSiteSelectorOptionBuilder { /** The logger instance for this class. */ private static final Log LOG = CmsLog.getLog(CmsSiteSelectorOptionBuilder.class.getName()); /** The CMS context used by this object. */ private CmsObject m_cms; /** The option list. */ private List m_options = new ArrayList(); /** The current site root. */ private String m_siteRoot; /** Site roots of sites which have already been added. */ private Set m_usedSiteRoots = new HashSet(); /** * Creates a new builder instance.

* * @param cms the CMS context to use */ public CmsSiteSelectorOptionBuilder(CmsObject cms) { m_cms = cms; m_siteRoot = m_cms.getRequestContext().getSiteRoot(); } /** * Adds the current subsite.

* * @param referencePath the reference path */ public void addCurrentSubsite(String referencePath) { CmsADEConfigData configData = OpenCms.getADEManager().lookupConfiguration(m_cms, referencePath); String basePath = configData.getBasePath(); if (basePath != null) { addOption( Type.currentSubsite, basePath, Messages.get().getBundle(OpenCms.getWorkplaceManager().getWorkplaceLocale(m_cms)).key( Messages.GUI_SITESELECTOR_CURRENT_SUBSITE_0)); } } /** * Adds 'normal' sites.

* * @param includeRoot if true, also adds the root site * @param startFolder the users configured start folder */ public void addNormalSites(boolean includeRoot, String startFolder) { CmsSiteManagerImpl siteManager = OpenCms.getSiteManager(); List sites = siteManager.getAvailableSites(m_cms, true, false, m_cms.getRequestContext().getOuFqn()); try { CmsObject rootCms = OpenCms.initCmsObject(m_cms); rootCms.getRequestContext().setSiteRoot("/"); if (sites.isEmpty()) { String siteRoot = m_cms.getRequestContext().getSiteRoot(); if (!rootCms.existsResource(siteRoot, CmsResourceFilter.ONLY_VISIBLE_NO_DELETED)) { if (startFolder != null) { siteRoot = CmsStringUtil.joinPaths(siteRoot, startFolder); } if ((startFolder == null) || !rootCms.existsResource(siteRoot, CmsResourceFilter.ONLY_VISIBLE_NO_DELETED)) { siteRoot = null; } } if (siteRoot != null) { Type type = Type.site; String message = siteRoot; addOption(type, siteRoot, message); } } for (CmsSite site : sites) { // Do not add the shared site - it will be among sites if you are on the shared site at the moment. if (site.isSharedSite()) { continue; } String siteRoot = site.getSiteRoot(); if (!rootCms.existsResource(siteRoot, CmsResourceFilter.ONLY_VISIBLE_NO_DELETED)) { if (startFolder != null) { siteRoot = CmsStringUtil.joinPaths(siteRoot, startFolder); } if ((startFolder == null) || !rootCms.existsResource(siteRoot, CmsResourceFilter.ONLY_VISIBLE_NO_DELETED)) { siteRoot = null; } } if (siteRoot != null) { Type type = Type.site; String message = null; String title = site.getTitle(); if (!CmsStringUtil.isEmptyOrWhitespaceOnly(title)) { message = title; } else { message = siteRoot; } if (siteRoot.equals("")) { type = Type.root; Locale locale = OpenCms.getWorkplaceManager().getWorkplaceLocale(m_cms); message = Messages.get().getBundle(locale).key(Messages.GUI_ROOT_SITE_0); if (!includeRoot) { continue; } } addOption(type, siteRoot, message); } } } catch (CmsException e) { LOG.error(e); } } /** * Adds the shared folder.

*/ public void addSharedSite() { String shared = OpenCms.getSiteManager().getSharedFolder(); if (shared.endsWith("/")) { // IMPORTANT: remove last "/". // Otherwise the version without slash will be added as well when you are in the shared folder currently. shared = shared.substring(0, shared.length() - 1); } if ((shared != null) && m_cms.existsResource(shared, CmsResourceFilter.ONLY_VISIBLE_NO_DELETED)) { addOption( Type.shared, shared, org.opencms.workplace.Messages.get().getBundle( OpenCms.getWorkplaceManager().getWorkplaceLocale(m_cms)).key( org.opencms.workplace.Messages.GUI_SHARED_TITLE_0)); } } /** * Gets the site selector options.

* * @return the site selector options */ public List getOptions() { return m_options; } /** * Internal helper method for adding an option.

* * @param type the option type * @param siteRoot the site root * @param message the message for the option */ private void addOption(Type type, String siteRoot, String message) { if (m_usedSiteRoots.contains(CmsStringUtil.joinPaths(siteRoot, "/"))) { return; } CmsSiteSelectorOption option = new CmsSiteSelectorOption(type, siteRoot, m_siteRoot.equals(siteRoot), message); // make sure to insert the root site is first and the shared site as second entry if (Type.root.equals(type)) { m_options.add(0, option); } else if (Type.shared.equals(type)) { if (!m_options.isEmpty() && Type.root.equals(m_options.get(0).getType())) { m_options.add(1, option); } else { m_options.add(0, option); } } else { m_options.add(option); } m_usedSiteRoots.add(CmsStringUtil.joinPaths(siteRoot, "/")); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy