Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
91656a2
[NAE-2266] Introduce active version of process
Retoocs Dec 3, 2025
2bdb241
[NAE-2285] Group as a value of userlists
Retoocs Dec 3, 2025
47b2abd
[NAE-2285] Group as a value of userlists
Retoocs Dec 3, 2025
6a33b5b
[NAE-2285] Group as a value of userlists
Retoocs Dec 8, 2025
18afa21
[NAE-2285] Group as a value of userlists
Retoocs Dec 8, 2025
066acca
[NAE-2285] Group as a value of userlists
Retoocs Dec 8, 2025
901d56e
[NAE-2285] Group as a value of userlists
Retoocs Dec 8, 2025
2e4c194
[NAE-2285] Group as a value of userlists
Retoocs Dec 8, 2025
d82a969
[NAE-2235] Improve Efficiency of Database Reads and Saves
Retoocs Dec 9, 2025
c0eb197
[NAE-2285] Group as a value of userlists
Retoocs Dec 10, 2025
26c270a
[NAE-2285] Group as a value of userlists
Retoocs Dec 9, 2025
8a35fee
[NAE-2285] Group as a value of userlists
Retoocs Dec 10, 2025
7737c92
Merge remote-tracking branch 'origin/NAE-2285' into NAE-2285
Retoocs Dec 10, 2025
45f434d
[NAE-2285] Group as a value of userlists
Retoocs Dec 10, 2025
3d49cad
[NAE-2285] Group as a value of userlists
Retoocs Dec 10, 2025
78ee445
[NAE-2285] Group as a value of userlists
Retoocs Dec 10, 2025
db36f56
[NAE-2285] Group as a value of userlists
Retoocs Dec 10, 2025
7c02a80
Merge remote-tracking branch 'origin/release/7.0.0-rev9' into NAE-2285
Retoocs Dec 10, 2025
d8f536e
[NAE-2285] Group as a value of userlists
Retoocs Dec 10, 2025
f7954c6
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
f08fa0d
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
7fa1aec
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
68a7daf
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
7a04102
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
599e171
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
abf422e
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
27635fa
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
f8fda0d
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
d672bc8
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
aac78a5
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
cf802f4
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
5eb4598
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
98f89de
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
a7139d6
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
612216e
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
7364c84
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
4b3ac77
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
10e05d5
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
44ca46a
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
5fccd48
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
03a9561
[NAE-2285] Group as a value of userlists
Retoocs Dec 12, 2025
ff7ce23
[NAE-2285] Group as a value of userlists
Retoocs Dec 15, 2025
b67faeb
[NAE-2285] Group as a value of userlists
Retoocs Dec 15, 2025
5ed4b52
[NAE-2285] Group as a value of userlists
Retoocs Dec 15, 2025
289911e
[NAE-2285] Group as a value of userlists
Retoocs Dec 15, 2025
166747e
[NAE-2285] Group as a value of userlists
Retoocs Dec 15, 2025
fcb5ed3
[NAE-2285] Group as a value of userlists
Retoocs Dec 15, 2025
353503e
[NAE-2285] Group as a value of userlists
Retoocs Dec 15, 2025
f4ec90f
[NAE-2285] Group as a value of userlists
Retoocs Dec 15, 2025
80f2493
[NAE-2285] Group as a value of userlists
Retoocs Dec 15, 2025
252fdda
Merge remote-tracking branch 'origin/release/7.0.0-rev10' into NAE-2285
Retoocs Jan 7, 2026
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 @@ -33,6 +33,7 @@ import com.netgrif.application.engine.objects.auth.domain.ActorTransformer
import com.netgrif.application.engine.menu.services.interfaces.DashboardItemService
import com.netgrif.application.engine.menu.services.interfaces.DashboardManagementService
import com.netgrif.application.engine.menu.services.interfaces.IMenuItemService
import com.netgrif.application.engine.objects.auth.domain.Group
import com.netgrif.application.engine.objects.auth.domain.LoggedUser
import com.netgrif.application.engine.objects.petrinet.domain.I18nString
import com.netgrif.application.engine.objects.petrinet.domain.PetriNet
Expand Down Expand Up @@ -781,10 +782,27 @@ class ActionDelegate {
if (field instanceof NumberField) {
value = value as Double
}
if (field instanceof UserListField && (value instanceof String[] || value instanceof List)) {
LinkedHashSet<UserFieldValue> users = new LinkedHashSet<>()
value.each { id -> users.add(new UserFieldValue(userService.findById(id as String, null))) }
value = new UserListFieldValue(users)
if (field instanceof ActorListField && (value instanceof String[] || value instanceof List)) {
LinkedHashSet<ActorFieldValue> actorFieldValues = new LinkedHashSet<>()
value.each { id ->
AbstractUser user = userService.findById(id as String, null)
if (user != null) {
actorFieldValues.add(new UserFieldValue(user))
} else {
Group group = groupService.findById((String) id)
actorFieldValues.add(new GroupFieldValue(group))
}
}
value = new ActorListFieldValue(actorFieldValues)
}
if (field instanceof ActorField && value instanceof String) {
AbstractUser user = userService.findById(value, null)
if (user != null) {
value = new UserFieldValue(user)
} else {
Group group = groupService.findById(value)
value = new GroupFieldValue(group)
}
}
// if (field instanceof TaskField && targetTask.isPresent()) {
// dataService.validateTaskRefValue(value, targetTask.get().getStringId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,17 +181,17 @@ public ResponseEntity<User> getUser(@PathVariable("realmId") String realmId, @Pa
// return null;
// }
// LoggedUser loggedUser = (LoggedUser) auth.getPrincipal();
// String userId = updates.getStringId();
// String actorId = updates.getStringId();
// IUser user;
// try {
// user = userService.findById(userId, updatedUser.getRealmId());
// user = userService.findById(actorId, updatedUser.getRealmId());
// } catch (IllegalArgumentException e) {
// log.error("Could not find user with id [{}]", userId, e);
// log.error("Could not find user with id [{}]", actorId, e);
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
// }
// user = userService.update(user, updates.getUpdatedUser());
// securityContextService.saveToken(userId);
// if (Objects.equals(loggedUser.getId(), userId)) {
// securityContextService.saveToken(actorId);
// if (Objects.equals(loggedUser.getId(), actorId)) {
// loggedUser.setFirstName(user.getFirstName());
// loggedUser.setLastName(user.getLastName());
// securityContextService.reloadSecurityContext(loggedUser);
Expand Down Expand Up @@ -239,15 +239,15 @@ public ResponseEntity<ResponseMessage> assignRolesToUser(@PathVariable("realmId"
// @ApiResponse(responseCode = "403", description = "Caller doesn't fulfill the authorisation requirements"),
// @ApiResponse(responseCode = "500", description = "Internal server error")
// })
// public ResponseEntity<ResponseMessage> assignNegativeRolesToUser(@PathVariable("realmId") String realmId, @PathVariable("id") String userId, @RequestBody Set<String> roleIds, Authentication auth) {
// public ResponseEntity<ResponseMessage> assignNegativeRolesToUser(@PathVariable("realmId") String realmId, @PathVariable("id") String actorId, @RequestBody Set<String> roleIds, Authentication auth) {
// try {
// AbstractUser user = userService.findById(userId, realmId);
// AbstractUser user = userService.findById(actorId, realmId);
// processRoleService.assignNegativeRolesToUser(user, roleIds.stream().map(ProcessResourceId::new).collect(Collectors.toSet()), (LoggedUser) auth.getPrincipal());
// log.info("Negative process roles {} assigned to user [{}]", roleIds, userId);
// return ResponseEntity.ok(ResponseMessage.createSuccessMessage("Selected negative roles assigned to user " + userId));
// log.info("Negative process roles {} assigned to user [{}]", roleIds, actorId);
// return ResponseEntity.ok(ResponseMessage.createSuccessMessage("Selected negative roles assigned to user " + actorId));
// } catch (IllegalArgumentException e) {
// log.error("Assigning negative roles to user with id [{}] has failed!", userId, e);
// return ResponseEntity.badRequest().body(ResponseMessage.createErrorMessage("Assigning negative roles to user " + userId + " has failed!"));
// log.error("Assigning negative roles to user with id [{}] has failed!", actorId, e);
// return ResponseEntity.badRequest().body(ResponseMessage.createErrorMessage("Assigning negative roles to user " + actorId + " has failed!"));
// }
// }
//
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.netgrif.application.engine.elastic.service;

import com.netgrif.application.engine.objects.elastic.domain.UserField;
import com.netgrif.application.engine.objects.elastic.domain.UserListField;
import com.netgrif.application.engine.objects.elastic.domain.*;
import com.netgrif.application.engine.elastic.service.interfaces.IElasticCaseMappingService;
import com.netgrif.application.engine.objects.petrinet.domain.I18nString;
Expand Down Expand Up @@ -36,7 +34,7 @@ protected void populateDataSet(ElasticCase transformedCase, Case useCase) {
}

protected Optional<DataField> transformDataField(String fieldId, Case useCase) {
Field netField = useCase.getField(fieldId);
Field<?> netField = useCase.getField(fieldId);
com.netgrif.application.engine.objects.workflow.domain.DataField caseField = useCase.getDataField(fieldId);

if (caseField.getValue() == null) {
Expand All @@ -51,8 +49,8 @@ protected Optional<DataField> transformDataField(String fieldId, Case useCase) {
return this.transformNumberField(caseField);
} else if (netField instanceof com.netgrif.application.engine.objects.petrinet.domain.dataset.ButtonField) {
return this.transformButtonField(caseField);
} else if (netField instanceof com.netgrif.application.engine.objects.petrinet.domain.dataset.UserField) {
return this.transformUserField(caseField);
} else if (netField instanceof com.netgrif.application.engine.objects.petrinet.domain.dataset.ActorField) {
return this.transformActorField(caseField);
} else if (netField instanceof com.netgrif.application.engine.objects.petrinet.domain.dataset.DateField) {
return this.transformDateField(caseField, (com.netgrif.application.engine.objects.petrinet.domain.dataset.DateField) netField);
} else if (netField instanceof DateTimeField) {
Expand All @@ -67,8 +65,8 @@ protected Optional<DataField> transformDataField(String fieldId, Case useCase) {
return this.transformFileField(caseField);
} else if (netField instanceof FileListField) {
return this.transformFileListField(caseField);
} else if (netField instanceof com.netgrif.application.engine.objects.petrinet.domain.dataset.UserListField) {
return this.transformUserListField(caseField);
} else if (netField instanceof com.netgrif.application.engine.objects.petrinet.domain.dataset.ActorListField) {
return this.transformActorListField(caseField);
} else if (netField instanceof com.netgrif.application.engine.objects.petrinet.domain.dataset.I18nField) {
return this.transformI18nField(caseField, (com.netgrif.application.engine.objects.petrinet.domain.dataset.I18nField) netField);
} else if (netField instanceof com.netgrif.application.engine.objects.petrinet.domain.dataset.CaseField) {
Expand All @@ -88,7 +86,7 @@ protected Optional<DataField> transformDataField(String fieldId, Case useCase) {
protected Optional<DataField> transformMultichoiceMapField
(com.netgrif.application.engine.objects.workflow.domain.DataField multichoiceMap, MultichoiceMapField netField) {
Optional<Set> optValues = this.getMultichoiceValue(multichoiceMap, netField);
if (!optValues.isPresent()) {
if (optValues.isEmpty()) {
return Optional.empty();
}
Set mapValues = optValues.get();
Expand All @@ -110,22 +108,23 @@ protected Optional<DataField> transformDataField(String fieldId, Case useCase) {
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.I18nField(keys, values, ((I18nString) dataField.getValue()).getTranslations()));
}

protected Optional<DataField> transformCaseFieldField(com.netgrif.application.engine.objects.workflow.domain.DataField dataField, com.netgrif.application.engine.objects.petrinet.domain.dataset.CaseField netField) {
String[] allowedNets = dataField.getAllowedNets().toArray(new String[0]);
String[] referencedCases = ((List<String>) dataField.getValue()).toArray(new String[0]);
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.CaseField(referencedCases,allowedNets));
protected Optional<DataField> transformCaseFieldField(com.netgrif.application.engine.objects.workflow.domain.DataField dataField,
com.netgrif.application.engine.objects.petrinet.domain.dataset.CaseField netField) {
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.CaseField(
(List<String>) dataField.getValue(), dataField.getAllowedNets()));
}

protected Optional<DataField> transformFilterFieldField(com.netgrif.application.engine.objects.workflow.domain.DataField dataField, com.netgrif.application.engine.objects.petrinet.domain.dataset.FilterField netField) {
String[] allowedNets = dataField.getAllowedNets().toArray(new String[0]);
Map<String, Object> filterMetadata = dataField.getFilterMetadata();
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.FilterField(dataField.getValue().toString(),allowedNets, filterMetadata));
protected Optional<DataField> transformFilterFieldField(com.netgrif.application.engine.objects.workflow.domain.DataField dataField,
com.netgrif.application.engine.objects.petrinet.domain.dataset.FilterField netField) {
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.FilterField(
dataField.getValue().toString(), dataField.getAllowedNets(), dataField.getFilterMetadata()));
}

protected Optional<DataField> transformStringCollectionField(com.netgrif.application.engine.objects.workflow.domain.DataField dataField, com.netgrif.application.engine.objects.petrinet.domain.dataset.StringCollectionField netField) {
if (dataField.getValue() != null && dataField.getValue() instanceof Collection && !((Collection<?>) dataField.getValue()).isEmpty()) {
String[] values = ((Collection<?>) dataField.getValue()).toArray(new String[0]);
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.StringCollectionField(values));
protected Optional<DataField> transformStringCollectionField(com.netgrif.application.engine.objects.workflow.domain.DataField dataField,
com.netgrif.application.engine.objects.petrinet.domain.dataset.StringCollectionField netField) {
if (dataField.getValue() != null && dataField.getValue() instanceof Collection<?> dataFieldValue && !dataFieldValue.isEmpty()) {
List<String> dataFieldValueAsList = dataFieldValue.stream().map(String::valueOf).toList();
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.StringCollectionField(dataFieldValueAsList));
}
return Optional.empty();
}
Expand All @@ -135,7 +134,8 @@ protected Optional<DataField> transformStringCollectionField(com.netgrif.applica
Map<String, I18nString> options = this.getFieldOptions(enumMap, netField);
String selectedKey = (String) enumMap.getValue();
I18nString selectedValue = options.get(selectedKey);
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.MapField(new AbstractMap.SimpleEntry<>(selectedKey, selectedValue != null ? selectedValue : new I18nString(""))));
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.MapField(
new AbstractMap.SimpleEntry<>(selectedKey, selectedValue != null ? selectedValue : new I18nString(""))));
}

private Map<String, I18nString> getFieldOptions
Expand All @@ -149,7 +149,7 @@ protected Optional<DataField> transformStringCollectionField(com.netgrif.applica
protected Optional<DataField> transformMultichoiceField
(com.netgrif.application.engine.objects.workflow.domain.DataField multichoiceField, MultichoiceField netField) {
Optional<Set> optValues = this.getMultichoiceValue(multichoiceField, netField);
if (!optValues.isPresent()) {
if (optValues.isEmpty()) {
return Optional.empty();
}
Set values = optValues.get();
Expand All @@ -165,7 +165,7 @@ protected Optional<DataField> transformStringCollectionField(com.netgrif.applica
log.error("MultichoiceField has element value of illegal type! Expected: I18nString, Found: " + value.getClass().getCanonicalName());
}
});
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.TextField(translations.toArray(new String[0])));
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.TextField(translations));
}

private Optional<Set> getMultichoiceValue(com.netgrif.application.engine.objects.workflow.domain.DataField
Expand All @@ -188,7 +188,7 @@ private Optional<Set> getMultichoiceValue(com.netgrif.application.engine.objects
(com.netgrif.application.engine.objects.workflow.domain.DataField enumField) {
Object value = enumField.getValue();
if (value instanceof I18nString) {
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.TextField(I18nStringUtils.collectTranslations((I18nString) value).toArray(new String[0])));
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.TextField(I18nStringUtils.collectTranslations((I18nString) value)));
} else if (value instanceof String) {
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.TextField((String) value));
} else {
Expand All @@ -211,46 +211,27 @@ private Optional<Set> getMultichoiceValue(com.netgrif.application.engine.objects
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.ButtonField((Integer) buttonField.getValue()));
}

protected Optional<DataField> transformUserField
(com.netgrif.application.engine.objects.workflow.domain.DataField userField) {
UserFieldValue user = (UserFieldValue) userField.getValue();
if (user == null)
protected Optional<DataField> transformActorField
(com.netgrif.application.engine.objects.workflow.domain.DataField actorField) {
ActorFieldValue actorFieldValue = (ActorFieldValue) actorField.getValue();
if (actorFieldValue == null)
return Optional.empty();
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.UserField(this.transformUserValue(user)));
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.ActorField(actorFieldValue.buildMappingData()));
}

protected Optional<DataField> transformUserListField
(com.netgrif.application.engine.objects.workflow.domain.DataField userListField) {
UserListFieldValue userListValue = (UserListFieldValue) userListField.getValue();
UserField.UserMappingData[] userMappingData = userListValue.getUserValues().stream().map(this::transformUserListValue).toArray(UserField.UserMappingData[]::new);
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.UserListField(userMappingData));
}

private UserField.UserMappingData transformUserValue(UserFieldValue user) {
return new UserField.UserMappingData(user.getId(), user.getRealmId(), user.getUsername(), buildFullName(user.getFirstName(), user.getLastName()).toString());
}

private UserListField.UserMappingData transformUserListValue(UserFieldValue user) {
return new UserListField.UserMappingData(user.getId(), user.getRealmId(), user.getUsername(), buildFullName(user.getFirstName(), user.getLastName()).toString());
}

private StringBuilder buildFullName(String name, String surname) {
StringBuilder fullName = new StringBuilder();
if (name != null) {
fullName.append(name);
fullName.append(" ");
}
if (surname != null) {
fullName.append(surname);
}
return fullName;
protected Optional<DataField> transformActorListField
(com.netgrif.application.engine.objects.workflow.domain.DataField actorListField) {
ActorListFieldValue actorListFieldValue = (ActorListFieldValue) actorListField.getValue();
List<ActorMappingData> actorMappingDataList = actorListFieldValue.getActorValues().stream()
.map(ActorFieldValue::buildMappingData)
.toList();
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.ActorListField(actorMappingDataList));
}

protected Optional<DataField> transformDateField
(com.netgrif.application.engine.objects.workflow.domain.DataField
dateField, com.netgrif.application.engine.objects.petrinet.domain.dataset.DateField netField) {
if (dateField.getValue() instanceof LocalDate) {
LocalDate date = (LocalDate) dateField.getValue();
if (dateField.getValue() instanceof LocalDate date) {
return formatDateField(LocalDateTime.of(date, LocalTime.MIDNIGHT));
} else if (dateField.getValue() instanceof Date) {
// log.warn(String.format("DateFields should have LocalDate values! DateField (%s) with Date value found! Value will be converted for indexation.", netField.getImportId()));
Expand Down Expand Up @@ -310,7 +291,7 @@ private Optional<DataField> formatDateField(LocalDateTime date) {

protected Optional<DataField> transformFileListField
(com.netgrif.application.engine.objects.workflow.domain.DataField fileListField) {
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.FileField(((FileListFieldValue) fileListField.getValue()).getNamesPaths().toArray(new FileFieldValue[0])));
return Optional.of(new com.netgrif.application.engine.adapter.spring.elastic.domain.FileField(((FileListFieldValue) fileListField.getValue()).getNamesPaths()));
}

protected Optional<DataField> transformOtherFields
Expand Down
Loading
Loading