/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* 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.
*/
package com.liferay.portal.kernel.theme;
import aQute.bnd.annotation.ProviderType;
import com.liferay.admin.kernel.util.PortalMyAccountApplicationType;
import com.liferay.exportimport.kernel.staging.StagingUtil;
import com.liferay.mobile.device.rules.kernel.MDRRuleGroupInstance;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.json.JSON;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.mobile.device.Device;
import com.liferay.portal.kernel.model.Account;
import com.liferay.portal.kernel.model.ColorScheme;
import com.liferay.portal.kernel.model.Company;
import com.liferay.portal.kernel.model.Contact;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.GroupConstants;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.LayoutSet;
import com.liferay.portal.kernel.model.LayoutTypePortlet;
import com.liferay.portal.kernel.model.Theme;
import com.liferay.portal.kernel.model.ThemeSetting;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.model.VirtualLayoutConstants;
import com.liferay.portal.kernel.model.impl.VirtualLayout;
import com.liferay.portal.kernel.portlet.PortletPreferencesFactoryUtil;
import com.liferay.portal.kernel.portlet.PortletProvider;
import com.liferay.portal.kernel.portlet.PortletProviderUtil;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutFriendlyURLLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
import com.liferay.portal.kernel.service.PortletPreferencesLocalServiceUtil;
import com.liferay.portal.kernel.util.HttpUtil;
import com.liferay.portal.kernel.util.LocaleThreadLocal;
import com.liferay.portal.kernel.util.Mergeable;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.PortletKeys;
import com.liferay.portal.kernel.util.ReflectionUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.TimeZoneThreadLocal;
import com.liferay.portal.kernel.util.Validator;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.TimeZone;
import javax.portlet.PortletPreferences;
import javax.portlet.PortletRequest;
import javax.portlet.PortletURL;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Provides general configuration methods for the portal, providing access to
* the portal's pages, sites, themes, locales, URLs, and more. This class is an
* information context object that holds data commonly referred to for various
* kinds of front-end information.
*
* <p>
* Liferay makes the <code>ThemeDisplay</code> available as a request attribute
* and in various scripting and templating scopes. A typical way to obtain
* <code>ThemeDisplay</code> is from a request:
* </p>
*
* <p>
* <pre>
* <code>
* themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
* </code>
* </pre>
* </p>
*
* @author Brian Wing Shun Chan
*/
@JSON
@ProviderType
public class ThemeDisplay
implements Cloneable, Mergeable<ThemeDisplay>, Serializable {
public ThemeDisplay() {
if (_log.isDebugEnabled()) {
_log.debug("Creating new instance " + hashCode());
}
_portletDisplay.setThemeDisplay(this);
}
public void clearLayoutFriendlyURL(Layout layout) {
if (_layoutFriendlyURLs == null) {
return;
}
if (layout instanceof VirtualLayout) {
VirtualLayout virtualLayout = (VirtualLayout)layout;
layout = virtualLayout.getSourceLayout();
}
_layoutFriendlyURLs.remove(layout.getPlid());
}
@Override
public Object clone() throws CloneNotSupportedException {
ThemeDisplay themeDisplay = (ThemeDisplay)super.clone();
PortletDisplay portletDisplay = new PortletDisplay();
_portletDisplay.copyTo(portletDisplay);
themeDisplay._portletDisplay = portletDisplay;
portletDisplay.setThemeDisplay(themeDisplay);
return themeDisplay;
}
public Account getAccount() {
if ((_account == null) && (_company != null)) {
try {
_account = _company.getAccount();
}
catch (PortalException pe) {
ReflectionUtil.throwException(pe);
}
}
return _account;
}
/**
* Returns the content delivery network (CDN) base URL, or the current
* portal URL if the CDN base URL is <code>null</code>. The CDN base URL can
* be configured by setting the <code>cdn.host.http</code> or
* <code>cdn.host.https</code> property in a
* <code>portal-ext.properties</code> file.
*
* @return the CDN base URL, or the current portal URL if the CDN base URL
* is <code>null</code>
*/
public String getCDNBaseURL() {
if (_cdnBaseURL != null) {
return _cdnBaseURL;
}
String host = getCDNHost();
if (Validator.isNull(host)) {
String portalURL = getPortalURL();
try {
portalURL = PortalUtil.getPortalURL(getLayout(), this);
}
catch (Exception e) {
_log.error(e, e);
}
host = portalURL;
}
_cdnBaseURL = host;
return _cdnBaseURL;
}
/**
* Returns the content delivery network (CDN) dynamic resources host, or the
* current portal URL if the CDN dynamic resources host is
* <code>null</code>. By setting the
* <code>cdn.dynamic.resources.enabled</code> property to <code>true</code>
* in a <code>portal-ext.properties</code> file, the CDN can be used for
* dynamic resources, like minified CSS and JS files.
*
* @return the CDN dynamic resources host, or the current portal URL if the
* CDN dynamic resources host is <code>null</code>
*/
public String getCDNDynamicResourcesHost() {
return _cdnDynamicResourcesHost;
}
public String getCDNHost() {
return _cdnHost;
}
public ColorScheme getColorScheme() {
return _colorScheme;
}
/**
* Returns the color scheme ID as defined in the theme's
* <code>liferay-look-and-feel.xml</code>.
*
* @return the color scheme ID as defined in the theme's
* <code>liferay-look-and-feel.xml</code>
*/
public String getColorSchemeId() {
return _colorScheme.getColorSchemeId();
}
/**
* Returns the portal instance bean.
*
* <p>
* Company is Liferay's technical name for a portal instance.
* <p>
*
* @return the portal instance bean
*/
public Company getCompany() {
return _company;
}
public long getCompanyGroupId() {
return _companyGroupId;
}
/**
* Returns the portal instance ID.
*
* <p>
* Company is Liferay's technical name for a portal instance.
* <p>
*
* @return the portal instance ID
*/
public long getCompanyId() {
return _company.getCompanyId();
}
/**
* Returns the server's relative path to the portal instance's logo.
*
* <p>
* Company is Liferay's technical name for a portal instance.
* <p>
*
* @return the server's relative path to the portal instance's logo
*/
public String getCompanyLogo() {
return _companyLogo;
}
/**
* Returns the height of the portal instance's logo in pixels.
*
* <p>
* Company is Liferay's technical name for a portal instance.
* <p>
*
* @return the height of the portal instance's logo in pixels
*/
public int getCompanyLogoHeight() {
return _companyLogoHeight;
}
/**
* Returns the width of the portal instance's logo in pixels.
*
* <p>
* Company is Liferay's technical name for a portal instance.
* <p>
*
* @return the width of the portal instance's logo in pixels
*/
public int getCompanyLogoWidth() {
return _companyLogoWidth;
}
public Contact getContact() {
if (_contact == null) {
if (_user == null) {
return null;
}
try {
_contact = _user.getContact();
}
catch (PortalException pe) {
ReflectionUtil.throwException(pe);
}
}
return _contact;
}
public Group getControlPanelGroup() {
if (_controlPanelGroup == null) {
try {
_controlPanelGroup = GroupLocalServiceUtil.getGroup(
_company.getCompanyId(), GroupConstants.CONTROL_PANEL);
}
catch (PortalException pe) {
ReflectionUtil.throwException(pe);
}
}
return _controlPanelGroup;
}
public Layout getControlPanelLayout() {
if (_controlPanelLayout == null) {
Group controlPanelGroup = getControlPanelGroup();
_controlPanelLayout = LayoutLocalServiceUtil.fetchDefaultLayout(
controlPanelGroup.getGroupId(), true);
}
return _controlPanelLayout;
}
/**
* Returns the portal instance's default user.
*
* @return the portal instance's default user
*/
public User getDefaultUser() throws PortalException {
if (_defaultUser == null) {
_defaultUser = _company.getDefaultUser();
}
return _defaultUser;
}
/**
* Returns the ID of the portal instance's default user.
*
* @return the ID of the portal instance's default user
*/
public long getDefaultUserId() throws PortalException {
return getDefaultUser().getUserId();
}
/**
* Returns the information about the detected device, such as the device's
* brand, browser, operating system, screen resolution, etc.
*
* @return the information about the detected device
*/
public Device getDevice() {
return _device;
}
public long getDoAsGroupId() {
return _doAsGroupId;
}
/**
* Returns the encrypted ID of the "do as" user, which can be used by an
* administrative user to impersonate another user, on that user's behalf.
*
* @return the encrypted ID of the "do as" user, which can be used by an
* administrative user to impersonate another user, on that user's
* behalf
*/
public String getDoAsUserId() {
return _doAsUserId;
}
public String getDoAsUserLanguageId() {
return _doAsUserLanguageId;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public String getFacebookCanvasPageURL() {
return _facebookCanvasPageURL;
}
/**
* Returns the current internationalization language's code.
*
* <p>
* For example:
* </p>
*
* <p>
* English (U.K.) returns <code>en_GB</code>
* </p>
*
* @return the current internationalization language's code
*/
public String getI18nLanguageId() {
return _i18nLanguageId;
}
/**
* Returns the path element for the current internationalization language.
*
* <p>
* For example, the German localization returns <code>/de</code>. Liferay's
* UI language can be changed by adding the language code into the URL path.
* The following URL uses the German localization:
* <code>http://localhost:8080/de/web/guest/home</code>.
* </p>
*
* @return the path element for the current internationalization language
*/
public String getI18nPath() {
return _i18nPath;
}
/**
* Returns the current language's code.
*
* <p>
* For example:
* </p>
*
* <p>
* English (U.K.) returns <code>en_GB</code>
* </p>
*
* @return the current language's code
*/
public String getLanguageId() {
return _languageId;
}
/**
* Returns the site's page.
*
* <p>
* Layout is Liferay's technical name for a page.
* </p>
*
* @return the site's page
*/
public Layout getLayout() {
return _layout;
}
public String getLayoutFriendlyURL(Layout layout) {
if (layout instanceof VirtualLayout) {
VirtualLayout virtualLayout = (VirtualLayout)layout;
layout = virtualLayout.getSourceLayout();
Group group = layout.getGroup();
return VirtualLayoutConstants.CANONICAL_URL_SEPARATOR.concat(
group.getFriendlyURL()).concat(_getFriendlyURL(layout));
}
return _getFriendlyURL(layout);
}
/**
* Returns the site's top-level pages.
*
* <p>
* Layout is Liferay's technical name for a page.
* </p>
*
* @return the site's top-level pages
*/
public List<Layout> getLayouts() {
return _layouts;
}
/**
* Returns the current layout set, being either a public layout set or a
* private layout set.
*
* <p>
* A site can have public and private pages (layouts), which are contained
* in a public layout set and a private page set, respectively.
* </p>
*
* @return the current layout set, being either a public layout set or a
* private layout set
*/
public LayoutSet getLayoutSet() {
return _layoutSet;
}
/**
* Returns the path to the site's configured logo, or <code>null</code> if
* there is no configured logo.
*
* @return the path to the site's configured logo, or <code>null</code> if
* there is no configured logo
*/
public String getLayoutSetLogo() {
return _layoutSetLogo;
}
public LayoutTypePortlet getLayoutTypePortlet() {
return _layoutTypePortlet;
}
/**
* Returns the numeric portlet lifecycle indicator.
*
* <p>
* For example:
* </p>
*
* <p>
* <pre>
* <code>
* returns "0" for RENDER phase
* returns "1" for ACTION phase
* returns "2" for RESOURCE phase
* returns "3" for EVENT phase
* </code>
* </pre>
* </p>
*
* @return the numeric portlet lifecycle indicator
*/
public String getLifecycle() {
return _lifecycle;
}
/**
* Returns the locale used for displaying content.
*
* @return the locale used for displaying content
*/
public Locale getLocale() {
return _locale;
}
public MDRRuleGroupInstance getMDRRuleGroupInstance() {
return _mdrRuleGroupInstance;
}
public String getPathApplet() {
return _pathApplet;
}
public String getPathCms() {
return _pathCms;
}
/**
* Returns the base URL for the color scheme's images, which can be
* configured in the theme's <code>liferay-look-and-feel.xml</code>.
*
* @return the base URL for the color scheme's images
*/
public String getPathColorSchemeImages() {
return _pathColorSchemeImages;
}
public String getPathContext() {
return _pathContext;
}
public String getPathFlash() {
return _pathFlash;
}
/**
* Returns the URL for the site's private layout set. This method typically
* returns <code>/group</code>.
*
* @return the URL for the site's private layout set
*/
public String getPathFriendlyURLPrivateGroup() {
return _pathFriendlyURLPrivateGroup;
}
/**
* Returns the URL for the user's private page set. This method typically
* returns <code>/user</code>.
*
* @return the URL for the user's private page set
*/
public String getPathFriendlyURLPrivateUser() {
return _pathFriendlyURLPrivateUser;
}
/**
* Returns the URL for the site's public page set. This method typically
* returns <code>/web</code>.
*
* @return the URL for the site's public page set
*/
public String getPathFriendlyURLPublic() {
return _pathFriendlyURLPublic;
}
/**
* Returns the URL for the portal instance's images. This method typically
* returns <code>/image</code>.
*
* @return the URL for the portal instance's images
*/
public String getPathImage() {
return _pathImage;
}
/**
* Returns the URL for the portal instance's JavaScript resources.
*
* @return the URL for the portal instance's JavaScript resources
*/
public String getPathJavaScript() {
return _pathJavaScript;
}
/**
* Returns the URL for the portal instance's main servlet. This method
* typically returns <code>/c</code>.
*
* @return the URL for the portal instance's main servlet
*/
public String getPathMain() {
return _pathMain;
}
public String getPathSound() {
return _pathSound;
}
/**
* Returns the URL for the theme's CSS directory.
*
* @return the URL for the theme's CSS directory
*/
public String getPathThemeCss() {
return _pathThemeCss;
}
/**
* Returns the URL for the theme's images.
*
* @return the URL for the theme's images
*/
public String getPathThemeImages() {
return _pathThemeImages;
}
/**
* Returns the URL for the theme's JavaScript directory.
*
* @return the URL for the theme's JavaScript directory
*/
public String getPathThemeJavaScript() {
return _pathThemeJavaScript;
}
/**
* Returns the base URL for the theme.
*
* @return the base URL for the theme
*/
public String getPathThemeRoot() {
return _pathThemeRoot;
}
/**
* Returns the URL for the theme's templates.
*
* @return the URL for the theme's templates
*/
public String getPathThemeTemplates() {
return _pathThemeTemplates;
}
/**
* Returns the permission checker, which is used to ensure users making
* resource requests have the necessary access permissions.
*
* @return the permission checker
*/
@JSON(include = false)
public PermissionChecker getPermissionChecker() {
return _permissionChecker;
}
/**
* Returns the primary key of the page.
*
* <p>
* Historically, "plid" was short for "portlet layout ID", which is the
* primary key (ID) of the current layout (page).
* </p>
*
* @return the primary key of the page
*/
public long getPlid() {
return _plid;
}
public String getPortalDomain() {
return _portalDomain;
}
/**
* Returns the portal instance's base URL, which can be configured by
* setting the <code>web.server.host</code> property in a
* <code>portal-ext.properties</code> file.
*
* @return the portal instance's base URL
*/
public String getPortalURL() {
return _portalURL;
}
@JSON(include = false)
public PortletDisplay getPortletDisplay() {
return _portletDisplay;
}
public String getPpid() {
return _ppid;
}
public String getProtocol() {
return HttpUtil.getProtocol(_secure);
}
public String getRealCompanyLogo() {
return _realCompanyLogo;
}
public int getRealCompanyLogoHeight() {
return _realCompanyLogoHeight;
}
public int getRealCompanyLogoWidth() {
return _realCompanyLogoWidth;
}
/**
* Returns the logged in user. Since administrative users are able to
* impersonate other users, this method reveals the identity of the user who
* actually logged in.
*
* @return the logged in user
* @see #getUser()
*/
public User getRealUser() {
return _realUser;
}
/**
* Returns the ID of the logged in user.
*
* @return the ID of the logged in user
* @see #getRealUser()
*/
public long getRealUserId() {
return _realUser.getUserId();
}
public Group getRefererGroup() {
return _refererGroup;
}
public long getRefererGroupId() {
return _refererGroupId;
}
public long getRefererPlid() {
return _refererPlid;
}
/**
* Returns the currently served HTTP servlet request.
*
* @return the currently served HTTP servlet request
*/
@JSON(include = false)
public HttpServletRequest getRequest() {
return _request;
}
/**
* Returns the currently served HTTP servlet response.
*
* @return the currently served HTTP servlet response
*/
@JSON(include = false)
public HttpServletResponse getResponse() {
return _response;
}
/**
* Returns the scoped or sub-scoped active group (e.g. site).
*
* @return the scoped or sub-scoped active group
*/
public Group getScopeGroup() {
return _scopeGroup;
}
/**
* Returns the ID of the scoped or sub-scoped active group (e.g. site).
*
* @return the ID of the scoped or sub-scoped active group
*/
public long getScopeGroupId() {
return _scopeGroupId;
}
/**
* Returns the name of the scoped or sub-scoped active group (e.g. site).
*
* @return the name of the scoped or sub-scoped active group
*/
public String getScopeGroupName() throws PortalException {
if (_scopeGroup == null) {
return StringPool.BLANK;
}
return _scopeGroup.getDescriptiveName();
}
public Layout getScopeLayout() throws PortalException {
if (_layout.hasScopeGroup()) {
return _layout;
}
else if (_scopeGroup.isLayout()) {
return LayoutLocalServiceUtil.getLayout(_scopeGroup.getClassPK());
}
else {
return null;
}
}
/**
* Returns the portal instance's server name, which can be configured by
* setting the <code>web.server.host</code> property in a
* <code>portal-ext.properties</code> file.
*
* @return the server name, which can be configured by setting the
* <code>web.server.host</code> property in a
* <code>portal-ext.properties</code> file
*/
public String getServerName() {
return _serverName;
}
/**
* Returns the server port, which can be configured by setting the
* <code>web.server.http.port</code> or <code>web.server.https.port</code>
* property in a <code>portal-ext.properties</code> file.
*
* @return the server port, which can be configured by setting the
* <code>web.server.http.port</code> or
* <code>web.server.https.port</code> property in a
* <code>portal-ext.properties</code> file
*/
public int getServerPort() {
return _serverPort;
}
/**
* Returns the session ID, or a blank string if the session ID is not
* available to the application.
*
* @return the session ID, or returns a blank string if the session ID is
* not available to the application
*/
public String getSessionId() {
return _sessionId;
}
public Locale getSiteDefaultLocale() {
return _siteDefaultLocale;
}
public Group getSiteGroup() {
return _siteGroup;
}
public long getSiteGroupId() {
return _siteGroupId;
}
public long getSiteGroupIdOrLiveGroupId() {
return StagingUtil.getLiveGroupId(_siteGroupId);
}
public String getSiteGroupName() throws PortalException {
if (_siteGroup == null) {
return StringPool.BLANK;
}
return _siteGroup.getDescriptiveName();
}
public PortletPreferences getStrictLayoutPortletSetup(
Layout layout, String portletId) {
PortletPreferences portletPreferences = null;
if ((_layout.getPlid() == layout.getPlid()) &&
(_layout.getMvccVersion() == layout.getMvccVersion()) &&
(_layoutTypePortlet != null)) {
if (_layoutPortletPreferences == null) {
_layoutPortletPreferences =
PortletPreferencesLocalServiceUtil.getStrictPreferences(
_layout, _layoutTypePortlet.getAllPortlets());
}
portletPreferences = _layoutPortletPreferences.get(portletId);
}
if (portletPreferences == null) {
return PortletPreferencesFactoryUtil.getStrictLayoutPortletSetup(
layout, portletId);
}
return portletPreferences;
}
public Theme getTheme() {
return _theme;
}
public String getThemeId() {
return _theme.getThemeId();
}
/**
* Returns the theme's configurable settings, which are declared in
* <code>liferay-look-and-feel.xml</code> and are configurable in the user
* interface.
*
* @param key the theme's key
* @return the theme's configurable settings
*/
public String getThemeSetting(String key) {
Theme theme = getTheme();
String device = theme.getDevice();
Layout layout = getLayout();
return layout.getThemeSetting(key, device);
}
/**
* Returns the theme's configurable settings, which are declared in
* <code>liferay-look-and-feel.xml</code> and are configurable in the user
* interface.
*
* @return a list of the theme's configurable settings
*/
public Properties getThemeSettings() {
Theme theme = getTheme();
Properties properties = new Properties();
Map<String, ThemeSetting> themeSettings = theme.getSettings();
for (Map.Entry<String, ThemeSetting> entry : themeSettings.entrySet()) {
String key = entry.getKey();
ThemeSetting themeSetting = entry.getValue();
String value = null;
if (themeSetting.isConfigurable()) {
value = getThemeSetting(key);
}
else {
value = themeSetting.getValue();
}
if (value != null) {
properties.put(key, value);
}
}
return properties;
}
public String getTilesContent() {
return _tilesContent;
}
public String getTilesTitle() {
return _tilesTitle;
}
public TimeZone getTimeZone() {
return _timeZone;
}
public List<Layout> getUnfilteredLayouts() {
return _unfilteredLayouts;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public String getURLAddContent() {
return StringPool.BLANK;
}
public String getURLControlPanel() {
return _urlControlPanel;
}
public String getURLCurrent() {
return _urlCurrent;
}
public String getURLHome() {
return _urlHome;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public String getURLLayoutTemplates() {
if (Validator.isNull(_urlLayoutTemplates)) {
return getURLPageSettings() + "#layout";
}
return _urlLayoutTemplates;
}
@JSON(include = false)
public PortletURL getURLMyAccount() {
if (_urlMyAccount == null) {
String portletId = PortletProviderUtil.getPortletId(
PortalMyAccountApplicationType.MyAccount.CLASS_NAME,
PortletProvider.Action.VIEW);
_urlMyAccount = PortalUtil.getControlPanelPortletURL(
getRequest(), portletId, PortletRequest.RENDER_PHASE);
}
return _urlMyAccount;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
@JSON(include = false)
public PortletURL getURLPageSettings() {
if (_urlPageSettings == null) {
String portletId = PortletProviderUtil.getPortletId(
Layout.class.getName(), PortletProvider.Action.EDIT);
_urlPageSettings = PortalUtil.getControlPanelPortletURL(
getRequest(), portletId, PortletRequest.RENDER_PHASE);
}
return _urlPageSettings;
}
public String getURLPortal() {
return _urlPortal;
}
@JSON(include = false)
public PortletURL getURLPublishToLive() {
return _urlPublishToLive;
}
public String getURLSignIn() {
return _urlSignIn;
}
public String getURLSignOut() {
return _urlSignOut;
}
@JSON(include = false)
public PortletURL getURLUpdateManager() {
if (_urlUpdateManager == null) {
_urlUpdateManager = PortalUtil.getControlPanelPortletURL(
getRequest(), PortletKeys.MARKETPLACE_STORE,
PortletRequest.RENDER_PHASE);
}
return _urlUpdateManager;
}
/**
* The user for which the current request is being handled. Note, that an
* administrative user can impersonate another user.
*
* @return the user for which the current request is being handled
* @see #getRealUser()
*/
public User getUser() {
return _user;
}
/**
* Returns the ID of the user for which the current request is being
* handled. Note that an administrative user can impersonate another user.
*
* @return the ID of the user for which the current request is being handled
*/
public long getUserId() {
return _user.getUserId();
}
public boolean isAddSessionIdToURL() {
return _addSessionIdToURL;
}
public boolean isAjax() {
return _ajax;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public boolean isFacebook() {
return false;
}
public boolean isFreeformLayout() {
return _freeformLayout;
}
public boolean isI18n() {
return _i18n;
}
/**
* Returns <code>true</code> if the user is being impersonated by an
* administrative user.
*
* @return <code>true</code> if the user is being impersonated by an
* administrative user; <code>false</code> otherwise
* @see #getRealUser()
* @see #getUser()
*/
public boolean isImpersonated() {
if (getUserId() == getRealUserId()) {
return false;
}
return true;
}
public boolean isIncludedJs(String js) {
String path = getPathJavaScript();
if (isIncludePortletCssJs() &&
js.startsWith(path + "/liferay/portlet_css.js")) {
return true;
}
return false;
}
public boolean isIncludePortletCssJs() {
return _includePortletCssJs;
}
public boolean isIsolated() {
return _isolated;
}
public boolean isLifecycleAction() {
return _lifecycleAction;
}
public boolean isLifecycleEvent() {
return _lifecycleEvent;
}
public boolean isLifecycleRender() {
return _lifecycleRender;
}
public boolean isLifecycleResource() {
return _lifecycleResource;
}
public boolean isSecure() {
return _secure;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public boolean isShowAddContentIcon() {
return false;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public boolean isShowAddContentIconPermission() {
return false;
}
public boolean isShowControlPanelIcon() {
return _showControlPanelIcon;
}
public boolean isShowHomeIcon() {
return _showHomeIcon;
}
public boolean isShowLayoutTemplatesIcon() {
return _showLayoutTemplatesIcon;
}
public boolean isShowMyAccountIcon() {
return _showMyAccountIcon;
}
public boolean isShowPageCustomizationIcon() {
return _showPageCustomizationIcon;
}
public boolean isShowPageSettingsIcon() {
return _showPageSettingsIcon;
}
public boolean isShowPortalIcon() {
return _showPortalIcon;
}
public boolean isShowSignInIcon() {
return _showSignInIcon;
}
public boolean isShowSignOutIcon() {
return _showSignOutIcon;
}
public boolean isShowSiteAdministrationIcon() {
return _showSiteAdministrationIcon;
}
public boolean isShowStagingIcon() {
return _showStagingIcon;
}
public boolean isSignedIn() {
return _signedIn;
}
public boolean isStateExclusive() {
return _stateExclusive;
}
public boolean isStateMaximized() {
return _stateMaximized;
}
public boolean isStatePopUp() {
return _statePopUp;
}
public boolean isThemeCssFastLoad() {
return _themeCssFastLoad;
}
public boolean isThemeImagesFastLoad() {
return _themeImagesFastLoad;
}
public boolean isThemeJsBarebone() {
return _themeJsBarebone;
}
public boolean isThemeJsFastLoad() {
return _themeJsFastLoad;
}
public boolean isTilesSelectable() {
return _tilesSelectable;
}
public boolean isWidget() {
return _widget;
}
@Override
public ThemeDisplay merge(ThemeDisplay themeDisplay) {
if ((themeDisplay == null) || (themeDisplay == this)) {
return this;
}
_includePortletCssJs = themeDisplay._includePortletCssJs;
return this;
}
public void setAccount(Account account) {
_account = account;
}
public void setAddSessionIdToURL(boolean addSessionIdToURL) {
_addSessionIdToURL = addSessionIdToURL;
}
public void setAjax(boolean ajax) {
_ajax = ajax;
}
public void setCDNBaseURL(String cdnBase) {
_cdnBaseURL = cdnBase;
}
public void setCDNDynamicResourcesHost(String cdnDynamicResourcesHost) {
_cdnDynamicResourcesHost = cdnDynamicResourcesHost;
}
public void setCDNHost(String cdnHost) {
_cdnHost = cdnHost;
}
public void setCompany(Company company) throws PortalException {
_company = company;
_companyGroupId = company.getGroupId();
}
public void setCompanyLogo(String companyLogo) {
_companyLogo = companyLogo;
}
public void setCompanyLogoHeight(int companyLogoHeight) {
_companyLogoHeight = companyLogoHeight;
}
public void setCompanyLogoWidth(int companyLogoWidth) {
_companyLogoWidth = companyLogoWidth;
}
public void setContact(Contact contact) {
_contact = contact;
}
public void setDevice(Device device) {
_device = device;
}
public void setDoAsGroupId(long doAsGroupId) {
_doAsGroupId = doAsGroupId;
}
public void setDoAsUserId(String doAsUserId) {
_doAsUserId = doAsUserId;
}
public void setDoAsUserLanguageId(String doAsUserLanguageId) {
_doAsUserLanguageId = doAsUserLanguageId;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public void setFacebookCanvasPageURL(String facebookCanvasPageURL) {
_facebookCanvasPageURL = facebookCanvasPageURL;
}
public void setFreeformLayout(boolean freeformLayout) {
_freeformLayout = freeformLayout;
}
public void setI18nLanguageId(String i18nLanguageId) {
_i18nLanguageId = i18nLanguageId;
if (Validator.isNotNull(i18nLanguageId)) {
_i18n = true;
}
else {
_i18n = false;
}
}
public void setI18nPath(String i18nPath) {
_i18nPath = i18nPath;
if (Validator.isNotNull(i18nPath)) {
_i18n = true;
}
else {
_i18n = false;
}
}
public void setIncludePortletCssJs(boolean includePortletCssJs) {
_includePortletCssJs = includePortletCssJs;
}
public void setIsolated(boolean isolated) {
_isolated = isolated;
}
public void setLanguageId(String languageId) {
_languageId = languageId;
}
public void setLayout(Layout layout) {
_layout = layout;
}
public void setLayouts(List<Layout> layouts) {
_layouts = layouts;
}
public void setLayoutSet(LayoutSet layoutSet) {
_layoutSet = layoutSet;
}
public void setLayoutSetLogo(String layoutSetLogo) {
_layoutSetLogo = layoutSetLogo;
}
public void setLayoutTypePortlet(LayoutTypePortlet layoutTypePortlet) {
_layoutTypePortlet = layoutTypePortlet;
}
public void setLifecycle(String lifecycle) {
_lifecycle = lifecycle;
}
public void setLifecycleAction(boolean lifecycleAction) {
_lifecycleAction = lifecycleAction;
}
public void setLifecycleEvent(boolean lifecycleEvent) {
_lifecycleEvent = lifecycleEvent;
}
public void setLifecycleRender(boolean lifecycleRender) {
_lifecycleRender = lifecycleRender;
}
public void setLifecycleResource(boolean lifecycleResource) {
_lifecycleResource = lifecycleResource;
}
public void setLocale(Locale locale) {
_locale = locale;
LocaleThreadLocal.setThemeDisplayLocale(locale);
}
public void setLookAndFeel(Theme theme, ColorScheme colorScheme) {
_theme = theme;
_colorScheme = colorScheme;
if ((theme == null) || (colorScheme == null)) {
return;
}
String themeStaticResourcePath = theme.getStaticResourcePath();
String cdnBaseURL = getCDNBaseURL();
setPathColorSchemeImages(
cdnBaseURL + themeStaticResourcePath +
colorScheme.getColorSchemeImagesPath());
String dynamicResourcesHost = getCDNDynamicResourcesHost();
if (Validator.isNull(dynamicResourcesHost)) {
String portalURL = getPortalURL();
try {
portalURL = PortalUtil.getPortalURL(getLayout(), this);
}
catch (Exception e) {
_log.error(e, e);
}
dynamicResourcesHost = portalURL;
}
setPathThemeCss(
dynamicResourcesHost + themeStaticResourcePath +
theme.getCssPath());
setPathThemeImages(
cdnBaseURL + themeStaticResourcePath + theme.getImagesPath());
setPathThemeJavaScript(
cdnBaseURL + themeStaticResourcePath + theme.getJavaScriptPath());
String rootPath = theme.getRootPath();
if (rootPath.equals(StringPool.SLASH)) {
setPathThemeRoot(themeStaticResourcePath);
}
else {
setPathThemeRoot(themeStaticResourcePath + rootPath);
}
setPathThemeTemplates(
cdnBaseURL + themeStaticResourcePath + theme.getTemplatesPath());
}
public void setMDRRuleGroupInstance(
MDRRuleGroupInstance mdrRuleGroupInstance) {
_mdrRuleGroupInstance = mdrRuleGroupInstance;
}
public void setPathApplet(String pathApplet) {
_pathApplet = pathApplet;
}
public void setPathCms(String pathCms) {
_pathCms = pathCms;
}
public void setPathColorSchemeImages(String pathColorSchemeImages) {
_pathColorSchemeImages = pathColorSchemeImages;
}
public void setPathContext(String pathContext) {
_pathContext = pathContext;
}
public void setPathFlash(String pathFlash) {
_pathFlash = pathFlash;
}
public void setPathFriendlyURLPrivateGroup(
String pathFriendlyURLPrivateGroup) {
_pathFriendlyURLPrivateGroup = pathFriendlyURLPrivateGroup;
}
public void setPathFriendlyURLPrivateUser(
String pathFriendlyURLPrivateUser) {
_pathFriendlyURLPrivateUser = pathFriendlyURLPrivateUser;
}
public void setPathFriendlyURLPublic(String pathFriendlyURLPublic) {
_pathFriendlyURLPublic = pathFriendlyURLPublic;
}
public void setPathImage(String pathImage) {
_pathImage = pathImage;
}
public void setPathJavaScript(String pathJavaScript) {
_pathJavaScript = pathJavaScript;
}
public void setPathMain(String pathMain) {
_pathMain = pathMain;
}
public void setPathSound(String pathSound) {
_pathSound = pathSound;
}
public void setPathThemeCss(String pathThemeCss) {
_pathThemeCss = pathThemeCss;
}
public void setPathThemeImages(String pathThemeImages) {
_pathThemeImages = pathThemeImages;
}
public void setPathThemeJavaScript(String pathThemeJavaScript) {
_pathThemeJavaScript = pathThemeJavaScript;
}
public void setPathThemeRoot(String pathThemeRoot) {
_pathThemeRoot = pathThemeRoot;
}
public void setPathThemeTemplates(String pathThemeTemplates) {
_pathThemeTemplates = pathThemeTemplates;
}
public void setPermissionChecker(PermissionChecker permissionChecker) {
_permissionChecker = permissionChecker;
}
public void setPlid(long plid) {
_plid = plid;
}
public void setPortalDomain(String portalDomain) {
_portalDomain = portalDomain;
}
public void setPortalURL(String portalURL) {
_portalURL = portalURL;
}
public void setPpid(String ppid) {
_ppid = ppid;
}
public void setRealCompanyLogo(String realCompanyLogo) {
_realCompanyLogo = realCompanyLogo;
}
public void setRealCompanyLogoHeight(int realCompanyLogoHeight) {
_realCompanyLogoHeight = realCompanyLogoHeight;
}
public void setRealCompanyLogoWidth(int realCompanyLogoWidth) {
_realCompanyLogoWidth = realCompanyLogoWidth;
}
public void setRealUser(User realUser) {
_realUser = realUser;
}
public void setRefererGroupId(long refererGroupId) {
_refererGroupId = refererGroupId;
if (_refererGroupId > 0) {
try {
_refererGroup = GroupLocalServiceUtil.getGroup(_refererGroupId);
}
catch (Exception e) {
_log.error(e, e);
}
}
}
public void setRefererPlid(long refererPlid) {
_refererPlid = refererPlid;
}
public void setRequest(HttpServletRequest request) {
_request = request;
}
public void setResponse(HttpServletResponse response) {
_response = response;
}
public void setScopeGroupId(long scopeGroupId) {
_scopeGroupId = scopeGroupId;
if (_scopeGroupId > 0) {
try {
_scopeGroup = GroupLocalServiceUtil.getGroup(_scopeGroupId);
}
catch (Exception e) {
_log.error(e, e);
}
}
}
public void setSecure(boolean secure) {
_secure = secure;
}
public void setServerName(String serverName) {
_serverName = serverName;
}
public void setServerPort(int serverPort) {
_serverPort = serverPort;
}
public void setSessionId(String sessionId) {
_sessionId = sessionId;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public void setShowAddContentIcon(boolean showAddContentIcon) {
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public void setShowAddContentIconPermission(
boolean showAddContentIconPermission) {
}
public void setShowControlPanelIcon(boolean showControlPanelIcon) {
_showControlPanelIcon = showControlPanelIcon;
}
public void setShowHomeIcon(boolean showHomeIcon) {
_showHomeIcon = showHomeIcon;
}
public void setShowLayoutTemplatesIcon(boolean showLayoutTemplatesIcon) {
_showLayoutTemplatesIcon = showLayoutTemplatesIcon;
}
public void setShowMyAccountIcon(boolean showMyAccountIcon) {
_showMyAccountIcon = showMyAccountIcon;
}
public void setShowPageCustomizationIcon(
boolean showPageCustomizationIcon) {
_showPageCustomizationIcon = showPageCustomizationIcon;
}
public void setShowPageSettingsIcon(boolean showPageSettingsIcon) {
_showPageSettingsIcon = showPageSettingsIcon;
}
public void setShowPortalIcon(boolean showPortalIcon) {
_showPortalIcon = showPortalIcon;
}
public void setShowSignInIcon(boolean showSignInIcon) {
_showSignInIcon = showSignInIcon;
}
public void setShowSignOutIcon(boolean showSignOutIcon) {
_showSignOutIcon = showSignOutIcon;
}
public void setShowSiteAdministrationIcon(
boolean showSiteAdministrationIcon) {
_showSiteAdministrationIcon = showSiteAdministrationIcon;
}
public void setShowStagingIcon(boolean showStagingIcon) {
_showStagingIcon = showStagingIcon;
}
public void setSignedIn(boolean signedIn) {
_signedIn = signedIn;
}
public void setSiteDefaultLocale(Locale siteDefaultLocale) {
_siteDefaultLocale = siteDefaultLocale;
LocaleThreadLocal.setSiteDefaultLocale(siteDefaultLocale);
}
public void setSiteGroupId(long siteGroupId) {
_siteGroupId = siteGroupId;
if (_siteGroupId > 0) {
try {
_siteGroup = GroupLocalServiceUtil.getGroup(_siteGroupId);
}
catch (Exception e) {
_log.error(e, e);
}
}
}
public void setStateExclusive(boolean stateExclusive) {
_stateExclusive = stateExclusive;
}
public void setStateMaximized(boolean stateMaximized) {
_stateMaximized = stateMaximized;
}
public void setStatePopUp(boolean statePopUp) {
_statePopUp = statePopUp;
}
public void setThemeCssFastLoad(boolean themeCssFastLoad) {
_themeCssFastLoad = themeCssFastLoad;
}
public void setThemeImagesFastLoad(boolean themeImagesFastLoad) {
_themeImagesFastLoad = themeImagesFastLoad;
}
public void setThemeJsBarebone(boolean themeJsBarebone) {
_themeJsBarebone = themeJsBarebone;
}
public void setThemeJsFastLoad(boolean themeJsFastLoad) {
_themeJsFastLoad = themeJsFastLoad;
}
public void setTilesContent(String tilesContent) {
_tilesContent = tilesContent;
}
public void setTilesSelectable(boolean tilesSelectable) {
_tilesSelectable = tilesSelectable;
}
public void setTilesTitle(String tilesTitle) {
_tilesTitle = tilesTitle;
}
public void setTimeZone(TimeZone timeZone) {
_timeZone = timeZone;
TimeZoneThreadLocal.setThemeDisplayTimeZone(timeZone);
}
public void setUnfilteredLayouts(List<Layout> unfilteredLayouts) {
_unfilteredLayouts = unfilteredLayouts;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public void setURLAddContent(String urlAddContent) {
}
public void setURLControlPanel(String urlControlPanel) {
_urlControlPanel = urlControlPanel;
}
public void setURLCurrent(String urlCurrent) {
_urlCurrent = urlCurrent;
}
public void setURLHome(String urlHome) {
_urlHome = urlHome;
}
public void setURLLayoutTemplates(String urlLayoutTemplates) {
_urlLayoutTemplates = urlLayoutTemplates;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public void setURLMyAccount(PortletURL urlMyAccount) {
_urlMyAccount = urlMyAccount;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public void setURLPageSettings(PortletURL urlPageSettings) {
_urlPageSettings = urlPageSettings;
}
public void setURLPortal(String urlPortal) {
_urlPortal = urlPortal;
}
public void setURLPublishToLive(PortletURL urlPublishToLive) {
_urlPublishToLive = urlPublishToLive;
}
public void setURLSignIn(String urlSignIn) {
_urlSignIn = urlSignIn;
}
public void setURLSignOut(String urlSignOut) {
_urlSignOut = urlSignOut;
}
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public void setURLUpdateManager(PortletURL urlUpdateManager) {
_urlUpdateManager = urlUpdateManager;
}
public void setUser(User user) {
_user = user;
}
public void setWidget(boolean widget) {
_widget = widget;
}
@Override
public ThemeDisplay split() {
try {
return (ThemeDisplay)clone();
}
catch (CloneNotSupportedException cnse) {
throw new RuntimeException(cnse);
}
}
public String translate(String key) {
return LanguageUtil.get(getLocale(), key);
}
public String translate(String pattern, Object... arguments) {
return LanguageUtil.format(getLocale(), pattern, arguments);
}
private String _getFriendlyURL(Layout layout) {
if (_layoutFriendlyURLs == null) {
if (_layouts == null) {
_layoutFriendlyURLs = new HashMap<>();
}
else {
_layoutFriendlyURLs =
LayoutFriendlyURLLocalServiceUtil.getLayoutFriendlyURLs(
_siteGroup, _layouts, _languageId);
}
}
String layoutFriendlyURL = _layoutFriendlyURLs.get(layout.getPlid());
if (layoutFriendlyURL == null) {
layoutFriendlyURL = layout.getFriendlyURL(_locale);
_layoutFriendlyURLs.put(layout.getPlid(), layoutFriendlyURL);
}
return layoutFriendlyURL;
}
private static final Log _log = LogFactoryUtil.getLog(ThemeDisplay.class);
private Account _account;
private boolean _addSessionIdToURL;
private boolean _ajax;
private String _cdnBaseURL;
private String _cdnDynamicResourcesHost = StringPool.BLANK;
private String _cdnHost = StringPool.BLANK;
private ColorScheme _colorScheme;
private Company _company;
private long _companyGroupId;
private String _companyLogo = StringPool.BLANK;
private int _companyLogoHeight;
private int _companyLogoWidth;
private Contact _contact;
private Group _controlPanelGroup;
private Layout _controlPanelLayout;
private User _defaultUser;
private Device _device;
private long _doAsGroupId;
private String _doAsUserId = StringPool.BLANK;
private String _doAsUserLanguageId = StringPool.BLANK;
/**
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
private String _facebookCanvasPageURL;
private boolean _freeformLayout;
private boolean _i18n;
private String _i18nLanguageId;
private String _i18nPath;
private boolean _includePortletCssJs;
private boolean _isolated;
private String _languageId;
private Layout _layout;
private transient Map<Long, String> _layoutFriendlyURLs;
private transient Map<String, PortletPreferences> _layoutPortletPreferences;
private List<Layout> _layouts;
private LayoutSet _layoutSet;
private String _layoutSetLogo = StringPool.BLANK;
private LayoutTypePortlet _layoutTypePortlet;
private String _lifecycle;
private boolean _lifecycleAction;
private boolean _lifecycleEvent;
private boolean _lifecycleRender;
private boolean _lifecycleResource;
private Locale _locale;
private MDRRuleGroupInstance _mdrRuleGroupInstance;
private String _pathApplet = StringPool.BLANK;
private String _pathCms = StringPool.BLANK;
private String _pathColorSchemeImages = StringPool.BLANK;
private String _pathContext = StringPool.BLANK;
private String _pathFlash = StringPool.BLANK;
private String _pathFriendlyURLPrivateGroup = StringPool.BLANK;
private String _pathFriendlyURLPrivateUser = StringPool.BLANK;
private String _pathFriendlyURLPublic = StringPool.BLANK;
private String _pathImage = StringPool.BLANK;
private String _pathJavaScript = StringPool.BLANK;
private String _pathMain = StringPool.BLANK;
private String _pathSound = StringPool.BLANK;
private String _pathThemeCss = StringPool.BLANK;
private String _pathThemeImages = StringPool.BLANK;
private String _pathThemeJavaScript = StringPool.BLANK;
private String _pathThemeRoot = StringPool.BLANK;
private String _pathThemeTemplates = StringPool.BLANK;
private transient PermissionChecker _permissionChecker;
private long _plid;
private String _portalDomain = StringPool.BLANK;
private String _portalURL = StringPool.BLANK;
private PortletDisplay _portletDisplay = new PortletDisplay();
private String _ppid = StringPool.BLANK;
private String _realCompanyLogo = StringPool.BLANK;
private int _realCompanyLogoHeight;
private int _realCompanyLogoWidth;
private User _realUser;
private Group _refererGroup;
private long _refererGroupId;
private long _refererPlid;
private transient HttpServletRequest _request;
private transient HttpServletResponse _response;
private Group _scopeGroup;
private long _scopeGroupId;
private boolean _secure;
private String _serverName;
private int _serverPort;
private String _sessionId = StringPool.BLANK;
private boolean _showControlPanelIcon;
private boolean _showHomeIcon;
private boolean _showLayoutTemplatesIcon;
private boolean _showMyAccountIcon;
private boolean _showPageCustomizationIcon;
private boolean _showPageSettingsIcon;
private boolean _showPortalIcon;
private boolean _showSignInIcon;
private boolean _showSignOutIcon;
private boolean _showSiteAdministrationIcon;
private boolean _showStagingIcon;
private boolean _signedIn;
private Locale _siteDefaultLocale;
private Group _siteGroup;
private long _siteGroupId;
private boolean _stateExclusive;
private boolean _stateMaximized;
private boolean _statePopUp;
private Theme _theme;
private boolean _themeCssFastLoad;
private boolean _themeImagesFastLoad;
private boolean _themeJsBarebone;
private boolean _themeJsFastLoad;
private String _tilesContent = StringPool.BLANK;
private boolean _tilesSelectable;
private String _tilesTitle = StringPool.BLANK;
private TimeZone _timeZone;
private List<Layout> _unfilteredLayouts;
private String _urlControlPanel = StringPool.BLANK;
private String _urlCurrent = StringPool.BLANK;
private String _urlHome = StringPool.BLANK;
private String _urlLayoutTemplates = StringPool.BLANK;
private transient PortletURL _urlMyAccount;
private transient PortletURL _urlPageSettings;
private String _urlPortal = StringPool.BLANK;
private transient PortletURL _urlPublishToLive;
private String _urlSignIn = StringPool.BLANK;
private String _urlSignOut = StringPool.BLANK;
private transient PortletURL _urlUpdateManager;
private User _user;
private boolean _widget;
}