Commit 7beefd3e4a0c1df90b04b3f8a9ba1ad1c80b7232

Authored by Carlos Alberto
1 parent f4e62df9
Exists in master

Criação de uma instância da tarefa para cada ator quando o tipo de instanciacao = USER

cit-esi-api/src/main/java/br/com/centralit/esi/api/design/model/FlowActor.java
@@ -9,6 +9,7 @@ import javax.persistence.GenerationType; @@ -9,6 +9,7 @@ import javax.persistence.GenerationType;
9 import javax.persistence.Id; 9 import javax.persistence.Id;
10 import javax.persistence.ManyToOne; 10 import javax.persistence.ManyToOne;
11 import javax.persistence.Table; 11 import javax.persistence.Table;
  12 +import javax.persistence.Transient;
12 13
13 import br.com.centralit.esi.api.enumerated.ActorTypeEnum; 14 import br.com.centralit.esi.api.enumerated.ActorTypeEnum;
14 import br.com.centralit.framework.json.Views; 15 import br.com.centralit.framework.json.Views;
@@ -45,6 +46,9 @@ public class FlowActor extends PersistentObject { @@ -45,6 +46,9 @@ public class FlowActor extends PersistentObject {
45 @JsonView({ Views.GenericView.class}) 46 @JsonView({ Views.GenericView.class})
46 @Embedded 47 @Embedded
47 private Expression value; 48 private Expression value;
  49 +
  50 + @Transient
  51 + private String assignValue;
48 52
49 @Override 53 @Override
50 public Long getId() { 54 public Long getId() {
@@ -130,5 +134,15 @@ public class FlowActor extends PersistentObject { @@ -130,5 +134,15 @@ public class FlowActor extends PersistentObject {
130 public void setId(Long id) { 134 public void setId(Long id) {
131 this.id = id; 135 this.id = id;
132 } 136 }
  137 +
  138 +
  139 + public String getAssignValue() {
  140 + return assignValue;
  141 + }
  142 +
  143 +
  144 + public void setAssignValue(String assignValue) {
  145 + this.assignValue = assignValue;
  146 + }
133 147
134 } 148 }
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; @@ -2,7 +2,7 @@ package br.com.centralit.esi.api.enumerated;
2 2
3 public enum InstanceElementTypeEnum { 3 public enum InstanceElementTypeEnum {
4 SINGLE("ESI.PROPRIEDADE.TIPO_INSTANCIA_UNICA"), 4 SINGLE("ESI.PROPRIEDADE.TIPO_INSTANCIA_UNICA"),
5 - MULTIPLE("ESI.PROPRIEDADE.TIPO_INSTANCIA_VARIAS"), 5 + //MULTIPLE("ESI.PROPRIEDADE.TIPO_INSTANCIA_VARIAS"),
6 USER("ESI.PROPRIEDADE.TIPO_INSTANCIA_USUARIO"); 6 USER("ESI.PROPRIEDADE.TIPO_INSTANCIA_USUARIO");
7 7
8 private String id; 8 private String id;
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; @@ -29,7 +29,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
29 29
30 import br.com.centralit.esi.api.design.model.ExecutionTime; 30 import br.com.centralit.esi.api.design.model.ExecutionTime;
31 import br.com.centralit.esi.api.design.model.FlowConnection; 31 import br.com.centralit.esi.api.design.model.FlowConnection;
32 -import br.com.centralit.esi.api.design.model.FlowElement;  
33 import br.com.centralit.esi.api.design.model.FlowStatus; 32 import br.com.centralit.esi.api.design.model.FlowStatus;
34 import br.com.centralit.esi.api.design.model.FlowVariable; 33 import br.com.centralit.esi.api.design.model.FlowVariable;
35 import br.com.centralit.esi.api.design.model.FlowVersion; 34 import br.com.centralit.esi.api.design.model.FlowVersion;
@@ -1057,20 +1056,7 @@ public class ProcessInstance extends PersistentObject implements Serializable { @@ -1057,20 +1056,7 @@ public class ProcessInstance extends PersistentObject implements Serializable {
1057 1056
1058 return allWorkItems; 1057 return allWorkItems;
1059 } 1058 }
1060 -  
1061 - public WorkItem retrieveLastWorkItem(FlowElement flowElement) {  
1062 - WorkItem result = null;  
1063 - List<WorkItem> allWorkItems = this.getAllWorkItems();  
1064 -  
1065 - for (WorkItem workItem : allWorkItems) {  
1066 - if (workItem.getFlowElement().getId().equals(flowElement.getId())) {  
1067 - result = workItem;  
1068 - }  
1069 - }  
1070 1059
1071 - return result;  
1072 - }  
1073 -  
1074 public List<UserTaskItem> getAvailableUserTask() { 1060 public List<UserTaskItem> getAvailableUserTask() {
1075 List<WorkItem> allWorkItems = this.getAllWorkItems(); 1061 List<WorkItem> allWorkItems = this.getAllWorkItems();
1076 1062
cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/model/WorkItem.java
@@ -352,6 +352,7 @@ public class WorkItem extends PersistentObject { @@ -352,6 +352,7 @@ public class WorkItem extends PersistentObject {
352 if (owner != null) { 352 if (owner != null) {
353 this.setOwner(owner); 353 this.setOwner(owner);
354 } 354 }
  355 + this.setActor(owner);
355 this.setStatus(WorkItemStatusEnum.COMPLETED); 356 this.setStatus(WorkItemStatusEnum.COMPLETED);
356 } 357 }
357 358
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&lt;EndEvent&gt; i @@ -24,20 +24,17 @@ public class WorkItemEndEventServiceImpl extends WorkItemServiceImpl&lt;EndEvent&gt; i
24 24
25 @Override 25 @Override
26 protected WorkItem internalSolve(RuntimeEnvironment runtimeEnvironment, ProcessInstance processInstance, FlowElement flowElement) { 26 protected WorkItem internalSolve(RuntimeEnvironment runtimeEnvironment, ProcessInstance processInstance, FlowElement flowElement) {
27 - boolean bTodosExecutados = true; 27 + boolean isAllCompleted = true;
28 List<FlowElement> origens = this.getSourceElements(runtimeEnvironment, flowElement, processInstance); 28 List<FlowElement> origens = this.getSourceElements(runtimeEnvironment, flowElement, processInstance);
29 if (origens != null) { 29 if (origens != null) {
30 - for (FlowElement origem : origens) {  
31 - WorkItem workItem = processInstance.retrieveLastWorkItem(origem);  
32 - if (workItem != null) {  
33 - if (!workItem.isCompleted()) {  
34 - bTodosExecutados = false;  
35 - break;  
36 - } 30 + for (FlowElement element : origens) {
  31 + if (!this.isAllCompletedItems(processInstance, element)) {
  32 + isAllCompleted = false;
  33 + break;
37 } 34 }
38 } 35 }
39 } 36 }
40 - if (bTodosExecutados) { 37 + if (isAllCompleted) {
41 this.registerAndComplete(runtimeEnvironment, processInstance,flowElement); 38 this.registerAndComplete(runtimeEnvironment, processInstance,flowElement);
42 this.completeProcessInstance(runtimeEnvironment, processInstance); 39 this.completeProcessInstance(runtimeEnvironment, processInstance);
43 } 40 }
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&lt;Exc @@ -33,12 +33,9 @@ public class WorkItemExclusiveGatewayServiceImpl extends WorkItemServiceImpl&lt;Exc
33 List<FlowElement> elements = getSourceElements(runtimeEnvironment,flowElement, processInstance); 33 List<FlowElement> elements = getSourceElements(runtimeEnvironment,flowElement, processInstance);
34 if (elements != null) { 34 if (elements != null) {
35 for (FlowElement element : elements) { 35 for (FlowElement element : elements) {
36 - WorkItem workItem = processInstance.retrieveLastWorkItem(element);  
37 - if (workItem != null) {  
38 - if (!workItem.isCompleted()) {  
39 - isAllCompleted = false;  
40 - break;  
41 - } 36 + if (!this.isAllCompletedItems(processInstance, element)) {
  37 + isAllCompleted = false;
  38 + break;
42 } 39 }
43 } 40 }
44 } 41 }
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&lt;Inc @@ -28,12 +28,9 @@ public class WorkItemInclusiveGatewayServiceImpl extends WorkItemServiceImpl&lt;Inc
28 List<FlowElement> elements = getSourceElements(runtimeEnvironment,flowElement, processInstance); 28 List<FlowElement> elements = getSourceElements(runtimeEnvironment,flowElement, processInstance);
29 if (elements != null) { 29 if (elements != null) {
30 for (FlowElement element : elements) { 30 for (FlowElement element : elements) {
31 - WorkItem workItem = processInstance.retrieveLastWorkItem(element);  
32 - if (workItem != null) {  
33 - if (!workItem.isCompleted()) {  
34 - isAllCompleted = false;  
35 - break;  
36 - } 31 + if (!this.isAllCompletedItems(processInstance, element)) {
  32 + isAllCompleted = false;
  33 + break;
37 } 34 }
38 } 35 }
39 } 36 }
cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/impl/WorkItemServiceImpl.java
@@ -85,6 +85,23 @@ public class WorkItemServiceImpl&lt;E extends FlowElement&gt; extends GenericServiceIm @@ -85,6 +85,23 @@ public class WorkItemServiceImpl&lt;E extends FlowElement&gt; extends GenericServiceIm
85 protected void internalAfterRegistry(RuntimeEnvironment runtimeEnvironment, WorkItem workItem) { 85 protected void internalAfterRegistry(RuntimeEnvironment runtimeEnvironment, WorkItem workItem) {
86 } 86 }
87 87
  88 + protected boolean isAllCompletedItems(ProcessInstance processInstance, FlowElement flowElement) {
  89 + boolean result = true;
  90 +
  91 + List<WorkItem> allWorkItems = processInstance.getAllWorkItems();
  92 +
  93 + for (WorkItem workItem : allWorkItems) {
  94 + if (workItem.getFlowElement().getId().equals(flowElement.getId())) {
  95 + if (!workItem.isCompleted()) {
  96 + result = false;
  97 + break;
  98 + }
  99 + }
  100 + }
  101 +
  102 + return result;
  103 + }
  104 +
88 protected List<FlowConnection> getCompliedTargetConnections(RuntimeEnvironment runtimeEnvironment, FlowElement flowElement, ProcessInstance processInstance) { 105 protected List<FlowConnection> getCompliedTargetConnections(RuntimeEnvironment runtimeEnvironment, FlowElement flowElement, ProcessInstance processInstance) {
89 List<FlowConnection> result = new ArrayList<FlowConnection>(); 106 List<FlowConnection> result = new ArrayList<FlowConnection>();
90 List<FlowConnection> connections = this.flowConnectionService.findBySourceElement(flowElement, processInstance); 107 List<FlowConnection> connections = this.flowConnectionService.findBySourceElement(flowElement, processInstance);
cit-esi-api/src/main/java/br/com/centralit/esi/api/execution/service/task/WorkItemUserTaskServiceImpl.java
1 package br.com.centralit.esi.api.execution.service.task; 1 package br.com.centralit.esi.api.execution.service.task;
2 2
  3 +import java.util.ArrayList;
3 import java.util.Calendar; 4 import java.util.Calendar;
4 import java.util.List; 5 import java.util.List;
5 6
@@ -15,6 +16,7 @@ import br.com.centralit.esi.api.design.model.task.UserTask; @@ -15,6 +16,7 @@ import br.com.centralit.esi.api.design.model.task.UserTask;
15 import br.com.centralit.esi.api.enumerated.ActorTypeEnum; 16 import br.com.centralit.esi.api.enumerated.ActorTypeEnum;
16 import br.com.centralit.esi.api.enumerated.AssignmentTypeEnum; 17 import br.com.centralit.esi.api.enumerated.AssignmentTypeEnum;
17 import br.com.centralit.esi.api.enumerated.EstimateTimeTypeEnum; 18 import br.com.centralit.esi.api.enumerated.EstimateTimeTypeEnum;
  19 +import br.com.centralit.esi.api.enumerated.InstanceElementTypeEnum;
18 import br.com.centralit.esi.api.enumerated.TimeManagementActionEnum; 20 import br.com.centralit.esi.api.enumerated.TimeManagementActionEnum;
19 import br.com.centralit.esi.api.enumerated.TimeManagementStatusEnum; 21 import br.com.centralit.esi.api.enumerated.TimeManagementStatusEnum;
20 import br.com.centralit.esi.api.enumerated.UserTaskActionEnum; 22 import br.com.centralit.esi.api.enumerated.UserTaskActionEnum;
@@ -137,10 +139,10 @@ public class WorkItemUserTaskServiceImpl extends WorkItemServiceImpl&lt;UserTask&gt; i @@ -137,10 +139,10 @@ public class WorkItemUserTaskServiceImpl extends WorkItemServiceImpl&lt;UserTask&gt; i
137 139
138 @Override 140 @Override
139 protected WorkItem internalSolve(RuntimeEnvironment runtimeEnvironment, ProcessInstance processInstance, FlowElement flowElement) { 141 protected WorkItem internalSolve(RuntimeEnvironment runtimeEnvironment, ProcessInstance processInstance, FlowElement flowElement) {
140 - UserTaskItem userTaskItem = this.register(runtimeEnvironment, processInstance,flowElement); 142 + UserTaskItem userTaskItem = this.register(runtimeEnvironment, processInstance, flowElement);
141 runtimeEnvironment.addOrUpdateObject("userTask", userTaskItem); 143 runtimeEnvironment.addOrUpdateObject("userTask", userTaskItem);
142 144
143 - this.assign(runtimeEnvironment, userTaskItem); 145 + this.assign(runtimeEnvironment, processInstance, userTaskItem);
144 146
145 return userTaskItem; 147 return userTaskItem;
146 } 148 }
@@ -200,20 +202,37 @@ public class WorkItemUserTaskServiceImpl extends WorkItemServiceImpl&lt;UserTask&gt; i @@ -200,20 +202,37 @@ public class WorkItemUserTaskServiceImpl extends WorkItemServiceImpl&lt;UserTask&gt; i
200 } 202 }
201 } 203 }
202 204
203 - protected void assign(RuntimeEnvironment runtimeEnvironment, UserTaskItem userTaskItem) { 205 + protected void assign(RuntimeEnvironment runtimeEnvironment, ProcessInstance processInstance, UserTaskItem userTaskItem) {
204 UserTask element = this.getFlowElement(userTaskItem); 206 UserTask element = this.getFlowElement(userTaskItem);
205 if (element.getActors() != null) { 207 if (element.getActors() != null) {
  208 + List<FlowActor> assignList = new ArrayList<FlowActor>();
  209 +
206 for (FlowActor actor : element.getActors()) { 210 for (FlowActor actor : element.getActors()) {
  211 + actor.setAssignValue(null);
207 Object initialValue = runtimeEnvironment.assignInitialValue(new Variable(actor.getName(), VariableTypeEnum.TEXT, null, false), actor.getValue()); 212 Object initialValue = runtimeEnvironment.assignInitialValue(new Variable(actor.getName(), VariableTypeEnum.TEXT, null, false), actor.getValue());
208 if (initialValue instanceof List) { 213 if (initialValue instanceof List) {
209 for (Object value : (List<?>) initialValue) { 214 for (Object value : (List<?>) initialValue) {
210 - if (value instanceof String)  
211 - this.assign(runtimeEnvironment, userTaskItem, actor.getActorType(), AssignmentTypeEnum.AUTOMATIC, (String) value); 215 + if (value instanceof String) {
  216 + actor.setAssignValue((String) value);
  217 + assignList.add(actor);
  218 + }
212 } 219 }
213 }else{ 220 }else{
214 - if (initialValue instanceof String)  
215 - this.assign(runtimeEnvironment, userTaskItem, actor.getActorType(), AssignmentTypeEnum.AUTOMATIC, (String) initialValue); 221 + if (initialValue instanceof String) {
  222 + actor.setAssignValue((String) initialValue);
  223 + assignList.add(actor);
  224 + }
  225 + }
  226 + }
  227 +
  228 + int i = 0;
  229 + UserTaskItem assignTask = userTaskItem;
  230 + for (FlowActor actor : assignList) {
  231 + if (element.getInstanceType().equals(InstanceElementTypeEnum.USER) && i > 0) {
  232 + assignTask = this.register(runtimeEnvironment, processInstance, element);
216 } 233 }
  234 + i++;
  235 + this.assign(runtimeEnvironment, assignTask, actor.getActorType(), AssignmentTypeEnum.AUTOMATIC, actor.getAssignValue());
217 } 236 }
218 } 237 }
219 } 238 }
@@ -250,7 +269,17 @@ public class WorkItemUserTaskServiceImpl extends WorkItemServiceImpl&lt;UserTask&gt; i @@ -250,7 +269,17 @@ public class WorkItemUserTaskServiceImpl extends WorkItemServiceImpl&lt;UserTask&gt; i
250 269
251 complete(runtimeEnvironment, workItem); 270 complete(runtimeEnvironment, workItem);
252 runtimeEnvironment.addOrUpdateObject("userTask", workItem); 271 runtimeEnvironment.addOrUpdateObject("userTask", workItem);
253 - return this.retrieveTargets(runtimeEnvironment, workItem); 272 +
  273 + UserTask element = (UserTask) workItem.getFlowElement();
  274 + if (element.getInstanceType().equals(InstanceElementTypeEnum.USER)) {
  275 + if (this.isAllCompletedItems(workItem.getProcessInstance(), workItem.getFlowElement())) {
  276 + this.retrieveTargets(runtimeEnvironment, workItem);
  277 + }
  278 + }else{
  279 + this.retrieveTargets(runtimeEnvironment, workItem);
  280 + }
  281 +
  282 + return workItem;
254 } 283 }
255 284
256 @Override 285 @Override
cit-esi-web/src/main/java/br/com/centralit/listener/StartupListenerEsi.java
@@ -2420,12 +2420,12 @@ public class StartupListenerEsi extends UtilStartup implements ApplicationListen @@ -2420,12 +2420,12 @@ public class StartupListenerEsi extends UtilStartup implements ApplicationListen
2420 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.ESTADO_FINAL", "Estado final", dominio, modulo)); 2420 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.ESTADO_FINAL", "Estado final", dominio, modulo));
2421 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.NOME_FLUXO", "Nome do fluxo", dominio, modulo)); 2421 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.NOME_FLUXO", "Nome do fluxo", dominio, modulo));
2422 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.COR_TEXTO", "Cor do texto", dominio, modulo)); 2422 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.COR_TEXTO", "Cor do texto", dominio, modulo));
2423 - internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_INSTANCIA_USUARIO", "Por usuário", dominio, modulo)); 2423 + internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_INSTANCIA_USUARIO", "Uma instância p/ cada ator", dominio, modulo));
2424 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.VARIAVEIS_TAREFA", "Vari&aacute;vel(eis) de entrada/sa&iacute;da da tarefa", dominio, modulo)); 2424 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.VARIAVEIS_TAREFA", "Vari&aacute;vel(eis) de entrada/sa&iacute;da da tarefa", dominio, modulo));
2425 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_ALTERACAO_SITUACAO", "Tipo de alteração da situação", dominio, modulo)); 2425 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_ALTERACAO_SITUACAO", "Tipo de alteração da situação", dominio, modulo));
2426 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.ACAO_SAIDA", "Ação de saída", dominio, modulo)); 2426 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.ACAO_SAIDA", "Ação de saída", dominio, modulo));
2427 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_INSTANCIA_VARIAS", "Várias (controlada pelo fluxo)", dominio, modulo)); 2427 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_INSTANCIA_VARIAS", "Várias (controlada pelo fluxo)", dominio, modulo));
2428 - internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_INSTANCIA_UNICA", "Única", dominio, modulo)); 2428 + internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_INSTANCIA_UNICA", "Uma única instância", dominio, modulo));
2429 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_ESTIMATIVA", "Tipo de estimativa do tempo de execução", dominio, modulo)); 2429 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.TIPO_ESTIMATIVA", "Tipo de estimativa do tempo de execução", dominio, modulo));
2430 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.ENGINE_EXECUCAO", "Engine", dominio, modulo)); 2430 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.ENGINE_EXECUCAO", "Engine", dominio, modulo));
2431 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.COR_FUNDO", "Cor de fundo", dominio, modulo)); 2431 internacionalizacaoList.add(new Internacionalizacao("ESI.PROPRIEDADE.COR_FUNDO", "Cor de fundo", dominio, modulo));