diff options
author | Simon Brandhof <simon.brandhof@gmail.com> | 2012-10-09 14:17:53 +0200 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@gmail.com> | 2012-10-09 14:17:53 +0200 |
commit | 1dbfa498097b5a67a6a1706abac16ddc24c2acf0 (patch) | |
tree | 6fe741db73195e3109c80f41c5f12ab5fb4ad4ca /sonar-core | |
parent | 223d3f26c6391622c0770f3bc65fdbd54b85233c (diff) | |
download | sonarqube-1dbfa498097b5a67a6a1706abac16ddc24c2acf0.tar.gz sonarqube-1dbfa498097b5a67a6a1706abac16ddc24c2acf0.zip |
SONAR_3621 add missing support of key regexp
Diffstat (limited to 'sonar-core')
6 files changed, 40 insertions, 1 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilter.java b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilter.java index 0fbf9f2f6d6..9b9c124aa13 100644 --- a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilter.java +++ b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilter.java @@ -34,6 +34,7 @@ public class MeasureFilter { private List<String> resourceScopes = Lists.newArrayList(); private List<String> resourceQualifiers = Lists.newArrayList(); private List<String> resourceLanguages = Lists.newArrayList(); + private String resourceKeyRegexp; private String resourceName; private Date fromDate = null, toDate = null; private boolean userFavourites = false; @@ -105,6 +106,15 @@ public class MeasureFilter { return this; } + public String getResourceKeyRegexp() { + return resourceKeyRegexp; + } + + public MeasureFilter setResourceKeyRegexp(String s) { + this.resourceKeyRegexp = s; + return this; + } + public MeasureFilter addCondition(MeasureFilterCondition condition) { this.measureConditions.add(condition); return this; diff --git a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterDecoder.java b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterDecoder.java index 7cf092bed00..c1871be38de 100644 --- a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterDecoder.java +++ b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterDecoder.java @@ -58,6 +58,7 @@ public class MeasureFilterDecoder implements ServerComponent { filter.setResourceQualifiers((List<String>) map.get("qualifiers")); filter.setResourceLanguages((List<String>) map.get("languages")); filter.setResourceName((String) map.get("name")); + filter.setResourceKeyRegexp((String) map.get("keyRegexp")); if (map.containsKey("fromDate")) { filter.setFromDate(toDate(map, "fromDate")); diff --git a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterExecutor.java b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterExecutor.java index b529f5a384a..f930d07118e 100644 --- a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterExecutor.java +++ b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterExecutor.java @@ -52,6 +52,7 @@ public class MeasureFilterExecutor implements ServerComponent { if (isValid(filter, context)) { MeasureFilterSql sql = new MeasureFilterSql(database, filter, context); context.setSql(sql.sql()); + System.out.println(sql.sql()); Connection connection = session.getConnection(); rows = sql.execute(connection); } else { diff --git a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSql.java b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSql.java index 3952a86396f..40f35126b39 100644 --- a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSql.java +++ b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSql.java @@ -173,6 +173,14 @@ class MeasureFilterSql { } sql.append(") "); } + if (StringUtils.isNotBlank(filter.getResourceKeyRegexp())) { + sql.append(" AND UPPER(p.kee) LIKE '"); + // limitation : special characters _ and % are not escaped + String regexp = StringEscapeUtils.escapeSql(filter.getResourceKeyRegexp()); + regexp = StringUtils.replaceChars(regexp, '*', '%'); + regexp = StringUtils.replaceChars(regexp, '?', '_'); + sql.append(StringUtils.upperCase(regexp)).append("'"); + } SnapshotDto baseSnapshot = context.getBaseSnapshot(); if (baseSnapshot != null) { if (filter.isOnBaseResourceChildren()) { diff --git a/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterDecoderTest.java b/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterDecoderTest.java index 750cd6667d0..3dedb2d09a1 100644 --- a/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterDecoderTest.java +++ b/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterDecoderTest.java @@ -51,7 +51,7 @@ public class MeasureFilterDecoderTest { @Test public void should_decode() throws ParseException { String json = "{\"base\": \"org.struts\", \"onBaseChildren\": true, \"scopes\": [\"PRJ\"], " + - "\"qualifiers\": [\"TRK\",\"CLA\"], " + + "\"qualifiers\": [\"TRK\",\"CLA\"], \"keyRegexp\": \"*foo*\"" + "\"languages\": [\"java\", \"php\"], \"name\": \"Struts\", \"fromDate\": \"2012-12-25\", " + "\"toDate\": \"2013-01-31\", " + "\"favourites\": true, " + @@ -66,6 +66,7 @@ public class MeasureFilterDecoderTest { assertThat(filter.getResourceQualifiers()).containsExactly("TRK", "CLA"); assertThat(filter.getResourceLanguages()).containsExactly("java", "php"); assertThat(filter.getResourceName()).isEqualTo("Struts"); + assertThat(filter.getResourceKeyRegexp()).isEqualTo("*foo*"); assertThat(filter.getFromDate().getYear()).isEqualTo(2012 - 1900); assertThat(filter.getToDate().getYear()).isEqualTo(2013 - 1900); assertThat(filter.isOnFavourites()).isTrue(); @@ -107,6 +108,7 @@ public class MeasureFilterDecoderTest { assertThat(filter.getResourceQualifiers()).isEmpty(); assertThat(filter.getResourceLanguages()).isEmpty(); assertThat(filter.getResourceName()).isNull(); + assertThat(filter.getResourceKeyRegexp()).isNull(); assertThat(filter.getFromDate()).isNull(); assertThat(filter.getToDate()).isNull(); assertThat(filter.isOnFavourites()).isFalse(); diff --git a/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java b/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java index e2eb14507bf..97412dcb14e 100644 --- a/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java +++ b/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java @@ -311,6 +311,23 @@ public class MeasureFilterExecutorTest extends AbstractDaoTestCase { } @Test + public void filter_by_resource_key_star_regexp() throws SQLException { + MeasureFilter filter = new MeasureFilter().setResourceQualifiers("TRK").setResourceKeyRegexp("java*"); + List<MeasureFilterRow> rows = executor.execute(filter, new MeasureFilterContext()); + + assertThat(rows).hasSize(1); + verifyJavaProject(rows.get(0)); + } + + @Test + public void filter_by_resource_key_exclamation_mark() throws SQLException { + MeasureFilter filter = new MeasureFilter().setResourceQualifiers("TRK").setResourceKeyRegexp("JaV?_proje*"); + List<MeasureFilterRow> rows = executor.execute(filter, new MeasureFilterContext()); + assertThat(rows).hasSize(1); + verifyJavaProject(rows.get(0)); + } + + @Test public void filter_by_base_resource() throws SQLException { MeasureFilter filter = new MeasureFilter().setResourceQualifiers("CLA").setBaseResourceKey("java_project"); List<MeasureFilterRow> rows = executor.execute(filter, new MeasureFilterContext()); |