String internalKey();
@CheckForNull
- String noteAsMarkdown();
+ String markdownNote();
@CheckForNull
String noteLogin();
+
+ @CheckForNull
+ Date noteCreatedAt();
+
+ @CheckForNull
+ Date noteUpdatedAt();
}
return (String) fields.get(RuleField.INTERNAL_KEY.key());
}
+ @Override
+ public String markdownNote() {
+ return (String) fields.get(RuleField.NOTE.key());
+ }
+
@Override
@CheckForNull
public String language() {
@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
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(),
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")
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;
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) {
*/
package org.sonar.server.search;
+import javax.annotation.CheckForNull;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
// 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.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);
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();
}
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;
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() {