/**
* 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 com.liferay.exportimport.kernel.staging.StagingUtil;
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.OrderByComparator;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.workflow.WorkflowException;
import com.liferay.portal.workflow.kaleo.definition.Definition;
import com.liferay.portal.workflow.kaleo.exception.NoSuchDefinitionException;
import com.liferay.portal.workflow.kaleo.model.KaleoDefinition;
import com.liferay.portal.workflow.kaleo.model.KaleoDefinitionVersion;
import com.liferay.portal.workflow.kaleo.service.base.KaleoDefinitionLocalServiceBaseImpl;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @author Brian Wing Shun Chan
*/
public class KaleoDefinitionLocalServiceImpl
extends KaleoDefinitionLocalServiceBaseImpl {
@Override
public void activateKaleoDefinition(
long kaleoDefinitionId, long startKaleoNodeId,
ServiceContext serviceContext)
throws PortalException {
// Kaleo definition
KaleoDefinition kaleoDefinition =
kaleoDefinitionPersistence.findByPrimaryKey(kaleoDefinitionId);
deactivatePreviousKaleoDefinition(
kaleoDefinition.getName(), serviceContext);
kaleoDefinition.setStartKaleoNodeId(startKaleoNodeId);
kaleoDefinition.setModifiedDate(new Date());
kaleoDefinition.setActive(true);
kaleoDefinitionPersistence.update(kaleoDefinition);
}
@Override
public void activateKaleoDefinition(
long kaleoDefinitionId, ServiceContext serviceContext)
throws PortalException {
// Kaleo definition
KaleoDefinition kaleoDefinition =
kaleoDefinitionPersistence.findByPrimaryKey(kaleoDefinitionId);
kaleoDefinition.setModifiedDate(new Date());
kaleoDefinition.setActive(true);
kaleoDefinitionPersistence.update(kaleoDefinition);
}
@Override
public void activateKaleoDefinition(
String name, int version, ServiceContext serviceContext)
throws PortalException {
// Kaleo definition
KaleoDefinition kaleoDefinition =
kaleoDefinitionPersistence.findByC_N_V(
serviceContext.getCompanyId(), name, version);
kaleoDefinition.setModifiedDate(new Date());
kaleoDefinition.setActive(true);
kaleoDefinitionPersistence.update(kaleoDefinition);
}
@Override
public KaleoDefinition addKaleoDefinition(
String name, String title, String description, String content,
int version, ServiceContext serviceContext)
throws PortalException {
// Kaleo definition
User user = userLocalService.getUser(serviceContext.getGuestOrUserId());
Date now = new Date();
long kaleoDefinitionId = counterLocalService.increment();
KaleoDefinition kaleoDefinition = kaleoDefinitionPersistence.create(
kaleoDefinitionId);
long groupId = StagingUtil.getLiveGroupId(
serviceContext.getScopeGroupId());
kaleoDefinition.setGroupId(groupId);
kaleoDefinition.setCompanyId(user.getCompanyId());
kaleoDefinition.setUserId(user.getUserId());
kaleoDefinition.setUserName(user.getFullName());
kaleoDefinition.setCreateDate(now);
kaleoDefinition.setModifiedDate(now);
kaleoDefinition.setName(name);
kaleoDefinition.setTitle(title);
kaleoDefinition.setDescription(description);
kaleoDefinition.setContent(content);
kaleoDefinition.setVersion(version);
kaleoDefinition.setActive(false);
kaleoDefinitionPersistence.update(kaleoDefinition);
// Kaleo definition version
kaleoDefinitionVersionLocalService.addKaleoDefinitionVersion(
name, title, description, content, getVersion(version),
serviceContext);
return kaleoDefinition;
}
@Override
public void deactivateKaleoDefinition(
String name, int version, ServiceContext serviceContext)
throws PortalException {
KaleoDefinition kaleoDefinition =
kaleoDefinitionPersistence.findByC_N_V(
serviceContext.getCompanyId(), name, version);
kaleoDefinition.setModifiedDate(new Date());
kaleoDefinition.setActive(false);
kaleoDefinitionPersistence.update(kaleoDefinition);
}
@Override
public void deleteCompanyKaleoDefinitions(long companyId) {
// Kaleo definitions
kaleoDefinitionPersistence.removeByCompanyId(companyId);
// Kaleo definition version
kaleoDefinitionVersionPersistence.removeByCompanyId(companyId);
// Kaleo condition
kaleoConditionLocalService.deleteCompanyKaleoConditions(companyId);
// Kaleo instances
kaleoInstanceLocalService.deleteCompanyKaleoInstances(companyId);
// Kaleo nodes
kaleoNodeLocalService.deleteCompanyKaleoNodes(companyId);
// Kaleo tasks
kaleoTaskLocalService.deleteCompanyKaleoTasks(companyId);
// Kaleo transitions
kaleoTransitionLocalService.deleteCompanyKaleoTransitions(companyId);
}
@Override
public void deleteKaleoDefinition(
String name, int version, ServiceContext serviceContext)
throws PortalException {
// Kaleo definition
KaleoDefinition kaleoDefinition = getKaleoDefinition(
name, version, serviceContext);
if (kaleoDefinition.isActive()) {
throw new WorkflowException(
"Cannot delete active workflow definition " +
kaleoDefinition.getKaleoDefinitionId());
}
if (kaleoDefinition.hasIncompleteKaleoInstances()) {
throw new WorkflowException(
"Cannot delete incomplete workflow definition " +
kaleoDefinition.getKaleoDefinitionId());
}
kaleoDefinitionPersistence.remove(kaleoDefinition);
// Kaleo definition version
List<KaleoDefinitionVersion> kaleoDefinitionVersions =
kaleoDefinitionVersionPersistence.findByC_N(
serviceContext.getCompanyId(), name);
for (KaleoDefinitionVersion kaleoDefinitionVersion :
kaleoDefinitionVersions) {
BigDecimal kaleoDefinitionVersionBigDecimal = new BigDecimal(
kaleoDefinitionVersion.getVersion());
int value1 = kaleoDefinitionVersionBigDecimal.compareTo(
new BigDecimal(version));
int value2 = kaleoDefinitionVersionBigDecimal.compareTo(
new BigDecimal(version + 1));
if ((value1 >= 0) && (value2 < 0)) {
kaleoDefinitionVersionPersistence.remove(
kaleoDefinitionVersion);
}
}
// Kaleo condition
kaleoConditionLocalService.deleteKaleoDefinitionKaleoCondition(
kaleoDefinition.getKaleoDefinitionId());
// Kaleo instances
kaleoInstanceLocalService.deleteKaleoDefinitionKaleoInstances(
kaleoDefinition.getKaleoDefinitionId());
// Kaleo nodes
kaleoNodeLocalService.deleteKaleoDefinitionKaleoNodes(
kaleoDefinition.getKaleoDefinitionId());
// Kaleo tasks
kaleoTaskLocalService.deleteKaleoDefinitionKaleoTasks(
kaleoDefinition.getKaleoDefinitionId());
// Kaleo transitions
kaleoTransitionLocalService.deleteKaleoDefinitionKaleoTransitions(
kaleoDefinition.getKaleoDefinitionId());
}
@Override
public KaleoDefinition fetchLatestKaleoDefinition(
String name, ServiceContext serviceContext)
throws PortalException {
List<KaleoDefinition> kaleoDefinitions =
kaleoDefinitionPersistence.findByC_N(
serviceContext.getCompanyId(), name, 0, 1);
if (kaleoDefinitions.isEmpty()) {
return null;
}
return kaleoDefinitions.get(0);
}
@Override
public KaleoDefinition getKaleoDefinition(
String name, int version, ServiceContext serviceContext)
throws PortalException {
return kaleoDefinitionPersistence.findByC_N_V(
serviceContext.getCompanyId(), name, version);
}
@Override
public List<KaleoDefinition> getKaleoDefinitions(
boolean active, int start, int end,
OrderByComparator<KaleoDefinition> orderByComparator,
ServiceContext serviceContext) {
return kaleoDefinitionPersistence.findByC_A(
serviceContext.getCompanyId(), active, start, end,
orderByComparator);
}
@Override
public List<KaleoDefinition> getKaleoDefinitions(
int start, int end,
OrderByComparator<KaleoDefinition> orderByComparator,
ServiceContext serviceContext) {
return kaleoDefinitionPersistence.findByCompanyId(
serviceContext.getCompanyId(), start, end, orderByComparator);
}
@Override
public List<KaleoDefinition> getKaleoDefinitions(
String name, boolean active, int start, int end,
OrderByComparator<KaleoDefinition> orderByComparator,
ServiceContext serviceContext) {
return kaleoDefinitionPersistence.findByC_N_A(
serviceContext.getCompanyId(), name, active, start, end,
orderByComparator);
}
@Override
public List<KaleoDefinition> getKaleoDefinitions(
String name, int start, int end,
OrderByComparator<KaleoDefinition> orderByComparator,
ServiceContext serviceContext) {
return kaleoDefinitionPersistence.findByC_N(
serviceContext.getCompanyId(), name, start, end, orderByComparator);
}
@Override
public int getKaleoDefinitionsCount(
boolean active, ServiceContext serviceContext) {
return kaleoDefinitionPersistence.countByC_A(
serviceContext.getCompanyId(), active);
}
@Override
public int getKaleoDefinitionsCount(ServiceContext serviceContext) {
return kaleoDefinitionPersistence.countByCompanyId(
serviceContext.getCompanyId());
}
@Override
public int getKaleoDefinitionsCount(
String name, boolean active, ServiceContext serviceContext) {
return kaleoDefinitionPersistence.countByC_N_A(
serviceContext.getCompanyId(), name, active);
}
@Override
public int getKaleoDefinitionsCount(
String name, ServiceContext serviceContext) {
return kaleoDefinitionPersistence.countByC_N(
serviceContext.getCompanyId(), name);
}
@Override
public KaleoDefinition getLatestKaleoDefinition(
String name, ServiceContext serviceContext)
throws PortalException {
KaleoDefinition kaleoDefinition = fetchLatestKaleoDefinition(
name, serviceContext);
if (kaleoDefinition == null) {
throw new NoSuchDefinitionException();
}
return kaleoDefinition;
}
@Override
public KaleoDefinition incrementKaleoDefinition(
Definition definition, String title, ServiceContext serviceContext)
throws PortalException {
KaleoDefinition kaleoDefinition = getLatestKaleoDefinition(
definition.getName(), serviceContext);
return addKaleoDefinition(
definition.getName(), title, definition.getDescription(),
definition.getContent(), kaleoDefinition.getVersion() + 1,
serviceContext);
}
@Override
public KaleoDefinition updateTitle(
String name, int version, String title,
ServiceContext serviceContext)
throws PortalException {
// Kaleo definition
KaleoDefinition kaleoDefinition =
kaleoDefinitionPersistence.findByC_N_V(
serviceContext.getCompanyId(), name, version);
kaleoDefinition.setTitle(title);
kaleoDefinitionPersistence.update(kaleoDefinition);
// Kaleo definition version
kaleoDefinitionVersionLocalService.updateKaleoDefinitionVersionTitle(
serviceContext.getCompanyId(), name, getVersion(version), title);
return kaleoDefinition;
}
protected void deactivatePreviousKaleoDefinition(
String name, ServiceContext serviceContext)
throws PortalException {
KaleoDefinition previousKaleoDefinition = fetchLatestKaleoDefinition(
name, serviceContext);
if (previousKaleoDefinition == null) {
return;
}
previousKaleoDefinition.setModifiedDate(new Date());
previousKaleoDefinition.setActive(false);
kaleoDefinitionPersistence.update(previousKaleoDefinition);
}
protected String getVersion(int version) {
return version + StringPool.PERIOD + 0;
}
}