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

com.liferay.knowledge.base.service.impl.KBTemplateLocalServiceImpl Maven / Gradle / Ivy

There is a newer version: 2.0.4
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.knowledge.base.service.impl;

import aQute.bnd.annotation.ProviderType;

import com.liferay.knowledge.base.constants.AdminActivityKeys;
import com.liferay.knowledge.base.exception.KBTemplateContentException;
import com.liferay.knowledge.base.exception.KBTemplateTitleException;
import com.liferay.knowledge.base.exception.NoSuchTemplateException;
import com.liferay.knowledge.base.model.KBTemplate;
import com.liferay.knowledge.base.service.base.KBTemplateLocalServiceBaseImpl;
import com.liferay.knowledge.base.util.KnowledgeBaseUtil;
import com.liferay.portal.kernel.dao.orm.Conjunction;
import com.liferay.portal.kernel.dao.orm.Criterion;
import com.liferay.portal.kernel.dao.orm.Disjunction;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.dao.orm.Junction;
import com.liferay.portal.kernel.dao.orm.Property;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.model.ResourceConstants;
import com.liferay.portal.kernel.model.SystemEventConstants;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.systemevent.SystemEvent;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author Peter Shin
 * @author Brian Wing Shun Chan
 */
@ProviderType
public class KBTemplateLocalServiceImpl extends KBTemplateLocalServiceBaseImpl {

	@Override
	public KBTemplate addKBTemplate(
			long userId, String title, String content,
			ServiceContext serviceContext)
		throws PortalException {

		// KB template

		User user = userLocalService.getUser(userId);
		long groupId = serviceContext.getScopeGroupId();
		Date now = new Date();

		validate(title, content);

		long kbTemplateId = counterLocalService.increment();

		KBTemplate kbTemplate = kbTemplatePersistence.create(kbTemplateId);

		kbTemplate.setUuid(serviceContext.getUuid());
		kbTemplate.setGroupId(groupId);
		kbTemplate.setCompanyId(user.getCompanyId());
		kbTemplate.setUserId(user.getUserId());
		kbTemplate.setUserName(user.getFullName());
		kbTemplate.setCreateDate(serviceContext.getCreateDate(now));
		kbTemplate.setModifiedDate(serviceContext.getModifiedDate(now));
		kbTemplate.setTitle(title);
		kbTemplate.setContent(content);

		kbTemplatePersistence.update(kbTemplate);

		// Resources

		resourceLocalService.addModelResources(kbTemplate, serviceContext);

		// Social

		JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();

		extraDataJSONObject.put("title", kbTemplate.getTitle());

		socialActivityLocalService.addActivity(
			userId, groupId, KBTemplate.class.getName(), kbTemplateId,
			AdminActivityKeys.ADD_KB_TEMPLATE, extraDataJSONObject.toString(),
			0);

		return kbTemplate;
	}

	@Override
	public void deleteGroupKBTemplates(long groupId) throws PortalException {
		List kbTemplates = kbTemplatePersistence.findByGroupId(
			groupId);

		for (KBTemplate kbTemplate : kbTemplates) {
			kbTemplateLocalService.deleteKBTemplate(kbTemplate);
		}
	}

	@Override
	@SystemEvent(
		action = SystemEventConstants.ACTION_SKIP,
		type = SystemEventConstants.TYPE_DELETE
	)
	public KBTemplate deleteKBTemplate(KBTemplate kbTemplate)
		throws PortalException {

		// KB template

		kbTemplatePersistence.remove(kbTemplate);

		// Resources

		resourceLocalService.deleteResource(
			kbTemplate.getCompanyId(), KBTemplate.class.getName(),
			ResourceConstants.SCOPE_INDIVIDUAL, kbTemplate.getKbTemplateId());

		// KB Comments

		kbCommentLocalService.deleteKBComments(
			KBTemplate.class.getName(), kbTemplate.getKbTemplateId());

		// Social

		socialActivityLocalService.deleteActivities(
			KBTemplate.class.getName(), kbTemplate.getKbTemplateId());

		return kbTemplate;
	}

	@Override
	public KBTemplate deleteKBTemplate(long kbTemplateId)
		throws PortalException {

		KBTemplate kbTemplate = kbTemplatePersistence.findByPrimaryKey(
			kbTemplateId);

		return kbTemplateLocalService.deleteKBTemplate(kbTemplate);
	}

	@Override
	public void deleteKBTemplates(long[] kbTemplateIds) throws PortalException {
		for (long kbTemplateId : kbTemplateIds) {
			KBTemplate kbTemplate = null;

			try {
				kbTemplate = kbTemplatePersistence.findByPrimaryKey(
					kbTemplateId);
			}
			catch (NoSuchTemplateException nste) {
				continue;
			}

			kbTemplateLocalService.deleteKBTemplate(kbTemplate);
		}
	}

	@Override
	public List getGroupKBTemplates(
		long groupId, int start, int end,
		OrderByComparator orderByComparator) {

		return kbTemplatePersistence.findByGroupId(
			groupId, start, end, orderByComparator);
	}

	@Override
	public int getGroupKBTemplatesCount(long groupId) {
		return kbTemplatePersistence.countByGroupId(groupId);
	}

	@Override
	public List search(
		long groupId, String title, String content, Date startDate,
		Date endDate, boolean andOperator, int start, int end,
		OrderByComparator orderByComparator) {

		DynamicQuery dynamicQuery = buildDynamicQuery(
			groupId, title, content, startDate, endDate, andOperator);

		return dynamicQuery(dynamicQuery, start, end, orderByComparator);
	}

	@Override
	public KBTemplate updateKBTemplate(
			long kbTemplateId, String title, String content,
			ServiceContext serviceContext)
		throws PortalException {

		// KB template

		validate(title, content);

		KBTemplate kbTemplate = kbTemplatePersistence.findByPrimaryKey(
			kbTemplateId);

		kbTemplate.setModifiedDate(serviceContext.getModifiedDate(null));
		kbTemplate.setTitle(title);
		kbTemplate.setContent(content);

		kbTemplatePersistence.update(kbTemplate);

		// Resources

		if ((serviceContext.getGroupPermissions() != null) ||
			(serviceContext.getGuestPermissions() != null)) {

			updateKBTemplateResources(
				kbTemplate, serviceContext.getGroupPermissions(),
				serviceContext.getGuestPermissions());
		}

		// Social

		JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();

		extraDataJSONObject.put("title", kbTemplate.getTitle());

		socialActivityLocalService.addActivity(
			kbTemplate.getUserId(), kbTemplate.getGroupId(),
			KBTemplate.class.getName(), kbTemplateId,
			AdminActivityKeys.UPDATE_KB_TEMPLATE,
			extraDataJSONObject.toString(), 0);

		return kbTemplate;
	}

	@Override
	public void updateKBTemplateResources(
			KBTemplate kbTemplate, String[] groupPermissions,
			String[] guestPermissions)
		throws PortalException {

		resourceLocalService.updateResources(
			kbTemplate.getCompanyId(), kbTemplate.getGroupId(),
			KBTemplate.class.getName(), kbTemplate.getKbTemplateId(),
			groupPermissions, guestPermissions);
	}

	protected DynamicQuery buildDynamicQuery(
		long groupId, String title, String content, Date startDate,
		Date endDate, boolean andOperator) {

		Junction junction = null;

		if (andOperator) {
			junction = RestrictionsFactoryUtil.conjunction();
		}
		else {
			junction = RestrictionsFactoryUtil.disjunction();
		}

		Map terms = new HashMap<>();

		if (Validator.isNotNull(title)) {
			terms.put("title", title);
		}

		if (Validator.isNotNull(content)) {
			terms.put("content", content);
		}

		for (Map.Entry entry : terms.entrySet()) {
			String key = entry.getKey();
			String value = entry.getValue();

			Disjunction disjunction = RestrictionsFactoryUtil.disjunction();

			for (String keyword : KnowledgeBaseUtil.splitKeywords(value)) {
				Criterion criterion = RestrictionsFactoryUtil.ilike(
					key, StringUtil.quote(keyword, StringPool.PERCENT));

				disjunction.add(criterion);
			}

			junction.add(disjunction);
		}

		if ((endDate != null) && (startDate != null)) {
			Disjunction disjunction = RestrictionsFactoryUtil.disjunction();

			String[] propertyNames = {"createDate", "modifiedDate"};

			for (String propertyName : propertyNames) {
				Property property = PropertyFactoryUtil.forName(propertyName);

				Conjunction conjunction = RestrictionsFactoryUtil.conjunction();

				conjunction.add(property.gt(startDate));
				conjunction.add(property.lt(endDate));

				disjunction.add(conjunction);
			}

			junction.add(disjunction);
		}

		DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(
			KBTemplate.class, getClassLoader());

		if (groupId > 0) {
			Property property = PropertyFactoryUtil.forName("groupId");

			dynamicQuery.add(property.eq(groupId));
		}

		return dynamicQuery.add(junction);
	}

	protected void validate(String title, String content)
		throws PortalException {

		if (Validator.isNull(title)) {
			throw new KBTemplateTitleException();
		}

		if (Validator.isNull(content)) {
			throw new KBTemplateContentException();
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy