]> source.dussan.org Git - sonarqube.git/commitdiff
fixed Dates in RuleIndex
authorStephane Gamard <stephane.gamard@searchbox.com>
Wed, 7 May 2014 16:21:36 +0000 (18:21 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Wed, 7 May 2014 16:22:49 +0000 (18:22 +0200)
sonar-server/src/main/java/org/sonar/server/rule2/RuleDoc.java
sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java
sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java
sonar-server/src/test/java/org/sonar/server/rule2/RuleServiceMediumTest.java

index 96fc8fe993c9ca7477641553f195ce905bc546bc..96d0648759b3ff3c6a5e120eb255c57196849c08 100644 (file)
@@ -26,6 +26,8 @@ import org.sonar.api.server.rule.RuleParamType;
 import org.sonar.server.rule2.RuleNormalizer.RuleField;
 
 import javax.annotation.CheckForNull;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -46,8 +48,8 @@ class RuleDoc implements Rule {
   public RuleKey key() {
     String repo = (String) fields.get(RuleField.REPOSITORY.key());
     String key = (String) fields.get(RuleField.KEY.key());
-    if(repo == null || key == null
-      || repo.isEmpty() || key.isEmpty()){
+    if (repo == null || key == null
+      || repo.isEmpty() || key.isEmpty()) {
       throw new IllegalStateException("Missing values for RuleKey in RuleDoc");
     } else {
       return RuleKey.of(repo, key);
@@ -169,12 +171,22 @@ class RuleDoc implements Rule {
   @Override
   @CheckForNull
   public Date createdAt() {
-    return (Date) fields.get(RuleField.CREATED_AT.key());
+    SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
+    try {
+      return sdf.parse((String) fields.get(RuleField.CREATED_AT.key()));
+    } catch (ParseException e) {
+      throw new IllegalStateException("Cannot parse date", e);
+    }
   }
 
   @Override
   @CheckForNull
   public Date updatedAt() {
-    return (Date) fields.get(RuleField.UPDATED_AT.key());
+    SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
+    try {
+      return sdf.parse((String) fields.get(RuleField.UPDATED_AT.key()));
+    } catch (ParseException e) {
+      throw new IllegalStateException("Cannot parse date", e);
+    }
   }
 }
index 3cfa8871c2e5967f097e65d38fa627736d7ef923..e263df3ee546e4262bc8e758fb5e8100dca202e1 100644 (file)
@@ -147,6 +147,16 @@ public class RuleIndex extends BaseIndex<Rule, RuleQuery, RuleDto, RuleKey> {
     addMatchField(mapping, RuleField.SEVERITY.key(), "string");
     addMatchField(mapping, RuleField.STATUS.key(), "string");
 
+    mapping.startObject(RuleField.CREATED_AT.key())
+      .field("type", "date")
+      .field("format", "date_time")
+      .endObject();
+
+    mapping.startObject(RuleField.UPDATED_AT.key())
+      .field("type", "date")
+      .field("format", "date_time")
+      .endObject();
+
     mapping.startObject(RuleField.NAME.key())
         .field("type", "multi_field")
         .startObject("fields")
index bd39d6302097c37e19171d104e207748458f4afa..c178ae57bcc434ee2cad3eb703b3acb0ac03777d 100644 (file)
@@ -156,12 +156,16 @@ public abstract class BaseIndex<R, Q, E extends Dto<K>, K extends Serializable>
 
     SearchResponse esResult = esSearch.get();
 
-    Result<R> result = new Result<R>(esResult)
-      .setTotal((int) esResult.getHits().totalHits())
-      .setTime(esResult.getTookInMillis());
+    Result<R> result = new Result<R>(esResult);
 
-    for (SearchHit hit : esResult.getHits()) {
-      result.getHits().add(this.getSearchResult(hit));
+    if(esResult != null){
+      result
+        .setTotal((int) esResult.getHits().totalHits())
+        .setTime(esResult.getTookInMillis());
+
+      for (SearchHit hit : esResult.getHits()) {
+        result.getHits().add(this.getSearchResult(hit));
+      }
     }
 
     return result;
@@ -186,7 +190,7 @@ public abstract class BaseIndex<R, Q, E extends Dto<K>, K extends Serializable>
     GetResponse result = getClient().prepareGet(this.getIndexName(),
       this.indexDefinition.getIndexType(), this.getKeyValue(key))
       .get();
-    return this.getSearchResult(result.getSourceAsMap());
+    return this.getSearchResult(result.getSource());
   }
 
   private void insertDocument(UpdateRequest request, K key) throws Exception {
index 2a2b9c9547212e5c72b229bf8207999435fe5884..aabdc24308e108bc9caf4e01311512061a871b70 100644 (file)
@@ -43,7 +43,8 @@ import static org.fest.assertions.Assertions.assertThat;
 public class RuleServiceMediumTest {
 
   @ClassRule
-  public static ServerTester tester = new ServerTester();
+  public static ServerTester tester = new ServerTester()
+    .setProperty("sonar.es.http.port","9200");
 
   MyBatis myBatis = tester.get(MyBatis.class);
   RuleDao dao = tester.get(RuleDao.class);
@@ -62,7 +63,7 @@ public class RuleServiceMediumTest {
   }
 
   @Test
-  public void insert_in_db_and_index_in_es() {
+  public void insert_in_db_and_index_in_es() throws InterruptedException {
     // insert db
     RuleKey ruleKey = RuleKey.of("javascript", "S001");
     dao.insert(newRuleDto(ruleKey), dbSession);
@@ -79,6 +80,10 @@ public class RuleServiceMediumTest {
 
     // verify that rule is indexed in es
     index.refresh();
+
+//    Thread.sleep(10000000);
+
+
     Rule hit = index.getByKey(ruleKey);
     assertThat(hit).isNotNull();
     assertThat(hit.key().repository()).isEqualTo(ruleKey.repository());
@@ -87,9 +92,8 @@ public class RuleServiceMediumTest {
     assertThat(hit.name()).isEqualTo("Rule S001");
     assertThat(hit.htmlDescription()).isEqualTo("Description S001");
     assertThat(hit.status()).isEqualTo(RuleStatus.READY);
-    //TODO fix date in ES
-//    assertThat(hit.createdAt()).isNotNull();
-//    assertThat(hit.updatedAt()).isNotNull();
+    assertThat(hit.createdAt()).isNotNull();
+    assertThat(hit.updatedAt()).isNotNull();
     assertThat(hit.internalKey()).isEqualTo("InternalKeyS001");
     assertThat(hit.severity()).isEqualTo("INFO");
     assertThat(hit.template()).isFalse();