001
014
015 package com.liferay.portal.workflow;
016
017 import com.liferay.portal.kernel.workflow.RequiredWorkflowDefinitionException;
018 import com.liferay.portal.service.WorkflowDefinitionLinkLocalServiceUtil;
019
020 import org.aspectj.lang.ProceedingJoinPoint;
021 import org.aspectj.lang.Signature;
022
023
026 public class WorkflowLinkAdvice {
027
028 public Object invoke(ProceedingJoinPoint proceedingJoinPoint)
029 throws Throwable {
030
031 Signature signature = proceedingJoinPoint.getSignature();
032
033 String methodName = signature.getName();
034
035 Object[] arguments = proceedingJoinPoint.getArgs();
036
037 if (methodName.equals(_UPDATE_ACTIVE)) {
038 long companyId = (Long)arguments[0];
039 String name = (String)arguments[2];
040 int version = (Integer)arguments[3];
041 boolean active = (Boolean)arguments[4];
042
043 if (!active) {
044 int workflowDefinitionLinksCount =
045 WorkflowDefinitionLinkLocalServiceUtil.
046 getWorkflowDefinitionLinksCount(
047 companyId, name, version);
048
049 if (workflowDefinitionLinksCount >= 1) {
050 throw new RequiredWorkflowDefinitionException();
051 }
052 }
053 }
054
055 return proceedingJoinPoint.proceed();
056 }
057
058 private static final String _UPDATE_ACTIVE = "updateActive";
059
060 }