Skip to content

Commit ce6d954

Browse files
committed
Refactor Petri net initialization and improve error handling.
Moved Petri net initialization logic to IWorkflowService for better encapsulation and reuse. Enhanced error handling in immediate field processing to avoid failures during case conversion.
1 parent 3861b2c commit ce6d954

3 files changed

Lines changed: 29 additions & 16 deletions

File tree

application-engine/src/main/java/com/netgrif/application/engine/workflow/service/CaseEventHandler.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import com.netgrif.application.engine.importer.service.FieldFactory;
55
import com.netgrif.application.engine.objects.petrinet.domain.dataset.Field;
66
import com.netgrif.application.engine.objects.workflow.domain.Case;
7+
import com.netgrif.application.engine.workflow.service.interfaces.IWorkflowService;
78
import org.bson.Document;
8-
import org.bson.types.ObjectId;
99
import org.slf4j.Logger;
1010
import org.slf4j.LoggerFactory;
1111
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,7 +16,6 @@
1616

1717
import java.util.ArrayList;
1818
import java.util.List;
19-
import java.util.stream.LongStream;
2019

2120
@Component
2221
public class CaseEventHandler extends AbstractMongoEventListener<Case> {
@@ -29,14 +28,25 @@ public class CaseEventHandler extends AbstractMongoEventListener<Case> {
2928
@Autowired
3029
private FieldFactory fieldFactory;
3130

31+
@Autowired
32+
private IWorkflowService workflowService;
33+
3234
@Override
3335
public void onAfterConvert(AfterConvertEvent<Case> event) {
3436
Case useCase = event.getSource();
37+
workflowService.setPetriNet(useCase);
3538
List<Field<?>> immediateFields = new ArrayList<>();
36-
useCase.getImmediateDataFields().forEach(fieldId ->
37-
immediateFields.add(fieldFactory.buildImmediateField(useCase, fieldId))
38-
);
39-
useCase.setImmediateData(immediateFields);
39+
if (useCase.getImmediateDataFields() != null) {
40+
useCase.getImmediateDataFields().forEach(fieldId -> {
41+
try {
42+
immediateFields.add(fieldFactory.buildImmediateField(useCase, fieldId));
43+
} catch (Exception e) {
44+
log.error("Could not build immediate field for case {} and field {}", useCase.getStringId(), fieldId, e);
45+
}
46+
}
47+
);
48+
useCase.setImmediateData(immediateFields);
49+
}
4050
}
4151

4252
@Override

application-engine/src/main/java/com/netgrif/application/engine/workflow/service/WorkflowService.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,17 @@ public Map<String, I18nString> listToMap(List<Case> cases) {
497497
return options;
498498
}
499499

500+
@Override
501+
public void setPetriNet(Case useCase) {
502+
PetriNet model = useCase.getPetriNet();
503+
if (model == null) {
504+
model = new com.netgrif.application.engine.adapter.spring.petrinet.domain.PetriNet((com.netgrif.application.engine.adapter.spring.petrinet.domain.PetriNet) petriNetService.get(new ObjectId(useCase.getPetriNetId())));
505+
useCase.setPetriNet(model);
506+
}
507+
model.initializeTokens(useCase.getActivePlaces());
508+
model.initializeArcs(useCase.getDataSet());
509+
}
510+
500511
private void resolveTaskRefs(Case useCase) {
501512
useCase.getPetriNet().getDataSet().values().stream().filter(f -> f instanceof TaskField).map(TaskField.class::cast).forEach(field -> {
502513
if (field.getDefaultValue() != null && !field.getDefaultValue().isEmpty() && useCase.getDataField(field.getStringId()).getValue() != null &&
@@ -608,16 +619,6 @@ private Map<DataField, String> getEncryptedDataSet(Case useCase) {
608619
return encryptedDataSet;
609620
}
610621

611-
private void setPetriNet(Case useCase) {
612-
PetriNet model = useCase.getPetriNet();
613-
if (model == null) {
614-
model = new com.netgrif.application.engine.adapter.spring.petrinet.domain.PetriNet((com.netgrif.application.engine.adapter.spring.petrinet.domain.PetriNet) petriNetService.get(new ObjectId(useCase.getPetriNetId())));
615-
useCase.setPetriNet(model);
616-
}
617-
model.initializeTokens(useCase.getActivePlaces());
618-
model.initializeArcs(useCase.getDataSet());
619-
}
620-
621622
private EventOutcome addMessageToOutcome(PetriNet net, CaseEventType type, EventOutcome outcome) {
622623
if (net.getCaseEvents().containsKey(type)) {
623624
outcome.setMessage(net.getCaseEvents().get(type).getMessage());

application-engine/src/main/java/com/netgrif/application/engine/workflow/service/interfaces/IWorkflowService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,6 @@ public interface IWorkflowService {
8282
boolean removeTasksFromCase(List<Task> tasks, Case useCase);
8383

8484
Page<Case> search(Predicate predicate, Pageable pageable);
85+
86+
void setPetriNet(Case useCase);
8587
}

0 commit comments

Comments
 (0)