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

com.liferay.commerce.product.service.impl.CPDefinitionOptionValueRelLocalServiceImpl Maven / Gradle / Ivy

There is a newer version: 6.0.156
Show newest version
/**
 * 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.constants.CPConstants;
import com.liferay.commerce.product.exception.CPDefinitionOptionValueRelCPInstanceException;
import com.liferay.commerce.product.exception.CPDefinitionOptionValueRelKeyException;
import com.liferay.commerce.product.exception.CPDefinitionOptionValueRelPriceException;
import com.liferay.commerce.product.exception.CPDefinitionOptionValueRelQuantityException;
import com.liferay.commerce.product.exception.NoSuchCPDefinitionOptionValueRelException;
import com.liferay.commerce.product.model.CPDefinition;
import com.liferay.commerce.product.model.CPDefinitionOptionRel;
import com.liferay.commerce.product.model.CPDefinitionOptionValueRel;
import com.liferay.commerce.product.model.CPInstance;
import com.liferay.commerce.product.model.CPInstanceOptionValueRel;
import com.liferay.commerce.product.model.CPOption;
import com.liferay.commerce.product.model.CPOptionValue;
import com.liferay.commerce.product.service.base.CPDefinitionOptionValueRelLocalServiceBaseImpl;
import com.liferay.expando.kernel.model.ExpandoBridge;
import com.liferay.portal.kernel.dao.orm.Criterion;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.OrderFactoryUtil;
import com.liferay.portal.kernel.dao.orm.Property;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
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.security.auth.PrincipalThreadLocal;
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.OrderByComparator;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.taglib.util.CustomAttributesUtil;

import java.io.Serializable;

import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;

/**
 * @author Marco Leo
 * @author Igor Beslic
 */
public class CPDefinitionOptionValueRelLocalServiceImpl
	extends CPDefinitionOptionValueRelLocalServiceBaseImpl {

	@Override
	public CPDefinitionOptionValueRel addCPDefinitionOptionValueRel(
			long cpDefinitionOptionRelId, CPOptionValue cpOptionValue,
			ServiceContext serviceContext)
		throws PortalException {

		return cpDefinitionOptionValueRelLocalService.
			addCPDefinitionOptionValueRel(
				cpDefinitionOptionRelId, cpOptionValue.getNameMap(),
				cpOptionValue.getPriority(), cpOptionValue.getKey(),
				serviceContext);
	}

	@Indexable(type = IndexableType.REINDEX)
	@Override
	public CPDefinitionOptionValueRel addCPDefinitionOptionValueRel(
			long cpDefinitionOptionRelId, Map nameMap,
			double priority, String key, ServiceContext serviceContext)
		throws PortalException {

		// Commerce product definition option value rel

		User user = userLocalService.getUser(serviceContext.getUserId());

		key = FriendlyURLNormalizerUtil.normalize(key);

		validate(0, cpDefinitionOptionRelId, key);

		long cpDefinitionOptionValueRelId = counterLocalService.increment();

		CPDefinitionOptionValueRel cpDefinitionOptionValueRel =
			cpDefinitionOptionValueRelPersistence.create(
				cpDefinitionOptionValueRelId);

		CPDefinitionOptionRel cpDefinitionOptionRel =
			cpDefinitionOptionRelLocalService.getCPDefinitionOptionRel(
				cpDefinitionOptionRelId);

		if (cpDefinitionLocalService.isVersionable(
				cpDefinitionOptionRel.getCPDefinitionId(),
				serviceContext.getRequest())) {

			CPDefinition newCPDefinition =
				cpDefinitionLocalService.copyCPDefinition(
					cpDefinitionOptionRel.getCPDefinitionId());

			cpDefinitionOptionRel = cpDefinitionOptionRelPersistence.findByC_C(
				newCPDefinition.getCPDefinitionId(),
				cpDefinitionOptionRel.getCPOptionId());

			cpDefinitionOptionRelId =
				cpDefinitionOptionRel.getCPDefinitionOptionRelId();
		}

		cpDefinitionOptionValueRel.setGroupId(
			cpDefinitionOptionRel.getGroupId());
		cpDefinitionOptionValueRel.setCompanyId(user.getCompanyId());
		cpDefinitionOptionValueRel.setUserId(user.getUserId());
		cpDefinitionOptionValueRel.setUserName(user.getFullName());
		cpDefinitionOptionValueRel.setCPDefinitionOptionRelId(
			cpDefinitionOptionRelId);
		cpDefinitionOptionValueRel.setNameMap(nameMap);
		cpDefinitionOptionValueRel.setPriority(priority);
		cpDefinitionOptionValueRel.setKey(key);
		cpDefinitionOptionValueRel.setExpandoBridgeAttributes(serviceContext);

		if (cpDefinitionOptionRel.isPriceTypeStatic()) {
			cpDefinitionOptionValueRel.setPrice(BigDecimal.ZERO);
		}

		_validateLinkedCPDefinitionOptionValueRel(cpDefinitionOptionValueRel);
		_validatePriceableCPDefinitionOptionValue(
			cpDefinitionOptionValueRel, cpDefinitionOptionRel.getPriceType());

		cpDefinitionOptionValueRel =
			cpDefinitionOptionValueRelPersistence.update(
				cpDefinitionOptionValueRel);

		// Commerce product definition

		reindexCPDefinition(cpDefinitionOptionRel);

		return cpDefinitionOptionValueRel;
	}

	@Indexable(type = IndexableType.DELETE)
	@Override
	@SystemEvent(type = SystemEventConstants.TYPE_DELETE)
	public CPDefinitionOptionValueRel deleteCPDefinitionOptionValueRel(
			CPDefinitionOptionValueRel cpDefinitionOptionValueRel)
		throws PortalException {

		CPDefinitionOptionRel cpDefinitionOptionRel =
			cpDefinitionOptionValueRel.getCPDefinitionOptionRel();

		if (cpDefinitionLocalService.isVersionable(
				cpDefinitionOptionRel.getCPDefinitionId())) {

			CPDefinition newCPDefinition =
				cpDefinitionLocalService.copyCPDefinition(
					cpDefinitionOptionRel.getCPDefinitionId());

			cpDefinitionOptionRel = cpDefinitionOptionRelPersistence.findByC_C(
				newCPDefinition.getCPDefinitionId(),
				cpDefinitionOptionRel.getCPOptionId());

			cpDefinitionOptionValueRel =
				cpDefinitionOptionValueRelPersistence.findByC_K(
					cpDefinitionOptionRel.getCPDefinitionOptionRelId(),
					cpDefinitionOptionValueRel.getKey());
		}

		// Commerce product definition option value rel

		cpDefinitionOptionValueRelPersistence.remove(
			cpDefinitionOptionValueRel);

		// Expando

		expandoRowLocalService.deleteRows(
			cpDefinitionOptionValueRel.getCPDefinitionOptionValueRelId());

		cpInstanceLocalService.inactivateCPDefinitionOptionValueRelCPInstances(
			PrincipalThreadLocal.getUserId(),
			cpDefinitionOptionRel.getCPDefinitionId(),
			cpDefinitionOptionValueRel.getCPDefinitionOptionValueRelId());

		// Commerce product definition

		reindexCPDefinition(cpDefinitionOptionRel);

		return cpDefinitionOptionValueRel;
	}

	@Override
	public CPDefinitionOptionValueRel deleteCPDefinitionOptionValueRel(
			long cpDefinitionOptionValueRelId)
		throws PortalException {

		CPDefinitionOptionValueRel cpDefinitionOptionValueRel =
			cpDefinitionOptionValueRelPersistence.findByPrimaryKey(
				cpDefinitionOptionValueRelId);

		return cpDefinitionOptionValueRelLocalService.
			deleteCPDefinitionOptionValueRel(cpDefinitionOptionValueRel);
	}

	@Override
	public void deleteCPDefinitionOptionValueRels(long cpDefinitionOptionRelId)
		throws PortalException {

		List cpDefinitionOptionValueRels =
			cpDefinitionOptionValueRelLocalService.
				getCPDefinitionOptionValueRels(
					cpDefinitionOptionRelId, QueryUtil.ALL_POS,
					QueryUtil.ALL_POS);

		for (CPDefinitionOptionValueRel cpDefinitionOptionValueRel :
				cpDefinitionOptionValueRels) {

			cpDefinitionOptionValueRelLocalService.
				deleteCPDefinitionOptionValueRel(cpDefinitionOptionValueRel);
		}
	}

	@Override
	public CPDefinitionOptionValueRel fetchCPDefinitionOptionValueRel(
		long cpDefinitionOptionRelId, String key) {

		return cpDefinitionOptionValueRelPersistence.fetchByC_K(
			cpDefinitionOptionRelId, key);
	}

	@Override
	public CPDefinitionOptionValueRel
		fetchPreselectedCPDefinitionOptionValueRel(
			long cpDefinitionOptionRelId) {

		List
			preselectedCPDefinitionOptionValueRels =
				cpDefinitionOptionValueRelPersistence.findByCDORI_P(
					cpDefinitionOptionRelId, true);

		if (preselectedCPDefinitionOptionValueRels.isEmpty()) {
			return null;
		}

		return preselectedCPDefinitionOptionValueRels.get(0);
	}

	@Override
	public List filterByCPInstanceOptionValueRels(
		List cpDefinitionOptionValueRels,
		List cpInstanceOptionValueRels) {

		List filteredCPDefinitionOptionValueRels =
			new ArrayList<>();

		for (CPDefinitionOptionValueRel cpDefinitionOptionValueRel :
				cpDefinitionOptionValueRels) {

			for (CPInstanceOptionValueRel cpInstanceOptionValueRel :
					cpInstanceOptionValueRels) {

				if (cpDefinitionOptionValueRel.
						getCPDefinitionOptionValueRelId() ==
							cpInstanceOptionValueRel.
								getCPDefinitionOptionValueRelId()) {

					filteredCPDefinitionOptionValueRels.add(
						cpDefinitionOptionValueRel);

					break;
				}
			}
		}

		return filteredCPDefinitionOptionValueRels;
	}

	@Override
	public List getCPDefinitionOptionValueRels(
		long cpDefinitionOptionRelId) {

		return cpDefinitionOptionValueRelPersistence.
			findByCPDefinitionOptionRelId(cpDefinitionOptionRelId);
	}

	@Override
	public List getCPDefinitionOptionValueRels(
		long cpDefinitionOptionRelId, int start, int end) {

		return cpDefinitionOptionValueRelPersistence.
			findByCPDefinitionOptionRelId(cpDefinitionOptionRelId, start, end);
	}

	@Override
	public List getCPDefinitionOptionValueRels(
		long cpDefinitionOptionRelId, int start, int end,
		OrderByComparator orderByComparator) {

		return cpDefinitionOptionValueRelPersistence.
			findByCPDefinitionOptionRelId(
				cpDefinitionOptionRelId, start, end, orderByComparator);
	}

	@Override
	public List getCPDefinitionOptionValueRels(
			long[] cpDefinitionOptionValueRelsId)
		throws PortalException {

		if ((cpDefinitionOptionValueRelsId == null) ||
			(cpDefinitionOptionValueRelsId.length == 0)) {

			return Collections.emptyList();
		}

		DynamicQuery dynamicQuery = dynamicQuery();

		Property property = PropertyFactoryUtil.forName(
			"CPDefinitionOptionValueRelId");

		Criterion criterion = property.in(cpDefinitionOptionValueRelsId);

		dynamicQuery.add(criterion);

		dynamicQuery.addOrder(OrderFactoryUtil.asc("priority"));

		return cpDefinitionOptionValueRelPersistence.findWithDynamicQuery(
			dynamicQuery);
	}

	@Override
	public List getCPDefinitionOptionValueRels(
		String key, int start, int end) {

		return cpDefinitionOptionValueRelPersistence.findByKey(key, start, end);
	}

	@Override
	public int getCPDefinitionOptionValueRelsCount(
		long cpDefinitionOptionRelId) {

		return cpDefinitionOptionValueRelPersistence.
			countByCPDefinitionOptionRelId(cpDefinitionOptionRelId);
	}

	@Override
	public CPDefinitionOptionValueRel getCPInstanceCPDefinitionOptionValueRel(
			long cpDefinitionOptionRelId, long cpInstanceId)
		throws PortalException {

		List cpInstanceCPInstanceOptionValueRels =
			cpInstanceOptionValueRelLocalService.
				getCPInstanceCPInstanceOptionValueRels(
					cpDefinitionOptionRelId, cpInstanceId);

		for (CPInstanceOptionValueRel cpInstanceCPInstanceOptionValueRel :
				cpInstanceCPInstanceOptionValueRels) {

			if (cpDefinitionOptionRelId !=
					cpInstanceCPInstanceOptionValueRel.
						getCPDefinitionOptionRelId()) {

				continue;
			}

			return cpDefinitionOptionValueRelPersistence.findByPrimaryKey(
				cpInstanceCPInstanceOptionValueRel.
					getCPDefinitionOptionValueRelId());
		}

		throw new NoSuchCPDefinitionOptionValueRelException(
			String.format(
				"Unable to find option value with CP definition option ID %d " +
					"assigned to CP instance ID %d",
				cpDefinitionOptionRelId, cpInstanceId));
	}

	@Override
	public boolean hasCPDefinitionOptionValueRels(
		long cpDefinitionOptionRelId) {

		int count =
			cpDefinitionOptionValueRelPersistence.
				countByCPDefinitionOptionRelId(cpDefinitionOptionRelId);

		if (count > 0) {
			return true;
		}

		return false;
	}

	@Override
	public boolean hasPreselectedCPDefinitionOptionValueRel(
		long cpDefinitionOptionRelId) {

		if (cpDefinitionOptionValueRelPersistence.countByCDORI_P(
				cpDefinitionOptionRelId, true) == 0) {

			return false;
		}

		return true;
	}

	@Override
	public void importCPDefinitionOptionRels(
			long cpDefinitionOptionRelId, ServiceContext serviceContext)
		throws PortalException {

		CPDefinitionOptionRel cpDefinitionOptionRel =
			cpDefinitionOptionRelLocalService.getCPDefinitionOptionRel(
				cpDefinitionOptionRelId);

		CPOption cpOption = cpOptionLocalService.fetchCPOption(
			cpDefinitionOptionRel.getCPOptionId());

		if (cpOption == null) {
			return;
		}

		List cpOptionValues =
			cpOptionValueLocalService.getCPOptionValues(
				cpOption.getCPOptionId(), QueryUtil.ALL_POS, QueryUtil.ALL_POS);

		Map expandoBridgeAttributes =
			serviceContext.getExpandoBridgeAttributes();

		try {
			_addCPDefinitionOptionValueRel(
				cpDefinitionOptionRelId, cpOptionValues, serviceContext);
		}
		finally {
			serviceContext.setExpandoBridgeAttributes(expandoBridgeAttributes);
		}
	}

	@Override
	public CPDefinitionOptionValueRel resetCPInstanceCPDefinitionOptionValueRel(
			long cpDefinitionOptionValueRelId)
		throws PortalException {

		CPDefinitionOptionValueRel cpDefinitionOptionValueRel =
			cpDefinitionOptionValueRelLocalService.
				getCPDefinitionOptionValueRel(cpDefinitionOptionValueRelId);

		cpDefinitionOptionValueRel.setCPInstanceUuid(null);
		cpDefinitionOptionValueRel.setCProductId(0);
		cpDefinitionOptionValueRel.setQuantity(0);

		return cpDefinitionOptionValueRelLocalService.
			updateCPDefinitionOptionValueRel(cpDefinitionOptionValueRel);
	}

	@Override
	public void resetCPInstanceCPDefinitionOptionValueRels(
		String cpInstanceUuid) {

		List cpDefinitionOptionValueRels =
			cpDefinitionOptionValueRelPersistence.findByCPInstanceUuid(
				cpInstanceUuid);

		for (CPDefinitionOptionValueRel cpDefinitionOptionValueRel :
				cpDefinitionOptionValueRels) {

			cpDefinitionOptionValueRel.setCPInstanceUuid(null);
			cpDefinitionOptionValueRel.setCProductId(0);
			cpDefinitionOptionValueRel.setQuantity(0);
			cpDefinitionOptionValueRel.setPrice(BigDecimal.ZERO);

			cpDefinitionOptionValueRelPersistence.update(
				cpDefinitionOptionValueRel);
		}
	}

	@Override
	public Hits search(SearchContext searchContext) {
		try {
			Indexer indexer =
				IndexerRegistryUtil.nullSafeGetIndexer(
					CPDefinitionOptionValueRel.class);

			return indexer.search(searchContext);
		}
		catch (Exception e) {
			throw new SystemException(e);
		}
	}

	@Override
	public BaseModelSearchResult
			searchCPDefinitionOptionValueRels(
				long companyId, long groupId, long cpDefinitionOptionRelId,
				String keywords, int start, int end, Sort sort)
		throws PortalException {

		SearchContext searchContext = buildSearchContext(
			companyId, groupId, cpDefinitionOptionRelId, keywords, start, end,
			sort);

		return searchCPOptions(searchContext);
	}

	/**
	 * @param      cpDefinitionOptionValueRelId
	 * @param      nameMap
	 * @param      priority
	 * @param      key
	 * @param      cpInstanceId
	 * @param      quantity
	 * @param      price
	 * @param      serviceContext
	 * @return
	 *
	 * @throws     PortalException
	 * @deprecated As of Athanasius (7.3.x), use {@link
	 *             #updateCPDefinitionOptionValueRel(long, Map, double, String,
	 *             long, int, boolean, BigDecimal, ServiceContext)}
	 */
	@Deprecated
	@Override
	public CPDefinitionOptionValueRel updateCPDefinitionOptionValueRel(
			long cpDefinitionOptionValueRelId, Map nameMap,
			double priority, String key, long cpInstanceId, int quantity,
			BigDecimal price, ServiceContext serviceContext)
		throws PortalException {

		return cpDefinitionOptionValueRelLocalService.
			updateCPDefinitionOptionValueRel(
				cpDefinitionOptionValueRelId, nameMap, priority, key,
				cpInstanceId, quantity, false, price, serviceContext);
	}

	@Indexable(type = IndexableType.REINDEX)
	@Override
	public CPDefinitionOptionValueRel updateCPDefinitionOptionValueRel(
			long cpDefinitionOptionValueRelId, Map nameMap,
			double priority, String key, long cpInstanceId, int quantity,
			boolean preselected, BigDecimal price,
			ServiceContext serviceContext)
		throws PortalException {

		// Commerce product definition option value rel

		CPDefinitionOptionValueRel cpDefinitionOptionValueRel =
			cpDefinitionOptionValueRelPersistence.findByPrimaryKey(
				cpDefinitionOptionValueRelId);

		key = FriendlyURLNormalizerUtil.normalize(key);

		validate(
			cpDefinitionOptionValueRel.getCPDefinitionOptionValueRelId(),
			cpDefinitionOptionValueRel.getCPDefinitionOptionRelId(), key);

		CPDefinitionOptionRel cpDefinitionOptionRel =
			cpDefinitionOptionValueRel.getCPDefinitionOptionRel();

		if (cpDefinitionLocalService.isVersionable(
				cpDefinitionOptionRel.getCPDefinitionId(),
				serviceContext.getRequest())) {

			CPDefinition newCPDefinition =
				cpDefinitionLocalService.copyCPDefinition(
					cpDefinitionOptionRel.getCPDefinitionId());

			cpDefinitionOptionRel = cpDefinitionOptionRelPersistence.findByC_C(
				newCPDefinition.getCPDefinitionId(),
				cpDefinitionOptionRel.getCPOptionId());

			cpDefinitionOptionValueRel =
				cpDefinitionOptionValueRelPersistence.findByC_K(
					cpDefinitionOptionRel.getCPDefinitionOptionRelId(),
					cpDefinitionOptionValueRel.getKey());
		}

		cpDefinitionOptionValueRel.setNameMap(nameMap);
		cpDefinitionOptionValueRel.setPriority(priority);
		cpDefinitionOptionValueRel.setKey(key);
		cpDefinitionOptionValueRel.setExpandoBridgeAttributes(serviceContext);

		_updateCPDefinitionOptionValueRelCPInstance(
			cpDefinitionOptionValueRel, cpInstanceId);

		if (cpDefinitionOptionRel.isPriceTypeStatic()) {
			cpDefinitionOptionValueRel.setPrice(price);
		}

		cpDefinitionOptionValueRel.setQuantity(quantity);

		_validateLinkedCPDefinitionOptionValueRel(cpDefinitionOptionValueRel);
		_validatePriceableCPDefinitionOptionValue(
			cpDefinitionOptionValueRel, cpDefinitionOptionRel.getPriceType());

		cpDefinitionOptionValueRel =
			cpDefinitionOptionValueRelPersistence.update(
				cpDefinitionOptionValueRel);

		if (preselected) {
			cpDefinitionOptionValueRel =
				updateCPDefinitionOptionValueRelPreselected(
					cpDefinitionOptionValueRel.
						getCPDefinitionOptionValueRelId(),
					preselected);
		}

		// Commerce product definition

		reindexCPDefinition(cpDefinitionOptionRel);

		return cpDefinitionOptionValueRel;
	}

	/**
	 * @param      cpDefinitionOptionValueRelId
	 * @param      nameMap
	 * @param      priority
	 * @param      key
	 * @param      serviceContext
	 * @return
	 *
	 * @throws     PortalException
	 * @deprecated As of Athanasius (7.3.x), use {@link
	 *             #updateCPDefinitionOptionValueRel(long, Map, double, String,
	 *             long, int, boolean, BigDecimal, ServiceContext)}
	 */
	@Deprecated
	@Override
	public CPDefinitionOptionValueRel updateCPDefinitionOptionValueRel(
			long cpDefinitionOptionValueRelId, Map nameMap,
			double priority, String key, ServiceContext serviceContext)
		throws PortalException {

		return cpDefinitionOptionValueRelLocalService.
			updateCPDefinitionOptionValueRel(
				cpDefinitionOptionValueRelId, nameMap, priority, key, 0, 0,
				false, null, serviceContext);
	}

	@Override
	public CPDefinitionOptionValueRel
		updateCPDefinitionOptionValueRelPreselected(
			long cpDefinitionOptionValueRelId, boolean preselected) {

		CPDefinitionOptionValueRel cpDefinitionOptionValueRel =
			cpDefinitionOptionValueRelPersistence.fetchByPrimaryKey(
				cpDefinitionOptionValueRelId);

		if (!preselected) {
			cpDefinitionOptionValueRel.setPreselected(false);

			return cpDefinitionOptionValueRelPersistence.update(
				cpDefinitionOptionValueRel);
		}

		CPDefinitionOptionValueRel curPreselectedCPDefinitionOptionValueRel =
			fetchPreselectedCPDefinitionOptionValueRel(
				cpDefinitionOptionValueRel.getCPDefinitionOptionRelId());

		if (curPreselectedCPDefinitionOptionValueRel != null) {
			curPreselectedCPDefinitionOptionValueRel.setPreselected(false);

			cpDefinitionOptionValueRelPersistence.update(
				curPreselectedCPDefinitionOptionValueRel);
		}

		cpDefinitionOptionValueRel.setPreselected(true);

		return cpDefinitionOptionValueRelPersistence.update(
			cpDefinitionOptionValueRel);
	}

	protected SearchContext buildSearchContext(
		long companyId, long groupId, long cpDefinitionOptionRelId,
		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(_FIELD_KEY, keywords);
		attributes.put(Field.CONTENT, keywords);
		attributes.put(Field.ENTRY_CLASS_PK, keywords);
		attributes.put(Field.NAME, keywords);
		attributes.put("CPDefinitionOptionRelId", cpDefinitionOptionRelId);
		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 getCPDefinitionOptionValueRels(
			Hits hits)
		throws PortalException {

		List documents = hits.toList();

		List cpDefinitionOptionValueRels =
			new ArrayList<>(documents.size());

		for (Document document : documents) {
			long cpDefinitionOptionValueRelId = GetterUtil.getLong(
				document.get(Field.ENTRY_CLASS_PK));

			CPDefinitionOptionValueRel cpDefinitionOptionValueRel =
				fetchCPDefinitionOptionValueRel(cpDefinitionOptionValueRelId);

			if (cpDefinitionOptionValueRel == null) {
				cpDefinitionOptionValueRels = null;

				Indexer indexer =
					IndexerRegistryUtil.getIndexer(
						CPDefinitionOptionValueRel.class);

				long companyId = GetterUtil.getLong(
					document.get(Field.COMPANY_ID));

				indexer.delete(companyId, document.getUID());
			}
			else if (cpDefinitionOptionValueRels != null) {
				cpDefinitionOptionValueRels.add(cpDefinitionOptionValueRel);
			}
		}

		return cpDefinitionOptionValueRels;
	}

	protected void reindexCPDefinition(
			CPDefinitionOptionRel cpDefinitionOptionRel)
		throws PortalException {

		Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(
			CPDefinition.class);

		indexer.reindex(
			CPDefinition.class.getName(),
			cpDefinitionOptionRel.getCPDefinitionId());
	}

	protected BaseModelSearchResult searchCPOptions(
			SearchContext searchContext)
		throws PortalException {

		Indexer indexer =
			IndexerRegistryUtil.nullSafeGetIndexer(
				CPDefinitionOptionValueRel.class);

		for (int i = 0; i < 10; i++) {
			Hits hits = indexer.search(searchContext, _SELECTED_FIELD_NAMES);

			List cpDefinitionOptionValueRels =
				getCPDefinitionOptionValueRels(hits);

			if (cpDefinitionOptionValueRels != null) {
				return new BaseModelSearchResult<>(
					cpDefinitionOptionValueRels, hits.getLength());
			}
		}

		throw new SearchException(
			"Unable to fix the search index after 10 attempts");
	}

	protected void validate(
			long cpDefinitionOptionValueRelId, long cpDefinitionOptionRelId,
			String key)
		throws PortalException {

		CPDefinitionOptionValueRel cpDefinitionOptionValueRel =
			cpDefinitionOptionValueRelPersistence.fetchByC_K(
				cpDefinitionOptionRelId, key);

		if ((cpDefinitionOptionValueRel != null) &&
			(cpDefinitionOptionValueRel.getCPDefinitionOptionValueRelId() !=
				cpDefinitionOptionValueRelId)) {

			throw new CPDefinitionOptionValueRelKeyException();
		}
	}

	private void _addCPDefinitionOptionValueRel(
			long cpDefinitionOptionRelId, List cpOptionValues,
			ServiceContext serviceContext)
		throws PortalException {

		for (CPOptionValue cpOptionValue : cpOptionValues) {
			if (_hasCustomAttributes(cpOptionValue)) {
				ExpandoBridge expandoBridge = cpOptionValue.getExpandoBridge();

				serviceContext.setExpandoBridgeAttributes(
					expandoBridge.getAttributes());
			}
			else {
				serviceContext.setExpandoBridgeAttributes(
					Collections.emptyMap());
			}

			cpDefinitionOptionValueRelLocalService.
				addCPDefinitionOptionValueRel(
					cpDefinitionOptionRelId, cpOptionValue, serviceContext);
		}
	}

	private boolean _hasCustomAttributes(CPOptionValue cpOptionValue)
		throws PortalException {

		try {
			return CustomAttributesUtil.hasCustomAttributes(
				cpOptionValue.getCompanyId(), CPOptionValue.class.getName(),
				cpOptionValue.getCPOptionValueId(), null);
		}
		catch (Exception e) {
			throw new PortalException(e);
		}
	}

	private void _updateCPDefinitionOptionValueRelCPInstance(
			CPDefinitionOptionValueRel cpDefinitionOptionValueRel,
			long cpInstanceId)
		throws PortalException {

		if (cpInstanceId <= 0) {
			cpDefinitionOptionValueRel.setCPInstanceUuid(null);
			cpDefinitionOptionValueRel.setCProductId(0);

			return;
		}

		CPInstance cpInstance = cpInstanceLocalService.getCPInstance(
			cpInstanceId);

		cpDefinitionOptionValueRel.setCPInstanceUuid(
			cpInstance.getCPInstanceUuid());

		CPDefinition cpDefinition = cpInstance.getCPDefinition();

		cpDefinitionOptionValueRel.setCProductId(cpDefinition.getCProductId());
	}

	private void _validateLinkedCPDefinitionOptionValueRel(
			CPDefinitionOptionValueRel cpDefinitionOptionValueRel)
		throws PortalException {

		if (Validator.isNull(cpDefinitionOptionValueRel.getCPInstanceUuid()) ||
			(cpDefinitionOptionValueRel.getCProductId() == 0)) {

			return;
		}

		List cpDefinitionOptionValueRels =
			cpDefinitionOptionValueRelPersistence.findByCPDefinitionOptionRelId(
				cpDefinitionOptionValueRel.getCPDefinitionOptionRelId());

		for (CPDefinitionOptionValueRel curCPDefinitionOptionValueRel :
				cpDefinitionOptionValueRels) {

			if (cpDefinitionOptionValueRel.getCPDefinitionOptionValueRelId() ==
					curCPDefinitionOptionValueRel.
						getCPDefinitionOptionValueRelId()) {

				continue;
			}

			if (Objects.equals(
					cpDefinitionOptionValueRel.getCPInstanceUuid(),
					curCPDefinitionOptionValueRel.getCPInstanceUuid()) &&
				(cpDefinitionOptionValueRel.getCProductId() ==
					curCPDefinitionOptionValueRel.getCProductId()) &&
				(cpDefinitionOptionValueRel.getQuantity() ==
					curCPDefinitionOptionValueRel.getQuantity())) {

				throw new CPDefinitionOptionValueRelQuantityException();
			}
		}
	}

	private void _validatePriceableCPDefinitionOptionValue(
			CPDefinitionOptionValueRel cpDefinitionOptionValueRel,
			String priceType)
		throws PortalException {

		if (cpDefinitionOptionValueRel.isNew()) {
			return;
		}

		if (Validator.isNull(priceType)) {
			if (Validator.isNotNull(
					cpDefinitionOptionValueRel.getCPInstanceUuid()) ||
				(cpDefinitionOptionValueRel.getPrice() != null) ||
				(cpDefinitionOptionValueRel.getCProductId() != 0) ||
				(cpDefinitionOptionValueRel.getQuantity() != 0)) {

				throw new CPDefinitionOptionValueRelCPInstanceException();
			}

			return;
		}

		if (Objects.equals(
				priceType, CPConstants.PRODUCT_OPTION_PRICE_TYPE_STATIC) &&
			(cpDefinitionOptionValueRel.getPrice() == null)) {

			throw new CPDefinitionOptionValueRelPriceException();
		}

		CPInstance cpInstance = cpInstanceLocalService.fetchCProductInstance(
			cpDefinitionOptionValueRel.getCProductId(),
			cpDefinitionOptionValueRel.getCPInstanceUuid());

		if (((cpInstance == null) ||
			 (cpDefinitionOptionValueRel.getPrice() != null)) &&
			Objects.equals(
				priceType, CPConstants.PRODUCT_OPTION_PRICE_TYPE_DYNAMIC)) {

			throw new CPDefinitionOptionValueRelCPInstanceException();
		}

		if (cpInstance == null) {
			return;
		}

		if (cpDefinitionOptionRelLocalService.
				hasCPDefinitionRequiredCPDefinitionOptionRels(
					cpInstance.getCPDefinitionId()) ||
			(cpInstance.getCPSubscriptionInfo() != null)) {

			throw new CPDefinitionOptionValueRelCPInstanceException();
		}

		if (cpDefinitionOptionValueRel.getQuantity() <= 0) {
			throw new CPDefinitionOptionValueRelQuantityException();
		}

		if (!cpInstance.isApproved()) {
			throw new CPDefinitionOptionValueRelCPInstanceException();
		}

		if (cpDefinitionLocalService.hasChildCPDefinitions(
				cpInstance.getCPDefinitionId())) {

			throw new CPDefinitionOptionValueRelCPInstanceException();
		}
	}

	private static final String _FIELD_KEY = "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