summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephane Gamard <stephane.gamard@searchbox.com>2014-07-03 15:05:05 +0200
committerStephane Gamard <stephane.gamard@searchbox.com>2014-07-03 15:15:45 +0200
commit417f1afa08fdae0c5d3d8a633c44e4e848abaead (patch)
tree0a92099bfe9b0e1abd7fcbf2d5b55ba70064e874
parent1948b660d7b3630dc2e8c2bc4b67007c0a190e14 (diff)
downloadsonarqube-417f1afa08fdae0c5d3d8a633c44e4e848abaead.tar.gz
sonarqube-417f1afa08fdae0c5d3d8a633c44e4e848abaead.zip
SONAR-5007 - added createdAt and updatedAt fields for ActiveRuleDto
-rw-r--r--sonar-core/src/main/java/org/sonar/core/persistence/Dto.java8
-rw-r--r--sonar-core/src/main/java/org/sonar/core/qualityprofile/db/QualityProfileDto.java17
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/qualityprofile/db/ActiveRuleMapper.xml30
-rw-r--r--sonar-server/src/main/java/org/sonar/server/db/BaseDao.java24
-rw-r--r--sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRule.java5
-rw-r--r--sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleDoc.java12
-rw-r--r--sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleNormalizer.java14
-rw-r--r--sonar-server/src/test/java/org/sonar/server/qualityprofile/RuleActivatorMediumTest.java11
8 files changed, 73 insertions, 48 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/Dto.java b/sonar-core/src/main/java/org/sonar/core/persistence/Dto.java
index d604962cbf9..891ebcd595c 100644
--- a/sonar-core/src/main/java/org/sonar/core/persistence/Dto.java
+++ b/sonar-core/src/main/java/org/sonar/core/persistence/Dto.java
@@ -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;
}
}
diff --git a/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/QualityProfileDto.java b/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/QualityProfileDto.java
index ae9eab457df..b11695a519a 100644
--- a/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/QualityProfileDto.java
+++ b/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/QualityProfileDto.java
@@ -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;
}
diff --git a/sonar-core/src/main/resources/org/sonar/core/qualityprofile/db/ActiveRuleMapper.xml b/sonar-core/src/main/resources/org/sonar/core/qualityprofile/db/ActiveRuleMapper.xml
index 5ff6c7c59fb..fd3c1a00fe2 100644
--- a/sonar-core/src/main/resources/org/sonar/core/qualityprofile/db/ActiveRuleMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/qualityprofile/db/ActiveRuleMapper.xml
@@ -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}
@@ -91,13 +97,14 @@
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}
@@ -171,7 +178,8 @@
</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}
diff --git a/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java b/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java
index b79ee901583..f14365889f8 100644
--- a/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java
+++ b/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java
@@ -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));
diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRule.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRule.java
index 5258c43bc15..649ef441a13 100644
--- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRule.java
+++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRule.java
@@ -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();
diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleDoc.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleDoc.java
index 24ce64dd9e4..66048c8ba45 100644
--- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleDoc.java
+++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleDoc.java
@@ -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;
@@ -40,6 +42,16 @@ public class ActiveRuleDoc extends BaseDoc implements ActiveRule {
}
@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;
}
diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleNormalizer.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleNormalizer.java
index 3160acf8854..e3fa5b12271 100644
--- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleNormalizer.java
+++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleNormalizer.java
@@ -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 {
diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/RuleActivatorMediumTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/RuleActivatorMediumTest.java
index 83d1ff1775e..c26899f1576 100644
--- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/RuleActivatorMediumTest.java
+++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/RuleActivatorMediumTest.java
@@ -20,7 +20,10 @@
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()) {