/**
* 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.model.impl;
import com.liferay.asset.kernel.model.AssetRendererFactory;
import com.liferay.expando.kernel.model.CustomAttributesDisplay;
import com.liferay.exportimport.kernel.lar.PortletDataHandler;
import com.liferay.exportimport.kernel.lar.StagedModelDataHandler;
import com.liferay.portal.kernel.application.type.ApplicationType;
import com.liferay.portal.kernel.atom.AtomCollectionAdapter;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.Plugin;
import com.liferay.portal.kernel.model.PluginSetting;
import com.liferay.portal.kernel.model.Portlet;
import com.liferay.portal.kernel.model.PortletApp;
import com.liferay.portal.kernel.model.PortletConstants;
import com.liferay.portal.kernel.model.PortletFilter;
import com.liferay.portal.kernel.model.PortletInfo;
import com.liferay.portal.kernel.model.PublicRenderParameter;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.notifications.UserNotificationHandler;
import com.liferay.portal.kernel.plugin.PluginPackage;
import com.liferay.portal.kernel.poller.PollerProcessor;
import com.liferay.portal.kernel.pop.MessageListener;
import com.liferay.portal.kernel.portlet.ConfigurationAction;
import com.liferay.portal.kernel.portlet.ControlPanelEntry;
import com.liferay.portal.kernel.portlet.FriendlyURLMapper;
import com.liferay.portal.kernel.portlet.FriendlyURLMapperTracker;
import com.liferay.portal.kernel.portlet.PortletBag;
import com.liferay.portal.kernel.portlet.PortletBagPool;
import com.liferay.portal.kernel.portlet.PortletLayoutListener;
import com.liferay.portal.kernel.portlet.PortletQNameUtil;
import com.liferay.portal.kernel.scheduler.SchedulerEntry;
import com.liferay.portal.kernel.search.Indexer;
import com.liferay.portal.kernel.search.OpenSearch;
import com.liferay.portal.kernel.security.permission.ActionKeys;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.security.permission.PermissionCheckerFactoryUtil;
import com.liferay.portal.kernel.security.permission.PermissionPropagator;
import com.liferay.portal.kernel.security.permission.PermissionThreadLocal;
import com.liferay.portal.kernel.service.UserLocalServiceUtil;
import com.liferay.portal.kernel.service.permission.PortletPermissionUtil;
import com.liferay.portal.kernel.servlet.ServletContextUtil;
import com.liferay.portal.kernel.servlet.URLEncoder;
import com.liferay.portal.kernel.template.TemplateHandler;
import com.liferay.portal.kernel.trash.TrashHandler;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.ContentTypes;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.ServiceProxyFactory;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.webdav.WebDAVStorage;
import com.liferay.portal.kernel.workflow.WorkflowHandler;
import com.liferay.portal.kernel.xml.QName;
import com.liferay.portal.kernel.xmlrpc.Method;
import com.liferay.portal.util.PropsValues;
import com.liferay.registry.Registry;
import com.liferay.registry.RegistryUtil;
import com.liferay.registry.ServiceRegistrar;
import com.liferay.social.kernel.model.SocialActivityInterpreter;
import com.liferay.social.kernel.model.SocialRequestInterpreter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import javax.portlet.PortletMode;
import javax.portlet.WindowState;
import javax.servlet.ServletContext;
/**
* @author Brian Wing Shun Chan
*/
public class PortletImpl extends PortletBaseImpl {
/**
* Constructs a portlet with no parameters.
*/
public PortletImpl() {
this(0, null);
}
/**
* Constructs a portlet with the specified parameters.
*/
public PortletImpl(long companyId, String portletId) {
setCompanyId(companyId);
setPortletId(portletId);
setActive(true);
setStrutsPath(portletId);
_assetRendererFactoryClasses = new ArrayList<>();
_atomCollectionAdapterClasses = new ArrayList<>();
_autopropagatedParameters = new LinkedHashSet<>();
_customAttributesDisplayClasses = new ArrayList<>();
_footerPortalCss = new ArrayList<>();
_footerPortalJavaScript = new ArrayList<>();
_footerPortletCss = new ArrayList<>();
_footerPortletJavaScript = new ArrayList<>();
_headerPortalCss = new ArrayList<>();
_headerPortalJavaScript = new ArrayList<>();
_headerPortletCss = new ArrayList<>();
_headerPortletJavaScript = new ArrayList<>();
_indexerClasses = new ArrayList<>();
_initParams = new HashMap<>();
_portletFilters = new LinkedHashMap<>();
_portletModes = new HashMap<>();
_roleMappers = new LinkedHashMap<>();
_rootPortlet = this;
_schedulerEntries = new ArrayList<>();
_socialActivityInterpreterClasses = new ArrayList<>();
_stagedModelDataHandlerClasses = new ArrayList<>();
_supportedLocales = new HashSet<>();
_trashHandlerClasses = new ArrayList<>();
_unlinkedRoles = new HashSet<>();
_userNotificationHandlerClasses = new ArrayList<>();
_windowStates = new HashMap<>();
_workflowHandlerClasses = new ArrayList<>();
}
/**
* Constructs a portlet with the specified parameters.
*/
public PortletImpl(
String portletId, Portlet rootPortlet, PluginPackage pluginPackage,
PluginSetting pluginSetting, long companyId, String icon,
String virtualPath, String strutsPath, String parentStrutsPath,
String portletName, String displayName, String portletClass,
String configurationActionClass, List<String> indexerClasses,
String openSearchClass, List<SchedulerEntry> schedulerEntries,
String portletURLClass, String friendlyURLMapperClass,
String friendlyURLMapping, String friendlyURLRoutes,
String urlEncoderClass, String portletDataHandlerClass,
List<String> stagedModelDataHandlerClasses, String templateHandlerClass,
String portletLayoutListenerClass, String pollerProcessorClass,
String popMessageListenerClass,
List<String> socialActivityInterpreterClasses,
String socialRequestInterpreterClass,
String userNotificationDefinitions,
List<String> userNotificationHandlerClasses, String webDAVStorageToken,
String webDAVStorageClass, String xmlRpcMethodClass,
String controlPanelEntryCategory, double controlPanelEntryWeight,
String controlPanelClass, List<String> assetRendererFactoryClasses,
List<String> atomCollectionAdapterClasses,
List<String> customAttributesDisplayClasses,
String permissionPropagatorClass, List<String> trashHandlerClasses,
List<String> workflowHandlerClasses, String defaultPreferences,
String preferencesValidator, boolean preferencesCompanyWide,
boolean preferencesUniquePerLayout, boolean preferencesOwnedByGroup,
boolean useDefaultTemplate, boolean showPortletAccessDenied,
boolean showPortletInactive, boolean actionURLRedirect,
boolean restoreCurrentView, boolean maximizeEdit, boolean maximizeHelp,
boolean popUpPrint, boolean layoutCacheable, boolean instanceable,
boolean remoteable, boolean scopeable, boolean singlePageApplication,
String userPrincipalStrategy, boolean privateRequestAttributes,
boolean privateSessionAttributes, Set<String> autopropagatedParameters,
boolean requiresNamespacedParameters, int actionTimeout,
int renderTimeout, int renderWeight, boolean ajaxable,
List<String> headerPortalCss, List<String> headerPortletCss,
List<String> headerPortalJavaScript,
List<String> headerPortletJavaScript, List<String> footerPortalCss,
List<String> footerPortletCss, List<String> footerPortalJavaScript,
List<String> footerPortletJavaScript, String cssClassWrapper,
boolean addDefaultResource, String roles, Set<String> unlinkedRoles,
Map<String, String> roleMappers, boolean system, boolean active,
boolean include, Map<String, String> initParams, Integer expCache,
Map<String, Set<String>> portletModes,
Map<String, Set<String>> windowStates, Set<String> supportedLocales,
String resourceBundle, PortletInfo portletInfo,
Map<String, PortletFilter> portletFilters, Set<QName> processingEvents,
Set<QName> publishingEvents,
Set<PublicRenderParameter> publicRenderParameters,
PortletApp portletApp) {
setPortletId(portletId);
setCompanyId(companyId);
setRoles(roles);
setActive(active);
setProcessingEvents(processingEvents);
setPublishingEvents(publishingEvents);
setPublicRenderParameters(publicRenderParameters);
_rootPortlet = rootPortlet;
_pluginPackage = pluginPackage;
_defaultPluginSetting = pluginSetting;
_icon = icon;
_virtualPath = virtualPath;
_strutsPath = strutsPath;
_parentStrutsPath = parentStrutsPath;
_portletName = portletName;
_displayName = displayName;
_portletClass = portletClass;
_configurationActionClass = configurationActionClass;
_indexerClasses = indexerClasses;
_openSearchClass = openSearchClass;
_schedulerEntries = schedulerEntries;
_portletURLClass = portletURLClass;
_friendlyURLMapperClass = friendlyURLMapperClass;
_friendlyURLMapping = friendlyURLMapping;
_friendlyURLRoutes = friendlyURLRoutes;
_urlEncoderClass = urlEncoderClass;
_portletDataHandlerClass = portletDataHandlerClass;
_stagedModelDataHandlerClasses = stagedModelDataHandlerClasses;
_templateHandlerClass = templateHandlerClass;
_portletLayoutListenerClass = portletLayoutListenerClass;
_pollerProcessorClass = pollerProcessorClass;
_popMessageListenerClass = popMessageListenerClass;
_socialActivityInterpreterClasses = socialActivityInterpreterClasses;
_socialRequestInterpreterClass = socialRequestInterpreterClass;
_userNotificationDefinitions = userNotificationDefinitions;
_userNotificationHandlerClasses = userNotificationHandlerClasses;
_webDAVStorageToken = webDAVStorageToken;
_webDAVStorageClass = webDAVStorageClass;
_xmlRpcMethodClass = xmlRpcMethodClass;
_controlPanelEntryCategory = controlPanelEntryCategory;
_controlPanelEntryWeight = controlPanelEntryWeight;
_controlPanelEntryClass = controlPanelClass;
_assetRendererFactoryClasses = assetRendererFactoryClasses;
_atomCollectionAdapterClasses = atomCollectionAdapterClasses;
_customAttributesDisplayClasses = customAttributesDisplayClasses;
_permissionPropagatorClass = permissionPropagatorClass;
_trashHandlerClasses = trashHandlerClasses;
_workflowHandlerClasses = workflowHandlerClasses;
_defaultPreferences = defaultPreferences;
_preferencesValidator = preferencesValidator;
_preferencesCompanyWide = preferencesCompanyWide;
_preferencesUniquePerLayout = preferencesUniquePerLayout;
_preferencesOwnedByGroup = preferencesOwnedByGroup;
_useDefaultTemplate = useDefaultTemplate;
_showPortletAccessDenied = showPortletAccessDenied;
_showPortletInactive = showPortletInactive;
_actionURLRedirect = actionURLRedirect;
_restoreCurrentView = restoreCurrentView;
_maximizeEdit = maximizeEdit;
_maximizeHelp = maximizeHelp;
_popUpPrint = popUpPrint;
_layoutCacheable = layoutCacheable;
_instanceable = instanceable;
_remoteable = remoteable;
_scopeable = scopeable;
_singlePageApplication = singlePageApplication;
_userPrincipalStrategy = userPrincipalStrategy;
_privateRequestAttributes = privateRequestAttributes;
_privateSessionAttributes = privateSessionAttributes;
_autopropagatedParameters = autopropagatedParameters;
_requiresNamespacedParameters = requiresNamespacedParameters;
_actionTimeout = actionTimeout;
_renderTimeout = renderTimeout;
_renderWeight = renderWeight;
_ajaxable = ajaxable;
_headerPortalCss = headerPortalCss;
_headerPortletCss = headerPortletCss;
_headerPortalJavaScript = headerPortalJavaScript;
_headerPortletJavaScript = headerPortletJavaScript;
_footerPortalCss = footerPortalCss;
_footerPortletCss = footerPortletCss;
_footerPortalJavaScript = footerPortalJavaScript;
_footerPortletJavaScript = footerPortletJavaScript;
_cssClassWrapper = cssClassWrapper;
_addDefaultResource = addDefaultResource;
_unlinkedRoles = unlinkedRoles;
_roleMappers = roleMappers;
_system = system;
_include = include;
_initParams = initParams;
_expCache = expCache;
_portletModes = portletModes;
_windowStates = windowStates;
_supportedLocales = supportedLocales;
_resourceBundle = resourceBundle;
_portletInfo = portletInfo;
_portletFilters = portletFilters;
_portletApp = portletApp;
}
/**
* Constructs a portlet with the specified parameters.
*
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
public PortletImpl(
String portletId, Portlet rootPortlet, PluginPackage pluginPackage,
PluginSetting pluginSetting, long companyId, String icon,
String virtualPath, String strutsPath, String parentStrutsPath,
String portletName, String displayName, String portletClass,
String configurationActionClass, List<String> indexerClasses,
String openSearchClass, List<SchedulerEntry> schedulerEntries,
String portletURLClass, String friendlyURLMapperClass,
String friendlyURLMapping, String friendlyURLRoutes,
String urlEncoderClass, String portletDataHandlerClass,
List<String> stagedModelDataHandlerClasses, String templateHandlerClass,
String portletLayoutListenerClass, String pollerProcessorClass,
String popMessageListenerClass,
List<String> socialActivityInterpreterClasses,
String socialRequestInterpreterClass,
String userNotificationDefinitions,
List<String> userNotificationHandlerClasses, String webDAVStorageToken,
String webDAVStorageClass, String xmlRpcMethodClass,
String controlPanelEntryCategory, double controlPanelEntryWeight,
String controlPanelClass, List<String> assetRendererFactoryClasses,
List<String> atomCollectionAdapterClasses,
List<String> customAttributesDisplayClasses,
String permissionPropagatorClass, List<String> trashHandlerClasses,
List<String> workflowHandlerClasses, String defaultPreferences,
String preferencesValidator, boolean preferencesCompanyWide,
boolean preferencesUniquePerLayout, boolean preferencesOwnedByGroup,
boolean useDefaultTemplate, boolean showPortletAccessDenied,
boolean showPortletInactive, boolean actionURLRedirect,
boolean restoreCurrentView, boolean maximizeEdit, boolean maximizeHelp,
boolean popUpPrint, boolean layoutCacheable, boolean instanceable,
boolean remoteable, boolean scopeable, boolean singlePageApplication,
String userPrincipalStrategy, boolean privateRequestAttributes,
boolean privateSessionAttributes, Set<String> autopropagatedParameters,
boolean requiresNamespacedParameters, int actionTimeout,
int renderTimeout, int renderWeight, boolean ajaxable,
List<String> headerPortalCss, List<String> headerPortletCss,
List<String> headerPortalJavaScript,
List<String> headerPortletJavaScript, List<String> footerPortalCss,
List<String> footerPortletCss, List<String> footerPortalJavaScript,
List<String> footerPortletJavaScript, String cssClassWrapper,
String facebookIntegration, boolean addDefaultResource, String roles,
Set<String> unlinkedRoles, Map<String, String> roleMappers,
boolean system, boolean active, boolean include,
Map<String, String> initParams, Integer expCache,
Map<String, Set<String>> portletModes,
Map<String, Set<String>> windowStates, Set<String> supportedLocales,
String resourceBundle, PortletInfo portletInfo,
Map<String, PortletFilter> portletFilters, Set<QName> processingEvents,
Set<QName> publishingEvents,
Set<PublicRenderParameter> publicRenderParameters,
PortletApp portletApp) {
this(
portletId, rootPortlet, pluginPackage, pluginSetting, companyId,
icon, virtualPath, strutsPath, parentStrutsPath, portletName,
displayName, portletClass, configurationActionClass, indexerClasses,
openSearchClass, schedulerEntries, portletURLClass,
friendlyURLMapperClass, friendlyURLMapping, friendlyURLRoutes,
urlEncoderClass, portletDataHandlerClass,
stagedModelDataHandlerClasses, templateHandlerClass,
portletLayoutListenerClass, pollerProcessorClass,
popMessageListenerClass, socialActivityInterpreterClasses,
socialRequestInterpreterClass, userNotificationDefinitions,
userNotificationHandlerClasses, webDAVStorageToken,
webDAVStorageClass, xmlRpcMethodClass, controlPanelEntryCategory,
controlPanelEntryWeight, controlPanelClass,
assetRendererFactoryClasses, atomCollectionAdapterClasses,
customAttributesDisplayClasses, permissionPropagatorClass,
trashHandlerClasses, workflowHandlerClasses, defaultPreferences,
preferencesValidator, preferencesCompanyWide,
preferencesUniquePerLayout, preferencesOwnedByGroup,
useDefaultTemplate, showPortletAccessDenied, showPortletInactive,
actionURLRedirect, restoreCurrentView, maximizeEdit, maximizeHelp,
popUpPrint, layoutCacheable, instanceable, remoteable, scopeable,
singlePageApplication, userPrincipalStrategy,
privateRequestAttributes, privateSessionAttributes,
autopropagatedParameters, requiresNamespacedParameters,
actionTimeout, renderTimeout, renderWeight, ajaxable,
headerPortalCss, headerPortletCss, headerPortalJavaScript,
headerPortletJavaScript, footerPortalCss, footerPortletCss,
footerPortalJavaScript, footerPortletJavaScript, cssClassWrapper,
addDefaultResource, roles, unlinkedRoles, roleMappers, system,
active, include, initParams, expCache, portletModes, windowStates,
supportedLocales, resourceBundle, portletInfo, portletFilters,
processingEvents, publishingEvents, publicRenderParameters,
portletApp);
_facebookIntegration = facebookIntegration;
}
/**
* Adds an application type.
*
* @param applicationType an application type
*/
@Override
public void addApplicationType(ApplicationType applicationType) {
_applicationTypes.add(applicationType);
}
/**
* Adds a processing event.
*/
@Override
public void addProcessingEvent(QName processingEvent) {
_processingEvents.add(processingEvent);
_processingEventsByQName.put(
PortletQNameUtil.getKey(processingEvent), processingEvent);
}
/**
* Adds a public render parameter.
*
* @param publicRenderParameter a public render parameter
*/
@Override
public void addPublicRenderParameter(
PublicRenderParameter publicRenderParameter) {
_publicRenderParameters.add(publicRenderParameter);
String identifier = publicRenderParameter.getIdentifier();
_publicRenderParametersByIdentifier.put(
identifier, publicRenderParameter);
QName qName = publicRenderParameter.getQName();
_publicRenderParametersByQName.put(
PortletQNameUtil.getKey(qName), publicRenderParameter);
String publicRenderParameterName =
PortletQNameUtil.getPublicRenderParameterName(qName);
PortletQNameUtil.setPublicRenderParameterIdentifier(
publicRenderParameterName, identifier);
}
/**
* Adds a publishing event.
*/
@Override
public void addPublishingEvent(QName publishingEvent) {
_publishingEvents.add(publishingEvent);
}
/**
* Adds a scheduler entry.
*/
@Override
public void addSchedulerEntry(SchedulerEntry schedulerEntry) {
_schedulerEntries.add(schedulerEntry);
}
/**
* Creates and returns a copy of this object.
*
* @return a copy of this object
*/
@Override
public Object clone() {
PortletImpl portletImpl = new PortletImpl(
getPortletId(), getRootPortlet(), getPluginPackage(),
getDefaultPluginSetting(), getCompanyId(), getIcon(),
getVirtualPath(), getStrutsPath(), getParentStrutsPath(),
getPortletName(), getDisplayName(), getPortletClass(),
getConfigurationActionClass(), getIndexerClasses(),
getOpenSearchClass(), getSchedulerEntries(), getPortletURLClass(),
getFriendlyURLMapperClass(), getFriendlyURLMapping(),
getFriendlyURLRoutes(), getURLEncoderClass(),
getPortletDataHandlerClass(), getStagedModelDataHandlerClasses(),
getTemplateHandlerClass(), getPortletLayoutListenerClass(),
getPollerProcessorClass(), getPopMessageListenerClass(),
getSocialActivityInterpreterClasses(),
getSocialRequestInterpreterClass(),
getUserNotificationDefinitions(),
getUserNotificationHandlerClasses(), getWebDAVStorageToken(),
getWebDAVStorageClass(), getXmlRpcMethodClass(),
getControlPanelEntryCategory(), getControlPanelEntryWeight(),
getControlPanelEntryClass(), getAssetRendererFactoryClasses(),
getAtomCollectionAdapterClasses(),
getCustomAttributesDisplayClasses(), getPermissionPropagatorClass(),
getTrashHandlerClasses(), getWorkflowHandlerClasses(),
getDefaultPreferences(), getPreferencesValidator(),
isPreferencesCompanyWide(), isPreferencesUniquePerLayout(),
isPreferencesOwnedByGroup(), isUseDefaultTemplate(),
isShowPortletAccessDenied(), isShowPortletInactive(),
isActionURLRedirect(), isRestoreCurrentView(), isMaximizeEdit(),
isMaximizeHelp(), isPopUpPrint(), isLayoutCacheable(),
isInstanceable(), isRemoteable(), isScopeable(),
isSinglePageApplication(), getUserPrincipalStrategy(),
isPrivateRequestAttributes(), isPrivateSessionAttributes(),
getAutopropagatedParameters(), isRequiresNamespacedParameters(),
getActionTimeout(), getRenderTimeout(), getRenderWeight(),
isAjaxable(), getHeaderPortalCss(), getHeaderPortletCss(),
getHeaderPortalJavaScript(), getHeaderPortletJavaScript(),
getFooterPortalCss(), getFooterPortletCss(),
getFooterPortalJavaScript(), getFooterPortletJavaScript(),
getCssClassWrapper(), isAddDefaultResource(), getRoles(),
getUnlinkedRoles(), getRoleMappers(), isSystem(), isActive(),
isInclude(), getInitParams(), getExpCache(), getPortletModes(),
getWindowStates(), getSupportedLocales(), getResourceBundle(),
getPortletInfo(), getPortletFilters(), getProcessingEvents(),
getPublishingEvents(), getPublicRenderParameters(),
getPortletApp());
portletImpl.setApplicationTypes(getApplicationTypes());
portletImpl.setId(getId());
portletImpl.setUndeployedPortlet(isUndeployedPortlet());
portletImpl._rootPortletId = _rootPortletId;
return portletImpl;
}
/**
* Compares this portlet to the specified object.
*
* @param portlet the portlet to compare this portlet against
* @return the value 0 if the argument portlet is equal to this portlet; a
* value less than -1 if this portlet is less than the portlet
* argument; and 1 if this portlet is greater than the portlet
* argument
*/
@Override
public int compareTo(Portlet portlet) {
String portletId = getPortletId();
return portletId.compareTo(portlet.getPortletId());
}
/**
* Checks whether this portlet is equal to the specified object.
*
* @param obj the object to compare this portlet against
* @return <code>true</code> if the portlet is equal to the specified object
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Portlet)) {
return false;
}
Portlet portlet = (Portlet)obj;
String portletId = getPortletId();
return portletId.equals(portlet.getPortletId());
}
/**
* Returns the action timeout of the portlet.
*
* @return the action timeout of the portlet
*/
@Override
public int getActionTimeout() {
return _actionTimeout;
}
/**
* Returns <code>true</code> if an action URL for this portlet should cause
* an auto redirect.
*
* @return <code>true</code> if an action URL for this portlet should cause
* an auto redirect
*/
@Override
public boolean getActionURLRedirect() {
return _actionURLRedirect;
}
/**
* Returns <code>true</code> if default resources for the portlet are added
* to a page.
*
* @return <code>true</code> if default resources for the portlet are added
* to a page
*/
@Override
public boolean getAddDefaultResource() {
return _addDefaultResource;
}
/**
* Returns <code>true</code> if the portlet can be displayed via Ajax.
*
* @return <code>true</code> if the portlet can be displayed via Ajax
*/
@Override
public boolean getAjaxable() {
return _ajaxable;
}
/**
* Returns the portlet modes of the portlet.
*
* @return the portlet modes of the portlet
*/
@Override
public Set<String> getAllPortletModes() {
Set<String> allPortletModes = new TreeSet<>();
for (Map.Entry<String, Set<String>> entry : _portletModes.entrySet()) {
Set<String> mimeTypePortletModes = entry.getValue();
for (String portletMode : mimeTypePortletModes) {
allPortletModes.add(portletMode);
}
}
return allPortletModes;
}
/**
* Returns the window states of the portlet.
*
* @return the window states of the portlet
*/
@Override
public Set<String> getAllWindowStates() {
Set<String> allWindowStates = new TreeSet<>();
for (Map.Entry<String, Set<String>> entry : _windowStates.entrySet()) {
Set<String> mimeTypeWindowStates = entry.getValue();
for (String windowState : mimeTypeWindowStates) {
allWindowStates.add(windowState);
}
}
return allWindowStates;
}
/**
* Returns the application types of the portlet.
*
* @return the application types of the portlet
*/
@Override
public Set<ApplicationType> getApplicationTypes() {
return _applicationTypes;
}
/**
* Returns the names of the classes that represent asset types associated
* with the portlet.
*
* @return the names of the classes that represent asset types associated
* with the portlet
*/
@Override
public List<String> getAssetRendererFactoryClasses() {
return _assetRendererFactoryClasses;
}
/**
* Returns the asset type instances of the portlet.
*
* @return the asset type instances of the portlet
*/
@Override
public List<AssetRendererFactory<?>> getAssetRendererFactoryInstances() {
if (_assetRendererFactoryClasses.isEmpty()) {
return null;
}
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
return portletBag.getAssetRendererFactoryInstances();
}
/**
* Returns the names of the classes that represent atom collection adapters
* associated with the portlet.
*
* @return the names of the classes that represent atom collection adapters
* associated with the portlet
*/
@Override
public List<String> getAtomCollectionAdapterClasses() {
return _atomCollectionAdapterClasses;
}
/**
* Returns the atom collection adapter instances of the portlet.
*
* @return the atom collection adapter instances of the portlet
*/
@Override
public List<AtomCollectionAdapter<?>> getAtomCollectionAdapterInstances() {
if (_atomCollectionAdapterClasses.isEmpty()) {
return null;
}
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
return portletBag.getAtomCollectionAdapterInstances();
}
/**
* Returns the names of the parameters that will be automatically propagated
* through the portlet.
*
* @return the names of the parameters that will be automatically propagated
* through the portlet
*/
@Override
public Set<String> getAutopropagatedParameters() {
return _autopropagatedParameters;
}
/**
* Returns <code>true</code> if the portlet is found in a WAR file.
*
* @param portletId the cloned instance portlet ID
* @return a cloned instance of the portlet
*/
@Override
public Portlet getClonedInstance(String portletId) {
Portlet portlet = (Portlet)clone();
portlet.setPortletId(portletId);
return portlet;
}
/**
* Returns the configuration action class of the portlet.
*
* @return the configuration action class of the portlet
*/
@Override
public String getConfigurationActionClass() {
return _configurationActionClass;
}
/**
* Returns the configuration action instance of the portlet.
*
* @return the configuration action instance of the portlet
*/
@Override
public ConfigurationAction getConfigurationActionInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
List<ConfigurationAction> configurationActionInstances =
portletBag.getConfigurationActionInstances();
if (configurationActionInstances.isEmpty()) {
return null;
}
return configurationActionInstances.get(0);
}
/**
* Returns the servlet context name of the portlet.
*
* @return the servlet context name of the portlet
*/
@Override
public String getContextName() {
if (!_portletApp.isWARFile()) {
return PortalUtil.getServletContextName();
}
return _portletApp.getServletContextName();
}
/**
* Returns the servlet context path of the portlet.
*
* @return the servlet context path of the portlet
*/
@Override
public String getContextPath() {
return _portletApp.getContextPath();
}
/**
* Returns the name of the category of the Control Panel where the portlet
* will be shown.
*
* @return the name of the category of the Control Panel where the portlet
* will be shown
*/
@Override
public String getControlPanelEntryCategory() {
return _controlPanelEntryCategory;
}
/**
* Returns the name of the class that will control when the portlet will be
* shown in the Control Panel.
*
* @return the name of the class that will control when the portlet will be
* shown in the Control Panel
*/
@Override
public String getControlPanelEntryClass() {
return _controlPanelEntryClass;
}
/**
* Returns an instance of the class that will control when the portlet will
* be shown in the Control Panel.
*
* @return the instance of the class that will control when the portlet will
* be shown in the Control Panel
*/
@Override
public ControlPanelEntry getControlPanelEntryInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
List<ControlPanelEntry> controlPanelEntryInstances =
portletBag.getControlPanelEntryInstances();
if (controlPanelEntryInstances.isEmpty()) {
return _controlPanelEntry;
}
return controlPanelEntryInstances.get(0);
}
/**
* Returns the relative weight of the portlet with respect to the other
* portlets in the same category of the Control Panel.
*
* @return the relative weight of the portlet with respect to the other
* portlets in the same category of the Control Panel
*/
@Override
public double getControlPanelEntryWeight() {
return _controlPanelEntryWeight;
}
/**
* Returns the name of the CSS class that will be injected in the DIV that
* wraps this portlet.
*
* @return the name of the CSS class that will be injected in the DIV that
* wraps this portlet
*/
@Override
public String getCssClassWrapper() {
return _cssClassWrapper;
}
/**
* Returns the names of the classes that represent custom attribute displays
* associated with the portlet.
*
* @return the names of the classes that represent asset types associated
* with the portlet
*/
@Override
public List<String> getCustomAttributesDisplayClasses() {
return _customAttributesDisplayClasses;
}
/**
* Returns the custom attribute display instances of the portlet.
*
* @return the custom attribute display instances of the portlet
*/
@Override
public List<CustomAttributesDisplay> getCustomAttributesDisplayInstances() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
return portletBag.getCustomAttributesDisplayInstances();
}
/**
* Get the default plugin settings of the portlet.
*
* @return the plugin settings
*/
@Override
public PluginSetting getDefaultPluginSetting() {
return _defaultPluginSetting;
}
/**
* Returns the default preferences of the portlet.
*
* @return the default preferences of the portlet
*/
@Override
public String getDefaultPreferences() {
if (Validator.isNull(_defaultPreferences)) {
return PortletConstants.DEFAULT_PREFERENCES;
}
else {
return _defaultPreferences;
}
}
/**
* Returns the display name of the portlet.
*
* @return the display name of the portlet
*/
@Override
public String getDisplayName() {
return _displayName;
}
/**
* Returns expiration cache of the portlet.
*
* @return expiration cache of the portlet
*/
@Override
public Integer getExpCache() {
return _expCache;
}
/**
* Returns the Facebook integration method of the portlet.
*
* @return the Facebook integration method of the portlet
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
@Override
public String getFacebookIntegration() {
return _facebookIntegration;
}
/**
* Returns a list of CSS files that will be referenced from the page's
* footer relative to the portal's context path.
*
* @return a list of CSS files that will be referenced from the page's
* footer relative to the portal's context path
*/
@Override
public List<String> getFooterPortalCss() {
return _footerPortalCss;
}
/**
* Returns a list of JavaScript files that will be referenced from the
* page's footer relative to the portal's context path.
*
* @return a list of JavaScript files that will be referenced from the
* page's footer relative to the portal's context path
*/
@Override
public List<String> getFooterPortalJavaScript() {
return _footerPortalJavaScript;
}
/**
* Returns a list of CSS files that will be referenced from the page's
* footer relative to the portlet's context path.
*
* @return a list of CSS files that will be referenced from the page's
* footer relative to the portlet's context path
*/
@Override
public List<String> getFooterPortletCss() {
return _footerPortletCss;
}
/**
* Returns a list of JavaScript files that will be referenced from the
* page's footer relative to the portlet's context path.
*
* @return a list of JavaScript files that will be referenced from the
* page's footer relative to the portlet's context path
*/
@Override
public List<String> getFooterPortletJavaScript() {
return _footerPortletJavaScript;
}
/**
* Returns the name of the friendly URL mapper class of the portlet.
*
* @return the name of the friendly URL mapper class of the portlet
*/
@Override
public String getFriendlyURLMapperClass() {
return _friendlyURLMapperClass;
}
/**
* Returns the friendly URL mapper instance of the portlet.
*
* @return the friendly URL mapper instance of the portlet
*/
@Override
public FriendlyURLMapper getFriendlyURLMapperInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
if (portletBag == null) {
return null;
}
FriendlyURLMapperTracker friendlyURLMapperTracker =
portletBag.getFriendlyURLMapperTracker();
return friendlyURLMapperTracker.getFriendlyURLMapper();
}
/**
* Returns the name of the friendly URL mapping of the portlet.
*
* @return the name of the friendly URL mapping of the portlet
*/
@Override
public String getFriendlyURLMapping() {
if (Validator.isNotNull(_friendlyURLMapping)) {
return _friendlyURLMapping;
}
FriendlyURLMapper friendlyURLMapperInstance =
getFriendlyURLMapperInstance();
if (friendlyURLMapperInstance == null) {
return null;
}
return friendlyURLMapperInstance.getMapping();
}
/**
* Returns the class loader resource path to the friendly URL routes of the
* portlet.
*
* @return the class loader resource path to the friendly URL routes of the
* portlet
*/
@Override
public String getFriendlyURLRoutes() {
return _friendlyURLRoutes;
}
/**
* Returns a list of CSS files that will be referenced from the page's
* header relative to the portal's context path.
*
* @return a list of CSS files that will be referenced from the page's
* header relative to the portal's context path
*/
@Override
public List<String> getHeaderPortalCss() {
return _headerPortalCss;
}
/**
* Returns a list of JavaScript files that will be referenced from the
* page's header relative to the portal's context path.
*
* @return a list of JavaScript files that will be referenced from the
* page's header relative to the portal's context path
*/
@Override
public List<String> getHeaderPortalJavaScript() {
return _headerPortalJavaScript;
}
/**
* Returns a list of CSS files that will be referenced from the page's
* header relative to the portlet's context path.
*
* @return a list of CSS files that will be referenced from the page's
* header relative to the portlet's context path
*/
@Override
public List<String> getHeaderPortletCss() {
return _headerPortletCss;
}
/**
* Returns a list of JavaScript files that will be referenced from the
* page's header relative to the portlet's context path.
*
* @return a list of JavaScript files that will be referenced from the
* page's header relative to the portlet's context path
*/
@Override
public List<String> getHeaderPortletJavaScript() {
return _headerPortletJavaScript;
}
/**
* Returns the icon of the portlet.
*
* @return the icon of the portlet
*/
@Override
public String getIcon() {
return _icon;
}
/**
* Returns <code>true</code> to include the portlet and make it available to
* be made active.
*
* @return <code>true</code> to include the portlet and make it available to
* be made active
*/
@Override
public boolean getInclude() {
return _include;
}
/**
* Returns the names of the classes that represent indexers associated with
* the portlet.
*
* @return the names of the classes that represent indexers associated with
* the portlet
*/
@Override
public List<String> getIndexerClasses() {
return _indexerClasses;
}
/**
* Returns the indexer instances of the portlet.
*
* @return the indexer instances of the portlet
*/
@Override
public List<Indexer<?>> getIndexerInstances() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
return portletBag.getIndexerInstances();
}
/**
* Returns the init parameters of the portlet.
*
* @return init parameters of the portlet
*/
@Override
public Map<String, String> getInitParams() {
return _initParams;
}
/**
* Returns <code>true</code> if the portlet can be added multiple times to a
* layout.
*
* @return <code>true</code> if the portlet can be added multiple times to a
* layout
*/
@Override
public boolean getInstanceable() {
return _instanceable;
}
/**
* Returns the instance ID of the portlet.
*
* @return the instance ID of the portlet
*/
@Override
public String getInstanceId() {
return PortletConstants.getInstanceId(getPortletId());
}
/**
* Returns <code>true</code> to allow the portlet to be cached within the
* layout.
*
* @return <code>true</code> if the portlet can be cached within the layout
*/
@Override
public boolean getLayoutCacheable() {
return _layoutCacheable;
}
/**
* Returns <code>true</code> if the portlet goes into the maximized state
* when the user goes into the edit mode.
*
* @return <code>true</code> if the portlet goes into the maximized state
* when the user goes into the edit mode
*/
@Override
public boolean getMaximizeEdit() {
return _maximizeEdit;
}
/**
* Returns <code>true</code> if the portlet goes into the maximized state
* when the user goes into the help mode.
*
* @return <code>true</code> if the portlet goes into the maximized state
* when the user goes into the help mode
*/
@Override
public boolean getMaximizeHelp() {
return _maximizeHelp;
}
/**
* Returns the name of the open search class of the portlet.
*
* @return the name of the open search class of the portlet
*/
@Override
public String getOpenSearchClass() {
return _openSearchClass;
}
/**
* Returns the indexer instance of the portlet.
*
* @return the indexer instance of the portlet
*/
@Override
public OpenSearch getOpenSearchInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
List<OpenSearch> openSearchInstances =
portletBag.getOpenSearchInstances();
if (openSearchInstances.isEmpty()) {
return null;
}
return openSearchInstances.get(0);
}
/**
* Returns the parent struts path of the portlet.
*
* @return the parent struts path of the portlet.
*/
@Override
public String getParentStrutsPath() {
return _parentStrutsPath;
}
/**
* Returns the name of the permission propagator class of the portlet.
*
* @return the name of the permission propagator class of the portlet
*/
@Override
public String getPermissionPropagatorClass() {
return _permissionPropagatorClass;
}
/**
* Returns the permission propagator instance of the portlet.
*
* @return the permission propagator instance of the portlet
*/
@Override
public PermissionPropagator getPermissionPropagatorInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
List<PermissionPropagator> permissionPropagatorInstances =
portletBag.getPermissionPropagatorInstances();
if (permissionPropagatorInstances.isEmpty()) {
return null;
}
return permissionPropagatorInstances.get(0);
}
/**
* Returns the plugin ID of the portlet.
*
* @return the plugin ID of the portlet
*/
@Override
public String getPluginId() {
return getRootPortletId();
}
/**
* Returns this portlet's plugin package.
*
* @return this portlet's plugin package
*/
@Override
public PluginPackage getPluginPackage() {
return _pluginPackage;
}
/**
* Returns the plugin type of the portlet.
*
* @return the plugin type of the portlet
*/
@Override
public String getPluginType() {
return Plugin.TYPE_PORTLET;
}
/**
* Returns the name of the poller processor class of the portlet.
*
* @return the name of the poller processor class of the portlet
*/
@Override
public String getPollerProcessorClass() {
return _pollerProcessorClass;
}
/**
* Returns the poller processor instance of the portlet.
*
* @return the poller processor instance of the portlet
*/
@Override
public PollerProcessor getPollerProcessorInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
List<PollerProcessor> pollerProcessorInstances =
portletBag.getPollerProcessorInstances();
if (pollerProcessorInstances.isEmpty()) {
return null;
}
return pollerProcessorInstances.get(0);
}
/**
* Returns the name of the POP message listener class of the portlet.
*
* @return the name of the POP message listener class of the portlet
*/
@Override
public String getPopMessageListenerClass() {
return _popMessageListenerClass;
}
/**
* Returns the POP message listener instance of the portlet.
*
* @return the POP message listener instance of the portlet
*/
@Override
public MessageListener getPopMessageListenerInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
List<MessageListener> popMessageListenerInstances =
portletBag.getPopMessageListenerInstances();
if (popMessageListenerInstances.isEmpty()) {
return null;
}
return popMessageListenerInstances.get(0);
}
/**
* Returns <code>true</code> if the portlet goes into the pop up state when
* the user goes into the print mode.
*
* @return <code>true</code> if the portlet goes into the pop up state when
* the user goes into the print mode
*/
@Override
public boolean getPopUpPrint() {
return _popUpPrint;
}
/**
* Returns this portlet's application.
*
* @return this portlet's application
*/
@Override
public PortletApp getPortletApp() {
return _portletApp;
}
/**
* Returns the name of the portlet class of the portlet.
*
* @return the name of the portlet class of the portlet
*/
@Override
public String getPortletClass() {
return _portletClass;
}
/**
* Returns the name of the portlet data handler class of the portlet.
*
* @return the name of the portlet data handler class of the portlet
*/
@Override
public String getPortletDataHandlerClass() {
return _portletDataHandlerClass;
}
/**
* Returns the portlet data handler instance of the portlet.
*
* @return the portlet data handler instance of the portlet
*/
@Override
public PortletDataHandler getPortletDataHandlerInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
if (portletBag == null) {
_log.error("No portlet bag for " + toString());
throw new IllegalStateException("No portlet bag for " + toString());
}
List<PortletDataHandler> portletDataHandlerInstances =
portletBag.getPortletDataHandlerInstances();
if (portletDataHandlerInstances.isEmpty()) {
return null;
}
return portletDataHandlerInstances.get(0);
}
/**
* Returns the filters of the portlet.
*
* @return filters of the portlet
*/
@Override
public Map<String, PortletFilter> getPortletFilters() {
return _portletFilters;
}
/**
* Returns the portlet info of the portlet.
*
* @return portlet info of the portlet
*/
@Override
public PortletInfo getPortletInfo() {
return _portletInfo;
}
/**
* Returns the name of the portlet layout listener class of the portlet.
*
* @return the name of the portlet layout listener class of the portlet
*/
@Override
public String getPortletLayoutListenerClass() {
return _portletLayoutListenerClass;
}
/**
* Returns the portlet layout listener instance of the portlet.
*
* @return the portlet layout listener instance of the portlet
*/
@Override
public PortletLayoutListener getPortletLayoutListenerInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
if (portletBag == null) {
return null;
}
List<PortletLayoutListener> portletLayoutListenerInstances =
portletBag.getPortletLayoutListenerInstances();
if (portletLayoutListenerInstances.isEmpty()) {
return null;
}
return portletLayoutListenerInstances.get(0);
}
/**
* Returns the portlet modes of the portlet.
*
* @return portlet modes of the portlet
*/
@Override
public Map<String, Set<String>> getPortletModes() {
return _portletModes;
}
/**
* Returns the name of the portlet.
*
* @return the display name of the portlet
*/
@Override
public String getPortletName() {
return _portletName;
}
/**
* Returns the name of the portlet URL class of the portlet.
*
* @return the name of the portlet URL class of the portlet
*/
@Override
public String getPortletURLClass() {
return _portletURLClass;
}
/**
* Returns <code>true</code> if preferences are shared across the entire
* company.
*
* @return <code>true</code> if preferences are shared across the entire
* company
*/
@Override
public boolean getPreferencesCompanyWide() {
return _preferencesCompanyWide;
}
/**
* Returns <code>true</code> if preferences are owned by the group when the
* portlet is shown in a group layout. Returns <code>false</code> if
* preferences are owned by the user at all times.
*
* @return <code>true</code> if preferences are owned by the group when the
* portlet is shown in a group layout; <code>false</code> if
* preferences are owned by the user at all times.
*/
@Override
public boolean getPreferencesOwnedByGroup() {
return _preferencesOwnedByGroup;
}
/**
* Returns <code>true</code> if preferences are unique per layout.
*
* @return <code>true</code> if preferences are unique per layout
*/
@Override
public boolean getPreferencesUniquePerLayout() {
return _preferencesUniquePerLayout;
}
/**
* Returns the name of the preferences validator class of the portlet.
*
* @return the name of the preferences validator class of the portlet
*/
@Override
public String getPreferencesValidator() {
return _preferencesValidator;
}
/**
* Returns <code>true</code> if the portlet does not share request
* attributes with the portal or portlets from another WAR.
*
* @return <code>true</code> if the portlet does not share request
* attributes with the portal or portlets from another WAR
*/
@Override
public boolean getPrivateRequestAttributes() {
return _privateRequestAttributes;
}
/**
* Returns <code>true</code> if the portlet does not share session
* attributes with the portal.
*
* @return <code>true</code> if the portlet does not share session
* attributes with the portal
*/
@Override
public boolean getPrivateSessionAttributes() {
return _privateSessionAttributes;
}
/**
* Returns the processing event from a namespace URI and a local part.
*
* @param uri the namespace URI
* @param localPart the local part
* @return the processing event from a namespace URI and a local part
*/
@Override
public QName getProcessingEvent(String uri, String localPart) {
return _processingEventsByQName.get(
PortletQNameUtil.getKey(uri, localPart));
}
/**
* Returns the processing events of the portlet.
*
* @return the processing events of the portlet
*/
@Override
public Set<QName> getProcessingEvents() {
return _processingEvents;
}
/**
* Returns the public render parameter from an identifier.
*
* @param identifier the identifier
* @return the public render parameter from an identifier
*/
@Override
public PublicRenderParameter getPublicRenderParameter(String identifier) {
return _publicRenderParametersByIdentifier.get(identifier);
}
/**
* Returns the spublic render parameter from a namespace URI and a local
* part.
*
* @param uri the namespace URI
* @param localPart the local part
* @return the spublic render parameter from a namespace URI and a local
* part
*/
@Override
public PublicRenderParameter getPublicRenderParameter(
String uri, String localPart) {
return _publicRenderParametersByQName.get(
PortletQNameUtil.getKey(uri, localPart));
}
/**
* Returns the public render parameters of the portlet.
*
* @return the public render parameters of the portlet
*/
@Override
public Set<PublicRenderParameter> getPublicRenderParameters() {
return _publicRenderParameters;
}
/**
* Returns the publishing events of the portlet.
*
* @return the publishing events of the portlet
*/
@Override
public Set<QName> getPublishingEvents() {
return _publishingEvents;
}
/**
* Returns <code>true</code> if the portlet is ready to be used.
*
* @return <code>true</code> if the portlet is ready to be used
*/
@Override
public boolean getReady() {
return isReady();
}
/**
* Returns <code>true</code> if the portlet supports remoting.
*
* @return <code>true</code> if the portlet supports remoting
*/
@Override
public boolean getRemoteable() {
return _remoteable;
}
/**
* Returns the render timeout of the portlet.
*
* @return the render timeout of the portlet
*/
@Override
public int getRenderTimeout() {
return _renderTimeout;
}
/**
* Returns the render weight of the portlet.
*
* @return the render weight of the portlet
*/
@Override
public int getRenderWeight() {
return _renderWeight;
}
/**
* Returns the resource bundle of the portlet.
*
* @return resource bundle of the portlet
*/
@Override
public String getResourceBundle() {
return _resourceBundle;
}
/**
* Returns <code>true</code> if the portlet restores to the current view
* from the maximized state.
*
* @return <code>true</code> if the portlet restores to the current view
* from the maximized state
*/
@Override
public boolean getRestoreCurrentView() {
return _restoreCurrentView;
}
/**
* Returns the role mappers of the portlet.
*
* @return role mappers of the portlet
*/
@Override
public Map<String, String> getRoleMappers() {
return _roleMappers;
}
/**
* Returns an array of required roles of the portlet.
*
* @return an array of required roles of the portlet
*/
@Override
public String[] getRolesArray() {
return _rolesArray;
}
/**
* Returns the root portlet of this portlet instance.
*
* @return the root portlet of this portlet instance
*/
@Override
public Portlet getRootPortlet() {
return _rootPortlet;
}
/**
* Returns the root portlet ID of the portlet.
*
* @return the root portlet ID of the portlet
*/
@Override
public String getRootPortletId() {
return _rootPortletId;
}
/**
* Returns the scheduler entries of the portlet.
*
* @return the scheduler entries of the portlet
*/
@Override
public List<SchedulerEntry> getSchedulerEntries() {
return _schedulerEntries;
}
/**
* Returns <code>true</code> if the portlet supports scoping of data.
*
* @return <code>true</code> if the portlet supports scoping of data
*/
@Override
public boolean getScopeable() {
return _scopeable;
}
/**
* Returns <code>true</code> if users are shown that they do not have access
* to the portlet.
*
* @return <code>true</code> if users are shown that they do not have access
* to the portlet
*/
@Override
public boolean getShowPortletAccessDenied() {
return _showPortletAccessDenied;
}
/**
* Returns <code>true</code> if users are shown that the portlet is
* inactive.
*
* @return <code>true</code> if users are shown that the portlet is inactive
*/
@Override
public boolean getShowPortletInactive() {
return _showPortletInactive;
}
/**
* Returns <code>true</code> if the portlet uses Single Page Application.
*
* @return <code>true</code> if the portlet uses Single Page Application
*/
@Override
public boolean getSinglePageApplication() {
return _singlePageApplication;
}
/**
* Returns the names of the classes that represent social activity
* interpreters associated with the portlet.
*
* @return the names of the classes that represent social activity
* interpreters associated with the portlet
*/
@Override
public List<String> getSocialActivityInterpreterClasses() {
return _socialActivityInterpreterClasses;
}
/**
* Returns the social activity interpreter instances of the portlet.
*
* @return the social activity interpreter instances of the portlet
*/
@Override
public List<SocialActivityInterpreter>
getSocialActivityInterpreterInstances() {
if (_socialActivityInterpreterClasses.isEmpty()) {
return null;
}
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
return portletBag.getSocialActivityInterpreterInstances();
}
/**
* Returns the name of the social request interpreter class of the portlet.
*
* @return the name of the social request interpreter class of the portlet
*/
@Override
public String getSocialRequestInterpreterClass() {
return _socialRequestInterpreterClass;
}
/**
* Returns the name of the social request interpreter instance of the
* portlet.
*
* @return the name of the social request interpreter instance of the
* portlet
*/
@Override
public SocialRequestInterpreter getSocialRequestInterpreterInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
List<SocialRequestInterpreter> socialRequestInterpreterInstances =
portletBag.getSocialRequestInterpreterInstances();
if (socialRequestInterpreterInstances.isEmpty()) {
return null;
}
return socialRequestInterpreterInstances.get(0);
}
/**
* Returns the names of the classes that represent staged model data
* handlers associated with the portlet.
*
* @return the names of the classes that represent staged model data
* handlers associated with the portlet
*/
@Override
public List<String> getStagedModelDataHandlerClasses() {
return _stagedModelDataHandlerClasses;
}
/**
* Returns the staged model data handler instances of the portlet.
*
* @return the staged model data handler instances of the portlet
*/
@Override
public List<StagedModelDataHandler<?>>
getStagedModelDataHandlerInstances() {
if (_stagedModelDataHandlerClasses.isEmpty()) {
return null;
}
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
return portletBag.getStagedModelDataHandlerInstances();
}
/**
* Returns <code>true</code> if the portlet is a static portlet that is
* cannot be moved.
*
* @return <code>true</code> if the portlet is a static portlet that is
* cannot be moved
*/
@Override
public boolean getStatic() {
return _staticPortlet;
}
/**
* Returns <code>true</code> if the portlet is a static portlet at the end
* of a list of portlets.
*
* @return <code>true</code> if the portlet is a static portlet at the end
* of a list of portlets
*/
@Override
public boolean getStaticEnd() {
return !_staticPortletStart;
}
/**
* Returns the path for static resources served by this portlet.
*
* @return the path for static resources served by this portlet
*/
@Override
public String getStaticResourcePath() {
String proxyPath = PortalUtil.getPathProxy();
String virtualPath = getVirtualPath();
if (Validator.isNotNull(virtualPath)) {
return proxyPath.concat(virtualPath);
}
String contextPath = getContextPath();
if (!_portletApp.isWARFile()) {
return contextPath;
}
return proxyPath.concat(contextPath);
}
/**
* Returns <code>true</code> if the portlet is a static portlet at the start
* of a list of portlets.
*
* @return <code>true</code> if the portlet is a static portlet at the start
* of a list of portlets
*/
@Override
public boolean getStaticStart() {
return _staticPortletStart;
}
/**
* Returns the struts path of the portlet.
*
* @return the struts path of the portlet
*/
@Override
public String getStrutsPath() {
return _strutsPath;
}
/**
* Returns the supported locales of the portlet.
*
* @return the supported locales of the portlet
*/
@Override
public Set<String> getSupportedLocales() {
return _supportedLocales;
}
/**
* Returns <code>true</code> if the portlet is a system portlet that a user
* cannot manually add to their page.
*
* @return <code>true</code> if the portlet is a system portlet that a user
* cannot manually add to their page
*/
@Override
public boolean getSystem() {
return _system;
}
/**
* Returns the name of the template handler class of the portlet.
*
* @return the name of the template handler class of the portlet
*/
@Override
public String getTemplateHandlerClass() {
return _templateHandlerClass;
}
/**
* Returns the template handler instance of the portlet.
*
* @return the template handler instance of the portlet
*/
@Override
public TemplateHandler getTemplateHandlerInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
List<TemplateHandler> templateHandlerInstances =
portletBag.getTemplateHandlerInstances();
if (templateHandlerInstances.isEmpty()) {
return null;
}
return templateHandlerInstances.get(0);
}
/**
* Returns the timestamp of the portlet.
*
* @return the timestamp of the portlet
*/
@Override
public long getTimestamp() {
if (_timestamp == null) {
PortletApp portletApp = getPortletApp();
ServletContext servletContext = portletApp.getServletContext();
_timestamp = ServletContextUtil.getLastModified(
servletContext, StringPool.SLASH, true);
}
return _timestamp;
}
/**
* Returns the names of the classes that represent trash handlers associated
* with the portlet.
*
* @return the names of the classes that represent trash handlers associated
* with the portlet
*/
@Override
public List<String> getTrashHandlerClasses() {
return _trashHandlerClasses;
}
/**
* Returns the trash handler instances of the portlet.
*
* @return the trash handler instances of the portlet
*/
@Override
public List<TrashHandler> getTrashHandlerInstances() {
if (_trashHandlerClasses.isEmpty()) {
return null;
}
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
return portletBag.getTrashHandlerInstances();
}
/**
* Returns <code>true</code> if the portlet is an undeployed portlet.
*
* @return <code>true</code> if the portlet is a placeholder of an
* undeployed portlet
*/
@Override
public boolean getUndeployedPortlet() {
return _undeployedPortlet;
}
/**
* Returns the unlinked roles of the portlet.
*
* @return unlinked roles of the portlet
*/
@Override
public Set<String> getUnlinkedRoles() {
return _unlinkedRoles;
}
/**
* Returns the name of the URL encoder class of the portlet.
*
* @return the name of the URL encoder class of the portlet
*/
@Override
public String getURLEncoderClass() {
return _urlEncoderClass;
}
/**
* Returns the URL encoder instance of the portlet.
*
* @return the URL encoder instance of the portlet
*/
@Override
public URLEncoder getURLEncoderInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
List<URLEncoder> urlEncoderInstances =
portletBag.getURLEncoderInstances();
if (urlEncoderInstances.isEmpty()) {
return null;
}
return urlEncoderInstances.get(0);
}
/**
* Returns <code>true</code> if the portlet uses the default template.
*
* @return <code>true</code> if the portlet uses the default template
*/
@Override
public boolean getUseDefaultTemplate() {
return _useDefaultTemplate;
}
/**
* Returns the user ID of the portlet. This only applies when the portlet is
* added by a user in a customizable layout.
*
* @return the user ID of the portlet
*/
@Override
public long getUserId() {
return PortletConstants.getUserId(getPortletId());
}
/**
* Returns the class loader resource path to the use notification
* definitions of the portlet.
*
* @return the class loader resource path to the use notification
* definitions of the portlet
*/
@Override
public String getUserNotificationDefinitions() {
return _userNotificationDefinitions;
}
/**
* Returns the names of the classes that represent user notification
* handlers associated with the portlet.
*
* @return the names of the classes that represent user notification
* handlers associated with the portlet
*/
@Override
public List<String> getUserNotificationHandlerClasses() {
return _userNotificationHandlerClasses;
}
/**
* Returns the user notification handler instances of the portlet.
*
* @return the user notification handler instances of the portlet
*/
@Override
public List<UserNotificationHandler> getUserNotificationHandlerInstances() {
if (_userNotificationHandlerClasses.isEmpty()) {
return null;
}
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
return portletBag.getUserNotificationHandlerInstances();
}
/**
* Returns the user principal strategy of the portlet.
*
* @return the user principal strategy of the portlet
*/
@Override
public String getUserPrincipalStrategy() {
return _userPrincipalStrategy;
}
/**
* Returns the virtual path of the portlet.
*
* @return the virtual path of the portlet
*/
@Override
public String getVirtualPath() {
return _virtualPath;
}
/**
* Returns the name of the WebDAV storage class of the portlet.
*
* @return the name of the WebDAV storage class of the portlet
*/
@Override
public String getWebDAVStorageClass() {
return _webDAVStorageClass;
}
/**
* Returns the name of the WebDAV storage instance of the portlet.
*
* @return the name of the WebDAV storage instance of the portlet
*/
@Override
public WebDAVStorage getWebDAVStorageInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
List<WebDAVStorage> webDAVStorageInstances =
portletBag.getWebDAVStorageInstances();
if (webDAVStorageInstances.isEmpty()) {
return null;
}
return webDAVStorageInstances.get(0);
}
/**
* Returns the name of the WebDAV storage token of the portlet.
*
* @return the name of the WebDAV storage token of the portlet
*/
@Override
public String getWebDAVStorageToken() {
return _webDAVStorageToken;
}
/**
* Returns the window states of the portlet.
*
* @return window states of the portlet
*/
@Override
public Map<String, Set<String>> getWindowStates() {
return _windowStates;
}
/**
* Returns the names of the classes that represent workflow handlers
* associated with the portlet.
*
* @return the names of the classes that represent workflow handlers
* associated with the portlet
*/
@Override
public List<String> getWorkflowHandlerClasses() {
return _workflowHandlerClasses;
}
/**
* Returns the workflow handler instances of the portlet.
*
* @return the workflow handler instances of the portlet
*/
@Override
public List<WorkflowHandler<?>> getWorkflowHandlerInstances() {
if (_workflowHandlerClasses.isEmpty()) {
return null;
}
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
return portletBag.getWorkflowHandlerInstances();
}
/**
* Returns the name of the XML-RPC method class of the portlet.
*
* @return the name of the XML-RPC method class of the portlet
*/
@Override
public String getXmlRpcMethodClass() {
return _xmlRpcMethodClass;
}
/**
* Returns the name of the XML-RPC method instance of the portlet.
*
* @return the name of the XML-RPC method instance of the portlet
*/
@Override
public Method getXmlRpcMethodInstance() {
PortletBag portletBag = PortletBagPool.get(getRootPortletId());
List<Method> xmlRpcMethodInstances =
portletBag.getXmlRpcMethodInstances();
if (xmlRpcMethodInstances.isEmpty()) {
return null;
}
return xmlRpcMethodInstances.get(0);
}
/**
* Returns <code>true</code> if the user has the permission to add the
* portlet to a layout.
*
* @param userId the primary key of the user
* @return <code>true</code> if the user has the permission to add the
* portlet to a layout
*/
@Override
public boolean hasAddPortletPermission(long userId) {
PermissionChecker permissionChecker =
PermissionThreadLocal.getPermissionChecker();
try {
if ((permissionChecker == null) ||
(permissionChecker.getUserId() != userId)) {
User user = UserLocalServiceUtil.getUser(userId);
permissionChecker = PermissionCheckerFactoryUtil.create(user);
}
if (PortletPermissionUtil.contains(
permissionChecker, getRootPortletId(),
ActionKeys.ADD_TO_PAGE)) {
return true;
}
}
catch (Exception e) {
_log.error(e, e);
}
return false;
}
@Override
public boolean hasFooterPortalCss() {
return !_footerPortalCss.isEmpty();
}
@Override
public boolean hasFooterPortalJavaScript() {
return !_footerPortalJavaScript.isEmpty();
}
@Override
public boolean hasFooterPortletCss() {
return !_footerPortletCss.isEmpty();
}
@Override
public boolean hasFooterPortletJavaScript() {
return !_footerPortletJavaScript.isEmpty();
}
@Override
public int hashCode() {
String portletId = getPortletId();
return portletId.hashCode();
}
@Override
public boolean hasHeaderPortalCss() {
return !_headerPortalCss.isEmpty();
}
@Override
public boolean hasHeaderPortalJavaScript() {
return !_headerPortalJavaScript.isEmpty();
}
@Override
public boolean hasHeaderPortletCss() {
return !_headerPortletCss.isEmpty();
}
@Override
public boolean hasHeaderPortletJavaScript() {
return !_headerPortletJavaScript.isEmpty();
}
/**
* Returns <code>true</code> if the portlet supports more than one mime
* type.
*
* @return <code>true</code> if the portlet supports more than one mime type
*/
@Override
public boolean hasMultipleMimeTypes() {
if (_portletModes.size() > 1) {
return true;
}
else {
return false;
}
}
/**
* Returns <code>true</code> if the portlet supports the specified mime type
* and portlet mode.
*
* @param mimeType the mime type
* @param portletMode the portlet mode
* @return <code>true</code> if the portlet supports the specified mime type
* and portlet mode
*/
@Override
public boolean hasPortletMode(String mimeType, PortletMode portletMode) {
if (mimeType == null) {
mimeType = ContentTypes.TEXT_HTML;
}
Set<String> mimeTypePortletModes = _portletModes.get(mimeType);
if (mimeTypePortletModes == null) {
return false;
}
if (mimeTypePortletModes.contains(portletMode.toString())) {
return true;
}
else {
return false;
}
}
/**
* Returns <code>true</code> if the portlet has a role with the specified
* name.
*
* @param roleName the role name
* @return <code>true</code> if the portlet has a role with the specified
* name
*/
@Override
public boolean hasRoleWithName(String roleName) {
if (ArrayUtil.isEmpty(_rolesArray)) {
return false;
}
for (String curRoleName : _rolesArray) {
if (StringUtil.equalsIgnoreCase(curRoleName, roleName)) {
return true;
}
}
return false;
}
/**
* Returns <code>true</code> if the portlet supports the specified mime type
* and window state.
*
* @param mimeType the mime type
* @param windowState the window state
* @return <code>true</code> if the portlet supports the specified mime type
* and window state
*/
@Override
public boolean hasWindowState(String mimeType, WindowState windowState) {
if (mimeType == null) {
mimeType = ContentTypes.TEXT_HTML;
}
Set<String> mimeTypeWindowStates = _windowStates.get(mimeType);
if (mimeTypeWindowStates == null) {
return false;
}
if (mimeTypeWindowStates.contains(windowState.toString())) {
return true;
}
else {
return false;
}
}
/**
* Returns <code>true</code> if an action URL for this portlet should cause
* an auto redirect.
*
* @return <code>true</code> if an action URL for this portlet should cause
* an auto redirect
*/
@Override
public boolean isActionURLRedirect() {
return _actionURLRedirect;
}
/**
* Returns <code>true</code> if default resources for the portlet are added
* to a page.
*
* @return <code>true</code> if default resources for the portlet are added
* to a page
*/
@Override
public boolean isAddDefaultResource() {
return _addDefaultResource;
}
/**
* Returns <code>true</code> if the portlet can be displayed via Ajax.
*
* @return <code>true</code> if the portlet can be displayed via Ajax
*/
@Override
public boolean isAjaxable() {
return _ajaxable;
}
@Override
public boolean isFullPageDisplayable() {
return _applicationTypes.contains(
ApplicationType.FULL_PAGE_APPLICATION);
}
/**
* Returns <code>true</code> to include the portlet and make it available to
* be made active.
*
* @return <code>true</code> to include the portlet and make it available to
* be made active
*/
@Override
public boolean isInclude() {
return _include;
}
/**
* Returns <code>true</code> if the portlet can be added multiple times to a
* layout.
*
* @return <code>true</code> if the portlet can be added multiple times to a
* layout
*/
@Override
public boolean isInstanceable() {
return _instanceable;
}
/**
* Returns <code>true</code> to allow the portlet to be cached within the
* layout.
*
* @return <code>true</code> if the portlet can be cached within the layout
*/
@Override
public boolean isLayoutCacheable() {
return _layoutCacheable;
}
/**
* Returns <code>true</code> if the portlet goes into the maximized state
* when the user goes into the edit mode.
*
* @return <code>true</code> if the portlet goes into the maximized state
* when the user goes into the edit mode
*/
@Override
public boolean isMaximizeEdit() {
return _maximizeEdit;
}
/**
* Returns <code>true</code> if the portlet goes into the maximized state
* when the user goes into the help mode.
*
* @return <code>true</code> if the portlet goes into the maximized state
* when the user goes into the help mode
*/
@Override
public boolean isMaximizeHelp() {
return _maximizeHelp;
}
/**
* Returns <code>true</code> if the portlet goes into the pop up state when
* the user goes into the print mode.
*
* @return <code>true</code> if the portlet goes into the pop up state when
* the user goes into the print mode
*/
@Override
public boolean isPopUpPrint() {
return _popUpPrint;
}
/**
* Returns <code>true</code> if preferences are shared across the entire
* company.
*
* @return <code>true</code> if preferences are shared across the entire
* company
*/
@Override
public boolean isPreferencesCompanyWide() {
return _preferencesCompanyWide;
}
/**
* Returns <code>true</code> if preferences are owned by the group when the
* portlet is shown in a group layout. Returns <code>false</code> if
* preferences are owned by the user at all times.
*
* @return <code>true</code> if preferences are owned by the group when the
* portlet is shown in a group layout; <code>false</code> if
* preferences are owned by the user at all times.
*/
@Override
public boolean isPreferencesOwnedByGroup() {
return _preferencesOwnedByGroup;
}
/**
* Returns <code>true</code> if preferences are unique per layout.
*
* @return <code>true</code> if preferences are unique per layout
*/
@Override
public boolean isPreferencesUniquePerLayout() {
return _preferencesUniquePerLayout;
}
/**
* Returns <code>true</code> if the portlet does not share request
* attributes with the portal or portlets from another WAR.
*
* @return <code>true</code> if the portlet does not share request
* attributes with the portal or portlets from another WAR
*/
@Override
public boolean isPrivateRequestAttributes() {
return _privateRequestAttributes;
}
/**
* Returns <code>true</code> if the portlet does not share session
* attributes with the portal.
*
* @return <code>true</code> if the portlet does not share session
* attributes with the portal
*/
@Override
public boolean isPrivateSessionAttributes() {
return _privateSessionAttributes;
}
/**
* Returns <code>true</code> if the portlet is ready to be used.
*
* @return <code>true</code> if the portlet is ready to be used
*/
@Override
public boolean isReady() {
Readiness readiness = _readinessMap.get(getRootPortletId());
if (readiness == null) {
return true;
}
else {
return readiness._ready;
}
}
/**
* Returns <code>true</code> if the portlet supports remoting.
*
* @return <code>true</code> if the portlet supports remoting
*/
@Override
public boolean isRemoteable() {
return _remoteable;
}
/**
* Returns <code>true</code> if the portlet will only process namespaced
* parameters.
*
* @return <code>true</code> if the portlet will only process namespaced
* parameters
*/
@Override
public boolean isRequiresNamespacedParameters() {
return _requiresNamespacedParameters;
}
/**
* Returns <code>true</code> if the portlet restores to the current view
* from the maximized state.
*
* @return <code>true</code> if the portlet restores to the current view
* from the maximized state
*/
@Override
public boolean isRestoreCurrentView() {
return _restoreCurrentView;
}
/**
* Returns <code>true</code> if the portlet supports scoping of data.
*
* @return <code>true</code> if the portlet supports scoping of data
*/
@Override
public boolean isScopeable() {
return _scopeable;
}
/**
* Returns <code>true</code> if users are shown that they do not have access
* to the portlet.
*
* @return <code>true</code> if users are shown that they do not have access
* to the portlet
*/
@Override
public boolean isShowPortletAccessDenied() {
return _showPortletAccessDenied;
}
/**
* Returns <code>true</code> if users are shown that the portlet is
* inactive.
*
* @return <code>true</code> if users are shown that the portlet is inactive
*/
@Override
public boolean isShowPortletInactive() {
return _showPortletInactive;
}
/**
* Returns <code>true</code> if the portlet uses Single Page Application.
*
* @return <code>true</code> if the portlet uses Single Page Application
*/
@Override
public boolean isSinglePageApplication() {
return _singlePageApplication;
}
/**
* Returns <code>true</code> if the portlet is a static portlet that is
* cannot be moved.
*
* @return <code>true</code> if the portlet is a static portlet that is
* cannot be moved
*/
@Override
public boolean isStatic() {
return _staticPortlet;
}
/**
* Returns <code>true</code> if the portlet is a static portlet at the end
* of a list of portlets.
*
* @return <code>true</code> if the portlet is a static portlet at the end
* of a list of portlets
*/
@Override
public boolean isStaticEnd() {
return !_staticPortletStart;
}
/**
* Returns <code>true</code> if the portlet is a static portlet at the start
* of a list of portlets.
*
* @return <code>true</code> if the portlet is a static portlet at the start
* of a list of portlets
*/
@Override
public boolean isStaticStart() {
return _staticPortletStart;
}
/**
* Returns <code>true</code> if the portlet is a system portlet that a user
* cannot manually add to their page.
*
* @return <code>true</code> if the portlet is a system portlet that a user
* cannot manually add to their page
*/
@Override
public boolean isSystem() {
return _system;
}
/**
* Returns <code>true</code> if the portlet is an undeployed portlet.
*
* @return <code>true</code> if the portlet is a placeholder of an
* undeployed portlet
*/
@Override
public boolean isUndeployedPortlet() {
return _undeployedPortlet;
}
/**
* Returns <code>true</code> if the portlet uses the default template.
*
* @return <code>true</code> if the portlet uses the default template
*/
@Override
public boolean isUseDefaultTemplate() {
return _useDefaultTemplate;
}
/**
* Link the role names set in portlet.xml with the Liferay roles set in
* liferay-portlet.xml.
*/
@Override
public void linkRoles() {
List<String> linkedRoles = new ArrayList<>();
for (String unlinkedRole : _unlinkedRoles) {
String roleLink = _roleMappers.get(unlinkedRole);
if (Validator.isNotNull(roleLink)) {
if (_log.isDebugEnabled()) {
_log.debug(
"Linking role for portlet [" + getPortletId() +
"] with role-name [" + unlinkedRole +
"] to role-link [" + roleLink + "]");
}
linkedRoles.add(roleLink);
}
else {
_log.error(
"Unable to link role for portlet [" + getPortletId() +
"] with role-name [" + unlinkedRole +
"] because role-link is null");
}
}
String[] array = linkedRoles.toArray(new String[linkedRoles.size()]);
Arrays.sort(array);
setRolesArray(array);
}
/**
* Sets the action timeout of the portlet.
*
* @param actionTimeout the action timeout of the portlet
*/
@Override
public void setActionTimeout(int actionTimeout) {
_actionTimeout = actionTimeout;
}
/**
* Set to <code>true</code> if an action URL for this portlet should cause
* an auto redirect.
*
* @param actionURLRedirect boolean value for whether an action URL for this
* portlet should cause an auto redirect
*/
@Override
public void setActionURLRedirect(boolean actionURLRedirect) {
_actionURLRedirect = actionURLRedirect;
}
/**
* Set to <code>true</code> if default resources for the portlet are added
* to a page.
*
* @param addDefaultResource boolean value for whether or not default
* resources for the portlet are added to a page
*/
@Override
public void setAddDefaultResource(boolean addDefaultResource) {
_addDefaultResource = addDefaultResource;
}
/**
* Set to <code>true</code> if the portlet can be displayed via Ajax.
*
* @param ajaxable boolean value for whether the portlet can be displayed
* via Ajax
*/
@Override
public void setAjaxable(boolean ajaxable) {
_ajaxable = ajaxable;
}
/**
* Sets the application types of the portlet.
*
* @param applicationTypes the application types of the portlet
*/
@Override
public void setApplicationTypes(Set<ApplicationType> applicationTypes) {
_applicationTypes.addAll(applicationTypes);
}
/**
* Sets the names of the classes that represent asset types associated with
* the portlet.
*
* @param assetRendererFactoryClasses the names of the classes that
* represent asset types associated with the portlet
*/
@Override
public void setAssetRendererFactoryClasses(
List<String> assetRendererFactoryClasses) {
_assetRendererFactoryClasses = assetRendererFactoryClasses;
}
/**
* Sets the names of the classes that represent atom collection adapters
* associated with the portlet.
*
* @param atomCollectionAdapterClasses the names of the classes that
* represent atom collection adapters associated with the portlet
*/
@Override
public void setAtomCollectionAdapterClasses(
List<String> atomCollectionAdapterClasses) {
_atomCollectionAdapterClasses = atomCollectionAdapterClasses;
}
/**
* Sets the names of the parameters that will be automatically propagated
* through the portlet.
*
* @param autopropagatedParameters the names of the parameters that will be
* automatically propagated through the portlet
*/
@Override
public void setAutopropagatedParameters(
Set<String> autopropagatedParameters) {
_autopropagatedParameters = autopropagatedParameters;
}
/**
* Sets the configuration action class of the portlet.
*
* @param configurationActionClass the configuration action class of the
* portlet
*/
@Override
public void setConfigurationActionClass(String configurationActionClass) {
_configurationActionClass = configurationActionClass;
}
/**
* Set the name of the category of the Control Panel where the portlet will
* be shown.
*
* @param controlPanelEntryCategory the name of the category of the Control
* Panel where the portlet will be shown
*/
@Override
public void setControlPanelEntryCategory(String controlPanelEntryCategory) {
_controlPanelEntryCategory = controlPanelEntryCategory;
}
/**
* Sets the name of the class that will control when the portlet will be
* shown in the Control Panel.
*
* @param controlPanelEntryClass the name of the class that will control
* when the portlet will be shown in the Control Panel
*/
@Override
public void setControlPanelEntryClass(String controlPanelEntryClass) {
_controlPanelEntryClass = controlPanelEntryClass;
}
/**
* Sets the relative weight of the portlet with respect to the other
* portlets in the same category of the Control Panel.
*
* @param controlPanelEntryWeight the relative weight of the portlet with
* respect to the other portlets in the same category of the Control
* Panel
*/
@Override
public void setControlPanelEntryWeight(double controlPanelEntryWeight) {
_controlPanelEntryWeight = controlPanelEntryWeight;
}
/**
* Sets the name of the CSS class that will be injected in the DIV that
* wraps this portlet.
*
* @param cssClassWrapper the name of the CSS class that will be injected in
* the DIV that wraps this portlet
*/
@Override
public void setCssClassWrapper(String cssClassWrapper) {
_cssClassWrapper = cssClassWrapper;
}
/**
* Sets the names of the classes that represent custom attribute displays
* associated with the portlet.
*
* @param customAttributesDisplayClasses the names of the classes that
* represent custom attribute displays associated with the portlet
*/
@Override
public void setCustomAttributesDisplayClasses(
List<String> customAttributesDisplayClasses) {
_customAttributesDisplayClasses = customAttributesDisplayClasses;
}
/**
* Sets the default plugin settings of the portlet.
*
* @param pluginSetting the plugin setting
*/
@Override
public void setDefaultPluginSetting(PluginSetting pluginSetting) {
_defaultPluginSetting = pluginSetting;
}
/**
* Sets the default preferences of the portlet.
*
* @param defaultPreferences the default preferences of the portlet
*/
@Override
public void setDefaultPreferences(String defaultPreferences) {
_defaultPreferences = defaultPreferences;
}
/**
* Sets the display name of the portlet.
*
* @param displayName the display name of the portlet
*/
@Override
public void setDisplayName(String displayName) {
_displayName = displayName;
}
/**
* Sets expiration cache of the portlet.
*
* @param expCache expiration cache of the portlet
*/
@Override
public void setExpCache(Integer expCache) {
_expCache = expCache;
}
/**
* Sets the Facebook integration method of the portlet.
*
* @param facebookIntegration the Facebook integration method of the portlet
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
@Override
public void setFacebookIntegration(String facebookIntegration) {
if (Validator.isNotNull(facebookIntegration)) {
_facebookIntegration = facebookIntegration;
}
}
/**
* Sets a list of CSS files that will be referenced from the page's footer
* relative to the portal's context path.
*
* @param footerPortalCss a list of CSS files that will be referenced from
* the page's footer relative to the portal's context path
*/
@Override
public void setFooterPortalCss(List<String> footerPortalCss) {
_footerPortalCss = footerPortalCss;
}
/**
* Sets a list of JavaScript files that will be referenced from the page's
* footer relative to the portal's context path.
*
* @param footerPortalJavaScript a list of JavaScript files that will be
* referenced from the page's footer relative to the portal's context
* path
*/
@Override
public void setFooterPortalJavaScript(List<String> footerPortalJavaScript) {
_footerPortalJavaScript = footerPortalJavaScript;
}
/**
* Sets a list of CSS files that will be referenced from the page's footer
* relative to the portlet's context path.
*
* @param footerPortletCss a list of CSS files that will be referenced from
* the page's footer relative to the portlet's context path
*/
@Override
public void setFooterPortletCss(List<String> footerPortletCss) {
_footerPortletCss = footerPortletCss;
}
/**
* Sets a list of JavaScript files that will be referenced from the page's
* footer relative to the portlet's context path.
*
* @param footerPortletJavaScript a list of JavaScript files that will be
* referenced from the page's footer relative to the portlet's
* context path
*/
@Override
public void setFooterPortletJavaScript(
List<String> footerPortletJavaScript) {
_footerPortletJavaScript = footerPortletJavaScript;
}
/**
* Sets the name of the friendly URL mapper class of the portlet.
*
* @param friendlyURLMapperClass the name of the friendly URL mapper class
* of the portlet
*/
@Override
public void setFriendlyURLMapperClass(String friendlyURLMapperClass) {
_friendlyURLMapperClass = friendlyURLMapperClass;
}
/**
* Sets the name of the friendly URL mapping of the portlet.
*
* @param friendlyURLMapping the name of the friendly URL mapping of the
* portlet
*/
@Override
public void setFriendlyURLMapping(String friendlyURLMapping) {
_friendlyURLMapping = friendlyURLMapping;
}
/**
* Sets the class loader resource path to the friendly URL routes of the
* portlet.
*
* @param friendlyURLRoutes the class loader resource path to the friendly
* URL routes of the portlet
*/
@Override
public void setFriendlyURLRoutes(String friendlyURLRoutes) {
_friendlyURLRoutes = friendlyURLRoutes;
}
/**
* Sets a list of CSS files that will be referenced from the page's header
* relative to the portal's context path.
*
* @param headerPortalCss a list of CSS files that will be referenced from
* the page's header relative to the portal's context path
*/
@Override
public void setHeaderPortalCss(List<String> headerPortalCss) {
_headerPortalCss = headerPortalCss;
}
/**
* Sets a list of JavaScript files that will be referenced from the page's
* header relative to the portal's context path.
*
* @param headerPortalJavaScript a list of JavaScript files that will be
* referenced from the page's header relative to the portal's context
* path
*/
@Override
public void setHeaderPortalJavaScript(List<String> headerPortalJavaScript) {
_headerPortalJavaScript = headerPortalJavaScript;
}
/**
* Sets a list of CSS files that will be referenced from the page's header
* relative to the portlet's context path.
*
* @param headerPortletCss a list of CSS files that will be referenced from
* the page's header relative to the portlet's context path
*/
@Override
public void setHeaderPortletCss(List<String> headerPortletCss) {
_headerPortletCss = headerPortletCss;
}
/**
* Sets a list of JavaScript files that will be referenced from the page's
* header relative to the portlet's context path.
*
* @param headerPortletJavaScript a list of JavaScript files that will be
* referenced from the page's header relative to the portlet's
* context path
*/
@Override
public void setHeaderPortletJavaScript(
List<String> headerPortletJavaScript) {
_headerPortletJavaScript = headerPortletJavaScript;
}
/**
* Sets the icon of the portlet.
*
* @param icon the icon of the portlet
*/
@Override
public void setIcon(String icon) {
_icon = icon;
}
/**
* Set to <code>true</code> to include the portlet and make it available to
* be made active.
*
* @param include boolean value for whether to include the portlet and make
* it available to be made active
*/
@Override
public void setInclude(boolean include) {
_include = include;
}
/**
* Sets the names of the classes that represent indexers associated with the
* portlet.
*
* @param indexerClasses the names of the classes that represent indexers
* associated with the portlet
*/
@Override
public void setIndexerClasses(List<String> indexerClasses) {
_indexerClasses = indexerClasses;
}
/**
* Sets the init parameters of the portlet.
*
* @param initParams the init parameters of the portlet
*/
@Override
public void setInitParams(Map<String, String> initParams) {
_initParams = initParams;
}
/**
* Set to <code>true</code> if the portlet can be added multiple times to a
* layout.
*
* @param instanceable boolean value for whether the portlet can be added
* multiple times to a layout
*/
@Override
public void setInstanceable(boolean instanceable) {
_instanceable = instanceable;
}
/**
* Set to <code>true</code> to allow the portlet to be cached within the
* layout.
*
* @param layoutCacheable boolean value for whether the portlet can be
* cached within the layout
*/
@Override
public void setLayoutCacheable(boolean layoutCacheable) {
_layoutCacheable = layoutCacheable;
}
/**
* Set to <code>true</code> if the portlet goes into the maximized state
* when the user goes into the edit mode.
*
* @param maximizeEdit boolean value for whether the portlet goes into the
* maximized state when the user goes into the edit mode
*/
@Override
public void setMaximizeEdit(boolean maximizeEdit) {
_maximizeEdit = maximizeEdit;
}
/**
* Set to <code>true</code> if the portlet goes into the maximized state
* when the user goes into the help mode.
*
* @param maximizeHelp boolean value for whether the portlet goes into the
* maximized state when the user goes into the help mode
*/
@Override
public void setMaximizeHelp(boolean maximizeHelp) {
_maximizeHelp = maximizeHelp;
}
/**
* Sets the name of the open search class of the portlet.
*
* @param openSearchClass the name of the open search class of the portlet
*/
@Override
public void setOpenSearchClass(String openSearchClass) {
_openSearchClass = openSearchClass;
}
/**
* Sets the parent struts path of the portlet.
*
* @param parentStrutsPath the parent struts path of the portlet
*/
@Override
public void setParentStrutsPath(String parentStrutsPath) {
_parentStrutsPath = parentStrutsPath;
}
/**
* Sets the name of the permission propagator class of the portlet.
*/
@Override
public void setPermissionPropagatorClass(String permissionPropagatorClass) {
_permissionPropagatorClass = permissionPropagatorClass;
}
/**
* Sets this portlet's plugin package.
*
* @param pluginPackage this portlet's plugin package
*/
@Override
public void setPluginPackage(PluginPackage pluginPackage) {
_pluginPackage = pluginPackage;
}
/**
* Sets the name of the poller processor class of the portlet.
*
* @param pollerProcessorClass the name of the poller processor class of the
* portlet
*/
@Override
public void setPollerProcessorClass(String pollerProcessorClass) {
_pollerProcessorClass = pollerProcessorClass;
}
/**
* Sets the name of the POP message listener class of the portlet.
*
* @param popMessageListenerClass the name of the POP message listener class
* of the portlet
*/
@Override
public void setPopMessageListenerClass(String popMessageListenerClass) {
_popMessageListenerClass = popMessageListenerClass;
}
/**
* Set to <code>true</code> if the portlet goes into the pop up state when
* the user goes into the print mode.
*
* @param popUpPrint boolean value for whether the portlet goes into the pop
* up state when the user goes into the print mode
*/
@Override
public void setPopUpPrint(boolean popUpPrint) {
_popUpPrint = popUpPrint;
}
/**
* Sets this portlet's application.
*
* @param portletApp this portlet's application
*/
@Override
public void setPortletApp(PortletApp portletApp) {
_portletApp = portletApp;
_portletApp.addPortlet(this);
}
/**
* Sets the name of the portlet class of the portlet.
*
* @param portletClass the name of the portlet class of the portlet
*/
@Override
public void setPortletClass(String portletClass) {
_portletClass = portletClass;
}
/**
* Sets the name of the portlet data handler class of the portlet.
*
* @param portletDataHandlerClass the name of portlet data handler class of
* the portlet
*/
@Override
public void setPortletDataHandlerClass(String portletDataHandlerClass) {
_portletDataHandlerClass = portletDataHandlerClass;
}
/**
* Sets the filters of the portlet.
*
* @param portletFilters the filters of the portlet
*/
@Override
public void setPortletFilters(Map<String, PortletFilter> portletFilters) {
_portletFilters = portletFilters;
}
@Override
public void setPortletId(String portletId) {
super.setPortletId(portletId);
_rootPortletId = PortletConstants.getRootPortletId(getPortletId());
}
/**
* Sets the portlet info of the portlet.
*
* @param portletInfo the portlet info of the portlet
*/
@Override
public void setPortletInfo(PortletInfo portletInfo) {
_portletInfo = portletInfo;
}
/**
* Sets the name of the portlet layout listener class of the portlet.
*
* @param portletLayoutListenerClass the name of the portlet layout listener
* class of the portlet
*/
@Override
public void setPortletLayoutListenerClass(
String portletLayoutListenerClass) {
_portletLayoutListenerClass = portletLayoutListenerClass;
}
/**
* Sets the portlet modes of the portlet.
*
* @param portletModes the portlet modes of the portlet
*/
@Override
public void setPortletModes(Map<String, Set<String>> portletModes) {
_portletModes = portletModes;
}
/**
* Sets the name of the portlet.
*
* @param portletName the name of the portlet
*/
@Override
public void setPortletName(String portletName) {
_portletName = portletName;
}
/**
* Sets the name of the portlet URL class of the portlet.
*
* @param portletURLClass the name of the portlet URL class of the portlet
*/
@Override
public void setPortletURLClass(String portletURLClass) {
_portletURLClass = portletURLClass;
}
/**
* Set to <code>true</code> if preferences are shared across the entire
* company.
*
* @param preferencesCompanyWide boolean value for whether preferences are
* shared across the entire company
*/
@Override
public void setPreferencesCompanyWide(boolean preferencesCompanyWide) {
_preferencesCompanyWide = preferencesCompanyWide;
}
/**
* Set to <code>true</code> if preferences are owned by the group when the
* portlet is shown in a group layout. Set to <code>false</code> if
* preferences are owned by the user at all times.
*
* @param preferencesOwnedByGroup boolean value for whether preferences are
* owned by the group when the portlet is shown in a group layout or
* preferences are owned by the user at all times
*/
@Override
public void setPreferencesOwnedByGroup(boolean preferencesOwnedByGroup) {
_preferencesOwnedByGroup = preferencesOwnedByGroup;
}
/**
* Set to <code>true</code> if preferences are unique per layout.
*
* @param preferencesUniquePerLayout boolean value for whether preferences
* are unique per layout
*/
@Override
public void setPreferencesUniquePerLayout(
boolean preferencesUniquePerLayout) {
_preferencesUniquePerLayout = preferencesUniquePerLayout;
}
/**
* Sets the name of the preferences validator class of the portlet.
*
* @param preferencesValidator the name of the preferences validator class
* of the portlet
*/
@Override
public void setPreferencesValidator(String preferencesValidator) {
if (preferencesValidator != null) {
// Trim this because XDoclet generates preferences validators with
// extra white spaces
_preferencesValidator = preferencesValidator.trim();
}
else {
_preferencesValidator = null;
}
}
/**
* Set to <code>true</code> if the portlet does not share request attributes
* with the portal or portlets from another WAR.
*
* @param privateRequestAttributes boolean value for whether the portlet
* shares request attributes with the portal or portlets from another
* WAR
*/
@Override
public void setPrivateRequestAttributes(boolean privateRequestAttributes) {
_privateRequestAttributes = privateRequestAttributes;
}
/**
* Set to <code>true</code> if the portlet does not share session attributes
* with the portal.
*
* @param privateSessionAttributes boolean value for whether the portlet
* shares session attributes with the portal
*/
@Override
public void setPrivateSessionAttributes(boolean privateSessionAttributes) {
_privateSessionAttributes = privateSessionAttributes;
}
/**
* Sets the processing events of the portlet.
*
* @param processingEvents the processing events of the portlet
*/
@Override
public void setProcessingEvents(Set<QName> processingEvents) {
_processingEvents.addAll(processingEvents);
for (QName processingEvent : processingEvents) {
_processingEventsByQName.put(
PortletQNameUtil.getKey(processingEvent), processingEvent);
}
}
/**
* Sets the public render parameters of the portlet.
*
* @param publicRenderParameters the public render parameters of the portlet
*/
@Override
public void setPublicRenderParameters(
Set<PublicRenderParameter> publicRenderParameters) {
for (PublicRenderParameter publicRenderParameter :
publicRenderParameters) {
addPublicRenderParameter(publicRenderParameter);
}
}
/**
* Sets the publishing events of the portlet.
*
* @param publishingEvents the publishing events of the portlet
*/
@Override
public void setPublishingEvents(Set<QName> publishingEvents) {
_publishingEvents.addAll(publishingEvents);
}
/**
* Set to <code>true</code> if the portlet is ready to be used.
*
* @param ready whether the portlet is ready to be used
*/
@Override
public void setReady(boolean ready) {
Registry registry = RegistryUtil.getRegistry();
Readiness readiness = new Readiness(
ready, registry.getServiceRegistrar(Portlet.class));
String rootPortletId = getRootPortletId();
Readiness previousReadiness = _readinessMap.putIfAbsent(
rootPortletId, readiness);
if (previousReadiness != null) {
readiness = previousReadiness;
}
synchronized (readiness) {
if (readiness != _readinessMap.get(rootPortletId)) {
return;
}
readiness._ready = ready;
ServiceRegistrar<Portlet> serviceRegistrar =
readiness._serviceRegistrar;
if (ready) {
if (serviceRegistrar.isDestroyed()) {
serviceRegistrar = registry.getServiceRegistrar(
Portlet.class);
readiness._serviceRegistrar = serviceRegistrar;
}
Map<String, Object> properties = new HashMap<>();
properties.put("javax.portlet.name", getPortletName());
serviceRegistrar.registerService(
Portlet.class, this, properties);
}
else {
serviceRegistrar.destroy();
}
}
}
/**
* Set to <code>true</code> if the portlet supports remoting
*
* @param remoteable boolean value for whether or not the the portlet
* supports remoting
*/
@Override
public void setRemoteable(boolean remoteable) {
_remoteable = remoteable;
}
/**
* Sets the render timeout of the portlet.
*
* @param renderTimeout the render timeout of the portlet
*/
@Override
public void setRenderTimeout(int renderTimeout) {
_renderTimeout = renderTimeout;
}
/**
* Sets the render weight of the portlet.
*
* @param renderWeight int value for the render weight of the portlet
*/
@Override
public void setRenderWeight(int renderWeight) {
_renderWeight = renderWeight;
}
/**
* Set to <code>true</code> if the portlet will only process namespaced
* parameters.
*
* @param requiresNamespacedParameters boolean value for whether the portlet
* will only process namespaced parameters
*/
@Override
public void setRequiresNamespacedParameters(
boolean requiresNamespacedParameters) {
_requiresNamespacedParameters = requiresNamespacedParameters;
}
/**
* Sets the resource bundle of the portlet.
*
* @param resourceBundle the resource bundle of the portlet
*/
@Override
public void setResourceBundle(String resourceBundle) {
_resourceBundle = resourceBundle;
}
/**
* Set to <code>true</code> if the portlet restores to the current view from
* the maximized state.
*
* @param restoreCurrentView boolean value for whether the portlet restores
* to the current view from the maximized state
*/
@Override
public void setRestoreCurrentView(boolean restoreCurrentView) {
_restoreCurrentView = restoreCurrentView;
}
/**
* Sets the role mappers of the portlet.
*
* @param roleMappers the role mappers of the portlet
*/
@Override
public void setRoleMappers(Map<String, String> roleMappers) {
_roleMappers = roleMappers;
}
/**
* Sets a string of ordered comma delimited portlet IDs.
*
* @param roles a string of ordered comma delimited portlet IDs
*/
@Override
public void setRoles(String roles) {
_rolesArray = StringUtil.split(roles);
super.setRoles(roles);
}
/**
* Sets an array of required roles of the portlet.
*
* @param rolesArray an array of required roles of the portlet
*/
@Override
public void setRolesArray(String[] rolesArray) {
_rolesArray = rolesArray;
super.setRoles(StringUtil.merge(rolesArray));
}
/**
* Sets the scheduler entries of the portlet.
*
* @param schedulerEntries the scheduler entries of the portlet
*/
@Override
public void setSchedulerEntries(List<SchedulerEntry> schedulerEntries) {
_schedulerEntries.addAll(schedulerEntries);
}
/**
* Set to <code>true</code> if the portlet supports scoping of data.
*
* @param scopeable boolean value for whether or not the the portlet
* supports scoping of data
*/
@Override
public void setScopeable(boolean scopeable) {
_scopeable = scopeable;
}
/**
* Set to <code>true</code> if users are shown that they do not have access
* to the portlet.
*
* @param showPortletAccessDenied boolean value for whether users are shown
* that they do not have access to the portlet
*/
@Override
public void setShowPortletAccessDenied(boolean showPortletAccessDenied) {
_showPortletAccessDenied = showPortletAccessDenied;
}
/**
* Set to <code>true</code> if users are shown that the portlet is inactive.
*
* @param showPortletInactive boolean value for whether users are shown that
* the portlet is inactive
*/
@Override
public void setShowPortletInactive(boolean showPortletInactive) {
_showPortletInactive = showPortletInactive;
}
/**
* Set to <code>true</code> if the portlet uses Single Page Application.
*
* @param singlePageApplication boolean value for whether or not the the
* portlet uses Single Page Application
*/
@Override
public void setSinglePageApplication(boolean singlePageApplication) {
_singlePageApplication = singlePageApplication;
}
/**
* Sets the names of the classes that represent social activity interpreters
* associated with the portlet.
*
* @param socialActivityInterpreterClasses the names of the classes that
* represent social activity interpreters associated with the portlet
*/
@Override
public void setSocialActivityInterpreterClasses(
List<String> socialActivityInterpreterClasses) {
_socialActivityInterpreterClasses = socialActivityInterpreterClasses;
}
/**
* Sets the name of the social request interpreter class of the portlet.
*
* @param socialRequestInterpreterClass the name of the request interpreter
* class of the portlet
*/
@Override
public void setSocialRequestInterpreterClass(
String socialRequestInterpreterClass) {
_socialRequestInterpreterClass = socialRequestInterpreterClass;
}
/**
* Sets the names of the classes that represent staged model data handlers
* associated with the portlet.
*
* @param stagedModelDataHandlerClasses the names of the classes that
* represent staged model data handlers associated with the portlet
*/
@Override
public void setStagedModelDataHandlerClasses(
List<String> stagedModelDataHandlerClasses) {
_stagedModelDataHandlerClasses = stagedModelDataHandlerClasses;
}
/**
* Set to <code>true</code> if the portlet is a static portlet that is
* cannot be moved.
*
* @param staticPortlet boolean value for whether the portlet is a static
* portlet that cannot be moved
*/
@Override
public void setStatic(boolean staticPortlet) {
_staticPortlet = staticPortlet;
}
/**
* Set to <code>true</code> if the portlet is a static portlet at the start
* of a list of portlets.
*
* @param staticPortletStart boolean value for whether the portlet is a
* static portlet at the start of a list of portlets
*/
@Override
public void setStaticStart(boolean staticPortletStart) {
_staticPortletStart = staticPortletStart;
}
/**
* Sets the struts path of the portlet.
*
* @param strutsPath the struts path of the portlet
*/
@Override
public void setStrutsPath(String strutsPath) {
_strutsPath = strutsPath;
}
/**
* Sets the supported locales of the portlet.
*
* @param supportedLocales the supported locales of the portlet
*/
@Override
public void setSupportedLocales(Set<String> supportedLocales) {
_supportedLocales = supportedLocales;
}
/**
* Set to <code>true</code> if the portlet is a system portlet that a user
* cannot manually add to their page.
*
* @param system boolean value for whether the portlet is a system portlet
* that a user cannot manually add to their page
*/
@Override
public void setSystem(boolean system) {
_system = system;
}
/**
* Sets the name of the template handler class of the portlet.
*
* @param templateHandlerClass the name of template handler class of the
* portlet
*/
@Override
public void setTemplateHandlerClass(String templateHandlerClass) {
_templateHandlerClass = templateHandlerClass;
}
/**
* Sets the names of the classes that represent trash handlers associated to
* the portlet.
*
* @param trashHandlerClasses the names of the classes that represent trash
* handlers associated with the portlet
*/
@Override
public void setTrashHandlerClasses(List<String> trashHandlerClasses) {
_trashHandlerClasses = trashHandlerClasses;
}
/**
* Set to <code>true</code> if the portlet is an undeployed portlet.
*
* @param undeployedPortlet boolean value for whether the portlet is an
* undeployed portlet
*/
@Override
public void setUndeployedPortlet(boolean undeployedPortlet) {
_undeployedPortlet = undeployedPortlet;
}
/**
* Sets the unlinked roles of the portlet.
*
* @param unlinkedRoles the unlinked roles of the portlet
*/
@Override
public void setUnlinkedRoles(Set<String> unlinkedRoles) {
_unlinkedRoles = unlinkedRoles;
}
/**
* Sets the name of the URL encoder class of the portlet.
*
* @param urlEncoderClass the name of the URL encoder class of the portlet
*/
@Override
public void setURLEncoderClass(String urlEncoderClass) {
_urlEncoderClass = urlEncoderClass;
}
/**
* Set to <code>true</code> if the portlet uses the default template.
*
* @param useDefaultTemplate boolean value for whether the portlet uses the
* default template
*/
@Override
public void setUseDefaultTemplate(boolean useDefaultTemplate) {
_useDefaultTemplate = useDefaultTemplate;
}
/**
* Sets the class loader resource path to the user notification definitions
* of the portlet.
*
* @param userNotificationDefinitions the class loader resource path to the
* user notification definitions of the portlet
*/
@Override
public void setUserNotificationDefinitions(
String userNotificationDefinitions) {
_userNotificationDefinitions = userNotificationDefinitions;
}
/**
* Sets the names of the classes that represent user notification handlers
* associated with the portlet.
*
* @param userNotificationHandlerClasses the names of the classes that
* represent user notification handlers associated with the portlet
*/
@Override
public void setUserNotificationHandlerClasses(
List<String> userNotificationHandlerClasses) {
_userNotificationHandlerClasses = userNotificationHandlerClasses;
}
/**
* Sets the user principal strategy of the portlet.
*
* @param userPrincipalStrategy the user principal strategy of the portlet
*/
@Override
public void setUserPrincipalStrategy(String userPrincipalStrategy) {
if (Validator.isNotNull(userPrincipalStrategy)) {
_userPrincipalStrategy = userPrincipalStrategy;
}
}
/**
* Sets the virtual path of the portlet.
*
* @param virtualPath the virtual path of the portlet
*/
@Override
public void setVirtualPath(String virtualPath) {
if (_portletApp.isWARFile() && Validator.isNull(virtualPath)) {
virtualPath = PropsValues.PORTLET_VIRTUAL_PATH;
}
_virtualPath = virtualPath;
}
/**
* Sets the name of the WebDAV storage class of the portlet.
*
* @param webDAVStorageClass the name of the WebDAV storage class of the
* portlet
*/
@Override
public void setWebDAVStorageClass(String webDAVStorageClass) {
_webDAVStorageClass = webDAVStorageClass;
}
/**
* Sets the name of the WebDAV storage token of the portlet.
*
* @param webDAVStorageToken the name of the WebDAV storage token of the
* portlet
*/
@Override
public void setWebDAVStorageToken(String webDAVStorageToken) {
_webDAVStorageToken = webDAVStorageToken;
}
/**
* Sets the window states of the portlet.
*
* @param windowStates the window states of the portlet
*/
@Override
public void setWindowStates(Map<String, Set<String>> windowStates) {
_windowStates = windowStates;
}
/**
* Sets the names of the classes that represent workflow handlers associated
* to the portlet.
*
* @param workflowHandlerClasses the names of the classes that represent
* workflow handlers associated with the portlet
*/
@Override
public void setWorkflowHandlerClasses(List<String> workflowHandlerClasses) {
_workflowHandlerClasses = workflowHandlerClasses;
}
/**
* Sets the name of the XML-RPC method class of the portlet.
*
* @param xmlRpcMethodClass the name of the XML-RPC method class of the
* portlet
*/
@Override
public void setXmlRpcMethodClass(String xmlRpcMethodClass) {
_xmlRpcMethodClass = xmlRpcMethodClass;
}
@Override
public void unsetReady() {
Readiness readiness = _readinessMap.remove(getRootPortletId());
if (readiness != null) {
synchronized (readiness) {
ServiceRegistrar<Portlet> serviceRegistrar =
readiness._serviceRegistrar;
serviceRegistrar.destroy();
}
}
}
/**
* Log instance for this class.
*/
private static final Log _log = LogFactoryUtil.getLog(PortletImpl.class);
private static volatile ControlPanelEntry _controlPanelEntry =
ServiceProxyFactory.newServiceTrackedInstance(
ControlPanelEntry.class, PortletImpl.class, "_controlPanelEntry",
"(&(!(javax.portlet.name=*))(objectClass=" +
ControlPanelEntry.class.getName() + "))",
false);
/**
* Map of the ready states of all portlets keyed by their root portlet ID.
*/
private static final ConcurrentMap<String, Readiness> _readinessMap =
new ConcurrentHashMap<>();
/**
* The action timeout of the portlet.
*/
private int _actionTimeout;
/**
* <code>True</code> if an action URL for this portlet should cause an auto
* redirect.
*/
private boolean _actionURLRedirect;
/**
* <code>True</code> if default resources for the portlet are added to a
* page.
*/
private boolean _addDefaultResource;
/**
* <code>True</code> if the portlet can be displayed via Ajax.
*/
private boolean _ajaxable = true;
/**
* The application types of the portlet.
*/
private final Set<ApplicationType> _applicationTypes = new HashSet<>();
/**
* The names of the classes that represents asset types associated with the
* portlet.
*/
private List<String> _assetRendererFactoryClasses;
/**
* The names of the classes that represents atom collection adapters
* associated with the portlet.
*/
private List<String> _atomCollectionAdapterClasses;
/**
* The names of the parameters that will be automatically propagated through
* the portlet.
*/
private Set<String> _autopropagatedParameters;
/**
* The configuration action class of the portlet.
*/
private String _configurationActionClass;
/**
* The name of the category of the Control Panel where this portlet will be
* shown.
*/
private String _controlPanelEntryCategory = StringPool.BLANK;
/**
* The name of the class that will control when this portlet will be shown
* in the Control Panel.
*/
private String _controlPanelEntryClass;
/**
* The relative weight of this portlet with respect to the other portlets in
* the same category of the Control Panel.
*/
private double _controlPanelEntryWeight = 100;
/**
* The name of the CSS class that will be injected in the DIV that wraps
* this portlet.
*/
private String _cssClassWrapper = StringPool.BLANK;
/**
* The names of the classes that represents custom attribute displays
* associated with the portlet.
*/
private List<String> _customAttributesDisplayClasses;
/**
* Plugin settings associated with the portlet.
*/
private PluginSetting _defaultPluginSetting;
/**
* The default preferences of the portlet.
*/
private String _defaultPreferences;
/**
* The display name of the portlet.
*/
private String _displayName;
/**
* The expiration cache of the portlet.
*/
private Integer _expCache;
/**
* The Facebook integration method of the portlet.
*
* @deprecated As of 7.0.0, with no direct replacement
*/
@Deprecated
private String _facebookIntegration =
PortletConstants.FACEBOOK_INTEGRATION_IFRAME;
/**
* A list of CSS files that will be referenced from the page's footer
* relative to the portal's context path.
*/
private List<String> _footerPortalCss;
/**
* A list of JavaScript files that will be referenced from the page's footer
* relative to the portal's context path.
*/
private List<String> _footerPortalJavaScript;
/**
* A list of CSS files that will be referenced from the page's footer
* relative to the portlet's context path.
*/
private List<String> _footerPortletCss;
/**
* A list of JavaScript files that will be referenced from the page's footer
* relative to the portlet's context path.
*/
private List<String> _footerPortletJavaScript;
/**
* The name of the friendly URL mapper class of the portlet.
*/
private String _friendlyURLMapperClass;
/**
* The name of the friendly URL mapping of the portlet.
*/
private String _friendlyURLMapping;
/**
* The the class loader resource path to the friendly URL routes of the
* portlet.
*/
private String _friendlyURLRoutes;
/**
* A list of CSS files that will be referenced from the page's header
* relative to the portal's context path.
*/
private List<String> _headerPortalCss;
/**
* A list of JavaScript files that will be referenced from the page's header
* relative to the portal's context path.
*/
private List<String> _headerPortalJavaScript;
/**
* A list of CSS files that will be referenced from the page's header
* relative to the portlet's context path.
*/
private List<String> _headerPortletCss;
/**
* A list of JavaScript files that will be referenced from the page's header
* relative to the portlet's context path.
*/
private List<String> _headerPortletJavaScript;
/**
* The icon of the portlet.
*/
private String _icon;
/**
* <code>True</code> to include the portlet and make it available to be made
* active.
*/
private boolean _include = true;
/**
* The names of the classes that represent indexers associated with the
* portlet.
*/
private List<String> _indexerClasses;
/**
* The init parameters of the portlet.
*/
private Map<String, String> _initParams;
/**
* <code>True</code> if the portlet can be added multiple times to a layout.
*/
private boolean _instanceable;
/**
* <code>True</code> if the portlet can be cached within the layout.
*/
private boolean _layoutCacheable;
/**
* <code>True</code> if the portlet goes into the maximized state when the
* user goes into the edit mode.
*/
private boolean _maximizeEdit;
/**
* <code>True</code> if the portlet goes into the maximized state when the
* user goes into the help mode.
*/
private boolean _maximizeHelp;
/**
* The name of the open search class of the portlet.
*/
private String _openSearchClass;
/**
* The parent struts path of the portlet.
*/
private String _parentStrutsPath;
/**
* The name of the permission propagator class of the portlet.
*/
private String _permissionPropagatorClass;
/**
* Package to which this plugin belongs.
*/
private PluginPackage _pluginPackage;
/**
* The name of the poller processor class of the portlet.
*/
private String _pollerProcessorClass;
/**
* The name of the POP message listener class of the portlet.
*/
private String _popMessageListenerClass;
/**
* <code>True</code> if the portlet goes into the pop up state when the user
* goes into the print mode.
*/
private boolean _popUpPrint = true;
/**
* The application to which this portlet belongs.
*/
private PortletApp _portletApp;
/**
* The name of the portlet class of the portlet.
*/
private String _portletClass;
/**
* The name of the portlet data handler class of the portlet.
*/
private String _portletDataHandlerClass;
/**
* The filters of the portlet.
*/
private Map<String, PortletFilter> _portletFilters;
/**
* The portlet info of the portlet.
*/
private PortletInfo _portletInfo;
/**
* The name of the portlet data layout listener class of the portlet.
*/
private String _portletLayoutListenerClass;
/**
* The portlet modes of the portlet.
*/
private Map<String, Set<String>> _portletModes;
/**
* The name of the portlet.
*/
private String _portletName;
/**
* The name of the portlet URL class of the portlet.
*/
private String _portletURLClass;
/**
* <code>True</code> if preferences are shared across the entire company.
*/
private boolean _preferencesCompanyWide;
/**
* <code>True</code> if preferences are owned by the group when the portlet
* is shown in a group layout. <code>False</code> if preferences are owned
* by the user at all times.
*/
private boolean _preferencesOwnedByGroup = true;
/**
* <code>True</code> if preferences are unique per layout.
*/
private boolean _preferencesUniquePerLayout = true;
/**
* The name of the preferences validator class of the portlet.
*/
private String _preferencesValidator;
/**
* <code>True</code> if the portlet does not share request attributes with
* the portal or portlets from another WAR.
*/
private boolean _privateRequestAttributes = true;
/**
* <code>True</code> if the portlet does not share session attributes with
* the portal.
*/
private boolean _privateSessionAttributes = true;
/**
* The processing events of the portlet.
*/
private final Set<QName> _processingEvents = new HashSet<>();
/**
* Map of the processing events of the portlet keyed by the QName.
*/
private final Map<String, QName> _processingEventsByQName = new HashMap<>();
/**
* The public render parameters of the portlet.
*/
private final Set<PublicRenderParameter> _publicRenderParameters =
new HashSet<>();
/**
* Map of the public render parameters of the portlet keyed by the
* identifier.
*/
private final Map<String, PublicRenderParameter>
_publicRenderParametersByIdentifier = new HashMap<>();
/**
* Map of the public render parameters of the portlet keyed by the QName.
*/
private final Map<String, PublicRenderParameter>
_publicRenderParametersByQName = new HashMap<>();
/**
* The publishing events of the portlet.
*/
private final Set<QName> _publishingEvents = new HashSet<>();
/**
* <code>True</code> if the portlet supports remoting.
*/
private boolean _remoteable;
/**
* The render timeout of the portlet.
*/
private int _renderTimeout;
/**
* Render weight of the portlet.
*/
private int _renderWeight = 1;
/**
* <code>True</code> if the portlet will only process namespaced parameters.
*/
private boolean _requiresNamespacedParameters = true;
/**
* The resource bundle of the portlet.
*/
private String _resourceBundle;
/**
* <code>True</code> if the portlet restores to the current view from the
* maximized state.
*/
private boolean _restoreCurrentView = true;
/**
* The role mappers of the portlet.
*/
private Map<String, String> _roleMappers;
/**
* An array of required roles of the portlet.
*/
private String[] _rolesArray = new String[0];
/**
* The root portlet of this portlet instance.
*/
private final Portlet _rootPortlet;
private String _rootPortletId;
/**
* The scheduler entries of the portlet.
*/
private final List<SchedulerEntry> _schedulerEntries;
/**
* <code>True</code> if the portlet supports scoping of data.
*/
private boolean _scopeable;
/**
* <code>True</code> if users are shown that they do not have access to the
* portlet.
*/
private boolean _showPortletAccessDenied =
PropsValues.LAYOUT_SHOW_PORTLET_ACCESS_DENIED;
/**
* <code>True</code> if users are shown that the portlet is inactive.
*/
private boolean _showPortletInactive =
PropsValues.LAYOUT_SHOW_PORTLET_INACTIVE;
/**
* <code>True</code> if the portlet uses Single Page Application.
*/
private boolean _singlePageApplication = true;
/**
* The names of the classes that represents social activity interpreters
* associated with the portlet.
*/
private List<String> _socialActivityInterpreterClasses;
/**
* The name of the social request interpreter class of the portlet.
*/
private String _socialRequestInterpreterClass;
/**
* The names of the classes that represent staged model data handlers
* associated with the portlet.
*/
private List<String> _stagedModelDataHandlerClasses;
/**
* <code>True</code> if the portlet is a static portlet that is cannot be
* moved.
*/
private boolean _staticPortlet;
/**
* <code>True</code> if the portlet is a static portlet at the start of a
* list of portlets.
*/
private boolean _staticPortletStart;
/**
* The struts path of the portlet.
*/
private String _strutsPath;
/**
* The supported locales of the portlet.
*/
private Set<String> _supportedLocales;
/**
* <code>True</code> if the portlet is a system portlet that a user cannot
* manually add to their page.
*/
private boolean _system;
/**
* The name of the display style handler class of the portlet.
*/
private String _templateHandlerClass;
/**
* The timestamp of the portlet.
*/
private Long _timestamp;
/**
* The names of the classes that represents trash handlers associated with
* the portlet.
*/
private List<String> _trashHandlerClasses;
/**
* <code>True</code> if the portlet is an undeployed portlet.
*/
private boolean _undeployedPortlet;
/**
* The unlinked roles of the portlet.
*/
private Set<String> _unlinkedRoles;
/**
* The name of the URL encoder class of the portlet.
*/
private String _urlEncoderClass;
/**
* <code>True</code> if the portlet uses the default template.
*/
private boolean _useDefaultTemplate = true;
/**
* The the class loader resource path to the user notification definitions
* of the portlet.
*/
private String _userNotificationDefinitions;
/**
* The names of the classes that represents user notification handlers
* associated with the portlet.
*/
private List<String> _userNotificationHandlerClasses;
/**
* The user principal strategy of the portlet.
*/
private String _userPrincipalStrategy =
PortletConstants.USER_PRINCIPAL_STRATEGY_USER_ID;
/**
* The virtual path of the portlet.
*/
private String _virtualPath;
/**
* The name of the WebDAV storage class of the portlet.
*/
private String _webDAVStorageClass;
/**
* The name of the WebDAV storage token of the portlet.
*/
private String _webDAVStorageToken;
/**
* The window states of the portlet.
*/
private Map<String, Set<String>> _windowStates;
/**
* The names of the classes that represents workflow handlers associated
* with the portlet.
*/
private List<String> _workflowHandlerClasses;
/**
* The name of the XML-RPC method class of the portlet.
*/
private String _xmlRpcMethodClass;
private static class Readiness {
private Readiness(
boolean ready, ServiceRegistrar<Portlet> serviceRegistrar) {
_ready = ready;
_serviceRegistrar = serviceRegistrar;
}
private volatile boolean _ready;
private ServiceRegistrar<Portlet> _serviceRegistrar;
}
}