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

com.liferay.headless.delivery.dynamic.data.mapping.DDMStructureField 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.dynamic.data.mapping;

import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.service.DDMStructureLocalServiceUtil;
import com.liferay.dynamic.data.mapping.storage.constants.FieldConstants;
import com.liferay.dynamic.data.mapping.util.DDMIndexer;
import com.liferay.petra.string.StringBundler;
import com.liferay.petra.string.StringPool;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.StringUtil;

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

/**
 * @author Javier de Arcos
 */
public class DDMStructureField {

	public static DDMStructureField from(String ddmStructureField) {
		String[] ddmStructureParts = StringUtil.split(
			ddmStructureField, DDMIndexer.DDM_FIELD_SEPARATOR);

		String fieldReference = StringUtil.removeSubstring(
			ddmStructureParts[3], "_sortable");

		String type = fieldReference.substring(
			fieldReference.lastIndexOf(StringPool.UNDERLINE) + 1);

		fieldReference = fieldReference.substring(
			0, fieldReference.lastIndexOf(StringPool.UNDERLINE));

		String locale = _getSuffixLocale(fieldReference);

		if (locale != null) {
			fieldReference = StringUtil.removeSubstring(
				fieldReference, StringPool.UNDERLINE + locale);
		}

		return new DDMStructureField(
			ddmStructureParts[2], fieldReference, ddmStructureParts[1], locale,
			type);
	}

	public static String getNestedFieldName() {
		return StringBundler.concat(
			DDMIndexer.DDM_FIELD_ARRAY, StringPool.PERIOD,
			DDMIndexer.DDM_FIELD_NAME);
	}

	public String getDDMStructureFieldName() {
		return StringBundler.concat(
			DDMIndexer.DDM_FIELD_PREFIX, _indexType,
			DDMIndexer.DDM_FIELD_SEPARATOR, _ddmStructureId,
			DDMIndexer.DDM_FIELD_SEPARATOR, _fieldReference,
			_getLocaleSuffix());
	}

	public String getDDMStructureNestedFieldName() {
		return StringBundler.concat(
			DDMIndexer.DDM_FIELD_ARRAY, StringPool.PERIOD,
			DDMIndexer.DDM_VALUE_FIELD_NAME_PREFIX,
			StringUtil.upperCaseFirstLetter(_indexType), _getLocaleSuffix());
	}

	public String getDDMStructureNestedTypeSortableFieldName() {
		String ddmStructureNestedTypeSortableFieldName = StringBundler.concat(
			DDMIndexer.DDM_FIELD_ARRAY, StringPool.PERIOD,
			DDMIndexer.DDM_VALUE_FIELD_NAME_PREFIX,
			StringUtil.upperCaseFirstLetter(_indexType), _getLocaleSuffix(),
			StringPool.UNDERLINE, _type, StringPool.UNDERLINE,
			Field.SORTABLE_FIELD_SUFFIX);

		DDMStructure ddmStructure =
			DDMStructureLocalServiceUtil.fetchDDMStructure(
				GetterUtil.getLong(_ddmStructureId));

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

		try {
			DDMFormField ddmFormField =
				ddmStructure.getDDMFormFieldByFieldReference(_fieldReference);

			if ((ddmFormField != null) &&
				Objects.equals(
					ddmFormField.getDataType(), FieldConstants.STRING) &&
				ddmFormField.isLocalizable()) {

				ddmStructureNestedTypeSortableFieldName =
					ddmStructureNestedTypeSortableFieldName +
						".keyword_lowercase";
			}
		}
		catch (Exception exception) {
			if (_log.isDebugEnabled()) {
				_log.debug(exception);
			}
		}

		return ddmStructureNestedTypeSortableFieldName;
	}

	public String getLocale() {
		return _locale;
	}

	private static String _getSuffixLocale(String string) {
		for (Locale availableLocale : LanguageUtil.getAvailableLocales()) {
			String availableLanguageId = LocaleUtil.toLanguageId(
				availableLocale);

			if (string.endsWith(availableLanguageId)) {
				return availableLanguageId;
			}
		}

		return null;
	}

	private DDMStructureField(
		String ddmStructureId, String fieldReference, String indexType,
		String locale, String type) {

		_ddmStructureId = ddmStructureId;
		_fieldReference = fieldReference;
		_indexType = indexType;
		_locale = locale;
		_type = type;
	}

	private String _getLocaleSuffix() {
		if (_locale == null) {
			return StringPool.BLANK;
		}

		return StringPool.UNDERLINE.concat(_locale);
	}

	private static final Log _log = LogFactoryUtil.getLog(
		DDMStructureField.class);

	private final String _ddmStructureId;
	private final String _fieldReference;
	private final String _indexType;
	private final String _locale;
	private final String _type;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy