From 34857ffd06e8c958afd70656740e51895ff4ca1b Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Tue, 17 Dec 2013 13:40:41 +0100 Subject: [PATCH] SONAR-4535 BadRequestException is now immutable --- .../exceptions/BadRequestException.java | 34 ++++++++++++------- .../qualityprofile/QProfileOperations.java | 13 ++++--- .../sonar/server/rule/ProfileRuleQuery.java | 17 ++++++---- .../exceptions/BadRequestExceptionTest.java | 4 +-- 4 files changed, 39 insertions(+), 29 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/exceptions/BadRequestException.java b/sonar-server/src/main/java/org/sonar/server/exceptions/BadRequestException.java index ee792637e5c..e0bff2fafbb 100644 --- a/sonar-server/src/main/java/org/sonar/server/exceptions/BadRequestException.java +++ b/sonar-server/src/main/java/org/sonar/server/exceptions/BadRequestException.java @@ -36,31 +36,44 @@ public class BadRequestException extends ServerException { private static final int BAD_REQUEST = 400; - private final List errors = newArrayList(); + private List errors = newArrayList(); public BadRequestException(String message) { super(BAD_REQUEST, message); } + public BadRequestException(String message, List errors) { + super(BAD_REQUEST, message); + this.errors = errors; + } + public BadRequestException(@Nullable String message, @Nullable String l10nKey, @Nullable Object[] l10nParams) { super(BAD_REQUEST, message, l10nKey, l10nParams); } + public BadRequestException(@Nullable String message, @Nullable String l10nKey, @Nullable Object[] l10nParams, List errors) { + super(BAD_REQUEST, message, l10nKey, l10nParams); + this.errors = errors; + } + public static BadRequestException of(String message) { return new BadRequestException(message); } - public static BadRequestException ofL10n(String l10nKey, Object... l10nParams) { - return new BadRequestException(null, l10nKey, l10nParams); + public static BadRequestException of(String message, List errors) { + return new BadRequestException(message, errors); } - public BadRequestException addError(String text) { - return addError(Message.of(text)); + public static BadRequestException of(List errors) { + return new BadRequestException(null, errors); } - public BadRequestException addError(Message message) { - errors.add(message); - return this; + public static BadRequestException ofL10n(String l10nKey, Object... l10nParams) { + return new BadRequestException(null, l10nKey, l10nParams); + } + + public static BadRequestException ofL10n(List errors, String l10nKey, Object... l10nParams) { + return new BadRequestException(null, l10nKey, l10nParams, errors); } /** @@ -141,9 +154,4 @@ public class BadRequestException extends ServerException { } } - public void checkMessages() { - if (! errors.isEmpty()) { - throw this; - } - } } diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java index b23c7cd1904..3332e99b08b 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java @@ -155,14 +155,13 @@ public class QProfileOperations implements ServerComponent { } private void processValidationMessages(ValidationMessages messages, NewProfileResult result) { - BadRequestException exception = BadRequestException.of("Fail to create profile"); - for (String error : messages.getErrors()) { - exception.addError(error); - } - if (!exception.errors().isEmpty()) { - throw exception; + if (!messages.getErrors().isEmpty()) { + List errors = newArrayList(); + for (String error : messages.getErrors()) { + errors.add(BadRequestException.Message.of(error)); + } + throw BadRequestException.of("Fail to create profile", errors); } - result.setWarnings(messages.getWarnings()); result.setInfos(messages.getInfos()); } diff --git a/sonar-server/src/main/java/org/sonar/server/rule/ProfileRuleQuery.java b/sonar-server/src/main/java/org/sonar/server/rule/ProfileRuleQuery.java index a24ca5bed43..7abd37ca151 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/ProfileRuleQuery.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/ProfileRuleQuery.java @@ -33,6 +33,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import static com.google.common.collect.Lists.newArrayList; + /** * @since 4.2 */ @@ -57,16 +59,16 @@ public class ProfileRuleQuery { } public static ProfileRuleQuery parse(Map params) { - BadRequestException validationException = BadRequestException.of("Incorrect rule search parameters"); + List errors = newArrayList(); - validatePresenceOf(params, validationException, PARAM_PROFILE_ID); + validatePresenceOf(params, errors, PARAM_PROFILE_ID); ProfileRuleQuery result = new ProfileRuleQuery(); try { result.profileId = RubyUtils.toInteger(params.get(PARAM_PROFILE_ID)); } catch (Exception badProfileId) { - validationException.addError("profileId could not be parsed"); + errors.add(BadRequestException.Message.of("profileId could not be parsed")); } @@ -83,15 +85,16 @@ public class ProfileRuleQuery { result.addStatuses(optionalVarargs(params.get(PARAM_STATUSES))); } - validationException.checkMessages(); - + if (!errors.isEmpty()) { + throw BadRequestException.of("Incorrect rule search parameters", errors); + } return result; } - private static void validatePresenceOf(Map params, BadRequestException validationException, String... paramNames) { + private static void validatePresenceOf(Map params, List errors, String... paramNames) { for (String param: paramNames) { if (params.get(param) == null) { - validationException.addError("Missing parameter "+param); + errors.add(BadRequestException.Message.of("Missing parameter " + param)); } } } diff --git a/sonar-server/src/test/java/org/sonar/server/exceptions/BadRequestExceptionTest.java b/sonar-server/src/test/java/org/sonar/server/exceptions/BadRequestExceptionTest.java index 770d9d3071f..ce8518641ea 100644 --- a/sonar-server/src/test/java/org/sonar/server/exceptions/BadRequestExceptionTest.java +++ b/sonar-server/src/test/java/org/sonar/server/exceptions/BadRequestExceptionTest.java @@ -22,6 +22,7 @@ package org.sonar.server.exceptions; import org.junit.Test; +import static com.google.common.collect.Lists.newArrayList; import static org.fest.assertions.Assertions.assertThat; public class BadRequestExceptionTest { @@ -42,8 +43,7 @@ public class BadRequestExceptionTest { @Test public void test_text_error_message() throws Exception { - BadRequestException exception = BadRequestException.of("error"); - exception.addError("new error"); + BadRequestException exception = BadRequestException.of("error", newArrayList(BadRequestException.Message.of("new error"))); assertThat(exception.errors()).hasSize(1); assertThat(exception.errors().get(0).text()).isEqualTo("new error"); -- 2.39.5