All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.liferay.headless.delivery.dto.v1_0.util.ContentStructureUtil Maven / Gradle / Ivy

The newest version!
/**
 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

package com.liferay.headless.delivery.dto.v1_0.util;

import com.liferay.dynamic.data.mapping.form.field.type.constants.DDMFormFieldTypeConstants;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMFormFieldOptions;
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.headless.delivery.dto.v1_0.ContentStructure;
import com.liferay.headless.delivery.dto.v1_0.ContentStructureField;
import com.liferay.headless.delivery.dto.v1_0.Option;
import com.liferay.journal.article.dynamic.data.mapping.form.field.type.constants.JournalArticleDDMFormFieldTypeConstants;
import com.liferay.layout.dynamic.data.mapping.form.field.type.constants.LayoutDDMFormFieldTypeConstants;
import com.liferay.petra.function.transform.TransformUtil;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.service.GroupLocalService;
import com.liferay.portal.kernel.service.UserLocalService;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.vulcan.util.GroupUtil;
import com.liferay.portal.vulcan.util.LocalizedMapUtil;

import java.util.Locale;
import java.util.Map;
import java.util.Objects;

/**
 * @author Cristina González
 */
public class ContentStructureUtil {

	public static ContentStructure toContentStructure(
		boolean acceptAllLanguages, GroupLocalService groupLocalService,
		Locale locale, Portal portal, UserLocalService userLocalService,
		DDMStructure ddmStructure) {

		if (ddmStructure == null) {
			return null;
		}

		Group group = groupLocalService.fetchGroup(ddmStructure.getGroupId());

		return new ContentStructure() {
			{
				setAssetLibraryKey(() -> GroupUtil.getAssetLibraryKey(group));
				setAvailableLanguages(
					() -> LocaleUtil.toW3cLanguageIds(
						ddmStructure.getAvailableLanguageIds()));
				setContentStructureFields(
					() -> TransformUtil.transformToArray(
						ddmStructure.getRootFieldNames(),
						fieldName -> _toContentStructureField(
							acceptAllLanguages,
							ddmStructure.getDDMFormField(fieldName), locale),
						ContentStructureField.class));
				setCreator(
					() -> CreatorUtil.toCreator(
						null, portal,
						userLocalService.fetchUser(ddmStructure.getUserId())));
				setDateCreated(ddmStructure::getCreateDate);
				setDateModified(ddmStructure::getModifiedDate);
				setDescription(() -> ddmStructure.getDescription(locale));
				setDescription_i18n(
					() -> LocalizedMapUtil.getI18nMap(
						acceptAllLanguages, ddmStructure.getDescriptionMap()));
				setId(ddmStructure::getStructureId);
				setName(() -> ddmStructure.getName(locale));
				setName_i18n(
					() -> LocalizedMapUtil.getI18nMap(
						acceptAllLanguages, ddmStructure.getDescriptionMap()));
				setSiteId(() -> GroupUtil.getSiteId(group));
			}
		};
	}

	public static String toDataType(DDMFormField ddmFormField) {
		String type = ddmFormField.getType();

		if (DDMFormFieldType.DOCUMENT_LIBRARY.equals(type) ||
			Objects.equals(DDMFormFieldTypeConstants.DOCUMENT_LIBRARY, type)) {

			return "document";
		}
		else if (DDMFormFieldType.JOURNAL_ARTICLE.equals(type) ||
				 Objects.equals(
					 JournalArticleDDMFormFieldTypeConstants.JOURNAL_ARTICLE,
					 type)) {

			return "structuredContent";
		}
		else if (DDMFormFieldType.LINK_TO_PAGE.equals(type) ||
				 Objects.equals(
					 LayoutDDMFormFieldTypeConstants.LINK_TO_LAYOUT, type)) {

			return "url";
		}
		else if (DDMFormFieldType.RADIO.equals(type)) {
			return "string";
		}

		return ddmFormField.getDataType();
	}

	public static String toInputControl(DDMFormField ddmFormField) {
		String type = ddmFormField.getType();

		if (DDMFormFieldType.CHECKBOX.equals(type) ||
			DDMFormFieldType.RADIO.equals(type) ||
			DDMFormFieldType.SELECT.equals(type) ||
			DDMFormFieldType.TEXT.equals(type) ||
			DDMFormFieldType.TEXT_AREA.equals(type)) {

			return type;
		}

		return null;
	}

	private static ContentStructureField _toContentStructureField(
		boolean acceptAllLanguage, DDMFormField ddmFormField, Locale locale) {

		LocalizedValue labelLocalizedValue = ddmFormField.getLabel();

		LocalizedValue predefinedLocalizedValue =
			ddmFormField.getPredefinedValue();

		return new ContentStructureField() {
			{
				setDataType(() -> toDataType(ddmFormField));
				setInputControl(() -> toInputControl(ddmFormField));
				setLabel(() -> _toString(labelLocalizedValue, locale));
				setLabel_i18n(
					() -> LocalizedMapUtil.getI18nMap(
						acceptAllLanguage, labelLocalizedValue.getValues()));
				setLocalizable(ddmFormField::isLocalizable);
				setMultiple(ddmFormField::isMultiple);
				setName(ddmFormField::getFieldReference);
				setNestedContentStructureFields(
					() -> TransformUtil.transformToArray(
						ddmFormField.getNestedDDMFormFields(),
						ddmFormField -> _toContentStructureField(
							acceptAllLanguage, ddmFormField, locale),
						ContentStructureField.class));
				setOptions(
					() -> {
						DDMFormFieldOptions ddmFormFieldOptions =
							ddmFormField.getDDMFormFieldOptions();

						if (ddmFormFieldOptions == null) {
							return new Option[0];
						}

						Map map =
							ddmFormFieldOptions.getOptions();

						return TransformUtil.transformToArray(
							map.entrySet(),
							entry -> new Option() {
								{
									LocalizedValue localizedValue =
										entry.getValue();

									setLabel(
										() -> _toString(
											localizedValue, locale));
									setLabel_i18n(
										() -> LocalizedMapUtil.getI18nMap(
											acceptAllLanguage,
											localizedValue.getValues()));

									setValue(entry::getKey);
								}
							},
							Option.class);
					});
				setPredefinedValue(
					() -> _toString(predefinedLocalizedValue, locale));
				setPredefinedValue_i18n(
					() -> LocalizedMapUtil.getI18nMap(
						acceptAllLanguage,
						predefinedLocalizedValue.getValues()));
				setRepeatable(ddmFormField::isRepeatable);
				setRequired(ddmFormField::isRequired);
				setShowLabel(ddmFormField::isShowLabel);
			}
		};
	}

	private static String _toString(
		LocalizedValue localizedValue, Locale locale) {

		if (localizedValue == null) {
			return null;
		}

		return localizedValue.getString(locale);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy