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

com.liferay.object.internal.item.selector.SystemObjectEntryItemSelectorView 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.internal.item.selector;

import com.liferay.info.item.selector.InfoItemSelectorView;
import com.liferay.item.selector.ItemSelector;
import com.liferay.item.selector.ItemSelectorReturnType;
import com.liferay.item.selector.ItemSelectorView;
import com.liferay.item.selector.ItemSelectorViewDescriptor;
import com.liferay.item.selector.ItemSelectorViewDescriptorRenderer;
import com.liferay.item.selector.criteria.InfoItemItemSelectorReturnType;
import com.liferay.item.selector.criteria.info.item.criterion.InfoItemItemSelectorCriterion;
import com.liferay.layout.content.page.editor.constants.ContentPageEditorPortletKeys;
import com.liferay.object.entry.util.ObjectEntryDTOConverterUtil;
import com.liferay.object.entry.util.ObjectEntryValuesUtil;
import com.liferay.object.model.ObjectDefinition;
import com.liferay.object.model.ObjectField;
import com.liferay.object.related.models.ObjectRelatedModelsProvider;
import com.liferay.object.related.models.ObjectRelatedModelsProviderRegistry;
import com.liferay.object.service.ObjectDefinitionLocalService;
import com.liferay.object.service.ObjectFieldLocalService;
import com.liferay.object.system.SystemObjectDefinitionManagerRegistry;
import com.liferay.petra.string.StringBundler;
import com.liferay.petra.string.StringPool;
import com.liferay.portal.kernel.dao.search.SearchContainer;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.json.JSONUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.BaseModel;
import com.liferay.portal.kernel.security.auth.CompanyThreadLocal;
import com.liferay.portal.kernel.service.UserLocalService;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.JavaConstants;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.vulcan.dto.converter.DTOConverterRegistry;

import java.io.IOException;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import javax.portlet.PortletRequest;
import javax.portlet.PortletURL;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

/**
 * @author Gabriel Albuquerque
 * @author Marcela Cunha
 */
public class SystemObjectEntryItemSelectorView
	implements InfoItemSelectorView,
			   ItemSelectorView {

	public SystemObjectEntryItemSelectorView(
		DTOConverterRegistry dtoConverterRegistry, ItemSelector itemSelector,
		ItemSelectorViewDescriptorRenderer
			itemSelectorViewDescriptorRenderer,
		ObjectDefinition objectDefinition,
		ObjectDefinitionLocalService objectDefinitionLocalService,
		ObjectFieldLocalService objectFieldLocalService,
		ObjectRelatedModelsProviderRegistry objectRelatedModelsProviderRegistry,
		Portal portal,
		SystemObjectDefinitionManagerRegistry
			systemObjectDefinitionManagerRegistry,
		UserLocalService userLocalService) {

		_dtoConverterRegistry = dtoConverterRegistry;
		_itemSelector = itemSelector;
		_itemSelectorViewDescriptorRenderer =
			itemSelectorViewDescriptorRenderer;
		_objectDefinition = objectDefinition;
		_objectDefinitionLocalService = objectDefinitionLocalService;
		_objectFieldLocalService = objectFieldLocalService;
		_objectRelatedModelsProviderRegistry =
			objectRelatedModelsProviderRegistry;
		_portal = portal;
		_systemObjectDefinitionManagerRegistry =
			systemObjectDefinitionManagerRegistry;
		_userLocalService = userLocalService;
	}

	@Override
	public String getClassName() {
		return _objectDefinition.getClassName();
	}

	@Override
	public Class
		getItemSelectorCriterionClass() {

		return InfoItemItemSelectorCriterion.class;
	}

	@Override
	public List getSupportedItemSelectorReturnTypes() {
		return _supportedItemSelectorReturnTypes;
	}

	@Override
	public String getTitle(Locale locale) {
		return _objectDefinition.getPluralLabel(locale);
	}

	@Override
	public boolean isVisible(
		InfoItemItemSelectorCriterion itemSelectorCriterion,
		ThemeDisplay themeDisplay) {

		if (StringUtil.equals(
				_itemSelector.getItemSelectedEventName(
					themeDisplay.getURLCurrent()),
				StringBundler.concat(
					"_",
					ContentPageEditorPortletKeys.CONTENT_PAGE_EDITOR_PORTLET,
					"_selectInfoItem"))) {

			return false;
		}

		return true;
	}

	@Override
	public void renderHTML(
			ServletRequest servletRequest, ServletResponse servletResponse,
			InfoItemItemSelectorCriterion infoItemItemSelectorCriterion,
			PortletURL portletURL, String itemSelectedEventName, boolean search)
		throws IOException, ServletException {

		_itemSelectorViewDescriptorRenderer.renderHTML(
			servletRequest, servletResponse, infoItemItemSelectorCriterion,
			portletURL, itemSelectedEventName, search,
			new SystemObjectItemSelectorViewDescriptor(
				_dtoConverterRegistry, (HttpServletRequest)servletRequest,
				infoItemItemSelectorCriterion, _objectDefinition,
				_objectRelatedModelsProviderRegistry, portletURL,
				_systemObjectDefinitionManagerRegistry, _userLocalService));
	}

	private static final Log _log = LogFactoryUtil.getLog(
		SystemObjectEntryItemSelectorView.class);

	private static final List
		_supportedItemSelectorReturnTypes = Collections.singletonList(
			new InfoItemItemSelectorReturnType());

	private final DTOConverterRegistry _dtoConverterRegistry;
	private final ItemSelector _itemSelector;
	private final ItemSelectorViewDescriptorRenderer
		 _itemSelectorViewDescriptorRenderer;
	private final ObjectDefinition _objectDefinition;
	private final ObjectDefinitionLocalService _objectDefinitionLocalService;
	private final ObjectFieldLocalService _objectFieldLocalService;
	private final ObjectRelatedModelsProviderRegistry
		_objectRelatedModelsProviderRegistry;
	private final Portal _portal;
	private final SystemObjectDefinitionManagerRegistry
		_systemObjectDefinitionManagerRegistry;
	private final UserLocalService _userLocalService;

	private class SystemObjectEntryItemDescriptor
		implements ItemSelectorViewDescriptor.ItemDescriptor {

		public SystemObjectEntryItemDescriptor(
			BaseModel baseModel, DTOConverterRegistry dtoConverterRegistry,
			HttpServletRequest httpServletRequest,
			SystemObjectDefinitionManagerRegistry
				systemObjectDefinitionManagerRegistry,
			UserLocalService userLocalService) {

			_baseModel = baseModel;
			_dtoConverterRegistry = dtoConverterRegistry;
			_httpServletRequest = httpServletRequest;
			_systemObjectDefinitionManagerRegistry =
				systemObjectDefinitionManagerRegistry;
			_userLocalService = userLocalService;

			_themeDisplay = (ThemeDisplay)_httpServletRequest.getAttribute(
				WebKeys.THEME_DISPLAY);
		}

		@Override
		public String getIcon() {
			return null;
		}

		@Override
		public String getImageURL() {
			return null;
		}

		@Override
		public Date getModifiedDate() {
			Map modelAttributes =
				_baseModel.getModelAttributes();

			return (Date)modelAttributes.get("modifiedDate");
		}

		@Override
		public String getPayload() {
			return JSONUtil.put(
				"className", _objectDefinition.getClassName()
			).put(
				"classNameId",
				_portal.getClassNameId(_objectDefinition.getClassName())
			).put(
				"classPK", _baseModel.getPrimaryKeyObj()
			).put(
				"title",
				StringBundler.concat(
					_objectDefinition.getLabel(_themeDisplay.getLocale()),
					StringPool.SPACE, _getTitleFieldValue())
			).toString();
		}

		@Override
		public String getSubtitle(Locale locale) {
			return String.valueOf(_baseModel.getPrimaryKeyObj());
		}

		@Override
		public String getTitle(Locale locale) {
			return _getTitleFieldValue();
		}

		@Override
		public long getUserId() {
			Map modelAttributes =
				_baseModel.getModelAttributes();

			return (Long)modelAttributes.get("userId");
		}

		@Override
		public String getUserName() {
			Map modelAttributes =
				_baseModel.getModelAttributes();

			return _portal.getUserName(
				(Long)modelAttributes.get("userId"), StringPool.BLANK);
		}

		private String _getTitleFieldValue() {
			ObjectDefinition objectDefinition =
				_objectDefinitionLocalService.fetchObjectDefinition(
					_objectDefinition.getObjectDefinitionId());

			if (objectDefinition == null) {
				return StringPool.BLANK;
			}

			ObjectField objectField = _objectFieldLocalService.fetchObjectField(
				objectDefinition.getTitleObjectFieldId());

			if (objectField == null) {
				return StringPool.BLANK;
			}

			Object titleFieldValue = ObjectEntryValuesUtil.getTitleFieldValue(
				objectField.getBusinessType(), _baseModel.getModelAttributes(),
				objectField, _themeDisplay.getUser(),
				ObjectEntryDTOConverterUtil.toValues(
					_baseModel, _dtoConverterRegistry,
					_objectDefinition.getName(),
					_systemObjectDefinitionManagerRegistry,
					_themeDisplay.getUser()));

			if (titleFieldValue == null) {
				return StringPool.BLANK;
			}

			return titleFieldValue.toString();
		}

		private final BaseModel _baseModel;
		private final DTOConverterRegistry _dtoConverterRegistry;
		private final HttpServletRequest _httpServletRequest;
		private final SystemObjectDefinitionManagerRegistry
			_systemObjectDefinitionManagerRegistry;
		private final ThemeDisplay _themeDisplay;
		private final UserLocalService _userLocalService;

	}

	private class SystemObjectItemSelectorViewDescriptor
		implements ItemSelectorViewDescriptor> {

		public SystemObjectItemSelectorViewDescriptor(
			DTOConverterRegistry dtoConverterRegistry,
			HttpServletRequest httpServletRequest,
			InfoItemItemSelectorCriterion infoItemItemSelectorCriterion,
			ObjectDefinition objectDefinition,
			ObjectRelatedModelsProviderRegistry
				objectRelatedModelsProviderRegistry,
			PortletURL portletURL,
			SystemObjectDefinitionManagerRegistry
				systemObjectDefinitionManagerRegistry,
			UserLocalService userLocalService) {

			_dtoConverterRegistry = dtoConverterRegistry;
			_httpServletRequest = httpServletRequest;
			_infoItemItemSelectorCriterion = infoItemItemSelectorCriterion;
			_objectDefinition = objectDefinition;
			_objectRelatedModelsProviderRegistry =
				objectRelatedModelsProviderRegistry;
			_portletURL = portletURL;
			_systemObjectDefinitionManagerRegistry =
				systemObjectDefinitionManagerRegistry;
			_userLocalService = userLocalService;

			_portletRequest = (PortletRequest)httpServletRequest.getAttribute(
				JavaConstants.JAVAX_PORTLET_REQUEST);
			_themeDisplay = (ThemeDisplay)httpServletRequest.getAttribute(
				WebKeys.THEME_DISPLAY);
		}

		@Override
		public String getDefaultDisplayStyle() {
			return "descriptive";
		}

		@Override
		public ItemDescriptor getItemDescriptor(BaseModel baseModel) {
			return new SystemObjectEntryItemDescriptor(
				baseModel, _dtoConverterRegistry, _httpServletRequest,
				_systemObjectDefinitionManagerRegistry, _userLocalService);
		}

		@Override
		public ItemSelectorReturnType getItemSelectorReturnType() {
			return new InfoItemItemSelectorReturnType();
		}

		@Override
		public SearchContainer> getSearchContainer()
			throws PortalException {

			SearchContainer> searchContainer =
				new SearchContainer<>(
					_portletRequest, null, null, "cur",
					ParamUtil.getInteger(_portletRequest, "cur"),
					ParamUtil.getInteger(_portletRequest, "delta"), _portletURL,
					null, "no-entries-were-found");

			searchContainer.setResultsAndTotal(
				ArrayList::new, searchContainer.getEnd());

			String objectRelationshipType = ParamUtil.getString(
				_portletRequest, "objectRelationshipType");

			if (Validator.isNull(objectRelationshipType)) {
				return searchContainer;
			}

			try {
				ObjectRelatedModelsProvider objectRelatedModelsProvider =
					_objectRelatedModelsProviderRegistry.
						getObjectRelatedModelsProvider(
							_objectDefinition.getClassName(),
							CompanyThreadLocal.getCompanyId(),
							objectRelationshipType);

				List> baseModels =
					objectRelatedModelsProvider.getUnrelatedModels(
						_themeDisplay.getCompanyId(),
						_themeDisplay.getScopeGroupId(), _objectDefinition,
						ParamUtil.getLong(_portletRequest, "objectEntryId"),
						ParamUtil.getLong(
							_portletRequest, "objectRelationshipId"),
						searchContainer.getStart(), searchContainer.getEnd());

				searchContainer.setResultsAndTotal(
					() -> baseModels,
					objectRelatedModelsProvider.getUnrelatedModelsCount(
						_themeDisplay.getCompanyId(),
						_themeDisplay.getScopeGroupId(), _objectDefinition,
						ParamUtil.getLong(_portletRequest, "objectEntryId"),
						ParamUtil.getLong(
							_portletRequest, "objectRelationshipId")));
			}
			catch (Exception exception) {
				_log.error(exception);
			}

			return searchContainer;
		}

		@Override
		public boolean isMultipleSelection() {
			return _infoItemItemSelectorCriterion.isMultiSelection();
		}

		private final DTOConverterRegistry _dtoConverterRegistry;
		private final HttpServletRequest _httpServletRequest;
		private final InfoItemItemSelectorCriterion
			_infoItemItemSelectorCriterion;
		private final ObjectDefinition _objectDefinition;
		private final ObjectRelatedModelsProviderRegistry
			_objectRelatedModelsProviderRegistry;
		private final PortletRequest _portletRequest;
		private final PortletURL _portletURL;
		private final SystemObjectDefinitionManagerRegistry
			_systemObjectDefinitionManagerRegistry;
		private final ThemeDisplay _themeDisplay;
		private final UserLocalService _userLocalService;

	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy