/**
* 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.GetterUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.workflow.kaleo.model.KaleoInstance;
import com.liferay.portal.workflow.kaleo.model.KaleoInstanceToken;
import com.liferay.portal.workflow.kaleo.model.KaleoInstanceTokenConstants;
import com.liferay.portal.workflow.kaleo.model.KaleoNode;
import com.liferay.portal.workflow.kaleo.service.base.KaleoInstanceTokenLocalServiceBaseImpl;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author Brian Wing Shun Chan
*/
public class KaleoInstanceTokenLocalServiceImpl
extends KaleoInstanceTokenLocalServiceBaseImpl {
@Override
public KaleoInstanceToken addKaleoInstanceToken(
long parentKaleoInstanceTokenId,
Map<String, Serializable> workflowContext,
ServiceContext serviceContext)
throws PortalException {
User user = userLocalService.getUser(serviceContext.getGuestOrUserId());
KaleoInstanceToken parentKaleoInstanceToken =
kaleoInstanceTokenPersistence.findByPrimaryKey(
parentKaleoInstanceTokenId);
Date now = new Date();
long kaleoInstanceTokenId = counterLocalService.increment();
KaleoInstanceToken kaleoInstanceToken =
kaleoInstanceTokenPersistence.create(kaleoInstanceTokenId);
long groupId = StagingUtil.getLiveGroupId(
serviceContext.getScopeGroupId());
kaleoInstanceToken.setGroupId(groupId);
kaleoInstanceToken.setCompanyId(user.getCompanyId());
kaleoInstanceToken.setUserId(user.getUserId());
kaleoInstanceToken.setUserName(user.getFullName());
kaleoInstanceToken.setCreateDate(now);
kaleoInstanceToken.setModifiedDate(now);
kaleoInstanceToken.setKaleoDefinitionId(
parentKaleoInstanceToken.getKaleoDefinitionId());
kaleoInstanceToken.setKaleoInstanceId(
parentKaleoInstanceToken.getKaleoInstanceId());
kaleoInstanceToken.setParentKaleoInstanceTokenId(
parentKaleoInstanceToken.getKaleoInstanceTokenId());
setCurrentKaleoNode(
kaleoInstanceToken,
parentKaleoInstanceToken.getCurrentKaleoNodeId());
kaleoInstanceToken.setClassName(
(String)workflowContext.get(
WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME));
if (workflowContext.containsKey(
WorkflowConstants.CONTEXT_ENTRY_CLASS_PK)) {
kaleoInstanceToken.setClassPK(
GetterUtil.getLong(
(String)workflowContext.get(
WorkflowConstants.CONTEXT_ENTRY_CLASS_PK)));
}
kaleoInstanceToken.setCompleted(false);
kaleoInstanceTokenPersistence.update(kaleoInstanceToken);
return kaleoInstanceToken;
}
@Override
public KaleoInstanceToken completeKaleoInstanceToken(
long kaleoInstanceTokenId)
throws PortalException {
KaleoInstanceToken kaleoInstanceToken =
kaleoInstanceTokenPersistence.findByPrimaryKey(
kaleoInstanceTokenId);
kaleoInstanceToken.setCompleted(true);
kaleoInstanceToken.setCompletionDate(new Date());
kaleoInstanceTokenPersistence.update(kaleoInstanceToken);
return kaleoInstanceToken;
}
@Override
public void deleteCompanyKaleoInstanceTokens(long companyId) {
kaleoInstanceTokenPersistence.removeByCompanyId(companyId);
}
@Override
public void deleteKaleoDefinitionKaleoInstanceTokens(
long kaleoDefinitionId) {
kaleoInstanceTokenPersistence.removeByKaleoDefinitionId(
kaleoDefinitionId);
}
@Override
public void deleteKaleoInstanceKaleoInstanceTokens(long kaleoInstanceId) {
kaleoInstanceTokenPersistence.removeByKaleoInstanceId(kaleoInstanceId);
}
@Override
public List<KaleoInstanceToken> getKaleoInstanceTokens(
long parentKaleoInstanceTokenId, Date completionDate,
ServiceContext serviceContext) {
return kaleoInstanceTokenPersistence.findByC_PKITI_CD(
serviceContext.getCompanyId(), parentKaleoInstanceTokenId,
completionDate);
}
@Override
public List<KaleoInstanceToken> getKaleoInstanceTokens(
long parentKaleoInstanceTokenId, ServiceContext serviceContext) {
return kaleoInstanceTokenPersistence.findByC_PKITI(
serviceContext.getCompanyId(), parentKaleoInstanceTokenId);
}
@Override
public int getKaleoInstanceTokensCount(
long parentKaleoInstanceTokenId, Date completionDate,
ServiceContext serviceContext) {
return kaleoInstanceTokenPersistence.countByC_PKITI_CD(
serviceContext.getCompanyId(), parentKaleoInstanceTokenId,
completionDate);
}
@Override
public int getKaleoInstanceTokensCount(
long parentKaleoInstanceTokenId, ServiceContext serviceContext) {
return kaleoInstanceTokenPersistence.countByC_PKITI(
serviceContext.getCompanyId(), parentKaleoInstanceTokenId);
}
@Override
public KaleoInstanceToken getRootKaleoInstanceToken(
long kaleoInstanceId, Map<String, Serializable> workflowContext,
ServiceContext serviceContext)
throws PortalException {
KaleoInstance kaleoInstance = kaleoInstancePersistence.findByPrimaryKey(
kaleoInstanceId);
long rootKaleoInstanceTokenId =
kaleoInstance.getRootKaleoInstanceTokenId();
if (rootKaleoInstanceTokenId > 0) {
return kaleoInstanceTokenPersistence.findByPrimaryKey(
rootKaleoInstanceTokenId);
}
// Kaleo instance token
User user = userLocalService.getUser(serviceContext.getGuestOrUserId());
Date now = new Date();
rootKaleoInstanceTokenId = counterLocalService.increment();
KaleoInstanceToken kaleoInstanceToken =
kaleoInstanceTokenPersistence.create(rootKaleoInstanceTokenId);
long groupId = StagingUtil.getLiveGroupId(
serviceContext.getScopeGroupId());
kaleoInstanceToken.setGroupId(groupId);
kaleoInstanceToken.setCompanyId(user.getCompanyId());
kaleoInstanceToken.setUserId(user.getUserId());
kaleoInstanceToken.setUserName(user.getFullName());
kaleoInstanceToken.setCreateDate(now);
kaleoInstanceToken.setModifiedDate(now);
kaleoInstanceToken.setKaleoDefinitionId(
kaleoInstance.getKaleoDefinitionId());
kaleoInstanceToken.setKaleoInstanceId(
kaleoInstance.getKaleoInstanceId());
kaleoInstanceToken.setParentKaleoInstanceTokenId(
KaleoInstanceTokenConstants.PARENT_KALEO_INSTANCE_TOKEN_ID_DEFAULT);
kaleoInstanceToken.setClassName(
(String)workflowContext.get(
WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME));
if (workflowContext.containsKey(
WorkflowConstants.CONTEXT_ENTRY_CLASS_PK)) {
kaleoInstanceToken.setClassPK(
GetterUtil.getLong(
(String)workflowContext.get(
WorkflowConstants.CONTEXT_ENTRY_CLASS_PK)));
}
kaleoInstanceTokenPersistence.update(kaleoInstanceToken);
// Kaleo instance
kaleoInstance.setRootKaleoInstanceTokenId(rootKaleoInstanceTokenId);
kaleoInstancePersistence.update(kaleoInstance);
return kaleoInstanceToken;
}
@Override
public KaleoInstanceToken updateKaleoInstanceToken(
long kaleoInstanceTokenId, long currentKaleoNodeId)
throws PortalException {
KaleoInstanceToken kaleoInstanceToken =
kaleoInstanceTokenPersistence.findByPrimaryKey(
kaleoInstanceTokenId);
kaleoInstanceToken.setModifiedDate(new Date());
setCurrentKaleoNode(kaleoInstanceToken, currentKaleoNodeId);
kaleoInstanceTokenPersistence.update(kaleoInstanceToken);
return kaleoInstanceToken;
}
protected void setCurrentKaleoNode(
KaleoInstanceToken kaleoInstanceToken, long currentKaleoNodeId)
throws PortalException {
kaleoInstanceToken.setCurrentKaleoNodeId(currentKaleoNodeId);
KaleoNode currentKaleoNode = kaleoNodeLocalService.getKaleoNode(
currentKaleoNodeId);
kaleoInstanceToken.setCurrentKaleoNodeName(currentKaleoNode.getName());
}
}