Skip to content

Commit

Permalink
XWIKI-21880: Cannot delete user defined filters
Browse files Browse the repository at this point in the history
  * Improve a bit the logic to use standard exception if there's only
    one provider
  • Loading branch information
surli committed Feb 13, 2024
1 parent 74775da commit babac8a
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -95,24 +95,29 @@ private String getExceptionMessage(String loggerMessage, List<NotificationExcept
{
return String.format("%s - All providers called failed, see exceptions: [%s].",
loggerMessage,
exceptions.stream().map(Exception::getMessage).collect(Collectors.joining(",")));
exceptions.stream().map(ExceptionUtils::getRootCauseMessage).collect(Collectors.joining(",")));
}

private void providerExceptionWrapper(ProviderCallable callable, String loggerMessage) throws NotificationException
{
boolean allFailing = true;
List<NotificationException> exceptions = new ArrayList<>();
for (NotificationFilterPreferenceProvider provider : getProviderList()) {
try {
callable.doInProvider(provider);
allFailing = false;
} catch (NotificationException e) {
this.logger.debug(getProviderDebugMessage(loggerMessage, provider), e);
exceptions.add(e);
List<NotificationFilterPreferenceProvider> providerList = getProviderList();
if (providerList.size() > 1) {
for (NotificationFilterPreferenceProvider provider : providerList) {
try {
callable.doInProvider(provider);
allFailing = false;
} catch (NotificationException e) {
this.logger.debug(getProviderDebugMessage(loggerMessage, provider), e);
exceptions.add(e);
}
}
}
if (allFailing) {
throw new NotificationException(getExceptionMessage(loggerMessage, exceptions));
if (allFailing) {
throw new NotificationException(getExceptionMessage(loggerMessage, exceptions));
}
} else {
callable.doInProvider(providerList.get(0));
}
}

Expand All @@ -122,17 +127,22 @@ private <E> Collection<E> retrieveWithProviderExceptionWrapper(RetrieveWithProvi
boolean allFailing = true;
List<NotificationException> exceptions = new ArrayList<>();
Set<E> result = new HashSet<>();
for (NotificationFilterPreferenceProvider provider : getProviderList()) {
try {
result.addAll(callable.retrieveWithProvider(provider));
allFailing = false;
} catch (NotificationException e) {
this.logger.debug(getProviderDebugMessage(loggerMessage, provider), e);
exceptions.add(e);
List<NotificationFilterPreferenceProvider> providerList = getProviderList();
if (providerList.size() > 1) {
for (NotificationFilterPreferenceProvider provider : getProviderList()) {
try {
result.addAll(callable.retrieveWithProvider(provider));
allFailing = false;
} catch (NotificationException e) {
this.logger.debug(getProviderDebugMessage(loggerMessage, provider), e);
exceptions.add(e);
}
}
}
if (allFailing) {
throw new NotificationException(getExceptionMessage(loggerMessage, exceptions));
if (allFailing) {
throw new NotificationException(getExceptionMessage(loggerMessage, exceptions));
}
} else {
result.addAll(callable.retrieveWithProvider(providerList.get(0)));
}
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,8 @@ void deleteFilterPreferenceProviderException() throws Exception
NotificationException notificationException = assertThrows(NotificationException.class,
() -> filterPreferenceManager.deleteFilterPreference(testUser, filterId));
assertEquals("Error when trying to remove filter preferences [filterId] for user [wiki:test.user] - "
+ "All providers called failed, see exceptions: [error testprovider,error provider1,error provider2].",
+ "All providers called failed, see exceptions: [NotificationException: error testprovider,"
+ "NotificationException: error provider1,NotificationException: error provider2].",
notificationException.getMessage());
}

Expand Down

0 comments on commit babac8a

Please sign in to comment.