diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/design/model/FlowActor.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/design/model/FlowActor.java index d2b51ab..3738e2b 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/design/model/FlowActor.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/design/model/FlowActor.java @@ -9,6 +9,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.Table; +import javax.persistence.Transient; import br.com.centralit.esi.api.enumerated.ActorTypeEnum; import br.com.centralit.framework.json.Views; @@ -45,6 +46,9 @@ public class FlowActor extends PersistentObject { @JsonView({ Views.GenericView.class}) @Embedded private Expression value; + + @Transient + private String assignValue; @Override public Long getId() { @@ -130,5 +134,15 @@ public class FlowActor extends PersistentObject { public void setId(Long id) { this.id = id; } + + + public String getAssignValue() { + return assignValue; + } + + + public void setAssignValue(String assignValue) { + this.assignValue = assignValue; + } } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/enumerated/InstanceElementTypeEnum.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/enumerated/InstanceElementTypeEnum.java index 9ea196b..f337e77 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/enumerated/InstanceElementTypeEnum.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/enumerated/InstanceElementTypeEnum.java @@ -2,7 +2,7 @@ package br.com.centralit.esi.api.enumerated; public enum InstanceElementTypeEnum { SINGLE("ESI.PROPRIEDADE.TIPO_INSTANCIA_UNICA"), - MULTIPLE("ESI.PROPRIEDADE.TIPO_INSTANCIA_VARIAS"), + //MULTIPLE("ESI.PROPRIEDADE.TIPO_INSTANCIA_VARIAS"), USER("ESI.PROPRIEDADE.TIPO_INSTANCIA_USUARIO"); private String id; diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/model/ProcessInstance.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/model/ProcessInstance.java index 8a74598..4395c29 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/model/ProcessInstance.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/model/ProcessInstance.java @@ -29,7 +29,6 @@ import org.springframework.security.core.context.SecurityContextHolder; import br.com.centralit.esi.api.design.model.ExecutionTime; import br.com.centralit.esi.api.design.model.FlowConnection; -import br.com.centralit.esi.api.design.model.FlowElement; import br.com.centralit.esi.api.design.model.FlowStatus; import br.com.centralit.esi.api.design.model.FlowVariable; import br.com.centralit.esi.api.design.model.FlowVersion; @@ -1057,20 +1056,7 @@ public class ProcessInstance extends PersistentObject implements Serializable { return allWorkItems; } - - public WorkItem retrieveLastWorkItem(FlowElement flowElement) { - WorkItem result = null; - List allWorkItems = this.getAllWorkItems(); - - for (WorkItem workItem : allWorkItems) { - if (workItem.getFlowElement().getId().equals(flowElement.getId())) { - result = workItem; - } - } - return result; - } - public List getAvailableUserTask() { List allWorkItems = this.getAllWorkItems(); diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/model/WorkItem.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/model/WorkItem.java index 2147364..9eb9bfa 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/model/WorkItem.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/model/WorkItem.java @@ -352,6 +352,7 @@ public class WorkItem extends PersistentObject { if (owner != null) { this.setOwner(owner); } + this.setActor(owner); this.setStatus(WorkItemStatusEnum.COMPLETED); } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/event/WorkItemEndEventServiceImpl.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/event/WorkItemEndEventServiceImpl.java index 7010ab1..cd9780b 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/event/WorkItemEndEventServiceImpl.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/event/WorkItemEndEventServiceImpl.java @@ -24,20 +24,17 @@ public class WorkItemEndEventServiceImpl extends WorkItemServiceImpl i @Override protected WorkItem internalSolve(RuntimeEnvironment runtimeEnvironment, ProcessInstance processInstance, FlowElement flowElement) { - boolean bTodosExecutados = true; + boolean isAllCompleted = true; List origens = this.getSourceElements(runtimeEnvironment, flowElement, processInstance); if (origens != null) { - for (FlowElement origem : origens) { - WorkItem workItem = processInstance.retrieveLastWorkItem(origem); - if (workItem != null) { - if (!workItem.isCompleted()) { - bTodosExecutados = false; - break; - } + for (FlowElement element : origens) { + if (!this.isAllCompletedItems(processInstance, element)) { + isAllCompleted = false; + break; } } } - if (bTodosExecutados) { + if (isAllCompleted) { this.registerAndComplete(runtimeEnvironment, processInstance,flowElement); this.completeProcessInstance(runtimeEnvironment, processInstance); } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/gateway/WorkItemExclusiveGatewayServiceImpl.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/gateway/WorkItemExclusiveGatewayServiceImpl.java index b43b690..b3d4cc6 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/gateway/WorkItemExclusiveGatewayServiceImpl.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/gateway/WorkItemExclusiveGatewayServiceImpl.java @@ -33,12 +33,9 @@ public class WorkItemExclusiveGatewayServiceImpl extends WorkItemServiceImpl elements = getSourceElements(runtimeEnvironment,flowElement, processInstance); if (elements != null) { for (FlowElement element : elements) { - WorkItem workItem = processInstance.retrieveLastWorkItem(element); - if (workItem != null) { - if (!workItem.isCompleted()) { - isAllCompleted = false; - break; - } + if (!this.isAllCompletedItems(processInstance, element)) { + isAllCompleted = false; + break; } } } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/gateway/WorkItemInclusiveGatewayServiceImpl.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/gateway/WorkItemInclusiveGatewayServiceImpl.java index b084f7e..00fab22 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/gateway/WorkItemInclusiveGatewayServiceImpl.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/gateway/WorkItemInclusiveGatewayServiceImpl.java @@ -28,12 +28,9 @@ public class WorkItemInclusiveGatewayServiceImpl extends WorkItemServiceImpl elements = getSourceElements(runtimeEnvironment,flowElement, processInstance); if (elements != null) { for (FlowElement element : elements) { - WorkItem workItem = processInstance.retrieveLastWorkItem(element); - if (workItem != null) { - if (!workItem.isCompleted()) { - isAllCompleted = false; - break; - } + if (!this.isAllCompletedItems(processInstance, element)) { + isAllCompleted = false; + break; } } } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/impl/WorkItemServiceImpl.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/impl/WorkItemServiceImpl.java index 8fddd81..85eb4ea 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/impl/WorkItemServiceImpl.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/impl/WorkItemServiceImpl.java @@ -85,6 +85,23 @@ public class WorkItemServiceImpl extends GenericServiceIm protected void internalAfterRegistry(RuntimeEnvironment runtimeEnvironment, WorkItem workItem) { } + protected boolean isAllCompletedItems(ProcessInstance processInstance, FlowElement flowElement) { + boolean result = true; + + List allWorkItems = processInstance.getAllWorkItems(); + + for (WorkItem workItem : allWorkItems) { + if (workItem.getFlowElement().getId().equals(flowElement.getId())) { + if (!workItem.isCompleted()) { + result = false; + break; + } + } + } + + return result; + } + protected List getCompliedTargetConnections(RuntimeEnvironment runtimeEnvironment, FlowElement flowElement, ProcessInstance processInstance) { List result = new ArrayList(); List connections = this.flowConnectionService.findBySourceElement(flowElement, processInstance); diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/task/WorkItemUserTaskServiceImpl.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/task/WorkItemUserTaskServiceImpl.java index 35afbb2..8204309 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/task/WorkItemUserTaskServiceImpl.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/task/WorkItemUserTaskServiceImpl.java @@ -1,5 +1,6 @@ package br.com.centralit.esi.api.execution.service.task; +import java.util.ArrayList; import java.util.Calendar; import java.util.List; @@ -15,6 +16,7 @@ import br.com.centralit.esi.api.design.model.task.UserTask; import br.com.centralit.esi.api.enumerated.ActorTypeEnum; import br.com.centralit.esi.api.enumerated.AssignmentTypeEnum; import br.com.centralit.esi.api.enumerated.EstimateTimeTypeEnum; +import br.com.centralit.esi.api.enumerated.InstanceElementTypeEnum; import br.com.centralit.esi.api.enumerated.TimeManagementActionEnum; import br.com.centralit.esi.api.enumerated.TimeManagementStatusEnum; import br.com.centralit.esi.api.enumerated.UserTaskActionEnum; @@ -137,10 +139,10 @@ public class WorkItemUserTaskServiceImpl extends WorkItemServiceImpl i @Override protected WorkItem internalSolve(RuntimeEnvironment runtimeEnvironment, ProcessInstance processInstance, FlowElement flowElement) { - UserTaskItem userTaskItem = this.register(runtimeEnvironment, processInstance,flowElement); + UserTaskItem userTaskItem = this.register(runtimeEnvironment, processInstance, flowElement); runtimeEnvironment.addOrUpdateObject("userTask", userTaskItem); - this.assign(runtimeEnvironment, userTaskItem); + this.assign(runtimeEnvironment, processInstance, userTaskItem); return userTaskItem; } @@ -200,20 +202,37 @@ public class WorkItemUserTaskServiceImpl extends WorkItemServiceImpl i } } - protected void assign(RuntimeEnvironment runtimeEnvironment, UserTaskItem userTaskItem) { + protected void assign(RuntimeEnvironment runtimeEnvironment, ProcessInstance processInstance, UserTaskItem userTaskItem) { UserTask element = this.getFlowElement(userTaskItem); if (element.getActors() != null) { + List assignList = new ArrayList(); + for (FlowActor actor : element.getActors()) { + actor.setAssignValue(null); Object initialValue = runtimeEnvironment.assignInitialValue(new Variable(actor.getName(), VariableTypeEnum.TEXT, null, false), actor.getValue()); if (initialValue instanceof List) { for (Object value : (List) initialValue) { - if (value instanceof String) - this.assign(runtimeEnvironment, userTaskItem, actor.getActorType(), AssignmentTypeEnum.AUTOMATIC, (String) value); + if (value instanceof String) { + actor.setAssignValue((String) value); + assignList.add(actor); + } } }else{ - if (initialValue instanceof String) - this.assign(runtimeEnvironment, userTaskItem, actor.getActorType(), AssignmentTypeEnum.AUTOMATIC, (String) initialValue); + if (initialValue instanceof String) { + actor.setAssignValue((String) initialValue); + assignList.add(actor); + } + } + } + + int i = 0; + UserTaskItem assignTask = userTaskItem; + for (FlowActor actor : assignList) { + if (element.getInstanceType().equals(InstanceElementTypeEnum.USER) && i > 0) { + assignTask = this.register(runtimeEnvironment, processInstance, element); } + i++; + this.assign(runtimeEnvironment, assignTask, actor.getActorType(), AssignmentTypeEnum.AUTOMATIC, actor.getAssignValue()); } } } @@ -250,7 +269,17 @@ public class WorkItemUserTaskServiceImpl extends WorkItemServiceImpl i complete(runtimeEnvironment, workItem); runtimeEnvironment.addOrUpdateObject("userTask", workItem); - return this.retrieveTargets(runtimeEnvironment, workItem); + + UserTask element = (UserTask) workItem.getFlowElement(); + if (element.getInstanceType().equals(InstanceElementTypeEnum.USER)) { + if (this.isAllCompletedItems(workItem.getProcessInstance(), workItem.getFlowElement())) { + this.retrieveTargets(runtimeEnvironment, workItem); + } + }else{ + this.retrieveTargets(runtimeEnvironment, workItem); + } + + return workItem; } @Override diff --git a/cit-esi-web/src/main/java/br/com/centralit/listener/StartupListenerEsi.java b/cit-esi-web/src/main/java/br/com/centralit/listener/StartupListenerEsi.java index 2281fb0..8e77792 100644 --- a/cit-esi-web/src/main/java/br/com/centralit/listener/StartupListenerEsi.java +++ b/cit-esi-web/src/main/java/br/com/centralit/listener/StartupListenerEsi.java @@ -2420,12 +2420,12 @@ public class StartupListenerEsi extends UtilStartup implements ApplicationListen internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.ESTADO_FINAL", "Estado final", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.NOME_FLUXO", "Nome do fluxo", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.COR_TEXTO", "Cor do texto", dominio, modulo)); - internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_INSTANCIA_USUARIO", "Por usuário", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_INSTANCIA_USUARIO", "Uma instância p/ cada ator", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.VARIAVEIS_TAREFA", "Variável(eis) de entrada/saída da tarefa", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_ALTERACAO_SITUACAO", "Tipo de alteração da situação", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.ACAO_SAIDA", "Ação de saída", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_INSTANCIA_VARIAS", "Várias (controlada pelo fluxo)", dominio, modulo)); - internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_INSTANCIA_UNICA", "Única", dominio, modulo)); + internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_INSTANCIA_UNICA", "Uma única instância", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_ESTIMATIVA", "Tipo de estimativa do tempo de execução", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.ENGINE_EXECUCAO", "Engine", dominio, modulo)); internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.COR_FUNDO", "Cor de fundo", dominio, modulo)); -- libgit2 0.21.2