Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,6 @@ public void deletePetriNet(String processId, LoggedUser loggedUser, boolean forc
PetriNet petriNet = petriNetOptional.get();
log.info("[{}]: Initiating deletion of Petri net {} version {}", processId, petriNet.getIdentifier(), petriNet.getVersion().toString());

userService.removeRoleOfDeletedPetriNet(petriNet);
workflowService.deleteInstancesOfPetriNet(petriNet, force);
processRoleService.deleteRolesOfNet(petriNet, loggedUser);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,6 @@ protected void assignRolesToActor(Collection<ProcessRole> oldActorRoles, Collect
Set<ProcessRole> rolesNewToUser = getRolesNewToActor(userOldRoles, requestedRoles);
Set<ProcessRole> rolesRemovedFromUser = getRolesRemovedFromActor(userOldRoles, requestedRoles);

String idOfPetriNetContainingRole = getProcessIdRoleBelongsTo(rolesNewToUser, rolesRemovedFromUser);
if (!isGlobalFromFirstRole(rolesNewToUser) && !isGlobalFromFirstRole(rolesRemovedFromUser) && idOfPetriNetContainingRole == null) {
return;
}

oldActorRoles.clear();
oldActorRoles.addAll(updateRequestedRoles(userOldRoles, rolesNewToUser, rolesRemovedFromUser));
Expand Down Expand Up @@ -416,7 +412,7 @@ public Page<ProcessRole> findAllByDefaultName(String name, Pageable pageable) {
@Override
public void deleteRolesOfNet(PetriNet net, LoggedUser loggedUser) {
log.info("[" + net.getStringId() + "]: Initiating deletion of all roles of Petri net " + net.getIdentifier() + " version " + net.getVersion().toString());
List<ProcessResourceId> deletedRoleIds = this.findAllByNetStringId(net.getStringId()).stream().filter(processRole -> processRole.getProcessId() != null).map(ProcessRole::get_id).collect(Collectors.toList());
List<ProcessResourceId> deletedRoleIds = this.findAllByNetStringId(net.getStringId()).stream().filter(processRole -> !processRole.isGlobal()).map(ProcessRole::get_id).collect(Collectors.toList());
Set<String> deletedRoleStringIds = deletedRoleIds.stream().map(ProcessResourceId::toString).collect(Collectors.toSet());

Pageable realmPageable = PageRequest.of(0, paginationProperties.getBackendPageSize());
Expand Down Expand Up @@ -478,19 +474,16 @@ public void deleteGlobalRole(String roleId, LoggedUser loggedUser) {
}
log.info("Initiating deletion of global role with import ID [{}] and object ID [{}]", processRole.getImportId(), processRole.getStringId());
Pageable realmPageable = PageRequest.of(0, paginationProperties.getBackendPageSize());
Pageable usersPageable = PageRequest.of(0, paginationProperties.getBackendPageSize());
Page<Realm> realms;
do {
realms = realmService.getSmallRealm(realmPageable);
realms.forEach(realm -> {
Pageable usersPageable = PageRequest.of(0, paginationProperties.getBackendPageSize());
Page<AbstractUser> users;
do {
users = this.userService.findAllByProcessRoles(Set.of(processRole.get_id()), realm.getName(), usersPageable);
for (AbstractUser user : users) {
removeRoleFromUser(user, processRole, loggedUser);
}
usersPageable = usersPageable.next();
} while (users.hasNext());
Page<AbstractUser> users = userService.findAllByProcessRoles(Set.of(processRole.get_id()), realm.getName(), usersPageable);
while (users.hasContent()) {
users.getContent().forEach(u -> removeRoleFromUser(u, processRole, loggedUser));
users = userService.findAllByProcessRoles(Set.of(processRole.get_id()), realm.getName(), usersPageable);
}
});
realmPageable = realmPageable.next();
} while (realms.hasNext());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ public class UserServiceImpl implements UserService {

private AbstractUser systemUser;

private RealmService realmService;

@Getter
private PaginationProperties paginationProperties;

Expand Down Expand Up @@ -112,6 +114,11 @@ public void setPaginationProperties(PaginationProperties paginationProperties) {
this.paginationProperties = paginationProperties;
}

@Autowired
public void setRealmService(RealmService realmService) {
this.realmService = realmService;
}

@Override
public AbstractUser saveUser(AbstractUser user, String realmId) {
user.setRealmId(realmId);
Expand Down Expand Up @@ -542,15 +549,22 @@ public void removeRoleOfDeletedPetriNet(PetriNet petriNet) {

@Override
public void removeRoleOfDeletedPetriNet(Set<ProcessRole> petriNetRoles) {
String defaultRealmCollection = collectionNameProvider.getDefaultRealmCollection();
Set<ProcessRole> nonGlobalPetriNetRoles = petriNetRoles.stream().filter(r -> !r.isGlobal()).collect(Collectors.toSet());
Collection<ProcessResourceId> roleIds = nonGlobalPetriNetRoles.stream().map(ProcessRole::get_id).collect(Collectors.toSet());
Pageable realmPageable = PageRequest.of(0, paginationProperties.getBackendPageSize());
Pageable pageable = PageRequest.of(0, paginationProperties.getBackendPageSize());
Collection<ProcessResourceId> roleIds = petriNetRoles.stream().map(ProcessRole::get_id).collect(Collectors.toSet());
Page<AbstractUser> users;
Page<Realm> realms;
do {
users = searchUsersByRoleIds(roleIds, defaultRealmCollection, pageable);
users.getContent().forEach(u -> removeRoles(u, petriNetRoles));
pageable = pageable.next();
} while (users.hasNext());
realms = realmService.getSmallRealm(realmPageable);
for (Realm realm : realms.getContent()) {
Page<AbstractUser> users = searchUsersByRoleIds(roleIds, collectionNameProvider.getCollectionNameForRealm(realm.getName()), pageable);
while (users.hasContent()) {
users.getContent().forEach(u -> removeRoles(u, nonGlobalPetriNetRoles));
users = searchUsersByRoleIds(roleIds, collectionNameProvider.getCollectionNameForRealm(realm.getName()), pageable);
}
}
realmPageable = realmPageable.next();
} while (realms.hasNext());
}

@Override
Expand Down
Loading