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

com.liferay.commerce.internal.object.deployer.ObjectDefinitionDeployerImpl Maven / Gradle / Ivy

/**
 * 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.internal.object.deployer;

import com.liferay.account.model.AccountEntry;
import com.liferay.commerce.constants.CommerceDefinitionTermConstants;
import com.liferay.commerce.currency.model.CommerceMoneyFactory;
import com.liferay.commerce.internal.notification.term.evaluator.CommerceOrderAccountNotificationTermEvaluator;
import com.liferay.commerce.internal.notification.term.evaluator.CommerceOrderAddressNotificationTermEvaluator;
import com.liferay.commerce.internal.notification.term.evaluator.CommerceOrderItemsNotificationTermEvaluator;
import com.liferay.commerce.internal.notification.term.evaluator.SalesAgentNotificationTermEvaluator;
import com.liferay.commerce.internal.notification.term.provider.CommerceOrderAccountNotificationTermProvider;
import com.liferay.commerce.internal.notification.term.provider.CommerceOrderAddressNotificationTermProvider;
import com.liferay.commerce.internal.notification.term.provider.CommerceOrderItemsNotificationTermProvider;
import com.liferay.commerce.internal.notification.term.provider.SalesAgentNotificationTermProvider;
import com.liferay.commerce.internal.notification.type.ObjectDefinitionCommerceNotificationType;
import com.liferay.commerce.internal.order.term.contributor.ObjectCommerceDefinitionTermContributor;
import com.liferay.commerce.internal.order.term.contributor.ObjectRecipientCommerceDefinitionTermContributor;
import com.liferay.commerce.media.CommerceMediaResolver;
import com.liferay.commerce.notification.type.CommerceNotificationType;
import com.liferay.commerce.order.CommerceDefinitionTermContributor;
import com.liferay.commerce.price.CommerceOrderPriceCalculation;
import com.liferay.commerce.product.service.CPDefinitionLocalService;
import com.liferay.commerce.product.service.CPInstanceUnitOfMeasureLocalService;
import com.liferay.commerce.product.util.CPInstanceHelper;
import com.liferay.commerce.service.CommerceOrderLocalService;
import com.liferay.commerce.util.CommerceOrderItemQuantityFormatter;
import com.liferay.notification.term.evaluator.NotificationTermEvaluator;
import com.liferay.notification.term.provider.NotificationTermProvider;
import com.liferay.object.constants.ObjectDefinitionConstants;
import com.liferay.object.deployer.ObjectDefinitionDeployer;
import com.liferay.object.model.ObjectDefinition;
import com.liferay.object.service.ObjectFieldLocalService;
import com.liferay.portal.kernel.language.Language;
import com.liferay.portal.kernel.security.permission.PermissionCheckerFactory;
import com.liferay.portal.kernel.security.permission.resource.ModelResourcePermission;
import com.liferay.portal.kernel.service.CompanyLocalService;
import com.liferay.portal.kernel.service.RoleLocalService;
import com.liferay.portal.kernel.service.UserGroupLocalService;
import com.liferay.portal.kernel.service.UserLocalService;
import com.liferay.portal.kernel.util.HashMapDictionaryBuilder;
import com.liferay.portal.kernel.util.StringUtil;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferencePolicy;
import org.osgi.service.component.annotations.ReferencePolicyOption;

/**
 * @author Marco Leo
 */
@Component(service = ObjectDefinitionDeployer.class)
public class ObjectDefinitionDeployerImpl implements ObjectDefinitionDeployer {

	@Override
	public List> deploy(
		ObjectDefinition objectDefinition) {

		if (StringUtil.equalsIgnoreCase(
				"CommerceOrder", objectDefinition.getShortName())) {

			return Arrays.asList(
				_bundleContext.registerService(
					NotificationTermEvaluator.class,
					new CommerceOrderAccountNotificationTermEvaluator(
						_commerceOrderLocalService, objectDefinition),
					HashMapDictionaryBuilder.put(
						"class.name", objectDefinition.getClassName()
					).build()),
				_bundleContext.registerService(
					NotificationTermEvaluator.class,
					new CommerceOrderAddressNotificationTermEvaluator(
						_commerceOrderLocalService, objectDefinition),
					HashMapDictionaryBuilder.put(
						"class.name", objectDefinition.getClassName()
					).build()),
				_bundleContext.registerService(
					NotificationTermEvaluator.class,
					new CommerceOrderItemsNotificationTermEvaluator(
						_commerceMediaResolver, _commerceMoneyFactory,
						_commerceOrderItemQuantityFormatter,
						_commerceOrderLocalService,
						_commerceOrderPriceCalculation, _companyLocalService,
						_cpDefinitionLocalService,
						_cpInstanceUnitOfMeasureLocalService, _cpInstanceHelper,
						_language, objectDefinition, _userLocalService),
					HashMapDictionaryBuilder.put(
						"class.name", objectDefinition.getClassName()
					).build()),
				_bundleContext.registerService(
					NotificationTermEvaluator.class,
					new SalesAgentNotificationTermEvaluator(
						_accountEntryModelResourcePermission,
						_commerceOrderLocalService, objectDefinition,
						_permissionCheckerFactory, _roleLocalService,
						_userLocalService),
					HashMapDictionaryBuilder.put(
						"class.name", objectDefinition.getClassName()
					).build()),
				_bundleContext.registerService(
					NotificationTermProvider.class,
					new CommerceOrderAccountNotificationTermProvider(),
					HashMapDictionaryBuilder.put(
						"class.name", objectDefinition.getClassName()
					).build()),
				_bundleContext.registerService(
					NotificationTermProvider.class,
					new CommerceOrderAddressNotificationTermProvider(),
					HashMapDictionaryBuilder.put(
						"class.name", objectDefinition.getClassName()
					).build()),
				_bundleContext.registerService(
					NotificationTermProvider.class,
					new CommerceOrderItemsNotificationTermProvider(),
					HashMapDictionaryBuilder.put(
						"class.name", objectDefinition.getClassName()
					).build()),
				_bundleContext.registerService(
					NotificationTermProvider.class,
					new SalesAgentNotificationTermProvider(),
					HashMapDictionaryBuilder.put(
						"class.name", objectDefinition.getClassName()
					).build()));
		}

		if (objectDefinition.isUnmodifiableSystemObject() ||
			Objects.equals(
				objectDefinition.getScope(),
				ObjectDefinitionConstants.SCOPE_COMPANY)) {

			return Collections.emptyList();
		}

		return Arrays.asList(
			_bundleContext.registerService(
				CommerceNotificationType.class,
				new ObjectDefinitionCommerceNotificationType(
					"create", objectDefinition.getClassName() + "#create",
					objectDefinition.getShortName()),
				HashMapDictionaryBuilder.put(
					"commerce.notification.type.key",
					objectDefinition.getClassName() + "#create"
				).build()),
			_bundleContext.registerService(
				CommerceNotificationType.class,
				new ObjectDefinitionCommerceNotificationType(
					"delete", objectDefinition.getClassName() + "#delete",
					objectDefinition.getShortName()),
				HashMapDictionaryBuilder.put(
					"commerce.notification.type.key",
					objectDefinition.getClassName() + "#delete"
				).build()),
			_bundleContext.registerService(
				CommerceNotificationType.class,
				new ObjectDefinitionCommerceNotificationType(
					"update", objectDefinition.getClassName() + "#update",
					objectDefinition.getShortName()),
				HashMapDictionaryBuilder.put(
					"commerce.notification.type.key",
					objectDefinition.getClassName() + "#update"
				).build()),
			_bundleContext.registerService(
				CommerceDefinitionTermContributor.class,
				new ObjectCommerceDefinitionTermContributor(
					objectDefinition.getObjectDefinitionId(),
					_objectFieldLocalService, _userLocalService),
				HashMapDictionaryBuilder.put(
					"commerce.definition.term.contributor.key",
					CommerceDefinitionTermConstants.
						BODY_AND_SUBJECT_DEFINITION_TERMS_CONTRIBUTOR
				).put(
					"commerce.notification.type.key",
					new String[] {
						objectDefinition.getClassName() + "#create",
						objectDefinition.getClassName() + "#delete",
						objectDefinition.getClassName() + "#update"
					}
				).build()),
			_bundleContext.registerService(
				CommerceDefinitionTermContributor.class,
				new ObjectRecipientCommerceDefinitionTermContributor(
					objectDefinition.getObjectDefinitionId(),
					_objectFieldLocalService, _userGroupLocalService,
					_userLocalService),
				HashMapDictionaryBuilder.put(
					"commerce.definition.term.contributor.key",
					CommerceDefinitionTermConstants.
						RECIPIENT_DEFINITION_TERMS_CONTRIBUTOR
				).put(
					"commerce.notification.type.key",
					new String[] {
						objectDefinition.getClassName() + "#create",
						objectDefinition.getClassName() + "#delete",
						objectDefinition.getClassName() + "#update"
					}
				).build()));
	}

	@Activate
	protected void activate(BundleContext bundleContext) {
		_bundleContext = bundleContext;
	}

	@Reference(
		policy = ReferencePolicy.DYNAMIC,
		policyOption = ReferencePolicyOption.GREEDY,
		target = "(model.class.name=com.liferay.account.model.AccountEntry)"
	)
	private volatile ModelResourcePermission
		_accountEntryModelResourcePermission;

	private BundleContext _bundleContext;

	@Reference
	private CommerceMediaResolver _commerceMediaResolver;

	@Reference
	private CommerceMoneyFactory _commerceMoneyFactory;

	@Reference
	private CommerceOrderItemQuantityFormatter
		_commerceOrderItemQuantityFormatter;

	@Reference
	private CommerceOrderLocalService _commerceOrderLocalService;

	@Reference
	private CommerceOrderPriceCalculation _commerceOrderPriceCalculation;

	@Reference
	private CompanyLocalService _companyLocalService;

	@Reference
	private CPDefinitionLocalService _cpDefinitionLocalService;

	@Reference
	private CPInstanceHelper _cpInstanceHelper;

	@Reference
	private CPInstanceUnitOfMeasureLocalService
		_cpInstanceUnitOfMeasureLocalService;

	@Reference
	private Language _language;

	@Reference
	private ObjectFieldLocalService _objectFieldLocalService;

	@Reference
	private PermissionCheckerFactory _permissionCheckerFactory;

	@Reference
	private RoleLocalService _roleLocalService;

	@Reference
	private UserGroupLocalService _userGroupLocalService;

	@Reference
	private UserLocalService _userLocalService;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy