From: Stephane Gamard Date: Wed, 7 May 2014 16:21:36 +0000 (+0200) Subject: fixed Dates in RuleIndex X-Git-Tag: 4.4-RC1~1168 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=62e1130a48649c6b061e934214043cd693560556;p=sonarqube.git fixed Dates in RuleIndex --- diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleDoc.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleDoc.java index 96fc8fe993c..96d0648759b 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleDoc.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RuleDoc.java @@ -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); + } } } diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java index 3cfa8871c2e..e263df3ee54 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java @@ -147,6 +147,16 @@ public class RuleIndex extends BaseIndex { 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") diff --git a/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java b/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java index bd39d630209..c178ae57bcc 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java @@ -156,12 +156,16 @@ public abstract class BaseIndex, K extends Serializable> SearchResponse esResult = esSearch.get(); - Result result = new Result(esResult) - .setTotal((int) esResult.getHits().totalHits()) - .setTime(esResult.getTookInMillis()); + Result result = new Result(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, 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 { diff --git a/sonar-server/src/test/java/org/sonar/server/rule2/RuleServiceMediumTest.java b/sonar-server/src/test/java/org/sonar/server/rule2/RuleServiceMediumTest.java index 2a2b9c95472..aabdc24308e 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule2/RuleServiceMediumTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule2/RuleServiceMediumTest.java @@ -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();