/** * 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.io.unsync.UnsyncByteArrayInputStream; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.util.OrderByComparator; import com.liferay.portal.kernel.workflow.WorkflowDefinition; import com.liferay.portal.kernel.workflow.WorkflowDefinitionManager; import com.liferay.portal.kernel.workflow.WorkflowException; import com.liferay.portal.kernel.workflow.comparator.WorkflowComparatorFactory; import com.liferay.portal.workflow.kaleo.KaleoWorkflowModelConverter; import com.liferay.portal.workflow.kaleo.model.KaleoDefinition; import com.liferay.portal.workflow.kaleo.runtime.WorkflowEngine; import com.liferay.portal.workflow.kaleo.runtime.util.comparator.KaleoDefinitionOrderByComparator; import com.liferay.portal.workflow.kaleo.service.KaleoDefinitionLocalService; import java.util.ArrayList; import java.util.List; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; import org.osgi.service.component.annotations.ReferencePolicy; import org.osgi.service.component.annotations.ReferencePolicyOption; /** * @author Michael C. Han * @author Eduardo Lundgren */ @Component( immediate = true, property = {"proxy.bean=false"}, service = WorkflowDefinitionManager.class ) public class WorkflowDefinitionManagerImpl implements WorkflowDefinitionManager { @Override public WorkflowDefinition deployWorkflowDefinition( long companyId, long userId, String title, byte[] bytes) throws WorkflowException { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); serviceContext.setUserId(userId); return _workflowEngine.deployWorkflowDefinition( title, new UnsyncByteArrayInputStream(bytes), serviceContext); } @Override public int getActiveWorkflowDefinitionCount(long companyId) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); return _kaleoDefinitionLocalService.getKaleoDefinitionsCount( true, serviceContext); } catch (Exception e) { throw new WorkflowException(e); } } @Override public int getActiveWorkflowDefinitionCount(long companyId, String name) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); return _kaleoDefinitionLocalService.getKaleoDefinitionsCount( name, true, serviceContext); } catch (Exception e) { throw new WorkflowException(e); } } @Override public List<WorkflowDefinition> getActiveWorkflowDefinitions( long companyId, int start, int end, OrderByComparator<WorkflowDefinition> orderByComparator) throws WorkflowException { try { if (orderByComparator == null) { orderByComparator = _workflowComparatorFactory.getDefinitionNameComparator( true); } ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); List<KaleoDefinition> kaleoDefinitions = _kaleoDefinitionLocalService.getKaleoDefinitions( true, start, end, KaleoDefinitionOrderByComparator.getOrderByComparator( orderByComparator, _kaleoWorkflowModelConverter), serviceContext); return toWorkflowDefinitions(kaleoDefinitions); } catch (Exception e) { throw new WorkflowException(e); } } @Override public List<WorkflowDefinition> getActiveWorkflowDefinitions( long companyId, String name, int start, int end, OrderByComparator<WorkflowDefinition> orderByComparator) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); List<KaleoDefinition> kaleoDefinitions = _kaleoDefinitionLocalService.getKaleoDefinitions( name, true, start, end, KaleoDefinitionOrderByComparator.getOrderByComparator( orderByComparator, _kaleoWorkflowModelConverter), serviceContext); return toWorkflowDefinitions(kaleoDefinitions); } catch (Exception e) { throw new WorkflowException(e); } } @Override public WorkflowDefinition getLatestKaleoDefinition( long companyId, String name) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); KaleoDefinition kaleoDefinition = _kaleoDefinitionLocalService.getLatestKaleoDefinition( name, serviceContext); return _kaleoWorkflowModelConverter.toWorkflowDefinition( kaleoDefinition); } catch (Exception e) { throw new WorkflowException(e); } } @Override public WorkflowDefinition getWorkflowDefinition( long companyId, String name, int version) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); KaleoDefinition kaleoDefinition = _kaleoDefinitionLocalService.getKaleoDefinition( name, version, serviceContext); return _kaleoWorkflowModelConverter.toWorkflowDefinition( kaleoDefinition); } catch (Exception e) { throw new WorkflowException(e); } } @Override public int getWorkflowDefinitionCount(long companyId) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); return _kaleoDefinitionLocalService.getKaleoDefinitionsCount( serviceContext); } catch (Exception e) { throw new WorkflowException(e); } } @Override public int getWorkflowDefinitionCount(long companyId, String name) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); return _kaleoDefinitionLocalService.getKaleoDefinitionsCount( name, serviceContext); } catch (Exception e) { throw new WorkflowException(e); } } @Override public List<WorkflowDefinition> getWorkflowDefinitions( long companyId, int start, int end, OrderByComparator<WorkflowDefinition> orderByComparator) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); List<KaleoDefinition> kaleoDefinitions = _kaleoDefinitionLocalService.getKaleoDefinitions( start, end, KaleoDefinitionOrderByComparator.getOrderByComparator( orderByComparator, _kaleoWorkflowModelConverter), serviceContext); return toWorkflowDefinitions(kaleoDefinitions); } catch (Exception e) { throw new WorkflowException(e); } } @Override public List<WorkflowDefinition> getWorkflowDefinitions( long companyId, String name, int start, int end, OrderByComparator<WorkflowDefinition> orderByComparator) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); List<KaleoDefinition> kaleoDefinitions = _kaleoDefinitionLocalService.getKaleoDefinitions( name, start, end, KaleoDefinitionOrderByComparator.getOrderByComparator( orderByComparator, _kaleoWorkflowModelConverter), serviceContext); return toWorkflowDefinitions(kaleoDefinitions); } catch (Exception e) { throw new WorkflowException(e); } } @Override public void undeployWorkflowDefinition( long companyId, long userId, String name, int version) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); serviceContext.setUserId(userId); _workflowEngine.deleteWorkflowDefinition( name, version, serviceContext); } catch (Exception e) { throw new WorkflowException(e); } } @Override public WorkflowDefinition updateActive( long companyId, long userId, String name, int version, boolean active) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); serviceContext.setUserId(userId); if (active) { _kaleoDefinitionLocalService.activateKaleoDefinition( name, version, serviceContext); } else { _kaleoDefinitionLocalService.deactivateKaleoDefinition( name, version, serviceContext); } return getWorkflowDefinition(companyId, name, version); } catch (Exception e) { throw new WorkflowException(e); } } @Override public WorkflowDefinition updateTitle( long companyId, long userId, String name, int version, String title) throws WorkflowException { try { ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(companyId); serviceContext.setUserId(userId); KaleoDefinition kaleoDefinition = _kaleoDefinitionLocalService.updateTitle( name, version, title, serviceContext); return _kaleoWorkflowModelConverter.toWorkflowDefinition( kaleoDefinition); } catch (Exception e) { throw new WorkflowException(e); } } @Override public void validateWorkflowDefinition(byte[] bytes) throws WorkflowException { _workflowEngine.validateWorkflowDefinition( new UnsyncByteArrayInputStream(bytes)); } protected List<WorkflowDefinition> toWorkflowDefinitions( List<KaleoDefinition> kaleoDefinitions) { List<WorkflowDefinition> workflowDefinitions = new ArrayList<>( kaleoDefinitions.size()); for (KaleoDefinition kaleoDefinition : kaleoDefinitions) { WorkflowDefinition workflowDefinition = _kaleoWorkflowModelConverter.toWorkflowDefinition( kaleoDefinition); workflowDefinitions.add(workflowDefinition); } return workflowDefinitions; } @Reference private KaleoDefinitionLocalService _kaleoDefinitionLocalService; @Reference private KaleoWorkflowModelConverter _kaleoWorkflowModelConverter; @Reference private WorkflowComparatorFactory _workflowComparatorFactory; @Reference( cardinality = ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC, policyOption = ReferencePolicyOption.GREEDY ) private volatile WorkflowEngine _workflowEngine; }