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

com.liferay.object.service.impl.ObjectStateTransitionLocalServiceImpl 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.object.service.impl;

import com.liferay.object.model.ObjectState;
import com.liferay.object.model.ObjectStateFlow;
import com.liferay.object.model.ObjectStateTransition;
import com.liferay.object.model.ObjectStateTransitionModel;
import com.liferay.object.service.base.ObjectStateTransitionLocalServiceBaseImpl;
import com.liferay.portal.aop.AopService;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.security.auth.PrincipalThreadLocal;
import com.liferay.portal.kernel.service.UserLocalService;
import com.liferay.portal.kernel.util.ListUtil;

import java.util.List;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

/**
 * @author Marco Leo
 */
@Component(
	property = "model.class.name=com.liferay.object.model.ObjectStateTransition",
	service = AopService.class
)
public class ObjectStateTransitionLocalServiceImpl
	extends ObjectStateTransitionLocalServiceBaseImpl {

	@Override
	public ObjectStateTransition addObjectStateTransition(
			long userId, long objectStateFlowId, long sourceObjectStateId,
			long targetObjectStateId)
		throws PortalException {

		ObjectStateTransition objectStateTransition =
			createObjectStateTransition(counterLocalService.increment());

		User user = _userLocalService.getUser(userId);

		objectStateTransition.setCompanyId(user.getCompanyId());
		objectStateTransition.setUserId(user.getUserId());
		objectStateTransition.setUserName(user.getFullName());

		objectStateTransition.setObjectStateFlowId(objectStateFlowId);
		objectStateTransition.setSourceObjectStateId(sourceObjectStateId);
		objectStateTransition.setTargetObjectStateId(targetObjectStateId);

		return addObjectStateTransition(objectStateTransition);
	}

	@Override
	public void deleteObjectStateFlowObjectStateTransitions(
		long objectStateFlowId) {

		objectStateTransitionPersistence.removeByObjectStateFlowId(
			objectStateFlowId);
	}

	@Override
	public void deleteObjectStateObjectStateTransitions(long objectStateId) {
		objectStateTransitionPersistence.removeBySourceObjectStateId(
			objectStateId);

		objectStateTransitionPersistence.removeByTargetObjectStateId(
			objectStateId);
	}

	@Override
	public List getObjectStateFlowObjectStateTransitions(
		long objectStateFlowId) {

		return objectStateTransitionPersistence.findByObjectStateFlowId(
			objectStateFlowId);
	}

	@Override
	public List getObjectStateObjectStateTransitions(
		long objectStateId) {

		return objectStateTransitionPersistence.findBySourceObjectStateId(
			objectStateId);
	}

	@Override
	public void updateObjectStateTransitions(ObjectStateFlow objectStateFlow)
		throws PortalException {

		if (objectStateFlow == null) {
			return;
		}

		for (ObjectState objectState : objectStateFlow.getObjectStates()) {
			_updateObjectStateTransitions(
				objectState.getObjectStateId(),
				objectState.getObjectStateTransitions());
		}
	}

	private void _updateObjectStateTransitions(
			long objectStateId,
			List objectStateTransitions)
		throws PortalException {

		List persistedObjectStateTransitions =
			objectStateTransitionPersistence.findBySourceObjectStateId(
				objectStateId);

		if (persistedObjectStateTransitions.isEmpty()) {
			User user = _userLocalService.fetchUser(
				PrincipalThreadLocal.getUserId());

			for (ObjectStateTransition objectStateTransition :
					objectStateTransitions) {

				addObjectStateTransition(
					user.getUserId(),
					objectStateTransition.getObjectStateFlowId(),
					objectStateTransition.getSourceObjectStateId(),
					objectStateTransition.getTargetObjectStateId());
			}

			return;
		}

		if (objectStateTransitions.isEmpty()) {
			for (ObjectStateTransition objectStateTransition :
					persistedObjectStateTransitions) {

				objectStateTransitionPersistence.remove(
					objectStateTransition.getObjectStateTransitionId());
			}

			return;
		}

		List targetObjectStateIds = ListUtil.toList(
			objectStateTransitions,
			ObjectStateTransitionModel::getTargetObjectStateId);

		for (ObjectStateTransition objectStateTransition :
				persistedObjectStateTransitions) {

			if (!targetObjectStateIds.contains(
					objectStateTransition.getTargetObjectStateId())) {

				objectStateTransitionPersistence.remove(
					objectStateTransition.getObjectStateTransitionId());
			}
		}

		List persistedTargetObjectStateIds = ListUtil.toList(
			persistedObjectStateTransitions,
			ObjectStateTransitionModel::getTargetObjectStateId);

		for (ObjectStateTransition objectStateTransition :
				objectStateTransitions) {

			if (!persistedTargetObjectStateIds.contains(
					objectStateTransition.getTargetObjectStateId())) {

				User user = _userLocalService.fetchUser(
					PrincipalThreadLocal.getUserId());

				if (user == null) {
					return;
				}

				addObjectStateTransition(
					user.getUserId(),
					objectStateTransition.getObjectStateFlowId(),
					objectStateTransition.getSourceObjectStateId(),
					objectStateTransition.getTargetObjectStateId());
			}
		}
	}

	@Reference
	private UserLocalService _userLocalService;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy