diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDto.java index 7a62894bbb2..0f000cdd33d 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDto.java @@ -25,9 +25,10 @@ import javax.annotation.Nullable; import static org.sonar.api.measures.Metric.ValueType.DATA; import static org.sonar.api.measures.Metric.ValueType.DISTRIB; import static org.sonar.api.measures.Metric.ValueType.STRING; -import static org.sonar.db.metric.MetricDtoValidator.validateDescription; -import static org.sonar.db.metric.MetricDtoValidator.validateKey; -import static org.sonar.db.metric.MetricDtoValidator.validateShortName; +import static org.sonar.db.metric.MetricValidator.checkMetricDescription; +import static org.sonar.db.metric.MetricValidator.checkMetricDomain; +import static org.sonar.db.metric.MetricValidator.checkMetricKey; +import static org.sonar.db.metric.MetricValidator.checkMetricName; public class MetricDto { @@ -77,7 +78,7 @@ public class MetricDto { } public MetricDto setKey(String key) { - this.kee = validateKey(key); + this.kee = checkMetricKey(key); return this; } @@ -86,7 +87,7 @@ public class MetricDto { } public MetricDto setShortName(String shortName) { - this.shortName = validateShortName(shortName); + this.shortName = checkMetricName(shortName); return this; } @@ -108,7 +109,7 @@ public class MetricDto { } public MetricDto setDescription(@Nullable String description) { - this.description = validateDescription(description); + this.description = checkMetricDescription(description); return this; } @@ -118,7 +119,7 @@ public class MetricDto { } public MetricDto setDomain(@Nullable String domain) { - this.domain = domain; + this.domain = checkMetricDomain(domain); return this; } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDtoValidator.java b/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricValidator.java similarity index 76% rename from server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDtoValidator.java rename to server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricValidator.java index 96069dd6a07..3440c871aad 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDtoValidator.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricValidator.java @@ -26,23 +26,24 @@ import javax.annotation.Nullable; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Strings.isNullOrEmpty; -public class MetricDtoValidator { +public class MetricValidator { private static final int MAX_KEY_LENGTH = 64; private static final int MAX_NAME_LENGTH = 64; + private static final int MAX_DOMAIN_LENGTH = 64; private static final int MAX_DESCRIPTION_LENGTH = 255; - private MetricDtoValidator() { + private MetricValidator() { // static utility methods only } - static String validateKey(String key) { + public static String checkMetricKey(String key) { checkArgument(!isNullOrEmpty(key), "Metric key cannot be empty"); checkArgument(key.length() <= MAX_NAME_LENGTH, "Metric key length (%s) is longer than the maximum authorized (%s). '%s' was provided.", key.length(), MAX_KEY_LENGTH, key); return key; } - static String validateShortName(String name) { + public static String checkMetricName(String name) { checkArgument(!isNullOrEmpty(name), "Metric name cannot be empty"); checkArgument(name.length() <= MAX_NAME_LENGTH, "Metric name length (%s) is longer than the maximum authorized (%s). '%s' was provided.", name.length(), MAX_NAME_LENGTH, name); @@ -50,7 +51,7 @@ public class MetricDtoValidator { } @CheckForNull - static String validateDescription(@Nullable String description) { + public static String checkMetricDescription(@Nullable String description) { if (description == null) { return null; } @@ -60,4 +61,16 @@ public class MetricDtoValidator { return description; } + + @CheckForNull + public static String checkMetricDomain(@Nullable String domain) { + if (domain == null) { + return null; + } + + checkArgument(domain.length() <= MAX_DOMAIN_LENGTH, "Metric domain length (%s) is longer than the maximum authorized (%s). '%s' was provided.", + domain.length(), MAX_DOMAIN_LENGTH, domain); + + return domain; + } } diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/metric/MetricDtoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/metric/MetricDtoTest.java index 41a2cb454cd..5058baadda4 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/metric/MetricDtoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/metric/MetricDtoTest.java @@ -109,4 +109,14 @@ public class MetricDtoTest { underTest.setDescription(a256); } + + @Test + public void fail_if_domain_longer_than_64_characters() { + String a65 = repeat("a", 65); + + expectedException.expect(IllegalArgumentException.class); + expectedException.expectMessage("Metric domain length (65) is longer than the maximum authorized (64). '" + a65 + "' was provided."); + + underTest.setDomain(a65); + } }