]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5007 - Added Notes to Rule WS
authorStephane Gamard <stephane.gamard@searchbox.com>
Mon, 19 May 2014 13:18:06 +0000 (15:18 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Mon, 19 May 2014 13:40:07 +0000 (15:40 +0200)
sonar-server/src/main/java/org/sonar/server/rule2/Rule.java
sonar-server/src/main/java/org/sonar/server/rule2/index/RuleDoc.java
sonar-server/src/main/java/org/sonar/server/rule2/index/RuleIndex.java
sonar-server/src/main/java/org/sonar/server/rule2/index/RuleNormalizer.java
sonar-server/src/main/java/org/sonar/server/search/IndexUtils.java
sonar-server/src/test/java/org/sonar/server/rule2/RuleServiceMediumTest.java
sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java

index f12863dcbed67319f0caaf85c67372ca3ad00d1b..2582e03c57bf8f72f10da392160602adb239d5b3 100644 (file)
@@ -83,8 +83,14 @@ public interface Rule {
   String internalKey();
 
   @CheckForNull
-  String noteAsMarkdown();
+  String markdownNote();
 
   @CheckForNull
   String noteLogin();
+
+  @CheckForNull
+  Date noteCreatedAt();
+
+  @CheckForNull
+  Date noteUpdatedAt();
 }
index 770c1a022f87d457a23819fb9f5fdb4fb97ad1e9..dc316d10a884225a3a86e2593abe797eba6f8e91 100644 (file)
@@ -62,6 +62,11 @@ class RuleDoc implements Rule {
     return (String) fields.get(RuleField.INTERNAL_KEY.key());
   }
 
+  @Override
+  public String markdownNote() {
+    return (String) fields.get(RuleField.NOTE.key());
+  }
+
   @Override
   @CheckForNull
   public String language() {
@@ -191,16 +196,18 @@ class RuleDoc implements Rule {
 
   @Override
   @CheckForNull
-  public String noteAsMarkdown() {
-    // TODO
-    return null;
+  public String noteLogin() {
+    return (String) fields.get(RuleField.NOTE_LOGIN.key());
   }
 
   @Override
-  @CheckForNull
-  public String noteLogin() {
-    // TODO
-    return null;
+  public Date noteCreatedAt() {
+    return IndexUtils.parseDateTime((String) fields.get(RuleField.NOTE_CREATED_AT.key()));
+  }
+
+  @Override
+  public Date noteUpdatedAt() {
+    return IndexUtils.parseDateTime((String) fields.get(RuleField.NOTE_UPDATED_AT.key()));
   }
 
   @Override
index 5210808909ca38d1395971a8437aa9d11f7a9e63..bb7dec369f571e4ac70cff3f948c7c0f0c03c040 100644 (file)
@@ -67,6 +67,10 @@ public class RuleIndex extends BaseIndex<Rule, RuleDto, RuleKey> {
     RuleNormalizer.RuleField.REPOSITORY.key(),
     RuleNormalizer.RuleField.PARAMS.key(),
     RuleNormalizer.RuleField.TEMPLATE.key(),
+    RuleNormalizer.RuleField.NOTE.key(),
+    RuleNormalizer.RuleField.NOTE_CREATED_AT.key(),
+    RuleNormalizer.RuleField.NOTE_UPDATED_AT.key(),
+    RuleNormalizer.RuleField.NOTE_LOGIN.key(),
     RuleNormalizer.RuleField.INTERNAL_KEY.key(),
     RuleNormalizer.RuleField.UPDATED_AT.key(),
     RuleNormalizer.RuleField.DEBT_FUNCTION_TYPE.key(),
@@ -136,6 +140,17 @@ public class RuleIndex extends BaseIndex<Rule, RuleDto, RuleKey> {
     addMatchField(mapping, RuleNormalizer.RuleField.SEVERITY.key(), "string");
     addMatchField(mapping, RuleNormalizer.RuleField.STATUS.key(), "string");
 
+
+    mapping.startObject(RuleNormalizer.RuleField.NOTE_CREATED_AT.key())
+      .field("type", "date")
+      .field("format", "date_time")
+      .endObject();
+
+    mapping.startObject(RuleNormalizer.RuleField.NOTE_UPDATED_AT.key())
+      .field("type", "date")
+      .field("format", "date_time")
+      .endObject();
+
     mapping.startObject(RuleNormalizer.RuleField.CREATED_AT.key())
       .field("type", "date")
       .field("format", "date_time")
index 60136da024d3f11a4149b57a6f5234c0bf756851..0a0d8951a9b937acd9fe6eccd5040d2d13e632d7 100644 (file)
@@ -58,7 +58,11 @@ public class RuleNormalizer extends BaseNormalizer<RuleDto, RuleKey> {
     DEBT_FUNCTION_TYPE("debtFunction"),
     DEBT_FUNCTION_COEFFICIENT("debtCoefficient"),
     DEBT_FUNCTION_OFFSET("debtOffset"),
-    SUB_CHARACTERISTIC("subCharacteristicKey");
+    SUB_CHARACTERISTIC("subCharacteristicKey"),
+    NOTE("note"),
+    NOTE_LOGIN("noteLogin"),
+    NOTE_CREATED_AT("noteCreatedAt"),
+    NOTE_UPDATED_AT("noteUpdatedAt");
 
     private final String key;
 
@@ -135,6 +139,11 @@ public class RuleNormalizer extends BaseNormalizer<RuleDto, RuleKey> {
     update.put(RuleField.INTERNAL_KEY.key(), rule.getConfigKey());
     update.put(RuleField.TEMPLATE.key(), rule.getCardinality() == Cardinality.MULTIPLE);
 
+    update.put(RuleField.NOTE.key(), rule.getNoteData());
+    update.put(RuleField.NOTE_LOGIN.key(), rule.getNoteUserLogin());
+    update.put(RuleField.NOTE_CREATED_AT.key(), rule.getNoteCreatedAt());
+    update.put(RuleField.NOTE_UPDATED_AT.key(), rule.getNoteUpdatedAt());
+
     //TODO Change on key when available
     String subChar = null;
     if (rule.getDefaultSubCharacteristicId() != null) {
index 99d6254c9c946080733ce2d7b39af5fee8f8fc0b..a0f41d7166095b8b5e9f8bc91abb97a14acc898b 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.server.search;
 
+import javax.annotation.CheckForNull;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -30,12 +31,17 @@ public class IndexUtils {
     // only static stuff
   }
 
+  @CheckForNull
   public static Date parseDateTime(String s) {
     DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
-    try {
-      return sdf.parse(s);
-    } catch (ParseException e) {
-      throw new IllegalArgumentException("Cannot parse ES date: " + s, e);
+    if (s == null) {
+      return null;
+    } else {
+      try {
+        return sdf.parse(s);
+      } catch (ParseException e) {
+        throw new IllegalArgumentException("Cannot parse ES date: " + s, e);
+      }
     }
   }
 }
index ecc17fba96d297bb005b536c0e6118b407062301..81ce6355efb95e4c99a9a4cb6313757a2a23dedb 100644 (file)
@@ -145,10 +145,10 @@ public class RuleServiceMediumTest {
     index.refresh();
     Rule rule = index.getByKey(ruleKey);
     // TODO
-//    assertThat(rule.getNote()).isEqualTo("my *note*");
-//    assertThat(rule.getNoteCreatedAt()).isNotNull();
-//    assertThat(rule.getNoteUpdatedAt()).isNotNull();
-//    assertThat(rule.getNoteUserLogin()).isEqualTo("marius");
+    assertThat(rule.markdownNote()).isEqualTo("my *note*");
+    assertThat(rule.noteCreatedAt()).isNotNull();
+    assertThat(rule.noteUpdatedAt()).isNotNull();
+    assertThat(rule.noteLogin()).isEqualTo("marius");
 
     // 2. DELETE NOTE
     service.setNote(ruleKey, null);
@@ -160,11 +160,10 @@ public class RuleServiceMediumTest {
     assertThat(dto.getNoteUserLogin()).isNull();
     index.refresh();
     rule = index.getByKey(ruleKey);
-    // TODO
-    //    assertThat(rule.getNote()).isNull();
-//    assertThat(rule.getNoteCreatedAt()).isNull();
-//    assertThat(rule.getNoteUpdatedAt()).isNull();
-//    assertThat(rule.getNoteUserLogin()).isNull();
+    assertThat(rule.markdownNote()).isNull();
+    assertThat(rule.noteCreatedAt()).isNull();
+    assertThat(rule.noteUpdatedAt()).isNull();
+    assertThat(rule.noteLogin()).isNull();
 
   }
 
index 0d214c7b7db3909842e29ce90f9ac299f57fdd51..ebf47ae0f13d793c7562da25fe38a11ed9081973 100644 (file)
@@ -42,6 +42,7 @@ import org.sonar.core.rule.RuleDto;
 import org.sonar.core.rule.RuleParamDto;
 import org.sonar.server.qualityprofile.persistence.ActiveRuleDao;
 import org.sonar.server.rule2.RuleService;
+import org.sonar.server.rule2.index.RuleNormalizer;
 import org.sonar.server.rule2.persistence.RuleDao;
 import org.sonar.server.tester.ServerTester;
 import org.sonar.server.user.MockUserSession;
@@ -300,6 +301,33 @@ public class RulesWebServiceTest {
     result.assertJson(this.getClass(),"get_tags.json");
   }
 
+  @Test
+  public void get_notes() throws Exception {
+    QualityProfileDto profile = newQualityProfile();
+    tester.get(QualityProfileDao.class).insert(profile, session);
+
+    RuleDto rule = newRuleDto(RuleKey.of(profile.getLanguage(), "S001"))
+      .setNoteData("Note1");
+    ruleDao.insert(rule,  session);
+
+    RuleDto rule2 = newRuleDto(RuleKey.of(profile.getLanguage(), "S002"))
+      .setNoteData("Note2");
+    ruleDao.insert(rule2,  session);
+
+    session.commit();
+    tester.get(RuleService.class).refresh();
+
+
+    MockUserSession.set();
+    WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "search");
+    request.setParam("f", RuleNormalizer.RuleField.NOTE.key());
+    WsTester.Result result = request.execute();
+
+    System.out.println("result.outputAsString() = " + result.outputAsString());
+    
+    result.assertJson(this.getClass(),"get_tags.json");
+  }
+
 
 
   private QualityProfileDto newQualityProfile() {