Example usage for com.liferay.portal.kernel.model Layout setLayoutSet

List of usage examples for com.liferay.portal.kernel.model Layout setLayoutSet

Introduction

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

Prototype

public void setLayoutSet(LayoutSet layoutSet);

Source Link

Usage

From source file:com.liferay.layout.admin.web.internal.exportimport.data.handler.LayoutStagedModelDataHandler.java

License:Open Source License

@Override
protected void doImportStagedModel(PortletDataContext portletDataContext, Layout layout) throws Exception {

    final long groupId = portletDataContext.getGroupId();
    long userId = portletDataContext.getUserId(layout.getUserUuid());

    Element layoutElement = portletDataContext.getImportDataStagedModelElement(layout);

    long layoutId = GetterUtil.getLong(layoutElement.attributeValue("layout-id"));

    long oldLayoutId = layoutId;

    final boolean privateLayout = portletDataContext.isPrivateLayout();

    Map<Long, Layout> layouts = (Map<Long, Layout>) portletDataContext
            .getNewPrimaryKeysMap(Layout.class + ".layout");

    Layout existingLayout = null;//www  . j  a va2  s .c  o  m
    Layout importedLayout = null;

    String friendlyURL = layout.getFriendlyURL();

    String layoutsImportMode = MapUtil.getString(portletDataContext.getParameterMap(),
            PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE,
            PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_MERGE_BY_LAYOUT_UUID);

    if (layoutsImportMode.equals(PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_ADD_AS_NEW)) {

        layoutId = _layoutLocalService.getNextLayoutId(groupId, privateLayout);

        friendlyURL = StringPool.SLASH + layoutId;
    } else if (layoutsImportMode.equals(PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_MERGE_BY_LAYOUT_NAME)) {

        Locale locale = LocaleUtil.getSiteDefault();

        String localizedName = layout.getName(locale);

        List<Layout> previousLayouts = _layoutLocalService.getLayouts(groupId, privateLayout);

        for (Layout curLayout : previousLayouts) {
            if (localizedName.equals(curLayout.getName(locale))
                    || friendlyURL.equals(curLayout.getFriendlyURL())) {

                existingLayout = curLayout;

                break;
            }
        }

        if (existingLayout == null) {
            layoutId = _layoutLocalService.getNextLayoutId(groupId, privateLayout);
        }
    } else if (layoutsImportMode.equals(PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_CREATED_FROM_PROTOTYPE)) {

        existingLayout = _layoutLocalService.fetchLayoutByUuidAndGroupId(layout.getUuid(), groupId,
                privateLayout);

        if (SitesUtil.isLayoutModifiedSinceLastMerge(existingLayout)) {
            layouts.put(oldLayoutId, existingLayout);

            return;
        }

        LayoutFriendlyURL layoutFriendlyURL = _layoutFriendlyURLLocalService
                .fetchFirstLayoutFriendlyURL(groupId, privateLayout, friendlyURL);

        if ((layoutFriendlyURL != null) && (existingLayout == null)) {
            Layout mergeFailFriendlyURLLayout = _layoutLocalService.getLayout(layoutFriendlyURL.getPlid());

            SitesUtil.addMergeFailFriendlyURLLayout(mergeFailFriendlyURLLayout);

            if (!_log.isWarnEnabled()) {
                return;
            }

            StringBundler sb = new StringBundler(6);

            sb.append("Layout with layout ID ");
            sb.append(layout.getLayoutId());
            sb.append(" cannot be propagated because the friendly URL ");
            sb.append("conflicts with the friendly URL of layout with ");
            sb.append("layout ID ");
            sb.append(mergeFailFriendlyURLLayout.getLayoutId());

            _log.warn(sb.toString());

            return;
        }
    } else {

        // The default behavior of import mode is
        // PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_MERGE_BY_LAYOUT_UUID

        existingLayout = _layoutLocalService.fetchLayoutByUuidAndGroupId(layout.getUuid(), groupId,
                privateLayout);

        if (existingLayout == null) {
            existingLayout = _layoutLocalService.fetchLayoutByFriendlyURL(groupId, privateLayout, friendlyURL);
        }

        if (existingLayout == null) {
            layoutId = _layoutLocalService.getNextLayoutId(groupId, privateLayout);
        }
    }

    if (_log.isDebugEnabled()) {
        StringBundler sb = new StringBundler(7);

        sb.append("Layout with {groupId=");
        sb.append(groupId);
        sb.append(",privateLayout=");
        sb.append(privateLayout);
        sb.append(",layoutId=");
        sb.append(layoutId);

        if (existingLayout == null) {
            sb.append("} does not exist");

            _log.debug(sb.toString());
        } else {
            sb.append("} exists");

            _log.debug(sb.toString());
        }
    }

    if (existingLayout == null) {
        long plid = _counterLocalService.increment();

        importedLayout = _layoutLocalService.createLayout(plid);

        if (layoutsImportMode.equals(PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_CREATED_FROM_PROTOTYPE)) {

            importedLayout.setSourcePrototypeLayoutUuid(layout.getUuid());

            layoutId = _layoutLocalService.getNextLayoutId(groupId, privateLayout);
        } else {
            importedLayout.setCreateDate(layout.getCreateDate());
            importedLayout.setModifiedDate(layout.getModifiedDate());
            importedLayout.setLayoutPrototypeUuid(layout.getLayoutPrototypeUuid());
            importedLayout.setLayoutPrototypeLinkEnabled(layout.isLayoutPrototypeLinkEnabled());
            importedLayout.setSourcePrototypeLayoutUuid(layout.getSourcePrototypeLayoutUuid());
        }

        importedLayout.setUuid(layout.getUuid());
        importedLayout.setGroupId(groupId);
        importedLayout.setUserId(userId);
        importedLayout.setPrivateLayout(privateLayout);
        importedLayout.setLayoutId(layoutId);

        initNewLayoutPermissions(portletDataContext.getCompanyId(), groupId, userId, layout, importedLayout,
                privateLayout);

        LayoutSet layoutSet = _layoutSetLocalService.getLayoutSet(groupId, privateLayout);

        importedLayout.setLayoutSet(layoutSet);
    } else {
        importedLayout = existingLayout;
    }

    portletDataContext.setPlid(importedLayout.getPlid());
    portletDataContext.setOldPlid(layout.getPlid());

    long parentLayoutId = layout.getParentLayoutId();

    String parentLayoutUuid = GetterUtil.getString(layoutElement.attributeValue("parent-layout-uuid"));

    Element parentLayoutElement = portletDataContext.getReferenceDataElement(layout, Layout.class,
            layout.getGroupId(), parentLayoutUuid);

    if ((parentLayoutId != LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) && (parentLayoutElement != null)) {

        StagedModelDataHandlerUtil.importStagedModel(portletDataContext, parentLayoutElement);

        Layout importedParentLayout = layouts.get(parentLayoutId);

        parentLayoutId = importedParentLayout.getLayoutId();
    }

    if (_log.isDebugEnabled()) {
        StringBundler sb = new StringBundler(4);

        sb.append("Importing layout with layout ID ");
        sb.append(layoutId);
        sb.append(" and parent layout ID ");
        sb.append(parentLayoutId);

        _log.debug(sb.toString());
    }

    importedLayout.setCompanyId(portletDataContext.getCompanyId());

    if (layout.getLayoutPrototypeUuid() != null) {
        importedLayout.setModifiedDate(new Date());
    }

    importedLayout.setParentLayoutId(parentLayoutId);
    importedLayout.setName(layout.getName());
    importedLayout.setTitle(layout.getTitle());
    importedLayout.setDescription(layout.getDescription());
    importedLayout.setKeywords(layout.getKeywords());
    importedLayout.setRobots(layout.getRobots());
    importedLayout.setType(layout.getType());

    String portletsMergeMode = MapUtil.getString(portletDataContext.getParameterMap(),
            PortletDataHandlerKeys.PORTLETS_MERGE_MODE, PortletDataHandlerKeys.PORTLETS_MERGE_MODE_REPLACE);

    if (Objects.equals(layout.getType(), LayoutConstants.TYPE_PORTLET)
            && Validator.isNotNull(layout.getTypeSettings())
            && !portletsMergeMode.equals(PortletDataHandlerKeys.PORTLETS_MERGE_MODE_REPLACE)) {

        mergePortlets(importedLayout, layout.getTypeSettings(), portletsMergeMode);
    } else if (Objects.equals(layout.getType(), LayoutConstants.TYPE_LINK_TO_LAYOUT)) {

        importLinkedLayout(portletDataContext, layout, importedLayout, layoutElement);

        updateTypeSettings(importedLayout, layout);
    } else {
        updateTypeSettings(importedLayout, layout);
    }

    importedLayout.setHidden(layout.isHidden());
    importedLayout.setFriendlyURL(getUniqueFriendlyURL(portletDataContext, importedLayout, friendlyURL));

    if (layout.getIconImageId() > 0) {
        importLayoutIconImage(portletDataContext, importedLayout, layoutElement);
    } else if (importedLayout.getIconImageId() > 0) {
        _imageLocalService.deleteImage(importedLayout.getIconImageId());

        importedLayout.setIconImageId(0);
    }

    if (existingLayout == null) {
        try {
            final long finalParentLayoutId = parentLayoutId;

            int priority = TransactionInvokerUtil.invoke(_transactionConfig, new Callable<Integer>() {

                @Override
                public Integer call() throws Exception {
                    return _layoutLocalServiceHelper.getNextPriority(groupId, privateLayout,
                            finalParentLayoutId, null, -1);
                }

            });

            importedLayout.setPriority(priority);
        } catch (Throwable t) {
            ReflectionUtil.throwException(t);
        }
    }

    importedLayout.setLayoutPrototypeUuid(layout.getLayoutPrototypeUuid());
    importedLayout.setLayoutPrototypeLinkEnabled(layout.isLayoutPrototypeLinkEnabled());

    ServiceContext serviceContext = portletDataContext.createServiceContext(layout);

    importedLayout.setExpandoBridgeAttributes(serviceContext);

    _staging.updateLastImportSettings(layoutElement, importedLayout, portletDataContext);

    fixImportTypeSettings(importedLayout);

    importTheme(portletDataContext, layout, importedLayout);

    _layoutLocalService.updateLayout(importedLayout);

    _layoutSetLocalService.updatePageCount(groupId, privateLayout);

    Map<Long, Long> layoutPlids = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(Layout.class);

    layoutPlids.put(layout.getPlid(), importedLayout.getPlid());

    layouts.put(oldLayoutId, importedLayout);

    if (Objects.equals(layout.getType(), LayoutConstants.TYPE_PORTLET)
            && Validator.isNotNull(layout.getTypeSettings())) {

        importLayoutPortlets(portletDataContext, importedLayout, layoutElement);
    }

    importAssets(portletDataContext, layout, importedLayout);

    importLayoutFriendlyURLs(portletDataContext, layout, importedLayout);

    portletDataContext.importClassedModel(layout, importedLayout);
}