Example usage for com.liferay.portal.kernel.model Group getPublicLayoutSet

List of usage examples for com.liferay.portal.kernel.model Group getPublicLayoutSet

Introduction

In this page you can find the example usage for com.liferay.portal.kernel.model Group getPublicLayoutSet.

Prototype

public LayoutSet getPublicLayoutSet();

Source Link

Usage

From source file:com.liferay.exportimport.content.processor.base.BaseTextExportImportContentProcessor.java

License:Open Source License

protected String replaceExportHostname(long groupId, String url, StringBundler urlSB) throws PortalException {

    if (!HttpUtil.hasProtocol(url)) {
        return url;
    }/* www .  ja va  2 s  . c  om*/

    boolean secure = HttpUtil.isSecure(url);

    int serverPort = PortalUtil.getPortalServerPort(secure);

    if (serverPort == -1) {
        return url;
    }

    Group group = GroupLocalServiceUtil.getGroup(groupId);

    LayoutSet publicLayoutSet = group.getPublicLayoutSet();

    String publicLayoutSetVirtualHostname = publicLayoutSet.getVirtualHostname();

    String portalUrl = StringPool.BLANK;

    if (Validator.isNotNull(publicLayoutSetVirtualHostname)) {
        portalUrl = PortalUtil.getPortalURL(publicLayoutSetVirtualHostname, serverPort, secure);

        if (url.startsWith(portalUrl)) {
            if (secure) {
                urlSB.append(DATA_HANDLER_PUBLIC_LAYOUT_SET_SECURE_URL);
            } else {
                urlSB.append(DATA_HANDLER_PUBLIC_LAYOUT_SET_URL);
            }

            return url.substring(portalUrl.length());
        }
    }

    LayoutSet privateLayoutSet = group.getPrivateLayoutSet();

    String privateLayoutSetVirtualHostname = privateLayoutSet.getVirtualHostname();

    if (Validator.isNotNull(privateLayoutSetVirtualHostname)) {
        portalUrl = PortalUtil.getPortalURL(privateLayoutSetVirtualHostname, serverPort, secure);

        if (url.startsWith(portalUrl)) {
            if (secure) {
                urlSB.append(DATA_HANDLER_PRIVATE_LAYOUT_SET_SECURE_URL);
            } else {
                urlSB.append(DATA_HANDLER_PRIVATE_LAYOUT_SET_URL);
            }

            return url.substring(portalUrl.length());
        }
    }

    Company company = CompanyLocalServiceUtil.getCompany(group.getCompanyId());

    String companyVirtualHostname = company.getVirtualHostname();

    if (Validator.isNotNull(companyVirtualHostname)) {
        portalUrl = PortalUtil.getPortalURL(companyVirtualHostname, serverPort, secure);

        if (url.startsWith(portalUrl)) {
            if (secure) {
                urlSB.append(DATA_HANDLER_COMPANY_SECURE_URL);
            } else {
                urlSB.append(DATA_HANDLER_COMPANY_URL);
            }

            return url.substring(portalUrl.length());
        }
    }

    portalUrl = PortalUtil.getPortalURL("localhost", serverPort, secure);

    if (url.startsWith(portalUrl)) {
        return url.substring(portalUrl.length());
    }

    return url;
}

From source file:com.liferay.exportimport.content.processor.base.BaseTextExportImportContentProcessor.java

License:Open Source License

protected String replaceExportLayoutReferences(PortletDataContext portletDataContext, StagedModel stagedModel,
        String content) throws Exception {

    Group group = GroupLocalServiceUtil.getGroup(portletDataContext.getScopeGroupId());

    StringBuilder sb = new StringBuilder(content);

    String[] patterns = { "href=", "[[" };

    int beginPos = -1;
    int endPos = content.length();
    int offset = 0;

    while (true) {
        if (beginPos > -1) {
            endPos = beginPos - 1;/*from www .  j a  va 2  s .c o m*/
        }

        beginPos = StringUtil.lastIndexOfAny(content, patterns, endPos);

        if (beginPos == -1) {
            break;
        }

        if (content.startsWith("href=", beginPos)) {
            offset = 5;

            char c = content.charAt(beginPos + offset);

            if ((c == CharPool.APOSTROPHE) || (c == CharPool.QUOTE)) {
                offset++;
            }
        } else if (content.charAt(beginPos) == CharPool.OPEN_BRACKET) {
            offset = 2;
        }

        endPos = StringUtil.indexOfAny(content, LAYOUT_REFERENCE_STOP_CHARS, beginPos + offset, endPos);

        if (endPos == -1) {
            continue;
        }

        String url = content.substring(beginPos + offset, endPos);

        if (url.endsWith(StringPool.SLASH)) {
            url = url.substring(0, url.length() - 1);
        }

        StringBundler urlSB = new StringBundler(6);

        try {
            url = replaceExportHostname(portletDataContext.getScopeGroupId(), url, urlSB);

            if (!url.startsWith(StringPool.SLASH)) {
                continue;
            }

            String pathContext = PortalUtil.getPathContext();

            if (pathContext.length() > 1) {
                if (!url.startsWith(pathContext)) {
                    continue;
                }

                urlSB.append(DATA_HANDLER_PATH_CONTEXT);

                url = url.substring(pathContext.length());
            }

            if (!url.startsWith(StringPool.SLASH)) {
                continue;
            }

            int pos = url.indexOf(StringPool.SLASH, 1);

            String localePath = StringPool.BLANK;

            Locale locale = null;

            if (pos != -1) {
                localePath = url.substring(0, pos);

                locale = LocaleUtil.fromLanguageId(localePath.substring(1), true, false);
            }

            if (locale != null) {
                String urlWithoutLocale = url.substring(localePath.length());

                if (urlWithoutLocale.startsWith(PRIVATE_GROUP_SERVLET_MAPPING)
                        || urlWithoutLocale.startsWith(PRIVATE_USER_SERVLET_MAPPING)
                        || urlWithoutLocale.startsWith(PUBLIC_GROUP_SERVLET_MAPPING)) {

                    urlSB.append(localePath);

                    url = urlWithoutLocale;
                }
            }

            boolean privateLayout = false;

            if (url.startsWith(PRIVATE_GROUP_SERVLET_MAPPING)) {
                urlSB.append(DATA_HANDLER_PRIVATE_GROUP_SERVLET_MAPPING);

                url = url.substring(PRIVATE_GROUP_SERVLET_MAPPING.length() - 1);

                privateLayout = true;
            } else if (url.startsWith(PRIVATE_USER_SERVLET_MAPPING)) {
                urlSB.append(DATA_HANDLER_PRIVATE_USER_SERVLET_MAPPING);

                url = url.substring(PRIVATE_USER_SERVLET_MAPPING.length() - 1);

                privateLayout = true;
            } else if (url.startsWith(PUBLIC_GROUP_SERVLET_MAPPING)) {
                urlSB.append(DATA_HANDLER_PUBLIC_SERVLET_MAPPING);

                url = url.substring(PUBLIC_GROUP_SERVLET_MAPPING.length() - 1);
            } else {
                String urlSBString = urlSB.toString();

                LayoutSet layoutSet = null;

                if (urlSBString.contains(DATA_HANDLER_PUBLIC_LAYOUT_SET_SECURE_URL)
                        || urlSBString.contains(DATA_HANDLER_PUBLIC_LAYOUT_SET_URL)) {

                    layoutSet = group.getPublicLayoutSet();
                } else if (urlSBString.contains(DATA_HANDLER_PRIVATE_LAYOUT_SET_SECURE_URL)
                        || urlSBString.contains(DATA_HANDLER_PRIVATE_LAYOUT_SET_URL)) {

                    layoutSet = group.getPrivateLayoutSet();
                }

                if (layoutSet == null) {
                    continue;
                }

                privateLayout = layoutSet.isPrivateLayout();

                LayoutFriendlyURL layoutFriendlyUrl = LayoutFriendlyURLLocalServiceUtil
                        .fetchFirstLayoutFriendlyURL(group.getGroupId(), privateLayout, url);

                if (layoutFriendlyUrl == null) {
                    continue;
                }

                if (privateLayout) {
                    if (group.isUser()) {
                        urlSB.append(DATA_HANDLER_PRIVATE_USER_SERVLET_MAPPING);
                    } else {
                        urlSB.append(DATA_HANDLER_PRIVATE_GROUP_SERVLET_MAPPING);
                    }
                } else {
                    urlSB.append(DATA_HANDLER_PUBLIC_SERVLET_MAPPING);
                }

                urlSB.append(DATA_HANDLER_GROUP_FRIENDLY_URL);

                continue;
            }

            long groupId = group.getGroupId();

            Layout layout = LayoutLocalServiceUtil.fetchLayoutByFriendlyURL(groupId, privateLayout, url);

            if (layout != null) {
                Element entityElement = portletDataContext.getExportDataElement(stagedModel);

                portletDataContext.addReferenceElement(stagedModel, entityElement, layout,
                        PortletDataContext.REFERENCE_TYPE_DEPENDENCY, true);

                continue;
            }

            pos = url.indexOf(StringPool.SLASH, 1);

            String groupFriendlyURL = url;

            if (pos != -1) {
                groupFriendlyURL = url.substring(0, pos);
            }

            Group urlGroup = GroupLocalServiceUtil.fetchFriendlyURLGroup(group.getCompanyId(),
                    groupFriendlyURL);

            if (urlGroup == null) {
                throw new NoSuchLayoutException();
            }

            urlSB.append(DATA_HANDLER_GROUP_FRIENDLY_URL);

            // Append the UUID. This information will be used during the
            // import process when looking up the proper group for the link.

            urlSB.append(StringPool.AT);

            if (urlGroup.isStagedRemotely()) {
                String remoteGroupUuid = urlGroup.getTypeSettingsProperty("remoteGroupUUID");

                if (Validator.isNotNull(remoteGroupUuid)) {
                    urlSB.append(remoteGroupUuid);
                }
            } else if (urlGroup.isStaged()) {
                Group liveGroup = urlGroup.getLiveGroup();

                urlSB.append(liveGroup.getUuid());
            } else if (group.getGroupId() == urlGroup.getGroupId()) {
                urlSB.append(urlGroup.getFriendlyURL());
            } else {
                urlSB.append(urlGroup.getUuid());
            }

            urlSB.append(StringPool.AT);

            String siteAdminURL = GroupConstants.CONTROL_PANEL_FRIENDLY_URL
                    + PropsValues.CONTROL_PANEL_LAYOUT_FRIENDLY_URL;

            if (url.endsWith(siteAdminURL)) {
                urlSB.append(DATA_HANDLER_SITE_ADMIN_URL);

                url = StringPool.BLANK;

                continue;
            }

            if (pos == -1) {
                url = StringPool.BLANK;

                continue;
            }

            url = url.substring(pos);

            layout = LayoutLocalServiceUtil.getFriendlyURLLayout(urlGroup.getGroupId(), privateLayout, url);

            Element entityElement = portletDataContext.getExportDataElement(stagedModel);

            portletDataContext.addReferenceElement(stagedModel, entityElement, layout,
                    PortletDataContext.REFERENCE_TYPE_DEPENDENCY, true);
        } catch (Exception e) {
            if (e instanceof NoSuchLayoutException && !isValidateLayoutReferences()) {

                continue;
            }

            if (_log.isDebugEnabled()) {
                _log.debug(e, e);
            } else if (_log.isWarnEnabled()) {
                StringBundler exceptionSB = new StringBundler(6);

                exceptionSB.append("Unable to process layout URL ");
                exceptionSB.append(url);
                exceptionSB.append(" for staged model ");
                exceptionSB.append(stagedModel.getModelClassName());
                exceptionSB.append(" with primary key ");
                exceptionSB.append(stagedModel.getPrimaryKeyObj());

                _log.warn(exceptionSB.toString());
            }
        } finally {
            if (urlSB.length() > 0) {
                urlSB.append(url);

                url = urlSB.toString();
            }

            sb.replace(beginPos + offset, endPos, url);
        }
    }

    return sb.toString();
}

From source file:com.liferay.exportimport.content.processor.base.BaseTextExportImportContentProcessor.java

License:Open Source License

protected String replaceImportLayoutReferences(PortletDataContext portletDataContext, String content)
        throws Exception {

    String companyPortalURL = StringPool.BLANK;
    String privateLayoutSetPortalURL = StringPool.BLANK;
    String publicLayoutSetPortalURL = StringPool.BLANK;

    Group group = GroupLocalServiceUtil.getGroup(portletDataContext.getScopeGroupId());

    Company company = CompanyLocalServiceUtil.getCompany(group.getCompanyId());

    LayoutSet privateLayoutSet = group.getPrivateLayoutSet();
    LayoutSet publicLayoutSet = group.getPublicLayoutSet();

    int serverPort = PortalUtil.getPortalServerPort(false);

    if (serverPort != -1) {
        if (Validator.isNotNull(company.getVirtualHostname())) {
            companyPortalURL = PortalUtil.getPortalURL(company.getVirtualHostname(), serverPort, false);
        }/*ww  w.  j a  va 2 s.  c o  m*/

        if (Validator.isNotNull(privateLayoutSet.getVirtualHostname())) {
            privateLayoutSetPortalURL = PortalUtil.getPortalURL(privateLayoutSet.getVirtualHostname(),
                    serverPort, false);
        }

        if (Validator.isNotNull(publicLayoutSet.getVirtualHostname())) {
            publicLayoutSetPortalURL = PortalUtil.getPortalURL(publicLayoutSet.getVirtualHostname(), serverPort,
                    false);
        }
    }

    int secureSecurePort = PortalUtil.getPortalServerPort(true);

    String companySecurePortalURL = StringPool.BLANK;
    String privateLayoutSetSecurePortalURL = StringPool.BLANK;
    String publicLayoutSetSecurePortalURL = StringPool.BLANK;

    if (secureSecurePort != -1) {
        if (Validator.isNotNull(company.getVirtualHostname())) {
            companySecurePortalURL = PortalUtil.getPortalURL(company.getVirtualHostname(), secureSecurePort,
                    true);
        }

        if (Validator.isNotNull(privateLayoutSet.getVirtualHostname())) {
            privateLayoutSetSecurePortalURL = PortalUtil.getPortalURL(privateLayoutSet.getVirtualHostname(),
                    secureSecurePort, true);
        }

        if (Validator.isNotNull(publicLayoutSet.getVirtualHostname())) {
            publicLayoutSetSecurePortalURL = PortalUtil.getPortalURL(publicLayoutSet.getVirtualHostname(),
                    secureSecurePort, true);
        }
    }

    StringBundler sb = new StringBundler(3);

    sb.append(VirtualLayoutConstants.CANONICAL_URL_SEPARATOR);
    sb.append(GroupConstants.CONTROL_PANEL_FRIENDLY_URL);
    sb.append(PropsValues.CONTROL_PANEL_LAYOUT_FRIENDLY_URL);

    content = StringUtil.replace(content, DATA_HANDLER_COMPANY_SECURE_URL, companySecurePortalURL);
    content = StringUtil.replace(content, DATA_HANDLER_COMPANY_URL, companyPortalURL);

    // Group friendly URLs

    while (true) {
        int groupFriendlyUrlPos = content.indexOf(DATA_HANDLER_GROUP_FRIENDLY_URL);

        if (groupFriendlyUrlPos == -1) {
            break;
        }

        int groupUuidPos = groupFriendlyUrlPos + DATA_HANDLER_GROUP_FRIENDLY_URL.length();

        int endIndex = content.indexOf(StringPool.AT, groupUuidPos + 1);

        if (endIndex < (groupUuidPos + 1)) {
            content = StringUtil.replaceFirst(content, DATA_HANDLER_GROUP_FRIENDLY_URL, StringPool.BLANK,
                    groupFriendlyUrlPos);

            continue;
        }

        String groupUuid = content.substring(groupUuidPos + 1, endIndex);

        Group groupFriendlyUrlGroup = GroupLocalServiceUtil.fetchGroupByUuidAndCompanyId(groupUuid,
                portletDataContext.getCompanyId());

        if ((groupFriendlyUrlGroup == null) || groupUuid.startsWith(StringPool.SLASH)) {

            content = StringUtil.replaceFirst(content, DATA_HANDLER_GROUP_FRIENDLY_URL, group.getFriendlyURL(),
                    groupFriendlyUrlPos);
            content = StringUtil.replaceFirst(content, StringPool.AT + groupUuid + StringPool.AT,
                    StringPool.BLANK, content.indexOf(group.getFriendlyURL()));

            continue;
        }

        content = StringUtil.replaceFirst(content, DATA_HANDLER_GROUP_FRIENDLY_URL, StringPool.BLANK,
                groupFriendlyUrlPos);
        content = StringUtil.replaceFirst(content, StringPool.AT + groupUuid + StringPool.AT,
                groupFriendlyUrlGroup.getFriendlyURL(), groupFriendlyUrlPos);
    }

    content = StringUtil.replace(content, DATA_HANDLER_PATH_CONTEXT, PortalUtil.getPathContext());
    content = StringUtil.replace(content, DATA_HANDLER_PRIVATE_GROUP_SERVLET_MAPPING,
            PropsValues.LAYOUT_FRIENDLY_URL_PRIVATE_GROUP_SERVLET_MAPPING);
    content = StringUtil.replace(content, DATA_HANDLER_PRIVATE_LAYOUT_SET_SECURE_URL,
            privateLayoutSetSecurePortalURL);
    content = StringUtil.replace(content, DATA_HANDLER_PRIVATE_LAYOUT_SET_URL, privateLayoutSetPortalURL);
    content = StringUtil.replace(content, DATA_HANDLER_PRIVATE_USER_SERVLET_MAPPING,
            PropsValues.LAYOUT_FRIENDLY_URL_PRIVATE_USER_SERVLET_MAPPING);
    content = StringUtil.replace(content, DATA_HANDLER_PUBLIC_LAYOUT_SET_SECURE_URL,
            publicLayoutSetSecurePortalURL);
    content = StringUtil.replace(content, DATA_HANDLER_PUBLIC_LAYOUT_SET_URL, publicLayoutSetPortalURL);
    content = StringUtil.replace(content, DATA_HANDLER_PUBLIC_SERVLET_MAPPING,
            PropsValues.LAYOUT_FRIENDLY_URL_PUBLIC_SERVLET_MAPPING);
    content = StringUtil.replace(content, DATA_HANDLER_SITE_ADMIN_URL, sb.toString());

    return content;
}

From source file:com.liferay.exportimport.content.processor.base.BaseTextExportImportContentProcessor.java

License:Open Source License

protected void validateLayoutReferences(long groupId, String content) throws PortalException {

    if (!isValidateLayoutReferences()) {
        return;//w  w  w  .  java 2  s  .com
    }

    Group group = GroupLocalServiceUtil.getGroup(groupId);

    String[] patterns = { "href=", "[[" };

    int beginPos = -1;
    int endPos = content.length();
    int offset = 0;

    while (true) {
        if (beginPos > -1) {
            endPos = beginPos - 1;
        }

        beginPos = StringUtil.lastIndexOfAny(content, patterns, endPos);

        if (beginPos == -1) {
            break;
        }

        if (content.startsWith("href=", beginPos)) {
            offset = 5;

            char c = content.charAt(beginPos + offset);

            if ((c == CharPool.APOSTROPHE) || (c == CharPool.QUOTE)) {
                offset++;
            }
        } else if (content.charAt(beginPos) == CharPool.OPEN_BRACKET) {
            offset = 2;
        }

        endPos = StringUtil.indexOfAny(content, LAYOUT_REFERENCE_STOP_CHARS, beginPos + offset, endPos);

        if (endPos == -1) {
            continue;
        }

        String url = content.substring(beginPos + offset, endPos);

        endPos = url.indexOf(Portal.FRIENDLY_URL_SEPARATOR);

        if (endPos != -1) {
            url = url.substring(0, endPos);
        }

        if (url.endsWith(StringPool.SLASH)) {
            url = url.substring(0, url.length() - 1);
        }

        StringBundler urlSB = new StringBundler(1);

        url = replaceExportHostname(groupId, url, urlSB);

        if (!url.startsWith(StringPool.SLASH)) {
            continue;
        }

        String pathContext = PortalUtil.getPathContext();

        if (pathContext.length() > 1) {
            if (!url.startsWith(pathContext)) {
                continue;
            }

            url = url.substring(pathContext.length());
        }

        if (!url.startsWith(StringPool.SLASH)) {
            continue;
        }

        int pos = url.indexOf(StringPool.SLASH, 1);

        String localePath = StringPool.BLANK;

        Locale locale = null;

        if (pos != -1) {
            localePath = url.substring(0, pos);

            locale = LocaleUtil.fromLanguageId(localePath.substring(1), true, false);
        }

        if (locale != null) {
            String urlWithoutLocale = url.substring(localePath.length());

            if (urlWithoutLocale.startsWith(PRIVATE_GROUP_SERVLET_MAPPING)
                    || urlWithoutLocale.startsWith(PRIVATE_USER_SERVLET_MAPPING)
                    || urlWithoutLocale.startsWith(PUBLIC_GROUP_SERVLET_MAPPING)) {

                url = urlWithoutLocale;
            }
        }

        boolean privateLayout = false;

        if (url.startsWith(PRIVATE_GROUP_SERVLET_MAPPING)) {
            url = url.substring(PRIVATE_GROUP_SERVLET_MAPPING.length() - 1);

            privateLayout = true;
        } else if (url.startsWith(PRIVATE_USER_SERVLET_MAPPING)) {
            url = url.substring(PRIVATE_USER_SERVLET_MAPPING.length() - 1);

            privateLayout = true;
        } else if (url.startsWith(PUBLIC_GROUP_SERVLET_MAPPING)) {
            url = url.substring(PUBLIC_GROUP_SERVLET_MAPPING.length() - 1);
        } else {
            String urlSBString = urlSB.toString();

            LayoutSet layoutSet = null;

            if (urlSBString.contains(DATA_HANDLER_PUBLIC_LAYOUT_SET_SECURE_URL)
                    || urlSBString.contains(DATA_HANDLER_PUBLIC_LAYOUT_SET_URL)) {

                layoutSet = group.getPublicLayoutSet();
            } else if (urlSBString.contains(DATA_HANDLER_PRIVATE_LAYOUT_SET_SECURE_URL)
                    || urlSBString.contains(DATA_HANDLER_PRIVATE_LAYOUT_SET_URL)) {

                layoutSet = group.getPrivateLayoutSet();
            }

            if (layoutSet == null) {
                continue;
            }

            privateLayout = layoutSet.isPrivateLayout();
        }

        Layout layout = LayoutLocalServiceUtil.fetchLayoutByFriendlyURL(groupId, privateLayout, url);

        if (layout != null) {
            continue;
        }

        String siteAdminURL = GroupConstants.CONTROL_PANEL_FRIENDLY_URL
                + PropsValues.CONTROL_PANEL_LAYOUT_FRIENDLY_URL;

        if (url.endsWith(VirtualLayoutConstants.CANONICAL_URL_SEPARATOR + siteAdminURL)) {

            url = url.substring(url.indexOf(siteAdminURL));
        }

        pos = url.indexOf(StringPool.SLASH, 1);

        String groupFriendlyURL = url;

        if (pos != -1) {
            groupFriendlyURL = url.substring(0, pos);
        }

        Group urlGroup = GroupLocalServiceUtil.fetchFriendlyURLGroup(group.getCompanyId(), groupFriendlyURL);

        if (urlGroup == null) {
            throw new NoSuchLayoutException();
        }

        if (pos == -1) {
            continue;
        }

        url = url.substring(pos);

        layout = LayoutLocalServiceUtil.getFriendlyURLLayout(urlGroup.getGroupId(), privateLayout, url);
    }
}

From source file:com.liferay.exportimport.internal.content.processor.LayoutReferencesExportImportContentProcessor.java

License:Open Source License

protected String replaceExportHostname(long groupId, String url, StringBundler urlSB) throws PortalException {

    if (!_http.hasProtocol(url)) {
        return url;
    }/* ww  w.j  av a2s.c  o  m*/

    boolean secure = _http.isSecure(url);

    int serverPort = _portal.getPortalServerPort(secure);

    if (serverPort == -1) {
        return url;
    }

    Group group = _groupLocalService.getGroup(groupId);

    LayoutSet publicLayoutSet = group.getPublicLayoutSet();

    String publicLayoutSetVirtualHostname = publicLayoutSet.getVirtualHostname();

    String portalUrl = StringPool.BLANK;

    if (Validator.isNotNull(publicLayoutSetVirtualHostname)) {
        portalUrl = _portal.getPortalURL(publicLayoutSetVirtualHostname, serverPort, secure);

        if (url.startsWith(portalUrl)) {
            if (secure) {
                urlSB.append(_DATA_HANDLER_PUBLIC_LAYOUT_SET_SECURE_URL);
            } else {
                urlSB.append(_DATA_HANDLER_PUBLIC_LAYOUT_SET_URL);
            }

            return url.substring(portalUrl.length());
        }
    }

    LayoutSet privateLayoutSet = group.getPrivateLayoutSet();

    String privateLayoutSetVirtualHostname = privateLayoutSet.getVirtualHostname();

    if (Validator.isNotNull(privateLayoutSetVirtualHostname)) {
        portalUrl = _portal.getPortalURL(privateLayoutSetVirtualHostname, serverPort, secure);

        if (url.startsWith(portalUrl)) {
            if (secure) {
                urlSB.append(_DATA_HANDLER_PRIVATE_LAYOUT_SET_SECURE_URL);
            } else {
                urlSB.append(_DATA_HANDLER_PRIVATE_LAYOUT_SET_URL);
            }

            return url.substring(portalUrl.length());
        }
    }

    Company company = _companyLocalService.getCompany(group.getCompanyId());

    String companyVirtualHostname = company.getVirtualHostname();

    if (Validator.isNotNull(companyVirtualHostname)) {
        portalUrl = _portal.getPortalURL(companyVirtualHostname, serverPort, secure);

        if (url.startsWith(portalUrl)) {
            if (secure) {
                urlSB.append(_DATA_HANDLER_COMPANY_SECURE_URL);
            } else {
                urlSB.append(_DATA_HANDLER_COMPANY_URL);
            }

            return url.substring(portalUrl.length());
        }
    }

    portalUrl = _portal.getPortalURL("localhost", serverPort, secure);

    if (url.startsWith(portalUrl)) {
        return url.substring(portalUrl.length());
    }

    return url;
}

From source file:com.liferay.exportimport.internal.content.processor.LayoutReferencesExportImportContentProcessor.java

License:Open Source License

protected String replaceExportLayoutReferences(PortletDataContext portletDataContext, StagedModel stagedModel,
        String content) throws Exception {

    Group group = _groupLocalService.getGroup(portletDataContext.getScopeGroupId());

    StringBuilder sb = new StringBuilder(content);

    String[] patterns = { "href=", "[[" };

    int beginPos = -1;
    int endPos = content.length();
    int offset = 0;

    while (true) {
        if (beginPos > -1) {
            endPos = beginPos - 1;// ww  w  .j a v a 2 s.  c  o m
        }

        beginPos = StringUtil.lastIndexOfAny(content, patterns, endPos);

        if (beginPos == -1) {
            break;
        }

        if (content.startsWith("href=", beginPos)) {
            offset = 5;

            char c = content.charAt(beginPos + offset);

            if ((c == CharPool.APOSTROPHE) || (c == CharPool.QUOTE)) {
                offset++;
            }
        } else if (content.charAt(beginPos) == CharPool.OPEN_BRACKET) {
            offset = 2;
        }

        endPos = StringUtil.indexOfAny(content, _LAYOUT_REFERENCE_STOP_CHARS, beginPos + offset, endPos);

        if (endPos == -1) {
            continue;
        }

        String url = content.substring(beginPos + offset, endPos);

        if (url.endsWith(StringPool.SLASH)) {
            url = url.substring(0, url.length() - 1);
        }

        StringBundler urlSB = new StringBundler(6);

        try {
            url = replaceExportHostname(portletDataContext.getScopeGroupId(), url, urlSB);

            if (!url.startsWith(StringPool.SLASH)) {
                continue;
            }

            String pathContext = _portal.getPathContext();

            if (pathContext.length() > 1) {
                if (!url.startsWith(pathContext)) {
                    continue;
                }

                urlSB.append(_DATA_HANDLER_PATH_CONTEXT);

                url = url.substring(pathContext.length());
            }

            if (!url.startsWith(StringPool.SLASH)) {
                continue;
            }

            int pos = url.indexOf(StringPool.SLASH, 1);

            String localePath = StringPool.BLANK;

            Locale locale = null;

            if (pos != -1) {
                localePath = url.substring(0, pos);

                locale = LocaleUtil.fromLanguageId(localePath.substring(1), true, false);
            }

            if (locale != null) {
                String urlWithoutLocale = url.substring(localePath.length());

                if (urlWithoutLocale.startsWith(_PRIVATE_GROUP_SERVLET_MAPPING)
                        || urlWithoutLocale.startsWith(_PRIVATE_USER_SERVLET_MAPPING)
                        || urlWithoutLocale.startsWith(_PUBLIC_GROUP_SERVLET_MAPPING)) {

                    urlSB.append(localePath);

                    url = urlWithoutLocale;
                }
            }

            boolean privateLayout = false;

            if (url.startsWith(_PRIVATE_GROUP_SERVLET_MAPPING)) {
                urlSB.append(_DATA_HANDLER_PRIVATE_GROUP_SERVLET_MAPPING);

                url = url.substring(_PRIVATE_GROUP_SERVLET_MAPPING.length() - 1);

                privateLayout = true;
            } else if (url.startsWith(_PRIVATE_USER_SERVLET_MAPPING)) {
                urlSB.append(_DATA_HANDLER_PRIVATE_USER_SERVLET_MAPPING);

                url = url.substring(_PRIVATE_USER_SERVLET_MAPPING.length() - 1);

                privateLayout = true;
            } else if (url.startsWith(_PUBLIC_GROUP_SERVLET_MAPPING)) {
                urlSB.append(_DATA_HANDLER_PUBLIC_SERVLET_MAPPING);

                url = url.substring(_PUBLIC_GROUP_SERVLET_MAPPING.length() - 1);
            } else {
                String urlSBString = urlSB.toString();

                LayoutSet layoutSet = null;

                if (urlSBString.contains(_DATA_HANDLER_PUBLIC_LAYOUT_SET_SECURE_URL)
                        || urlSBString.contains(_DATA_HANDLER_PUBLIC_LAYOUT_SET_URL)) {

                    layoutSet = group.getPublicLayoutSet();
                } else if (urlSBString.contains(_DATA_HANDLER_PRIVATE_LAYOUT_SET_SECURE_URL)
                        || urlSBString.contains(_DATA_HANDLER_PRIVATE_LAYOUT_SET_URL)) {

                    layoutSet = group.getPrivateLayoutSet();
                }

                if (layoutSet == null) {
                    continue;
                }

                privateLayout = layoutSet.isPrivateLayout();

                LayoutFriendlyURL layoutFriendlyUrl = _layoutFriendlyURLLocalService
                        .fetchFirstLayoutFriendlyURL(group.getGroupId(), privateLayout, url);

                if (layoutFriendlyUrl == null) {
                    continue;
                }

                if (privateLayout) {
                    if (group.isUser()) {
                        urlSB.append(_DATA_HANDLER_PRIVATE_USER_SERVLET_MAPPING);
                    } else {
                        urlSB.append(_DATA_HANDLER_PRIVATE_GROUP_SERVLET_MAPPING);
                    }
                } else {
                    urlSB.append(_DATA_HANDLER_PUBLIC_SERVLET_MAPPING);
                }

                urlSB.append(_DATA_HANDLER_GROUP_FRIENDLY_URL);

                continue;
            }

            long groupId = group.getGroupId();

            Layout layout = _layoutLocalService.fetchLayoutByFriendlyURL(groupId, privateLayout, url);

            if (layout != null) {
                Element entityElement = portletDataContext.getExportDataElement(stagedModel);

                portletDataContext.addReferenceElement(stagedModel, entityElement, layout,
                        PortletDataContext.REFERENCE_TYPE_DEPENDENCY, true);

                continue;
            }

            pos = url.indexOf(StringPool.SLASH, 1);

            String groupFriendlyURL = url;

            if (pos != -1) {
                groupFriendlyURL = url.substring(0, pos);
            }

            Group urlGroup = _groupLocalService.fetchFriendlyURLGroup(group.getCompanyId(), groupFriendlyURL);

            if (urlGroup == null) {
                throw new NoSuchLayoutException();
            }

            urlSB.append(_DATA_HANDLER_GROUP_FRIENDLY_URL);

            // Append the UUID. This information will be used during the
            // import process when looking up the proper group for the link.

            urlSB.append(StringPool.AT);

            if (urlGroup.isStagedRemotely()) {
                String remoteGroupUuid = urlGroup.getTypeSettingsProperty("remoteGroupUUID");

                if (Validator.isNotNull(remoteGroupUuid)) {
                    urlSB.append(remoteGroupUuid);
                }
            } else if (urlGroup.isStaged()) {
                Group liveGroup = urlGroup.getLiveGroup();

                urlSB.append(liveGroup.getUuid());
            } else if (group.getGroupId() == urlGroup.getGroupId()) {
                urlSB.append(urlGroup.getFriendlyURL());
            } else {
                urlSB.append(urlGroup.getUuid());
            }

            urlSB.append(StringPool.AT);

            String siteAdminURL = GroupConstants.CONTROL_PANEL_FRIENDLY_URL
                    + PropsValues.CONTROL_PANEL_LAYOUT_FRIENDLY_URL;

            if (url.endsWith(siteAdminURL)) {
                urlSB.append(_DATA_HANDLER_SITE_ADMIN_URL);

                url = StringPool.BLANK;

                continue;
            }

            if (pos == -1) {
                url = StringPool.BLANK;

                continue;
            }

            url = url.substring(pos);

            layout = _layoutLocalService.getFriendlyURLLayout(urlGroup.getGroupId(), privateLayout, url);

            Element entityElement = portletDataContext.getExportDataElement(stagedModel);

            portletDataContext.addReferenceElement(stagedModel, entityElement, layout,
                    PortletDataContext.REFERENCE_TYPE_DEPENDENCY, true);
        } catch (Exception e) {
            if (e instanceof NoSuchLayoutException
                    && !_exportImportServiceConfiguration.validateLayoutReferences()) {

                continue;
            }

            if (_log.isDebugEnabled()) {
                _log.debug(e, e);
            } else if (_log.isWarnEnabled()) {
                StringBundler exceptionSB = new StringBundler(6);

                exceptionSB.append("Unable to process layout URL ");
                exceptionSB.append(url);
                exceptionSB.append(" for staged model ");
                exceptionSB.append(stagedModel.getModelClassName());
                exceptionSB.append(" with primary key ");
                exceptionSB.append(stagedModel.getPrimaryKeyObj());

                _log.warn(exceptionSB.toString());
            }
        } finally {
            if (urlSB.length() > 0) {
                urlSB.append(url);

                url = urlSB.toString();
            }

            sb.replace(beginPos + offset, endPos, url);
        }
    }

    return sb.toString();
}

From source file:com.liferay.exportimport.internal.content.processor.LayoutReferencesExportImportContentProcessor.java

License:Open Source License

protected String replaceImportLayoutReferences(PortletDataContext portletDataContext, String content)
        throws Exception {

    String companyPortalURL = StringPool.BLANK;
    String privateLayoutSetPortalURL = StringPool.BLANK;
    String publicLayoutSetPortalURL = StringPool.BLANK;

    Group group = _groupLocalService.getGroup(portletDataContext.getScopeGroupId());

    Company company = _companyLocalService.getCompany(group.getCompanyId());

    LayoutSet privateLayoutSet = group.getPrivateLayoutSet();
    LayoutSet publicLayoutSet = group.getPublicLayoutSet();

    int serverPort = _portal.getPortalServerPort(false);

    if (serverPort != -1) {
        if (Validator.isNotNull(company.getVirtualHostname())) {
            companyPortalURL = _portal.getPortalURL(company.getVirtualHostname(), serverPort, false);
        }// w ww.  j a  v a  2 s . c o m

        if (Validator.isNotNull(privateLayoutSet.getVirtualHostname())) {
            privateLayoutSetPortalURL = _portal.getPortalURL(privateLayoutSet.getVirtualHostname(), serverPort,
                    false);
        }

        if (Validator.isNotNull(publicLayoutSet.getVirtualHostname())) {
            publicLayoutSetPortalURL = _portal.getPortalURL(publicLayoutSet.getVirtualHostname(), serverPort,
                    false);
        }
    }

    int secureSecurePort = _portal.getPortalServerPort(true);

    String companySecurePortalURL = StringPool.BLANK;
    String privateLayoutSetSecurePortalURL = StringPool.BLANK;
    String publicLayoutSetSecurePortalURL = StringPool.BLANK;

    if (secureSecurePort != -1) {
        if (Validator.isNotNull(company.getVirtualHostname())) {
            companySecurePortalURL = _portal.getPortalURL(company.getVirtualHostname(), secureSecurePort, true);
        }

        if (Validator.isNotNull(privateLayoutSet.getVirtualHostname())) {
            privateLayoutSetSecurePortalURL = _portal.getPortalURL(privateLayoutSet.getVirtualHostname(),
                    secureSecurePort, true);
        }

        if (Validator.isNotNull(publicLayoutSet.getVirtualHostname())) {
            publicLayoutSetSecurePortalURL = _portal.getPortalURL(publicLayoutSet.getVirtualHostname(),
                    secureSecurePort, true);
        }
    }

    StringBundler sb = new StringBundler(3);

    sb.append(VirtualLayoutConstants.CANONICAL_URL_SEPARATOR);
    sb.append(GroupConstants.CONTROL_PANEL_FRIENDLY_URL);
    sb.append(PropsValues.CONTROL_PANEL_LAYOUT_FRIENDLY_URL);

    content = StringUtil.replace(content, _DATA_HANDLER_COMPANY_SECURE_URL, companySecurePortalURL);
    content = StringUtil.replace(content, _DATA_HANDLER_COMPANY_URL, companyPortalURL);

    // Group friendly URLs

    while (true) {
        int groupFriendlyUrlPos = content.indexOf(_DATA_HANDLER_GROUP_FRIENDLY_URL);

        if (groupFriendlyUrlPos == -1) {
            break;
        }

        int groupUuidPos = groupFriendlyUrlPos + _DATA_HANDLER_GROUP_FRIENDLY_URL.length();

        int endIndex = content.indexOf(StringPool.AT, groupUuidPos + 1);

        if (endIndex < (groupUuidPos + 1)) {
            content = StringUtil.replaceFirst(content, _DATA_HANDLER_GROUP_FRIENDLY_URL, StringPool.BLANK,
                    groupFriendlyUrlPos);

            continue;
        }

        String groupUuid = content.substring(groupUuidPos + 1, endIndex);

        Group groupFriendlyUrlGroup = _groupLocalService.fetchGroupByUuidAndCompanyId(groupUuid,
                portletDataContext.getCompanyId());

        if ((groupFriendlyUrlGroup == null) || groupUuid.startsWith(StringPool.SLASH)) {

            content = StringUtil.replaceFirst(content, _DATA_HANDLER_GROUP_FRIENDLY_URL, group.getFriendlyURL(),
                    groupFriendlyUrlPos);
            content = StringUtil.replaceFirst(content, StringPool.AT + groupUuid + StringPool.AT,
                    StringPool.BLANK, content.indexOf(group.getFriendlyURL()));

            continue;
        }

        content = StringUtil.replaceFirst(content, _DATA_HANDLER_GROUP_FRIENDLY_URL, StringPool.BLANK,
                groupFriendlyUrlPos);
        content = StringUtil.replaceFirst(content, StringPool.AT + groupUuid + StringPool.AT,
                groupFriendlyUrlGroup.getFriendlyURL(), groupFriendlyUrlPos);
    }

    content = StringUtil.replace(content, _DATA_HANDLER_PATH_CONTEXT, _portal.getPathContext());
    content = StringUtil.replace(content, _DATA_HANDLER_PRIVATE_GROUP_SERVLET_MAPPING,
            PropsValues.LAYOUT_FRIENDLY_URL_PRIVATE_GROUP_SERVLET_MAPPING);
    content = StringUtil.replace(content, _DATA_HANDLER_PRIVATE_LAYOUT_SET_SECURE_URL,
            privateLayoutSetSecurePortalURL);
    content = StringUtil.replace(content, _DATA_HANDLER_PRIVATE_LAYOUT_SET_URL, privateLayoutSetPortalURL);
    content = StringUtil.replace(content, _DATA_HANDLER_PRIVATE_USER_SERVLET_MAPPING,
            PropsValues.LAYOUT_FRIENDLY_URL_PRIVATE_USER_SERVLET_MAPPING);
    content = StringUtil.replace(content, _DATA_HANDLER_PUBLIC_LAYOUT_SET_SECURE_URL,
            publicLayoutSetSecurePortalURL);
    content = StringUtil.replace(content, _DATA_HANDLER_PUBLIC_LAYOUT_SET_URL, publicLayoutSetPortalURL);
    content = StringUtil.replace(content, _DATA_HANDLER_PUBLIC_SERVLET_MAPPING,
            PropsValues.LAYOUT_FRIENDLY_URL_PUBLIC_SERVLET_MAPPING);
    content = StringUtil.replace(content, _DATA_HANDLER_SITE_ADMIN_URL, sb.toString());

    return content;
}

From source file:com.liferay.exportimport.internal.content.processor.LayoutReferencesExportImportContentProcessor.java

License:Open Source License

protected void validateLayoutReferences(long groupId, String content) throws PortalException {

    if (!_exportImportServiceConfiguration.validateLayoutReferences()) {
        return;/*w  w  w . ja v  a  2  s . co m*/
    }

    Group group = _groupLocalService.getGroup(groupId);

    String[] patterns = { "href=", "[[" };

    int beginPos = -1;
    int endPos = content.length();
    int offset = 0;

    while (true) {
        if (beginPos > -1) {
            endPos = beginPos - 1;
        }

        beginPos = StringUtil.lastIndexOfAny(content, patterns, endPos);

        if (beginPos == -1) {
            break;
        }

        if (content.startsWith("href=", beginPos)) {
            offset = 5;

            char c = content.charAt(beginPos + offset);

            if ((c == CharPool.APOSTROPHE) || (c == CharPool.QUOTE)) {
                offset++;
            }
        } else if (content.charAt(beginPos) == CharPool.OPEN_BRACKET) {
            offset = 2;
        }

        endPos = StringUtil.indexOfAny(content, _LAYOUT_REFERENCE_STOP_CHARS, beginPos + offset, endPos);

        if (endPos == -1) {
            continue;
        }

        String url = content.substring(beginPos + offset, endPos);

        endPos = url.indexOf(Portal.FRIENDLY_URL_SEPARATOR);

        if (endPos != -1) {
            url = url.substring(0, endPos);
        }

        if (url.endsWith(StringPool.SLASH)) {
            url = url.substring(0, url.length() - 1);
        }

        StringBundler urlSB = new StringBundler(1);

        url = replaceExportHostname(groupId, url, urlSB);

        if (!url.startsWith(StringPool.SLASH)) {
            continue;
        }

        String pathContext = _portal.getPathContext();

        if (pathContext.length() > 1) {
            if (!url.startsWith(pathContext)) {
                continue;
            }

            url = url.substring(pathContext.length());
        }

        if (!url.startsWith(StringPool.SLASH)) {
            continue;
        }

        int pos = url.indexOf(StringPool.SLASH, 1);

        String localePath = StringPool.BLANK;

        Locale locale = null;

        if (pos != -1) {
            localePath = url.substring(0, pos);

            locale = LocaleUtil.fromLanguageId(localePath.substring(1), true, false);
        }

        if (locale != null) {
            String urlWithoutLocale = url.substring(localePath.length());

            if (urlWithoutLocale.startsWith(_PRIVATE_GROUP_SERVLET_MAPPING)
                    || urlWithoutLocale.startsWith(_PRIVATE_USER_SERVLET_MAPPING)
                    || urlWithoutLocale.startsWith(_PUBLIC_GROUP_SERVLET_MAPPING)) {

                url = urlWithoutLocale;
            }
        }

        boolean privateLayout = false;

        if (url.startsWith(_PRIVATE_GROUP_SERVLET_MAPPING)) {
            url = url.substring(_PRIVATE_GROUP_SERVLET_MAPPING.length() - 1);

            privateLayout = true;
        } else if (url.startsWith(_PRIVATE_USER_SERVLET_MAPPING)) {
            url = url.substring(_PRIVATE_USER_SERVLET_MAPPING.length() - 1);

            privateLayout = true;
        } else if (url.startsWith(_PUBLIC_GROUP_SERVLET_MAPPING)) {
            url = url.substring(_PUBLIC_GROUP_SERVLET_MAPPING.length() - 1);
        } else {
            String urlSBString = urlSB.toString();

            LayoutSet layoutSet = null;

            if (urlSBString.contains(_DATA_HANDLER_PUBLIC_LAYOUT_SET_SECURE_URL)
                    || urlSBString.contains(_DATA_HANDLER_PUBLIC_LAYOUT_SET_URL)) {

                layoutSet = group.getPublicLayoutSet();
            } else if (urlSBString.contains(_DATA_HANDLER_PRIVATE_LAYOUT_SET_SECURE_URL)
                    || urlSBString.contains(_DATA_HANDLER_PRIVATE_LAYOUT_SET_URL)) {

                layoutSet = group.getPrivateLayoutSet();
            }

            if (layoutSet == null) {
                continue;
            }

            privateLayout = layoutSet.isPrivateLayout();
        }

        Layout layout = _layoutLocalService.fetchLayoutByFriendlyURL(groupId, privateLayout, url);

        if (layout != null) {
            continue;
        }

        String siteAdminURL = GroupConstants.CONTROL_PANEL_FRIENDLY_URL
                + PropsValues.CONTROL_PANEL_LAYOUT_FRIENDLY_URL;

        if (url.endsWith(VirtualLayoutConstants.CANONICAL_URL_SEPARATOR + siteAdminURL)) {

            url = url.substring(url.indexOf(siteAdminURL));
        }

        pos = url.indexOf(StringPool.SLASH, 1);

        String groupFriendlyURL = url;

        if (pos != -1) {
            groupFriendlyURL = url.substring(0, pos);
        }

        Group urlGroup = _groupLocalService.fetchFriendlyURLGroup(group.getCompanyId(), groupFriendlyURL);

        if (urlGroup == null) {
            throw new NoSuchLayoutException(
                    "Unable validate referenced page because it cannot be " + "found with url: " + url);
        }

        if (pos == -1) {
            continue;
        }

        url = url.substring(pos);

        try {
            layout = _layoutLocalService.getFriendlyURLLayout(urlGroup.getGroupId(), privateLayout, url);
        } catch (NoSuchLayoutException nsle) {
            throw new NoSuchLayoutException("Unable to validate referenced page because the page "
                    + "group cannot be found: " + groupId, nsle);
        }
    }
}

From source file:com.liferay.invitation.invite.members.web.internal.notifications.InviteMembersUserNotificationHandler.java

License:Open Source License

protected String getSiteDescriptiveName(long groupId, ServiceContext serviceContext) throws Exception {

    Group group = _groupLocalService.getGroup(groupId);

    StringBundler sb = new StringBundler(6);

    sb.append("<a");

    if (group.hasPublicLayouts()) {
        sb.append(" href=\"");

        String groupFriendlyURL = _portal.getGroupFriendlyURL(group.getPublicLayoutSet(),
                serviceContext.getThemeDisplay());

        sb.append(groupFriendlyURL);/*  w ww  .  j  av a 2s .c om*/

        sb.append("\">");
    } else {
        sb.append(">");
    }

    sb.append(HtmlUtil.escape(group.getDescriptiveName(serviceContext.getLocale())));
    sb.append("</a>");

    return sb.toString();
}

From source file:com.liferay.site.admin.web.internal.portlet.SiteAdminPortlet.java

License:Open Source License

protected Group updateGroup(ActionRequest actionRequest) throws Exception {
    ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);

    long userId = portal.getUserId(actionRequest);

    long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");

    long parentGroupId = ParamUtil.getLong(actionRequest, "parentGroupSearchContainerPrimaryKeys",
            GroupConstants.DEFAULT_PARENT_GROUP_ID);
    Map<Locale, String> nameMap = null;
    Map<Locale, String> descriptionMap = null;
    int type = 0;
    String friendlyURL = null;/*from   w  w  w.jav a 2  s.  c om*/
    boolean inheritContent = false;
    boolean active = false;
    boolean manualMembership = true;

    int membershipRestriction = GroupConstants.DEFAULT_MEMBERSHIP_RESTRICTION;

    boolean actionRequestMembershipRestriction = ParamUtil.getBoolean(actionRequest, "membershipRestriction");

    if (actionRequestMembershipRestriction && (parentGroupId != GroupConstants.DEFAULT_PARENT_GROUP_ID)) {

        membershipRestriction = GroupConstants.MEMBERSHIP_RESTRICTION_TO_PARENT_SITE_MEMBERS;
    }

    ServiceContext serviceContext = ServiceContextFactory.getInstance(Group.class.getName(), actionRequest);

    ServiceContextThreadLocal.pushServiceContext(serviceContext);

    Group liveGroup = null;

    if (liveGroupId <= 0) {

        // Add group

        nameMap = LocalizationUtil.getLocalizationMap(actionRequest, "name");
        descriptionMap = LocalizationUtil.getLocalizationMap(actionRequest, "description");
        type = ParamUtil.getInteger(actionRequest, "type");
        friendlyURL = ParamUtil.getString(actionRequest, "friendlyURL");
        manualMembership = ParamUtil.getBoolean(actionRequest, "manualMembership");
        inheritContent = ParamUtil.getBoolean(actionRequest, "inheritContent");
        active = ParamUtil.getBoolean(actionRequest, "active");

        liveGroup = groupService.addGroup(parentGroupId, GroupConstants.DEFAULT_LIVE_GROUP_ID, nameMap,
                descriptionMap, type, manualMembership, membershipRestriction, friendlyURL, true,
                inheritContent, active, serviceContext);

        LiveUsers.joinGroup(themeDisplay.getCompanyId(), liveGroup.getGroupId(), userId);
    } else {

        // Update group

        liveGroup = groupLocalService.getGroup(liveGroupId);

        nameMap = LocalizationUtil.getLocalizationMap(actionRequest, "name", liveGroup.getNameMap());
        descriptionMap = LocalizationUtil.getLocalizationMap(actionRequest, "description",
                liveGroup.getDescriptionMap());
        type = ParamUtil.getInteger(actionRequest, "type", liveGroup.getType());
        manualMembership = ParamUtil.getBoolean(actionRequest, "manualMembership",
                liveGroup.isManualMembership());
        friendlyURL = ParamUtil.getString(actionRequest, "friendlyURL", liveGroup.getFriendlyURL());
        inheritContent = ParamUtil.getBoolean(actionRequest, "inheritContent", liveGroup.getInheritContent());
        active = ParamUtil.getBoolean(actionRequest, "active", liveGroup.getActive());

        liveGroup = groupService.updateGroup(liveGroupId, parentGroupId, nameMap, descriptionMap, type,
                manualMembership, membershipRestriction, friendlyURL, inheritContent, active, serviceContext);

        if (type == GroupConstants.TYPE_SITE_OPEN) {
            List<MembershipRequest> membershipRequests = membershipRequestLocalService.search(liveGroupId,
                    MembershipRequestConstants.STATUS_PENDING, QueryUtil.ALL_POS, QueryUtil.ALL_POS);

            for (MembershipRequest membershipRequest : membershipRequests) {
                membershipRequestService.updateStatus(membershipRequest.getMembershipRequestId(),
                        themeDisplay.translate("your-membership-has-been-approved"),
                        MembershipRequestConstants.STATUS_APPROVED, serviceContext);

                LiveUsers.joinGroup(themeDisplay.getCompanyId(), membershipRequest.getGroupId(),
                        new long[] { membershipRequest.getUserId() });
            }
        }
    }

    // Settings

    UnicodeProperties typeSettingsProperties = liveGroup.getTypeSettingsProperties();

    String customJspServletContextName = ParamUtil.getString(actionRequest, "customJspServletContextName",
            typeSettingsProperties.getProperty("customJspServletContextName"));

    typeSettingsProperties.setProperty("customJspServletContextName", customJspServletContextName);

    typeSettingsProperties.setProperty("defaultSiteRoleIds",
            ListUtil.toString(getRoles(actionRequest), Role.ROLE_ID_ACCESSOR, StringPool.COMMA));
    typeSettingsProperties.setProperty("defaultTeamIds",
            ListUtil.toString(getTeams(actionRequest), Team.TEAM_ID_ACCESSOR, StringPool.COMMA));

    String[] analyticsTypes = PrefsPropsUtil.getStringArray(themeDisplay.getCompanyId(),
            PropsKeys.ADMIN_ANALYTICS_TYPES, StringPool.NEW_LINE);

    for (String analyticsType : analyticsTypes) {
        if (StringUtil.equalsIgnoreCase(analyticsType, "google")) {
            String googleAnalyticsId = ParamUtil.getString(actionRequest, "googleAnalyticsId",
                    typeSettingsProperties.getProperty("googleAnalyticsId"));

            typeSettingsProperties.setProperty("googleAnalyticsId", googleAnalyticsId);
        } else {
            String analyticsScript = ParamUtil.getString(actionRequest, Sites.ANALYTICS_PREFIX + analyticsType,
                    typeSettingsProperties.getProperty(analyticsType));

            typeSettingsProperties.setProperty(Sites.ANALYTICS_PREFIX + analyticsType, analyticsScript);
        }
    }

    boolean trashEnabled = ParamUtil.getBoolean(actionRequest, "trashEnabled",
            GetterUtil.getBoolean(typeSettingsProperties.getProperty("trashEnabled"), true));

    typeSettingsProperties.setProperty("trashEnabled", String.valueOf(trashEnabled));

    int trashEntriesMaxAgeCompany = PrefsPropsUtil.getInteger(themeDisplay.getCompanyId(),
            PropsKeys.TRASH_ENTRIES_MAX_AGE);

    int trashEntriesMaxAgeGroup = ParamUtil.getInteger(actionRequest, "trashEntriesMaxAge");

    if (trashEntriesMaxAgeGroup <= 0) {
        trashEntriesMaxAgeGroup = GetterUtil.getInteger(
                typeSettingsProperties.getProperty("trashEntriesMaxAge"), trashEntriesMaxAgeCompany);
    }

    if (trashEntriesMaxAgeGroup != trashEntriesMaxAgeCompany) {
        typeSettingsProperties.setProperty("trashEntriesMaxAge",
                String.valueOf(GetterUtil.getInteger(trashEntriesMaxAgeGroup)));
    } else {
        typeSettingsProperties.remove("trashEntriesMaxAge");
    }

    int contentSharingWithChildrenEnabled = ParamUtil.getInteger(actionRequest,
            "contentSharingWithChildrenEnabled",
            GetterUtil.getInteger(typeSettingsProperties.getProperty("contentSharingWithChildrenEnabled"),
                    Sites.CONTENT_SHARING_WITH_CHILDREN_DEFAULT_VALUE));

    typeSettingsProperties.setProperty("contentSharingWithChildrenEnabled",
            String.valueOf(contentSharingWithChildrenEnabled));

    UnicodeProperties formTypeSettingsProperties = PropertiesParamUtil.getProperties(actionRequest,
            "TypeSettingsProperties--");

    typeSettingsProperties.putAll(formTypeSettingsProperties);

    // Virtual hosts

    LayoutSet publicLayoutSet = liveGroup.getPublicLayoutSet();

    String publicVirtualHost = ParamUtil.getString(actionRequest, "publicVirtualHost",
            publicLayoutSet.getVirtualHostname());

    layoutSetService.updateVirtualHost(liveGroup.getGroupId(), false, publicVirtualHost);

    LayoutSet privateLayoutSet = liveGroup.getPrivateLayoutSet();

    String privateVirtualHost = ParamUtil.getString(actionRequest, "privateVirtualHost",
            privateLayoutSet.getVirtualHostname());

    layoutSetService.updateVirtualHost(liveGroup.getGroupId(), true, privateVirtualHost);

    // Staging

    if (liveGroup.hasStagingGroup()) {
        Group stagingGroup = liveGroup.getStagingGroup();

        friendlyURL = ParamUtil.getString(actionRequest, "stagingFriendlyURL", stagingGroup.getFriendlyURL());

        groupService.updateFriendlyURL(stagingGroup.getGroupId(), friendlyURL);

        LayoutSet stagingPublicLayoutSet = stagingGroup.getPublicLayoutSet();

        publicVirtualHost = ParamUtil.getString(actionRequest, "stagingPublicVirtualHost",
                stagingPublicLayoutSet.getVirtualHostname());

        layoutSetService.updateVirtualHost(stagingGroup.getGroupId(), false, publicVirtualHost);

        LayoutSet stagingPrivateLayoutSet = stagingGroup.getPrivateLayoutSet();

        privateVirtualHost = ParamUtil.getString(actionRequest, "stagingPrivateVirtualHost",
                stagingPrivateLayoutSet.getVirtualHostname());

        layoutSetService.updateVirtualHost(stagingGroup.getGroupId(), true, privateVirtualHost);

        UnicodeProperties stagedGroupTypeSettingsProperties = stagingGroup.getTypeSettingsProperties();

        stagedGroupTypeSettingsProperties.putAll(formTypeSettingsProperties);

        groupService.updateGroup(stagingGroup.getGroupId(), stagedGroupTypeSettingsProperties.toString());
    }

    liveGroup = groupService.updateGroup(liveGroup.getGroupId(), typeSettingsProperties.toString());

    // Layout set prototypes

    long privateLayoutSetPrototypeId = ParamUtil.getLong(actionRequest, "privateLayoutSetPrototypeId");
    long publicLayoutSetPrototypeId = ParamUtil.getLong(actionRequest, "publicLayoutSetPrototypeId");

    boolean privateLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean(actionRequest,
            "privateLayoutSetPrototypeLinkEnabled", privateLayoutSet.isLayoutSetPrototypeLinkEnabled());
    boolean publicLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean(actionRequest,
            "publicLayoutSetPrototypeLinkEnabled", publicLayoutSet.isLayoutSetPrototypeLinkEnabled());

    if ((privateLayoutSetPrototypeId == 0) && (publicLayoutSetPrototypeId == 0)
            && !privateLayoutSetPrototypeLinkEnabled && !publicLayoutSetPrototypeLinkEnabled) {

        long layoutSetPrototypeId = ParamUtil.getLong(actionRequest, "layoutSetPrototypeId");
        int layoutSetVisibility = ParamUtil.getInteger(actionRequest, "layoutSetVisibility");
        boolean layoutSetPrototypeLinkEnabled = ParamUtil.getBoolean(actionRequest,
                "layoutSetPrototypeLinkEnabled", layoutSetPrototypeId > 0);

        if (layoutSetVisibility == _LAYOUT_SET_VISIBILITY_PRIVATE) {
            privateLayoutSetPrototypeId = layoutSetPrototypeId;

            privateLayoutSetPrototypeLinkEnabled = layoutSetPrototypeLinkEnabled;
        } else {
            publicLayoutSetPrototypeId = layoutSetPrototypeId;

            publicLayoutSetPrototypeLinkEnabled = layoutSetPrototypeLinkEnabled;
        }
    }

    if (!liveGroup.isStaged() || liveGroup.isStagedRemotely()) {
        SitesUtil.updateLayoutSetPrototypesLinks(liveGroup, publicLayoutSetPrototypeId,
                privateLayoutSetPrototypeId, publicLayoutSetPrototypeLinkEnabled,
                privateLayoutSetPrototypeLinkEnabled);
    } else {
        SitesUtil.updateLayoutSetPrototypesLinks(liveGroup.getStagingGroup(), publicLayoutSetPrototypeId,
                privateLayoutSetPrototypeId, publicLayoutSetPrototypeLinkEnabled,
                privateLayoutSetPrototypeLinkEnabled);
    }

    themeDisplay.setSiteGroupId(liveGroup.getGroupId());

    return liveGroup;
}