/**
* 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.exportimport.kernel.lar.PortletDataHandler;
import com.liferay.exportimport.kernel.staging.StagingConstants;
import com.liferay.exportimport.kernel.staging.StagingUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.json.JSON;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.Account;
import com.liferay.portal.kernel.model.Company;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.GroupConstants;
import com.liferay.portal.kernel.model.GroupWrapper;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.LayoutConstants;
import com.liferay.portal.kernel.model.LayoutPrototype;
import com.liferay.portal.kernel.model.LayoutSet;
import com.liferay.portal.kernel.model.LayoutSetPrototype;
import com.liferay.portal.kernel.model.Organization;
import com.liferay.portal.kernel.model.Portlet;
import com.liferay.portal.kernel.model.PortletConstants;
import com.liferay.portal.kernel.model.RoleConstants;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.model.UserGroup;
import com.liferay.portal.kernel.model.UserPersonalSite;
import com.liferay.portal.kernel.security.permission.ActionKeys;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.service.CompanyLocalServiceUtil;
import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutPrototypeLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutSetLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutSetPrototypeLocalServiceUtil;
import com.liferay.portal.kernel.service.OrganizationLocalServiceUtil;
import com.liferay.portal.kernel.service.PortletLocalServiceUtil;
import com.liferay.portal.kernel.service.RoleLocalServiceUtil;
import com.liferay.portal.kernel.service.UserGroupLocalServiceUtil;
import com.liferay.portal.kernel.service.UserLocalServiceUtil;
import com.liferay.portal.kernel.service.permission.LayoutPermissionUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.UnicodeProperties;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.webserver.WebServerServletTokenUtil;
import com.liferay.portal.util.PropsValues;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
/**
* Represents either a site or a generic resource container.
*
* <p>
* Groups are most used in Liferay as a resource container for permissioning and
* content scoping purposes. For instance, an site is group, meaning that it can
* contain layouts, web content, wiki entries, etc. However, a single layout can
* also be a group containing its own unique set of resources. An example of
* this would be a site that has several distinct wikis on different layouts.
* Each of these layouts would have its own group, and all of the nodes in the
* wiki for a certain layout would be associated with that layout's group. This
* allows users to be given different permissions on each of the wikis, even
* though they are all within the same site. In addition to sites and layouts,
* users and organizations are also groups.
* </p>
*
* <p>
* Groups also have a second, partially conflicting purpose in Liferay. For
* legacy reasons, groups are also the model used to represent sites (known as
* communities before Liferay v6.1). Confusion may arise from the fact that a
* site group is both the resource container and the site itself, whereas a
* layout or organization would have both a primary model and an associated
* group.
* </p>
*
* @author Brian Wing Shun Chan
*/
@JSON(strict = true)
public class GroupImpl extends GroupBaseImpl {
@Override
public void clearStagingGroup() {
_stagingGroup = null;
}
@Override
public List<Group> getAncestors() {
Group group = null;
if (isStagingGroup()) {
group = getLiveGroup();
}
else {
group = this;
}
List<Group> groups = null;
while (!group.isRoot()) {
group = group.getParentGroup();
if (groups == null) {
groups = new ArrayList<>();
}
groups.add(group);
}
if (groups == null) {
return Collections.emptyList();
}
return groups;
}
@Override
public List<Group> getChildren(boolean site) {
return GroupLocalServiceUtil.getGroups(
getCompanyId(), getGroupId(), site);
}
/**
* @deprecated As of 7.0.0, replaced by {@link
* #getChildrenWithLayouts(boolean, int, int,
* OrderByComparator)}
*/
@Deprecated
@Override
public List<Group> getChildrenWithLayouts(
boolean site, int start, int end) {
return getChildrenWithLayouts(site, start, end, null);
}
@Override
public List<Group> getChildrenWithLayouts(
boolean site, int start, int end, OrderByComparator<Group> obc) {
return GroupLocalServiceUtil.getLayoutsGroups(
getCompanyId(), getGroupId(), site, start, end, obc);
}
@Override
public int getChildrenWithLayoutsCount(boolean site) {
return GroupLocalServiceUtil.getLayoutsGroupsCount(
getCompanyId(), getGroupId(), site);
}
@Override
public long getDefaultPrivatePlid() {
return getDefaultPlid(true);
}
@Override
public long getDefaultPublicPlid() {
return getDefaultPlid(false);
}
@Override
public List<Group> getDescendants(boolean site) {
Set<Group> descendants = new LinkedHashSet<>();
for (Group group : getChildren(site)) {
descendants.add(group);
descendants.addAll(group.getDescendants(site));
}
return new ArrayList<>(descendants);
}
@JSON
@Override
public String getDescriptiveName() throws PortalException {
return getDescriptiveName(LocaleUtil.getMostRelevantLocale());
}
@Override
public String getDescriptiveName(Locale locale) throws PortalException {
Group curGroup = this;
String name = getName(locale);
if (Validator.isNull(name)) {
Locale siteDefaultLocale = PortalUtil.getSiteDefaultLocale(
getGroupId());
name = getName(siteDefaultLocale);
}
if (isCompany() && !isCompanyStagingGroup()) {
name = LanguageUtil.get(locale, "global");
}
else if (isControlPanel()) {
name = LanguageUtil.get(locale, "control-panel");
}
else if (isGuest()) {
Company company = CompanyLocalServiceUtil.getCompany(
getCompanyId());
Account account = company.getAccount();
name = account.getName();
}
else if (isLayout()) {
Layout layout = LayoutLocalServiceUtil.getLayout(getClassPK());
name = layout.getName(locale);
}
else if (isLayoutPrototype()) {
LayoutPrototype layoutPrototype =
LayoutPrototypeLocalServiceUtil.getLayoutPrototype(
getClassPK());
name = layoutPrototype.getName(locale);
}
else if (isLayoutSetPrototype()) {
LayoutSetPrototype layoutSetPrototype =
LayoutSetPrototypeLocalServiceUtil.getLayoutSetPrototype(
getClassPK());
name = layoutSetPrototype.getName(locale);
}
else if (isOrganization()) {
long organizationId = getOrganizationId();
Organization organization =
OrganizationLocalServiceUtil.getOrganization(organizationId);
name = organization.getName();
curGroup = organization.getGroup();
}
else if (isUser()) {
long userId = getClassPK();
User user = UserLocalServiceUtil.getUser(userId);
name = user.getFullName();
}
else if (isUserGroup()) {
long userGroupId = getClassPK();
UserGroup userGroup = UserGroupLocalServiceUtil.getUserGroup(
userGroupId);
name = userGroup.getName();
}
else if (isUserPersonalSite()) {
name = LanguageUtil.get(locale, "user-personal-site");
}
if (curGroup.isStaged() && !curGroup.isStagedRemotely() &&
curGroup.isStagingGroup()) {
Group liveGroup = getLiveGroup();
name = liveGroup.getDescriptiveName(locale);
}
return name;
}
@Override
public String getDisplayURL(ThemeDisplay themeDisplay) {
return getDisplayURL(themeDisplay, false);
}
@Override
public String getDisplayURL(
ThemeDisplay themeDisplay, boolean privateLayout) {
try {
LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
getGroupId(), privateLayout);
if ((layoutSet.getPageCount() > 0) ||
(isUser() &&
(LayoutLocalServiceUtil.getLayoutsCount(this, privateLayout) >
0))) {
String groupFriendlyURL = PortalUtil.getGroupFriendlyURL(
layoutSet, themeDisplay);
return PortalUtil.addPreservedParameters(
themeDisplay, groupFriendlyURL);
}
}
catch (PortalException pe) {
_log.error(pe, pe);
}
return StringPool.BLANK;
}
@Override
public String getIconCssClass() {
String iconCss = "sites";
if (isCompany()) {
iconCss = "sites";
}
else if (isLayout()) {
iconCss = "edit-layout";
}
else if (isOrganization()) {
iconCss = "sites";
}
else if (isUser()) {
iconCss = "user";
}
return iconCss;
}
@Override
public String getIconURL(ThemeDisplay themeDisplay) {
String iconURL = StringPool.BLANK;
if (isCompany()) {
iconURL = "../aui/globe";
}
else if (isLayout()) {
iconURL = "../aui/file";
}
else if (isOrganization()) {
iconURL = "../aui/globe";
}
else if (isUser()) {
iconURL = "../aui/user";
}
else {
iconURL = "../aui/globe";
}
return iconURL;
}
@Override
public String getLayoutRootNodeName(boolean privateLayout, Locale locale) {
String pagesName = null;
if (isLayoutPrototype() || isLayoutSetPrototype()) {
pagesName = "pages";
}
else if (privateLayout) {
if (isUser() || isUserGroup()) {
pagesName = "my-dashboard";
}
else {
pagesName = "private-pages";
}
}
else {
if (isUser() || isUserGroup()) {
pagesName = "my-profile";
}
else {
pagesName = "public-pages";
}
}
return LanguageUtil.get(locale, pagesName);
}
@Override
public Group getLiveGroup() {
if (!isStagingGroup()) {
return null;
}
try {
if (_liveGroup == null) {
_liveGroup = GroupLocalServiceUtil.getGroup(getLiveGroupId());
if (_liveGroup instanceof GroupImpl) {
GroupImpl groupImpl = (GroupImpl)_liveGroup;
groupImpl._stagingGroup = this;
}
else {
_liveGroup = new GroupWrapper(_liveGroup) {
@Override
public Group getStagingGroup() {
return GroupImpl.this;
}
};
}
}
return _liveGroup;
}
catch (Exception e) {
_log.error("Error getting live group for " + getLiveGroupId(), e);
return null;
}
}
@Override
public String getLiveParentTypeSettingsProperty(String key) {
UnicodeProperties typeSettingsProperties =
getParentLiveGroupTypeSettingsProperties();
return typeSettingsProperties.getProperty(key);
}
@Override
public String getLogoURL(ThemeDisplay themeDisplay, boolean useDefault) {
long logoId = 0;
LayoutSet publicLayoutSet = getPublicLayoutSet();
if (publicLayoutSet.getLogoId() > 0) {
logoId = publicLayoutSet.getLogoId();
}
else {
LayoutSet privateLayoutSet = getPrivateLayoutSet();
if (privateLayoutSet.getLogoId() > 0) {
logoId = privateLayoutSet.getLogoId();
}
}
if ((logoId == 0) && !useDefault) {
return null;
}
StringBundler sb = new StringBundler(5);
sb.append(themeDisplay.getPathImage());
sb.append("/layout_set_logo?img_id=");
sb.append(logoId);
sb.append("&t=");
sb.append(WebServerServletTokenUtil.getToken(logoId));
return sb.toString();
}
@Override
public long getOrganizationId() {
if (isOrganization()) {
if (isStagingGroup()) {
Group liveGroup = getLiveGroup();
return liveGroup.getClassPK();
}
else {
return getClassPK();
}
}
return 0;
}
@Override
public Group getParentGroup() {
long parentGroupId = getParentGroupId();
if (parentGroupId <= 0) {
return null;
}
return GroupLocalServiceUtil.fetchGroup(parentGroupId);
}
@Override
public UnicodeProperties getParentLiveGroupTypeSettingsProperties() {
try {
if (isLayout()) {
Group parentGroup = GroupLocalServiceUtil.getGroup(
getParentGroupId());
return parentGroup.getParentLiveGroupTypeSettingsProperties();
}
if (isStagingGroup()) {
Group liveGroup = getLiveGroup();
return liveGroup.getTypeSettingsProperties();
}
}
catch (Exception e) {
}
return getTypeSettingsProperties();
}
@Override
public String getPathFriendlyURL(
boolean privateLayout, ThemeDisplay themeDisplay) {
if (privateLayout) {
if (isUser()) {
return themeDisplay.getPathFriendlyURLPrivateUser();
}
else {
return themeDisplay.getPathFriendlyURLPrivateGroup();
}
}
else {
return themeDisplay.getPathFriendlyURLPublic();
}
}
@Override
public LayoutSet getPrivateLayoutSet() {
LayoutSet layoutSet = null;
try {
layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
getGroupId(), true);
}
catch (Exception e) {
_log.error(e, e);
}
return layoutSet;
}
@Override
public int getPrivateLayoutsPageCount() {
try {
return LayoutLocalServiceUtil.getLayoutsCount(this, true);
}
catch (Exception e) {
_log.error(e, e);
}
return 0;
}
@Override
public LayoutSet getPublicLayoutSet() {
LayoutSet layoutSet = null;
try {
layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
getGroupId(), false);
}
catch (Exception e) {
_log.error(e, e);
}
return layoutSet;
}
@Override
public int getPublicLayoutsPageCount() {
try {
return LayoutLocalServiceUtil.getLayoutsCount(this, false);
}
catch (Exception e) {
_log.error(e, e);
}
return 0;
}
@Override
public long getRemoteLiveGroupId() {
if (!isStagedRemotely()) {
return GroupConstants.DEFAULT_LIVE_GROUP_ID;
}
return GetterUtil.getLong(getTypeSettingsProperty("remoteGroupId"));
}
@Override
public String getScopeDescriptiveName(ThemeDisplay themeDisplay)
throws PortalException {
if (getGroupId() == themeDisplay.getScopeGroupId()) {
return StringUtil.appendParentheticalSuffix(
themeDisplay.translate("current-site"),
HtmlUtil.escape(getDescriptiveName(themeDisplay.getLocale())));
}
else if (isLayout() && (getClassPK() == themeDisplay.getPlid())) {
return StringUtil.appendParentheticalSuffix(
themeDisplay.translate("current-page"),
HtmlUtil.escape(getDescriptiveName(themeDisplay.getLocale())));
}
else if (isLayoutPrototype()) {
return themeDisplay.translate("default");
}
else {
return HtmlUtil.escape(
getDescriptiveName(themeDisplay.getLocale()));
}
}
@Override
public String getScopeLabel(ThemeDisplay themeDisplay) {
String label = "site";
if (getGroupId() == themeDisplay.getScopeGroupId()) {
label = "current-site";
}
else if (getGroupId() == themeDisplay.getCompanyGroupId()) {
label = "global";
}
else if (isLayout()) {
label = "page";
}
else {
Group scopeGroup = themeDisplay.getScopeGroup();
if (scopeGroup.hasAncestor(getGroupId())) {
label = "parent-site";
}
else if (hasAncestor(scopeGroup.getGroupId())) {
label = "child-site";
}
}
return label;
}
@Override
public Group getStagingGroup() {
if (isStagingGroup()) {
return null;
}
try {
if ((_stagingGroup == null) ||
(_stagingGroup == _NULL_STAGING_GROUP)) {
_stagingGroup = GroupLocalServiceUtil.getStagingGroup(
getGroupId());
if (_stagingGroup instanceof GroupImpl) {
GroupImpl groupImpl = (GroupImpl)_stagingGroup;
groupImpl._liveGroup = this;
}
else {
_stagingGroup = new GroupWrapper(_stagingGroup) {
@Override
public Group getLiveGroup() {
return GroupImpl.this;
}
};
}
}
return _stagingGroup;
}
catch (Exception e) {
if (_log.isDebugEnabled()) {
_log.debug(
"Unable to get staging group for group " + getGroupId(), e);
}
return null;
}
}
@Override
public String getTypeLabel() {
return GroupConstants.getTypeLabel(getType());
}
@Override
public String getTypeSettings() {
if (_typeSettingsProperties == null) {
return super.getTypeSettings();
}
else {
return _typeSettingsProperties.toString();
}
}
@Override
public UnicodeProperties getTypeSettingsProperties() {
if (_typeSettingsProperties == null) {
_typeSettingsProperties = new UnicodeProperties(true);
try {
_typeSettingsProperties.load(super.getTypeSettings());
}
catch (IOException ioe) {
_log.error(ioe, ioe);
}
}
return _typeSettingsProperties;
}
@Override
public String getTypeSettingsProperty(String key) {
UnicodeProperties typeSettingsProperties = getTypeSettingsProperties();
return typeSettingsProperties.getProperty(key);
}
@Override
public String getUnambiguousName(String name, Locale locale) {
try {
return StringUtil.appendParentheticalSuffix(
name, getDescriptiveName(locale));
}
catch (Exception e) {
return name;
}
}
@Override
public boolean hasAncestor(long groupId) {
Group group = null;
if (isStagingGroup()) {
group = getLiveGroup();
}
else {
group = this;
}
String treePath = group.getTreePath();
if ((groupId != group.getGroupId()) &&
treePath.contains(StringPool.SLASH + groupId + StringPool.SLASH)) {
return true;
}
return false;
}
@Override
public boolean hasLocalOrRemoteStagingGroup() {
if (hasRemoteStagingGroup() || hasStagingGroup()) {
return true;
}
return false;
}
@Override
public boolean hasPrivateLayouts() {
if (getPrivateLayoutsPageCount() > 0) {
return true;
}
else {
return false;
}
}
@Override
public boolean hasPublicLayouts() {
if (getPublicLayoutsPageCount() > 0) {
return true;
}
else {
return false;
}
}
@Override
public boolean hasRemoteStagingGroup() {
if (getRemoteStagingGroupCount() > 0) {
return true;
}
return false;
}
@Override
public boolean hasStagingGroup() {
if (isStagingGroup() || (_stagingGroup == _NULL_STAGING_GROUP)) {
return false;
}
if (_stagingGroup != null) {
return true;
}
Group stagingGroup = GroupLocalServiceUtil.fetchStagingGroup(
getGroupId());
if (stagingGroup == null) {
_stagingGroup = _NULL_STAGING_GROUP;
return false;
}
_stagingGroup = stagingGroup;
return true;
}
/**
* @deprecated As of 7.0.0, replaced by {@link #hasAncestor}
*/
@Deprecated
@Override
public boolean isChild(long groupId) {
return hasAncestor(groupId);
}
@Override
public boolean isCompany() {
if ((getClassNameId() == ClassNameIds._COMPANY_CLASS_NAME_ID) ||
isCompanyStagingGroup()) {
return true;
}
return false;
}
@Override
public boolean isCompanyStagingGroup() {
Group liveGroup = getLiveGroup();
if (liveGroup == null) {
return false;
}
return liveGroup.isCompany();
}
@Override
public boolean isControlPanel() {
String groupKey = getGroupKey();
if (groupKey.equals(GroupConstants.CONTROL_PANEL)) {
return true;
}
else {
return false;
}
}
@Override
public boolean isGuest() {
String groupKey = getGroupKey();
if (groupKey.equals(GroupConstants.GUEST)) {
return true;
}
else {
return false;
}
}
@Override
public boolean isInStagingPortlet(String portletId) {
Group liveGroup = getLiveGroup();
if (liveGroup == null) {
return false;
}
return liveGroup.isStagedPortlet(portletId);
}
@Override
public boolean isLayout() {
if (getClassNameId() == ClassNameIds._LAYOUT_CLASS_NAME_ID) {
return true;
}
return false;
}
@Override
public boolean isLayoutPrototype() {
if (getClassNameId() == ClassNameIds._LAYOUT_PROTOTYPE_CLASS_NAME_ID) {
return true;
}
return false;
}
@Override
public boolean isLayoutSetPrototype() {
if (getClassNameId() ==
ClassNameIds._LAYOUT_SET_PROTOTYPE_CLASS_NAME_ID) {
return true;
}
return false;
}
@Override
public boolean isLimitedToParentSiteMembers() {
if ((getParentGroupId() != GroupConstants.DEFAULT_PARENT_GROUP_ID) &&
(getMembershipRestriction() ==
GroupConstants.MEMBERSHIP_RESTRICTION_TO_PARENT_SITE_MEMBERS)) {
return true;
}
return false;
}
@Override
public boolean isOrganization() {
if (getClassNameId() == ClassNameIds._ORGANIZATION_CLASS_NAME_ID) {
return true;
}
return false;
}
@Override
public boolean isRegularSite() {
if (getClassNameId() == ClassNameIds._GROUP_CLASS_NAME_ID) {
return true;
}
return false;
}
@Override
public boolean isRoot() {
if (getParentGroupId() == GroupConstants.DEFAULT_PARENT_GROUP_ID) {
return true;
}
return false;
}
@Override
public boolean isShowSite(
PermissionChecker permissionChecker, boolean privateSite)
throws PortalException {
if (!isControlPanel() && !isSite() && !isUser()) {
return false;
}
boolean showSite = true;
Layout defaultLayout = null;
int siteLayoutsCount = LayoutLocalServiceUtil.getLayoutsCount(
this, privateSite);
if (siteLayoutsCount == 0) {
boolean hasPowerUserRole = RoleLocalServiceUtil.hasUserRole(
permissionChecker.getUserId(), permissionChecker.getCompanyId(),
RoleConstants.POWER_USER, true);
if (isSite()) {
if (privateSite) {
showSite =
PropsValues.MY_SITES_SHOW_PRIVATE_SITES_WITH_NO_LAYOUTS;
}
else {
showSite =
PropsValues.MY_SITES_SHOW_PUBLIC_SITES_WITH_NO_LAYOUTS;
}
}
else if (isOrganization()) {
showSite = false;
}
else if (isUser()) {
if (privateSite) {
showSite =
PropsValues.
MY_SITES_SHOW_USER_PRIVATE_SITES_WITH_NO_LAYOUTS;
if (PropsValues.
LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED &&
!hasPowerUserRole) {
showSite = false;
}
}
else {
showSite =
PropsValues.
MY_SITES_SHOW_USER_PUBLIC_SITES_WITH_NO_LAYOUTS;
if (PropsValues.
LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED &&
!hasPowerUserRole) {
showSite = false;
}
}
}
}
else {
defaultLayout = LayoutLocalServiceUtil.fetchFirstLayout(
getGroupId(), privateSite,
LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
if ((defaultLayout != null) &&
!LayoutPermissionUtil.contains(
permissionChecker, defaultLayout, true, ActionKeys.VIEW)) {
showSite = false;
}
else if (isOrganization() && !isSite()) {
_log.error(
"Group " + getGroupId() +
" is an organization site that does not have pages");
}
}
return showSite;
}
@Override
public boolean isStaged() {
return GetterUtil.getBoolean(
getLiveParentTypeSettingsProperty("staged"));
}
@Override
public boolean isStagedPortlet(String portletId) {
UnicodeProperties typeSettingsProperties =
getParentLiveGroupTypeSettingsProperties();
portletId = PortletConstants.getRootPortletId(portletId);
String typeSettingsProperty = typeSettingsProperties.getProperty(
StagingUtil.getStagedPortletId(portletId));
if (Validator.isNotNull(typeSettingsProperty)) {
return GetterUtil.getBoolean(typeSettingsProperty);
}
try {
Portlet portlet = PortletLocalServiceUtil.getPortletById(portletId);
PortletDataHandler portletDataHandler =
portlet.getPortletDataHandlerInstance();
if (portletDataHandler == null) {
return false;
}
for (Map.Entry<String, String> entry :
typeSettingsProperties.entrySet()) {
String key = entry.getKey();
if (!key.contains(StagingConstants.STAGED_PORTLET)) {
continue;
}
String stagedPortletId = StringUtil.replace(
key, StagingConstants.STAGED_PORTLET, StringPool.BLANK);
Portlet stagedPortlet = PortletLocalServiceUtil.getPortletById(
stagedPortletId);
if (stagedPortlet == null) {
continue;
}
if (portletDataHandler.equals(
stagedPortlet.getPortletDataHandlerInstance())) {
return GetterUtil.getBoolean(entry.getValue());
}
}
}
catch (Exception e) {
if (_log.isDebugEnabled()) {
_log.debug(e, e);
}
}
return true;
}
@Override
public boolean isStagedRemotely() {
return GetterUtil.getBoolean(
getLiveParentTypeSettingsProperty("stagedRemotely"));
}
@Override
public boolean isStagingGroup() {
if (getLiveGroupId() == GroupConstants.DEFAULT_LIVE_GROUP_ID) {
return false;
}
else {
return true;
}
}
@Override
public boolean isUser() {
if (getClassNameId() == ClassNameIds._USER_CLASS_NAME_ID) {
return true;
}
return false;
}
@Override
public boolean isUserGroup() {
if (getClassNameId() == ClassNameIds._USER_GROUP_CLASS_NAME_ID) {
return true;
}
return false;
}
@Override
public boolean isUserPersonalSite() {
if (getClassNameId() ==
ClassNameIds._USER_PERSONAL_SITE_CLASS_NAME_ID) {
return true;
}
return false;
}
@Override
public void setTypeSettings(String typeSettings) {
_typeSettingsProperties = null;
super.setTypeSettings(typeSettings);
}
@Override
public void setTypeSettingsProperties(
UnicodeProperties typeSettingsProperties) {
_typeSettingsProperties = typeSettingsProperties;
super.setTypeSettings(_typeSettingsProperties.toString());
}
protected long getDefaultPlid(boolean privateLayout) {
try {
Layout firstLayout = LayoutLocalServiceUtil.fetchFirstLayout(
getGroupId(), privateLayout,
LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
if (firstLayout != null) {
return firstLayout.getPlid();
}
}
catch (Exception e) {
if (_log.isWarnEnabled()) {
_log.warn(e.getMessage());
}
}
return LayoutConstants.DEFAULT_PLID;
}
private static final Group _NULL_STAGING_GROUP = new GroupImpl();
private static final Log _log = LogFactoryUtil.getLog(GroupImpl.class);
private Group _liveGroup;
private Group _stagingGroup;
private UnicodeProperties _typeSettingsProperties;
private static class ClassNameIds {
private ClassNameIds() {
}
private static final long _COMPANY_CLASS_NAME_ID =
PortalUtil.getClassNameId(Company.class);
private static final long _GROUP_CLASS_NAME_ID =
PortalUtil.getClassNameId(Group.class);
private static final long _LAYOUT_CLASS_NAME_ID =
PortalUtil.getClassNameId(Layout.class);
private static final long _LAYOUT_PROTOTYPE_CLASS_NAME_ID =
PortalUtil.getClassNameId(LayoutPrototype.class);
private static final long _LAYOUT_SET_PROTOTYPE_CLASS_NAME_ID =
PortalUtil.getClassNameId(LayoutSetPrototype.class);
private static final long _ORGANIZATION_CLASS_NAME_ID =
PortalUtil.getClassNameId(Organization.class);
private static final long _USER_CLASS_NAME_ID =
PortalUtil.getClassNameId(User.class);
private static final long _USER_GROUP_CLASS_NAME_ID =
PortalUtil.getClassNameId(UserGroup.class);
private static final long _USER_PERSONAL_SITE_CLASS_NAME_ID =
PortalUtil.getClassNameId(UserPersonalSite.class);
}
}