/** * 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.portal.workflow.kaleo.service.impl; import aQute.bnd.annotation.ProviderType; import com.liferay.exportimport.kernel.staging.StagingUtil; import com.liferay.portal.dao.orm.custom.sql.CustomSQLUtil; 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.ProjectionFactoryUtil; import com.liferay.portal.kernel.dao.orm.ProjectionList; 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.model.User; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.OrderByComparator; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.portal.workflow.kaleo.model.KaleoDefinitionVersion; import com.liferay.portal.workflow.kaleo.service.base.KaleoDefinitionVersionLocalServiceBaseImpl; import com.liferay.portal.workflow.kaleo.util.comparator.KaleoDefinitionVersionIdComparator; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; /** * @author InĂ¡cio Nery */ @ProviderType public class KaleoDefinitionVersionLocalServiceImpl extends KaleoDefinitionVersionLocalServiceBaseImpl { public KaleoDefinitionVersion addKaleoDefinitionVersion( String name, String title, String description, String content, String version, ServiceContext serviceContext) throws PortalException { // Kaleo definition version Date createDate = serviceContext.getCreateDate(new Date()); Date modifiedDate = serviceContext.getModifiedDate(new Date()); User user = userLocalService.getUser(serviceContext.getGuestOrUserId()); long kaleoDefinitionVersionId = counterLocalService.increment(); KaleoDefinitionVersion kaleoDefinitionVersion = kaleoDefinitionVersionPersistence.create(kaleoDefinitionVersionId); long groupId = StagingUtil.getLiveGroupId( serviceContext.getScopeGroupId()); kaleoDefinitionVersion.setGroupId(groupId); kaleoDefinitionVersion.setCompanyId(user.getCompanyId()); kaleoDefinitionVersion.setUserId(user.getUserId()); kaleoDefinitionVersion.setUserName(user.getFullName()); kaleoDefinitionVersion.setCreateDate(createDate); kaleoDefinitionVersion.setModifiedDate(modifiedDate); kaleoDefinitionVersion.setName(name); kaleoDefinitionVersion.setTitle(title); kaleoDefinitionVersion.setDescription(description); kaleoDefinitionVersion.setContent(content); kaleoDefinitionVersion.setVersion(version); int status = GetterUtil.getInteger( serviceContext.getAttribute("status"), WorkflowConstants.STATUS_APPROVED); kaleoDefinitionVersion.setStatus(status); kaleoDefinitionVersion.setStatusByUserId(user.getUserId()); kaleoDefinitionVersion.setStatusByUserName(user.getFullName()); kaleoDefinitionVersion.setStatusDate(modifiedDate); kaleoDefinitionVersionPersistence.update(kaleoDefinitionVersion); return kaleoDefinitionVersion; } @Override public KaleoDefinitionVersion deleteKaleoDefinitionVersion( long companyId, String name, String version) throws PortalException { return kaleoDefinitionVersionPersistence.removeByC_N_V( companyId, name, version); } @Override public KaleoDefinitionVersion fetchLatestKaleoDefinitionVersion( long companyId, String name, OrderByComparator<KaleoDefinitionVersion> orderByComparator) throws PortalException { KaleoDefinitionVersion kaleoDefinitionVersion = kaleoDefinitionVersionPersistence.fetchByC_N_Last( companyId, name, orderByComparator); return kaleoDefinitionVersion; } @Override public KaleoDefinitionVersion getKaleoDefinitionVersion( long companyId, String name, String version) throws PortalException { return kaleoDefinitionVersionPersistence.findByC_N_V( companyId, name, version); } @Override public List<KaleoDefinitionVersion> getKaleoDefinitionVersions( long companyId, int start, int end, OrderByComparator<KaleoDefinitionVersion> orderByComparator) { return kaleoDefinitionVersionPersistence.findByCompanyId( companyId, start, end, orderByComparator); } @Override public List<KaleoDefinitionVersion> getKaleoDefinitionVersions( long companyId, String name) throws PortalException { return kaleoDefinitionVersionPersistence.findByC_N(companyId, name); } @Override public List<KaleoDefinitionVersion> getKaleoDefinitionVersions( long companyId, String name, int start, int end, OrderByComparator<KaleoDefinitionVersion> orderByComparator) { return kaleoDefinitionVersionPersistence.findByC_N( companyId, name, start, end, orderByComparator); } @Override public int getKaleoDefinitionVersionsCount(long companyId) { return kaleoDefinitionVersionPersistence.countByCompanyId(companyId); } @Override public int getKaleoDefinitionVersionsCount(long companyId, String name) { return kaleoDefinitionVersionPersistence.countByC_N(companyId, name); } @Override public KaleoDefinitionVersion[] getKaleoDefinitionVersionsPrevAndNext( long companyId, String name, String version) throws PortalException { KaleoDefinitionVersion kaleoDefinitionVersion = kaleoDefinitionVersionPersistence.findByC_N_V( companyId, name, version); return kaleoDefinitionVersionPersistence.findByC_N_PrevAndNext( kaleoDefinitionVersion.getKaleoDefinitionVersionId(), companyId, name, new KaleoDefinitionVersionIdComparator(true)); } @Override public KaleoDefinitionVersion getLatestKaleoDefinitionVersion( long companyId, String name) throws PortalException { return kaleoDefinitionVersionPersistence.findByC_N_Last( companyId, name, null); } @Override public List<KaleoDefinitionVersion> getLatestKaleoDefinitionVersions( long companyId, String keywords, int status, int start, int end, OrderByComparator<KaleoDefinitionVersion> orderByComparator) { List<Long> kaleoDefinitionVersionIds = getKaleoDefinitionVersionIds( companyId, keywords, status); if (kaleoDefinitionVersionIds.isEmpty()) { return Collections.emptyList(); } DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass( KaleoDefinitionVersion.class, getClassLoader()); Property property = PropertyFactoryUtil.forName( "kaleoDefinitionVersionId"); dynamicQuery.add(property.in(kaleoDefinitionVersionIds)); return dynamicQuery(dynamicQuery, start, end, orderByComparator); } @Override public int getLatestKaleoDefinitionVersionsCount( long companyId, String keywords, int status) { List<Long> kaleoDefinitionVersionIds = getKaleoDefinitionVersionIds( companyId, keywords, status); return kaleoDefinitionVersionIds.size(); } @Override public void updateKaleoDefinitionVersionTitle( long companyId, String name, String version, String title) throws PortalException { KaleoDefinitionVersion kaleoDefinitionVersion = kaleoDefinitionVersionLocalService.getKaleoDefinitionVersion( companyId, name, version); kaleoDefinitionVersion.setTitle(title); kaleoDefinitionVersionPersistence.update(kaleoDefinitionVersion); } protected void addKeywordsCriterion( DynamicQuery dynamicQuery, String keywords) { if (Validator.isNull(keywords)) { return; } Junction junction = RestrictionsFactoryUtil.disjunction(); for (String keyword : CustomSQLUtil.keywords(keywords)) { junction.add(RestrictionsFactoryUtil.ilike("name", keyword)); junction.add(RestrictionsFactoryUtil.ilike("title", keyword)); } dynamicQuery.add(junction); } protected void addStatusCriterion(DynamicQuery dynamicQuery, int status) { if (status != WorkflowConstants.STATUS_ANY) { Junction junction = RestrictionsFactoryUtil.disjunction(); junction.add(RestrictionsFactoryUtil.eq("status", status)); dynamicQuery.add(junction); } } protected List<Long> getKaleoDefinitionVersionIds( long companyId, String keywords, int status) { List<Long> kaleoDefinitionVersionIds = new ArrayList<>(); DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass( KaleoDefinitionVersion.class, getClassLoader()); Property companyIdProperty = PropertyFactoryUtil.forName("companyId"); dynamicQuery.add(companyIdProperty.eq(companyId)); addKeywordsCriterion(dynamicQuery, keywords); addStatusCriterion(dynamicQuery, status); ProjectionList projectionList = ProjectionFactoryUtil.projectionList(); projectionList.add( ProjectionFactoryUtil.max("kaleoDefinitionVersionId")); projectionList.add(ProjectionFactoryUtil.groupProperty("name")); dynamicQuery.setProjection(projectionList); List<Object[]> results = dynamicQuery(dynamicQuery); for (Object[] result : results) { kaleoDefinitionVersionIds.add((Long)result[0]); } return kaleoDefinitionVersionIds; } }