com.liferay.screens.service.impl.ScreensAssetEntryServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.screens.service.impl.ScreensAssetEntryServiceImpl.java

Source

/**
 * 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.screens.service.impl;

import com.liferay.asset.kernel.model.AssetEntry;
import com.liferay.asset.kernel.service.persistence.AssetEntryQuery;
import com.liferay.asset.publisher.web.util.AssetPublisherUtil;
import com.liferay.blogs.model.BlogsEntry;
import com.liferay.blogs.service.BlogsEntryService;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.dynamic.data.lists.model.DDLRecord;
import com.liferay.journal.model.JournalArticle;
import com.liferay.journal.model.JournalArticleResource;
import com.liferay.journal.service.permission.JournalArticlePermission;
import com.liferay.petra.string.StringPool;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.dao.orm.Property;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.json.JSONArray;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.PortletItem;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.security.permission.ActionKeys;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.security.permission.PermissionCheckerFactoryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.PortletKeys;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.URLCodec;
import com.liferay.portal.spring.extender.service.ServiceReference;
import com.liferay.portlet.asset.service.permission.AssetEntryPermission;
import com.liferay.screens.service.base.ScreensAssetEntryServiceBaseImpl;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import javax.portlet.PortletPreferences;

/**
 * @author Jos Manuel Navarro
 */
public class ScreensAssetEntryServiceImpl extends ScreensAssetEntryServiceBaseImpl {

    @Override
    public JSONArray getAssetEntries(AssetEntryQuery assetEntryQuery, Locale locale) throws PortalException {

        List<AssetEntry> assetEntries = assetEntryLocalService.getEntries(assetEntryQuery);

        assetEntries = filterAssetEntries(assetEntries);

        return toJSONArray(assetEntries, locale);
    }

    @Override
    public JSONArray getAssetEntries(long companyId, long groupId, String portletItemName, Locale locale, int max)
            throws PortalException {

        DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(PortletItem.class);

        Property property = PropertyFactoryUtil.forName("name");

        dynamicQuery.add(property.eq(portletItemName));

        dynamicQuery.setLimit(0, 1);

        List<PortletItem> portletItems = portletItemLocalService.dynamicQuery(dynamicQuery);

        if (portletItems.isEmpty()) {
            throw new PortalException("No portlet items associated with portlet item name " + portletItemName);
        }

        PortletItem portletItem = portletItems.get(0);

        PortletPreferences portletPreferences = portletPreferencesLocalService.getPreferences(
                portletItem.getCompanyId(), portletItem.getPortletItemId(), PortletKeys.PREFS_OWNER_TYPE_ARCHIVED,
                0, portletItem.getPortletId());

        String selectionStyle = GetterUtil.getString(portletPreferences.getValue("selectionStyle", null),
                "dynamic");

        if (selectionStyle.equals("dynamic")) {
            if (max > 500) {
                max = 500;
            }

            List<Layout> layouts = layoutLocalService.getLayouts(companyId);

            if (!layouts.isEmpty()) {
                Layout layout = layouts.get(0);

                List<AssetEntry> assetEntries = _assetPublisherUtil.getAssetEntries(portletPreferences, layout,
                        groupId, max, false);

                assetEntries = filterAssetEntries(assetEntries);

                return toJSONArray(assetEntries, locale);
            } else {
                return JSONFactoryUtil.createJSONArray();
            }
        } else {
            try {
                PermissionChecker permissionChecker = PermissionCheckerFactoryUtil.create(getUser());

                List<AssetEntry> assetEntries = _assetPublisherUtil.getAssetEntries(null, portletPreferences,
                        permissionChecker, new long[] { groupId }, false, false, false);

                assetEntries = filterAssetEntries(assetEntries);

                return toJSONArray(assetEntries, locale);
            } catch (PortalException | SystemException e) {
                throw e;
            } catch (Exception e) {
                throw new PortalException(e);
            }
        }
    }

    @Override
    public JSONObject getAssetEntry(long entryId, Locale locale) throws PortalException {

        AssetEntry entry = assetEntryLocalService.getEntry(entryId);

        AssetEntryPermission.check(getPermissionChecker(), entry, ActionKeys.VIEW);

        return toJSONObject(entry, locale);
    }

    @Override
    public JSONObject getAssetEntry(String className, long classPK, Locale locale) throws PortalException {

        AssetEntryPermission.check(getPermissionChecker(), className, classPK, ActionKeys.VIEW);

        return toJSONObject(assetEntryLocalService.getEntry(className, classPK), locale);
    }

    protected List<AssetEntry> filterAssetEntries(List<AssetEntry> assetEntries) throws PortalException {

        List<AssetEntry> filteredAssetEntries = new ArrayList<>(assetEntries.size());

        for (AssetEntry assetEntry : assetEntries) {
            if (AssetEntryPermission.contains(getPermissionChecker(), assetEntry, ActionKeys.VIEW)) {

                filteredAssetEntries.add(assetEntry);
            }
        }

        return filteredAssetEntries;
    }

    protected JSONObject getAssetObjectJSONObject(AssetEntry assetEntry, Locale locale) throws PortalException {

        String className = assetEntry.getClassName();

        if (className.equals(BlogsEntry.class.getName())) {
            return getBlogsEntryJSONObject(assetEntry);
        } else if (className.equals(DLFileEntry.class.getName())) {
            return getFileEntryJSONObject(assetEntry);
        } else if (className.equals(DDLRecord.class.getName())) {
            return screensDDLRecordService.getDDLRecord(assetEntry.getClassPK(), locale);
        } else if (className.equals(JournalArticle.class.getName())) {
            return getJournalArticleJSONObject(assetEntry);
        } else if (className.equals(User.class.getName())) {
            return getUserJSONObject(assetEntry);
        }

        return JSONFactoryUtil.createJSONObject();
    }

    protected JSONObject getBlogsEntryJSONObject(AssetEntry assetEntry) throws PortalException {

        BlogsEntry blogsEntry = _blogsEntryService.getEntry(assetEntry.getClassPK());

        JSONObject blogsEntryJSONObject = JSONFactoryUtil.createJSONObject();

        blogsEntryJSONObject.put("blogsEntry",
                JSONFactoryUtil.createJSONObject(JSONFactoryUtil.looseSerialize(blogsEntry)));

        return blogsEntryJSONObject;
    }

    protected JSONObject getFileEntryJSONObject(AssetEntry assetEntry) throws PortalException {

        FileEntry fileEntry = dlAppService.getFileEntry(assetEntry.getClassPK());

        JSONObject fileEntryJSONObject = JSONFactoryUtil.createJSONObject();

        fileEntryJSONObject.put("fileEntry",
                JSONFactoryUtil.createJSONObject(JSONFactoryUtil.looseSerialize(fileEntry)));
        fileEntryJSONObject.put("url", getFileEntryPreviewURL(fileEntry));

        return fileEntryJSONObject;
    }

    protected String getFileEntryPreviewURL(FileEntry fileEntry) {
        StringBundler sb = new StringBundler(9);

        sb.append(PortalUtil.getPathContext());
        sb.append("/documents/");
        sb.append(fileEntry.getRepositoryId());
        sb.append(StringPool.SLASH);
        sb.append(fileEntry.getFolderId());
        sb.append(StringPool.SLASH);
        sb.append(URLCodec.encodeURL(HtmlUtil.unescape(fileEntry.getTitle())));
        sb.append(StringPool.SLASH);
        sb.append(fileEntry.getUuid());

        return sb.toString();
    }

    protected JSONObject getJournalArticleJSONObject(AssetEntry assetEntry) throws PortalException {

        JournalArticle journalArticle = null;

        JournalArticlePermission.check(getPermissionChecker(), assetEntry.getClassPK(), ActionKeys.VIEW);

        try {
            journalArticle = journalArticleLocalService.getArticle(assetEntry.getClassPK());
        } catch (Exception nsae) {
            JournalArticleResource journalArticleResource = journalArticleResourceLocalService
                    .getArticleResource(assetEntry.getClassPK());

            journalArticle = journalArticleLocalService.getLatestArticle(journalArticleResource.getGroupId(),
                    journalArticleResource.getArticleId());
        }

        JSONObject journalArticleJSONObject = JSONFactoryUtil.createJSONObject();

        journalArticleJSONObject.put("DDMStructure",
                JSONFactoryUtil.createJSONObject(JSONFactoryUtil.looseSerialize(journalArticle.getDDMStructure())));

        JSONObject jsonObject = JSONFactoryUtil.createJSONObject(JSONFactoryUtil.looseSerialize(journalArticle));

        journalArticleJSONObject.put("modelAttributes", jsonObject);
        journalArticleJSONObject.put("modelValues", jsonObject.getString("content"));

        jsonObject.remove("content");

        return journalArticleJSONObject;
    }

    protected JSONObject getUserJSONObject(AssetEntry assetEntry) throws PortalException {

        User user = userService.getUserById(assetEntry.getClassPK());

        JSONObject userJSONObject = JSONFactoryUtil.createJSONObject();

        userJSONObject.put("user", JSONFactoryUtil.createJSONObject(JSONFactoryUtil.looseSerialize(user)));

        return userJSONObject;
    }

    protected JSONArray toJSONArray(List<AssetEntry> assetEntries, Locale locale) throws PortalException {

        JSONArray jsonArray = JSONFactoryUtil.createJSONArray();

        for (AssetEntry assetEntry : assetEntries) {
            JSONObject jsonObject = toJSONObject(assetEntry, locale);

            jsonArray.put(jsonObject);
        }

        return jsonArray;
    }

    protected JSONObject toJSONObject(AssetEntry assetEntry, Locale locale) throws PortalException {

        JSONObject jsonObject = JSONFactoryUtil.createJSONObject(JSONFactoryUtil.looseSerialize(assetEntry));

        jsonObject.put("className", assetEntry.getClassName());
        jsonObject.put("description", assetEntry.getDescription(locale));
        jsonObject.put("locale", String.valueOf(locale));
        jsonObject.put("object", getAssetObjectJSONObject(assetEntry, locale));
        jsonObject.put("summary", assetEntry.getSummary(locale));
        jsonObject.put("title", assetEntry.getTitle(locale));

        return jsonObject;
    }

    @ServiceReference(type = AssetPublisherUtil.class)
    private AssetPublisherUtil _assetPublisherUtil;

    @ServiceReference(type = BlogsEntryService.class)
    private BlogsEntryService _blogsEntryService;

}