
com.liferay.commerce.product.service.impl.CPSpecificationOptionLocalServiceImpl Maven / Gradle / Ivy
/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.commerce.product.service.impl;
import com.liferay.commerce.product.exception.CPSpecificationOptionKeyException;
import com.liferay.commerce.product.exception.CPSpecificationOptionTitleException;
import com.liferay.commerce.product.model.CPSpecificationOption;
import com.liferay.commerce.product.search.CPSpecificationOptionIndexer;
import com.liferay.commerce.product.service.base.CPSpecificationOptionLocalServiceBaseImpl;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.model.SystemEventConstants;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.search.BaseModelSearchResult;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.Hits;
import com.liferay.portal.kernel.search.Indexable;
import com.liferay.portal.kernel.search.IndexableType;
import com.liferay.portal.kernel.search.Indexer;
import com.liferay.portal.kernel.search.IndexerRegistryUtil;
import com.liferay.portal.kernel.search.QueryConfig;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.SearchException;
import com.liferay.portal.kernel.search.Sort;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.systemevent.SystemEvent;
import com.liferay.portal.kernel.util.FriendlyURLNormalizerUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.Validator;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
/**
* @author Andrea Di Giorgi
* @author Alessio Antonio Rendina
*/
public class CPSpecificationOptionLocalServiceImpl
extends CPSpecificationOptionLocalServiceBaseImpl {
@Indexable(type = IndexableType.REINDEX)
@Override
public CPSpecificationOption addCPSpecificationOption(
long cpOptionCategoryId, Map titleMap,
Map descriptionMap, boolean facetable, String key,
ServiceContext serviceContext)
throws PortalException {
User user = userLocalService.getUser(serviceContext.getUserId());
long groupId = serviceContext.getScopeGroupId();
key = FriendlyURLNormalizerUtil.normalize(key);
validate(0, groupId, titleMap, key);
long cpSpecificationOptionId = counterLocalService.increment();
CPSpecificationOption cpSpecificationOption =
cpSpecificationOptionPersistence.create(cpSpecificationOptionId);
cpSpecificationOption.setUuid(serviceContext.getUuid());
cpSpecificationOption.setGroupId(groupId);
cpSpecificationOption.setCompanyId(user.getCompanyId());
cpSpecificationOption.setUserId(user.getUserId());
cpSpecificationOption.setUserName(user.getFullName());
cpSpecificationOption.setCPOptionCategoryId(cpOptionCategoryId);
cpSpecificationOption.setTitleMap(titleMap);
cpSpecificationOption.setDescriptionMap(descriptionMap);
cpSpecificationOption.setFacetable(facetable);
cpSpecificationOption.setKey(key);
cpSpecificationOption.setExpandoBridgeAttributes(serviceContext);
cpSpecificationOptionPersistence.update(cpSpecificationOption);
return cpSpecificationOption;
}
@Indexable(type = IndexableType.DELETE)
@Override
@SystemEvent(type = SystemEventConstants.TYPE_DELETE)
public CPSpecificationOption deleteCPSpecificationOption(
CPSpecificationOption cpSpecificationOption)
throws PortalException {
// Commerce product specification option
cpSpecificationOptionPersistence.remove(cpSpecificationOption);
// Commerce product definition specification option values
cpDefinitionSpecificationOptionValueLocalService.
deleteCPSpecificationOptionDefinitionValues(
cpSpecificationOption.getCPSpecificationOptionId());
// Expando
expandoRowLocalService.deleteRows(
cpSpecificationOption.getCPSpecificationOptionId());
return cpSpecificationOption;
}
@Override
public CPSpecificationOption deleteCPSpecificationOption(
long cpSpecificationOptionId)
throws PortalException {
CPSpecificationOption cpSpecificationOption =
cpSpecificationOptionPersistence.findByPrimaryKey(
cpSpecificationOptionId);
return cpSpecificationOptionLocalService.deleteCPSpecificationOption(
cpSpecificationOption);
}
@Override
public void deleteCPSpecificationOptions(long groupId)
throws PortalException {
List cpSpecificationOptions =
cpSpecificationOptionPersistence.findByGroupId(groupId);
for (CPSpecificationOption cpSpecificationOption :
cpSpecificationOptions) {
cpSpecificationOptionLocalService.deleteCPSpecificationOption(
cpSpecificationOption);
}
}
@Override
public CPSpecificationOption fetchCPSpecificationOption(
long groupId, String key) {
return cpSpecificationOptionPersistence.fetchByG_K(groupId, key);
}
@Override
public List getCPSpecificationOptions(
long groupId, int start, int end,
OrderByComparator orderByComparator) {
return cpSpecificationOptionPersistence.findByGroupId(
groupId, start, end, orderByComparator);
}
@Override
public int getCPSpecificationOptionsCount(long groupId) {
return cpSpecificationOptionPersistence.countByGroupId(groupId);
}
@Override
public Hits search(SearchContext searchContext) {
try {
Indexer indexer =
IndexerRegistryUtil.nullSafeGetIndexer(
CPSpecificationOption.class);
return indexer.search(searchContext);
}
catch (Exception e) {
throw new SystemException(e);
}
}
@Override
public BaseModelSearchResult
searchCPSpecificationOptions(
long companyId, long groupId, Boolean facetable,
String keywords, int start, int end, Sort sort)
throws PortalException {
SearchContext searchContext = buildSearchContext(
companyId, groupId, facetable, keywords, start, end, sort);
return searchCPSpecificationOptions(searchContext);
}
@Override
public CPSpecificationOption updateCPOptionCategoryId(
long cpSpecificationOptionId, long cpOptionCategoryId)
throws PortalException {
CPSpecificationOption cpSpecificationOption =
cpSpecificationOptionPersistence.findByPrimaryKey(
cpSpecificationOptionId);
cpSpecificationOption.setCPOptionCategoryId(cpOptionCategoryId);
cpSpecificationOptionPersistence.update(cpSpecificationOption);
return cpSpecificationOption;
}
@Indexable(type = IndexableType.REINDEX)
@Override
public CPSpecificationOption updateCPSpecificationOption(
long cpSpecificationOptionId, long cpOptionCategoryId,
Map titleMap, Map descriptionMap,
boolean facetable, String key, ServiceContext serviceContext)
throws PortalException {
CPSpecificationOption cpSpecificationOption =
cpSpecificationOptionPersistence.findByPrimaryKey(
cpSpecificationOptionId);
key = FriendlyURLNormalizerUtil.normalize(key);
validate(
cpSpecificationOption.getCPSpecificationOptionId(),
cpSpecificationOption.getGroupId(), titleMap, key);
cpSpecificationOption.setCPOptionCategoryId(cpOptionCategoryId);
cpSpecificationOption.setTitleMap(titleMap);
cpSpecificationOption.setDescriptionMap(descriptionMap);
cpSpecificationOption.setFacetable(facetable);
cpSpecificationOption.setKey(key);
cpSpecificationOption.setExpandoBridgeAttributes(serviceContext);
cpSpecificationOptionPersistence.update(cpSpecificationOption);
return cpSpecificationOption;
}
protected SearchContext buildSearchContext(
long companyId, long groupId, Boolean facetable, String keywords,
int start, int end, Sort sort) {
SearchContext searchContext = new SearchContext();
LinkedHashMap params = new LinkedHashMap<>();
params.put("keywords", keywords);
Map attributes = new HashMap<>();
attributes.put(
CPSpecificationOptionIndexer.FIELD_CP_OPTION_CATEGORY_ID, keywords);
attributes.put(
CPSpecificationOptionIndexer.FIELD_CP_OPTION_CATEGORY_TITLE,
keywords);
attributes.put(Field.ENTRY_CLASS_PK, keywords);
attributes.put(Field.TITLE, keywords);
attributes.put(Field.DESCRIPTION, keywords);
attributes.put(Field.CONTENT, keywords);
if (facetable != null) {
attributes.put(
CPSpecificationOptionIndexer.FIELD_FACETABLE, facetable);
}
attributes.put(CPSpecificationOptionIndexer.FIELD_KEY, keywords);
attributes.put("params", params);
searchContext.setAttributes(attributes);
searchContext.setCompanyId(companyId);
searchContext.setStart(start);
searchContext.setEnd(end);
searchContext.setGroupIds(new long[] {groupId});
if (Validator.isNotNull(keywords)) {
searchContext.setKeywords(keywords);
}
QueryConfig queryConfig = searchContext.getQueryConfig();
queryConfig.setHighlightEnabled(false);
queryConfig.setScoreEnabled(false);
if (sort != null) {
searchContext.setSorts(sort);
}
return searchContext;
}
protected List getCPSpecificationOptions(Hits hits)
throws PortalException {
List documents = hits.toList();
List cpSpecificationOptions = new ArrayList<>(
documents.size());
for (Document document : documents) {
long cpSpecificationOptionId = GetterUtil.getLong(
document.get(Field.ENTRY_CLASS_PK));
CPSpecificationOption cpSpecificationOption =
fetchCPSpecificationOption(cpSpecificationOptionId);
if (cpSpecificationOption == null) {
cpSpecificationOptions = null;
Indexer indexer =
IndexerRegistryUtil.getIndexer(CPSpecificationOption.class);
long companyId = GetterUtil.getLong(
document.get(Field.COMPANY_ID));
indexer.delete(companyId, document.getUID());
}
else if (cpSpecificationOptions != null) {
cpSpecificationOptions.add(cpSpecificationOption);
}
}
return cpSpecificationOptions;
}
protected BaseModelSearchResult
searchCPSpecificationOptions(SearchContext searchContext)
throws PortalException {
Indexer indexer =
IndexerRegistryUtil.nullSafeGetIndexer(CPSpecificationOption.class);
for (int i = 0; i < 10; i++) {
Hits hits = indexer.search(searchContext, _SELECTED_FIELD_NAMES);
List cpSpecificationOptions =
getCPSpecificationOptions(hits);
if (cpSpecificationOptions != null) {
return new BaseModelSearchResult<>(
cpSpecificationOptions, hits.getLength());
}
}
throw new SearchException(
"Unable to fix the search index after 10 attempts");
}
protected void validate(
long cpSpecificationOptionId, long groupId,
Map titleMap, String key)
throws PortalException {
Locale locale = LocaleUtil.getSiteDefault();
String title = titleMap.get(locale);
if (Validator.isNull(title)) {
throw new CPSpecificationOptionTitleException();
}
if (Validator.isNull(key)) {
throw new CPSpecificationOptionKeyException.MustNotBeNull();
}
CPSpecificationOption cpSpecificationOption =
cpSpecificationOptionPersistence.fetchByG_K(groupId, key);
if ((cpSpecificationOption != null) &&
(cpSpecificationOption.getCPSpecificationOptionId() !=
cpSpecificationOptionId)) {
throw new CPSpecificationOptionKeyException.MustNotBeDuplicate(key);
}
}
private static final String[] _SELECTED_FIELD_NAMES =
{Field.ENTRY_CLASS_PK, Field.COMPANY_ID, Field.GROUP_ID, Field.UID};
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy