com.liferay.dynamic.data.lists.internal.util.DDLImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.dynamic.data.lists.internal.util.DDLImpl.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.dynamic.data.lists.internal.util;

import com.liferay.document.library.kernel.service.DLAppLocalService;
import com.liferay.dynamic.data.lists.model.DDLRecord;
import com.liferay.dynamic.data.lists.model.DDLRecordConstants;
import com.liferay.dynamic.data.lists.model.DDLRecordSet;
import com.liferay.dynamic.data.lists.model.DDLRecordVersion;
import com.liferay.dynamic.data.lists.service.DDLRecordLocalService;
import com.liferay.dynamic.data.lists.service.DDLRecordService;
import com.liferay.dynamic.data.lists.service.DDLRecordSetLocalService;
import com.liferay.dynamic.data.lists.util.DDL;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMFormFieldType;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.model.LocalizedValue;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.dynamic.data.mapping.storage.Field;
import com.liferay.dynamic.data.mapping.storage.Fields;
import com.liferay.dynamic.data.mapping.storage.StorageEngine;
import com.liferay.dynamic.data.mapping.util.DDM;
import com.liferay.dynamic.data.mapping.util.DDMFormValuesToFieldsConverter;
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.language.LanguageUtil;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.service.LayoutService;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.util.LocaleThreadLocal;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.Validator;

import java.util.Date;
import java.util.List;
import java.util.Locale;

import javax.portlet.PortletPreferences;

import javax.servlet.http.HttpServletRequest;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

/**
 * @author Marcellus Tavares
 * @author Eduardo Lundgren
 */
@Component(immediate = true)
public class DDLImpl implements DDL {

    /**
     * @deprecated As of 1.1.0
     */
    @Deprecated
    @Override
    @SuppressWarnings("deprecation")
    public JSONObject getRecordJSONObject(DDLRecord record) throws Exception {
        Locale locale = LocaleThreadLocal.getThemeDisplayLocale();

        return getRecordJSONObject(record, false, locale);
    }

    @Override
    public JSONObject getRecordJSONObject(DDLRecord record, boolean latestRecordVersion, Locale locale)
            throws Exception {

        DDLRecordSet recordSet = record.getRecordSet();

        DDMStructure ddmStructure = recordSet.getDDMStructure();

        JSONObject jsonObject = JSONFactoryUtil.createJSONObject();

        for (String fieldName : ddmStructure.getFieldNames()) {
            jsonObject.put(fieldName, StringPool.BLANK);
        }

        jsonObject.put("displayIndex", record.getDisplayIndex());
        jsonObject.put("recordId", record.getRecordId());

        DDLRecordVersion recordVersion = record.getRecordVersion();

        if (latestRecordVersion) {
            recordVersion = record.getLatestRecordVersion();
        }

        DDMFormValues ddmFormValues = _storageEngine.getDDMFormValues(recordVersion.getDDMStorageId());

        Fields fields = _ddmFormValuesToFieldsConverter.convert(ddmStructure, ddmFormValues);

        for (Field field : fields) {
            String fieldName = field.getName();
            String fieldType = field.getType();
            Object fieldValue = field.getValue(locale);

            if (fieldValue instanceof Date) {
                jsonObject.put(fieldName, ((Date) fieldValue).getTime());
            } else if (fieldType.equals(DDMFormFieldType.DOCUMENT_LIBRARY) && Validator.isNotNull(fieldValue)) {

                JSONObject fieldValueJSONObject = JSONFactoryUtil.createJSONObject(String.valueOf(fieldValue));

                String uuid = fieldValueJSONObject.getString("uuid");
                long groupId = fieldValueJSONObject.getLong("groupId");

                fieldValueJSONObject.put("title", getFileEntryTitle(uuid, groupId));

                jsonObject.put(fieldName, fieldValueJSONObject.toString());
            } else if (fieldType.equals(DDMFormFieldType.LINK_TO_PAGE) && Validator.isNotNull(fieldValue)) {

                JSONObject fieldValueJSONObject = JSONFactoryUtil.createJSONObject(String.valueOf(fieldValue));

                long groupId = fieldValueJSONObject.getLong("groupId");
                boolean privateLayout = fieldValueJSONObject.getBoolean("privateLayout");
                long layoutId = fieldValueJSONObject.getLong("layoutId");

                String layoutName = getLayoutName(groupId, privateLayout, layoutId,
                        LanguageUtil.getLanguageId(locale));

                fieldValueJSONObject.put("name", layoutName);

                jsonObject.put(fieldName, fieldValueJSONObject.toString());
            } else if ((fieldType.equals(DDMFormFieldType.RADIO) || fieldType.equals(DDMFormFieldType.SELECT))
                    && Validator.isNotNull(fieldValue)) {

                fieldValue = JSONFactoryUtil.createJSONArray(String.valueOf(fieldValue));

                jsonObject.put(fieldName, (JSONArray) fieldValue);
            } else if (Validator.isNotNull(fieldValue)) {
                jsonObject.put(fieldName, String.valueOf(fieldValue));
            }
        }

        return jsonObject;
    }

    @Override
    public JSONArray getRecordSetJSONArray(DDLRecordSet recordSet, Locale locale) throws Exception {

        JSONArray jsonArray = JSONFactoryUtil.createJSONArray();

        DDMStructure ddmStructure = recordSet.getDDMStructure();

        List<DDMFormField> ddmFormFields = ddmStructure.getDDMFormFields(false);

        for (DDMFormField ddmFormField : ddmFormFields) {
            String name = ddmFormField.getName();

            JSONObject jsonObject = JSONFactoryUtil.createJSONObject();

            String dataType = ddmFormField.getDataType();

            jsonObject.put("dataType", dataType);

            boolean readOnly = ddmFormField.isReadOnly();

            jsonObject.put("editable", !readOnly);

            LocalizedValue label = ddmFormField.getLabel();

            jsonObject.put("label", label.getString(locale));

            jsonObject.put("name", name);

            boolean required = ddmFormField.isRequired();

            jsonObject.put("required", required);

            jsonObject.put("sortable", true);

            String type = ddmFormField.getType();

            jsonObject.put("type", type);

            jsonArray.put(jsonObject);
        }

        return jsonArray;
    }

    /**
     * @deprecated As of 1.1.0
     */
    @Deprecated
    @Override
    @SuppressWarnings("deprecation")
    public JSONArray getRecordsJSONArray(DDLRecordSet recordSet) throws Exception {

        Locale locale = LocaleThreadLocal.getThemeDisplayLocale();

        return getRecordsJSONArray(recordSet.getRecords(), false, locale);
    }

    /**
     * @deprecated As of 1.1.0
     */
    @Deprecated
    @Override
    @SuppressWarnings("deprecation")
    public JSONArray getRecordsJSONArray(List<DDLRecord> records) throws Exception {

        JSONArray jsonArray = JSONFactoryUtil.createJSONArray();

        for (DDLRecord record : records) {
            JSONObject jsonObject = getRecordJSONObject(record);

            jsonArray.put(jsonObject);
        }

        return jsonArray;
    }

    @Override
    public JSONArray getRecordsJSONArray(List<DDLRecord> records, boolean latestRecordVersion, Locale locale)
            throws Exception {

        JSONArray jsonArray = JSONFactoryUtil.createJSONArray();

        for (DDLRecord record : records) {
            JSONObject jsonObject = getRecordJSONObject(record, latestRecordVersion, locale);

            jsonArray.put(jsonObject);
        }

        return jsonArray;
    }

    /**
     * @deprecated As of 1.1.0, with no direct replacement
     */
    @Deprecated
    @Override
    @SuppressWarnings("deprecation")
    public boolean isEditable(HttpServletRequest request, String portletId, long groupId) throws Exception {

        return true;
    }

    /**
     * @deprecated As of 1.1.0, with no direct replacement
     */
    @Deprecated
    @Override
    @SuppressWarnings("deprecation")
    public boolean isEditable(PortletPreferences preferences, String portletId, long groupId) throws Exception {

        return true;
    }

    @Override
    public DDLRecord updateRecord(long recordId, long recordSetId, boolean mergeFields, boolean checkPermission,
            ServiceContext serviceContext) throws Exception {

        DDLRecord record = _ddlRecordLocalService.fetchRecord(recordId);

        boolean majorVersion = ParamUtil.getBoolean(serviceContext, "majorVersion");

        DDLRecordSet recordSet = _ddlRecordSetLocalService.getDDLRecordSet(recordSetId);

        DDMStructure ddmStructure = recordSet.getDDMStructure();

        Fields fields = _ddm.getFields(ddmStructure.getStructureId(), serviceContext);

        if (record != null) {
            if (checkPermission) {
                record = _ddlRecordService.updateRecord(recordId, majorVersion,
                        DDLRecordConstants.DISPLAY_INDEX_DEFAULT, fields, mergeFields, serviceContext);
            } else {
                record = _ddlRecordLocalService.updateRecord(serviceContext.getUserId(), recordId, majorVersion,
                        DDLRecordConstants.DISPLAY_INDEX_DEFAULT, fields, mergeFields, serviceContext);
            }
        } else {
            if (checkPermission) {
                record = _ddlRecordService.addRecord(serviceContext.getScopeGroupId(), recordSetId,
                        DDLRecordConstants.DISPLAY_INDEX_DEFAULT, fields, serviceContext);
            } else {
                record = _ddlRecordLocalService.addRecord(serviceContext.getUserId(),
                        serviceContext.getScopeGroupId(), recordSetId, DDLRecordConstants.DISPLAY_INDEX_DEFAULT,
                        fields, serviceContext);
            }
        }

        return record;
    }

    /**
     * @deprecated As of 1.1.0
     */
    @Deprecated
    @Override
    @SuppressWarnings("deprecation")
    public DDLRecord updateRecord(long recordId, long recordSetId, boolean mergeFields,
            ServiceContext serviceContext) throws Exception {

        return updateRecord(recordId, recordSetId, mergeFields, true, serviceContext);
    }

    protected String getFileEntryTitle(String uuid, long groupId) {
        try {
            FileEntry fileEntry = _dlAppLocalService.getFileEntryByUuidAndGroupId(uuid, groupId);

            return fileEntry.getTitle();
        } catch (Exception e) {
            return LanguageUtil.format(LocaleUtil.getSiteDefault(), "is-temporarily-unavailable", "content");
        }
    }

    protected String getLayoutName(long groupId, boolean privateLayout, long layoutId, String languageId) {

        try {
            return _layoutService.getLayoutName(groupId, privateLayout, layoutId, languageId);
        } catch (Exception e) {
            return LanguageUtil.format(LocaleUtil.getSiteDefault(), "is-temporarily-unavailable", "content");
        }
    }

    @Reference(unbind = "-")
    protected void setDDLRecordLocalService(DDLRecordLocalService ddlRecordLocalService) {

        _ddlRecordLocalService = ddlRecordLocalService;
    }

    @Reference(unbind = "-")
    protected void setDDLRecordService(DDLRecordService ddlRecordService) {
        _ddlRecordService = ddlRecordService;
    }

    @Reference(unbind = "-")
    protected void setDDLRecordSetLocalService(DDLRecordSetLocalService ddlRecordSetLocalService) {

        _ddlRecordSetLocalService = ddlRecordSetLocalService;
    }

    @Reference(unbind = "-")
    protected void setDDM(DDM ddm) {
        _ddm = ddm;
    }

    @Reference(unbind = "-")
    protected void setDDMFormValuesToFieldsConverter(
            DDMFormValuesToFieldsConverter ddmFormValuesToFieldsConverter) {

        _ddmFormValuesToFieldsConverter = ddmFormValuesToFieldsConverter;
    }

    @Reference(unbind = "-")
    protected void setDLAppLocalService(DLAppLocalService dlAppLocalService) {
        _dlAppLocalService = dlAppLocalService;
    }

    @Reference(unbind = "-")
    protected void setLayoutService(LayoutService layoutService) {
        _layoutService = layoutService;
    }

    @Reference(unbind = "-")
    protected void setStorageEngine(StorageEngine storageEngine) {
        _storageEngine = storageEngine;
    }

    private DDLRecordLocalService _ddlRecordLocalService;
    private DDLRecordService _ddlRecordService;
    private DDLRecordSetLocalService _ddlRecordSetLocalService;
    private DDM _ddm;
    private DDMFormValuesToFieldsConverter _ddmFormValuesToFieldsConverter;
    private DLAppLocalService _dlAppLocalService;
    private LayoutService _layoutService;
    private StorageEngine _storageEngine;

}