/**
* 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.runtime.integration.impl.internal;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.Role;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.workflow.DefaultWorkflowDefinition;
import com.liferay.portal.kernel.workflow.DefaultWorkflowInstance;
import com.liferay.portal.kernel.workflow.DefaultWorkflowLog;
import com.liferay.portal.kernel.workflow.DefaultWorkflowTask;
import com.liferay.portal.kernel.workflow.WorkflowDefinition;
import com.liferay.portal.kernel.workflow.WorkflowInstance;
import com.liferay.portal.kernel.workflow.WorkflowLog;
import com.liferay.portal.kernel.workflow.WorkflowTask;
import com.liferay.portal.kernel.workflow.WorkflowTaskAssignee;
import com.liferay.portal.workflow.kaleo.KaleoWorkflowModelConverter;
import com.liferay.portal.workflow.kaleo.definition.export.DefinitionExporter;
import com.liferay.portal.workflow.kaleo.definition.util.KaleoLogUtil;
import com.liferay.portal.workflow.kaleo.model.KaleoDefinition;
import com.liferay.portal.workflow.kaleo.model.KaleoInstance;
import com.liferay.portal.workflow.kaleo.model.KaleoInstanceToken;
import com.liferay.portal.workflow.kaleo.model.KaleoLog;
import com.liferay.portal.workflow.kaleo.model.KaleoTaskInstanceToken;
import com.liferay.portal.workflow.kaleo.runtime.integration.impl.internal.util.LazyWorkflowTaskAssigneeList;
import com.liferay.portal.workflow.kaleo.runtime.integration.impl.internal.util.WorkflowTaskAssigneesSupplier;
import com.liferay.portal.workflow.kaleo.runtime.util.WorkflowContextUtil;
import com.liferay.portal.workflow.kaleo.service.KaleoDefinitionLocalService;
import com.liferay.portal.workflow.kaleo.service.KaleoDefinitionVersionLocalService;
import com.liferay.portal.workflow.kaleo.service.KaleoTaskAssignmentInstanceLocalService;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Shuyang Zhou
*/
@Component(immediate = true, service = KaleoWorkflowModelConverter.class)
public class KaleoWorkflowModelConverterImpl
implements KaleoWorkflowModelConverter {
@Override
public List<WorkflowTaskAssignee> getWorkflowTaskAssignees(
KaleoTaskInstanceToken kaleoTaskInstanceToken) {
WorkflowTaskAssigneesSupplier workflowTaskAssigneesSupplier =
new WorkflowTaskAssigneesSupplier(kaleoTaskInstanceToken);
return workflowTaskAssigneesSupplier.get();
}
@Override
public WorkflowDefinition toWorkflowDefinition(
KaleoDefinition kaleoDefinition) {
DefaultWorkflowDefinition defaultWorkflowDefinition =
new DefaultWorkflowDefinition();
defaultWorkflowDefinition.setActive(kaleoDefinition.getActive());
String content = kaleoDefinition.getContent();
if (Validator.isNull(content)) {
try {
content = _definitionExporter.export(
kaleoDefinition.getKaleoDefinitionId());
kaleoDefinition.setContent(content);
_kaleoDefinitionLocalService.updateKaleoDefinition(
kaleoDefinition);
}
catch (Exception e) {
if (_log.isWarnEnabled()) {
_log.warn("Unable to export definition to string", e);
}
}
}
defaultWorkflowDefinition.setContent(content);
defaultWorkflowDefinition.setName(kaleoDefinition.getName());
defaultWorkflowDefinition.setTitle(kaleoDefinition.getTitle());
defaultWorkflowDefinition.setVersion(kaleoDefinition.getVersion());
return defaultWorkflowDefinition;
}
@Override
public WorkflowInstance toWorkflowInstance(
KaleoInstance kaleoInstance, KaleoInstanceToken kaleoInstanceToken)
throws PortalException {
return toWorkflowInstance(kaleoInstance, kaleoInstanceToken, null);
}
@Override
public WorkflowInstance toWorkflowInstance(
KaleoInstance kaleoInstance, KaleoInstanceToken kaleoInstanceToken,
Map<String, Serializable> workflowContext)
throws PortalException {
DefaultWorkflowInstance defaultWorkflowInstance =
new DefaultWorkflowInstance();
defaultWorkflowInstance.setEndDate(kaleoInstance.getCompletionDate());
defaultWorkflowInstance.setStartDate(kaleoInstance.getCreateDate());
defaultWorkflowInstance.setState(
kaleoInstanceToken.getCurrentKaleoNode().getName());
if (workflowContext != null) {
defaultWorkflowInstance.setWorkflowContext(workflowContext);
}
else {
defaultWorkflowInstance.setWorkflowContext(
WorkflowContextUtil.convert(
kaleoInstance.getWorkflowContext()));
}
defaultWorkflowInstance.setWorkflowDefinitionName(
kaleoInstance.getKaleoDefinitionName());
defaultWorkflowInstance.setWorkflowDefinitionVersion(
kaleoInstance.getKaleoDefinitionVersion());
defaultWorkflowInstance.setWorkflowInstanceId(
kaleoInstance.getKaleoInstanceId());
return defaultWorkflowInstance;
}
@Override
public WorkflowLog toWorkflowLog(KaleoLog kaleoLog) {
DefaultWorkflowLog defaultWorkflowLog = new DefaultWorkflowLog();
defaultWorkflowLog.setAuditUserId(kaleoLog.getUserId());
defaultWorkflowLog.setComment(kaleoLog.getComment());
defaultWorkflowLog.setCreateDate(kaleoLog.getCreateDate());
defaultWorkflowLog.setPreviousState(
kaleoLog.getPreviousKaleoNodeName());
long previousAssigneeClassPK = kaleoLog.getPreviousAssigneeClassPK();
if (previousAssigneeClassPK > 0) {
String previousAssigneeClassName =
kaleoLog.getPreviousAssigneeClassName();
if (previousAssigneeClassName.equals(Role.class.getName())) {
defaultWorkflowLog.setPreviousRoleId(previousAssigneeClassPK);
}
else {
defaultWorkflowLog.setPreviousUserId(previousAssigneeClassPK);
}
}
long currentAssigneeClassPK = kaleoLog.getCurrentAssigneeClassPK();
if (currentAssigneeClassPK > 0) {
String currentAssigneeClassName =
kaleoLog.getCurrentAssigneeClassName();
if (currentAssigneeClassName.equals(Role.class.getName())) {
defaultWorkflowLog.setRoleId(currentAssigneeClassPK);
}
else {
defaultWorkflowLog.setUserId(currentAssigneeClassPK);
}
}
defaultWorkflowLog.setState(kaleoLog.getKaleoNodeName());
defaultWorkflowLog.setType(KaleoLogUtil.convert(kaleoLog.getType()));
defaultWorkflowLog.setWorkflowLogId(kaleoLog.getKaleoLogId());
defaultWorkflowLog.setWorkflowTaskId(
kaleoLog.getKaleoTaskInstanceTokenId());
return defaultWorkflowLog;
}
@Override
public WorkflowTask toWorkflowTask(
KaleoTaskInstanceToken kaleoTaskInstanceToken,
Map<String, Serializable> workflowContext)
throws PortalException {
DefaultWorkflowTask defaultWorkflowTask = new DefaultWorkflowTask();
defaultWorkflowTask.setCreateDate(
kaleoTaskInstanceToken.getCreateDate());
defaultWorkflowTask.setCompletionDate(
kaleoTaskInstanceToken.getCompletionDate());
defaultWorkflowTask.setDescription(
kaleoTaskInstanceToken.getKaleoTask().getDescription());
defaultWorkflowTask.setDueDate(kaleoTaskInstanceToken.getDueDate());
defaultWorkflowTask.setName(
kaleoTaskInstanceToken.getKaleoTask().getName());
if (workflowContext != null) {
defaultWorkflowTask.setOptionalAttributes(workflowContext);
}
else {
defaultWorkflowTask.setOptionalAttributes(
WorkflowContextUtil.convert(
kaleoTaskInstanceToken.getWorkflowContext()));
}
KaleoInstanceToken kaleoInstanceToken =
kaleoTaskInstanceToken.getKaleoInstanceToken();
KaleoInstance kaleoInstance = kaleoInstanceToken.getKaleoInstance();
defaultWorkflowTask.setWorkflowDefinitionId(
kaleoInstance.getKaleoDefinitionId());
defaultWorkflowTask.setWorkflowDefinitionName(
kaleoInstance.getKaleoDefinitionName());
defaultWorkflowTask.setWorkflowDefinitionVersion(
kaleoInstance.getKaleoDefinitionVersion());
defaultWorkflowTask.setWorkflowInstanceId(
kaleoInstance.getKaleoInstanceId());
List<WorkflowTaskAssignee> workflowTaskAssignees =
new LazyWorkflowTaskAssigneeList(
kaleoTaskInstanceToken,
_kaleoTaskAssignmentInstanceLocalService);
defaultWorkflowTask.setWorkflowTaskAssignees(workflowTaskAssignees);
defaultWorkflowTask.setWorkflowTaskId(
kaleoTaskInstanceToken.getKaleoTaskInstanceTokenId());
return defaultWorkflowTask;
}
private static final Log _log = LogFactoryUtil.getLog(
KaleoWorkflowModelConverterImpl.class);
@Reference
private DefinitionExporter _definitionExporter;
@Reference
private KaleoDefinitionLocalService _kaleoDefinitionLocalService;
@Reference
private KaleoDefinitionVersionLocalService
_kaleoDefinitionVersionLocalService;
@Reference
private KaleoTaskAssignmentInstanceLocalService
_kaleoTaskAssignmentInstanceLocalService;
}