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

com.liferay.headless.delivery.internal.resource.v1_0.KnowledgeBaseFolderResourceImpl Maven / Gradle / Ivy

The newest version!
/**
 * 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.headless.delivery.internal.resource.v1_0;

import com.liferay.headless.common.spi.service.context.ServiceContextBuilder;
import com.liferay.headless.delivery.dto.v1_0.KnowledgeBaseFolder;
import com.liferay.headless.delivery.dto.v1_0.util.CreatorUtil;
import com.liferay.headless.delivery.internal.dto.v1_0.util.ParentKnowledgeBaseFolderUtil;
import com.liferay.headless.delivery.resource.v1_0.KnowledgeBaseFolderResource;
import com.liferay.knowledge.base.constants.KBActionKeys;
import com.liferay.knowledge.base.constants.KBConstants;
import com.liferay.knowledge.base.constants.KBFolderConstants;
import com.liferay.knowledge.base.model.KBFolder;
import com.liferay.knowledge.base.service.KBArticleService;
import com.liferay.knowledge.base.service.KBFolderLocalService;
import com.liferay.knowledge.base.service.KBFolderService;
import com.liferay.portal.kernel.security.permission.ActionKeys;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.service.UserLocalService;
import com.liferay.portal.kernel.util.HashMapBuilder;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.vulcan.custom.field.CustomFieldsUtil;
import com.liferay.portal.vulcan.dto.converter.DefaultDTOConverterContext;
import com.liferay.portal.vulcan.pagination.Page;
import com.liferay.portal.vulcan.pagination.Pagination;

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

/**
 * @author Javier Gamarra
 */
@Component(
	properties = "OSGI-INF/liferay/rest/v1_0/knowledge-base-folder.properties",
	scope = ServiceScope.PROTOTYPE, service = KnowledgeBaseFolderResource.class
)
public class KnowledgeBaseFolderResourceImpl
	extends BaseKnowledgeBaseFolderResourceImpl {

	@Override
	public void deleteKnowledgeBaseFolder(Long knowledgeBaseFolderId)
		throws Exception {

		_kbFolderService.deleteKBFolder(knowledgeBaseFolderId);
	}

	@Override
	public void deleteSiteKnowledgeBaseFolderByExternalReferenceCode(
			Long siteId, String externalReferenceCode)
		throws Exception {

		KBFolder kbFolder =
			_kbFolderLocalService.getKBFolderByExternalReferenceCode(
				externalReferenceCode, siteId);

		_kbFolderService.deleteKBFolder(kbFolder.getKbFolderId());
	}

	@Override
	public KnowledgeBaseFolder getKnowledgeBaseFolder(
			Long knowledgeBaseFolderId)
		throws Exception {

		return _toKnowledgeBaseFolder(
			_kbFolderService.getKBFolder(knowledgeBaseFolderId));
	}

	@Override
	public Page
			getKnowledgeBaseFolderKnowledgeBaseFoldersPage(
				Long parentKnowledgeBaseFolderId, Pagination pagination)
		throws Exception {

		KBFolder kbFolder = _kbFolderService.getKBFolder(
			parentKnowledgeBaseFolderId);

		return Page.of(
			HashMapBuilder.put(
				"create",
				addAction(
					KBActionKeys.ADD_KB_FOLDER,
					"postKnowledgeBaseFolderKnowledgeBaseFolder",
					KBConstants.RESOURCE_NAME_ADMIN, kbFolder.getGroupId())
			).put(
				"get",
				addAction(
					ActionKeys.VIEW,
					"getKnowledgeBaseFolderKnowledgeBaseFoldersPage",
					KBConstants.RESOURCE_NAME_ADMIN, kbFolder.getGroupId())
			).build(),
			transform(
				_kbFolderService.getKBFolders(
					kbFolder.getGroupId(), parentKnowledgeBaseFolderId,
					pagination.getStartPosition(), pagination.getEndPosition()),
				this::_toKnowledgeBaseFolder),
			pagination,
			_kbFolderService.getKBFoldersCount(
				kbFolder.getGroupId(), parentKnowledgeBaseFolderId));
	}

	@Override
	public KnowledgeBaseFolder
			getSiteKnowledgeBaseFolderByExternalReferenceCode(
				Long siteId, String externalReferenceCode)
		throws Exception {

		return _toKnowledgeBaseFolder(
			_kbFolderService.getKBFolderByExternalReferenceCode(
				siteId, externalReferenceCode));
	}

	@Override
	public Page getSiteKnowledgeBaseFoldersPage(
			Long siteId, Pagination pagination)
		throws Exception {

		return Page.of(
			HashMapBuilder.put(
				"create",
				addAction(
					KBActionKeys.ADD_KB_FOLDER, "postSiteKnowledgeBaseFolder",
					KBConstants.RESOURCE_NAME_ADMIN, siteId)
			).put(
				"createBatch",
				addAction(
					KBActionKeys.ADD_KB_FOLDER,
					"postSiteKnowledgeBaseFolderBatch",
					KBConstants.RESOURCE_NAME_ADMIN, siteId)
			).put(
				"deleteBatch",
				addAction(
					KBActionKeys.DELETE, "deleteKnowledgeBaseFolderBatch",
					KBConstants.RESOURCE_NAME_ADMIN, null)
			).put(
				"get",
				addAction(
					ActionKeys.VIEW, "getSiteKnowledgeBaseFoldersPage",
					KBConstants.RESOURCE_NAME_ADMIN, siteId)
			).put(
				"updateBatch",
				addAction(
					KBActionKeys.UPDATE, "putKnowledgeBaseFolderBatch",
					KBConstants.RESOURCE_NAME_ADMIN, null)
			).build(),
			transform(
				_kbFolderService.getKBFolders(
					siteId, 0, pagination.getStartPosition(),
					pagination.getEndPosition()),
				this::_toKnowledgeBaseFolder),
			pagination, _kbFolderService.getKBFoldersCount(siteId, 0));
	}

	@Override
	public KnowledgeBaseFolder postKnowledgeBaseFolderKnowledgeBaseFolder(
			Long parentKnowledgeBaseFolderId,
			KnowledgeBaseFolder knowledgeBaseFolder)
		throws Exception {

		KBFolder parentKBFolder = _kbFolderService.getKBFolder(
			parentKnowledgeBaseFolderId);

		return _addKnowledgeBaseFolder(
			knowledgeBaseFolder.getExternalReferenceCode(),
			parentKBFolder.getGroupId(), parentKnowledgeBaseFolderId,
			knowledgeBaseFolder);
	}

	@Override
	public KnowledgeBaseFolder postSiteKnowledgeBaseFolder(
			Long siteId, KnowledgeBaseFolder knowledgeBaseFolder)
		throws Exception {

		return _addKnowledgeBaseFolder(
			knowledgeBaseFolder.getExternalReferenceCode(), siteId, null,
			knowledgeBaseFolder);
	}

	@Override
	public KnowledgeBaseFolder putKnowledgeBaseFolder(
			Long knowledgeBaseFolderId, KnowledgeBaseFolder knowledgeBaseFolder)
		throws Exception {

		return _updateKnowledgeBaseFolder(
			_kbFolderLocalService.getKBFolder(knowledgeBaseFolderId),
			knowledgeBaseFolder);
	}

	@Override
	public KnowledgeBaseFolder
			putSiteKnowledgeBaseFolderByExternalReferenceCode(
				Long siteId, String externalReferenceCode,
				KnowledgeBaseFolder knowledgeBaseFolder)
		throws Exception {

		KBFolder kbFolder =
			_kbFolderLocalService.fetchKBFolderByExternalReferenceCode(
				externalReferenceCode, siteId);

		if (kbFolder != null) {
			return _updateKnowledgeBaseFolder(kbFolder, knowledgeBaseFolder);
		}

		return _addKnowledgeBaseFolder(
			externalReferenceCode, siteId,
			knowledgeBaseFolder.getParentKnowledgeBaseFolderId(),
			knowledgeBaseFolder);
	}

	@Override
	protected Long getPermissionCheckerGroupId(Object id) throws Exception {
		KBFolder kbFolder = _kbFolderService.getKBFolder((Long)id);

		return kbFolder.getGroupId();
	}

	@Override
	protected String getPermissionCheckerPortletName(Object id) {
		return KBConstants.RESOURCE_NAME_ADMIN;
	}

	@Override
	protected String getPermissionCheckerResourceName(Object id) {
		return KBFolder.class.getName();
	}

	private KnowledgeBaseFolder _addKnowledgeBaseFolder(
			String externalReferenceCode, long groupId,
			Long parentResourcePrimKey, KnowledgeBaseFolder knowledgeBaseFolder)
		throws Exception {

		if (parentResourcePrimKey == null) {
			parentResourcePrimKey = KBFolderConstants.DEFAULT_PARENT_FOLDER_ID;
		}

		return _toKnowledgeBaseFolder(
			_kbFolderService.addKBFolder(
				externalReferenceCode, groupId, _getClassNameId(),
				parentResourcePrimKey, knowledgeBaseFolder.getName(),
				knowledgeBaseFolder.getDescription(),
				_createServiceContext(
					groupId, knowledgeBaseFolder,
					knowledgeBaseFolder.getViewableByAsString())));
	}

	private ServiceContext _createServiceContext(
		long groupId, KnowledgeBaseFolder knowledgeBaseFolder,
		String viewableBy) {

		return ServiceContextBuilder.create(
			groupId, contextHttpServletRequest, viewableBy
		).expandoBridgeAttributes(
			CustomFieldsUtil.toMap(
				KBFolder.class.getName(), contextCompany.getCompanyId(),
				knowledgeBaseFolder.getCustomFields(),
				contextAcceptLanguage.getPreferredLocale())
		).build();
	}

	private long _getClassNameId() {
		return _portal.getClassNameId(KBFolder.class.getName());
	}

	private KnowledgeBaseFolder _toKnowledgeBaseFolder(KBFolder kbFolder)
		throws Exception {

		if (kbFolder == null) {
			return null;
		}

		return new KnowledgeBaseFolder() {
			{
				setActions(
					() -> HashMapBuilder.put(
						"delete",
						addAction(
							ActionKeys.DELETE, kbFolder,
							"deleteKnowledgeBaseFolder")
					).put(
						"get",
						addAction(
							ActionKeys.VIEW, kbFolder, "getKnowledgeBaseFolder")
					).put(
						"replace",
						addAction(
							ActionKeys.UPDATE, kbFolder,
							"putKnowledgeBaseFolder")
					).build());
				setCreator(
					() -> CreatorUtil.toCreator(
						new DefaultDTOConverterContext(
							null, null, null, contextUriInfo, null),
						_portal,
						_userLocalService.fetchUser(kbFolder.getUserId())));
				setCustomFields(
					() -> CustomFieldsUtil.toCustomFields(
						contextAcceptLanguage.isAcceptAllLanguages(),
						KBFolder.class.getName(), kbFolder.getKbFolderId(),
						kbFolder.getCompanyId(),
						contextAcceptLanguage.getPreferredLocale()));
				setDateCreated(kbFolder::getCreateDate);
				setDateModified(kbFolder::getModifiedDate);
				setDescription(kbFolder::getDescription);
				setExternalReferenceCode(kbFolder::getExternalReferenceCode);
				setId(kbFolder::getKbFolderId);
				setName(kbFolder::getName);
				setNumberOfKnowledgeBaseArticles(
					() -> _kbArticleService.getKBArticlesCount(
						kbFolder.getGroupId(), kbFolder.getKbFolderId(), 0));
				setNumberOfKnowledgeBaseFolders(
					() -> _kbFolderService.getKBFoldersCount(
						kbFolder.getGroupId(), kbFolder.getKbFolderId()));
				setParentKnowledgeBaseFolder(
					() ->
						ParentKnowledgeBaseFolderUtil.
							toParentKnowledgeBaseFolder(
								kbFolder.getParentKBFolder()));
				setSiteId(kbFolder::getGroupId);
			}
		};
	}

	private KnowledgeBaseFolder _updateKnowledgeBaseFolder(
			KBFolder kbFolder, KnowledgeBaseFolder knowledgeBaseFolder)
		throws Exception {

		return _toKnowledgeBaseFolder(
			_kbFolderService.updateKBFolder(
				_getClassNameId(), kbFolder.getParentKBFolderId(),
				kbFolder.getKbFolderId(), knowledgeBaseFolder.getName(),
				knowledgeBaseFolder.getDescription(),
				_createServiceContext(0, knowledgeBaseFolder, null)));
	}

	@Reference
	private KBArticleService _kbArticleService;

	@Reference
	private KBFolderLocalService _kbFolderLocalService;

	@Reference
	private KBFolderService _kbFolderService;

	@Reference
	private Portal _portal;

	@Reference
	private UserLocalService _userLocalService;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy