in scim-server/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java [343:378]
private void cleanup(String bulkIdKeyToCleanup, Map<String, Set<String>> transitiveReverseDependencies, Map<String, BulkOperation> bulkIdKeyToOperationResult) {
Set<String> reverseDependencies = transitiveReverseDependencies.getOrDefault(bulkIdKeyToCleanup, Collections.emptySet());
BulkOperation operationResult = bulkIdKeyToOperationResult.get(bulkIdKeyToCleanup);
String bulkId = operationResult.getBulkId();
ScimResource scimResource = operationResult.getData();
@SuppressWarnings("unchecked")
Class<ScimResource> scimResourceClass = (Class<ScimResource>) scimResource.getClass();
Repository<ScimResource> repository = this.repositoryRegistry.getRepository(scimResourceClass);
try {
if (StringUtils.isNotBlank(scimResource.getId())) {
repository.delete(scimResource.getId());
}
} catch (ResourceException unableToDeleteResourceException) {
log.error("Could not delete ScimResource after failure: {}", scimResource);
}
for (String dependentBulkIdKey : reverseDependencies) {
BulkOperation dependentOperationResult = bulkIdKeyToOperationResult.get(dependentBulkIdKey);
if (!(dependentOperationResult.getResponse() instanceof ErrorResponse))
try {
ScimResource dependentResource = dependentOperationResult.getData();
String dependentResourceId = dependentResource.getId();
@SuppressWarnings("unchecked")
Class<ScimResource> dependentResourceClass = (Class<ScimResource>) dependentResource.getClass();
Repository<ScimResource> dependentResourceRepository = this.repositoryRegistry.getRepository(dependentResourceClass);
dependentOperationResult.setData(null);
dependentOperationResult.setLocation(null);
createAndSetErrorResponse(dependentOperationResult, Status.CONFLICT, String.format(OPERATION_DEPENDS_ON_FAILED_OPERATION, bulkId, dependentBulkIdKey));
dependentResourceRepository.delete(dependentResourceId);
} catch (ResourceException unableToDeleteResourceException) {
log.error("Could not delete depenedent ScimResource after failing to update dependee", unableToDeleteResourceException);
}
}
}