Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.poi.util.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.data.domain.Page;
Expand Down Expand Up @@ -111,24 +110,44 @@ public class DataService implements IDataService {

@Override
public GetDataEventOutcome getData(String taskId) {
return getData(taskId, new HashMap<>());
return getData(taskId, true);
}

@Override
public GetDataEventOutcome getData(String taskId, boolean eventsEnabled) {
return getData(taskId, new HashMap<>(), eventsEnabled);
}

@Override
public GetDataEventOutcome getData(String taskId, Map<String, String> params) {
return getData(taskId, params, true);
}

@Override
public GetDataEventOutcome getData(String taskId, Map<String, String> params, boolean eventsEnabled) {
Task task = taskService.findOne(taskId);
Case useCase = workflowService.findOne(task.getCaseId());

return getData(task, useCase, params);
return getData(task, useCase, params, eventsEnabled);
}

@Override
public GetDataEventOutcome getData(Task task, Case useCase) {
return getData(task, useCase, new HashMap<>());
}

@Override
public GetDataEventOutcome getData(Task task, Case useCase, boolean eventsEnabled) {
return getData(task, useCase, new HashMap<>(), eventsEnabled);
}

@Override
public GetDataEventOutcome getData(Task task, Case useCase, Map<String, String> params) {
return getData(task, useCase, params, true);
}

@Override
public GetDataEventOutcome getData(Task task, Case useCase, Map<String, String> params, boolean eventsEnabled) {
log.info("[" + useCase.getStringId() + "]: Getting data of task " + task.getTransitionId() + " [" + task.getStringId() + "]");
AbstractUser user = userService.getLoggedOrSystem();
Transition transition = useCase.getPetriNet().getTransition(task.getTransitionId());
Expand All @@ -143,8 +162,10 @@ public GetDataEventOutcome getData(Task task, Case useCase, Map<String, String>
if (isForbidden(fieldId, transition, useCase.getDataField(fieldId)))
return;
Field field = useCase.getPetriNet().getField(fieldId).get();
outcome.addOutcomes(resolveDataEvents(field, DataEventType.GET, EventPhase.PRE, useCase, task, params));
publisher.publishEvent(new GetDataEvent(outcome, EventPhase.PRE, user));
if (eventsEnabled) {
outcome.addOutcomes(resolveDataEvents(field, DataEventType.GET, EventPhase.PRE, useCase, task, params));
publisher.publishEvent(new GetDataEvent(outcome, EventPhase.PRE, user));
}

if (outcome.getMessage() == null) {
Map<String, DataFieldLogic> dataSet = useCase.getPetriNet().getTransition(task.getTransitionId()).getDataSet();
Expand Down Expand Up @@ -176,8 +197,10 @@ public GetDataEventOutcome getData(Task task, Case useCase, Map<String, String>
dataSetFields.add(validationField);
}
}
outcome.addOutcomes(resolveDataEvents(field, DataEventType.GET, EventPhase.POST, useCase, task, params));
publisher.publishEvent(new GetDataEvent(outcome, EventPhase.POST, user));
if (eventsEnabled) {
outcome.addOutcomes(resolveDataEvents(field, DataEventType.GET, EventPhase.POST, useCase, task, params));
publisher.publishEvent(new GetDataEvent(outcome, EventPhase.POST, user));
}
});

workflowService.save(useCase);
Expand Down Expand Up @@ -349,8 +372,18 @@ public GetDataGroupsEventOutcome getDataGroups(String taskId, Locale locale) {
return getDataGroups(taskId, locale, new HashSet<>(), 0, null);
}

@Override
public GetDataGroupsEventOutcome getDataGroups(String taskId, Locale locale, boolean eventsEnabled) {
return getDataGroups(taskId, locale, new HashSet<>(), 0, null, eventsEnabled);
}

@Override
public GetDataGroupsEventOutcome getDataGroups(String taskId, Locale locale, Set<String> collectedTaskIds, int level, String parentTaskRefId) {
return getDataGroups(taskId, locale, collectedTaskIds, level, parentTaskRefId, true);
}

@Override
public GetDataGroupsEventOutcome getDataGroups(String taskId, Locale locale, Set<String> collectedTaskIds, int level, String parentTaskRefId, boolean eventsEnabled) {
Task task = taskService.findOne(taskId);
Case useCase = workflowService.findOne(task.getCaseId());
PetriNet net = useCase.getPetriNet();
Expand All @@ -359,7 +392,7 @@ public GetDataGroupsEventOutcome getDataGroups(String taskId, Locale locale, Set
log.info("Getting groups of task " + taskId + " in case " + useCase.getTitle() + " level: " + level);
List<DataGroup> resultDataGroups = new ArrayList<>();

List<Field<?>> data = getData(task, useCase).getData();
List<Field<?>> data = getData(task, useCase, eventsEnabled).getData();
Map<String, Field<?>> dataFieldMap = data.stream().collect(Collectors.toMap(Field::getImportId, field -> field));
List<DataGroup> dataGroups = transition.getDataGroups().values().stream().map((dg) -> (DataGroup) new com.netgrif.application.engine.adapter.spring.workflow.domain.DataGroup((com.netgrif.application.engine.adapter.spring.workflow.domain.DataGroup) dg)).toList();
for (DataGroup dataGroup : dataGroups) {
Expand All @@ -383,7 +416,7 @@ public GetDataGroupsEventOutcome getDataGroups(String taskId, Locale locale, Set
}
resources.add(resource);
if (field.getType() == FieldType.TASK_REF && shouldResolveTaskRefData(field, transition.getDataSet().get(field.getStringId()))) {
resultDataGroups.addAll(collectTaskRefDataGroups((TaskField) dataFieldMap.get(dataFieldId), locale, collectedTaskIds, level));
resultDataGroups.addAll(collectTaskRefDataGroups((TaskField) dataFieldMap.get(dataFieldId), locale, collectedTaskIds, level, eventsEnabled));
}
}
}
Expand All @@ -409,15 +442,15 @@ private boolean hasRequiredComponentProperty(Component component, String propert
&& component.getProperties().get(propertyName).equals(propertyValue);
}

private List<DataGroup> collectTaskRefDataGroups(TaskField taskRefField, Locale locale, Set<String> collectedTaskIds, int level) {
private List<DataGroup> collectTaskRefDataGroups(TaskField taskRefField, Locale locale, Set<String> collectedTaskIds, int level, boolean eventsEnabled) {
List<String> taskIds = taskRefField.getValue();
List<DataGroup> groups = new ArrayList<>();

if (taskIds != null) {
taskIds = taskIds.stream().filter(id -> !collectedTaskIds.contains(id)).collect(Collectors.toList());
taskIds.forEach(id -> {
collectedTaskIds.add(id);
List<DataGroup> taskRefDataGroups = getDataGroups(id, locale, collectedTaskIds, level + 1, taskRefField.getStringId()).getData();
List<DataGroup> taskRefDataGroups = getDataGroups(id, locale, collectedTaskIds, level + 1, taskRefField.getStringId(), eventsEnabled).getData();
resolveTaskRefBehavior(taskRefField, taskRefDataGroups);
groups.addAll(taskRefDataGroups);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,20 @@ public interface IDataService {

GetDataEventOutcome getData(String taskId);

GetDataEventOutcome getData(String taskId, boolean eventsEnabled);

GetDataEventOutcome getData(String taskId, Map<String, String> params);

GetDataEventOutcome getData(String taskId, Map<String, String> params, boolean eventsEnabled);

GetDataEventOutcome getData(Task task, Case useCase);

GetDataEventOutcome getData(Task task, Case useCase, boolean eventsEnabled);

GetDataEventOutcome getData(Task task, Case useCase, Map<String, String> params);

GetDataEventOutcome getData(Task task, Case useCase, Map<String, String> params, boolean eventsEnabled);

SetDataEventOutcome setData(String taskId, ObjectNode values);

SetDataEventOutcome setData(String taskId, ObjectNode values, Map<String, String> params);
Expand All @@ -51,8 +59,12 @@ public interface IDataService {

FileFieldInputStream getFileByName(Case useCase, FileListField field, String name, Map<String, String> params) throws FileNotFoundException;

GetDataGroupsEventOutcome getDataGroups(String taskId, Locale locale, boolean eventsEnabled);

GetDataGroupsEventOutcome getDataGroups(String taskId, Locale locale, Set<String> collectedTaskIds, int level, String parentTaskRefId);

GetDataGroupsEventOutcome getDataGroups(String taskId, Locale locale, Set<String> collectedTaskIds, int level, String parentTaskRefId, boolean eventsEnabled);

FileFieldInputStream getFileByTask(String taskId, String fieldId, boolean forPreview) throws FileNotFoundException;

FileFieldInputStream getFileByTaskAndName(String taskId, String fieldId, String name) throws FileNotFoundException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ public EntityModel<EventOutcomeWithMessage> getData(String taskId, Locale locale

public EntityModel<EventOutcomeWithMessage> setData(String taskId, ObjectNode dataBody, Locale locale) {
try {
List<com.netgrif.application.engine.objects.petrinet.domain.DataGroup> dataGroups = dataService.getDataGroups(taskId, locale).getData();
List<com.netgrif.application.engine.objects.petrinet.domain.DataGroup> dataGroups = dataService.getDataGroups(taskId, locale, false).getData();
Set<String> referencedTaskIds = new HashSet<>();
referencedTaskIds.add(taskId);
for (com.netgrif.application.engine.objects.petrinet.domain.DataGroup dataGroup : dataGroups) {
Expand Down
Loading