aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2012-10-09 14:17:53 +0200
committerSimon Brandhof <simon.brandhof@gmail.com>2012-10-09 14:17:53 +0200
commit1dbfa498097b5a67a6a1706abac16ddc24c2acf0 (patch)
tree6fe741db73195e3109c80f41c5f12ab5fb4ad4ca /sonar-core
parent223d3f26c6391622c0770f3bc65fdbd54b85233c (diff)
downloadsonarqube-1dbfa498097b5a67a6a1706abac16ddc24c2acf0.tar.gz
sonarqube-1dbfa498097b5a67a6a1706abac16ddc24c2acf0.zip
SONAR_3621 add missing support of key regexp
Diffstat (limited to 'sonar-core')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/measure/MeasureFilter.java10
-rw-r--r--sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterDecoder.java1
-rw-r--r--sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterExecutor.java1
-rw-r--r--sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSql.java8
-rw-r--r--sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterDecoderTest.java4
-rw-r--r--sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java17
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());