]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5007 - added createdAt and updatedAt fields for ActiveRuleDto
authorStephane Gamard <stephane.gamard@searchbox.com>
Thu, 3 Jul 2014 13:05:05 +0000 (15:05 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Thu, 3 Jul 2014 13:15:45 +0000 (15:15 +0200)
sonar-core/src/main/java/org/sonar/core/persistence/Dto.java
sonar-core/src/main/java/org/sonar/core/qualityprofile/db/QualityProfileDto.java
sonar-core/src/main/resources/org/sonar/core/qualityprofile/db/ActiveRuleMapper.xml
sonar-server/src/main/java/org/sonar/server/db/BaseDao.java
sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRule.java
sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleDoc.java
sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleNormalizer.java
sonar-server/src/test/java/org/sonar/server/qualityprofile/RuleActivatorMediumTest.java

index d604962cbf9b400b63bd4dc282a789235377df07..891ebcd595ce66b0fe3f8b6c78981f6a5544fa33 100644 (file)
@@ -29,19 +29,19 @@ public abstract class Dto<K extends Serializable> {
 
   public abstract K getKey();
 
-  public void setCreatedAt(Date datetime){
+  public final void setCreatedAt(Date datetime) {
     this.createdAt = datetime;
   }
 
-  public void setUpdatedAt(Date datetime){
+  public final void setUpdatedAt(Date datetime) {
     this.updatedAt = datetime;
   }
 
-  public Date getCreatedAt(){
+  public final Date getCreatedAt() {
     return this.createdAt;
   }
 
-  public Date getUpdatedAt(){
+  public final Date getUpdatedAt() {
     return this.updatedAt;
   }
 }
index ae9eab457dfb3a7c90dcba337a58e7f5cb5819a2..b11695a519a450166b9f52a4fbd4aba1ea200a14 100644 (file)
@@ -34,7 +34,6 @@ public class QualityProfileDto extends Dto<String> {
   private String name;
   private String language;
   private String parentKee;
-  private Date createdAt, updatedAt;
   private String rulesUpdatedAt;
 
   /**
@@ -100,22 +99,6 @@ public class QualityProfileDto extends Dto<String> {
     return this;
   }
 
-  public Date getCreatedAt() {
-    return createdAt;
-  }
-
-  public void setCreatedAt(Date createdAt) {
-    this.createdAt = createdAt;
-  }
-
-  public Date getUpdatedAt() {
-    return updatedAt;
-  }
-
-  public void setUpdatedAt(Date updatedAt) {
-    this.updatedAt = updatedAt;
-  }
-
   public String getRulesUpdatedAt() {
     return rulesUpdatedAt;
   }
index 5ff6c7c59fb2d4165f218f8e5b40639d9f4e01fc..fd3c1a00fe298c9ada6cf9a3cba98309b8e01e85 100644 (file)
@@ -11,7 +11,9 @@
     a.inheritance as "inheritance",
     r.plugin_rule_key as "rulefield",
     r.plugin_name as "repository",
-    qp.kee as "profileKey"
+    qp.kee as "profileKey",
+    a.created_at as "createdAt",
+    a.updated_at as "updatedAt"
   </sql>
 
   <sql id="activeRuleKeyJoin">
@@ -26,7 +28,9 @@
     a.rule_id as ruleId,
     a.failure_level as severity,
     a.inheritance as inheritance,
-    active_rule_parent.id as parentId
+    active_rule_parent.id as parentId,
+    a.created_at as "createdAt",
+    a.updated_at as "updatedAt"
   </sql>
 
   <sql id="activeRuleJoin">
@@ -48,8 +52,8 @@
   </select>
 
   <insert id="insert" parameterType="ActiveRule" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
-    INSERT INTO active_rules (profile_id, rule_id, failure_level, inheritance)
-    VALUES (#{profileId}, #{ruleId}, #{severity}, #{inheritance})
+    INSERT INTO active_rules (profile_id, rule_id, failure_level, inheritance, created_at, updated_at)
+    VALUES (#{profileId}, #{ruleId}, #{severity}, #{inheritance}, #{createdAt}, #{updatedAt})
   </insert>
 
   <update id="update" parameterType="ActiveRule">
@@ -57,7 +61,8 @@
     profile_id=#{profileId},
     rule_id=#{ruleId},
     failure_level=#{severity},
-    inheritance=#{inheritance}
+    inheritance=#{inheritance},
+    updated_at=#{updatedAt}
     WHERE id=#{id}
   </update>
 
@@ -78,7 +83,8 @@
   </select>
 
   <select id="selectById" parameterType="int" resultType="ActiveRule">
-    SELECT <include refid="activeRuleColumns"/>
+    SELECT
+    <include refid="activeRuleColumns"/>
     FROM active_rules a
     <include refid="activeRuleJoin"/>
     WHERE a.id=#{id}
     FROM active_rules a
     <include refid="activeRuleKeyJoin"/>
     WHERE
-      qp.kee = #{profileKey}
-      AND r.plugin_rule_key = #{rule}
-      AND r.plugin_name = #{repository}
+    qp.kee = #{profileKey}
+    AND r.plugin_rule_key = #{rule}
+    AND r.plugin_name = #{repository}
   </select>
 
   <select id="selectByProfileKey" parameterType="string" resultType="ActiveRule">
-    SELECT <include refid="activeRuleKeyColumns"/>
+    SELECT
+    <include refid="activeRuleKeyColumns"/>
     FROM active_rules a
     <include refid="activeRuleKeyJoin"/>
     where qp.kee=#{id}
   </select>
 
   <select id="selectParamByActiveRuleAndKey" parameterType="map" resultType="ActiveRuleParam">
-    SELECT <include refid="activeRuleParamColumns"/>
+    SELECT
+    <include refid="activeRuleParamColumns"/>
     FROM active_rule_parameters p
     <where>
       AND p.active_rule_id=#{activeRuleId}
index b79ee9015836fd4a607ac672c57bb2b3fa7abfa4..f14365889f8c2eafc6560000155d4745b4f05cef 100644 (file)
@@ -146,7 +146,7 @@ public abstract class BaseDao<M, E extends Dto<K>, K extends Serializable> imple
     return doGetNullableByKey(session, key);
   }
 
-  public E getByKey(DbSession session, K key) {
+  public final E getByKey(DbSession session, K key) {
     E value = doGetNullableByKey(session, key);
     if (value == null) {
       throw new NotFoundException(String.format("Key '%s' not found", key));
@@ -155,14 +155,14 @@ public abstract class BaseDao<M, E extends Dto<K>, K extends Serializable> imple
   }
 
   @Override
-  public E update(DbSession session, E item) {
+  public final E update(DbSession session, E item) {
     Date now = new Date(system2.now());
     update(session, item, now);
     return item;
   }
 
   @Override
-  public E update(DbSession session, E item, E... others) {
+  public final E update(DbSession session, E item, E... others) {
     Date now = new Date(system2.now());
     update(session, item, now);
     for (E other : others) {
@@ -172,7 +172,7 @@ public abstract class BaseDao<M, E extends Dto<K>, K extends Serializable> imple
   }
 
   @Override
-  public Collection<E> update(DbSession session, Collection<E> items) {
+  public final Collection<E> update(DbSession session, Collection<E> items) {
     Date now = new Date(system2.now());
     for (E item : items) {
       update(session, item, now);
@@ -189,13 +189,13 @@ public abstract class BaseDao<M, E extends Dto<K>, K extends Serializable> imple
   }
 
   @Override
-  public E insert(DbSession session, E item) {
+  public final E insert(DbSession session, E item) {
     insert(session, item, new Date(system2.now()));
     return item;
   }
 
   @Override
-  public Collection<E> insert(DbSession session, Collection<E> items) {
+  public final Collection<E> insert(DbSession session, Collection<E> items) {
     Date now = new Date(system2.now());
     for (E item : items) {
       insert(session, item, now);
@@ -204,7 +204,7 @@ public abstract class BaseDao<M, E extends Dto<K>, K extends Serializable> imple
   }
 
   @Override
-  public E insert(DbSession session, E item, E... others) {
+  public final E insert(DbSession session, E item, E... others) {
     Date now = new Date(system2.now());
     insert(session, item, now);
     for (E other : others) {
@@ -225,12 +225,12 @@ public abstract class BaseDao<M, E extends Dto<K>, K extends Serializable> imple
   }
 
   @Override
-  public void delete(DbSession session, E item) {
+  public final void delete(DbSession session, E item) {
     deleteByKey(session, item.getKey());
   }
 
   @Override
-  public void delete(DbSession session, E item, E... others) {
+  public final void delete(DbSession session, E item, E... others) {
     delete(session, item);
     for (E e : others) {
       delete(session, e);
@@ -238,14 +238,14 @@ public abstract class BaseDao<M, E extends Dto<K>, K extends Serializable> imple
   }
 
   @Override
-  public void delete(DbSession session, Collection<E> items) {
+  public final void delete(DbSession session, Collection<E> items) {
     for (E item : items) {
       delete(session, item);
     }
   }
 
   @Override
-  public void deleteByKey(DbSession session, K key) {
+  public final void deleteByKey(DbSession session, K key) {
     Preconditions.checkNotNull(key, "Missing key");
     doDeleteByKey(session, key);
     if (hasIndex()) {
@@ -253,7 +253,7 @@ public abstract class BaseDao<M, E extends Dto<K>, K extends Serializable> imple
     }
   }
 
-  protected void enqueueUpdate(Object nestedItem, K key, DbSession session) {
+  protected final void enqueueUpdate(Object nestedItem, K key, DbSession session) {
     if (hasIndex()) {
       session.enqueue(new EmbeddedIndexAction<K>(
         this.getIndexType(), IndexAction.Method.UPSERT, key, nestedItem));
index 5258c43bc15bec99b4527c71e3581aafd2d988ef..649ef441a13d9c90f890d661a72770157b453ce4 100644 (file)
@@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableList;
 import org.sonar.core.qualityprofile.db.ActiveRuleKey;
 
 import javax.annotation.CheckForNull;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -33,6 +34,10 @@ public interface ActiveRule {
     public static final List<Inheritance> ALL = ImmutableList.of(NONE, OVERRIDES, INHERITED);
   }
 
+  Date createdAt();
+
+  Date updatedAt();
+
   ActiveRuleKey key();
 
   String severity();
index 24ce64dd9e4603adcd51a62f0b10ec3709326c11..66048c8ba45caab579a974058bea2c376a1df6be 100644 (file)
@@ -23,8 +23,10 @@ import com.google.common.base.Preconditions;
 import org.sonar.core.qualityprofile.db.ActiveRuleKey;
 import org.sonar.server.qualityprofile.ActiveRule;
 import org.sonar.server.search.BaseDoc;
+import org.sonar.server.search.IndexUtils;
 
 import javax.annotation.CheckForNull;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -39,6 +41,16 @@ public class ActiveRuleDoc extends BaseDoc implements ActiveRule {
     Preconditions.checkArgument(key!=null, "Invalid ActiveRuleKey!");
   }
 
+  @Override
+  public Date createdAt() {
+    return IndexUtils.parseDateTime((String) getNullableField(ActiveRuleNormalizer.ActiveRuleField.CREATED_AT.field()));
+  }
+
+  @Override
+  public Date updatedAt() {
+    return IndexUtils.parseDateTime((String) getNullableField(ActiveRuleNormalizer.ActiveRuleField.UPDATED_AT.field()));
+  }
+
   @Override
   public ActiveRuleKey key() {
     return this.key;
index 3160acf885458548e4e6880d90573f535aaa16aa..e3fa5b12271683c73b15013b9447f4a4a9f9bad0 100644 (file)
@@ -37,7 +37,12 @@ import org.sonar.server.search.Indexable;
 import org.sonar.server.search.es.ListUpdate;
 
 import java.lang.reflect.Field;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 public class ActiveRuleNormalizer extends BaseNormalizer<ActiveRuleDto, ActiveRuleKey> {
 
@@ -51,6 +56,9 @@ public class ActiveRuleNormalizer extends BaseNormalizer<ActiveRuleDto, ActiveRu
     public static final IndexField RULE_KEY = add(IndexField.Type.STRING, "ruleKey");
     public static final IndexField PARAMS = addEmbedded("params", ActiveRuleParamField.ALL_FIELDS);
 
+    public static final IndexField CREATED_AT = addSortable(IndexField.Type.DATE, "createdAt");
+    public static final IndexField UPDATED_AT = addSortable(IndexField.Type.DATE, UPDATED_AT_FIELD);
+
     public static Set<IndexField> ALL_FIELDS = getAllFields();
 
     private static Set<IndexField> getAllFields() {
@@ -123,6 +131,10 @@ public class ActiveRuleNormalizer extends BaseNormalizer<ActiveRuleDto, ActiveRu
         activeRuleDto.getInheritance() :
         ActiveRule.Inheritance.NONE.name());
     newRule.put(ActiveRuleField.SEVERITY.field(), activeRuleDto.getSeverityString());
+    newRule.put(ActiveRuleField.KEY.field(), key.toString());
+
+    newRule.put(ActiveRuleField.CREATED_AT.field(), activeRuleDto.getCreatedAt());
+    newRule.put(ActiveRuleField.UPDATED_AT.field(), activeRuleDto.getUpdatedAt());
 
     DbSession session = db.openSession(false);
     try {
index 83d1ff1775e05a6c2add8bb4f66c7ed545769cc3..c26899f15766ea47b84fb30ab26ee20f466ae931 100644 (file)
 package org.sonar.server.qualityprofile;
 
 import com.google.common.collect.ImmutableMap;
-import org.junit.*;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Test;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.rule.Severity;
@@ -42,7 +45,6 @@ import org.sonar.server.search.QueryOptions;
 import org.sonar.server.tester.ServerTester;
 
 import javax.annotation.Nullable;
-
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -52,7 +54,6 @@ import static org.fest.assertions.Assertions.assertThat;
 import static org.fest.assertions.Fail.fail;
 import static org.sonar.server.qualityprofile.QProfileTesting.*;
 
-@Ignore
 public class RuleActivatorMediumTest {
 
   static final RuleKey MANUAL_RULE_KEY = RuleKey.of(RuleKey.MANUAL_REPOSITORY_KEY, "m1");
@@ -988,6 +989,10 @@ public class RuleActivatorMediumTest {
         assertThat(activeRule.severity()).isEqualTo(expectedSeverity);
         assertThat(activeRule.inheritance()).isEqualTo(expectedInheritance == null ? ActiveRule.Inheritance.NONE : ActiveRule.Inheritance.valueOf(expectedInheritance));
 
+        // Dates should be set
+        assertThat(activeRule.createdAt()).isNotNull();
+        assertThat(activeRule.updatedAt()).isNotNull();
+
         // verify parameters in es
         assertThat(activeRule.params()).hasSize(expectedParams.size());
         for (Map.Entry<String, String> entry : expectedParams.entrySet()) {