From fa916e9fd56b093972398c8961d84c70b2aba250 Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:19:36 +0100 Subject: [PATCH 01/18] LPD-48103 Added new column into service xml --- modules/apps/commerce/commerce-product-service/service.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/apps/commerce/commerce-product-service/service.xml b/modules/apps/commerce/commerce-product-service/service.xml index 93fcb7a53dbe40..9ff073816cd630 100644 --- a/modules/apps/commerce/commerce-product-service/service.xml +++ b/modules/apps/commerce/commerce-product-service/service.xml @@ -890,6 +890,7 @@ + @@ -1436,6 +1437,7 @@ + From 5187d3361c57185bfa223e6f469be2516294827a Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:22:11 +0100 Subject: [PATCH 02/18] LPD-48103 Added new upgrade processes --- .../commerce/commerce-product-service/bnd.bnd | 2 +- ...eProductServiceUpgradeStepRegistrator.java | 7 +++++ ...pecificationOptionValueUpgradeProcess.java | 31 +++++++++++++++++++ .../CPSpecificationOptionUpgradeProcess.java | 30 ++++++++++++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/CPDefinitionSpecificationOptionValueUpgradeProcess.java create mode 100644 modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/CPSpecificationOptionUpgradeProcess.java diff --git a/modules/apps/commerce/commerce-product-service/bnd.bnd b/modules/apps/commerce/commerce-product-service/bnd.bnd index b705e252a8f600..cba2338dbe265c 100644 --- a/modules/apps/commerce/commerce-product-service/bnd.bnd +++ b/modules/apps/commerce/commerce-product-service/bnd.bnd @@ -1,6 +1,6 @@ Bundle-Name: Liferay Commerce Product Service Bundle-SymbolicName: com.liferay.commerce.product.service Bundle-Version: 6.0.157 -Liferay-Require-SchemaVersion: 5.27.0 +Liferay-Require-SchemaVersion: 5.28.0 Liferay-Service: true -dsannotations-options: inherit \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/registry/CommerceProductServiceUpgradeStepRegistrator.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/registry/CommerceProductServiceUpgradeStepRegistrator.java index bb1cacf820efa4..84ff62fe8e6597 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/registry/CommerceProductServiceUpgradeStepRegistrator.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/registry/CommerceProductServiceUpgradeStepRegistrator.java @@ -661,6 +661,13 @@ protected void upgradePreferences( "CPConfigurationList", "masterCPConfigurationList", "master BOOLEAN")); + registry.register( + "5.27.0", "5.28.0", + new com.liferay.commerce.product.internal.upgrade.v5_28_0. + CPDefinitionSpecificationOptionValueUpgradeProcess(), + new com.liferay.commerce.product.internal.upgrade.v5_28_0. + CPSpecificationOptionUpgradeProcess()); + if (_log.isInfoEnabled()) { _log.info("Commerce product upgrade step registrator finished"); } diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/CPDefinitionSpecificationOptionValueUpgradeProcess.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/CPDefinitionSpecificationOptionValueUpgradeProcess.java new file mode 100644 index 00000000000000..402158849d7ff4 --- /dev/null +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/CPDefinitionSpecificationOptionValueUpgradeProcess.java @@ -0,0 +1,31 @@ +/** + * 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.commerce.product.internal.upgrade.v5_28_0; + +import com.liferay.portal.kernel.upgrade.UpgradeProcess; +import com.liferay.portal.kernel.upgrade.UpgradeProcessFactory; +import com.liferay.portal.kernel.upgrade.UpgradeStep; + +/** + * @author Alessio Antonio Rendina + */ +public class CPDefinitionSpecificationOptionValueUpgradeProcess + extends UpgradeProcess { + + @Override + protected void doUpgrade() throws Exception { + runSQL("update CPDSpecificationOptionValue set visible = [$TRUE$]"); + } + + @Override + protected UpgradeStep[] getPreUpgradeSteps() { + return new UpgradeStep[] { + UpgradeProcessFactory.addColumns( + "CPDSpecificationOptionValue", "visible BOOLEAN") + }; + } + +} \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/CPSpecificationOptionUpgradeProcess.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/CPSpecificationOptionUpgradeProcess.java new file mode 100644 index 00000000000000..157396b15e0155 --- /dev/null +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/CPSpecificationOptionUpgradeProcess.java @@ -0,0 +1,30 @@ +/** + * 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.commerce.product.internal.upgrade.v5_28_0; + +import com.liferay.portal.kernel.upgrade.UpgradeProcess; +import com.liferay.portal.kernel.upgrade.UpgradeProcessFactory; +import com.liferay.portal.kernel.upgrade.UpgradeStep; + +/** + * @author Alessio Antonio Rendina + */ +public class CPSpecificationOptionUpgradeProcess extends UpgradeProcess { + + @Override + protected void doUpgrade() throws Exception { + runSQL("update CPSpecificationOption set visible = [$TRUE$]"); + } + + @Override + protected UpgradeStep[] getPreUpgradeSteps() { + return new UpgradeStep[] { + UpgradeProcessFactory.addColumns( + "CPSpecificationOption", "visible BOOLEAN") + }; + } + +} \ No newline at end of file From 2a841945ea01b8d5f36d72687b8442c674c9521f Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:27:31 +0100 Subject: [PATCH 03/18] LPD-48103 Added new constant --- .../java/com/liferay/commerce/product/constants/CPField.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/constants/CPField.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/constants/CPField.java index 3c0ce01ac646bd..a51cdd51703dbf 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/constants/CPField.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/constants/CPField.java @@ -159,4 +159,6 @@ public class CPField { public static final String UNSPSC = "unspsc"; + public static final String VISIBLE = "visible"; + } \ No newline at end of file From ee5dda66d5214d8680a7f014f1693531a8689c7a Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:24:10 +0100 Subject: [PATCH 04/18] LPD-48103 Refactor specification option indexer --- .../search/CPSpecificationOptionIndexer.java | 265 ------------------ ...ficationOptionModelSearchConfigurator.java | 81 ++++++ ...icationOptionModelDocumentContributor.java | 102 +++++++ ...onOptionModelIndexerWriterContributor.java | 69 +++++ ...ficationOptionKeywordQueryContributor.java | 84 ++++++ ...cationOptionModelPreFilterContributor.java | 66 +++++ ...ficationOptionModelSummaryContributor.java | 39 +++ 7 files changed, 441 insertions(+), 265 deletions(-) delete mode 100644 modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/CPSpecificationOptionIndexer.java create mode 100644 modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/CPSpecificationOptionModelSearchConfigurator.java create mode 100644 modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPSpecificationOptionModelDocumentContributor.java create mode 100644 modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPSpecificationOptionModelIndexerWriterContributor.java create mode 100644 modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPSpecificationOptionKeywordQueryContributor.java create mode 100644 modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPSpecificationOptionModelPreFilterContributor.java create mode 100644 modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/result/contributor/CPSpecificationOptionModelSummaryContributor.java diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/CPSpecificationOptionIndexer.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/CPSpecificationOptionIndexer.java deleted file mode 100644 index 6d56ddc4664889..00000000000000 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/CPSpecificationOptionIndexer.java +++ /dev/null @@ -1,265 +0,0 @@ -/** - * 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.commerce.product.internal.search; - -import com.liferay.commerce.product.constants.CPField; -import com.liferay.commerce.product.model.CPOptionCategory; -import com.liferay.commerce.product.model.CPSpecificationOption; -import com.liferay.commerce.product.service.CPOptionCategoryLocalService; -import com.liferay.commerce.product.service.CPSpecificationOptionLocalService; -import com.liferay.portal.kernel.dao.orm.IndexableActionableDynamicQuery; -import com.liferay.portal.kernel.exception.PortalException; -import com.liferay.portal.kernel.log.Log; -import com.liferay.portal.kernel.log.LogFactoryUtil; -import com.liferay.portal.kernel.search.BaseIndexer; -import com.liferay.portal.kernel.search.BooleanQuery; -import com.liferay.portal.kernel.search.Document; -import com.liferay.portal.kernel.search.Field; -import com.liferay.portal.kernel.search.IndexWriterHelper; -import com.liferay.portal.kernel.search.Indexer; -import com.liferay.portal.kernel.search.SearchContext; -import com.liferay.portal.kernel.search.Summary; -import com.liferay.portal.kernel.search.filter.BooleanFilter; -import com.liferay.portal.kernel.util.GetterUtil; -import com.liferay.portal.kernel.util.Localization; -import com.liferay.portal.kernel.util.Validator; - -import java.io.Serializable; - -import java.util.LinkedHashMap; -import java.util.Locale; -import java.util.Map; - -import javax.portlet.PortletRequest; -import javax.portlet.PortletResponse; - -import org.osgi.service.component.annotations.Component; -import org.osgi.service.component.annotations.Reference; - -/** - * @author Alessio Antonio Rendina - */ -@Component(service = Indexer.class) -public class CPSpecificationOptionIndexer - extends BaseIndexer { - - public static final String CLASS_NAME = - CPSpecificationOption.class.getName(); - - public CPSpecificationOptionIndexer() { - setDefaultSelectedFieldNames( - Field.COMPANY_ID, Field.ENTRY_CLASS_NAME, Field.ENTRY_CLASS_PK, - Field.MODIFIED_DATE, Field.TITLE, Field.UID, CPField.KEY); - setFilterSearch(true); - setPermissionAware(true); - } - - @Override - public String getClassName() { - return CLASS_NAME; - } - - @Override - public void postProcessContextBooleanFilter( - BooleanFilter contextBooleanFilter, SearchContext searchContext) - throws Exception { - - Map attributes = searchContext.getAttributes(); - - if (attributes.containsKey(CPField.FACETABLE)) { - boolean facetable = GetterUtil.getBoolean( - attributes.get(CPField.FACETABLE)); - - contextBooleanFilter.addRequiredTerm(CPField.FACETABLE, facetable); - } - } - - @Override - public void postProcessSearchQuery( - BooleanQuery searchQuery, BooleanFilter fullQueryBooleanFilter, - SearchContext searchContext) - throws Exception { - - addSearchTerm( - searchQuery, searchContext, CPField.CP_OPTION_CATEGORY_ID, false); - addSearchTerm( - searchQuery, searchContext, CPField.CP_OPTION_CATEGORY_TITLE, - false); - addSearchLocalizedTerm( - searchQuery, searchContext, CPField.CP_OPTION_CATEGORY_TITLE, - false); - addSearchTerm(searchQuery, searchContext, CPField.KEY, false); - addSearchLocalizedTerm( - searchQuery, searchContext, Field.DESCRIPTION, false); - addSearchTerm(searchQuery, searchContext, Field.ENTRY_CLASS_PK, false); - addSearchTerm(searchQuery, searchContext, Field.TITLE, false); - addSearchLocalizedTerm(searchQuery, searchContext, Field.TITLE, false); - addSearchTerm(searchQuery, searchContext, Field.USER_NAME, false); - - LinkedHashMap params = - (LinkedHashMap)searchContext.getAttribute("params"); - - if (params != null) { - String expandoAttributes = (String)params.get("expandoAttributes"); - - if (Validator.isNotNull(expandoAttributes)) { - addSearchExpando(searchQuery, searchContext, expandoAttributes); - } - } - } - - @Override - protected void doDelete(CPSpecificationOption cpSpecificationOption) - throws Exception { - - deleteDocument( - cpSpecificationOption.getCompanyId(), - cpSpecificationOption.getCPSpecificationOptionId()); - } - - @Override - protected Document doGetDocument( - CPSpecificationOption cpSpecificationOption) - throws Exception { - - if (_log.isDebugEnabled()) { - _log.debug( - "Indexing commerce product specification option " + - cpSpecificationOption); - } - - Document document = getBaseModelDocument( - CLASS_NAME, cpSpecificationOption); - - CPOptionCategory cpOptionCategory = - _cpOptionCategoryLocalService.fetchCPOptionCategory( - cpSpecificationOption.getCPOptionCategoryId()); - - String[] languageIds = _localization.getAvailableLanguageIds( - cpSpecificationOption.getTitle()); - - for (String languageId : languageIds) { - if (cpOptionCategory != null) { - document.addKeyword( - CPField.CP_OPTION_CATEGORY_ID, - cpOptionCategory.getCPOptionCategoryId()); - document.addText( - _localization.getLocalizedName( - CPField.CP_OPTION_CATEGORY_TITLE, languageId), - cpOptionCategory.getTitle(languageId)); - } - - document.addKeyword( - CPField.FACETABLE, cpSpecificationOption.isFacetable()); - document.addText(CPField.KEY, cpSpecificationOption.getKey()); - - String title = cpSpecificationOption.getTitle(languageId); - - document.addText(Field.CONTENT, title); - - String description = cpSpecificationOption.getDescription( - languageId); - - document.addText( - _localization.getLocalizedName(Field.DESCRIPTION, languageId), - description); - - document.addText( - _localization.getLocalizedName(Field.TITLE, languageId), title); - } - - document.addNumberSortable( - Field.PRIORITY, cpSpecificationOption.getPriority()); - - if (_log.isDebugEnabled()) { - _log.debug( - "Commerce product specification option " + - cpSpecificationOption + " indexed successfully"); - } - - return document; - } - - @Override - protected Summary doGetSummary( - Document document, Locale locale, String snippet, - PortletRequest portletRequest, PortletResponse portletResponse) { - - Summary summary = createSummary( - document, Field.TITLE, Field.DESCRIPTION); - - summary.setMaxContentLength(200); - - return summary; - } - - @Override - protected void doReindex(CPSpecificationOption cpSpecificationOption) - throws Exception { - - _indexWriterHelper.updateDocument( - cpSpecificationOption.getCompanyId(), - getDocument(cpSpecificationOption)); - } - - @Override - protected void doReindex(String className, long classPK) throws Exception { - doReindex( - _cpSpecificationOptionLocalService.getCPSpecificationOption( - classPK)); - } - - @Override - protected void doReindex(String[] ids) throws Exception { - long companyId = GetterUtil.getLong(ids[0]); - - _reindexCPSpecificationOptions(companyId); - } - - private void _reindexCPSpecificationOptions(long companyId) - throws Exception { - - IndexableActionableDynamicQuery indexableActionableDynamicQuery = - _cpSpecificationOptionLocalService. - getIndexableActionableDynamicQuery(); - - indexableActionableDynamicQuery.setCompanyId(companyId); - indexableActionableDynamicQuery.setPerformActionMethod( - (CPSpecificationOption cpSpecificationOption) -> { - try { - indexableActionableDynamicQuery.addDocuments( - getDocument(cpSpecificationOption)); - } - catch (PortalException portalException) { - if (_log.isWarnEnabled()) { - _log.warn( - "Unable to index commerce product specification " + - "option " + cpSpecificationOption, - portalException); - } - } - }); - - indexableActionableDynamicQuery.performActions(); - } - - private static final Log _log = LogFactoryUtil.getLog( - CPSpecificationOptionIndexer.class); - - @Reference - private CPOptionCategoryLocalService _cpOptionCategoryLocalService; - - @Reference - private CPSpecificationOptionLocalService - _cpSpecificationOptionLocalService; - - @Reference - private IndexWriterHelper _indexWriterHelper; - - @Reference - private Localization _localization; - -} \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/CPSpecificationOptionModelSearchConfigurator.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/CPSpecificationOptionModelSearchConfigurator.java new file mode 100644 index 00000000000000..f2114b76cd2cac --- /dev/null +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/CPSpecificationOptionModelSearchConfigurator.java @@ -0,0 +1,81 @@ +/** + * SPDX-FileCopyrightText: (c) 2025 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.commerce.product.internal.search; + +import com.liferay.commerce.product.constants.CPField; +import com.liferay.commerce.product.internal.search.spi.model.index.contributor.CPSpecificationOptionModelIndexerWriterContributor; +import com.liferay.commerce.product.internal.search.spi.model.result.contributor.CPSpecificationOptionModelSummaryContributor; +import com.liferay.commerce.product.model.CPSpecificationOption; +import com.liferay.commerce.product.service.CPSpecificationOptionLocalService; +import com.liferay.portal.kernel.search.Field; +import com.liferay.portal.search.batch.DynamicQueryBatchIndexingActionableFactory; +import com.liferay.portal.search.spi.model.index.contributor.ModelIndexerWriterContributor; +import com.liferay.portal.search.spi.model.registrar.ModelSearchConfigurator; +import com.liferay.portal.search.spi.model.result.contributor.ModelSummaryContributor; + +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +/** + * @author Alessio Antonio Rendina + */ +@Component(service = ModelSearchConfigurator.class) +public class CPSpecificationOptionModelSearchConfigurator + implements ModelSearchConfigurator { + + @Override + public String getClassName() { + return CPSpecificationOption.class.getName(); + } + + @Override + public String[] getDefaultSelectedFieldNames() { + return new String[] { + Field.COMPANY_ID, Field.ENTRY_CLASS_NAME, Field.ENTRY_CLASS_PK, + Field.MODIFIED_DATE, Field.TITLE, Field.UID, CPField.KEY + }; + } + + @Override + public ModelIndexerWriterContributor + getModelIndexerWriterContributor() { + + return _modelIndexWriterContributor; + } + + @Override + public ModelSummaryContributor getModelSummaryContributor() { + return _modelSummaryContributor; + } + + @Override + public boolean isSearchResultPermissionFilterSuppressed() { + return true; + } + + @Activate + protected void activate() { + _modelIndexWriterContributor = + new CPSpecificationOptionModelIndexerWriterContributor( + _cpSpecificationOptionLocalService, + _dynamicQueryBatchIndexingActionableFactory); + } + + @Reference + private CPSpecificationOptionLocalService + _cpSpecificationOptionLocalService; + + @Reference + private DynamicQueryBatchIndexingActionableFactory + _dynamicQueryBatchIndexingActionableFactory; + + private ModelIndexerWriterContributor + _modelIndexWriterContributor; + private final ModelSummaryContributor _modelSummaryContributor = + new CPSpecificationOptionModelSummaryContributor(); + +} \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPSpecificationOptionModelDocumentContributor.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPSpecificationOptionModelDocumentContributor.java new file mode 100644 index 00000000000000..4e22295490a1e1 --- /dev/null +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPSpecificationOptionModelDocumentContributor.java @@ -0,0 +1,102 @@ +/** + * SPDX-FileCopyrightText: (c) 2025 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.commerce.product.internal.search.spi.model.index.contributor; + +import com.liferay.commerce.product.constants.CPField; +import com.liferay.commerce.product.model.CPOptionCategory; +import com.liferay.commerce.product.model.CPSpecificationOption; +import com.liferay.commerce.product.service.CPOptionCategoryLocalService; +import com.liferay.commerce.product.service.CPSpecificationOptionLocalService; +import com.liferay.portal.kernel.log.Log; +import com.liferay.portal.kernel.log.LogFactoryUtil; +import com.liferay.portal.kernel.search.Document; +import com.liferay.portal.kernel.search.Field; +import com.liferay.portal.kernel.util.Localization; +import com.liferay.portal.search.spi.model.index.contributor.ModelDocumentContributor; + +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +/** + * @author Alessio Antonio Rendina + */ +@Component( + property = "indexer.class.name=com.liferay.commerce.product.model.CPSpecificationOption", + service = ModelDocumentContributor.class +) +public class CPSpecificationOptionModelDocumentContributor + implements ModelDocumentContributor { + + @Override + public void contribute( + Document document, CPSpecificationOption cpSpecificationOption) { + + if (_log.isDebugEnabled()) { + _log.debug( + "Indexing commerce product specification option " + + cpSpecificationOption); + } + + CPOptionCategory cpOptionCategory = + _cpOptionCategoryLocalService.fetchCPOptionCategory( + cpSpecificationOption.getCPOptionCategoryId()); + + if (cpOptionCategory != null) { + document.addKeyword( + CPField.CP_OPTION_CATEGORY_ID, + cpOptionCategory.getCPOptionCategoryId()); + } + + document.addKeyword( + CPField.FACETABLE, cpSpecificationOption.isFacetable()); + document.addText(CPField.KEY, cpSpecificationOption.getKey()); + document.addKeyword(CPField.VISIBLE, cpSpecificationOption.isVisible()); + document.addNumberSortable( + Field.PRIORITY, cpSpecificationOption.getPriority()); + + String[] languageIds = _localization.getAvailableLanguageIds( + cpSpecificationOption.getTitle()); + + for (String languageId : languageIds) { + if (cpOptionCategory != null) { + document.addText( + _localization.getLocalizedName( + CPField.CP_OPTION_CATEGORY_TITLE, languageId), + cpOptionCategory.getTitle(languageId)); + } + + String title = cpSpecificationOption.getTitle(languageId); + + document.addText(Field.CONTENT, title); + + document.addText( + _localization.getLocalizedName(Field.DESCRIPTION, languageId), + cpSpecificationOption.getDescription(languageId)); + document.addText( + _localization.getLocalizedName(Field.TITLE, languageId), title); + } + + if (_log.isDebugEnabled()) { + _log.debug( + "Commerce product specification option " + + cpSpecificationOption + " indexed successfully"); + } + } + + private static final Log _log = LogFactoryUtil.getLog( + CPSpecificationOptionModelDocumentContributor.class); + + @Reference + private CPOptionCategoryLocalService _cpOptionCategoryLocalService; + + @Reference + private CPSpecificationOptionLocalService + _cpSpecificationOptionLocalService; + + @Reference + private Localization _localization; + +} \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPSpecificationOptionModelIndexerWriterContributor.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPSpecificationOptionModelIndexerWriterContributor.java new file mode 100644 index 00000000000000..696f4e4efd5801 --- /dev/null +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPSpecificationOptionModelIndexerWriterContributor.java @@ -0,0 +1,69 @@ +/** + * SPDX-FileCopyrightText: (c) 2025 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.commerce.product.internal.search.spi.model.index.contributor; + +import com.liferay.commerce.product.model.CPSpecificationOption; +import com.liferay.commerce.product.service.CPSpecificationOptionLocalService; +import com.liferay.portal.search.batch.BatchIndexingActionable; +import com.liferay.portal.search.batch.DynamicQueryBatchIndexingActionableFactory; +import com.liferay.portal.search.spi.model.index.contributor.ModelIndexerWriterContributor; +import com.liferay.portal.search.spi.model.index.contributor.helper.IndexerWriterMode; +import com.liferay.portal.search.spi.model.index.contributor.helper.ModelIndexerWriterDocumentHelper; + +/** + * @author Alessio Antonio Rendina + */ +public class CPSpecificationOptionModelIndexerWriterContributor + implements ModelIndexerWriterContributor { + + public CPSpecificationOptionModelIndexerWriterContributor( + CPSpecificationOptionLocalService cpSpecificationOptionLocalService, + DynamicQueryBatchIndexingActionableFactory + dynamicQueryBatchIndexingActionableFactory) { + + _cpSpecificationOptionLocalService = cpSpecificationOptionLocalService; + _dynamicQueryBatchIndexingActionableFactory = + dynamicQueryBatchIndexingActionableFactory; + } + + @Override + public void customize( + BatchIndexingActionable batchIndexingActionable, + ModelIndexerWriterDocumentHelper modelIndexerWriterDocumentHelper) { + + batchIndexingActionable.setPerformActionMethod( + (CPSpecificationOption cpSpecificationOption) -> + batchIndexingActionable.addDocuments( + modelIndexerWriterDocumentHelper.getDocument( + cpSpecificationOption))); + } + + @Override + public BatchIndexingActionable getBatchIndexingActionable() { + return _dynamicQueryBatchIndexingActionableFactory. + getBatchIndexingActionable( + _cpSpecificationOptionLocalService. + getIndexableActionableDynamicQuery()); + } + + @Override + public long getCompanyId(CPSpecificationOption cpSpecificationOption) { + return cpSpecificationOption.getCompanyId(); + } + + @Override + public IndexerWriterMode getIndexerWriterMode( + CPSpecificationOption cpSpecificationOption) { + + return IndexerWriterMode.UPDATE; + } + + private final CPSpecificationOptionLocalService + _cpSpecificationOptionLocalService; + private final DynamicQueryBatchIndexingActionableFactory + _dynamicQueryBatchIndexingActionableFactory; + +} \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPSpecificationOptionKeywordQueryContributor.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPSpecificationOptionKeywordQueryContributor.java new file mode 100644 index 00000000000000..d8bb3cf42419f6 --- /dev/null +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPSpecificationOptionKeywordQueryContributor.java @@ -0,0 +1,84 @@ +/** + * SPDX-FileCopyrightText: (c) 2025 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.commerce.product.internal.search.spi.model.query.contributor; + +import com.liferay.commerce.product.constants.CPField; +import com.liferay.commerce.product.model.CPSpecificationOption; +import com.liferay.portal.kernel.search.BooleanQuery; +import com.liferay.portal.kernel.search.ExpandoQueryContributor; +import com.liferay.portal.kernel.search.Field; +import com.liferay.portal.kernel.search.SearchContext; +import com.liferay.portal.kernel.util.Validator; +import com.liferay.portal.search.query.QueryHelper; +import com.liferay.portal.search.spi.model.query.contributor.KeywordQueryContributor; +import com.liferay.portal.search.spi.model.query.contributor.helper.KeywordQueryContributorHelper; + +import java.util.LinkedHashMap; + +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +/** + * @author Alessio Antonio Rendina + */ +@Component( + property = "indexer.class.name=com.liferay.commerce.product.model.CPSpecificationOption", + service = KeywordQueryContributor.class +) +public class CPSpecificationOptionKeywordQueryContributor + implements KeywordQueryContributor { + + @Override + public void contribute( + String keywords, BooleanQuery booleanQuery, + KeywordQueryContributorHelper keywordQueryContributorHelper) { + + SearchContext searchContext = + keywordQueryContributorHelper.getSearchContext(); + + _queryHelper.addSearchTerm( + booleanQuery, searchContext, CPField.CP_OPTION_CATEGORY_ID, false); + _queryHelper.addSearchTerm( + booleanQuery, searchContext, CPField.CP_OPTION_CATEGORY_TITLE, + false); + _queryHelper.addSearchLocalizedTerm( + booleanQuery, searchContext, CPField.CP_OPTION_CATEGORY_TITLE, + false); + _queryHelper.addSearchTerm( + booleanQuery, searchContext, CPField.KEY, false); + _queryHelper.addSearchLocalizedTerm( + booleanQuery, searchContext, Field.DESCRIPTION, false); + _queryHelper.addSearchTerm( + booleanQuery, searchContext, Field.ENTRY_CLASS_PK, false); + _queryHelper.addSearchTerm( + booleanQuery, searchContext, Field.TITLE, false); + _queryHelper.addSearchLocalizedTerm( + booleanQuery, searchContext, Field.TITLE, false); + _queryHelper.addSearchTerm( + booleanQuery, searchContext, Field.USER_NAME, false); + + LinkedHashMap params = + (LinkedHashMap)searchContext.getAttribute("params"); + + if (params != null) { + String expandoAttributes = (String)params.get("expandoAttributes"); + + if (Validator.isNotNull(expandoAttributes)) { + _expandoQueryContributor.contribute( + expandoAttributes, booleanQuery, + new String[] {CPSpecificationOption.class.getName()}, + searchContext); + } + } + } + + @Reference + private ExpandoQueryContributor _expandoQueryContributor; + + @Reference + private QueryHelper _queryHelper; + +} \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPSpecificationOptionModelPreFilterContributor.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPSpecificationOptionModelPreFilterContributor.java new file mode 100644 index 00000000000000..fc61be8ef2eb13 --- /dev/null +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPSpecificationOptionModelPreFilterContributor.java @@ -0,0 +1,66 @@ +/** + * SPDX-FileCopyrightText: (c) 2025 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.commerce.product.internal.search.spi.model.query.contributor; + +import com.liferay.commerce.product.constants.CPField; +import com.liferay.portal.kernel.search.SearchContext; +import com.liferay.portal.kernel.search.filter.BooleanFilter; +import com.liferay.portal.kernel.util.GetterUtil; +import com.liferay.portal.search.spi.model.query.contributor.ModelPreFilterContributor; +import com.liferay.portal.search.spi.model.registrar.ModelSearchSettings; + +import java.io.Serializable; + +import java.util.Map; + +import org.osgi.service.component.annotations.Component; + +/** + * @author Alessio Antonio Rendina + */ +@Component( + property = "indexer.class.name=com.liferay.commerce.product.model.CPSpecificationOption", + service = ModelPreFilterContributor.class +) +public class CPSpecificationOptionModelPreFilterContributor + implements ModelPreFilterContributor { + + @Override + public void contribute( + BooleanFilter booleanFilter, ModelSearchSettings modelSearchSettings, + SearchContext searchContext) { + + _filterByFacetable(booleanFilter, searchContext); + _filterByVisible(booleanFilter, searchContext); + } + + private void _filterByFacetable( + BooleanFilter booleanFilter, SearchContext searchContext) { + + Map attributes = searchContext.getAttributes(); + + if (attributes.containsKey(CPField.FACETABLE)) { + boolean facetable = GetterUtil.getBoolean( + attributes.get(CPField.FACETABLE)); + + booleanFilter.addRequiredTerm(CPField.FACETABLE, facetable); + } + } + + private void _filterByVisible( + BooleanFilter booleanFilter, SearchContext searchContext) { + + Map attributes = searchContext.getAttributes(); + + if (attributes.containsKey(CPField.VISIBLE)) { + boolean visible = GetterUtil.getBoolean( + attributes.get(CPField.VISIBLE)); + + booleanFilter.addRequiredTerm(CPField.VISIBLE, visible); + } + } + +} \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/result/contributor/CPSpecificationOptionModelSummaryContributor.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/result/contributor/CPSpecificationOptionModelSummaryContributor.java new file mode 100644 index 00000000000000..86f8ccb0d215f0 --- /dev/null +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/result/contributor/CPSpecificationOptionModelSummaryContributor.java @@ -0,0 +1,39 @@ +/** + * SPDX-FileCopyrightText: (c) 2025 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.commerce.product.internal.search.spi.model.result.contributor; + +import com.liferay.petra.string.StringPool; +import com.liferay.portal.kernel.search.Document; +import com.liferay.portal.kernel.search.Field; +import com.liferay.portal.kernel.search.Summary; +import com.liferay.portal.search.spi.model.result.contributor.ModelSummaryContributor; + +import java.util.Locale; + +/** + * @author Alessio Antonio Rendina + */ +public class CPSpecificationOptionModelSummaryContributor + implements ModelSummaryContributor { + + @Override + public Summary getSummary( + Document document, Locale locale, String snippet) { + + String prefix = Field.SNIPPET + StringPool.UNDERLINE; + + String title = document.get(prefix + Field.TITLE, Field.TITLE); + String content = document.get( + prefix + Field.DESCRIPTION, Field.DESCRIPTION); + + Summary summary = new Summary(title, content); + + summary.setMaxContentLength(200); + + return summary; + } + +} \ No newline at end of file From 4d28b4d2dd64403550e1ff29b9f48e9c9cce51d5 Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:46:27 +0100 Subject: [PATCH 05/18] LPD-48103 Refactor product specification option service local and remote service implementation --- .../CPSpecificationOptionLocalServiceImpl.java | 18 +++++++++++------- .../impl/CPSpecificationOptionServiceImpl.java | 14 +++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPSpecificationOptionLocalServiceImpl.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPSpecificationOptionLocalServiceImpl.java index 2f4d4710c85f95..8146e35317126e 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPSpecificationOptionLocalServiceImpl.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPSpecificationOptionLocalServiceImpl.java @@ -79,7 +79,7 @@ public CPSpecificationOption addCPSpecificationOption( String externalReferenceCode, long userId, long cpOptionCategoryId, long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, boolean facetable, String key, - double priority, ServiceContext serviceContext) + double priority, boolean visible, ServiceContext serviceContext) throws PortalException { User user = _userLocalService.getUser(userId); @@ -105,6 +105,7 @@ public CPSpecificationOption addCPSpecificationOption( cpSpecificationOption.setFacetable(facetable); cpSpecificationOption.setKey(key); cpSpecificationOption.setPriority(priority); + cpSpecificationOption.setVisible(visible); cpSpecificationOption.setExpandoBridgeAttributes(serviceContext); cpSpecificationOption = cpSpecificationOptionPersistence.update( @@ -209,12 +210,12 @@ public CPSpecificationOption getCPSpecificationOption( @Override public BaseModelSearchResult searchCPSpecificationOptions( - long companyId, Boolean facetable, String keywords, int start, - int end, Sort sort) + long companyId, Boolean facetable, Boolean visible, + String keywords, int start, int end, Sort sort) throws PortalException { SearchContext searchContext = _buildSearchContext( - companyId, facetable, keywords, start, end, sort); + companyId, facetable, visible, keywords, start, end, sort); return _searchCPSpecificationOptions(searchContext); } @@ -239,7 +240,7 @@ public CPSpecificationOption updateCPSpecificationOption( String externalReferenceCode, long cpSpecificationOptionId, long cpOptionCategoryId, long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, - boolean facetable, String key, double priority, + boolean facetable, String key, double priority, boolean visible, ServiceContext serviceContext) throws PortalException { @@ -261,6 +262,7 @@ public CPSpecificationOption updateCPSpecificationOption( cpSpecificationOption.setFacetable(facetable); cpSpecificationOption.setKey(key); cpSpecificationOption.setPriority(priority); + cpSpecificationOption.setVisible(visible); cpSpecificationOption.setExpandoBridgeAttributes(serviceContext); cpSpecificationOption = cpSpecificationOptionPersistence.update( @@ -290,8 +292,8 @@ public CPSpecificationOption updateCPSpecificationOption( } private SearchContext _buildSearchContext( - long companyId, Boolean facetable, String keywords, int start, int end, - Sort sort) { + long companyId, Boolean facetable, Boolean visible, String keywords, + int start, int end, Sort sort) { SearchContext searchContext = new SearchContext(); @@ -309,6 +311,8 @@ private SearchContext _buildSearchContext( CPField.FACETABLE, () -> facetable ).put( CPField.KEY, keywords + ).put( + CPField.VISIBLE, () -> visible ).put( Field.CONTENT, keywords ).put( diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPSpecificationOptionServiceImpl.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPSpecificationOptionServiceImpl.java index 2d98e67f196726..1bdbca7cf38e87 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPSpecificationOptionServiceImpl.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPSpecificationOptionServiceImpl.java @@ -41,7 +41,7 @@ public CPSpecificationOption addCPSpecificationOption( String externalReferenceCode, long cpOptionCategoryId, long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, boolean facetable, String key, - double priority, ServiceContext serviceContext) + double priority, boolean visible, ServiceContext serviceContext) throws PortalException { PortletResourcePermission portletResourcePermission = @@ -55,7 +55,7 @@ public CPSpecificationOption addCPSpecificationOption( return cpSpecificationOptionLocalService.addCPSpecificationOption( externalReferenceCode, getUserId(), cpOptionCategoryId, listTypeDefinitionIds, titleMap, descriptionMap, facetable, key, - priority, serviceContext); + priority, visible, serviceContext); } @Override @@ -137,12 +137,12 @@ public CPSpecificationOption getCPSpecificationOption( @Override public BaseModelSearchResult searchCPSpecificationOptions( - long companyId, Boolean facetable, String keywords, int start, - int end, Sort sort) + long companyId, Boolean facetable, Boolean visible, + String keywords, int start, int end, Sort sort) throws PortalException { return cpSpecificationOptionLocalService.searchCPSpecificationOptions( - companyId, facetable, keywords, start, end, sort); + companyId, facetable, visible, keywords, start, end, sort); } @Override @@ -150,7 +150,7 @@ public CPSpecificationOption updateCPSpecificationOption( String externalReferenceCode, long cpSpecificationOptionId, long cpOptionCategoryId, long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, - boolean facetable, String key, double priority, + boolean facetable, String key, double priority, boolean visible, ServiceContext serviceContext) throws PortalException { @@ -160,7 +160,7 @@ public CPSpecificationOption updateCPSpecificationOption( return cpSpecificationOptionLocalService.updateCPSpecificationOption( externalReferenceCode, cpSpecificationOptionId, cpOptionCategoryId, listTypeDefinitionIds, titleMap, descriptionMap, facetable, key, - priority, serviceContext); + priority, visible, serviceContext); } @Reference( From 81cb91633cfbab6406a8d4671e8edc48d479b60a Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:46:35 +0100 Subject: [PATCH 06/18] LPD-48103 Refactor product specification option value service local and remote service implementation --- ...cificationOptionValueLocalServiceImpl.java | 127 +++++++++++++++--- ...onSpecificationOptionValueServiceImpl.java | 24 ++-- 2 files changed, 125 insertions(+), 26 deletions(-) diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPDefinitionSpecificationOptionValueLocalServiceImpl.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPDefinitionSpecificationOptionValueLocalServiceImpl.java index bdf5ca578e2836..b3ee346aeb3968 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPDefinitionSpecificationOptionValueLocalServiceImpl.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPDefinitionSpecificationOptionValueLocalServiceImpl.java @@ -9,9 +9,13 @@ import com.liferay.commerce.product.internal.util.CPDefinitionLocalServiceCircularDependencyUtil; import com.liferay.commerce.product.model.CPDefinition; import com.liferay.commerce.product.model.CPDefinitionSpecificationOptionValue; +import com.liferay.commerce.product.model.CPDefinitionSpecificationOptionValueTable; +import com.liferay.commerce.product.model.CPSpecificationOptionTable; import com.liferay.commerce.product.service.base.CPDefinitionSpecificationOptionValueLocalServiceBaseImpl; import com.liferay.commerce.product.service.persistence.CPDefinitionPersistence; import com.liferay.expando.kernel.service.ExpandoRowLocalService; +import com.liferay.petra.sql.dsl.DSLQueryFactoryUtil; +import com.liferay.petra.sql.dsl.expression.Predicate; import com.liferay.portal.aop.AopService; import com.liferay.portal.kernel.dao.orm.QueryUtil; import com.liferay.portal.kernel.exception.PortalException; @@ -49,7 +53,7 @@ public class CPDefinitionSpecificationOptionValueLocalServiceImpl addCPDefinitionSpecificationOptionValue( String externalReferenceCode, long cpDefinitionId, long cpSpecificationOptionId, long cpOptionCategoryId, - double priority, Map valueMap, + double priority, Map valueMap, boolean visible, ServiceContext serviceContext) throws PortalException { @@ -93,6 +97,7 @@ public class CPDefinitionSpecificationOptionValueLocalServiceImpl String.valueOf(cpDefinitionSpecificationOptionValueId)); cpDefinitionSpecificationOptionValue.setPriority(priority); cpDefinitionSpecificationOptionValue.setValueMap(valueMap); + cpDefinitionSpecificationOptionValue.setVisible(visible); cpDefinitionSpecificationOptionValue.setExpandoBridgeAttributes( serviceContext); @@ -201,7 +206,8 @@ public void deleteCPDefinitionSpecificationOptionValues( List cpDefinitionSpecificationOptionValues = getCPDefinitionSpecificationOptionValues( - cpDefinitionId, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null); + cpDefinitionId, null, QueryUtil.ALL_POS, QueryUtil.ALL_POS, + null); // Commerce product definition specification option value @@ -275,30 +281,73 @@ public void deleteCPSpecificationOptionDefinitionValues( @Override public List getCPDefinitionSpecificationOptionValues( - long cpSpecificationOptionId, int start, int end) { + long cpDefinitionId, Boolean visible, int start, int end, + OrderByComparator + orderByComparator) { - return cpDefinitionSpecificationOptionValuePersistence. - findByCPSpecificationOptionId(cpSpecificationOptionId, start, end); + if (visible == null) { + return cpDefinitionSpecificationOptionValuePersistence. + findByCPDefinitionId( + cpDefinitionId, start, end, orderByComparator); + } + + return dslQuery( + DSLQueryFactoryUtil.select( + CPDefinitionSpecificationOptionValueTable.INSTANCE + ).from( + CPDefinitionSpecificationOptionValueTable.INSTANCE + ).innerJoinON( + CPSpecificationOptionTable.INSTANCE, + CPSpecificationOptionTable.INSTANCE.CPSpecificationOptionId.eq( + CPDefinitionSpecificationOptionValueTable.INSTANCE. + CPSpecificationOptionId) + ).where( + _getPredicate(cpDefinitionId, visible) + ).orderBy( + CPDefinitionSpecificationOptionValueTable.INSTANCE, + orderByComparator + ).limit( + start, end + )); } @Override public List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, int start, int end, - OrderByComparator - orderByComparator) { + long cpSpecificationOptionId, int start, int end) { return cpDefinitionSpecificationOptionValuePersistence. - findByCPDefinitionId(cpDefinitionId, start, end, orderByComparator); + findByCPSpecificationOptionId(cpSpecificationOptionId, start, end); } @Override public List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, long cpOptionCategoryId) { + long cpDefinitionId, long cpOptionCategoryId, Boolean visible) { + + if (visible == null) { + return cpDefinitionSpecificationOptionValuePersistence.findByC_COC( + cpDefinitionId, cpOptionCategoryId); + } - return cpDefinitionSpecificationOptionValuePersistence.findByC_COC( - cpDefinitionId, cpOptionCategoryId); + return dslQuery( + DSLQueryFactoryUtil.select( + CPDefinitionSpecificationOptionValueTable.INSTANCE + ).from( + CPDefinitionSpecificationOptionValueTable.INSTANCE + ).innerJoinON( + CPSpecificationOptionTable.INSTANCE, + CPSpecificationOptionTable.INSTANCE.CPSpecificationOptionId.eq( + CPDefinitionSpecificationOptionValueTable.INSTANCE. + CPSpecificationOptionId) + ).where( + _getPredicate( + cpDefinitionId, visible + ).and( + CPDefinitionSpecificationOptionValueTable.INSTANCE. + CPOptionCategoryId.eq(cpOptionCategoryId) + ) + )); } @Override @@ -312,10 +361,27 @@ public void deleteCPSpecificationOptionDefinitionValues( @Override public int getCPDefinitionSpecificationOptionValuesCount( - long cpDefinitionId) { + long cpDefinitionId, Boolean visible) { - return cpDefinitionSpecificationOptionValuePersistence. - countByCPDefinitionId(cpDefinitionId); + if (visible == null) { + return cpDefinitionSpecificationOptionValuePersistence. + countByCPDefinitionId(cpDefinitionId); + } + + return dslQueryCount( + DSLQueryFactoryUtil.countDistinct( + CPDefinitionSpecificationOptionValueTable.INSTANCE. + CPDefinitionSpecificationOptionValueId + ).from( + CPDefinitionSpecificationOptionValueTable.INSTANCE + ).innerJoinON( + CPSpecificationOptionTable.INSTANCE, + CPSpecificationOptionTable.INSTANCE.CPSpecificationOptionId.eq( + CPDefinitionSpecificationOptionValueTable.INSTANCE. + CPSpecificationOptionId) + ).where( + _getPredicate(cpDefinitionId, visible) + )); } @Override @@ -332,7 +398,8 @@ public int getCPSpecificationOptionDefinitionValuesCount( String externalReferenceCode, long cpDefinitionSpecificationOptionValueId, long cpOptionCategoryId, String key, double priority, - Map valueMap, ServiceContext serviceContext) + Map valueMap, boolean visible, + ServiceContext serviceContext) throws PortalException { // Commerce product definition specification option value @@ -368,6 +435,7 @@ public int getCPSpecificationOptionDefinitionValuesCount( cpDefinitionSpecificationOptionValue.setKey(key); cpDefinitionSpecificationOptionValue.setPriority(priority); cpDefinitionSpecificationOptionValue.setValueMap(valueMap); + cpDefinitionSpecificationOptionValue.setVisible(visible); cpDefinitionSpecificationOptionValue.setExpandoBridgeAttributes( serviceContext); @@ -425,6 +493,33 @@ public CPDefinitionSpecificationOptionValue updateCPOptionCategoryId( return cpDefinitionSpecificationOptionValue; } + private Predicate _getPredicate(long cpDefinitionId, boolean visible) { + return CPDefinitionSpecificationOptionValueTable.INSTANCE. + CPDefinitionId.eq( + cpDefinitionId + ).and( + () -> { + if (visible) { + return CPDefinitionSpecificationOptionValueTable. + INSTANCE.visible.eq( + true + ).and( + CPSpecificationOptionTable.INSTANCE.visible.eq( + true) + ); + } + + return CPDefinitionSpecificationOptionValueTable.INSTANCE. + visible.eq( + false + ).or( + CPSpecificationOptionTable.INSTANCE.visible.eq( + false) + ); + } + ); + } + private void _reindexCPDefinition(long cpDefinitionId) throws PortalException { diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPDefinitionSpecificationOptionValueServiceImpl.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPDefinitionSpecificationOptionValueServiceImpl.java index 9fadfe5a9a56e6..854fe5e78bbc91 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPDefinitionSpecificationOptionValueServiceImpl.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPDefinitionSpecificationOptionValueServiceImpl.java @@ -46,7 +46,7 @@ public class CPDefinitionSpecificationOptionValueServiceImpl addCPDefinitionSpecificationOptionValue( String externalReferenceCode, long cpDefinitionId, long cpSpecificationOptionId, long cpOptionCategoryId, - double priority, Map valueMap, + double priority, Map valueMap, boolean visible, ServiceContext serviceContext) throws PortalException { @@ -55,7 +55,8 @@ public class CPDefinitionSpecificationOptionValueServiceImpl return cpDefinitionSpecificationOptionValueLocalService. addCPDefinitionSpecificationOptionValue( externalReferenceCode, cpDefinitionId, cpSpecificationOptionId, - cpOptionCategoryId, priority, valueMap, serviceContext); + cpOptionCategoryId, priority, valueMap, visible, + serviceContext); } @Override @@ -170,7 +171,7 @@ public void deleteCPDefinitionSpecificationOptionValues(long cpDefinitionId) @Override public List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, int start, int end, + long cpDefinitionId, Boolean visible, int start, int end, OrderByComparator orderByComparator) throws PortalException { @@ -179,31 +180,32 @@ public void deleteCPDefinitionSpecificationOptionValues(long cpDefinitionId) return cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValues( - cpDefinitionId, start, end, orderByComparator); + cpDefinitionId, visible, start, end, orderByComparator); } @Override public List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, long cpOptionCategoryId) + long cpDefinitionId, long cpOptionCategoryId, Boolean visible) throws PortalException { _checkCommerceCatalog(cpDefinitionId, ActionKeys.VIEW); return cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValues( - cpDefinitionId, cpOptionCategoryId); + cpDefinitionId, cpOptionCategoryId, visible); } @Override public int getCPDefinitionSpecificationOptionValuesCount( - long cpDefinitionId) + long cpDefinitionId, Boolean visible) throws PortalException { _checkCommerceCatalog(cpDefinitionId, ActionKeys.VIEW); return cpDefinitionSpecificationOptionValueLocalService. - getCPDefinitionSpecificationOptionValuesCount(cpDefinitionId); + getCPDefinitionSpecificationOptionValuesCount( + cpDefinitionId, visible); } @Override @@ -212,7 +214,8 @@ public int getCPDefinitionSpecificationOptionValuesCount( String externalReferenceCode, long cpDefinitionSpecificationOptionValueId, long cpOptionCategoryId, String key, double priority, - Map valueMap, ServiceContext serviceContext) + Map valueMap, boolean visible, + ServiceContext serviceContext) throws PortalException { CPDefinitionSpecificationOptionValue @@ -228,7 +231,8 @@ public int getCPDefinitionSpecificationOptionValuesCount( return cpDefinitionSpecificationOptionValueLocalService. updateCPDefinitionSpecificationOptionValue( externalReferenceCode, cpDefinitionSpecificationOptionValueId, - cpOptionCategoryId, key, priority, valueMap, serviceContext); + cpOptionCategoryId, key, priority, valueMap, visible, + serviceContext); } private void _checkCommerceCatalog(long cpDefinitionId, String actionId) From cd0cdcf862d4b02bda0f03be55340e562bd422a7 Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:42:32 +0100 Subject: [PATCH 07/18] LPD-48103 Update usages --- .../util/CPDefinitionsImporter.java | 6 ++++- .../util/CPSpecificationOptionsImporter.java | 10 +++++-- .../helper/CPCompareContentHelperImpl.java | 5 +++- .../internal/helper/CPContentHelperImpl.java | 4 +-- ...luesRelatedInfoItemCollectionProvider.java | 5 ++-- ...efinitionSpecificationFDSDataProvider.java | 4 +-- ...cificationOptionValueMVCActionCommand.java | 5 ++-- ..._definition_specification_option_value.jsp | 2 ++ ...nOptionItemSelectorViewDisplayContext.java | 2 +- .../CPSpecificationOptionDisplayContext.java | 2 +- ...CPSpecificationOptionMVCActionCommand.java | 5 ++-- .../specification_option/details.jsp | 2 ++ .../CPDefinitionModelDocumentContributor.java | 16 +++++++++--- .../product/model/impl/CPDefinitionImpl.java | 2 +- .../product/test/util/CPTestUtil.java | 2 +- ...tionValueTableReferenceDefinitionTest.java | 4 +-- ...nitionRelTableReferenceDefinitionTest.java | 2 +- ...ionOptionTableReferenceDefinitionTest.java | 2 +- .../ListTypeDefinitionModelListenerTest.java | 2 +- .../test/SpecificationOptionFacetsTest.java | 8 +++--- ...ecificationOptionValuePersistenceTest.java | 12 ++++++++- .../CPSpecificationOptionPersistenceTest.java | 11 ++++++-- .../test/CPDefinitionLocalServiceTest.java | 13 ++++++---- ...CPSpecificationOptionLocalServiceTest.java | 8 +++--- ...ficationOptionValueUpgradeProcessTest.java | 8 +++--- .../ProductSpecificationResourceImpl.java | 4 +-- .../v1_0/SpecificationResourceImpl.java | 7 ++++- .../util/v1_0/ProductSpecificationUtil.java | 26 +++++++++---------- .../test/ListTypeDefinitionResourceTest.java | 2 +- .../ProductSpecificationResourceImpl.java | 4 +-- .../ProductSpecificationResourceTest.java | 4 +-- .../test/BundleSiteInitializerTest.java | 2 +- .../v1_0/converter/ProductDTOConverter.java | 10 ++++++- 33 files changed, 133 insertions(+), 68 deletions(-) diff --git a/modules/apps/commerce/commerce-initializer-util/src/main/java/com/liferay/commerce/initializer/util/CPDefinitionsImporter.java b/modules/apps/commerce/commerce-initializer-util/src/main/java/com/liferay/commerce/initializer/util/CPDefinitionsImporter.java index db7b7400acc0b8..1b6c7a867b5751 100644 --- a/modules/apps/commerce/commerce-initializer-util/src/main/java/com/liferay/commerce/initializer/util/CPDefinitionsImporter.java +++ b/modules/apps/commerce/commerce-initializer-util/src/main/java/com/liferay/commerce/initializer/util/CPDefinitionsImporter.java @@ -841,7 +841,11 @@ private CPDefinitionOptionValueRel _importCPDefinitionOptionValueRel( addCPDefinitionSpecificationOptionValue( StringPool.BLANK, cpDefinitionId, cpSpecificationOption.getCPSpecificationOptionId(), - cpOptionCategoryId, priority, valueMap, serviceContext); + cpOptionCategoryId, priority, valueMap, + GetterUtil.getBoolean( + jsonObject.get("visible"), + cpSpecificationOption.isVisible()), + serviceContext); } private CPInstance _importCPInstance( diff --git a/modules/apps/commerce/commerce-initializer-util/src/main/java/com/liferay/commerce/initializer/util/CPSpecificationOptionsImporter.java b/modules/apps/commerce/commerce-initializer-util/src/main/java/com/liferay/commerce/initializer/util/CPSpecificationOptionsImporter.java index 538e7f22a27a06..7647d061865635 100644 --- a/modules/apps/commerce/commerce-initializer-util/src/main/java/com/liferay/commerce/initializer/util/CPSpecificationOptionsImporter.java +++ b/modules/apps/commerce/commerce-initializer-util/src/main/java/com/liferay/commerce/initializer/util/CPSpecificationOptionsImporter.java @@ -16,6 +16,7 @@ import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.service.UserLocalService; +import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.Validator; @@ -99,12 +100,17 @@ private CPSpecificationOption _importCPSpecificationOption( cpSpecificationOption.getExternalReferenceCode(), cpSpecificationOption.getCPSpecificationOptionId(), cpOptionCategoryId, null, titleMap, descriptionMap, - facetable, key, priority, serviceContext); + facetable, key, priority, + GetterUtil.getBoolean( + jsonObject.get("visible"), + cpSpecificationOption.isVisible()), + serviceContext); } return _cpSpecificationOptionLocalService.addCPSpecificationOption( null, serviceContext.getUserId(), cpOptionCategoryId, null, - titleMap, descriptionMap, facetable, key, priority, serviceContext); + titleMap, descriptionMap, facetable, key, priority, + jsonObject.getBoolean("visible", true), serviceContext); } @Reference diff --git a/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPCompareContentHelperImpl.java b/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPCompareContentHelperImpl.java index 875f1ec0f88732..83f1c5d1bf72bd 100644 --- a/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPCompareContentHelperImpl.java +++ b/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPCompareContentHelperImpl.java @@ -336,7 +336,10 @@ protected List getCPSpecificationOptions( for (CPDefinitionSpecificationOptionValue cpDefinitionSpecificationOptionValue : - cpDefinition.getCPDefinitionSpecificationOptionValues()) { + _cpDefinitionSpecificationOptionValueLocalService. + getCPDefinitionSpecificationOptionValues( + cpDefinition.getCPDefinitionId(), true, + QueryUtil.ALL_POS, QueryUtil.ALL_POS, null)) { CPSpecificationOption cpSpecificationOption = cpDefinitionSpecificationOptionValue.getCPSpecificationOption(); diff --git a/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPContentHelperImpl.java b/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPContentHelperImpl.java index 0da2bc374250ac..eb1cffb6bb9271 100644 --- a/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPContentHelperImpl.java +++ b/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPContentHelperImpl.java @@ -162,7 +162,7 @@ public String getAvailabilityLabel(HttpServletRequest httpServletRequest) return _cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValues( - cpDefinitionId, cpOptionCategoryId); + cpDefinitionId, cpOptionCategoryId, true); } @Override @@ -346,7 +346,7 @@ public FileVersion getCPDefinitionImageFileVersion( return _cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValues( cpDefinitionId, - CPOptionCategoryConstants.DEFAULT_CP_OPTION_CATEGORY_ID); + CPOptionCategoryConstants.DEFAULT_CP_OPTION_CATEGORY_ID, true); } @Override diff --git a/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/info/collection/provider/CPDefinitionSpecificationOptionValuesRelatedInfoItemCollectionProvider.java b/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/info/collection/provider/CPDefinitionSpecificationOptionValuesRelatedInfoItemCollectionProvider.java index e61d4161e52b36..8b8012e0900273 100644 --- a/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/info/collection/provider/CPDefinitionSpecificationOptionValuesRelatedInfoItemCollectionProvider.java +++ b/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/info/collection/provider/CPDefinitionSpecificationOptionValuesRelatedInfoItemCollectionProvider.java @@ -80,7 +80,8 @@ public String getLabel(Locale locale) { _cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValues( cpDefinition.getCPDefinitionId(), - CPOptionCategoryConstants.DEFAULT_CP_OPTION_CATEGORY_ID)); + CPOptionCategoryConstants.DEFAULT_CP_OPTION_CATEGORY_ID, + true)); List cpOptionCategories = _cpOptionCategoryLocalService.getCPOptionCategories( @@ -92,7 +93,7 @@ public String getLabel(Locale locale) { _cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValues( cpDefinition.getCPDefinitionId(), - cpOptionCategory.getCPOptionCategoryId())); + cpOptionCategory.getCPOptionCategoryId(), true)); } return cpDefinitionSpecificationOptionValues; diff --git a/modules/apps/commerce/commerce-product-definitions-web/src/main/java/com/liferay/commerce/product/definitions/web/internal/frontend/data/set/provider/CommerceProductDefinitionSpecificationFDSDataProvider.java b/modules/apps/commerce/commerce-product-definitions-web/src/main/java/com/liferay/commerce/product/definitions/web/internal/frontend/data/set/provider/CommerceProductDefinitionSpecificationFDSDataProvider.java index 86576b52058e7c..54830279d33448 100644 --- a/modules/apps/commerce/commerce-product-definitions-web/src/main/java/com/liferay/commerce/product/definitions/web/internal/frontend/data/set/provider/CommerceProductDefinitionSpecificationFDSDataProvider.java +++ b/modules/apps/commerce/commerce-product-definitions-web/src/main/java/com/liferay/commerce/product/definitions/web/internal/frontend/data/set/provider/CommerceProductDefinitionSpecificationFDSDataProvider.java @@ -59,7 +59,7 @@ public List getItems( return TransformUtil.transform( _cpDefinitionSpecificationOptionValueService. getCPDefinitionSpecificationOptionValues( - cpDefinitionId, fdsPagination.getStartPosition(), + cpDefinitionId, null, fdsPagination.getStartPosition(), fdsPagination.getEndPosition(), null), cpDefinitionSpecificationOptionValue -> { CPSpecificationOption cpSpecificationOption = @@ -86,7 +86,7 @@ public int getItemsCount( httpServletRequest, "cpDefinitionId"); return _cpDefinitionSpecificationOptionValueService. - getCPDefinitionSpecificationOptionValuesCount(cpDefinitionId); + getCPDefinitionSpecificationOptionValuesCount(cpDefinitionId, null); } private String _getCPOptionCategoryTitle( diff --git a/modules/apps/commerce/commerce-product-definitions-web/src/main/java/com/liferay/commerce/product/definitions/web/internal/portlet/action/EditCPDefinitionSpecificationOptionValueMVCActionCommand.java b/modules/apps/commerce/commerce-product-definitions-web/src/main/java/com/liferay/commerce/product/definitions/web/internal/portlet/action/EditCPDefinitionSpecificationOptionValueMVCActionCommand.java index 8bebfdf211b3d8..05e5a71b062f3a 100644 --- a/modules/apps/commerce/commerce-product-definitions-web/src/main/java/com/liferay/commerce/product/definitions/web/internal/portlet/action/EditCPDefinitionSpecificationOptionValueMVCActionCommand.java +++ b/modules/apps/commerce/commerce-product-definitions-web/src/main/java/com/liferay/commerce/product/definitions/web/internal/portlet/action/EditCPDefinitionSpecificationOptionValueMVCActionCommand.java @@ -133,7 +133,7 @@ private void _addCPDefinitionSpecificationOptionValues( addCPDefinitionSpecificationOptionValue( StringPool.BLANK, cpDefinitionId, cpSpecificationOptionId, cpSpecificationOption.getCPOptionCategoryId(), i, null, - serviceContext); + cpSpecificationOption.isVisible(), serviceContext); } } @@ -215,6 +215,7 @@ private Map _getValueMap( double priority = ParamUtil.getDouble(actionRequest, "priority"); Map valueMap = _getValueMap( cpDefinitionSpecificationOptionValueId, actionRequest); + boolean visible = ParamUtil.getBoolean(actionRequest, "visible"); ServiceContext serviceContext = ServiceContextFactory.getInstance( CPDefinitionSpecificationOptionValue.class.getName(), @@ -230,7 +231,7 @@ private Map _getValueMap( updateCPDefinitionSpecificationOptionValue( cpDefinitionSpecificationOptionValue.getExternalReferenceCode(), cpDefinitionSpecificationOptionValueId, cpOptionCategoryId, key, - priority, valueMap, serviceContext); + priority, valueMap, visible, serviceContext); } @Reference diff --git a/modules/apps/commerce/commerce-product-definitions-web/src/main/resources/META-INF/resources/edit_cp_definition_specification_option_value.jsp b/modules/apps/commerce/commerce-product-definitions-web/src/main/resources/META-INF/resources/edit_cp_definition_specification_option_value.jsp index 11555bda239e56..4275ea8cf25f89 100644 --- a/modules/apps/commerce/commerce-product-definitions-web/src/main/resources/META-INF/resources/edit_cp_definition_specification_option_value.jsp +++ b/modules/apps/commerce/commerce-product-definitions-web/src/main/resources/META-INF/resources/edit_cp_definition_specification_option_value.jsp @@ -85,6 +85,8 @@ Map> selectOptionsMap = cpDefinitionSpecificationOpti + + cpOptionCategories = cpSpecificationOptionDisplayContext. + + <% diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPDefinitionModelDocumentContributor.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPDefinitionModelDocumentContributor.java index 68ddb90823bfb6..6db3efc19d05df 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPDefinitionModelDocumentContributor.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/index/contributor/CPDefinitionModelDocumentContributor.java @@ -35,6 +35,7 @@ import com.liferay.commerce.product.service.CPConfigurationListLocalService; import com.liferay.commerce.product.service.CPDefinitionLinkLocalService; import com.liferay.commerce.product.service.CPDefinitionLocalService; +import com.liferay.commerce.product.service.CPDefinitionSpecificationOptionValueLocalService; import com.liferay.commerce.product.service.CPInstanceLocalService; import com.liferay.commerce.product.service.CommerceChannelRelLocalService; import com.liferay.friendly.url.model.FriendlyURLEntry; @@ -235,8 +236,10 @@ public void contribute(Document document, CPDefinition cpDefinition) { List cpDefinitionSpecificationOptionValues = _getFilteredCPDefinitionSpecificationOptionValues( - cpDefinition. - getCPDefinitionSpecificationOptionValues()); + _cpDefinitionSpecificationOptionValueLocalService. + getCPDefinitionSpecificationOptionValues( + cpDefinition.getCPDefinitionId(), null, + QueryUtil.ALL_POS, QueryUtil.ALL_POS, null)); document.addNumber( CPField.SPECIFICATION_IDS, @@ -661,7 +664,10 @@ private String _getCPSpecificationOptionKey( cpDefinitionSpecificationOptionValue. getCPSpecificationOption(); - if (!cpSpecificationOption.isFacetable()) { + if (!cpDefinitionSpecificationOptionValue.isVisible() || + !cpSpecificationOption.isFacetable() || + !cpSpecificationOption.isVisible()) { + return null; } @@ -739,6 +745,10 @@ private boolean _isHidden(CPDefinition cpDefinition, CProduct cProduct) { @Reference private CPDefinitionLocalService _cpDefinitionLocalService; + @Reference + private CPDefinitionSpecificationOptionValueLocalService + _cpDefinitionSpecificationOptionValueLocalService; + @Reference private CPInstanceLocalService _cpInstanceLocalService; diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionImpl.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionImpl.java index 0ee609cf73f2f7..04482cf59bd536 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionImpl.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionImpl.java @@ -224,7 +224,7 @@ public List getCPDefinitionOptionRels() { return CPDefinitionSpecificationOptionValueLocalServiceUtil. getCPDefinitionSpecificationOptionValues( - getCPDefinitionId(), QueryUtil.ALL_POS, QueryUtil.ALL_POS, + getCPDefinitionId(), true, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null); } diff --git a/modules/apps/commerce/commerce-product-test-util/src/main/java/com/liferay/commerce/product/test/util/CPTestUtil.java b/modules/apps/commerce/commerce-product-test-util/src/main/java/com/liferay/commerce/product/test/util/CPTestUtil.java index 90f18ee89c0479..b2e2a1bda7de3d 100644 --- a/modules/apps/commerce/commerce-product-test-util/src/main/java/com/liferay/commerce/product/test/util/CPTestUtil.java +++ b/modules/apps/commerce/commerce-product-test-util/src/main/java/com/liferay/commerce/product/test/util/CPTestUtil.java @@ -752,7 +752,7 @@ public static CPSpecificationOption addCPSpecificationOption( RandomTestUtil.randomString(), serviceContext.getUserId(), 0, null, RandomTestUtil.randomLocaleStringMap(), RandomTestUtil.randomLocaleStringMap(), facetable, - RandomTestUtil.randomString(), RandomTestUtil.randomDouble(), + RandomTestUtil.randomString(), RandomTestUtil.randomDouble(), true, serviceContext); } diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPDefinitionSpecificationOptionValueTableReferenceDefinitionTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPDefinitionSpecificationOptionValueTableReferenceDefinitionTest.java index 779b4f2b21ee90..259413a09c5238 100644 --- a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPDefinitionSpecificationOptionValueTableReferenceDefinitionTest.java +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPDefinitionSpecificationOptionValueTableReferenceDefinitionTest.java @@ -83,7 +83,7 @@ public void setUp() throws Exception { RandomTestUtil.randomLocaleStringMap(), true, CPDefinitionSpecificationOptionValueTableReferenceDefinitionTest.class. getSimpleName(), - RandomTestUtil.randomDouble(), _serviceContext); + RandomTestUtil.randomDouble(), true, _serviceContext); } @Override @@ -94,7 +94,7 @@ protected CTModel addCTModel() throws Exception { _cpSpecificationOption.getCPSpecificationOptionId(), _cpOptionCategory.getCPOptionCategoryId(), RandomTestUtil.randomDouble(), - RandomTestUtil.randomLocaleStringMap(), _serviceContext); + RandomTestUtil.randomLocaleStringMap(), true, _serviceContext); } @Inject diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPSOListTypeDefinitionRelTableReferenceDefinitionTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPSOListTypeDefinitionRelTableReferenceDefinitionTest.java index 018798a0303184..cb0e30276d38af 100644 --- a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPSOListTypeDefinitionRelTableReferenceDefinitionTest.java +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPSOListTypeDefinitionRelTableReferenceDefinitionTest.java @@ -71,7 +71,7 @@ public void setUp() throws Exception { RandomTestUtil.randomBoolean(), CPSpecificationOptionTableReferenceDefinitionTest.class. getSimpleName(), - RandomTestUtil.randomDouble(), + RandomTestUtil.randomDouble(), true, ServiceContextTestUtil.getServiceContext(group.getGroupId())); _listTypeDefinition = diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPSpecificationOptionTableReferenceDefinitionTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPSpecificationOptionTableReferenceDefinitionTest.java index 712db5e17824fa..307c5985708d59 100644 --- a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPSpecificationOptionTableReferenceDefinitionTest.java +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/change/tracking/test/CPSpecificationOptionTableReferenceDefinitionTest.java @@ -65,7 +65,7 @@ protected CTModel addCTModel() throws Exception { RandomTestUtil.randomBoolean(), CPSpecificationOptionTableReferenceDefinitionTest.class. getSimpleName(), - RandomTestUtil.randomDouble(), + RandomTestUtil.randomDouble(), true, ServiceContextTestUtil.getServiceContext(group.getGroupId())); return _cpSpecificationOption; diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/model/listener/test/ListTypeDefinitionModelListenerTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/model/listener/test/ListTypeDefinitionModelListenerTest.java index a6ae00296490c4..d07634202838c8 100644 --- a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/model/listener/test/ListTypeDefinitionModelListenerTest.java +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/model/listener/test/ListTypeDefinitionModelListenerTest.java @@ -100,7 +100,7 @@ public void testDeleteListTypeDefinitionLinkedToCPSpecificationOption() RandomTestUtil.randomLocaleStringMap(), true, CPDefinitionSpecificationOptionValueTableReferenceDefinitionTest. class.getSimpleName(), - RandomTestUtil.randomDouble(), _serviceContext); + RandomTestUtil.randomDouble(), true, _serviceContext); _listTypeDefinitionLocalService.deleteListTypeDefinition( _listTypeDefinition.getListTypeDefinitionId()); diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/search/test/SpecificationOptionFacetsTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/search/test/SpecificationOptionFacetsTest.java index e28fe48529d6bf..464ad13e0deb75 100644 --- a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/search/test/SpecificationOptionFacetsTest.java +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/search/test/SpecificationOptionFacetsTest.java @@ -112,7 +112,7 @@ public void testGetFacets() throws Exception { RandomTestUtil.randomLocaleStringMap(), RandomTestUtil.randomLocaleStringMap(), true, RandomTestUtil.randomString(), RandomTestUtil.randomDouble(), - serviceContext); + true, serviceContext); _cpDefinitionSpecificationOptionValueLocalService. addCPDefinitionSpecificationOptionValue( @@ -120,7 +120,7 @@ public void testGetFacets() throws Exception { cpSpecificationOption.getCPSpecificationOptionId(), cpOptionCategory.getCPOptionCategoryId(), RandomTestUtil.randomDouble(), - RandomTestUtil.randomLocaleStringMap(), serviceContext); + RandomTestUtil.randomLocaleStringMap(), true, serviceContext); SearchContext searchContext = SearchContextTestUtil.getSearchContext( _commerceCatalog.getGroupId()); @@ -189,7 +189,7 @@ public void testGetFacetsWithSpecificationOptionNotFacetable() cpOptionCategory.getCPOptionCategoryId(), null, RandomTestUtil.randomLocaleStringMap(), RandomTestUtil.randomLocaleStringMap(), false, - RandomTestUtil.randomString(), 0, serviceContext); + RandomTestUtil.randomString(), 0, true, serviceContext); _cpDefinitionSpecificationOptionValueLocalService. addCPDefinitionSpecificationOptionValue( @@ -197,7 +197,7 @@ public void testGetFacetsWithSpecificationOptionNotFacetable() cpSpecificationOption.getCPSpecificationOptionId(), cpOptionCategory.getCPOptionCategoryId(), RandomTestUtil.randomDouble(), - RandomTestUtil.randomLocaleStringMap(), serviceContext); + RandomTestUtil.randomLocaleStringMap(), true, serviceContext); SearchContext searchContext = SearchContextTestUtil.getSearchContext( _commerceCatalog.getGroupId()); diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/persistence/test/CPDefinitionSpecificationOptionValuePersistenceTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/persistence/test/CPDefinitionSpecificationOptionValuePersistenceTest.java index 4b89deb29383bb..4225296681da47 100644 --- a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/persistence/test/CPDefinitionSpecificationOptionValuePersistenceTest.java +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/persistence/test/CPDefinitionSpecificationOptionValuePersistenceTest.java @@ -174,6 +174,9 @@ public void testUpdateExisting() throws Exception { newCPDefinitionSpecificationOptionValue.setValue( RandomTestUtil.randomString()); + newCPDefinitionSpecificationOptionValue.setVisible( + RandomTestUtil.randomBoolean()); + newCPDefinitionSpecificationOptionValue.setLastPublishDate( RandomTestUtil.nextDate()); @@ -246,6 +249,9 @@ public void testUpdateExisting() throws Exception { Assert.assertEquals( existingCPDefinitionSpecificationOptionValue.getValue(), newCPDefinitionSpecificationOptionValue.getValue()); + Assert.assertEquals( + existingCPDefinitionSpecificationOptionValue.isVisible(), + newCPDefinitionSpecificationOptionValue.isVisible()); Assert.assertEquals( Time.getShortTimestamp( existingCPDefinitionSpecificationOptionValue. @@ -418,7 +424,8 @@ public void testFindAll() throws Exception { "companyId", true, "userId", true, "userName", true, "createDate", true, "modifiedDate", true, "CPDefinitionId", true, "CPSpecificationOptionId", true, "CPOptionCategoryId", true, "key", - true, "priority", true, "value", true, "lastPublishDate", true); + true, "priority", true, "value", true, "visible", true, + "lastPublishDate", true); } @Test @@ -859,6 +866,9 @@ private void _assertOriginalValues( cpDefinitionSpecificationOptionValue.setValue( RandomTestUtil.randomString()); + cpDefinitionSpecificationOptionValue.setVisible( + RandomTestUtil.randomBoolean()); + cpDefinitionSpecificationOptionValue.setLastPublishDate( RandomTestUtil.nextDate()); diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/persistence/test/CPSpecificationOptionPersistenceTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/persistence/test/CPSpecificationOptionPersistenceTest.java index ef5d7acec45749..13a313640cf20c 100644 --- a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/persistence/test/CPSpecificationOptionPersistenceTest.java +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/persistence/test/CPSpecificationOptionPersistenceTest.java @@ -153,6 +153,8 @@ public void testUpdateExisting() throws Exception { newCPSpecificationOption.setPriority(RandomTestUtil.nextDouble()); + newCPSpecificationOption.setVisible(RandomTestUtil.randomBoolean()); + newCPSpecificationOption.setLastPublishDate(RandomTestUtil.nextDate()); _cpSpecificationOptions.add( @@ -212,6 +214,9 @@ public void testUpdateExisting() throws Exception { AssertUtils.assertEquals( existingCPSpecificationOption.getPriority(), newCPSpecificationOption.getPriority()); + Assert.assertEquals( + existingCPSpecificationOption.isVisible(), + newCPSpecificationOption.isVisible()); Assert.assertEquals( Time.getShortTimestamp( existingCPSpecificationOption.getLastPublishDate()), @@ -328,8 +333,8 @@ protected OrderByComparator getOrderByComparator() { "CPSpecificationOptionId", true, "companyId", true, "userId", true, "userName", true, "createDate", true, "modifiedDate", true, "CPOptionCategoryId", true, "title", true, "description", true, - "facetable", true, "key", true, "priority", true, "lastPublishDate", - true); + "facetable", true, "key", true, "priority", true, "visible", true, + "lastPublishDate", true); } @Test @@ -686,6 +691,8 @@ protected CPSpecificationOption addCPSpecificationOption() cpSpecificationOption.setPriority(RandomTestUtil.nextDouble()); + cpSpecificationOption.setVisible(RandomTestUtil.randomBoolean()); + cpSpecificationOption.setLastPublishDate(RandomTestUtil.nextDate()); _cpSpecificationOptions.add(_persistence.update(cpSpecificationOption)); diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPDefinitionLocalServiceTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPDefinitionLocalServiceTest.java index e4671b0b5a19ca..624d2f616af817 100644 --- a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPDefinitionLocalServiceTest.java +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPDefinitionLocalServiceTest.java @@ -541,7 +541,7 @@ public void testCopyCPDefinition() throws PortalException { cpSpecificationOption.getCPSpecificationOptionId(), cpSpecificationOption.getCPOptionCategoryId(), RandomTestUtil.randomDouble(), - RandomTestUtil.randomLocaleStringMap(), + RandomTestUtil.randomLocaleStringMap(), true, ServiceContextTestUtil.getServiceContext( _commerceCatalog.getGroupId())); @@ -552,10 +552,13 @@ public void testCopyCPDefinition() throws PortalException { CPDefinitionSpecificationOptionValue cpDefinitionSpecificationOptionValue2 = - cpDefinition2.getCPDefinitionSpecificationOptionValues( - ).get( - 0 - ); + _cpDefinitionSpecificationOptionValueLocalService. + getCPDefinitionSpecificationOptionValues( + cpDefinition2.getCPDefinitionId(), null, + QueryUtil.ALL_POS, QueryUtil.ALL_POS, null + ).get( + 0 + ); Assert.assertNotEquals( cpDefinitionSpecificationOptionValue1.getExternalReferenceCode(), diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPSpecificationOptionLocalServiceTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPSpecificationOptionLocalServiceTest.java index 9f9576b683ea12..eb96acf9bdb8e8 100644 --- a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPSpecificationOptionLocalServiceTest.java +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPSpecificationOptionLocalServiceTest.java @@ -66,7 +66,7 @@ public void tearDown() throws Exception { } @Test - public void testAddSpecficationOption() throws Exception { + public void testAddSpecificationOption() throws Exception { frutillaRule.scenario( "Add Specification option" ).given( @@ -120,7 +120,7 @@ public void testAddSpecificationOptionWithMultiplePicklist() RandomTestUtil.randomLocaleStringMap(), RandomTestUtil.randomLocaleStringMap(), RandomTestUtil.randomBoolean(), RandomTestUtil.randomString(), - RandomTestUtil.randomDouble(), _serviceContext); + RandomTestUtil.randomDouble(), true, _serviceContext); List listTypeDefinitions = cpSpecificationOption.getListTypeDefinitions(); @@ -130,7 +130,7 @@ public void testAddSpecificationOptionWithMultiplePicklist() } @Test(expected = NoSuchCPSpecificationOptionException.class) - public void testGetSpecficationOption() throws Exception { + public void testGetSpecificationOption() throws Exception { frutillaRule.scenario( "Get Specification option" ).given( @@ -157,7 +157,7 @@ private CPSpecificationOption _addCPSpecificationOptions( RandomTestUtil.randomLocaleStringMap(), RandomTestUtil.randomLocaleStringMap(), RandomTestUtil.randomBoolean(), RandomTestUtil.randomString(), - RandomTestUtil.randomDouble(), serviceContext); + RandomTestUtil.randomDouble(), true, serviceContext); } private static User _user; diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/upgrade/v5_14_0/test/CPDefinitionSpecificationOptionValueUpgradeProcessTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/upgrade/v5_14_0/test/CPDefinitionSpecificationOptionValueUpgradeProcessTest.java index ad76262e645ce9..9b440002b616ec 100644 --- a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/upgrade/v5_14_0/test/CPDefinitionSpecificationOptionValueUpgradeProcessTest.java +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/upgrade/v5_14_0/test/CPDefinitionSpecificationOptionValueUpgradeProcessTest.java @@ -81,7 +81,7 @@ public void testUpdateCPDefinitionSpecificationOptionValueKey() RandomTestUtil.randomLocaleStringMap(), RandomTestUtil.randomLocaleStringMap(), true, CPDefinition.class.getName(), RandomTestUtil.randomDouble(), - serviceContext); + true, serviceContext); CPDefinitionSpecificationOptionValue cpDefinitionSpecificationOptionValue1 = @@ -92,7 +92,8 @@ public void testUpdateCPDefinitionSpecificationOptionValueKey() cpSpecificationOption.getCPSpecificationOptionId(), cpOptionCategory.getCPOptionCategoryId(), RandomTestUtil.randomDouble(), - RandomTestUtil.randomLocaleStringMap(), serviceContext); + RandomTestUtil.randomLocaleStringMap(), true, + serviceContext); cpDefinitionSpecificationOptionValue1.setKey( RandomTestUtil.randomString()); @@ -110,7 +111,8 @@ public void testUpdateCPDefinitionSpecificationOptionValueKey() cpSpecificationOption.getCPSpecificationOptionId(), cpOptionCategory.getCPOptionCategoryId(), RandomTestUtil.randomDouble(), - RandomTestUtil.randomLocaleStringMap(), serviceContext); + RandomTestUtil.randomLocaleStringMap(), true, + serviceContext); cpDefinitionSpecificationOptionValue2.setKey( RandomTestUtil.randomString()); diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductSpecificationResourceImpl.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductSpecificationResourceImpl.java index c22b2b9f59512d..9c957f51ecce5f 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductSpecificationResourceImpl.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductSpecificationResourceImpl.java @@ -114,14 +114,14 @@ public Page getProductIdProductSpecificationsPage( cpDefinitionSpecificationOptionValues = _cpDefinitionSpecificationOptionValueService. getCPDefinitionSpecificationOptionValues( - cpDefinition.getCPDefinitionId(), + cpDefinition.getCPDefinitionId(), null, pagination.getStartPosition(), pagination.getEndPosition(), null); int totalCount = _cpDefinitionSpecificationOptionValueService. getCPDefinitionSpecificationOptionValuesCount( - cpDefinition.getCPDefinitionId()); + cpDefinition.getCPDefinitionId(), null); return Page.of( _toProductSpecifications( diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/SpecificationResourceImpl.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/SpecificationResourceImpl.java index eb6057e7a9d30e..da2a24f6eb23d9 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/SpecificationResourceImpl.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/SpecificationResourceImpl.java @@ -188,6 +188,7 @@ public Specification putSpecificationByExternalReferenceCode( GetterUtil.getBoolean(specification.getFacetable()), GetterUtil.getString(specification.getKey()), GetterUtil.getDouble(specification.getPriority()), + GetterUtil.getBoolean(specification.getVisible(), true), _serviceContextHelper.getServiceContext()); return _toSpecification( @@ -206,6 +207,8 @@ public Specification putSpecificationByExternalReferenceCode( GetterUtil.getBoolean(specification.getFacetable()), GetterUtil.getString(specification.getKey()), GetterUtil.getDouble(specification.getPriority()), + GetterUtil.getBoolean( + specification.getVisible(), cpSpecificationOption.isVisible()), _serviceContextHelper.getServiceContext()); return _toSpecification( @@ -312,7 +315,7 @@ private Specification _addOrUpdateSpecification(Specification specification) LanguageUtils.getLocalizedMap(specification.getDescription()), GetterUtil.getBoolean(specification.getFacetable()), specificationKey, - GetterUtil.getDouble(specification.getPriority()), + GetterUtil.getDouble(specification.getPriority()), true, _serviceContextHelper.getServiceContext()); return _toSpecification( @@ -400,6 +403,8 @@ private CPSpecificationOption _updateSpecification( GetterUtil.getDouble( specification.getPriority(), cpSpecificationOption.getPriority()), + GetterUtil.getBoolean( + specification.getVisible(), cpSpecificationOption.isVisible()), _serviceContextHelper.getServiceContext()); } diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/util/v1_0/ProductSpecificationUtil.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/util/v1_0/ProductSpecificationUtil.java index 9740be30f28b4a..c50cecd1671287 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/util/v1_0/ProductSpecificationUtil.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/util/v1_0/ProductSpecificationUtil.java @@ -49,21 +49,22 @@ public class ProductSpecificationUtil { serviceContext.getCompanyId()); } + cpSpecificationOption = _getCPSpecificationOption( + cpOptionCategoryService, cpSpecificationOption, + cpSpecificationOptionService, productSpecification, serviceContext); + return cpDefinitionSpecificationOptionValueService. addCPDefinitionSpecificationOptionValue( GetterUtil.getString( productSpecification.getExternalReferenceCode()), cpDefinitionId, - _getCPSpecificationOptionId( - cpOptionCategoryService, cpSpecificationOption, - cpSpecificationOptionService, productSpecification, - serviceContext), + cpSpecificationOption.getCPSpecificationOptionId(), _getCPOptionCategoryId( cpOptionCategoryService, cpSpecificationOption, productSpecification, serviceContext), GetterUtil.get(productSpecification.getPriority(), 0D), LanguageUtils.getLocalizedMap(productSpecification.getValue()), - serviceContext); + cpSpecificationOption.isVisible(), serviceContext); } public static CPDefinitionSpecificationOptionValue @@ -102,6 +103,9 @@ public class ProductSpecificationUtil { productSpecification.getPriority(), cpDefinitionSpecificationOptionValue.getPriority()), LanguageUtils.getLocalizedMap(productSpecification.getValue()), + GetterUtil.get( + productSpecification.getVisible(), + cpDefinitionSpecificationOptionValue.isVisible()), serviceContext); } @@ -131,14 +135,10 @@ private static long _getCPOptionCategoryId( return cpOptionCategory.getCPOptionCategoryId(); } - if (cpSpecificationOption != null) { - return cpSpecificationOption.getCPOptionCategoryId(); - } - - return 0; + return cpSpecificationOption.getCPOptionCategoryId(); } - private static long _getCPSpecificationOptionId( + private static CPSpecificationOption _getCPSpecificationOption( CPOptionCategoryService cpOptionCategoryService, CPSpecificationOption cpSpecificationOption, CPSpecificationOptionService cpSpecificationOptionService, @@ -163,10 +163,10 @@ private static long _getCPSpecificationOptionId( false, productSpecification.getSpecificationKey(), GetterUtil.getDouble( productSpecification.getSpecificationPriority()), - serviceContext); + true, serviceContext); } - return cpSpecificationOption.getCPSpecificationOptionId(); + return cpSpecificationOption; } } \ No newline at end of file diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ListTypeDefinitionResourceTest.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ListTypeDefinitionResourceTest.java index ad4c58dfb6ab79..7189bc4b67fcad 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ListTypeDefinitionResourceTest.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ListTypeDefinitionResourceTest.java @@ -63,7 +63,7 @@ public void setUp() throws Exception { RandomTestUtil.randomLocaleStringMap(), RandomTestUtil.randomLocaleStringMap(), true, RandomTestUtil.randomString(), RandomTestUtil.randomDouble(), - serviceContext); + true, serviceContext); } @Ignore diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-impl/src/main/java/com/liferay/headless/commerce/delivery/catalog/internal/resource/v1_0/ProductSpecificationResourceImpl.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-impl/src/main/java/com/liferay/headless/commerce/delivery/catalog/internal/resource/v1_0/ProductSpecificationResourceImpl.java index eb950b60da85e4..295b2e35cd6449 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-impl/src/main/java/com/liferay/headless/commerce/delivery/catalog/internal/resource/v1_0/ProductSpecificationResourceImpl.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-impl/src/main/java/com/liferay/headless/commerce/delivery/catalog/internal/resource/v1_0/ProductSpecificationResourceImpl.java @@ -86,14 +86,14 @@ public class ProductSpecificationResourceImpl cpDefinitionSpecificationOptionValues = _cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValues( - cpDefinition.getCPDefinitionId(), + cpDefinition.getCPDefinitionId(), true, pagination.getStartPosition(), pagination.getEndPosition(), null); int totalCount = _cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValuesCount( - cpDefinition.getCPDefinitionId()); + cpDefinition.getCPDefinitionId(), true); return Page.of( _toProductSpecifications(cpDefinitionSpecificationOptionValues), diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/delivery/catalog/resource/v1_0/test/ProductSpecificationResourceTest.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/delivery/catalog/resource/v1_0/test/ProductSpecificationResourceTest.java index 8f67f4cd2d4c2e..c4453f4ab84c60 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/delivery/catalog/resource/v1_0/test/ProductSpecificationResourceTest.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/delivery/catalog/resource/v1_0/test/ProductSpecificationResourceTest.java @@ -71,7 +71,7 @@ public void setUp() throws Exception { RandomTestUtil.randomLocaleStringMap(), RandomTestUtil.randomLocaleStringMap(), true, RandomTestUtil.randomString(), RandomTestUtil.randomDouble(), - _serviceContext); + true, _serviceContext); } @Override @@ -168,7 +168,7 @@ private ProductSpecification _addCPDefinitionSpecificationOptionValue( productSpecification.getSpecificationId(), productSpecification.getOptionCategoryId(), productSpecification.getPriority(), - RandomTestUtil.randomLocaleStringMap(), + RandomTestUtil.randomLocaleStringMap(), true, _serviceContext); _cpDefinitionSpecificationOptionValues.add( diff --git a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test/src/testIntegration/java/com/liferay/site/initializer/extender/internal/test/BundleSiteInitializerTest.java b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test/src/testIntegration/java/com/liferay/site/initializer/extender/internal/test/BundleSiteInitializerTest.java index 7ba121ab336329..1cacde0cd36413 100644 --- a/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test/src/testIntegration/java/com/liferay/site/initializer/extender/internal/test/BundleSiteInitializerTest.java +++ b/modules/apps/site-initializer/site-initializer-extender/site-initializer-extender-test/src/testIntegration/java/com/liferay/site/initializer/extender/internal/test/BundleSiteInitializerTest.java @@ -1152,7 +1152,7 @@ private void _assertCPDefinitionSpecificationOptionValue( cpDefinitionValuesCount, _cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValuesCount( - cpDefinition.getCPDefinitionId())); + cpDefinition.getCPDefinitionId(), null)); } private void _assertCPInstanceProperties() throws Exception { diff --git a/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-impl/src/main/java/com/liferay/headless/commerce/machine/learning/internal/dto/v1_0/converter/ProductDTOConverter.java b/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-impl/src/main/java/com/liferay/headless/commerce/machine/learning/internal/dto/v1_0/converter/ProductDTOConverter.java index f2a1d12ffd8c7b..c0d184b4c04cc4 100644 --- a/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-impl/src/main/java/com/liferay/headless/commerce/machine/learning/internal/dto/v1_0/converter/ProductDTOConverter.java +++ b/modules/dxp/apps/commerce/headless/headless-commerce-machine-learning-impl/src/main/java/com/liferay/headless/commerce/machine/learning/internal/dto/v1_0/converter/ProductDTOConverter.java @@ -17,6 +17,7 @@ import com.liferay.commerce.product.model.CommerceCatalog; import com.liferay.commerce.product.model.CommerceChannel; import com.liferay.commerce.product.service.CPDefinitionLocalService; +import com.liferay.commerce.product.service.CPDefinitionSpecificationOptionValueLocalService; import com.liferay.commerce.product.service.CommerceChannelRelLocalService; import com.liferay.commerce.product.type.CPType; import com.liferay.commerce.product.type.CPTypeRegistry; @@ -135,7 +136,10 @@ public Product toDTO( ProductOption.class)); setProductSpecifications( () -> TransformUtil.transformToArray( - cpDefinition.getCPDefinitionSpecificationOptionValues(), + _cpDefinitionSpecificationOptionValueLocalService. + getCPDefinitionSpecificationOptionValues( + cpDefinition.getCPDefinitionId(), true, + QueryUtil.ALL_POS, QueryUtil.ALL_POS, null), cpDefinitionSpecificationOptionValue -> _productSpecificationDTOConverter.toDTO( cpDefinitionSpecificationOptionValue), @@ -179,6 +183,10 @@ public Product toDTO( @Reference private CPDefinitionLocalService _cpDefinitionLocalService; + @Reference + private CPDefinitionSpecificationOptionValueLocalService + _cpDefinitionSpecificationOptionValueLocalService; + @Reference private CPTypeRegistry _cpTypeRegistry; From 0c578b052ce4e6008cacecffb14eb39985e02fef Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:37:52 +0100 Subject: [PATCH 08/18] LPD-48103 Removed unnecessary method # breaking ## What modules/apps/commerce/commerce-product-content-api/src/main/java/com/liferay/commerce/product/content/helper/CPContentHelper.java modules/apps/commerce/commerce-product-content-api/src/main/java/com/liferay/commerce/product/content/helper/CPContentHelper.java hasCPDefinitionSpecificationOptionValues(long cpDefinitionId) method has been removed ## Why because internally it is calling getCPDefinitionSpecificationOptionValues(long cpDefinitionId) and check if it is not empty, so getCPDefinitionSpecificationOptionValues(long cpDefinitionId) can be just called directly to do the check instead of calling it 2 times for the same info ---- --- .../product/content/helper/CPContentHelper.java | 3 --- .../web/internal/helper/CPContentHelperImpl.java | 14 -------------- .../resources/product_detail/render/view.jsp | 2 +- 3 files changed, 1 insertion(+), 18 deletions(-) diff --git a/modules/apps/commerce/commerce-product-content-api/src/main/java/com/liferay/commerce/product/content/helper/CPContentHelper.java b/modules/apps/commerce/commerce-product-content-api/src/main/java/com/liferay/commerce/product/content/helper/CPContentHelper.java index e4e9999ee06982..ff088fa67e09cd 100644 --- a/modules/apps/commerce/commerce-product-content-api/src/main/java/com/liferay/commerce/product/content/helper/CPContentHelper.java +++ b/modules/apps/commerce/commerce-product-content-api/src/main/java/com/liferay/commerce/product/content/helper/CPContentHelper.java @@ -156,9 +156,6 @@ public ResourceURL getViewAttachmentURL( public boolean hasCPDefinitionOptionRels(long cpDefinitionId); - public boolean hasCPDefinitionSpecificationOptionValues(long cpDefinitionId) - throws PortalException; - public boolean hasMultipleCPSkus(CPCatalogEntry cpCatalogEntry) throws Exception; diff --git a/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPContentHelperImpl.java b/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPContentHelperImpl.java index eb1cffb6bb9271..76dab2ff222bb0 100644 --- a/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPContentHelperImpl.java +++ b/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/helper/CPContentHelperImpl.java @@ -630,20 +630,6 @@ public boolean hasCPDefinitionOptionRels(long cpDefinitionId) { return false; } - @Override - public boolean hasCPDefinitionSpecificationOptionValues(long cpDefinitionId) - throws PortalException { - - List - cpDefinitionSpecificationOptionValues = - _cpDefinitionSpecificationOptionValueLocalService. - getCPDefinitionSpecificationOptionValues( - cpDefinitionId, QueryUtil.ALL_POS, QueryUtil.ALL_POS, - null); - - return !cpDefinitionSpecificationOptionValues.isEmpty(); - } - @Override public boolean hasMultipleCPSkus(CPCatalogEntry cpCatalogEntry) { List cpDefinitionInstances = diff --git a/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/product_detail/render/view.jsp b/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/product_detail/render/view.jsp index e8ea09ca4e5d9f..aaad05021d2a27 100644 --- a/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/product_detail/render/view.jsp +++ b/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/product_detail/render/view.jsp @@ -233,7 +233,7 @@ List cpOptionCategories = cpContentHelper.getCPOptionCategorie String description = cpCatalogEntry.getDescription(); boolean directReplacement = cpContentHelper.isDirectReplacement(cpSku); -boolean hasCPDefinitionSpecificationOptionValues = cpContentHelper.hasCPDefinitionSpecificationOptionValues(cpDefinitionId); +boolean hasCPDefinitionSpecificationOptionValues = !cpDefinitionSpecificationOptionValues.isEmpty(); boolean hasCPMedia = !cpMedias.isEmpty(); boolean hasDescription = !Validator.isBlank(description); From b1d1455df4edde8110b9c5a9813404fd734cdb32 Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:44:42 +0100 Subject: [PATCH 09/18] LPD-48103 Fixed product specification fragment renderer --- .../ProductSpecificationFragmentRenderer.java | 10 ++++++++++ .../renderer/product_specification/init.jsp | 1 + .../renderer/product_specification/page.jsp | 14 ++++++++------ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/fragment/renderer/ProductSpecificationFragmentRenderer.java b/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/fragment/renderer/ProductSpecificationFragmentRenderer.java index 68e433bb4551c0..b222e78b3b8186 100644 --- a/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/fragment/renderer/ProductSpecificationFragmentRenderer.java +++ b/modules/apps/commerce/commerce-product-content-web/src/main/java/com/liferay/commerce/product/content/web/internal/fragment/renderer/ProductSpecificationFragmentRenderer.java @@ -148,6 +148,16 @@ public void render( label = cpSpecificationOption.getTitle( themeDisplay.getLanguageId()); + + httpServletRequest.setAttribute( + "liferay-commerce:product-specification:visible", + cpDefinitionSpecificationOptionValue.isVisible() && + cpSpecificationOption.isVisible()); + } + else { + httpServletRequest.setAttribute( + "liferay-commerce:product-specification:visible", + Boolean.FALSE); } httpServletRequest.setAttribute( diff --git a/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/fragment/renderer/product_specification/init.jsp b/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/fragment/renderer/product_specification/init.jsp index 1f15f5792dbc5a..955a2fc26886aa 100644 --- a/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/fragment/renderer/product_specification/init.jsp +++ b/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/fragment/renderer/product_specification/init.jsp @@ -23,6 +23,7 @@ String namespace = (String)request.getAttribute("liferay-commerce:product-specif boolean showLabel = (boolean)request.getAttribute("liferay-commerce:product-specification:showLabel"); String value = (String)request.getAttribute("liferay-commerce:product-specification:value"); String valueElementType = (String)request.getAttribute("liferay-commerce:product-specification:valueElementType"); +boolean visible = (boolean)request.getAttribute("liferay-commerce:product-specification:visible"); String uuid = String.valueOf(UUID.randomUUID()); %> \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/fragment/renderer/product_specification/page.jsp b/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/fragment/renderer/product_specification/page.jsp index 7f00eac1c233c0..154d9e081486ae 100644 --- a/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/fragment/renderer/product_specification/page.jsp +++ b/modules/apps/commerce/commerce-product-content-web/src/main/resources/META-INF/resources/fragment/renderer/product_specification/page.jsp @@ -7,10 +7,12 @@ <%@ include file="/fragment/renderer/product_specification/init.jsp" %> -
- - <<%= labelElementType %> class="node-label"><%= HtmlUtil.escape(label) %>> - + +
+ + <<%= labelElementType %> class="node-label"><%= HtmlUtil.escape(label) %>> + - <<%= valueElementType %> class="node-value"><%= HtmlUtil.escape(value) %>> -
\ No newline at end of file + <<%= valueElementType %> class="node-value"><%= HtmlUtil.escape(value) %>> +
+
\ No newline at end of file From 7f18c58d431159825c204303bba84e9d18b97b09 Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:43:11 +0100 Subject: [PATCH 10/18] LPD-48103 Added new field to specification schemas --- .../headless-commerce-admin-catalog-impl/rest-openapi.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/rest-openapi.yaml b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/rest-openapi.yaml index 1c4dba037f98c8..21f3e04329280c 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/rest-openapi.yaml +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/rest-openapi.yaml @@ -1933,6 +1933,9 @@ components: hr_HR: Hrvatska hu_HU: Horvatorszag type: object + visible: + example: true + type: boolean required: - value type: object @@ -2604,6 +2607,9 @@ components: hr_HR: Hrvatska hu_HU: Horvatorszag type: object + visible: + example: true + type: boolean required: - key - title From 885875b4172f0c4c7c97cc2cc68d51247b59d643 Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:45:32 +0100 Subject: [PATCH 11/18] LPD-48103 Added new field to dto converters --- .../dto/v1_0/converter/ProductSpecificationDTOConverter.java | 1 + .../internal/dto/v1_0/converter/SpecificationDTOConverter.java | 1 + 2 files changed, 2 insertions(+) diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/dto/v1_0/converter/ProductSpecificationDTOConverter.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/dto/v1_0/converter/ProductSpecificationDTOConverter.java index 6ae56c08d5a725..954f31e8d228bf 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/dto/v1_0/converter/ProductSpecificationDTOConverter.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/dto/v1_0/converter/ProductSpecificationDTOConverter.java @@ -91,6 +91,7 @@ public ProductSpecification toDTO(DTOConverterContext dtoConverterContext) setValue( () -> LanguageUtils.getLanguageIdMap( cpDefinitionSpecificationOptionValue.getValueMap())); + setVisible(cpDefinitionSpecificationOptionValue::isVisible); } }; } diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/dto/v1_0/converter/SpecificationDTOConverter.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/dto/v1_0/converter/SpecificationDTOConverter.java index 4aba4063d37442..c6af3c66954347 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/dto/v1_0/converter/SpecificationDTOConverter.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/dto/v1_0/converter/SpecificationDTOConverter.java @@ -88,6 +88,7 @@ public Specification toDTO(DTOConverterContext dtoConverterContext) setTitle( () -> LanguageUtils.getLanguageIdMap( cpSpecificationOption.getTitleMap())); + setVisible(cpSpecificationOption::isVisible); } }; } From 7f1f8cb08ab62fac087dcddc71d9a1d3806d1064 Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:45:55 +0100 Subject: [PATCH 12/18] LPD-48103 Fixed specification entity model --- .../internal/odata/entity/v1_0/SpecificationEntityModel.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/odata/entity/v1_0/SpecificationEntityModel.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/odata/entity/v1_0/SpecificationEntityModel.java index 6da2d4f2016d70..f8e920d3afd099 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/odata/entity/v1_0/SpecificationEntityModel.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/odata/entity/v1_0/SpecificationEntityModel.java @@ -7,6 +7,7 @@ import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.LocalizationUtil; +import com.liferay.portal.odata.entity.BooleanEntityField; import com.liferay.portal.odata.entity.EntityField; import com.liferay.portal.odata.entity.EntityModel; import com.liferay.portal.odata.entity.StringEntityField; @@ -20,6 +21,7 @@ public class SpecificationEntityModel implements EntityModel { public SpecificationEntityModel() { _entityFieldsMap = EntityModel.toEntityFieldsMap( + new BooleanEntityField("visible", locale -> "visible"), new StringEntityField("key", locale -> "key"), new StringEntityField( "title", From 1acb68348e324d7ebe82d65554e78eac06b3e590 Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:23:29 +0100 Subject: [PATCH 13/18] LPD-48103 Added new upgrade process integration tests --- ...ficationOptionValueUpgradeProcessTest.java | 149 ++++++++++++++++++ ...SpecificationOptionUpgradeProcessTest.java | 113 +++++++++++++ 2 files changed, 262 insertions(+) create mode 100644 modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/test/CPDefinitionSpecificationOptionValueUpgradeProcessTest.java create mode 100644 modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/test/CPSpecificationOptionUpgradeProcessTest.java diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/test/CPDefinitionSpecificationOptionValueUpgradeProcessTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/test/CPDefinitionSpecificationOptionValueUpgradeProcessTest.java new file mode 100644 index 00000000000000..dce540d118f3aa --- /dev/null +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/test/CPDefinitionSpecificationOptionValueUpgradeProcessTest.java @@ -0,0 +1,149 @@ +/** + * SPDX-FileCopyrightText: (c) 2025 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.commerce.product.internal.upgrade.v5_28_0.test; + +import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian; +import com.liferay.commerce.product.model.CPDefinition; +import com.liferay.commerce.product.model.CPDefinitionSpecificationOptionValue; +import com.liferay.commerce.product.model.CPOptionCategory; +import com.liferay.commerce.product.model.CPSpecificationOption; +import com.liferay.commerce.product.model.CommerceCatalog; +import com.liferay.commerce.product.service.CPDefinitionSpecificationOptionValueLocalService; +import com.liferay.commerce.product.service.CPOptionCategoryLocalService; +import com.liferay.commerce.product.service.CPSpecificationOptionLocalService; +import com.liferay.commerce.product.service.CommerceCatalogLocalService; +import com.liferay.commerce.product.test.util.CPTestUtil; +import com.liferay.commerce.product.type.simple.constants.SimpleCPTypeConstants; +import com.liferay.portal.kernel.dao.orm.EntityCacheUtil; +import com.liferay.portal.kernel.dao.orm.QueryUtil; +import com.liferay.portal.kernel.service.ServiceContext; +import com.liferay.portal.kernel.test.util.RandomTestUtil; +import com.liferay.portal.kernel.test.util.ServiceContextTestUtil; +import com.liferay.portal.kernel.test.util.TestPropsValues; +import com.liferay.portal.kernel.upgrade.UpgradeProcess; +import com.liferay.portal.kernel.util.LocaleUtil; +import com.liferay.portal.test.rule.Inject; +import com.liferay.portal.test.rule.LiferayIntegrationTestRule; +import com.liferay.portal.upgrade.registry.UpgradeStepRegistrator; +import com.liferay.portal.upgrade.test.util.UpgradeTestUtil; + +import java.util.List; + +import org.junit.Assert; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * @author Alessio Antonio Rendina + */ +@RunWith(Arquillian.class) +public class CPDefinitionSpecificationOptionValueUpgradeProcessTest { + + @ClassRule + @Rule + public static final LiferayIntegrationTestRule liferayIntegrationTestRule = + new LiferayIntegrationTestRule(); + + @Test + public void testUpdateCPDefinitionSpecificationOptionValueKey() + throws Exception { + + ServiceContext serviceContext = + ServiceContextTestUtil.getServiceContext(); + + CommerceCatalog commerceCatalog = + _commerceCatalogLocalService.addCommerceCatalog( + null, RandomTestUtil.randomString(), + RandomTestUtil.randomString(), + LocaleUtil.US.getDisplayLanguage(), serviceContext); + + CPDefinition cpDefinition = CPTestUtil.addCPDefinitionFromCatalog( + commerceCatalog.getGroupId(), SimpleCPTypeConstants.NAME, false, + false); + + CPOptionCategory cpOptionCategory = + _cpOptionCategoryLocalService.addCPOptionCategory( + RandomTestUtil.randomString(), TestPropsValues.getUserId(), + RandomTestUtil.randomLocaleStringMap(), + RandomTestUtil.randomLocaleStringMap(), + RandomTestUtil.randomDouble(), CPDefinition.class.getName(), + serviceContext); + + CPSpecificationOption cpSpecificationOption = + _cpSpecificationOptionLocalService.addCPSpecificationOption( + RandomTestUtil.randomString(), TestPropsValues.getUserId(), + cpOptionCategory.getCPOptionCategoryId(), null, + RandomTestUtil.randomLocaleStringMap(), + RandomTestUtil.randomLocaleStringMap(), true, + RandomTestUtil.randomString(), RandomTestUtil.randomDouble(), + true, serviceContext); + + _cpDefinitionSpecificationOptionValueLocalService. + addCPDefinitionSpecificationOptionValue( + RandomTestUtil.randomString(), cpDefinition.getCPDefinitionId(), + cpSpecificationOption.getCPSpecificationOptionId(), + cpOptionCategory.getCPOptionCategoryId(), + RandomTestUtil.randomDouble(), + RandomTestUtil.randomLocaleStringMap(), true, serviceContext); + _cpDefinitionSpecificationOptionValueLocalService. + addCPDefinitionSpecificationOptionValue( + RandomTestUtil.randomString(), cpDefinition.getCPDefinitionId(), + cpSpecificationOption.getCPSpecificationOptionId(), + cpOptionCategory.getCPOptionCategoryId(), + RandomTestUtil.randomDouble(), + RandomTestUtil.randomLocaleStringMap(), false, serviceContext); + + _runUpgrade(); + + EntityCacheUtil.clearCache(); + + List + cpDefinitionSpecificationOptionValues = + _cpDefinitionSpecificationOptionValueLocalService. + getCPDefinitionSpecificationOptionValues( + QueryUtil.ALL_POS, QueryUtil.ALL_POS); + + for (CPDefinitionSpecificationOptionValue + cpDefinitionSpecificationOptionValue : + cpDefinitionSpecificationOptionValues) { + + Assert.assertTrue(cpDefinitionSpecificationOptionValue.isVisible()); + } + } + + private void _runUpgrade() throws Exception { + UpgradeProcess upgradeProcess = UpgradeTestUtil.getUpgradeStep( + _upgradeStepRegistrator, _CLASS_NAME); + + upgradeProcess.upgrade(); + } + + private static final String _CLASS_NAME = + "com.liferay.commerce.product.internal.upgrade.v5_28_0." + + "CPDefinitionSpecificationOptionValueUpgradeProcess"; + + @Inject + private static CommerceCatalogLocalService _commerceCatalogLocalService; + + @Inject + private static CPDefinitionSpecificationOptionValueLocalService + _cpDefinitionSpecificationOptionValueLocalService; + + @Inject + private static CPOptionCategoryLocalService _cpOptionCategoryLocalService; + + @Inject + private static CPSpecificationOptionLocalService + _cpSpecificationOptionLocalService; + + @Inject( + filter = "(&(component.name=com.liferay.commerce.product.internal.upgrade.registry.CommerceProductServiceUpgradeStepRegistrator))" + ) + private static UpgradeStepRegistrator _upgradeStepRegistrator; + +} \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/test/CPSpecificationOptionUpgradeProcessTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/test/CPSpecificationOptionUpgradeProcessTest.java new file mode 100644 index 00000000000000..822d3a584a5dd2 --- /dev/null +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/internal/upgrade/v5_28_0/test/CPSpecificationOptionUpgradeProcessTest.java @@ -0,0 +1,113 @@ +/** + * SPDX-FileCopyrightText: (c) 2025 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.commerce.product.internal.upgrade.v5_28_0.test; + +import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian; +import com.liferay.commerce.product.model.CPDefinition; +import com.liferay.commerce.product.model.CPOptionCategory; +import com.liferay.commerce.product.model.CPSpecificationOption; +import com.liferay.commerce.product.service.CPOptionCategoryLocalService; +import com.liferay.commerce.product.service.CPSpecificationOptionLocalService; +import com.liferay.portal.kernel.dao.orm.EntityCacheUtil; +import com.liferay.portal.kernel.dao.orm.QueryUtil; +import com.liferay.portal.kernel.service.ServiceContext; +import com.liferay.portal.kernel.test.util.RandomTestUtil; +import com.liferay.portal.kernel.test.util.ServiceContextTestUtil; +import com.liferay.portal.kernel.test.util.TestPropsValues; +import com.liferay.portal.kernel.upgrade.UpgradeProcess; +import com.liferay.portal.test.rule.Inject; +import com.liferay.portal.test.rule.LiferayIntegrationTestRule; +import com.liferay.portal.upgrade.registry.UpgradeStepRegistrator; +import com.liferay.portal.upgrade.test.util.UpgradeTestUtil; + +import java.util.List; + +import org.junit.Assert; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * @author Alessio Antonio Rendina + */ +@RunWith(Arquillian.class) +public class CPSpecificationOptionUpgradeProcessTest { + + @ClassRule + @Rule + public static final LiferayIntegrationTestRule liferayIntegrationTestRule = + new LiferayIntegrationTestRule(); + + @Test + public void testUpdateCPDefinitionSpecificationOptionValueKey() + throws Exception { + + ServiceContext serviceContext = + ServiceContextTestUtil.getServiceContext(); + + CPOptionCategory cpOptionCategory = + _cpOptionCategoryLocalService.addCPOptionCategory( + RandomTestUtil.randomString(), TestPropsValues.getUserId(), + RandomTestUtil.randomLocaleStringMap(), + RandomTestUtil.randomLocaleStringMap(), + RandomTestUtil.randomDouble(), CPDefinition.class.getName(), + serviceContext); + + _cpSpecificationOptionLocalService.addCPSpecificationOption( + RandomTestUtil.randomString(), TestPropsValues.getUserId(), + cpOptionCategory.getCPOptionCategoryId(), null, + RandomTestUtil.randomLocaleStringMap(), + RandomTestUtil.randomLocaleStringMap(), true, + RandomTestUtil.randomString(), RandomTestUtil.randomDouble(), true, + serviceContext); + _cpSpecificationOptionLocalService.addCPSpecificationOption( + RandomTestUtil.randomString(), TestPropsValues.getUserId(), + cpOptionCategory.getCPOptionCategoryId(), null, + RandomTestUtil.randomLocaleStringMap(), + RandomTestUtil.randomLocaleStringMap(), true, + RandomTestUtil.randomString(), RandomTestUtil.randomDouble(), false, + serviceContext); + + _runUpgrade(); + + EntityCacheUtil.clearCache(); + + List cpSpecificationOptions = + _cpSpecificationOptionLocalService.getCPSpecificationOptions( + QueryUtil.ALL_POS, QueryUtil.ALL_POS); + + for (CPSpecificationOption cpSpecificationOption : + cpSpecificationOptions) { + + Assert.assertTrue(cpSpecificationOption.isVisible()); + } + } + + private void _runUpgrade() throws Exception { + UpgradeProcess upgradeProcess = UpgradeTestUtil.getUpgradeStep( + _upgradeStepRegistrator, _CLASS_NAME); + + upgradeProcess.upgrade(); + } + + private static final String _CLASS_NAME = + "com.liferay.commerce.product.internal.upgrade.v5_28_0." + + "CPSpecificationOptionUpgradeProcess"; + + @Inject + private static CPOptionCategoryLocalService _cpOptionCategoryLocalService; + + @Inject + private static CPSpecificationOptionLocalService + _cpSpecificationOptionLocalService; + + @Inject( + filter = "(&(component.name=com.liferay.commerce.product.internal.upgrade.registry.CommerceProductServiceUpgradeStepRegistrator))" + ) + private static UpgradeStepRegistrator _upgradeStepRegistrator; + +} \ No newline at end of file From dd795fe864c9ea9028819e2ce820fb61b0a4697c Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:44:22 +0100 Subject: [PATCH 14/18] LPD-48103 Added new functional tests --- .../HeadlessCommerceAdminCatalogApiHelper.ts | 5 +- .../productDetailsPage.ts | 146 +---- .../commerceAdminProductDetailsPage.ts | 138 ++++- .../commerceSpecificationsPage.ts | 2 + .../specificationFacet.spec.ts | 566 +++++++++++------- .../commerceProductSpecifications.spec.ts | 117 ++-- ...merceProductSpecificationsPicklist.spec.ts | 441 +++++++------- .../commerceSpecificationFragment.spec.ts | 170 +++--- .../commerceSpecifications.spec.ts | 200 +++++-- 9 files changed, 1010 insertions(+), 775 deletions(-) diff --git a/modules/test/playwright/helpers/HeadlessCommerceAdminCatalogApiHelper.ts b/modules/test/playwright/helpers/HeadlessCommerceAdminCatalogApiHelper.ts index 394f9a37c9e089..8c357962091646 100644 --- a/modules/test/playwright/helpers/HeadlessCommerceAdminCatalogApiHelper.ts +++ b/modules/test/playwright/helpers/HeadlessCommerceAdminCatalogApiHelper.ts @@ -798,7 +798,8 @@ export class HeadlessCommerceAdminCatalogApiHelper { facetable: boolean = true, priority: number = 0, specificationTitle: string = 'Specification' + getRandomInt(), - optionCategory?: DataObject + optionCategory?: DataObject, + visible?: boolean ) { let postSpecification; @@ -814,6 +815,7 @@ export class HeadlessCommerceAdminCatalogApiHelper { title: { en_US: specificationTitle, }, + visible, }, } ); @@ -829,6 +831,7 @@ export class HeadlessCommerceAdminCatalogApiHelper { title: { en_US: specificationTitle, }, + visible, }, } ); diff --git a/modules/test/playwright/pages/commerce/commerce-product-content-web/productDetailsPage.ts b/modules/test/playwright/pages/commerce/commerce-product-content-web/productDetailsPage.ts index 615e9b4f81d6b9..7070e5d4ed6a38 100644 --- a/modules/test/playwright/pages/commerce/commerce-product-content-web/productDetailsPage.ts +++ b/modules/test/playwright/pages/commerce/commerce-product-content-web/productDetailsPage.ts @@ -3,43 +3,20 @@ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 */ -import {FrameLocator, Locator, Page} from '@playwright/test'; +import {Locator, Page} from '@playwright/test'; -import {waitForAlert} from '../../../utils/waitForAlert'; import {CommerceLayoutsPage} from '../commerce-order-content-web/commerceLayoutsPage'; export class ProductDetailsPage { readonly addToCartButton: Locator; - readonly addSpecification: Locator; - readonly addSpecificationFrame: FrameLocator; readonly attachments: Locator; readonly attachmentItem: (title: string) => Promise; readonly attachmentItems: Locator; - readonly checkSpecificationProduct: (text: string) => Promise; - readonly closeEditFrame: Locator; - readonly createNewSpecificationProduct: Locator; - readonly createNewValueSpecificationProduct: Locator; readonly diagramPin: (pinSequence: string) => Promise; readonly downloadAttachmentLink: Locator; readonly downloadSampleField: ( downloadSampleText: string ) => Promise; - readonly dropdownProductSpecification: ( - chooseAddOrCreate: string - ) => Promise; - readonly editFrameSpecificationProduct: ( - specificationValue: string - ) => Promise; - readonly ellipsisProductSpecification: Locator; - readonly ellipsisFrameProductSpecification: FrameLocator; - readonly frameChooseSpecification: ( - specificationName: string - ) => Promise; - readonly frameChooseSpecificationValue: ( - specificationValue: string - ) => Promise; - readonly frameSubmitSpecification: Locator; - readonly frameDropdownSpecification: Locator; readonly fullDescriptionField: ( fullDescription: string ) => Promise; @@ -48,9 +25,6 @@ export class ProductDetailsPage { readonly mappedProductAddToCartButton: Locator; readonly mappedProductCheckbox: Locator; readonly mpnField: (mpn: string) => Promise; - readonly menuItemSpecification: ( - chooseAddOrCreate: string - ) => Promise; readonly nameField: (name: string) => Promise; readonly optionSelector: (optionName: string) => Promise; readonly page: Page; @@ -71,7 +45,6 @@ export class ProductDetailsPage { readonly replacementsSearchButton: Locator; readonly replacementsTab: Locator; readonly replacementsTableCell: (cellValue: string) => Locator; - readonly saveButtonEditFrame: Locator; readonly selectOption: ( optionLabel: string, optionName: string @@ -83,16 +56,11 @@ export class ProductDetailsPage { readonly uomCombobox: Locator; readonly uomTable: (uomTableCell: string) => Promise; readonly viewButton: Locator; - readonly waitForEditScuccessMessage: Locator; constructor(page: Page) { this.addToCartButton = page .getByRole('button', {exact: true, name: 'Add to Cart'}) .first(); - this.addSpecification = page - .getByTestId('management-toolbar') - .locator('[data-testid="fdsCreationActionButton"]'); - this.addSpecificationFrame = page.frameLocator('iframe >> nth=2'); this.attachments = page.locator( '#_com_liferay_commerce_product_content_web_internal_portlet_CPContentPortlet_navCPMedia' ); @@ -100,18 +68,6 @@ export class ProductDetailsPage { return page.getByText(title); }; this.attachmentItems = this.attachments.locator('li.list-group-item'); - this.checkSpecificationProduct = async (text: string) => { - return page.getByText(text); - }; - this.closeEditFrame = page - .frameLocator('iframe >> nth=1') - .getByRole('button') - .first(); - this.createNewSpecificationProduct = - this.addSpecificationFrame.getByPlaceholder('Specification'); - this.createNewValueSpecificationProduct = this.addSpecificationFrame - .getByRole('textbox') - .nth(1); this.diagramPin = async (pinSequence: string) => { return page .locator("[class='pin-node-text']") @@ -121,44 +77,9 @@ export class ProductDetailsPage { exact: true, name: 'Download', }); - this.ellipsisProductSpecification = page.getByRole('button', { - name: 'Actions', - }); - this.ellipsisFrameProductSpecification = - page.frameLocator('iframe >> nth=1'); - this.editFrameSpecificationProduct = async ( - specificationValue: string - ) => { - return this.ellipsisFrameProductSpecification - .locator( - 'select[name="_com_liferay_commerce_product_definitions_web_internal_portlet_CPDefinitionsPortlet_listTypeEntriesSelect"]' - ) - .selectOption(specificationValue); - }; - this.frameChooseSpecification = async (specificationName: string) => { - return this.addSpecificationFrame.getByRole('option', { - name: specificationName, - }); - }; - this.frameChooseSpecificationValue = async ( - specificationValue: string - ) => { - return this.addSpecificationFrame - .locator('select[name="listTypeEntriesSelect"]') - .selectOption(specificationValue); - }; - this.frameSubmitSpecification = this.addSpecificationFrame.getByRole( - 'button', - {name: 'Submit'} - ); this.downloadSampleField = async (downloadSampleText: string) => { return page.getByRole('link', {name: downloadSampleText}); }; - this.dropdownProductSpecification = async ( - chooseEditOrDelete: string - ) => { - return page.getByRole('menuitem', {name: chooseEditOrDelete}); - }; this.fullDescriptionField = async (fullDescription: string) => { return page.getByText(fullDescription, {exact: true}); }; @@ -173,9 +94,6 @@ export class ProductDetailsPage { this.mpnField = async (mpn: string) => { return page.getByText(mpn, {exact: true}); }; - this.menuItemSpecification = async (chooseAddOrCreate: string) => { - return page.getByRole('menuitem', {name: chooseAddOrCreate}); - }; this.nameField = async (name: string) => { return page.getByRole('heading', {name}); }; @@ -209,15 +127,8 @@ export class ProductDetailsPage { this.replacementsTab = page.getByRole('tab', {name: 'Replacements'}); this.replacementsTableCell = (cellValue: string) => page.getByRole('cell', {name: cellValue}); - this.saveButtonEditFrame = - this.ellipsisFrameProductSpecification.getByRole('button', { - name: 'Save', - }); this.selectOption = (optionLabel: string, optionName: string) => page.getByLabel(optionName).selectOption({label: optionLabel}); - this.frameDropdownSpecification = this.addSpecificationFrame.getByLabel( - 'SpecificationRequired' - ); this.shortDescriptionField = async (shortDescription: string) => { return page.getByText(shortDescription); }; @@ -229,61 +140,6 @@ export class ProductDetailsPage { return page.getByRole('cell', {name: cellValue}); }; this.viewButton = page.getByLabel('View'); - this.waitForEditScuccessMessage = - this.ellipsisFrameProductSpecification.getByText( - 'Success:Your request completed successfully.' - ); - } - - async addProductDetailsWidget() { - await this.layoutsPage.addWidgetToPage('Product Details'); - await waitForAlert( - this.page, - 'Success:The application was added to the page.' - ); - } - - async addSpecificationToProduct( - chooseAddOrEdit: string, - specificationName: string, - specificationValue?: string - ) { - await this.addSpecification.click(); - await (await this.menuItemSpecification(chooseAddOrEdit)).click(); - await this.frameDropdownSpecification.click(); - await (await this.frameChooseSpecification(specificationName)).click(); - if (specificationValue) { - await this.frameChooseSpecificationValue(specificationValue); - } - await this.frameSubmitSpecification.click(); - } - - async changeValueInProductSpecification( - chooseAddOrCreate: string, - specificationValue: string - ) { - await this.ellipsisProductSpecification.click(); - await ( - await this.dropdownProductSpecification(chooseAddOrCreate) - ).click(); - await this.editFrameSpecificationProduct(specificationValue); - await this.saveButtonEditFrame.click(); - } - - async createSpecificationProduct( - chooseAddOrCreate: string, - specificationName: string, - specificationValue?: string - ) { - await this.addSpecification.click(); - await (await this.menuItemSpecification(chooseAddOrCreate)).click(); - await this.createNewSpecificationProduct.fill(specificationName); - if (specificationValue) { - await this.createNewValueSpecificationProduct.fill( - specificationValue - ); - } - await this.frameSubmitSpecification.click(); } async goto() { diff --git a/modules/test/playwright/pages/commerce/commerce-product-definitions-web/commerceAdminProductDetailsPage.ts b/modules/test/playwright/pages/commerce/commerce-product-definitions-web/commerceAdminProductDetailsPage.ts index 4330e4275904a9..85eb53f081ea18 100644 --- a/modules/test/playwright/pages/commerce/commerce-product-definitions-web/commerceAdminProductDetailsPage.ts +++ b/modules/test/playwright/pages/commerce/commerce-product-definitions-web/commerceAdminProductDetailsPage.ts @@ -3,10 +3,35 @@ * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 */ -import {Locator, Page} from '@playwright/test'; +import {FrameLocator, Locator, Page} from '@playwright/test'; export class CommerceAdminProductDetailsPage { + readonly addSpecification: Locator; + readonly addSpecificationFrame: FrameLocator; readonly backLink: Locator; + readonly closeEditFrame: Locator; + readonly createNewSpecificationProduct: Locator; + readonly createNewValueSpecificationProduct: Locator; + readonly dropdownProductSpecification: ( + chooseEditOrDelete: string + ) => Promise; + readonly editFrameSpecificationProduct: ( + specificationValue: string + ) => Promise; + readonly editSuccessMessage: Locator; + readonly ellipsisProductSpecification: Locator; + readonly ellipsisFrameProductSpecification: FrameLocator; + readonly frameChooseSpecification: ( + specificationName: string + ) => Promise; + readonly frameChooseSpecificationValue: ( + specificationValue: string + ) => Promise; + readonly frameDropdownSpecification: Locator; + readonly frameSubmitSpecification: Locator; + readonly menuItemSpecification: ( + chooseAddOrCreate: string + ) => Promise; readonly page: Page; readonly productConfigurationLink: Locator; readonly productDetailsInput: (inputName: string) => Promise; @@ -17,9 +42,69 @@ export class CommerceAdminProductDetailsPage { readonly productSkusLink: Locator; readonly productVisibilityLink: Locator; readonly publishLink: Locator; + readonly saveButtonEditFrame: Locator; + readonly visibleToggle: Locator; constructor(page: Page) { + this.addSpecification = page + .getByTestId('management-toolbar') + .locator('[data-testid="fdsCreationActionButton"]'); + this.addSpecificationFrame = page.frameLocator('iframe >> nth=2'); this.backLink = page.getByRole('link', {exact: true, name: 'Back'}); + this.closeEditFrame = page + .frameLocator('iframe >> nth=1') + .getByRole('button') + .first(); + this.createNewSpecificationProduct = + this.addSpecificationFrame.getByPlaceholder('Specification'); + this.createNewValueSpecificationProduct = this.addSpecificationFrame + .getByRole('textbox') + .nth(1); + this.dropdownProductSpecification = async ( + chooseEditOrDelete: string + ) => { + return page.getByRole('menuitem', {name: chooseEditOrDelete}); + }; + this.ellipsisProductSpecification = page.getByRole('button', { + name: 'Actions', + }); + this.ellipsisFrameProductSpecification = + page.frameLocator('iframe >> nth=1'); + this.editFrameSpecificationProduct = async ( + specificationValue: string + ) => { + return this.ellipsisFrameProductSpecification + .locator( + 'select[name="_com_liferay_commerce_product_definitions_web_internal_portlet_CPDefinitionsPortlet_listTypeEntriesSelect"]' + ) + .selectOption(specificationValue); + }; + this.editSuccessMessage = + this.ellipsisFrameProductSpecification.getByText( + 'Success:Your request completed successfully.' + ); + this.frameChooseSpecification = async (specificationName: string) => { + return this.addSpecificationFrame.getByRole('option', { + name: specificationName, + }); + }; + this.frameChooseSpecificationValue = async ( + specificationValue: string + ) => { + return this.addSpecificationFrame + .locator('select[name="listTypeEntriesSelect"]') + .selectOption(specificationValue); + }; + this.frameDropdownSpecification = this.addSpecificationFrame.getByLabel( + 'SpecificationRequired' + ); + this.frameSubmitSpecification = this.addSpecificationFrame.getByRole( + 'button', + {name: 'Submit'} + ); + this.menuItemSpecification = async (chooseAddOrCreate: string) => { + return page.getByRole('menuitem', {name: chooseAddOrCreate}); + }; this.page = page; this.productConfigurationLink = page.getByRole('link', { name: 'Configuration', @@ -45,6 +130,57 @@ export class CommerceAdminProductDetailsPage { name: 'Visibility', }); this.publishLink = page.getByRole('link', {name: 'Publish'}); + this.saveButtonEditFrame = + this.ellipsisFrameProductSpecification.getByRole('button', { + name: 'Save', + }); + this.visibleToggle = this.ellipsisFrameProductSpecification.getByLabel( + 'Visible', + {exact: true} + ); + } + + async addOrEditProductSpecification( + chooseAddOrEdit: string, + specificationName: string, + specificationValue?: string + ) { + await this.addSpecification.click(); + await (await this.menuItemSpecification(chooseAddOrEdit)).click(); + await this.frameDropdownSpecification.click(); + await (await this.frameChooseSpecification(specificationName)).click(); + if (specificationValue) { + await this.frameChooseSpecificationValue(specificationValue); + } + await this.frameSubmitSpecification.click(); + } + + async createSpecificationProduct( + chooseAddOrCreate: string, + specificationName: string, + specificationValue?: string + ) { + await this.addSpecification.click(); + await (await this.menuItemSpecification(chooseAddOrCreate)).click(); + await this.createNewSpecificationProduct.fill(specificationName); + if (specificationValue) { + await this.createNewValueSpecificationProduct.fill( + specificationValue + ); + } + await this.frameSubmitSpecification.click(); + } + + async editOrDeleteProductSpecification( + chooseEditOrDelete: string, + specificationValue: string + ) { + await this.ellipsisProductSpecification.click(); + await ( + await this.dropdownProductSpecification(chooseEditOrDelete) + ).click(); + await this.editFrameSpecificationProduct(specificationValue); + await this.saveButtonEditFrame.click(); } async goToProductConfiguration() { diff --git a/modules/test/playwright/pages/commerce/commerce-product-options-web/commerceSpecificationsPage.ts b/modules/test/playwright/pages/commerce/commerce-product-options-web/commerceSpecificationsPage.ts index 66d49ecc2e2b29..61666009180f1d 100644 --- a/modules/test/playwright/pages/commerce/commerce-product-options-web/commerceSpecificationsPage.ts +++ b/modules/test/playwright/pages/commerce/commerce-product-options-web/commerceSpecificationsPage.ts @@ -27,6 +27,7 @@ export class CommerceSpecificationsPage { ) => Locator; readonly specificationPicklistDropdownMenu: (action: string) => Locator; readonly successMessage: Locator; + readonly visibleToggle: Locator; constructor(page: Page) { this.page = page; @@ -77,6 +78,7 @@ export class CommerceSpecificationsPage { this.successMessage = page.getByText( 'Success:Your request completed successfully.' ); + this.visibleToggle = page.getByLabel('Visible', {exact: true}); } async waitForKey(specificationName) { diff --git a/modules/test/playwright/tests/commerce/commerce-product-content-search-web/specificationFacet.spec.ts b/modules/test/playwright/tests/commerce/commerce-product-content-search-web/specificationFacet.spec.ts index 7d9c61ab26a26a..0a0f4ddba83f84 100644 --- a/modules/test/playwright/tests/commerce/commerce-product-content-search-web/specificationFacet.spec.ts +++ b/modules/test/playwright/tests/commerce/commerce-product-content-search-web/specificationFacet.spec.ts @@ -22,264 +22,380 @@ export const test = mergeTests( pageViewModePagesTest ); -test('LPD-13560 Can sort specifications by specification group and label priority', async ({ - apiHelpers, - page, - site, - specificationFacetsPage, -}) => { - test.setTimeout(180000); - - const layout = await apiHelpers.jsonWebServicesLayout.addLayout({ - groupId: site.id, - title: getRandomString(), - }); - - await apiHelpers.headlessCommerceAdminChannel.postChannel({ - name: getRandomString(), - siteGroupId: site.id, - }); - - await page.goto(`/web${site.friendlyUrlPath}${layout.friendlyURL}`); - - await specificationFacetsPage.addRequiredFacetWidgets(); - await specificationFacetsPage.configureSearchOptions(); - - const optionCategory1 = - await apiHelpers.headlessCommerceAdminCatalog.postOptionCategory( - 'Warranty', - 1 - ); - - const optionCategory2 = - await apiHelpers.headlessCommerceAdminCatalog.postOptionCategory( - 'Material', - 0 - ); - - const specification1 = - await apiHelpers.headlessCommerceAdminCatalog.postSpecification( - true, - optionCategory2.priority, - 'Warranty1', - { - id: optionCategory1.id, - key: optionCategory1.key, - priority: optionCategory1.priority, - title: { - en_US: optionCategory1.key, - }, - } - ); - - const specification2 = - await apiHelpers.headlessCommerceAdminCatalog.postSpecification( - true, - optionCategory1.priority, - 'Material1', - { - id: optionCategory2.id, - key: optionCategory2.key, - priority: optionCategory2.priority, - title: { - en_US: optionCategory2.key, +test( + 'Can sort specifications by specification group and label priority', + {tag: '@LPD-13560'}, + async ({apiHelpers, page, site, specificationFacetsPage}) => { + test.setTimeout(180000); + + const layout = await apiHelpers.jsonWebServicesLayout.addLayout({ + groupId: site.id, + title: getRandomString(), + }); + + await apiHelpers.headlessCommerceAdminChannel.postChannel({ + name: getRandomString(), + siteGroupId: site.id, + }); + + await page.goto(`/web${site.friendlyUrlPath}${layout.friendlyURL}`); + + await specificationFacetsPage.addRequiredFacetWidgets(); + await specificationFacetsPage.configureSearchOptions(); + + const optionCategory1 = + await apiHelpers.headlessCommerceAdminCatalog.postOptionCategory( + 'Warranty', + 1 + ); + + const optionCategory2 = + await apiHelpers.headlessCommerceAdminCatalog.postOptionCategory( + 'Material', + 0 + ); + + const specification1 = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification( + true, + optionCategory2.priority, + 'Warranty1', + { + id: optionCategory1.id, + key: optionCategory1.key, + priority: optionCategory1.priority, + title: { + en_US: optionCategory1.key, + }, + } + ); + + const specification2 = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification( + true, + optionCategory1.priority, + 'Material1', + { + id: optionCategory2.id, + key: optionCategory2.key, + priority: optionCategory2.priority, + title: { + en_US: optionCategory2.key, + }, + } + ); + + const catalog = + await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ + name: getRandomString(), + }); + + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, + name: { + en_US: 'Product1', + }, + productSpecifications: [ + { + specificationKey: specification1.key, + value: { + en_US: 'Product1', + }, }, - } - ); + ], + }); - const catalog = await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ - name: getRandomString(), - }); - - await apiHelpers.headlessCommerceAdminCatalog.postProduct({ - catalogId: catalog.id, - name: { - en_US: 'Product1', - }, - productSpecifications: [ - { - specificationKey: specification1.key, - value: { - en_US: 'Product1', - }, + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, + name: { + en_US: 'Product2', }, - ], - }); - - await apiHelpers.headlessCommerceAdminCatalog.postProduct({ - catalogId: catalog.id, - name: { - en_US: 'Product2', - }, - productSpecifications: [ - { - specificationKey: specification2.key, - value: { - en_US: 'Product2', + productSpecifications: [ + { + specificationKey: specification2.key, + value: { + en_US: 'Product2', + }, }, - }, - ], - }); + ], + }); - await specificationFacetsPage.reloadPage(); + await specificationFacetsPage.reloadPage(); - const panelList = await specificationFacetsPage.panelList.all(); + const panelList = await specificationFacetsPage.panelList.all(); - const specificationFacetsList = ['Material1', 'Warranty1']; + const specificationFacetsList = ['Material1', 'Warranty1']; - for (let i = 0; i < specificationFacetsList.length; i++) { - await expect(panelList[i]).toHaveText(specificationFacetsList[i]); - } + for (let i = 0; i < specificationFacetsList.length; i++) { + await expect(panelList[i]).toHaveText(specificationFacetsList[i]); + } - await specificationFacetsPage.configureSpecificationFacetOrdering( - 'label-priority:asc' - ); + await specificationFacetsPage.configureSpecificationFacetOrdering( + 'label-priority:asc' + ); - await specificationFacetsPage.reloadPage(); + await specificationFacetsPage.reloadPage(); - const reverseSpecificationFacetsList = specificationFacetsList.reverse(); + const reverseSpecificationFacetsList = + specificationFacetsList.reverse(); - for (let i = 0; i < reverseSpecificationFacetsList.length; i++) { - await expect(panelList[i]).toHaveText( - reverseSpecificationFacetsList[i] - ); + for (let i = 0; i < reverseSpecificationFacetsList.length; i++) { + await expect(panelList[i]).toHaveText( + reverseSpecificationFacetsList[i] + ); + } } -}); - -test('LPD-20340 Option and Specification facet portlets behave the same way', async ({ - apiHelpers, - page, - site, - specificationFacetsPage, -}) => { - const layout = await apiHelpers.jsonWebServicesLayout.addLayout({ - groupId: site.id, - title: getRandomString(), - }); - - await apiHelpers.headlessCommerceAdminChannel.postChannel({ - name: getRandomString(), - siteGroupId: site.id, - }); - - const optionCategory1 = - await apiHelpers.headlessCommerceAdminCatalog.postOptionCategory( - 'Warranty', - 1 - ); - - const optionCategory2 = - await apiHelpers.headlessCommerceAdminCatalog.postOptionCategory( - 'Material', - 0 - ); - - const specification1 = - await apiHelpers.headlessCommerceAdminCatalog.postSpecification( - true, - optionCategory2.priority, - 'Warranty1', - { - id: optionCategory1.id, - key: optionCategory1.key, - priority: optionCategory1.priority, - title: { - en_US: optionCategory1.key, - }, - } - ); +); - const specification2 = - await apiHelpers.headlessCommerceAdminCatalog.postSpecification( - true, - optionCategory1.priority, - 'Material1', - { - id: optionCategory2.id, - key: optionCategory2.key, - priority: optionCategory2.priority, - title: { - en_US: optionCategory2.key, +test( + 'Option and Specification facet portlets behave the same way', + {tag: '@LPD-20340'}, + async ({apiHelpers, page, site, specificationFacetsPage}) => { + const layout = await apiHelpers.jsonWebServicesLayout.addLayout({ + groupId: site.id, + title: getRandomString(), + }); + + await apiHelpers.headlessCommerceAdminChannel.postChannel({ + name: getRandomString(), + siteGroupId: site.id, + }); + + const optionCategory1 = + await apiHelpers.headlessCommerceAdminCatalog.postOptionCategory( + 'Warranty', + 1 + ); + + const optionCategory2 = + await apiHelpers.headlessCommerceAdminCatalog.postOptionCategory( + 'Material', + 0 + ); + + const specification1 = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification( + true, + optionCategory2.priority, + 'Warranty1', + { + id: optionCategory1.id, + key: optionCategory1.key, + priority: optionCategory1.priority, + title: { + en_US: optionCategory1.key, + }, + } + ); + + const specification2 = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification( + true, + optionCategory1.priority, + 'Material1', + { + id: optionCategory2.id, + key: optionCategory2.key, + priority: optionCategory2.priority, + title: { + en_US: optionCategory2.key, + }, + } + ); + + const catalog = + await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ + name: getRandomString(), + }); + + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, + name: { + en_US: 'Product1', + }, + productSpecifications: [ + { + specificationKey: specification1.key, + value: { + en_US: 'Product1', + }, }, - } - ); + ], + }); - const catalog = await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ - name: getRandomString(), - }); - - await apiHelpers.headlessCommerceAdminCatalog.postProduct({ - catalogId: catalog.id, - name: { - en_US: 'Product1', - }, - productSpecifications: [ - { - specificationKey: specification1.key, - value: { - en_US: 'Product1', - }, + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, + name: { + en_US: 'Product2', }, - ], - }); - - await apiHelpers.headlessCommerceAdminCatalog.postProduct({ - catalogId: catalog.id, - name: { - en_US: 'Product2', - }, - productSpecifications: [ - { - specificationKey: specification2.key, - value: { - en_US: 'Product2', + productSpecifications: [ + { + specificationKey: specification2.key, + value: { + en_US: 'Product2', + }, }, - }, - ], - }); + ], + }); - await page.goto(`/web${site.friendlyUrlPath}${layout.friendlyURL}`); + await page.goto(`/web${site.friendlyUrlPath}${layout.friendlyURL}`); - await specificationFacetsPage.addRequiredFacetWidgets(); - await specificationFacetsPage.configureSearchOptions(); + await specificationFacetsPage.addRequiredFacetWidgets(); + await specificationFacetsPage.configureSearchOptions(); - await expect( - specificationFacetsPage.searchOptionsConfigurationSaveButton - ).toBeEnabled(); + await expect( + specificationFacetsPage.searchOptionsConfigurationSaveButton + ).toBeEnabled(); - await page.reload(); + await page.reload(); - const panelList = await specificationFacetsPage.panelList.all(); + const panelList = await specificationFacetsPage.panelList.all(); - const specificationFacetsList = ['Material1', 'Warranty1']; + const specificationFacetsList = ['Material1', 'Warranty1']; - for (let i = 0; i < specificationFacetsList.length; i++) { - await expect(panelList[i]).toHaveText(specificationFacetsList[i]); - } + for (let i = 0; i < specificationFacetsList.length; i++) { + await expect(panelList[i]).toHaveText(specificationFacetsList[i]); + } - await specificationFacetsPage.configureOptionFacetFrequencyThreshold('60'); + await specificationFacetsPage.configureOptionFacetFrequencyThreshold( + '60' + ); - await expect(specificationFacetsPage.configurationSaveButton).toBeEnabled(); + await expect( + specificationFacetsPage.configurationSaveButton + ).toBeEnabled(); - await page.reload(); + await page.reload(); - await specificationFacetsPage.configureSpecificationFacetFrequencyThreshold( - '60' - ); + await specificationFacetsPage.configureSpecificationFacetFrequencyThreshold( + '60' + ); + + await expect( + specificationFacetsPage.configurationSaveButton + ).toBeEnabled(); - await expect(specificationFacetsPage.configurationSaveButton).toBeEnabled(); + await page.reload(); - await page.reload(); + await expect(page.getByText('No facets were found.')).toHaveCount(2); - await expect(page.getByText('No facets were found.')).toHaveCount(2); + await specificationFacetsPage.configureSpecificationFacetFrequencyThreshold( + '2' + ); - await specificationFacetsPage.configureSpecificationFacetFrequencyThreshold( - '2' - ); + await expect( + specificationFacetsPage.configurationSaveButton + ).toBeEnabled(); - await expect(specificationFacetsPage.configurationSaveButton).toBeEnabled(); + await page.reload(); - await page.reload(); + await expect(page.getByText('No facets were found.')).toHaveCount(2); + } +); - await expect(page.getByText('No facets were found.')).toHaveCount(2); -}); +test( + 'Only visible specifications are listed in facet widget', + {tag: '@LPD-48103'}, + async ({apiHelpers, page, site, specificationFacetsPage}) => { + test.setTimeout(180000); + + const layout = await apiHelpers.jsonWebServicesLayout.addLayout({ + groupId: site.id, + title: getRandomString(), + }); + + await apiHelpers.headlessCommerceAdminChannel.postChannel({ + name: getRandomString(), + siteGroupId: site.id, + }); + + await page.goto(`/web${site.friendlyUrlPath}${layout.friendlyURL}`); + + await specificationFacetsPage.addRequiredFacetWidgets(); + await specificationFacetsPage.configureSearchOptions(); + + const optionCategory1 = + await apiHelpers.headlessCommerceAdminCatalog.postOptionCategory( + 'Warranty', + 1 + ); + + const optionCategory2 = + await apiHelpers.headlessCommerceAdminCatalog.postOptionCategory( + 'Material', + 0 + ); + + const specification1 = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification( + true, + optionCategory2.priority, + 'Warranty1', + { + id: optionCategory1.id, + key: optionCategory1.key, + priority: optionCategory1.priority, + title: { + en_US: optionCategory1.key, + }, + } + ); + + const specification2 = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification( + true, + optionCategory1.priority, + 'Material1', + { + id: optionCategory2.id, + key: optionCategory2.key, + priority: optionCategory2.priority, + title: { + en_US: optionCategory2.key, + }, + } + ); + + const catalog = + await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ + name: getRandomString(), + }); + + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, + name: { + en_US: 'Product1', + }, + productSpecifications: [ + { + specificationKey: specification1.key, + value: { + en_US: 'Product1', + }, + }, + ], + }); + + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, + name: { + en_US: 'Product2', + }, + productSpecifications: [ + { + specificationKey: specification2.key, + value: { + en_US: 'Product2', + }, + visible: false, + }, + ], + }); + + await specificationFacetsPage.reloadPage(); + + const panelList = await specificationFacetsPage.panelList.all(); + + await expect(panelList[0]).toHaveText('Warranty1'); + } +); diff --git a/modules/test/playwright/tests/commerce/commerce-product-definitions-web/commerceProductSpecifications.spec.ts b/modules/test/playwright/tests/commerce/commerce-product-definitions-web/commerceProductSpecifications.spec.ts index 99dab3ba4e5381..88e51ebdb54084 100644 --- a/modules/test/playwright/tests/commerce/commerce-product-definitions-web/commerceProductSpecifications.spec.ts +++ b/modules/test/playwright/tests/commerce/commerce-product-definitions-web/commerceProductSpecifications.spec.ts @@ -10,6 +10,7 @@ import {applicationsMenuPageTest} from '../../../fixtures/applicationsMenuPageTe import {commercePagesTest} from '../../../fixtures/commercePagesTest'; import {dataApiHelpersTest} from '../../../fixtures/dataApiHelpersTest'; import {loginTest} from '../../../fixtures/loginTest'; +import getRandomString from '../../../utils/getRandomString'; export const test = mergeTests( apiHelpersTest, @@ -18,82 +19,48 @@ export const test = mergeTests( dataApiHelpersTest, loginTest() ); -test('LPD-28891 Key is not automatically generated when writing new Specifications label', async ({ - apiHelpers, - applicationsMenuPage, - commerceSpecificationsPage, -}) => { - await applicationsMenuPage.goToCommerceSpecifications(); - await expect( - commerceSpecificationsPage.createNewSpecificationsProduct - ).toBeVisible(); - - await commerceSpecificationsPage.createNewSpecificationsProduct.click(); - - await commerceSpecificationsPage.waitForKey('Specification 1'); - - await commerceSpecificationsPage.addDescriptionSpecifications.fill( - 'Specification-1 Description' - ); - - await expect( - commerceSpecificationsPage.addDescriptionSpecifications - ).toBeVisible(); - - await commerceSpecificationsPage.keyContent.fill('specification-1'); - - await expect(commerceSpecificationsPage.keyContent).toHaveValue( - 'specification-1' - ); - - await commerceSpecificationsPage.saveButton.click(); - - await expect(commerceSpecificationsPage.successMessage).toBeVisible(); - - await commerceSpecificationsPage.goBack.click(); - - await commerceSpecificationsPage.goToSpecificationGroup.click(); - - await commerceSpecificationsPage.createNewSpecificationsProductGroup.click(); - - await commerceSpecificationsPage.addNewProductSpecificationsGroup.fill( - 'Specification group' - ); - - await commerceSpecificationsPage.addDescriptionSpecificationsGroup.fill( - 'Specification group Description' - ); - - await expect(commerceSpecificationsPage.keyContent).toHaveValue( - 'Specification group' - ); - - await commerceSpecificationsPage.saveButton.click(); - - await expect(commerceSpecificationsPage.successMessage).toBeVisible(); - - const specifications = - await apiHelpers.headlessCommerceAdminCatalog.getSpecifications(); - - for (let i = 0; i < specifications.totalCount; i++) { - if (specifications.items[i].title.en_US === 'Specification 1') { - apiHelpers.data.push({ - id: specifications.items[i].id, - type: 'specification', +test( + 'Product specification visibility is correctly saved', + {tag: '@LPD-48103'}, + async ({ + apiHelpers, + commerceAdminProductDetailsPage, + commerceAdminProductPage, + }) => { + const specification = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification( + true, + 0, + getRandomString(), + null, + false + ); + + const catalog = + await apiHelpers.headlessCommerceAdminCatalog.postCatalog(); + + const product = + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, }); - } - } - - const optionCategory = - await apiHelpers.headlessCommerceAdminCatalog.getOptionCategories(); - for (let i = 0; i < optionCategory.totalCount; i++) { - if (optionCategory.items[i].title.en_US === 'Specification group') { - apiHelpers.data.push({ - id: optionCategory.items[i].id, - type: 'optionCategory', - }); - } + await commerceAdminProductPage.gotoProduct(product.name['en_US']); + + await commerceAdminProductDetailsPage.addOrEditProductSpecification( + 'Add an Existing Specification', + specification.title.en_US, + 'item1' + ); + await commerceAdminProductDetailsPage.editOrDeleteProductSpecification( + 'Edit', + 'item1' + ); + await commerceAdminProductDetailsPage.visibleToggle.check(); + await commerceAdminProductDetailsPage.saveButtonEditFrame.click(); + + await expect( + commerceAdminProductDetailsPage.editSuccessMessage + ).toBeVisible(); } -}); +); diff --git a/modules/test/playwright/tests/commerce/commerce-product-definitions-web/commerceProductSpecificationsPicklist.spec.ts b/modules/test/playwright/tests/commerce/commerce-product-definitions-web/commerceProductSpecificationsPicklist.spec.ts index 712ec4279123f9..ceb597b7b5ff47 100644 --- a/modules/test/playwright/tests/commerce/commerce-product-definitions-web/commerceProductSpecificationsPicklist.spec.ts +++ b/modules/test/playwright/tests/commerce/commerce-product-definitions-web/commerceProductSpecificationsPicklist.spec.ts @@ -19,248 +19,265 @@ export const test = mergeTests( loginTest() ); -test('LPD-22572 Picklist on product specifications page', async ({ - apiHelpers, - commerceAdminProductPage, - productDetailsPage, -}) => { - const catalog = await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ - name: 'Catalog', - }); - - apiHelpers.data.push({id: catalog.id, type: 'catalog'}); - - const product = await apiHelpers.headlessCommerceAdminCatalog.postProduct({ - catalogId: catalog.id, - name: {en_US: 'Product1'}, - }); - - apiHelpers.data.push({id: product.id, type: 'product'}); - - const specification = - await apiHelpers.headlessCommerceAdminCatalog.postSpecification(); - - const picklist = - await apiHelpers.listTypeAdmin.postRandomListTypeDefinition(); - - await apiHelpers.listTypeAdmin.postListTypeEntry( - picklist.externalReferenceCode, - 'item1' - ); - - await apiHelpers.headlessCommerceAdminCatalog.patchSpecification( - specification.id, - [picklist.id] - ); - - await commerceAdminProductPage.gotoProduct(product.name['en_US']); - - await productDetailsPage.addSpecificationToProduct( - 'Add an Existing Specification', - specification.title.en_US, - 'item1' - ); - - await expect( - await productDetailsPage.checkSpecificationProduct( - specification.title.en_US - ) - ).toBeVisible(); +test( + 'Picklist on product specifications page', + {tag: '@LPD-22572'}, + async ({ + apiHelpers, + commerceAdminProductDetailsPage, + commerceAdminProductPage, + page, + }) => { + const catalog = + await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ + name: 'Catalog', + }); + + apiHelpers.data.push({id: catalog.id, type: 'catalog'}); + + const product = + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, + name: {en_US: 'Product1'}, + }); + + apiHelpers.data.push({id: product.id, type: 'product'}); + + const specification = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification(); + + const picklist = + await apiHelpers.listTypeAdmin.postRandomListTypeDefinition(); + + await apiHelpers.listTypeAdmin.postListTypeEntry( + picklist.externalReferenceCode, + 'item1' + ); - await apiHelpers.listTypeAdmin.postListTypeEntry( - picklist.externalReferenceCode, - 'item2' - ); + await apiHelpers.headlessCommerceAdminCatalog.patchSpecification( + specification.id, + [picklist.id] + ); - await productDetailsPage.changeValueInProductSpecification('Edit', 'item2'); + await commerceAdminProductPage.gotoProduct(product.name['en_US']); - await expect(productDetailsPage.waitForEditScuccessMessage).toBeVisible(); + await commerceAdminProductDetailsPage.addOrEditProductSpecification( + 'Add an Existing Specification', + specification.title.en_US, + 'item1' + ); - await productDetailsPage.closeEditFrame.click(); + await expect(specification.title.en_US).toBeVisible(); - await expect( - await productDetailsPage.checkSpecificationProduct('item2') - ).toBeVisible(); + await apiHelpers.listTypeAdmin.postListTypeEntry( + picklist.externalReferenceCode, + 'item2' + ); - await productDetailsPage.createSpecificationProduct( - 'Create New Specification', - 'Specification-1', - 'item3' - ); + await commerceAdminProductDetailsPage.editOrDeleteProductSpecification( + 'Edit', + 'item2' + ); + + await expect( + commerceAdminProductDetailsPage.editSuccessMessage + ).toBeVisible(); - await expect( - await productDetailsPage.checkSpecificationProduct('item3') - ).toBeVisible(); + await commerceAdminProductDetailsPage.closeEditFrame.click(); - const specifications = - await apiHelpers.headlessCommerceAdminCatalog.getSpecifications(); + await expect(page.getByText('item2')).toBeVisible(); - for (let i = 0; i < specifications.totalCount; i++) { - await apiHelpers.headlessCommerceAdminCatalog.deleteSpecification( - specifications.items[i].id + await commerceAdminProductDetailsPage.createSpecificationProduct( + 'Create New Specification', + 'Specification-1', + 'item3' ); + + await expect(page.getByText('item3')).toBeVisible(); + + const specifications = + await apiHelpers.headlessCommerceAdminCatalog.getSpecifications(); + + for (let i = 0; i < specifications.totalCount; i++) { + await apiHelpers.headlessCommerceAdminCatalog.deleteSpecification( + specifications.items[i].id + ); + } + + await apiHelpers.listTypeAdmin.deleteListTypeDefinition(picklist.id); } +); - await apiHelpers.listTypeAdmin.deleteListTypeDefinition(picklist.id); -}); +test( + 'Multiple picklist on product specifications page', + {tag: '@LPD-29336'}, + async ({ + apiHelpers, + commerceAdminProductDetailsPage, + commerceAdminProductPage, + page, + }) => { + const catalog = + await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ + name: 'Catalog', + }); + + apiHelpers.data.push({id: catalog.id, type: 'catalog'}); + + const product = + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, + name: {en_US: 'Product1'}, + }); + + apiHelpers.data.push({id: product.id, type: 'product'}); + + const specification = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification(); + + const picklist1 = + await apiHelpers.listTypeAdmin.postRandomListTypeDefinition(); + + await apiHelpers.listTypeAdmin.postListTypeEntry( + picklist1.externalReferenceCode, + 'item1' + ); -test('LPD-29336 Multiple picklist on product specifications page', async ({ - apiHelpers, - commerceAdminProductPage, - productDetailsPage, -}) => { - const catalog = await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ - name: 'Catalog', - }); + const picklist2 = + await apiHelpers.listTypeAdmin.postRandomListTypeDefinition(); - apiHelpers.data.push({id: catalog.id, type: 'catalog'}); + await apiHelpers.listTypeAdmin.postListTypeEntry( + picklist2.externalReferenceCode, + 'item2' + ); - const product = await apiHelpers.headlessCommerceAdminCatalog.postProduct({ - catalogId: catalog.id, - name: {en_US: 'Product1'}, - }); + await apiHelpers.headlessCommerceAdminCatalog.patchSpecification( + specification.id, + [picklist1.id, picklist2.id] + ); - apiHelpers.data.push({id: product.id, type: 'product'}); + await commerceAdminProductPage.gotoProduct(product.name['en_US']); - const specification = - await apiHelpers.headlessCommerceAdminCatalog.postSpecification(); + await commerceAdminProductDetailsPage.addOrEditProductSpecification( + 'Add an Existing Specification', + specification.title.en_US, + 'item1' + ); - const picklist1 = - await apiHelpers.listTypeAdmin.postRandomListTypeDefinition(); + await expect(page.getByText('item1')).toBeVisible(); - await apiHelpers.listTypeAdmin.postListTypeEntry( - picklist1.externalReferenceCode, - 'item1' - ); + await commerceAdminProductDetailsPage.addOrEditProductSpecification( + 'Add an Existing Specification', + specification.title.en_US, + 'item2' + ); - const picklist2 = - await apiHelpers.listTypeAdmin.postRandomListTypeDefinition(); + await expect(page.getByText('item2')).toBeVisible(); - await apiHelpers.listTypeAdmin.postListTypeEntry( - picklist2.externalReferenceCode, - 'item2' - ); + const specifications = + await apiHelpers.headlessCommerceAdminCatalog.getSpecifications(); - await apiHelpers.headlessCommerceAdminCatalog.patchSpecification( - specification.id, - [picklist1.id, picklist2.id] - ); + for (let i = 0; i < specifications.totalCount; i++) { + await apiHelpers.headlessCommerceAdminCatalog.deleteSpecification( + specifications.items[i].id + ); + } - await commerceAdminProductPage.gotoProduct(product.name['en_US']); + await apiHelpers.listTypeAdmin.deleteListTypeDefinition(picklist1.id); + await apiHelpers.listTypeAdmin.deleteListTypeDefinition(picklist2.id); + } +); - await productDetailsPage.addSpecificationToProduct( - 'Add an Existing Specification', - specification.title.en_US, - 'item1' - ); +test( + 'Missing error handling for Missing Specifications values', + {tag: '@LPD-45255'}, + async ({ + apiHelpers, + commerceAdminProductDetailsPage, + commerceAdminProductPage, + page, + }) => { + const catalog = + await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ + name: 'Catalog', + }); + + apiHelpers.data.push({id: catalog.id, type: 'catalog'}); + + const product = + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, + name: {en_US: 'Product1'}, + }); + + apiHelpers.data.push({id: product.id, type: 'product'}); + + const specification = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification(); + + const picklist1 = + await apiHelpers.listTypeAdmin.postRandomListTypeDefinition(); + + await apiHelpers.listTypeAdmin.postListTypeEntry( + picklist1.externalReferenceCode, + 'item1' + ); - await expect( - await productDetailsPage.checkSpecificationProduct('item1') - ).toBeVisible(); + await apiHelpers.headlessCommerceAdminCatalog.patchSpecification( + specification.id, + [picklist1.id] + ); - await productDetailsPage.addSpecificationToProduct( - 'Add an Existing Specification', - specification.title.en_US, - 'item2' - ); + await commerceAdminProductPage.gotoProduct(product.name['en_US']); - await expect( - await productDetailsPage.checkSpecificationProduct('item2') - ).toBeVisible(); + await commerceAdminProductDetailsPage.addOrEditProductSpecification( + 'Add an Existing Specification', + specification.title.en_US + ); - const specifications = - await apiHelpers.headlessCommerceAdminCatalog.getSpecifications(); + const selectSpecificationValueIframe = page + .frameLocator('iframe') + .nth(2) + .locator('select[name="listTypeEntriesSelect"]'); - for (let i = 0; i < specifications.totalCount; i++) { - await apiHelpers.headlessCommerceAdminCatalog.deleteSpecification( - specifications.items[i].id + await expect(selectSpecificationValueIframe).toHaveAttribute( + 'required' ); - } - await apiHelpers.listTypeAdmin.deleteListTypeDefinition(picklist1.id); - await apiHelpers.listTypeAdmin.deleteListTypeDefinition(picklist2.id); -}); - -test('LPD-45255 Missing error handling for Missing Specifications values', async ({ - apiHelpers, - commerceAdminProductPage, - page, - productDetailsPage, -}) => { - const catalog = await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ - name: 'Catalog', - }); - - apiHelpers.data.push({id: catalog.id, type: 'catalog'}); - - const product = await apiHelpers.headlessCommerceAdminCatalog.postProduct({ - catalogId: catalog.id, - name: {en_US: 'Product1'}, - }); - - apiHelpers.data.push({id: product.id, type: 'product'}); - - const specification = - await apiHelpers.headlessCommerceAdminCatalog.postSpecification(); - - const picklist1 = - await apiHelpers.listTypeAdmin.postRandomListTypeDefinition(); - - await apiHelpers.listTypeAdmin.postListTypeEntry( - picklist1.externalReferenceCode, - 'item1' - ); - - await apiHelpers.headlessCommerceAdminCatalog.patchSpecification( - specification.id, - [picklist1.id] - ); - - await commerceAdminProductPage.gotoProduct(product.name['en_US']); - - await productDetailsPage.addSpecificationToProduct( - 'Add an Existing Specification', - specification.title.en_US - ); - - const selectSpecificationValueIframe = page - .frameLocator('iframe') - .nth(2) - .locator('select[name="listTypeEntriesSelect"]'); - - await expect(selectSpecificationValueIframe).toHaveAttribute('required'); - - await productDetailsPage.frameChooseSpecificationValue('item1'); - await productDetailsPage.frameSubmitSpecification.click(); - await expect( - await productDetailsPage.checkSpecificationProduct('item1') - ).toBeVisible(); - await productDetailsPage.createSpecificationProduct( - 'Create New Specification', - 'Specification-1' - ); - - const inputSpecificationValueIframe = page - .frameLocator('iframe') - .nth(2) - .getByRole('textbox') - .nth(1); - - await expect(inputSpecificationValueIframe).toHaveAttribute('required'); - - await productDetailsPage.createNewValueSpecificationProduct.fill('item-2'); - await productDetailsPage.frameSubmitSpecification.click(); - - await expect( - await productDetailsPage.checkSpecificationProduct('item-2') - ).toBeVisible(); - - const specifications = - await apiHelpers.headlessCommerceAdminCatalog.getSpecifications(); - - for (let i = 0; i < specifications.totalCount; i++) { - await apiHelpers.headlessCommerceAdminCatalog.deleteSpecification( - specifications.items[i].id + await commerceAdminProductDetailsPage.frameChooseSpecificationValue( + 'item1' + ); + await commerceAdminProductDetailsPage.frameSubmitSpecification.click(); + + await expect(page.getByText('item1')).toBeVisible(); + + await commerceAdminProductDetailsPage.createSpecificationProduct( + 'Create New Specification', + 'Specification-1' ); + + const inputSpecificationValueIframe = page + .frameLocator('iframe') + .nth(2) + .getByRole('textbox') + .nth(1); + + await expect(inputSpecificationValueIframe).toHaveAttribute('required'); + + await commerceAdminProductDetailsPage.createNewValueSpecificationProduct.fill( + 'item-2' + ); + await commerceAdminProductDetailsPage.frameSubmitSpecification.click(); + + await expect(page.getByText('item-2')).toBeVisible(); + + const specifications = + await apiHelpers.headlessCommerceAdminCatalog.getSpecifications(); + + for (let i = 0; i < specifications.totalCount; i++) { + await apiHelpers.headlessCommerceAdminCatalog.deleteSpecification( + specifications.items[i].id + ); + } } -}); +); diff --git a/modules/test/playwright/tests/commerce/commerce-product-options-web/commerceSpecificationFragment.spec.ts b/modules/test/playwright/tests/commerce/commerce-product-options-web/commerceSpecificationFragment.spec.ts index 7d45a94f464920..e47f5367d51d64 100644 --- a/modules/test/playwright/tests/commerce/commerce-product-options-web/commerceSpecificationFragment.spec.ts +++ b/modules/test/playwright/tests/commerce/commerce-product-options-web/commerceSpecificationFragment.spec.ts @@ -10,6 +10,7 @@ import {applicationsMenuPageTest} from '../../../fixtures/applicationsMenuPageTe import {commercePagesTest} from '../../../fixtures/commercePagesTest'; import {dataApiHelpersTest} from '../../../fixtures/dataApiHelpersTest'; import {displayPageTemplatesPagesTest} from '../../../fixtures/displayPageTemplatesPagesTest'; +import {isolatedSiteTest} from '../../../fixtures/isolatedSiteTest'; import {loginTest} from '../../../fixtures/loginTest'; import {pageEditorPagesTest} from '../../../fixtures/pageEditorPagesTest'; import getRandomString from '../../../utils/getRandomString'; @@ -20,93 +21,114 @@ export const test = mergeTests( commercePagesTest, dataApiHelpersTest, displayPageTemplatesPagesTest, + isolatedSiteTest, pageEditorPagesTest, loginTest() ); -test('LPD-13652 Product specification fragment only shows correct specifications', async ({ - apiHelpers, - commerceLayoutsPage, - displayPageTemplatesPage, - page, - pageEditorPage, -}) => { - const site = await apiHelpers.headlessSite.createSite({ - name: getRandomString(), - }); - - apiHelpers.data.push({id: site.id, type: 'site'}); - - await apiHelpers.headlessCommerceAdminChannel.postChannel({ - name: 'Specification Fragment Channel', - siteGroupId: site.id, - }); - - const catalog = await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ - name: 'Specification Fragment Catalog', - }); - - const specification = - await apiHelpers.headlessCommerceAdminCatalog.postSpecification( - true, - 0, - 'Test Specification' - ); - - const product1 = await apiHelpers.headlessCommerceAdminCatalog.postProduct({ - catalogId: catalog.id, - name: {en_US: 'Product1'}, - productSpecifications: [ - { - specificationKey: specification.key, - value: { - en_US: 'Product1', +test( + 'Product specification fragment only shows correct specifications', + {tag: '@LPD-13652'}, + async ({ + apiHelpers, + commerceLayoutsPage, + displayPageTemplatesPage, + page, + pageEditorPage, + site, + }) => { + await apiHelpers.headlessCommerceAdminChannel.postChannel({ + name: 'Specification Fragment Channel', + siteGroupId: site.id, + }); + + const catalog = + await apiHelpers.headlessCommerceAdminCatalog.postCatalog({ + name: 'Specification Fragment Catalog', + }); + + const specification = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification( + true, + 0, + 'Test Specification' + ); + + const product1 = + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, + name: {en_US: 'Product1'}, + productSpecifications: [ + { + specificationKey: specification.key, + value: { + en_US: 'Product1', + }, + }, + ], + }); + + await apiHelpers.headlessCommerceAdminCatalog.postProduct({ + catalogId: catalog.id, + name: {en_US: 'Product2'}, + productSpecifications: [ + { + specificationKey: specification.key, + value: { + en_US: 'Product2', + }, }, - }, - ], - }); - - await apiHelpers.headlessCommerceAdminCatalog.postProduct({ - catalogId: catalog.id, - name: {en_US: 'Product2'}, - productSpecifications: [ - { - specificationKey: specification.key, - value: { - en_US: 'Product2', + { + specificationKey: 'hidden-spec', + value: { + en_US: 'Product2 hidden', + }, + visible: false, }, - }, - ], - }); + ], + }); - await displayPageTemplatesPage.goto(site.friendlyUrlPath); + await displayPageTemplatesPage.goto(site.friendlyUrlPath); - const displayPageTemplateName = getRandomString(); + const displayPageTemplateName = getRandomString(); - await displayPageTemplatesPage.createTemplate({ - contentType: 'Product', - name: displayPageTemplateName, - }); - await displayPageTemplatesPage.editTemplate(displayPageTemplateName); + await displayPageTemplatesPage.createTemplate({ + contentType: 'Product', + name: displayPageTemplateName, + }); + await displayPageTemplatesPage.editTemplate(displayPageTemplateName); - await pageEditorPage.addFragment('Product', 'Price'); - await pageEditorPage.addFragment('Product', 'Product Specification'); + await pageEditorPage.addFragment('Product', 'Price'); + await pageEditorPage.addFragment('Product', 'Product Specification'); - await pageEditorPage.waitForChangesSaved(); + await pageEditorPage.waitForChangesSaved(); - await page - .getByText('The Product Specification component will be shown here.') - .click(); - await page - .getByLabel('Key', {exact: true}) - .fill(product1.productSpecifications[0].key); + await page + .getByText( + 'The Product Specification component will be shown here.' + ) + .click(); + await page + .getByLabel('Key', {exact: true}) + .fill(product1.productSpecifications[0].key); - await commerceLayoutsPage.selectDisplayPageTemplatePreviewItem('Product1'); + await commerceLayoutsPage.selectDisplayPageTemplatePreviewItem( + 'Product1' + ); - await expect(page.getByText('Test Specification Product1')).toBeVisible(); + await expect( + page.getByText('Test Specification Product1') + ).toBeVisible(); - await commerceLayoutsPage.showLabelInput.uncheck(); - await commerceLayoutsPage.selectDisplayPageTemplatePreviewItem('Product2'); + await commerceLayoutsPage.showLabelInput.uncheck(); + await commerceLayoutsPage.selectDisplayPageTemplatePreviewItem( + 'Product2' + ); - await expect(page.getByText('Test Specification')).toBeHidden(); -}); + await expect(page.getByText('Test Specification')).toBeHidden(); + + await page.getByLabel('Key', {exact: true}).fill('hidden-spec'); + + await expect(page.getByText('Test Specification')).toBeHidden(); + } +); diff --git a/modules/test/playwright/tests/commerce/commerce-product-options-web/commerceSpecifications.spec.ts b/modules/test/playwright/tests/commerce/commerce-product-options-web/commerceSpecifications.spec.ts index 989052ae215c7f..692b1bf1ffc771 100644 --- a/modules/test/playwright/tests/commerce/commerce-product-options-web/commerceSpecifications.spec.ts +++ b/modules/test/playwright/tests/commerce/commerce-product-options-web/commerceSpecifications.spec.ts @@ -10,6 +10,7 @@ import {applicationsMenuPageTest} from '../../../fixtures/applicationsMenuPageTe import {commercePagesTest} from '../../../fixtures/commercePagesTest'; import {dataApiHelpersTest} from '../../../fixtures/dataApiHelpersTest'; import {loginTest} from '../../../fixtures/loginTest'; +import getRandomString from '../../../utils/getRandomString'; import {waitForAlert} from '../../../utils/waitForAlert'; export const test = mergeTests( @@ -19,58 +20,173 @@ export const test = mergeTests( dataApiHelpersTest, loginTest() ); -test('LPD-46948 Unable to delete specification picklist items', async ({ - apiHelpers, - applicationsMenuPage, - commerceSpecificationsPage, - page, -}) => { - const specification = - await apiHelpers.headlessCommerceAdminCatalog.postSpecification(); - const picklist = - await apiHelpers.listTypeAdmin.postRandomListTypeDefinition(); +test( + 'Unable to delete specification picklist items', + {tag: '@LPD-46948'}, + async ({ + apiHelpers, + applicationsMenuPage, + commerceSpecificationsPage, + page, + }) => { + const specification = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification(); + + const picklist = + await apiHelpers.listTypeAdmin.postRandomListTypeDefinition(); + + const listTypeEntry = await apiHelpers.listTypeAdmin.postListTypeEntry( + picklist.externalReferenceCode, + 'item1' + ); + + await apiHelpers.headlessCommerceAdminCatalog.patchSpecification( + specification.id, + [picklist.id] + ); + + await applicationsMenuPage.goToCommerceSpecifications(); + + await commerceSpecificationsPage + .specificationNameLink(specification.title.en_US) + .click(); + + await expect( + page + .getByRole('cell', {name: picklist.externalReferenceCode}) + .nth(1) + ).toBeVisible(); + + await commerceSpecificationsPage.specificationPicklistActionButton.click(); + await commerceSpecificationsPage + .specificationPicklistDropdownMenu('Edit') + .click(); + + await expect( + page.frameLocator('iframe').locator('tbody') + ).toContainText(listTypeEntry.externalReferenceCode); + + await commerceSpecificationsPage.specificationPicklistItemsActionButton.click(); + await commerceSpecificationsPage + .specificationPicklistDropdownMenuItems('Delete') + .click(); + + await expect(page.getByLabel('Delete Item')).toBeVisible(); + + await commerceSpecificationsPage + .deleteModalButtonAction('Delete') + .click(); + + await waitForAlert( + page, + 'Success:The picklist item was deleted successfully.' + ); + } +); + +test( + 'Key is not automatically generated when writing new Specifications label', + {tag: '@LPD-28891'}, + async ({apiHelpers, applicationsMenuPage, commerceSpecificationsPage}) => { + await applicationsMenuPage.goToCommerceSpecifications(); + + await expect( + commerceSpecificationsPage.createNewSpecificationsProduct + ).toBeVisible(); + + await commerceSpecificationsPage.createNewSpecificationsProduct.click(); + await commerceSpecificationsPage.waitForKey('Specification 1'); + await commerceSpecificationsPage.addDescriptionSpecifications.fill( + 'Specification-1 Description' + ); - const listTypeEntry = await apiHelpers.listTypeAdmin.postListTypeEntry( - picklist.externalReferenceCode, - 'item1' - ); + await expect( + commerceSpecificationsPage.addDescriptionSpecifications + ).toBeVisible(); - await apiHelpers.headlessCommerceAdminCatalog.patchSpecification( - specification.id, - [picklist.id] - ); + await commerceSpecificationsPage.keyContent.fill('specification-1'); - await applicationsMenuPage.goToCommerceSpecifications(); + await expect(commerceSpecificationsPage.keyContent).toHaveValue( + 'specification-1' + ); - await commerceSpecificationsPage - .specificationNameLink(specification.title.en_US) - .click(); + await commerceSpecificationsPage.saveButton.click(); - await expect( - page.getByRole('cell', {name: picklist.externalReferenceCode}).nth(1) - ).toBeVisible(); + await expect(commerceSpecificationsPage.successMessage).toBeVisible(); - await commerceSpecificationsPage.specificationPicklistActionButton.click(); - await commerceSpecificationsPage - .specificationPicklistDropdownMenu('Edit') - .click(); + await commerceSpecificationsPage.goBack.click(); + await commerceSpecificationsPage.goToSpecificationGroup.click(); + await commerceSpecificationsPage.createNewSpecificationsProductGroup.click(); + await commerceSpecificationsPage.addNewProductSpecificationsGroup.fill( + 'Specification group' + ); + await commerceSpecificationsPage.addDescriptionSpecificationsGroup.fill( + 'Specification group Description' + ); - await expect(page.frameLocator('iframe').locator('tbody')).toContainText( - listTypeEntry.externalReferenceCode - ); + await expect(commerceSpecificationsPage.keyContent).toHaveValue( + 'Specification group' + ); - await commerceSpecificationsPage.specificationPicklistItemsActionButton.click(); - await commerceSpecificationsPage - .specificationPicklistDropdownMenuItems('Delete') - .click(); + await commerceSpecificationsPage.saveButton.click(); - await expect(page.getByLabel('Delete Item')).toBeVisible(); + await expect(commerceSpecificationsPage.successMessage).toBeVisible(); - await commerceSpecificationsPage.deleteModalButtonAction('Delete').click(); + const specifications = + await apiHelpers.headlessCommerceAdminCatalog.getSpecifications(); - await waitForAlert( + for (let i = 0; i < specifications.totalCount; i++) { + if (specifications.items[i].title.en_US === 'Specification 1') { + apiHelpers.data.push({ + id: specifications.items[i].id, + type: 'specification', + }); + } + } + + const optionCategory = + await apiHelpers.headlessCommerceAdminCatalog.getOptionCategories(); + + for (let i = 0; i < optionCategory.totalCount; i++) { + if (optionCategory.items[i].title.en_US === 'Specification group') { + apiHelpers.data.push({ + id: optionCategory.items[i].id, + type: 'optionCategory', + }); + } + } + } +); + +test( + 'Specification visibility is correctly saved', + {tag: '@LPD-48103'}, + async ({ + apiHelpers, + applicationsMenuPage, + commerceSpecificationsPage, page, - 'Success:The picklist item was deleted successfully.' - ); -}); + }) => { + const specification = + await apiHelpers.headlessCommerceAdminCatalog.postSpecification( + true, + 0, + getRandomString(), + null, + false + ); + + await applicationsMenuPage.goToCommerceSpecifications(); + + await commerceSpecificationsPage + .specificationNameLink(specification.title.en_US) + .click(); + await commerceSpecificationsPage.visibleToggle.check(); + await commerceSpecificationsPage.saveButton.click(); + + await waitForAlert(page); + + await expect(commerceSpecificationsPage.visibleToggle).toBeChecked(); + } +); From 7c1c323fd17804e7a4143a1f6b8881c60ed41f02 Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:45:16 +0100 Subject: [PATCH 15/18] LPD-48103 SF --- .../contributor/CPInstanceModelPreFilterContributor.java | 4 ++-- .../v1_0/ProductConfigurationListResourceImpl.java | 4 +--- .../resource/v1_0/ProductConfigurationResourceImpl.java | 4 +--- .../internal/resource/v1_0/ProductResourceImpl.java | 4 +--- .../catalog/internal/resource/v1_0/SkuResourceImpl.java | 8 +------- .../order/internal/resource/v1_0/OrderResourceImpl.java | 4 +--- 6 files changed, 7 insertions(+), 21 deletions(-) diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPInstanceModelPreFilterContributor.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPInstanceModelPreFilterContributor.java index 43f5751e9ce428..1b12d61761f14a 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPInstanceModelPreFilterContributor.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/internal/search/spi/model/query/contributor/CPInstanceModelPreFilterContributor.java @@ -117,10 +117,10 @@ private void _filterByPublished( private void _filterByPurchasable( BooleanFilter booleanFilter, SearchContext searchContext) { - boolean published = GetterUtil.getBoolean( + boolean purchasable = GetterUtil.getBoolean( searchContext.getAttribute(CPField.PURCHASABLE)); - if (published) { + if (purchasable) { booleanFilter.addRequiredTerm(CPField.PURCHASABLE, true); } } diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductConfigurationListResourceImpl.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductConfigurationListResourceImpl.java index f44a3df6cb6270..9b8338ab46e784 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductConfigurationListResourceImpl.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductConfigurationListResourceImpl.java @@ -101,9 +101,7 @@ public Page getProductConfigurationListsPage( CPConfigurationList.class.getName(), search, pagination, queryConfig -> queryConfig.setSelectedFieldNames( Field.ENTRY_CLASS_PK), - object -> { - SearchContext searchContext = (SearchContext)object; - + searchContext -> { searchContext.setCompanyId(contextCompany.getCompanyId()); if (GetterUtil.getLong(catalogId) > 0) { diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductConfigurationResourceImpl.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductConfigurationResourceImpl.java index cd387ac80bd713..d4d65011e9a213 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductConfigurationResourceImpl.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductConfigurationResourceImpl.java @@ -174,9 +174,7 @@ public ProductConfiguration getProductConfigurationByExternalReferenceCode( null, booleanQuery -> booleanQuery.getPreBooleanFilter(), filter, CPConfigurationEntry.class.getName(), search, pagination, queryConfig -> queryConfig.setSelectedFieldNames(Field.CLASS_PK), - object -> { - SearchContext searchContext = (SearchContext)object; - + searchContext -> { searchContext.setAttribute( CPField.CP_CONFIGURATION_LIST_ID, cpConfigurationList.getCPConfigurationListId()); diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductResourceImpl.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductResourceImpl.java index c4769a44d1b1c0..f2e3b2ebb493e0 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductResourceImpl.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/ProductResourceImpl.java @@ -932,9 +932,7 @@ private Page _getProductsPage( CPDefinition.class.getName(), search, pagination, queryConfig -> queryConfig.setSelectedFieldNames( Field.ENTRY_CLASS_PK), - object -> { - SearchContext searchContext = (SearchContext)object; - + searchContext -> { searchContext.setCompanyId(companyId); long[] commerceCatalogGroupIds = transformToLongArray( diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/SkuResourceImpl.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/SkuResourceImpl.java index f7f5cecd67d6f4..8d3dfa03910932 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/SkuResourceImpl.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/SkuResourceImpl.java @@ -579,16 +579,10 @@ private Page _getSkusPage( CPInstance.class.getName(), search, pagination, queryConfig -> queryConfig.setSelectedFieldNames( Field.ENTRY_CLASS_PK), - new UnsafeConsumer() { - - public void accept(Object object) throws Exception { - SearchContext searchContext = (SearchContext)object; - + searchContext -> { searchContext.setAttribute( Field.STATUS, WorkflowConstants.STATUS_ANY); searchContext.setCompanyId(companyId); - } - }, sorts, transformUnsafeFunction); } diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-order-impl/src/main/java/com/liferay/headless/commerce/admin/order/internal/resource/v1_0/OrderResourceImpl.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-order-impl/src/main/java/com/liferay/headless/commerce/admin/order/internal/resource/v1_0/OrderResourceImpl.java index 65c8454a2c0443..586a36b33c3917 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-order-impl/src/main/java/com/liferay/headless/commerce/admin/order/internal/resource/v1_0/OrderResourceImpl.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-order-impl/src/main/java/com/liferay/headless/commerce/admin/order/internal/resource/v1_0/OrderResourceImpl.java @@ -598,9 +598,7 @@ private Page _getOrdersPage( CommerceOrder.class.getName(), search, pagination, queryConfig -> queryConfig.setSelectedFieldNames( Field.ENTRY_CLASS_PK), - object -> { - SearchContext searchContext = (SearchContext)object; - + searchContext -> { searchContext.setAttribute( "useSearchResultPermissionFilter", useSearchResultPermissionFilter); From 68fb790159009f88027e78dc86873c7de04229fd Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:27:17 +0100 Subject: [PATCH 16/18] LPD-48103 Regen services --- ...finitionSpecificationOptionValueModel.java | 21 +++++++++ ...finitionSpecificationOptionValueTable.java | 3 ++ ...nitionSpecificationOptionValueWrapper.java | 37 ++++++++++++++++ .../model/CPSpecificationOptionModel.java | 21 +++++++++ .../model/CPSpecificationOptionTable.java | 3 ++ .../model/CPSpecificationOptionWrapper.java | 37 ++++++++++++++++ ...nSpecificationOptionValueLocalService.java | 17 ++++---- ...cificationOptionValueLocalServiceUtil.java | 28 ++++++------ ...icationOptionValueLocalServiceWrapper.java | 29 +++++++------ ...nitionSpecificationOptionValueService.java | 11 ++--- ...onSpecificationOptionValueServiceUtil.java | 20 +++++---- ...pecificationOptionValueServiceWrapper.java | 21 +++++---- .../CPSpecificationOptionLocalService.java | 8 ++-- ...CPSpecificationOptionLocalServiceUtil.java | 15 ++++--- ...pecificationOptionLocalServiceWrapper.java | 15 ++++--- .../service/CPSpecificationOptionService.java | 8 ++-- .../CPSpecificationOptionServiceUtil.java | 16 ++++--- .../CPSpecificationOptionServiceWrapper.java | 16 ++++--- ...ionSpecificationOptionValueCacheModel.java | 10 ++++- ...tionSpecificationOptionValueModelImpl.java | 43 +++++++++++++++++-- .../impl/CPSpecificationOptionCacheModel.java | 10 ++++- .../impl/CPSpecificationOptionModelImpl.java | 43 +++++++++++++++++-- ...onSpecificationOptionValueServiceHttp.java | 29 +++++++------ .../CPSpecificationOptionServiceHttp.java | 22 ++++++---- ...ecificationOptionValuePersistenceImpl.java | 1 + .../CPSpecificationOptionPersistenceImpl.java | 1 + .../main/resources/META-INF/module-hbm.xml | 2 + .../META-INF/portlet-model-hints.xml | 2 + .../main/resources/META-INF/sql/tables.sql | 2 + 29 files changed, 370 insertions(+), 121 deletions(-) diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueModel.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueModel.java index 4130fd491ab6eb..41f1cd923b904d 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueModel.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueModel.java @@ -425,6 +425,27 @@ public void setCPDefinitionSpecificationOptionValueId( */ public void setValueMap(Map valueMap, Locale defaultLocale); + /** + * Returns the visible of this cp definition specification option value. + * + * @return the visible of this cp definition specification option value + */ + public boolean getVisible(); + + /** + * Returns true if this cp definition specification option value is visible. + * + * @return true if this cp definition specification option value is visible; false otherwise + */ + public boolean isVisible(); + + /** + * Sets whether this cp definition specification option value is visible. + * + * @param visible the visible of this cp definition specification option value + */ + public void setVisible(boolean visible); + /** * Returns the last publish date of this cp definition specification option value. * diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueTable.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueTable.java index bd6b9bc1a22cbf..ef1738d7e70498 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueTable.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueTable.java @@ -79,6 +79,9 @@ public class CPDefinitionSpecificationOptionValueTable public final Column value = createColumn( "value", String.class, Types.VARCHAR, Column.FLAG_DEFAULT); + public final Column + visible = createColumn( + "visible", Boolean.class, Types.BOOLEAN, Column.FLAG_DEFAULT); public final Column lastPublishDate = createColumn( "lastPublishDate", Date.class, Types.TIMESTAMP, diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueWrapper.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueWrapper.java index 1da42e6ce6307f..7c80d87b31abdd 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueWrapper.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPDefinitionSpecificationOptionValueWrapper.java @@ -59,6 +59,7 @@ public Map getModelAttributes() { attributes.put("key", getKey()); attributes.put("priority", getPriority()); attributes.put("value", getValue()); + attributes.put("visible", isVisible()); attributes.put("lastPublishDate", getLastPublishDate()); return attributes; @@ -172,6 +173,12 @@ public void setModelAttributes(Map attributes) { setValue(value); } + Boolean visible = (Boolean)attributes.get("visible"); + + if (visible != null) { + setVisible(visible); + } + Date lastPublishDate = (Date)attributes.get("lastPublishDate"); if (lastPublishDate != null) { @@ -481,6 +488,26 @@ public Map getValueMap() { return model.getValueMap(); } + /** + * Returns the visible of this cp definition specification option value. + * + * @return the visible of this cp definition specification option value + */ + @Override + public boolean getVisible() { + return model.getVisible(); + } + + /** + * Returns true if this cp definition specification option value is visible. + * + * @return true if this cp definition specification option value is visible; false otherwise + */ + @Override + public boolean isVisible() { + return model.isVisible(); + } + @Override public void persist() { model.persist(); @@ -758,6 +785,16 @@ public void setValueMap( model.setValueMap(valueMap, defaultLocale); } + /** + * Sets whether this cp definition specification option value is visible. + * + * @param visible the visible of this cp definition specification option value + */ + @Override + public void setVisible(boolean visible) { + model.setVisible(visible); + } + @Override public String toXmlString() { return model.toXmlString(); diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionModel.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionModel.java index 1a62ecfc847a33..732263de5e24a3 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionModel.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionModel.java @@ -501,6 +501,27 @@ public void setDescriptionMap( */ public void setPriority(double priority); + /** + * Returns the visible of this cp specification option. + * + * @return the visible of this cp specification option + */ + public boolean getVisible(); + + /** + * Returns true if this cp specification option is visible. + * + * @return true if this cp specification option is visible; false otherwise + */ + public boolean isVisible(); + + /** + * Sets whether this cp specification option is visible. + * + * @param visible the visible of this cp specification option + */ + public void setVisible(boolean visible); + /** * Returns the last publish date of this cp specification option. * diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionTable.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionTable.java index 52ae6bb23eea44..f75677d9f111e8 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionTable.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionTable.java @@ -72,6 +72,9 @@ public class CPSpecificationOptionTable public final Column priority = createColumn( "priority", Double.class, Types.DOUBLE, Column.FLAG_DEFAULT); + public final Column visible = + createColumn( + "visible", Boolean.class, Types.BOOLEAN, Column.FLAG_DEFAULT); public final Column lastPublishDate = createColumn( "lastPublishDate", Date.class, Types.TIMESTAMP, diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionWrapper.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionWrapper.java index a89070bad95f58..7a0d104f3ee9a4 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionWrapper.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/model/CPSpecificationOptionWrapper.java @@ -54,6 +54,7 @@ public Map getModelAttributes() { attributes.put("facetable", isFacetable()); attributes.put("key", getKey()); attributes.put("priority", getPriority()); + attributes.put("visible", isVisible()); attributes.put("lastPublishDate", getLastPublishDate()); return attributes; @@ -159,6 +160,12 @@ public void setModelAttributes(Map attributes) { setPriority(priority); } + Boolean visible = (Boolean)attributes.get("visible"); + + if (visible != null) { + setVisible(visible); + } + Date lastPublishDate = (Date)attributes.get("lastPublishDate"); if (lastPublishDate != null) { @@ -532,6 +539,16 @@ public String getUuid() { return model.getUuid(); } + /** + * Returns the visible of this cp specification option. + * + * @return the visible of this cp specification option + */ + @Override + public boolean getVisible() { + return model.getVisible(); + } + /** * Returns true if this cp specification option is facetable. * @@ -542,6 +559,16 @@ public boolean isFacetable() { return model.isFacetable(); } + /** + * Returns true if this cp specification option is visible. + * + * @return true if this cp specification option is visible; false otherwise + */ + @Override + public boolean isVisible() { + return model.isVisible(); + } + @Override public void persist() { model.persist(); @@ -863,6 +890,16 @@ public void setUuid(String uuid) { model.setUuid(uuid); } + /** + * Sets whether this cp specification option is visible. + * + * @param visible the visible of this cp specification option + */ + @Override + public void setVisible(boolean visible) { + model.setVisible(visible); + } + @Override public String toXmlString() { return model.toXmlString(); diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalService.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalService.java index 5d3fd657111bee..6ccf4b7f827ebf 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalService.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalService.java @@ -86,7 +86,7 @@ public interface CPDefinitionSpecificationOptionValueLocalService addCPDefinitionSpecificationOptionValue( String externalReferenceCode, long cpDefinitionId, long cpSpecificationOptionId, long cpOptionCategoryId, - double priority, Map valueMap, + double priority, Map valueMap, boolean visible, ServiceContext serviceContext) throws PortalException; @@ -331,19 +331,19 @@ public long dynamicQueryCount( @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public List getCPDefinitionSpecificationOptionValues( - long cpSpecificationOptionId, int start, int end); + long cpDefinitionId, Boolean visible, int start, int end, + OrderByComparator + orderByComparator); @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, int start, int end, - OrderByComparator - orderByComparator); + long cpSpecificationOptionId, int start, int end); @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, long cpOptionCategoryId); + long cpDefinitionId, long cpOptionCategoryId, Boolean visible); @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public List @@ -389,7 +389,7 @@ public long dynamicQueryCount( @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public int getCPDefinitionSpecificationOptionValuesCount( - long cpDefinitionId); + long cpDefinitionId, Boolean visible); @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public int getCPSpecificationOptionDefinitionValuesCount( @@ -438,7 +438,8 @@ public PersistedModel getPersistedModel(Serializable primaryKeyObj) String externalReferenceCode, long cpDefinitionSpecificationOptionValueId, long cpOptionCategoryId, String key, double priority, - Map valueMap, ServiceContext serviceContext) + Map valueMap, boolean visible, + ServiceContext serviceContext) throws PortalException; public CPDefinitionSpecificationOptionValue updateCPOptionCategoryId( diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalServiceUtil.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalServiceUtil.java index ff71c90680adaa..84cbbb4292e400 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalServiceUtil.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalServiceUtil.java @@ -62,12 +62,13 @@ public class CPDefinitionSpecificationOptionValueLocalServiceUtil { String externalReferenceCode, long cpDefinitionId, long cpSpecificationOptionId, long cpOptionCategoryId, double priority, Map valueMap, + boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws PortalException { return getService().addCPDefinitionSpecificationOptionValue( externalReferenceCode, cpDefinitionId, cpSpecificationOptionId, - cpOptionCategoryId, priority, valueMap, serviceContext); + cpOptionCategoryId, priority, valueMap, visible, serviceContext); } /** @@ -391,28 +392,28 @@ public static long dynamicQueryCount( public static List getCPDefinitionSpecificationOptionValues( - long cpSpecificationOptionId, int start, int end) { + long cpDefinitionId, Boolean visible, int start, int end, + OrderByComparator + orderByComparator) { return getService().getCPDefinitionSpecificationOptionValues( - cpSpecificationOptionId, start, end); + cpDefinitionId, visible, start, end, orderByComparator); } public static List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, int start, int end, - OrderByComparator - orderByComparator) { + long cpSpecificationOptionId, int start, int end) { return getService().getCPDefinitionSpecificationOptionValues( - cpDefinitionId, start, end, orderByComparator); + cpSpecificationOptionId, start, end); } public static List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, long cpOptionCategoryId) { + long cpDefinitionId, long cpOptionCategoryId, Boolean visible) { return getService().getCPDefinitionSpecificationOptionValues( - cpDefinitionId, cpOptionCategoryId); + cpDefinitionId, cpOptionCategoryId, visible); } public static List @@ -470,10 +471,10 @@ public static int getCPDefinitionSpecificationOptionValuesCount() { } public static int getCPDefinitionSpecificationOptionValuesCount( - long cpDefinitionId) { + long cpDefinitionId, Boolean visible) { return getService().getCPDefinitionSpecificationOptionValuesCount( - cpDefinitionId); + cpDefinitionId, visible); } public static int getCPSpecificationOptionDefinitionValuesCount( @@ -540,13 +541,14 @@ public static PersistedModel getPersistedModel(Serializable primaryKeyObj) String externalReferenceCode, long cpDefinitionSpecificationOptionValueId, long cpOptionCategoryId, String key, double priority, - Map valueMap, + Map valueMap, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws PortalException { return getService().updateCPDefinitionSpecificationOptionValue( externalReferenceCode, cpDefinitionSpecificationOptionValueId, - cpOptionCategoryId, key, priority, valueMap, serviceContext); + cpOptionCategoryId, key, priority, valueMap, visible, + serviceContext); } public static CPDefinitionSpecificationOptionValue updateCPOptionCategoryId( diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalServiceWrapper.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalServiceWrapper.java index e4e8bb10986773..033373ae0817bc 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalServiceWrapper.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueLocalServiceWrapper.java @@ -63,13 +63,15 @@ public CPDefinitionSpecificationOptionValueLocalServiceWrapper( long cpSpecificationOptionId, long cpOptionCategoryId, double priority, java.util.Map valueMap, + boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { return _cpDefinitionSpecificationOptionValueLocalService. addCPDefinitionSpecificationOptionValue( externalReferenceCode, cpDefinitionId, cpSpecificationOptionId, - cpOptionCategoryId, priority, valueMap, serviceContext); + cpOptionCategoryId, priority, valueMap, visible, + serviceContext); } /** @@ -447,33 +449,33 @@ public long dynamicQueryCount( @Override public java.util.List getCPDefinitionSpecificationOptionValues( - long cpSpecificationOptionId, int start, int end) { + long cpDefinitionId, Boolean visible, int start, int end, + com.liferay.portal.kernel.util.OrderByComparator + orderByComparator) { return _cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValues( - cpSpecificationOptionId, start, end); + cpDefinitionId, visible, start, end, orderByComparator); } @Override public java.util.List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, int start, int end, - com.liferay.portal.kernel.util.OrderByComparator - orderByComparator) { + long cpSpecificationOptionId, int start, int end) { return _cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValues( - cpDefinitionId, start, end, orderByComparator); + cpSpecificationOptionId, start, end); } @Override public java.util.List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, long cpOptionCategoryId) { + long cpDefinitionId, long cpOptionCategoryId, Boolean visible) { return _cpDefinitionSpecificationOptionValueLocalService. getCPDefinitionSpecificationOptionValues( - cpDefinitionId, cpOptionCategoryId); + cpDefinitionId, cpOptionCategoryId, visible); } @Override @@ -538,10 +540,11 @@ public int getCPDefinitionSpecificationOptionValuesCount() { @Override public int getCPDefinitionSpecificationOptionValuesCount( - long cpDefinitionId) { + long cpDefinitionId, Boolean visible) { return _cpDefinitionSpecificationOptionValueLocalService. - getCPDefinitionSpecificationOptionValuesCount(cpDefinitionId); + getCPDefinitionSpecificationOptionValuesCount( + cpDefinitionId, visible); } @Override @@ -622,13 +625,15 @@ public com.liferay.portal.kernel.model.PersistedModel getPersistedModel( long cpDefinitionSpecificationOptionValueId, long cpOptionCategoryId, String key, double priority, java.util.Map valueMap, + boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { return _cpDefinitionSpecificationOptionValueLocalService. updateCPDefinitionSpecificationOptionValue( externalReferenceCode, cpDefinitionSpecificationOptionValueId, - cpOptionCategoryId, key, priority, valueMap, serviceContext); + cpOptionCategoryId, key, priority, valueMap, visible, + serviceContext); } @Override diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueService.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueService.java index 7c194297e6c60d..7d68a91c227ea7 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueService.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueService.java @@ -53,7 +53,7 @@ public interface CPDefinitionSpecificationOptionValueService addCPDefinitionSpecificationOptionValue( String externalReferenceCode, long cpDefinitionId, long cpSpecificationOptionId, long cpOptionCategoryId, - double priority, Map valueMap, + double priority, Map valueMap, boolean visible, ServiceContext serviceContext) throws PortalException; @@ -91,7 +91,7 @@ public void deleteCPDefinitionSpecificationOptionValues(long cpDefinitionId) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, int start, int end, + long cpDefinitionId, Boolean visible, int start, int end, OrderByComparator orderByComparator) throws PortalException; @@ -99,12 +99,12 @@ public void deleteCPDefinitionSpecificationOptionValues(long cpDefinitionId) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, long cpOptionCategoryId) + long cpDefinitionId, long cpOptionCategoryId, Boolean visible) throws PortalException; @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public int getCPDefinitionSpecificationOptionValuesCount( - long cpDefinitionId) + long cpDefinitionId, Boolean visible) throws PortalException; /** @@ -119,7 +119,8 @@ public int getCPDefinitionSpecificationOptionValuesCount( String externalReferenceCode, long cpDefinitionSpecificationOptionValueId, long cpOptionCategoryId, String key, double priority, - Map valueMap, ServiceContext serviceContext) + Map valueMap, boolean visible, + ServiceContext serviceContext) throws PortalException; } \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueServiceUtil.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueServiceUtil.java index 4cb4844b1d590b..2d1277e3e3b5b2 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueServiceUtil.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueServiceUtil.java @@ -37,12 +37,13 @@ public class CPDefinitionSpecificationOptionValueServiceUtil { String externalReferenceCode, long cpDefinitionId, long cpSpecificationOptionId, long cpOptionCategoryId, double priority, Map valueMap, + boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws PortalException { return getService().addCPDefinitionSpecificationOptionValue( externalReferenceCode, cpDefinitionId, cpSpecificationOptionId, - cpOptionCategoryId, priority, valueMap, serviceContext); + cpOptionCategoryId, priority, valueMap, visible, serviceContext); } public static void deleteCPDefinitionSpecificationOptionValue( @@ -101,30 +102,30 @@ public static void deleteCPDefinitionSpecificationOptionValues( public static List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, int start, int end, + long cpDefinitionId, Boolean visible, int start, int end, OrderByComparator orderByComparator) throws PortalException { return getService().getCPDefinitionSpecificationOptionValues( - cpDefinitionId, start, end, orderByComparator); + cpDefinitionId, visible, start, end, orderByComparator); } public static List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, long cpOptionCategoryId) + long cpDefinitionId, long cpOptionCategoryId, Boolean visible) throws PortalException { return getService().getCPDefinitionSpecificationOptionValues( - cpDefinitionId, cpOptionCategoryId); + cpDefinitionId, cpOptionCategoryId, visible); } public static int getCPDefinitionSpecificationOptionValuesCount( - long cpDefinitionId) + long cpDefinitionId, Boolean visible) throws PortalException { return getService().getCPDefinitionSpecificationOptionValuesCount( - cpDefinitionId); + cpDefinitionId, visible); } /** @@ -141,13 +142,14 @@ public static String getOSGiServiceIdentifier() { String externalReferenceCode, long cpDefinitionSpecificationOptionValueId, long cpOptionCategoryId, String key, double priority, - Map valueMap, + Map valueMap, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws PortalException { return getService().updateCPDefinitionSpecificationOptionValue( externalReferenceCode, cpDefinitionSpecificationOptionValueId, - cpOptionCategoryId, key, priority, valueMap, serviceContext); + cpOptionCategoryId, key, priority, valueMap, visible, + serviceContext); } public static CPDefinitionSpecificationOptionValueService getService() { diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueServiceWrapper.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueServiceWrapper.java index 64e861e535d031..b82745223741e7 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueServiceWrapper.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueServiceWrapper.java @@ -38,13 +38,15 @@ public CPDefinitionSpecificationOptionValueServiceWrapper( long cpSpecificationOptionId, long cpOptionCategoryId, double priority, java.util.Map valueMap, + boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { return _cpDefinitionSpecificationOptionValueService. addCPDefinitionSpecificationOptionValue( externalReferenceCode, cpDefinitionId, cpSpecificationOptionId, - cpOptionCategoryId, priority, valueMap, serviceContext); + cpOptionCategoryId, priority, valueMap, visible, + serviceContext); } @Override @@ -112,34 +114,35 @@ public void deleteCPDefinitionSpecificationOptionValues(long cpDefinitionId) @Override public java.util.List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, int start, int end, + long cpDefinitionId, Boolean visible, int start, int end, com.liferay.portal.kernel.util.OrderByComparator orderByComparator) throws com.liferay.portal.kernel.exception.PortalException { return _cpDefinitionSpecificationOptionValueService. getCPDefinitionSpecificationOptionValues( - cpDefinitionId, start, end, orderByComparator); + cpDefinitionId, visible, start, end, orderByComparator); } @Override public java.util.List getCPDefinitionSpecificationOptionValues( - long cpDefinitionId, long cpOptionCategoryId) + long cpDefinitionId, long cpOptionCategoryId, Boolean visible) throws com.liferay.portal.kernel.exception.PortalException { return _cpDefinitionSpecificationOptionValueService. getCPDefinitionSpecificationOptionValues( - cpDefinitionId, cpOptionCategoryId); + cpDefinitionId, cpOptionCategoryId, visible); } @Override public int getCPDefinitionSpecificationOptionValuesCount( - long cpDefinitionId) + long cpDefinitionId, Boolean visible) throws com.liferay.portal.kernel.exception.PortalException { return _cpDefinitionSpecificationOptionValueService. - getCPDefinitionSpecificationOptionValuesCount(cpDefinitionId); + getCPDefinitionSpecificationOptionValuesCount( + cpDefinitionId, visible); } /** @@ -160,13 +163,15 @@ public String getOSGiServiceIdentifier() { long cpDefinitionSpecificationOptionValueId, long cpOptionCategoryId, String key, double priority, java.util.Map valueMap, + boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { return _cpDefinitionSpecificationOptionValueService. updateCPDefinitionSpecificationOptionValue( externalReferenceCode, cpDefinitionSpecificationOptionValueId, - cpOptionCategoryId, key, priority, valueMap, serviceContext); + cpOptionCategoryId, key, priority, valueMap, visible, + serviceContext); } @Override diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalService.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalService.java index d51148ea778cd4..17e279f6f89c15 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalService.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalService.java @@ -87,7 +87,7 @@ public CPSpecificationOption addCPSpecificationOption( String externalReferenceCode, long userId, long cpOptionCategoryId, long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, boolean facetable, String key, - double priority, ServiceContext serviceContext) + double priority, boolean visible, ServiceContext serviceContext) throws PortalException; /** @@ -332,8 +332,8 @@ public PersistedModel getPersistedModel(Serializable primaryKeyObj) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public BaseModelSearchResult searchCPSpecificationOptions( - long companyId, Boolean facetable, String keywords, int start, - int end, Sort sort) + long companyId, Boolean facetable, Boolean visible, + String keywords, int start, int end, Sort sort) throws PortalException; public CPSpecificationOption updateCPOptionCategoryId( @@ -359,7 +359,7 @@ public CPSpecificationOption updateCPSpecificationOption( String externalReferenceCode, long cpSpecificationOptionId, long cpOptionCategoryId, long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, - boolean facetable, String key, double priority, + boolean facetable, String key, double priority, boolean visible, ServiceContext serviceContext) throws PortalException; diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalServiceUtil.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalServiceUtil.java index 8a27d4838c1c7d..c27c1536d1ea32 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalServiceUtil.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalServiceUtil.java @@ -59,14 +59,14 @@ public static CPSpecificationOption addCPSpecificationOption( long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, boolean facetable, - String key, double priority, + String key, double priority, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws PortalException { return getService().addCPSpecificationOption( externalReferenceCode, userId, cpOptionCategoryId, listTypeDefinitionIds, titleMap, descriptionMap, facetable, key, - priority, serviceContext); + priority, visible, serviceContext); } /** @@ -379,12 +379,13 @@ public static PersistedModel getPersistedModel(Serializable primaryKeyObj) public static com.liferay.portal.kernel.search.BaseModelSearchResult searchCPSpecificationOptions( - long companyId, Boolean facetable, String keywords, int start, - int end, com.liferay.portal.kernel.search.Sort sort) + long companyId, Boolean facetable, Boolean visible, + String keywords, int start, int end, + com.liferay.portal.kernel.search.Sort sort) throws PortalException { return getService().searchCPSpecificationOptions( - companyId, facetable, keywords, start, end, sort); + companyId, facetable, visible, keywords, start, end, sort); } public static CPSpecificationOption updateCPOptionCategoryId( @@ -416,14 +417,14 @@ public static CPSpecificationOption updateCPSpecificationOption( long cpOptionCategoryId, long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, boolean facetable, - String key, double priority, + String key, double priority, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws PortalException { return getService().updateCPSpecificationOption( externalReferenceCode, cpSpecificationOptionId, cpOptionCategoryId, listTypeDefinitionIds, titleMap, descriptionMap, facetable, key, - priority, serviceContext); + priority, visible, serviceContext); } public static CPSpecificationOptionLocalService getService() { diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalServiceWrapper.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalServiceWrapper.java index 75eb95bf8a4ab0..5011b3cda4b007 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalServiceWrapper.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionLocalServiceWrapper.java @@ -56,14 +56,14 @@ public CPSpecificationOption addCPSpecificationOption( long[] listTypeDefinitionIds, java.util.Map titleMap, java.util.Map descriptionMap, - boolean facetable, String key, double priority, + boolean facetable, String key, double priority, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { return _cpSpecificationOptionLocalService.addCPSpecificationOption( externalReferenceCode, userId, cpOptionCategoryId, listTypeDefinitionIds, titleMap, descriptionMap, facetable, key, - priority, serviceContext); + priority, visible, serviceContext); } /** @@ -430,12 +430,13 @@ public com.liferay.portal.kernel.model.PersistedModel getPersistedModel( @Override public com.liferay.portal.kernel.search.BaseModelSearchResult searchCPSpecificationOptions( - long companyId, Boolean facetable, String keywords, int start, - int end, com.liferay.portal.kernel.search.Sort sort) + long companyId, Boolean facetable, Boolean visible, + String keywords, int start, int end, + com.liferay.portal.kernel.search.Sort sort) throws com.liferay.portal.kernel.exception.PortalException { return _cpSpecificationOptionLocalService.searchCPSpecificationOptions( - companyId, facetable, keywords, start, end, sort); + companyId, facetable, visible, keywords, start, end, sort); } @Override @@ -471,14 +472,14 @@ public CPSpecificationOption updateCPSpecificationOption( long cpOptionCategoryId, long[] listTypeDefinitionIds, java.util.Map titleMap, java.util.Map descriptionMap, - boolean facetable, String key, double priority, + boolean facetable, String key, double priority, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { return _cpSpecificationOptionLocalService.updateCPSpecificationOption( externalReferenceCode, cpSpecificationOptionId, cpOptionCategoryId, listTypeDefinitionIds, titleMap, descriptionMap, facetable, key, - priority, serviceContext); + priority, visible, serviceContext); } @Override diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionService.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionService.java index 3904bf7a972bd2..93e6226ebed685 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionService.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionService.java @@ -52,7 +52,7 @@ public CPSpecificationOption addCPSpecificationOption( String externalReferenceCode, long cpOptionCategoryId, long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, boolean facetable, String key, - double priority, ServiceContext serviceContext) + double priority, boolean visible, ServiceContext serviceContext) throws PortalException; public void deleteCPSpecificationOption(long cpSpecificationOptionId) @@ -89,15 +89,15 @@ public CPSpecificationOption getCPSpecificationOption( @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public BaseModelSearchResult searchCPSpecificationOptions( - long companyId, Boolean facetable, String keywords, int start, - int end, Sort sort) + long companyId, Boolean facetable, Boolean visible, + String keywords, int start, int end, Sort sort) throws PortalException; public CPSpecificationOption updateCPSpecificationOption( String externalReferenceCode, long cpSpecificationOptionId, long cpOptionCategoryId, long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, - boolean facetable, String key, double priority, + boolean facetable, String key, double priority, boolean visible, ServiceContext serviceContext) throws PortalException; diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionServiceUtil.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionServiceUtil.java index 839098372e0a98..039c9e4ca2a773 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionServiceUtil.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionServiceUtil.java @@ -35,13 +35,14 @@ public static CPSpecificationOption addCPSpecificationOption( long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, boolean facetable, - String key, double priority, + String key, double priority, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws PortalException { return getService().addCPSpecificationOption( externalReferenceCode, cpOptionCategoryId, listTypeDefinitionIds, - titleMap, descriptionMap, facetable, key, priority, serviceContext); + titleMap, descriptionMap, facetable, key, priority, visible, + serviceContext); } public static void deleteCPSpecificationOption(long cpSpecificationOptionId) @@ -91,12 +92,13 @@ public static String getOSGiServiceIdentifier() { public static com.liferay.portal.kernel.search.BaseModelSearchResult searchCPSpecificationOptions( - long companyId, Boolean facetable, String keywords, int start, - int end, com.liferay.portal.kernel.search.Sort sort) + long companyId, Boolean facetable, Boolean visible, + String keywords, int start, int end, + com.liferay.portal.kernel.search.Sort sort) throws PortalException { return getService().searchCPSpecificationOptions( - companyId, facetable, keywords, start, end, sort); + companyId, facetable, visible, keywords, start, end, sort); } public static CPSpecificationOption updateCPSpecificationOption( @@ -104,14 +106,14 @@ public static CPSpecificationOption updateCPSpecificationOption( long cpOptionCategoryId, long[] listTypeDefinitionIds, Map titleMap, Map descriptionMap, boolean facetable, - String key, double priority, + String key, double priority, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws PortalException { return getService().updateCPSpecificationOption( externalReferenceCode, cpSpecificationOptionId, cpOptionCategoryId, listTypeDefinitionIds, titleMap, descriptionMap, facetable, key, - priority, serviceContext); + priority, visible, serviceContext); } public static CPSpecificationOptionService getService() { diff --git a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionServiceWrapper.java b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionServiceWrapper.java index 1ee11714b9cd17..0a1f06050dbf91 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionServiceWrapper.java +++ b/modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionServiceWrapper.java @@ -35,13 +35,14 @@ public CPSpecificationOption addCPSpecificationOption( long[] listTypeDefinitionIds, java.util.Map titleMap, java.util.Map descriptionMap, - boolean facetable, String key, double priority, + boolean facetable, String key, double priority, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { return _cpSpecificationOptionService.addCPSpecificationOption( externalReferenceCode, cpOptionCategoryId, listTypeDefinitionIds, - titleMap, descriptionMap, facetable, key, priority, serviceContext); + titleMap, descriptionMap, facetable, key, priority, visible, + serviceContext); } @Override @@ -103,12 +104,13 @@ public String getOSGiServiceIdentifier() { @Override public com.liferay.portal.kernel.search.BaseModelSearchResult searchCPSpecificationOptions( - long companyId, Boolean facetable, String keywords, int start, - int end, com.liferay.portal.kernel.search.Sort sort) + long companyId, Boolean facetable, Boolean visible, + String keywords, int start, int end, + com.liferay.portal.kernel.search.Sort sort) throws com.liferay.portal.kernel.exception.PortalException { return _cpSpecificationOptionService.searchCPSpecificationOptions( - companyId, facetable, keywords, start, end, sort); + companyId, facetable, visible, keywords, start, end, sort); } @Override @@ -117,14 +119,14 @@ public CPSpecificationOption updateCPSpecificationOption( long cpOptionCategoryId, long[] listTypeDefinitionIds, java.util.Map titleMap, java.util.Map descriptionMap, - boolean facetable, String key, double priority, + boolean facetable, String key, double priority, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { return _cpSpecificationOptionService.updateCPSpecificationOption( externalReferenceCode, cpSpecificationOptionId, cpOptionCategoryId, listTypeDefinitionIds, titleMap, descriptionMap, facetable, key, - priority, serviceContext); + priority, visible, serviceContext); } @Override diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionSpecificationOptionValueCacheModel.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionSpecificationOptionValueCacheModel.java index 2aa0401ba8e44c..3b7e8c9cbd305e 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionSpecificationOptionValueCacheModel.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionSpecificationOptionValueCacheModel.java @@ -75,7 +75,7 @@ public void setMvccVersion(long mvccVersion) { @Override public String toString() { - StringBundler sb = new StringBundler(37); + StringBundler sb = new StringBundler(39); sb.append("{mvccVersion="); sb.append(mvccVersion); @@ -111,6 +111,8 @@ public String toString() { sb.append(priority); sb.append(", value="); sb.append(value); + sb.append(", visible="); + sb.append(visible); sb.append(", lastPublishDate="); sb.append(lastPublishDate); sb.append("}"); @@ -197,6 +199,8 @@ public CPDefinitionSpecificationOptionValue toEntityModel() { cpDefinitionSpecificationOptionValueImpl.setValue(value); } + cpDefinitionSpecificationOptionValueImpl.setVisible(visible); + if (lastPublishDate == Long.MIN_VALUE) { cpDefinitionSpecificationOptionValueImpl.setLastPublishDate(null); } @@ -238,6 +242,8 @@ public void readExternal(ObjectInput objectInput) throws IOException { priority = objectInput.readDouble(); value = objectInput.readUTF(); + + visible = objectInput.readBoolean(); lastPublishDate = objectInput.readLong(); } @@ -301,6 +307,7 @@ public void writeExternal(ObjectOutput objectOutput) throws IOException { objectOutput.writeUTF(value); } + objectOutput.writeBoolean(visible); objectOutput.writeLong(lastPublishDate); } @@ -321,6 +328,7 @@ public void writeExternal(ObjectOutput objectOutput) throws IOException { public String key; public double priority; public String value; + public boolean visible; public long lastPublishDate; } \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionSpecificationOptionValueModelImpl.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionSpecificationOptionValueModelImpl.java index ebfdf7292e62ea..a354ecb1ebfe3f 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionSpecificationOptionValueModelImpl.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPDefinitionSpecificationOptionValueModelImpl.java @@ -82,7 +82,7 @@ public class CPDefinitionSpecificationOptionValueModelImpl {"CPSpecificationOptionId", Types.BIGINT}, {"CPOptionCategoryId", Types.BIGINT}, {"key_", Types.VARCHAR}, {"priority", Types.DOUBLE}, {"value", Types.VARCHAR}, - {"lastPublishDate", Types.TIMESTAMP} + {"visible", Types.BOOLEAN}, {"lastPublishDate", Types.TIMESTAMP} }; public static final Map TABLE_COLUMNS_MAP = @@ -106,11 +106,12 @@ public class CPDefinitionSpecificationOptionValueModelImpl TABLE_COLUMNS_MAP.put("key_", Types.VARCHAR); TABLE_COLUMNS_MAP.put("priority", Types.DOUBLE); TABLE_COLUMNS_MAP.put("value", Types.VARCHAR); + TABLE_COLUMNS_MAP.put("visible", Types.BOOLEAN); TABLE_COLUMNS_MAP.put("lastPublishDate", Types.TIMESTAMP); } public static final String TABLE_SQL_CREATE = - "create table CPDSpecificationOptionValue (mvccVersion LONG default 0 not null,ctCollectionId LONG default 0 not null,uuid_ VARCHAR(75) null,externalReferenceCode VARCHAR(75) null,CPDSpecificationOptionValueId LONG not null,groupId LONG,companyId LONG,userId LONG,userName VARCHAR(75) null,createDate DATE null,modifiedDate DATE null,CPDefinitionId LONG,CPSpecificationOptionId LONG,CPOptionCategoryId LONG,key_ VARCHAR(75) null,priority DOUBLE,value STRING null,lastPublishDate DATE null,primary key (CPDSpecificationOptionValueId, ctCollectionId))"; + "create table CPDSpecificationOptionValue (mvccVersion LONG default 0 not null,ctCollectionId LONG default 0 not null,uuid_ VARCHAR(75) null,externalReferenceCode VARCHAR(75) null,CPDSpecificationOptionValueId LONG not null,groupId LONG,companyId LONG,userId LONG,userName VARCHAR(75) null,createDate DATE null,modifiedDate DATE null,CPDefinitionId LONG,CPSpecificationOptionId LONG,CPOptionCategoryId LONG,key_ VARCHAR(75) null,priority DOUBLE,value STRING null,visible BOOLEAN,lastPublishDate DATE null,primary key (CPDSpecificationOptionValueId, ctCollectionId))"; public static final String TABLE_SQL_DROP = "drop table CPDSpecificationOptionValue"; @@ -352,6 +353,8 @@ private static class AttributeGetterFunctionsHolder { "priority", CPDefinitionSpecificationOptionValue::getPriority); attributeGetterFunctions.put( "value", CPDefinitionSpecificationOptionValue::getValue); + attributeGetterFunctions.put( + "visible", CPDefinitionSpecificationOptionValue::getVisible); attributeGetterFunctions.put( "lastPublishDate", CPDefinitionSpecificationOptionValue::getLastPublishDate); @@ -447,6 +450,10 @@ private static class AttributeSetterBiConsumersHolder { "value", (BiConsumer) CPDefinitionSpecificationOptionValue::setValue); + attributeSetterBiConsumers.put( + "visible", + (BiConsumer) + CPDefinitionSpecificationOptionValue::setVisible); attributeSetterBiConsumers.put( "lastPublishDate", (BiConsumer) @@ -938,6 +945,27 @@ valueMap, getValue(), "Value", LocaleUtil.toLanguageId(defaultLocale))); } + @JSON + @Override + public boolean getVisible() { + return _visible; + } + + @JSON + @Override + public boolean isVisible() { + return _visible; + } + + @Override + public void setVisible(boolean visible) { + if (_columnOriginalValues == Collections.EMPTY_MAP) { + _setColumnOriginalValues(); + } + + _visible = visible; + } + @JSON @Override public Date getLastPublishDate() { @@ -1112,6 +1140,7 @@ public Object clone() { cpDefinitionSpecificationOptionValueImpl.setKey(getKey()); cpDefinitionSpecificationOptionValueImpl.setPriority(getPriority()); cpDefinitionSpecificationOptionValueImpl.setValue(getValue()); + cpDefinitionSpecificationOptionValueImpl.setVisible(isVisible()); cpDefinitionSpecificationOptionValueImpl.setLastPublishDate( getLastPublishDate()); @@ -1162,6 +1191,8 @@ public CPDefinitionSpecificationOptionValue cloneWithOriginalValues() { this.getColumnOriginalValue("priority")); cpDefinitionSpecificationOptionValueImpl.setValue( this.getColumnOriginalValue("value")); + cpDefinitionSpecificationOptionValueImpl.setVisible( + this.getColumnOriginalValue("visible")); cpDefinitionSpecificationOptionValueImpl.setLastPublishDate( this.getColumnOriginalValue("lastPublishDate")); @@ -1355,6 +1386,8 @@ public CacheModel toCacheModel() { cpDefinitionSpecificationOptionValueCacheModel.value = null; } + cpDefinitionSpecificationOptionValueCacheModel.visible = isVisible(); + Date lastPublishDate = getLastPublishDate(); if (lastPublishDate != null) { @@ -1450,6 +1483,7 @@ private static class EscapedModelProxyProviderFunctionHolder { private double _priority; private String _value; private String _valueCurrentLanguageId; + private boolean _visible; private Date _lastPublishDate; public T getColumnValue(String columnName) { @@ -1503,6 +1537,7 @@ private void _setColumnOriginalValues() { _columnOriginalValues.put("key_", _key); _columnOriginalValues.put("priority", _priority); _columnOriginalValues.put("value", _value); + _columnOriginalValues.put("visible", _visible); _columnOriginalValues.put("lastPublishDate", _lastPublishDate); } @@ -1565,7 +1600,9 @@ public static long getColumnBitmask(String columnName) { columnBitmasks.put("value", 65536L); - columnBitmasks.put("lastPublishDate", 131072L); + columnBitmasks.put("visible", 131072L); + + columnBitmasks.put("lastPublishDate", 262144L); _columnBitmasks = Collections.unmodifiableMap(columnBitmasks); } diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPSpecificationOptionCacheModel.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPSpecificationOptionCacheModel.java index cfe9daa0ed223e..be5ca0a99ba144 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPSpecificationOptionCacheModel.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPSpecificationOptionCacheModel.java @@ -69,7 +69,7 @@ public void setMvccVersion(long mvccVersion) { @Override public String toString() { - StringBundler sb = new StringBundler(35); + StringBundler sb = new StringBundler(37); sb.append("{mvccVersion="); sb.append(mvccVersion); @@ -103,6 +103,8 @@ public String toString() { sb.append(key); sb.append(", priority="); sb.append(priority); + sb.append(", visible="); + sb.append(visible); sb.append(", lastPublishDate="); sb.append(lastPublishDate); sb.append("}"); @@ -185,6 +187,7 @@ public CPSpecificationOption toEntityModel() { } cpSpecificationOptionImpl.setPriority(priority); + cpSpecificationOptionImpl.setVisible(visible); if (lastPublishDate == Long.MIN_VALUE) { cpSpecificationOptionImpl.setLastPublishDate(null); @@ -224,6 +227,8 @@ public void readExternal(ObjectInput objectInput) throws IOException { key = objectInput.readUTF(); priority = objectInput.readDouble(); + + visible = objectInput.readBoolean(); lastPublishDate = objectInput.readLong(); } @@ -289,6 +294,8 @@ public void writeExternal(ObjectOutput objectOutput) throws IOException { } objectOutput.writeDouble(priority); + + objectOutput.writeBoolean(visible); objectOutput.writeLong(lastPublishDate); } @@ -308,6 +315,7 @@ public void writeExternal(ObjectOutput objectOutput) throws IOException { public boolean facetable; public String key; public double priority; + public boolean visible; public long lastPublishDate; } \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPSpecificationOptionModelImpl.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPSpecificationOptionModelImpl.java index 758e9fa6fe8b05..a60b7850a0b269 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPSpecificationOptionModelImpl.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/model/impl/CPSpecificationOptionModelImpl.java @@ -80,7 +80,7 @@ public class CPSpecificationOptionModelImpl {"CPOptionCategoryId", Types.BIGINT}, {"title", Types.VARCHAR}, {"description", Types.VARCHAR}, {"facetable", Types.BOOLEAN}, {"key_", Types.VARCHAR}, {"priority", Types.DOUBLE}, - {"lastPublishDate", Types.TIMESTAMP} + {"visible", Types.BOOLEAN}, {"lastPublishDate", Types.TIMESTAMP} }; public static final Map TABLE_COLUMNS_MAP = @@ -103,11 +103,12 @@ public class CPSpecificationOptionModelImpl TABLE_COLUMNS_MAP.put("facetable", Types.BOOLEAN); TABLE_COLUMNS_MAP.put("key_", Types.VARCHAR); TABLE_COLUMNS_MAP.put("priority", Types.DOUBLE); + TABLE_COLUMNS_MAP.put("visible", Types.BOOLEAN); TABLE_COLUMNS_MAP.put("lastPublishDate", Types.TIMESTAMP); } public static final String TABLE_SQL_CREATE = - "create table CPSpecificationOption (mvccVersion LONG default 0 not null,ctCollectionId LONG default 0 not null,uuid_ VARCHAR(75) null,externalReferenceCode VARCHAR(75) null,CPSpecificationOptionId LONG not null,companyId LONG,userId LONG,userName VARCHAR(75) null,createDate DATE null,modifiedDate DATE null,CPOptionCategoryId LONG,title STRING null,description STRING null,facetable BOOLEAN,key_ VARCHAR(75) null,priority DOUBLE,lastPublishDate DATE null,primary key (CPSpecificationOptionId, ctCollectionId))"; + "create table CPSpecificationOption (mvccVersion LONG default 0 not null,ctCollectionId LONG default 0 not null,uuid_ VARCHAR(75) null,externalReferenceCode VARCHAR(75) null,CPSpecificationOptionId LONG not null,companyId LONG,userId LONG,userName VARCHAR(75) null,createDate DATE null,modifiedDate DATE null,CPOptionCategoryId LONG,title STRING null,description STRING null,facetable BOOLEAN,key_ VARCHAR(75) null,priority DOUBLE,visible BOOLEAN,lastPublishDate DATE null,primary key (CPSpecificationOptionId, ctCollectionId))"; public static final String TABLE_SQL_DROP = "drop table CPSpecificationOption"; @@ -310,6 +311,8 @@ private static class AttributeGetterFunctionsHolder { attributeGetterFunctions.put("key", CPSpecificationOption::getKey); attributeGetterFunctions.put( "priority", CPSpecificationOption::getPriority); + attributeGetterFunctions.put( + "visible", CPSpecificationOption::getVisible); attributeGetterFunctions.put( "lastPublishDate", CPSpecificationOption::getLastPublishDate); @@ -395,6 +398,10 @@ private static class AttributeSetterBiConsumersHolder { "priority", (BiConsumer) CPSpecificationOption::setPriority); + attributeSetterBiConsumers.put( + "visible", + (BiConsumer) + CPSpecificationOption::setVisible); attributeSetterBiConsumers.put( "lastPublishDate", (BiConsumer) @@ -932,6 +939,27 @@ public void setPriority(double priority) { _priority = priority; } + @JSON + @Override + public boolean getVisible() { + return _visible; + } + + @JSON + @Override + public boolean isVisible() { + return _visible; + } + + @Override + public void setVisible(boolean visible) { + if (_columnOriginalValues == Collections.EMPTY_MAP) { + _setColumnOriginalValues(); + } + + _visible = visible; + } + @JSON @Override public Date getLastPublishDate() { @@ -1118,6 +1146,7 @@ public Object clone() { cpSpecificationOptionImpl.setFacetable(isFacetable()); cpSpecificationOptionImpl.setKey(getKey()); cpSpecificationOptionImpl.setPriority(getPriority()); + cpSpecificationOptionImpl.setVisible(isVisible()); cpSpecificationOptionImpl.setLastPublishDate(getLastPublishDate()); cpSpecificationOptionImpl.resetOriginalValues(); @@ -1162,6 +1191,8 @@ public CPSpecificationOption cloneWithOriginalValues() { this.getColumnOriginalValue("key_")); cpSpecificationOptionImpl.setPriority( this.getColumnOriginalValue("priority")); + cpSpecificationOptionImpl.setVisible( + this.getColumnOriginalValue("visible")); cpSpecificationOptionImpl.setLastPublishDate( this.getColumnOriginalValue("lastPublishDate")); @@ -1340,6 +1371,8 @@ public CacheModel toCacheModel() { cpSpecificationOptionCacheModel.priority = getPriority(); + cpSpecificationOptionCacheModel.visible = isVisible(); + Date lastPublishDate = getLastPublishDate(); if (lastPublishDate != null) { @@ -1431,6 +1464,7 @@ private static class EscapedModelProxyProviderFunctionHolder { private boolean _facetable; private String _key; private double _priority; + private boolean _visible; private Date _lastPublishDate; public T getColumnValue(String columnName) { @@ -1481,6 +1515,7 @@ private void _setColumnOriginalValues() { _columnOriginalValues.put("facetable", _facetable); _columnOriginalValues.put("key_", _key); _columnOriginalValues.put("priority", _priority); + _columnOriginalValues.put("visible", _visible); _columnOriginalValues.put("lastPublishDate", _lastPublishDate); } @@ -1538,7 +1573,9 @@ public static long getColumnBitmask(String columnName) { columnBitmasks.put("priority", 32768L); - columnBitmasks.put("lastPublishDate", 65536L); + columnBitmasks.put("visible", 65536L); + + columnBitmasks.put("lastPublishDate", 131072L); _columnBitmasks = Collections.unmodifiableMap(columnBitmasks); } diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/http/CPDefinitionSpecificationOptionValueServiceHttp.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/http/CPDefinitionSpecificationOptionValueServiceHttp.java index 8998725148a586..43c90db5bc92a7 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/http/CPDefinitionSpecificationOptionValueServiceHttp.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/http/CPDefinitionSpecificationOptionValueServiceHttp.java @@ -48,6 +48,7 @@ public class CPDefinitionSpecificationOptionValueServiceHttp { long cpDefinitionId, long cpSpecificationOptionId, long cpOptionCategoryId, double priority, java.util.Map valueMap, + boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { @@ -61,7 +62,7 @@ public class CPDefinitionSpecificationOptionValueServiceHttp { MethodHandler methodHandler = new MethodHandler( methodKey, externalReferenceCode, cpDefinitionId, cpSpecificationOptionId, cpOptionCategoryId, priority, valueMap, - serviceContext); + visible, serviceContext); Object returnObj = null; @@ -352,7 +353,7 @@ public static void deleteCPDefinitionSpecificationOptionValues( CPDefinitionSpecificationOptionValue> getCPDefinitionSpecificationOptionValues( HttpPrincipal httpPrincipal, long cpDefinitionId, - int start, int end, + Boolean visible, int start, int end, com.liferay.portal.kernel.util.OrderByComparator @@ -366,7 +367,8 @@ public static void deleteCPDefinitionSpecificationOptionValues( _getCPDefinitionSpecificationOptionValuesParameterTypes7); MethodHandler methodHandler = new MethodHandler( - methodKey, cpDefinitionId, start, end, orderByComparator); + methodKey, cpDefinitionId, visible, start, end, + orderByComparator); Object returnObj = null; @@ -403,7 +405,7 @@ public static void deleteCPDefinitionSpecificationOptionValues( CPDefinitionSpecificationOptionValue> getCPDefinitionSpecificationOptionValues( HttpPrincipal httpPrincipal, long cpDefinitionId, - long cpOptionCategoryId) + long cpOptionCategoryId, Boolean visible) throws com.liferay.portal.kernel.exception.PortalException { try { @@ -413,7 +415,7 @@ public static void deleteCPDefinitionSpecificationOptionValues( _getCPDefinitionSpecificationOptionValuesParameterTypes8); MethodHandler methodHandler = new MethodHandler( - methodKey, cpDefinitionId, cpOptionCategoryId); + methodKey, cpDefinitionId, cpOptionCategoryId, visible); Object returnObj = null; @@ -446,7 +448,7 @@ public static void deleteCPDefinitionSpecificationOptionValues( } public static int getCPDefinitionSpecificationOptionValuesCount( - HttpPrincipal httpPrincipal, long cpDefinitionId) + HttpPrincipal httpPrincipal, long cpDefinitionId, Boolean visible) throws com.liferay.portal.kernel.exception.PortalException { try { @@ -456,7 +458,7 @@ public static int getCPDefinitionSpecificationOptionValuesCount( _getCPDefinitionSpecificationOptionValuesCountParameterTypes9); MethodHandler methodHandler = new MethodHandler( - methodKey, cpDefinitionId); + methodKey, cpDefinitionId, visible); Object returnObj = null; @@ -493,6 +495,7 @@ public static int getCPDefinitionSpecificationOptionValuesCount( long cpDefinitionSpecificationOptionValueId, long cpOptionCategoryId, String key, double priority, java.util.Map valueMap, + boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { @@ -506,7 +509,7 @@ public static int getCPDefinitionSpecificationOptionValuesCount( MethodHandler methodHandler = new MethodHandler( methodKey, externalReferenceCode, cpDefinitionSpecificationOptionValueId, cpOptionCategoryId, key, - priority, valueMap, serviceContext); + priority, valueMap, visible, serviceContext); Object returnObj = null; @@ -543,7 +546,7 @@ public static int getCPDefinitionSpecificationOptionValuesCount( private static final Class[] _addCPDefinitionSpecificationOptionValueParameterTypes0 = new Class[] { String.class, long.class, long.class, long.class, double.class, - java.util.Map.class, + java.util.Map.class, boolean.class, com.liferay.portal.kernel.service.ServiceContext.class }; private static final Class[] @@ -567,21 +570,21 @@ public static int getCPDefinitionSpecificationOptionValuesCount( new Class[] {String.class, long.class}; private static final Class[] _getCPDefinitionSpecificationOptionValuesParameterTypes7 = new Class[] { - long.class, int.class, int.class, + long.class, Boolean.class, int.class, int.class, com.liferay.portal.kernel.util.OrderByComparator.class }; private static final Class[] _getCPDefinitionSpecificationOptionValuesParameterTypes8 = new Class[] { - long.class, long.class + long.class, long.class, Boolean.class }; private static final Class[] _getCPDefinitionSpecificationOptionValuesCountParameterTypes9 = - new Class[] {long.class}; + new Class[] {long.class, Boolean.class}; private static final Class[] _updateCPDefinitionSpecificationOptionValueParameterTypes10 = new Class[] { String.class, long.class, long.class, String.class, - double.class, java.util.Map.class, + double.class, java.util.Map.class, boolean.class, com.liferay.portal.kernel.service.ServiceContext.class }; diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/http/CPSpecificationOptionServiceHttp.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/http/CPSpecificationOptionServiceHttp.java index d51c1852b4dfd2..5ac7f3468d6657 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/http/CPSpecificationOptionServiceHttp.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/http/CPSpecificationOptionServiceHttp.java @@ -47,7 +47,7 @@ public class CPSpecificationOptionServiceHttp { long cpOptionCategoryId, long[] listTypeDefinitionIds, java.util.Map titleMap, java.util.Map descriptionMap, - boolean facetable, String key, double priority, + boolean facetable, String key, double priority, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { @@ -60,7 +60,7 @@ public class CPSpecificationOptionServiceHttp { MethodHandler methodHandler = new MethodHandler( methodKey, externalReferenceCode, cpOptionCategoryId, listTypeDefinitionIds, titleMap, descriptionMap, facetable, key, - priority, serviceContext); + priority, visible, serviceContext); Object returnObj = null; @@ -305,7 +305,8 @@ public static void deleteCPSpecificationOption( searchCPSpecificationOptions( HttpPrincipal httpPrincipal, long companyId, - Boolean facetable, String keywords, int start, int end, + Boolean facetable, Boolean visible, String keywords, + int start, int end, com.liferay.portal.kernel.search.Sort sort) throws com.liferay.portal.kernel.exception.PortalException { @@ -316,7 +317,8 @@ public static void deleteCPSpecificationOption( _searchCPSpecificationOptionsParameterTypes6); MethodHandler methodHandler = new MethodHandler( - methodKey, companyId, facetable, keywords, start, end, sort); + methodKey, companyId, facetable, visible, keywords, start, end, + sort); Object returnObj = null; @@ -355,7 +357,7 @@ public static void deleteCPSpecificationOption( long[] listTypeDefinitionIds, java.util.Map titleMap, java.util.Map descriptionMap, - boolean facetable, String key, double priority, + boolean facetable, String key, double priority, boolean visible, com.liferay.portal.kernel.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException { @@ -368,7 +370,8 @@ public static void deleteCPSpecificationOption( MethodHandler methodHandler = new MethodHandler( methodKey, externalReferenceCode, cpSpecificationOptionId, cpOptionCategoryId, listTypeDefinitionIds, titleMap, - descriptionMap, facetable, key, priority, serviceContext); + descriptionMap, facetable, key, priority, visible, + serviceContext); Object returnObj = null; @@ -406,6 +409,7 @@ public static void deleteCPSpecificationOption( new Class[] { String.class, long.class, long[].class, java.util.Map.class, java.util.Map.class, boolean.class, String.class, double.class, + boolean.class, com.liferay.portal.kernel.service.ServiceContext.class }; private static final Class[] @@ -421,14 +425,14 @@ public static void deleteCPSpecificationOption( new Class[] {long.class, String.class}; private static final Class[] _searchCPSpecificationOptionsParameterTypes6 = new Class[] { - long.class, Boolean.class, String.class, int.class, int.class, - com.liferay.portal.kernel.search.Sort.class + long.class, Boolean.class, Boolean.class, String.class, int.class, + int.class, com.liferay.portal.kernel.search.Sort.class }; private static final Class[] _updateCPSpecificationOptionParameterTypes7 = new Class[] { String.class, long.class, long.class, long[].class, java.util.Map.class, java.util.Map.class, boolean.class, - String.class, double.class, + String.class, double.class, boolean.class, com.liferay.portal.kernel.service.ServiceContext.class }; diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/persistence/impl/CPDefinitionSpecificationOptionValuePersistenceImpl.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/persistence/impl/CPDefinitionSpecificationOptionValuePersistenceImpl.java index 9e70e1fd5ca16c..f552e0941e3677 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/persistence/impl/CPDefinitionSpecificationOptionValuePersistenceImpl.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/persistence/impl/CPDefinitionSpecificationOptionValuePersistenceImpl.java @@ -6698,6 +6698,7 @@ public List getUniqueIndexColumnNames() { ctMergeColumnNames.add("key_"); ctMergeColumnNames.add("priority"); ctMergeColumnNames.add("value"); + ctMergeColumnNames.add("visible"); ctMergeColumnNames.add("lastPublishDate"); _ctColumnNamesMap.put( diff --git a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/persistence/impl/CPSpecificationOptionPersistenceImpl.java b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/persistence/impl/CPSpecificationOptionPersistenceImpl.java index 8a0bb40e29ba41..3046545886ddb1 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/persistence/impl/CPSpecificationOptionPersistenceImpl.java +++ b/modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/persistence/impl/CPSpecificationOptionPersistenceImpl.java @@ -5335,6 +5335,7 @@ public List getUniqueIndexColumnNames() { ctMergeColumnNames.add("facetable"); ctMergeColumnNames.add("key_"); ctMergeColumnNames.add("priority"); + ctMergeColumnNames.add("visible"); ctMergeColumnNames.add("lastPublishDate"); _ctColumnNamesMap.put( diff --git a/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/module-hbm.xml b/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/module-hbm.xml index da1dbaf4019449..1edd8d06d41424 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/module-hbm.xml +++ b/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/module-hbm.xml @@ -400,6 +400,7 @@ + @@ -631,6 +632,7 @@ + diff --git a/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/portlet-model-hints.xml b/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/portlet-model-hints.xml index 5ee555d603075c..5df27cd16753c6 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/portlet-model-hints.xml +++ b/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/portlet-model-hints.xml @@ -414,6 +414,7 @@ + @@ -691,6 +692,7 @@ + diff --git a/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/sql/tables.sql b/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/sql/tables.sql index b247bd144d704e..71810397999e3a 100644 --- a/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/sql/tables.sql +++ b/modules/apps/commerce/commerce-product-service/src/main/resources/META-INF/sql/tables.sql @@ -166,6 +166,7 @@ create table CPDSpecificationOptionValue ( key_ VARCHAR(75) null, priority DOUBLE, value STRING null, + visible BOOLEAN, lastPublishDate DATE null, primary key (CPDSpecificationOptionValueId, ctCollectionId) ); @@ -535,6 +536,7 @@ create table CPSpecificationOption ( facetable BOOLEAN, key_ VARCHAR(75) null, priority DOUBLE, + visible BOOLEAN, lastPublishDate DATE null, primary key (CPSpecificationOptionId, ctCollectionId) ); From 5897d2802b158f333bef7933d4f318e1f24e7628 Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 15:44:06 +0100 Subject: [PATCH 17/18] LPD-48103 Regen REST module --- .../dto/v1_0/ProductSpecification.java | 53 +++++++++++++++++++ .../admin/catalog/dto/v1_0/Specification.java | 53 +++++++++++++++++++ .../client/dto/v1_0/ProductSpecification.java | 21 ++++++++ .../client/dto/v1_0/Specification.java | 21 ++++++++ .../v1_0/ProductSpecificationSerDes.java | 27 ++++++++++ .../serdes/v1_0/SpecificationSerDes.java | 25 +++++++++ .../internal/graphql/query/v1_0/Query.java | 8 +-- .../BaseProductSpecificationResourceImpl.java | 8 +-- .../v1_0/BaseSpecificationResourceImpl.java | 12 +++-- ...eProductSpecificationResourceTestCase.java | 25 +++++++++ .../BaseSpecificationResourceTestCase.java | 25 +++++++++ 11 files changed, 266 insertions(+), 12 deletions(-) diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/java/com/liferay/headless/commerce/admin/catalog/dto/v1_0/ProductSpecification.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/java/com/liferay/headless/commerce/admin/catalog/dto/v1_0/ProductSpecification.java index 56027f3575f711..6274c444211bb7 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/java/com/liferay/headless/commerce/admin/catalog/dto/v1_0/ProductSpecification.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/java/com/liferay/headless/commerce/admin/catalog/dto/v1_0/ProductSpecification.java @@ -603,6 +603,47 @@ public void setValue( @JsonIgnore private Supplier> _valueSupplier; + @Schema(example = "true") + public Boolean getVisible() { + if (_visibleSupplier != null) { + visible = _visibleSupplier.get(); + + _visibleSupplier = null; + } + + return visible; + } + + public void setVisible(Boolean visible) { + this.visible = visible; + + _visibleSupplier = null; + } + + @JsonIgnore + public void setVisible( + UnsafeSupplier visibleUnsafeSupplier) { + + _visibleSupplier = () -> { + try { + return visibleUnsafeSupplier.get(); + } + catch (RuntimeException runtimeException) { + throw runtimeException; + } + catch (Exception exception) { + throw new RuntimeException(exception); + } + }; + } + + @GraphQLField + @JsonProperty(access = JsonProperty.Access.READ_WRITE) + protected Boolean visible; + + @JsonIgnore + private Supplier _visibleSupplier; + @Override public boolean equals(Object object) { if (this == object) { @@ -809,6 +850,18 @@ public String toString() { sb.append(_toJSON(value)); } + Boolean visible = getVisible(); + + if (visible != null) { + if (sb.length() > 1) { + sb.append(", "); + } + + sb.append("\"visible\": "); + + sb.append(visible); + } + sb.append("}"); return sb.toString(); diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/java/com/liferay/headless/commerce/admin/catalog/dto/v1_0/Specification.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/java/com/liferay/headless/commerce/admin/catalog/dto/v1_0/Specification.java index 3f665957128620..46321fb2a8b333 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/java/com/liferay/headless/commerce/admin/catalog/dto/v1_0/Specification.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/java/com/liferay/headless/commerce/admin/catalog/dto/v1_0/Specification.java @@ -470,6 +470,47 @@ public void setTitle( @JsonIgnore private Supplier> _titleSupplier; + @Schema(example = "true") + public Boolean getVisible() { + if (_visibleSupplier != null) { + visible = _visibleSupplier.get(); + + _visibleSupplier = null; + } + + return visible; + } + + public void setVisible(Boolean visible) { + this.visible = visible; + + _visibleSupplier = null; + } + + @JsonIgnore + public void setVisible( + UnsafeSupplier visibleUnsafeSupplier) { + + _visibleSupplier = () -> { + try { + return visibleUnsafeSupplier.get(); + } + catch (RuntimeException runtimeException) { + throw runtimeException; + } + catch (Exception exception) { + throw new RuntimeException(exception); + } + }; + } + + @GraphQLField + @JsonProperty(access = JsonProperty.Access.READ_WRITE) + protected Boolean visible; + + @JsonIgnore + private Supplier _visibleSupplier; + @Override public boolean equals(Object object) { if (this == object) { @@ -635,6 +676,18 @@ public String toString() { sb.append(_toJSON(title)); } + Boolean visible = getVisible(); + + if (visible != null) { + if (sb.length() > 1) { + sb.append(", "); + } + + sb.append("\"visible\": "); + + sb.append(visible); + } + sb.append("}"); return sb.toString(); diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/dto/v1_0/ProductSpecification.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/dto/v1_0/ProductSpecification.java index 29e3c03fd2c18c..34ae2f36650d28 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/dto/v1_0/ProductSpecification.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/dto/v1_0/ProductSpecification.java @@ -305,6 +305,27 @@ public void setValue( protected Map value; + public Boolean getVisible() { + return visible; + } + + public void setVisible(Boolean visible) { + this.visible = visible; + } + + public void setVisible( + UnsafeSupplier visibleUnsafeSupplier) { + + try { + visible = visibleUnsafeSupplier.get(); + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + + protected Boolean visible; + @Override public ProductSpecification clone() throws CloneNotSupportedException { return (ProductSpecification)super.clone(); diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/dto/v1_0/Specification.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/dto/v1_0/Specification.java index e1d02ed11a186d..37543334017d24 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/dto/v1_0/Specification.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/dto/v1_0/Specification.java @@ -234,6 +234,27 @@ public void setTitle( protected Map title; + public Boolean getVisible() { + return visible; + } + + public void setVisible(Boolean visible) { + this.visible = visible; + } + + public void setVisible( + UnsafeSupplier visibleUnsafeSupplier) { + + try { + visible = visibleUnsafeSupplier.get(); + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + + protected Boolean visible; + @Override public Specification clone() throws CloneNotSupportedException { return (Specification)super.clone(); diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/serdes/v1_0/ProductSpecificationSerDes.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/serdes/v1_0/ProductSpecificationSerDes.java index 7eb3857f67995d..6e0c40db1c6c94 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/serdes/v1_0/ProductSpecificationSerDes.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/serdes/v1_0/ProductSpecificationSerDes.java @@ -206,6 +206,16 @@ public static String toJSON(ProductSpecification productSpecification) { sb.append(_toJSON(productSpecification.getValue())); } + if (productSpecification.getVisible() != null) { + if (sb.length() > 1) { + sb.append(", "); + } + + sb.append("\"visible\": "); + + sb.append(productSpecification.getVisible()); + } + sb.append("}"); return sb.toString(); @@ -345,6 +355,14 @@ public static Map toMap( map.put("value", String.valueOf(productSpecification.getValue())); } + if (productSpecification.getVisible() == null) { + map.put("visible", null); + } + else { + map.put( + "visible", String.valueOf(productSpecification.getVisible())); + } + return map; } @@ -410,6 +428,9 @@ else if (Objects.equals( else if (Objects.equals(jsonParserFieldName, "value")) { return true; } + else if (Objects.equals(jsonParserFieldName, "visible")) { + return false; + } return false; } @@ -504,6 +525,12 @@ else if (Objects.equals(jsonParserFieldName, "value")) { (Map)jsonParserFieldValue); } } + else if (Objects.equals(jsonParserFieldName, "visible")) { + if (jsonParserFieldValue != null) { + productSpecification.setVisible( + (Boolean)jsonParserFieldValue); + } + } } } diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/serdes/v1_0/SpecificationSerDes.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/serdes/v1_0/SpecificationSerDes.java index a5d01ee0f75cd0..a9da020e470f6a 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/serdes/v1_0/SpecificationSerDes.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-client/src/main/java/com/liferay/headless/commerce/admin/catalog/client/serdes/v1_0/SpecificationSerDes.java @@ -166,6 +166,16 @@ public static String toJSON(Specification specification) { sb.append(_toJSON(specification.getTitle())); } + if (specification.getVisible() != null) { + if (sb.length() > 1) { + sb.append(", "); + } + + sb.append("\"visible\": "); + + sb.append(specification.getVisible()); + } + sb.append("}"); return sb.toString(); @@ -264,6 +274,13 @@ public static Map toMap(Specification specification) { map.put("title", String.valueOf(specification.getTitle())); } + if (specification.getVisible() == null) { + map.put("visible", null); + } + else { + map.put("visible", String.valueOf(specification.getVisible())); + } + return map; } @@ -318,6 +335,9 @@ else if (Objects.equals(jsonParserFieldName, "priority")) { else if (Objects.equals(jsonParserFieldName, "title")) { return true; } + else if (Objects.equals(jsonParserFieldName, "visible")) { + return false; + } return false; } @@ -392,6 +412,11 @@ else if (Objects.equals(jsonParserFieldName, "title")) { (Map)jsonParserFieldValue); } } + else if (Objects.equals(jsonParserFieldName, "visible")) { + if (jsonParserFieldValue != null) { + specification.setVisible((Boolean)jsonParserFieldValue); + } + } } } diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/graphql/query/v1_0/Query.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/graphql/query/v1_0/Query.java index 9342c58864eaa9..5869dba2ac3611 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/graphql/query/v1_0/Query.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/graphql/query/v1_0/Query.java @@ -2079,7 +2079,7 @@ public ProductShippingConfiguration productIdShippingConfiguration( /** * Invoke this method with the command line: * - * curl -H 'Content-Type: text/plain; charset=utf-8' -X 'POST' 'http://localhost:8080/o/graphql' -d $'{"query": "query {productSpecificationByExternalReferenceCode(externalReferenceCode: ___){externalReferenceCode, id, key, label, optionCategoryExternalReferenceCode, optionCategoryId, priority, productId, specificationExternalReferenceCode, specificationId, specificationKey, specificationPriority, value}}"}' -u 'test@liferay.com:test' + * curl -H 'Content-Type: text/plain; charset=utf-8' -X 'POST' 'http://localhost:8080/o/graphql' -d $'{"query": "query {productSpecificationByExternalReferenceCode(externalReferenceCode: ___){externalReferenceCode, id, key, label, optionCategoryExternalReferenceCode, optionCategoryId, priority, productId, specificationExternalReferenceCode, specificationId, specificationKey, specificationPriority, value, visible}}"}' -u 'test@liferay.com:test' */ @GraphQLField public ProductSpecification productSpecificationByExternalReferenceCode( @@ -2098,7 +2098,7 @@ public ProductSpecification productSpecificationByExternalReferenceCode( /** * Invoke this method with the command line: * - * curl -H 'Content-Type: text/plain; charset=utf-8' -X 'POST' 'http://localhost:8080/o/graphql' -d $'{"query": "query {productSpecification(id: ___){externalReferenceCode, id, key, label, optionCategoryExternalReferenceCode, optionCategoryId, priority, productId, specificationExternalReferenceCode, specificationId, specificationKey, specificationPriority, value}}"}' -u 'test@liferay.com:test' + * curl -H 'Content-Type: text/plain; charset=utf-8' -X 'POST' 'http://localhost:8080/o/graphql' -d $'{"query": "query {productSpecification(id: ___){externalReferenceCode, id, key, label, optionCategoryExternalReferenceCode, optionCategoryId, priority, productId, specificationExternalReferenceCode, specificationId, specificationKey, specificationPriority, value, visible}}"}' -u 'test@liferay.com:test' */ @GraphQLField public ProductSpecification productSpecification(@GraphQLName("id") Long id) @@ -2684,7 +2684,7 @@ public SpecificationPage specifications( /** * Invoke this method with the command line: * - * curl -H 'Content-Type: text/plain; charset=utf-8' -X 'POST' 'http://localhost:8080/o/graphql' -d $'{"query": "query {specificationByExternalReferenceCode(externalReferenceCode: ___){description, externalReferenceCode, facetable, id, key, listTypeDefinitionId, listTypeDefinitionIds, optionCategory, priority, title}}"}' -u 'test@liferay.com:test' + * curl -H 'Content-Type: text/plain; charset=utf-8' -X 'POST' 'http://localhost:8080/o/graphql' -d $'{"query": "query {specificationByExternalReferenceCode(externalReferenceCode: ___){description, externalReferenceCode, facetable, id, key, listTypeDefinitionId, listTypeDefinitionIds, optionCategory, priority, title, visible}}"}' -u 'test@liferay.com:test' */ @GraphQLField public Specification specificationByExternalReferenceCode( @@ -2702,7 +2702,7 @@ public Specification specificationByExternalReferenceCode( /** * Invoke this method with the command line: * - * curl -H 'Content-Type: text/plain; charset=utf-8' -X 'POST' 'http://localhost:8080/o/graphql' -d $'{"query": "query {specification(id: ___){description, externalReferenceCode, facetable, id, key, listTypeDefinitionId, listTypeDefinitionIds, optionCategory, priority, title}}"}' -u 'test@liferay.com:test' + * curl -H 'Content-Type: text/plain; charset=utf-8' -X 'POST' 'http://localhost:8080/o/graphql' -d $'{"query": "query {specification(id: ___){description, externalReferenceCode, facetable, id, key, listTypeDefinitionId, listTypeDefinitionIds, optionCategory, priority, title, visible}}"}' -u 'test@liferay.com:test' */ @GraphQLField public Specification specification(@GraphQLName("id") Long id) diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/BaseProductSpecificationResourceImpl.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/BaseProductSpecificationResourceImpl.java index aad4f0a2165686..6df82ca8959d95 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/BaseProductSpecificationResourceImpl.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/BaseProductSpecificationResourceImpl.java @@ -145,7 +145,7 @@ public ProductSpecification getProductSpecificationByExternalReferenceCode( /** * Invoke this method with the command line: * - * curl -X 'PATCH' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/productSpecifications/by-externalReferenceCode/{externalReferenceCode}' -d $'{"externalReferenceCode": ___, "id": ___, "key": ___, "label": ___, "optionCategoryExternalReferenceCode": ___, "optionCategoryId": ___, "priority": ___, "productId": ___, "specificationExternalReferenceCode": ___, "specificationId": ___, "specificationKey": ___, "specificationPriority": ___, "value": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' + * curl -X 'PATCH' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/productSpecifications/by-externalReferenceCode/{externalReferenceCode}' -d $'{"externalReferenceCode": ___, "id": ___, "key": ___, "label": ___, "optionCategoryExternalReferenceCode": ___, "optionCategoryId": ___, "priority": ___, "productId": ___, "specificationExternalReferenceCode": ___, "specificationId": ___, "specificationKey": ___, "specificationPriority": ___, "value": ___, "visible": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' */ @io.swagger.v3.oas.annotations.Parameters( value = { @@ -296,7 +296,7 @@ public ProductSpecification getProductSpecification( /** * Invoke this method with the command line: * - * curl -X 'PATCH' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/productSpecifications/{id}' -d $'{"externalReferenceCode": ___, "id": ___, "key": ___, "label": ___, "optionCategoryExternalReferenceCode": ___, "optionCategoryId": ___, "priority": ___, "productId": ___, "specificationExternalReferenceCode": ___, "specificationId": ___, "specificationKey": ___, "specificationPriority": ___, "value": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' + * curl -X 'PATCH' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/productSpecifications/{id}' -d $'{"externalReferenceCode": ___, "id": ___, "key": ___, "label": ___, "optionCategoryExternalReferenceCode": ___, "optionCategoryId": ___, "priority": ___, "productId": ___, "specificationExternalReferenceCode": ___, "specificationId": ___, "specificationKey": ___, "specificationPriority": ___, "value": ___, "visible": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' */ @io.swagger.v3.oas.annotations.Parameters( value = { @@ -377,7 +377,7 @@ public ProductSpecification patchProductSpecification( /** * Invoke this method with the command line: * - * curl -X 'POST' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/products/by-externalReferenceCode/{externalReferenceCode}/product-specifications' -d $'{"externalReferenceCode": ___, "id": ___, "key": ___, "label": ___, "optionCategoryExternalReferenceCode": ___, "optionCategoryId": ___, "priority": ___, "productId": ___, "specificationExternalReferenceCode": ___, "specificationId": ___, "specificationKey": ___, "specificationPriority": ___, "value": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' + * curl -X 'POST' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/products/by-externalReferenceCode/{externalReferenceCode}/product-specifications' -d $'{"externalReferenceCode": ___, "id": ___, "key": ___, "label": ___, "optionCategoryExternalReferenceCode": ___, "optionCategoryId": ___, "priority": ___, "productId": ___, "specificationExternalReferenceCode": ___, "specificationId": ___, "specificationKey": ___, "specificationPriority": ___, "value": ___, "visible": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' */ @io.swagger.v3.oas.annotations.Parameters( value = { @@ -458,7 +458,7 @@ public Page getProductIdProductSpecificationsPage( /** * Invoke this method with the command line: * - * curl -X 'POST' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/products/{id}/productSpecifications' -d $'{"externalReferenceCode": ___, "id": ___, "key": ___, "label": ___, "optionCategoryExternalReferenceCode": ___, "optionCategoryId": ___, "priority": ___, "productId": ___, "specificationExternalReferenceCode": ___, "specificationId": ___, "specificationKey": ___, "specificationPriority": ___, "value": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' + * curl -X 'POST' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/products/{id}/productSpecifications' -d $'{"externalReferenceCode": ___, "id": ___, "key": ___, "label": ___, "optionCategoryExternalReferenceCode": ___, "optionCategoryId": ___, "priority": ___, "productId": ___, "specificationExternalReferenceCode": ___, "specificationId": ___, "specificationKey": ___, "specificationPriority": ___, "value": ___, "visible": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' */ @io.swagger.v3.oas.annotations.Parameters( value = { diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/BaseSpecificationResourceImpl.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/BaseSpecificationResourceImpl.java index 690d9d56ac10e9..884b3396352df4 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/BaseSpecificationResourceImpl.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/resource/v1_0/BaseSpecificationResourceImpl.java @@ -206,7 +206,7 @@ public Response postSpecificationsPageExportBatch( /** * Invoke this method with the command line: * - * curl -X 'POST' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/specifications' -d $'{"description": ___, "externalReferenceCode": ___, "facetable": ___, "key": ___, "listTypeDefinitionId": ___, "listTypeDefinitionIds": ___, "optionCategory": ___, "priority": ___, "title": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' + * curl -X 'POST' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/specifications' -d $'{"description": ___, "externalReferenceCode": ___, "facetable": ___, "key": ___, "listTypeDefinitionId": ___, "listTypeDefinitionIds": ___, "optionCategory": ___, "priority": ___, "title": ___, "visible": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' */ @io.swagger.v3.oas.annotations.tags.Tags( value = { @@ -339,7 +339,7 @@ public Specification getSpecificationByExternalReferenceCode( /** * Invoke this method with the command line: * - * curl -X 'PATCH' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/specifications/by-external-reference-code/{externalReferenceCode}' -d $'{"description": ___, "externalReferenceCode": ___, "facetable": ___, "key": ___, "listTypeDefinitionId": ___, "listTypeDefinitionIds": ___, "optionCategory": ___, "priority": ___, "title": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' + * curl -X 'PATCH' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/specifications/by-external-reference-code/{externalReferenceCode}' -d $'{"description": ___, "externalReferenceCode": ___, "facetable": ___, "key": ___, "listTypeDefinitionId": ___, "listTypeDefinitionIds": ___, "optionCategory": ___, "priority": ___, "title": ___, "visible": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' */ @io.swagger.v3.oas.annotations.Parameters( value = { @@ -408,6 +408,10 @@ public Specification patchSpecificationByExternalReferenceCode( existingSpecification.setTitle(specification.getTitle()); } + if (specification.getVisible() != null) { + existingSpecification.setVisible(specification.getVisible()); + } + preparePatch(specification, existingSpecification); return putSpecificationByExternalReferenceCode( @@ -417,7 +421,7 @@ public Specification patchSpecificationByExternalReferenceCode( /** * Invoke this method with the command line: * - * curl -X 'PUT' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/specifications/by-external-reference-code/{externalReferenceCode}' -d $'{"description": ___, "externalReferenceCode": ___, "facetable": ___, "key": ___, "listTypeDefinitionId": ___, "listTypeDefinitionIds": ___, "optionCategory": ___, "priority": ___, "title": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' + * curl -X 'PUT' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/specifications/by-external-reference-code/{externalReferenceCode}' -d $'{"description": ___, "externalReferenceCode": ___, "facetable": ___, "key": ___, "listTypeDefinitionId": ___, "listTypeDefinitionIds": ___, "optionCategory": ___, "priority": ___, "title": ___, "visible": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' */ @io.swagger.v3.oas.annotations.Parameters( value = { @@ -559,7 +563,7 @@ public Specification getSpecification( /** * Invoke this method with the command line: * - * curl -X 'PATCH' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/specifications/{id}' -d $'{"description": ___, "externalReferenceCode": ___, "facetable": ___, "key": ___, "listTypeDefinitionId": ___, "listTypeDefinitionIds": ___, "optionCategory": ___, "priority": ___, "title": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' + * curl -X 'PATCH' 'http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/specifications/{id}' -d $'{"description": ___, "externalReferenceCode": ___, "facetable": ___, "key": ___, "listTypeDefinitionId": ___, "listTypeDefinitionIds": ___, "optionCategory": ___, "priority": ___, "title": ___, "visible": ___}' --header 'Content-Type: application/json' -u 'test@liferay.com:test' */ @io.swagger.v3.oas.annotations.Parameters( value = { diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/BaseProductSpecificationResourceTestCase.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/BaseProductSpecificationResourceTestCase.java index 163968fa302a3f..9a498ac5eb8527 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/BaseProductSpecificationResourceTestCase.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/BaseProductSpecificationResourceTestCase.java @@ -1359,6 +1359,14 @@ protected void assertValid(ProductSpecification productSpecification) continue; } + if (Objects.equals("visible", additionalAssertFieldName)) { + if (productSpecification.getVisible() == null) { + valid = false; + } + + continue; + } + throw new IllegalArgumentException( "Invalid additional assert field name " + additionalAssertFieldName); @@ -1637,6 +1645,17 @@ protected boolean equals( continue; } + if (Objects.equals("visible", additionalAssertFieldName)) { + if (!Objects.deepEquals( + productSpecification1.getVisible(), + productSpecification2.getVisible())) { + + return false; + } + + continue; + } + throw new IllegalArgumentException( "Invalid additional assert field name " + additionalAssertFieldName); @@ -2021,6 +2040,11 @@ else if (operator.equals("startswith")) { "Invalid entity field " + entityFieldName); } + if (entityFieldName.equals("visible")) { + throw new IllegalArgumentException( + "Invalid entity field " + entityFieldName); + } + throw new IllegalArgumentException( "Invalid entity field " + entityFieldName); } @@ -2083,6 +2107,7 @@ protected ProductSpecification randomProductSpecification() specificationKey = StringUtil.toLowerCase( RandomTestUtil.randomString()); specificationPriority = RandomTestUtil.randomDouble(); + visible = RandomTestUtil.randomBoolean(); } }; } diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/BaseSpecificationResourceTestCase.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/BaseSpecificationResourceTestCase.java index dfc6e598b3c32c..868d700c9c84f1 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/BaseSpecificationResourceTestCase.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/BaseSpecificationResourceTestCase.java @@ -1325,6 +1325,14 @@ protected void assertValid(Specification specification) throws Exception { continue; } + if (Objects.equals("visible", additionalAssertFieldName)) { + if (specification.getVisible() == null) { + valid = false; + } + + continue; + } + throw new IllegalArgumentException( "Invalid additional assert field name " + additionalAssertFieldName); @@ -1558,6 +1566,17 @@ protected boolean equals( continue; } + if (Objects.equals("visible", additionalAssertFieldName)) { + if (!Objects.deepEquals( + specification1.getVisible(), + specification2.getVisible())) { + + return false; + } + + continue; + } + throw new IllegalArgumentException( "Invalid additional assert field name " + additionalAssertFieldName); @@ -1798,6 +1817,11 @@ else if (operator.equals("startswith")) { "Invalid entity field " + entityFieldName); } + if (entityFieldName.equals("visible")) { + throw new IllegalArgumentException( + "Invalid entity field " + entityFieldName); + } + throw new IllegalArgumentException( "Invalid entity field " + entityFieldName); } @@ -1850,6 +1874,7 @@ protected Specification randomSpecification() throws Exception { key = StringUtil.toLowerCase(RandomTestUtil.randomString()); listTypeDefinitionId = RandomTestUtil.randomLong(); priority = RandomTestUtil.randomDouble(); + visible = RandomTestUtil.randomBoolean(); } }; } From 1ad02fd65f17e0668d721b62550eb4c27da2f462 Mon Sep 17 00:00:00 2001 From: Alessio Rendina Date: Thu, 27 Feb 2025 16:06:25 +0100 Subject: [PATCH 18/18] LPD-48103 Semantic versioning (gw baseline) # breaking ## What modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueService.java modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionSpecificationOptionValueService.java now include visible boolean parameter into add and update methods ## Why because the table now includes this column to manage the specifications visibility on front store ---- ## What modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionService.java modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPSpecificationOptionService.java now include visible boolean parameter into add and update methods ## Why because the table now includes this column to manage the specifications visibility on front store ---- --- modules/apps/commerce/commerce-product-api/bnd.bnd | 2 +- .../com/liferay/commerce/product/constants/packageinfo | 2 +- .../resources/com/liferay/commerce/product/model/packageinfo | 2 +- .../resources/com/liferay/commerce/product/service/packageinfo | 2 +- .../headless-commerce-admin-catalog-api/bnd.bnd | 2 +- .../headless/commerce/admin/catalog/dto/v1_0/packageinfo | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/apps/commerce/commerce-product-api/bnd.bnd b/modules/apps/commerce/commerce-product-api/bnd.bnd index d4ae3633d42590..9ad3c5e01fc562 100644 --- a/modules/apps/commerce/commerce-product-api/bnd.bnd +++ b/modules/apps/commerce/commerce-product-api/bnd.bnd @@ -1,6 +1,6 @@ Bundle-Name: Liferay Commerce Product API Bundle-SymbolicName: com.liferay.commerce.product.api -Bundle-Version: 88.2.1 +Bundle-Version: 89.0.0 Export-Package:\ com.liferay.commerce.product.availability,\ com.liferay.commerce.product.catalog,\ diff --git a/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/constants/packageinfo b/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/constants/packageinfo index ce3461941957a0..bc0ed8cfce7213 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/constants/packageinfo +++ b/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/constants/packageinfo @@ -1 +1 @@ -version 14.5.0 \ No newline at end of file +version 14.6.0 \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/model/packageinfo b/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/model/packageinfo index e80e60bf7075d1..77b83e3a6c49fc 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/model/packageinfo +++ b/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/model/packageinfo @@ -1 +1 @@ -version 25.0.0 \ No newline at end of file +version 25.1.0 \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/service/packageinfo b/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/service/packageinfo index 9a9c1f2cf99df9..ba006fd02efbe5 100644 --- a/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/service/packageinfo +++ b/modules/apps/commerce/commerce-product-api/src/main/resources/com/liferay/commerce/product/service/packageinfo @@ -1 +1 @@ -version 49.2.0 \ No newline at end of file +version 50.0.0 \ No newline at end of file diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/bnd.bnd b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/bnd.bnd index 970dd704a24dd1..16ef1b1e78a381 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/bnd.bnd +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/bnd.bnd @@ -1,6 +1,6 @@ Bundle-Name: Liferay Headless Commerce Admin Catalog API Bundle-SymbolicName: com.liferay.headless.commerce.admin.catalog.api -Bundle-Version: 37.0.2 +Bundle-Version: 37.1.0 Export-Package:\ com.liferay.headless.commerce.admin.catalog.dto.v1_0,\ com.liferay.headless.commerce.admin.catalog.resource.v1_0 \ No newline at end of file diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/resources/com/liferay/headless/commerce/admin/catalog/dto/v1_0/packageinfo b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/resources/com/liferay/headless/commerce/admin/catalog/dto/v1_0/packageinfo index 5b2de3187bc270..6b1cd2d89d4aa3 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/resources/com/liferay/headless/commerce/admin/catalog/dto/v1_0/packageinfo +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-api/src/main/resources/com/liferay/headless/commerce/admin/catalog/dto/v1_0/packageinfo @@ -1 +1 @@ -version 19.0.0 \ No newline at end of file +version 19.1.0 \ No newline at end of file