]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5237 - Delegation from BaseIndex rather than BaseMapper
authorStephane Gamard <stephane.gamard@searchbox.com>
Mon, 28 Apr 2014 15:30:14 +0000 (17:30 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Mon, 28 Apr 2014 15:30:50 +0000 (17:30 +0200)
sonar-batch/src/test/java/org/sonar/batch/rule/RulesProviderTest.java
sonar-core/src/main/java/org/sonar/core/db/BaseDao.java
sonar-core/src/main/java/org/sonar/core/db/Dao.java
sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java
sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java
sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java
sonar-core/src/test/java/org/sonar/core/persistence/MyBatisTest.java
sonar-core/src/test/java/org/sonar/core/persistence/TestDatabase.java
sonar-core/src/test/java/org/sonar/core/rule/RuleDaoTest.java
sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java

index da1ad682f1a35dd05e014ed79f5d29408e3a37e7..49825359b6e553671aeb77a93469cac1192c5b3b 100644 (file)
@@ -82,8 +82,7 @@ public class RulesProviderTest extends AbstractDaoTestCase {
         .setParentId(102));
 
     durations = new Durations(new Settings().setProperty("sonar.technicalDebt.hoursInDay", 8), null);
-    WorkQueue queue = mock(WorkQueue.class);
-    ruleDao = new RuleDao(getMyBatis(),queue);
+    ruleDao = new RuleDao(getMyBatis());
 
     provider = new RulesProvider();
   }
index 38c2c849ae0e46571642309362265060ce02eab6..36fef1aa611d07777ecb8de22f1a357053ffd6fb 100644 (file)
@@ -20,7 +20,6 @@
 package org.sonar.core.db;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.core.cluster.WorkQueue;
 import org.sonar.core.persistence.MyBatis;
 
 import java.io.Serializable;
@@ -29,36 +28,22 @@ public abstract class BaseDao<E extends Dto<K>, K extends Serializable>
   implements Dao<E, K> {
 
   protected MyBatis mybatis;
-  private WorkQueue queue;
 
-  protected BaseDao(WorkQueue workQueue, MyBatis myBatis) {
+  protected BaseDao(MyBatis myBatis) {
     this.mybatis = myBatis;
-    this.queue = workQueue;
   }
 
   protected abstract String getIndexName();
 
-  protected abstract void doInsert(E item, SqlSession session);
-
-  protected abstract void doUpdate(E item, SqlSession session);
-
-  protected abstract void doDelete(E item, SqlSession session);
-
-  protected abstract void doDeleteByKey(E item, SqlSession session);
-
   protected abstract E doGetByKey(K key, SqlSession session);
 
-  protected void enqueInsert(K key) {
-    this.queue.enqueInsert(this.getIndexName(), key);
-  }
+  protected abstract E doInsert(E item, SqlSession session);
 
-  protected void enqueUpdate(K key) {
-    this.queue.enqueUpdate(this.getIndexName(), key);
-  }
+  protected abstract E doUpdate(E item, SqlSession session);
 
-  protected void enqueDelete(K key) {
-    this.queue.enqueDelete(this.getIndexName(), key);
-  }
+  protected abstract void doDelete(E item, SqlSession session);
+
+  protected abstract void doDeleteByKey(K key, SqlSession session);
 
   protected MyBatis getMyBatis() {
     return this.mybatis;
@@ -72,58 +57,73 @@ public abstract class BaseDao<E extends Dto<K>, K extends Serializable>
     return item;
   }
 
+  @Override
+  public E update(E item, SqlSession session) {
+    //TODO add update record to session */
+    return this.doUpdate(item, session);
+  }
+
   @Override
   public E update(E item) {
     SqlSession session = getMyBatis().openSession();
     try {
-      this.doUpdate(item, session);
+      this.update(item, session);
       session.commit();
-      this.enqueUpdate(item.getKey());
       return item;
     } finally {
       MyBatis.closeQuietly(session);
     }
   }
 
+  @Override
+  public E insert(E item, SqlSession session) {
+    //TODO add insert record to session */
+    return this.doInsert(item, session);
+  }
+
   @Override
   public E insert(E item) {
     SqlSession session = getMyBatis().openSession();
     try {
-      this.doInsert(item, session);
+      this.insert(item, session);
       session.commit();
-      this.enqueInsert(item.getKey());
       return item;
     } finally {
       MyBatis.closeQuietly(session);
     }
   }
 
-  public void insert(E item, SqlSession session) {
-
-  }
-
-  public void update(E item, SqlSession session) {
-
-  }
-
+  @Override
   public void delete(E item, SqlSession session) {
-
+    //TODO add delete record to session */
+    this.doDelete(item, session);
   }
 
   @Override
   public void delete(E item) {
-    this.deleteByKey(item.getKey());
+    SqlSession session = getMyBatis().openSession();
+    try {
+      this.delete(item, session);
+      session.commit();
+    } finally {
+      MyBatis.closeQuietly(session);
+    }
+  }
+
+  @Override
+  public void deleteByKey(K key, SqlSession session) {
+    //TODO add delete record to session */
+    this.doDeleteByKey(key, session);
   }
 
   @Override
   public void deleteByKey(K key) {
     SqlSession session = getMyBatis().openSession();
     try {
-      this.deleteByKey(key);
+      this.doDeleteByKey(key, session);
       session.commit();
     } finally {
       MyBatis.closeQuietly(session);
-      this.enqueDelete(key);
     }
   }
 }
index 5fc95d944d69188f052cbc7d9cf38d0fe4ac3442..32ef3e2f611bf36af0ce2e84ed5cf92a98b49ac5 100644 (file)
  */
 package org.sonar.core.db;
 
+import org.apache.ibatis.session.SqlSession;
+
 import java.io.Serializable;
 import java.util.Collection;
 
 public interface Dao<E extends Dto<K>, K extends Serializable> {
 
-  public E getByKey(K key);
+  E getByKey(K key);
+
+  E update(E item);
+
+  E update(E item, SqlSession session);
+
+  E insert(E item);
 
-  public E update(E item);
+  E insert(E item, SqlSession session);
 
-  public E insert(E item);
+  void delete(E item);
 
-  public void delete(E item);
+  void delete(E item, SqlSession session);
 
-  public void deleteByKey(K key);
+  void deleteByKey(K key);
 
-  public Collection<K> insertsSince(Long timestamp);
+  void deleteByKey(K key, SqlSession session);
 
+  Collection<K> insertsSince(Long timestamp);
 }
index 249e0a0164808584d20f50aaff94c4477f506888..064d7d7e2288f1c6865ad87a738c72b3bbacc279 100644 (file)
@@ -24,7 +24,11 @@ import com.google.common.io.Closeables;
 import org.apache.ibatis.builder.xml.XMLMapperBuilder;
 import org.apache.ibatis.logging.LogFactory;
 import org.apache.ibatis.mapping.Environment;
-import org.apache.ibatis.session.*;
+import org.apache.ibatis.session.Configuration;
+import org.apache.ibatis.session.ExecutorType;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
 import org.apache.ibatis.type.JdbcType;
 import org.slf4j.LoggerFactory;
@@ -32,10 +36,18 @@ import org.sonar.api.BatchComponent;
 import org.sonar.api.ServerComponent;
 import org.sonar.api.database.model.MeasureMapper;
 import org.sonar.api.database.model.MeasureModel;
+import org.sonar.core.cluster.WorkQueue;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.core.component.db.ComponentMapper;
 import org.sonar.core.config.Logback;
-import org.sonar.core.dashboard.*;
+import org.sonar.core.dashboard.ActiveDashboardDto;
+import org.sonar.core.dashboard.ActiveDashboardMapper;
+import org.sonar.core.dashboard.DashboardDto;
+import org.sonar.core.dashboard.DashboardMapper;
+import org.sonar.core.dashboard.WidgetDto;
+import org.sonar.core.dashboard.WidgetMapper;
+import org.sonar.core.dashboard.WidgetPropertyDto;
+import org.sonar.core.dashboard.WidgetPropertyMapper;
 import org.sonar.core.dependency.DependencyDto;
 import org.sonar.core.dependency.DependencyMapper;
 import org.sonar.core.dependency.ResourceSnapshotDto;
@@ -44,22 +56,58 @@ import org.sonar.core.duplication.DuplicationMapper;
 import org.sonar.core.duplication.DuplicationUnitDto;
 import org.sonar.core.graph.jdbc.GraphDto;
 import org.sonar.core.graph.jdbc.GraphDtoMapper;
-import org.sonar.core.issue.db.*;
+import org.sonar.core.issue.db.ActionPlanDto;
+import org.sonar.core.issue.db.ActionPlanMapper;
+import org.sonar.core.issue.db.ActionPlanStatsDto;
+import org.sonar.core.issue.db.ActionPlanStatsMapper;
+import org.sonar.core.issue.db.IssueChangeDto;
+import org.sonar.core.issue.db.IssueChangeMapper;
+import org.sonar.core.issue.db.IssueDto;
+import org.sonar.core.issue.db.IssueFilterDto;
+import org.sonar.core.issue.db.IssueFilterFavouriteDto;
+import org.sonar.core.issue.db.IssueFilterFavouriteMapper;
+import org.sonar.core.issue.db.IssueFilterMapper;
+import org.sonar.core.issue.db.IssueMapper;
+import org.sonar.core.issue.db.IssueStatsMapper;
 import org.sonar.core.measure.db.MeasureDataDto;
 import org.sonar.core.measure.db.MeasureDataMapper;
 import org.sonar.core.measure.db.MeasureFilterDto;
 import org.sonar.core.measure.db.MeasureFilterMapper;
 import org.sonar.core.notification.db.NotificationQueueDto;
 import org.sonar.core.notification.db.NotificationQueueMapper;
-import org.sonar.core.permission.*;
+import org.sonar.core.permission.GroupWithPermissionDto;
+import org.sonar.core.permission.PermissionTemplateDto;
+import org.sonar.core.permission.PermissionTemplateGroupDto;
+import org.sonar.core.permission.PermissionTemplateMapper;
+import org.sonar.core.permission.PermissionTemplateUserDto;
+import org.sonar.core.permission.UserWithPermissionDto;
 import org.sonar.core.properties.PropertiesMapper;
 import org.sonar.core.properties.PropertyDto;
 import org.sonar.core.purge.PurgeMapper;
 import org.sonar.core.purge.PurgeableSnapshotDto;
-import org.sonar.core.qualitygate.db.*;
-import org.sonar.core.qualityprofile.db.*;
-import org.sonar.core.resource.*;
-import org.sonar.core.rule.*;
+import org.sonar.core.qualitygate.db.ProjectQgateAssociationDto;
+import org.sonar.core.qualitygate.db.ProjectQgateAssociationMapper;
+import org.sonar.core.qualitygate.db.QualityGateConditionDto;
+import org.sonar.core.qualitygate.db.QualityGateConditionMapper;
+import org.sonar.core.qualitygate.db.QualityGateDto;
+import org.sonar.core.qualitygate.db.QualityGateMapper;
+import org.sonar.core.qualityprofile.db.ActiveRuleDto;
+import org.sonar.core.qualityprofile.db.ActiveRuleMapper;
+import org.sonar.core.qualityprofile.db.ActiveRuleParamDto;
+import org.sonar.core.qualityprofile.db.QualityProfileDto;
+import org.sonar.core.qualityprofile.db.QualityProfileMapper;
+import org.sonar.core.resource.ResourceDto;
+import org.sonar.core.resource.ResourceIndexDto;
+import org.sonar.core.resource.ResourceIndexerMapper;
+import org.sonar.core.resource.ResourceKeyUpdaterMapper;
+import org.sonar.core.resource.ResourceMapper;
+import org.sonar.core.resource.SnapshotDto;
+import org.sonar.core.rule.RuleDto;
+import org.sonar.core.rule.RuleMapper;
+import org.sonar.core.rule.RuleParamDto;
+import org.sonar.core.rule.RuleRuleTagDto;
+import org.sonar.core.rule.RuleTagDto;
+import org.sonar.core.rule.RuleTagMapper;
 import org.sonar.core.source.db.SnapshotDataDto;
 import org.sonar.core.source.db.SnapshotDataMapper;
 import org.sonar.core.source.db.SnapshotSourceMapper;
@@ -69,7 +117,16 @@ import org.sonar.core.technicaldebt.db.RequirementDto;
 import org.sonar.core.technicaldebt.db.RequirementMapper;
 import org.sonar.core.template.LoadedTemplateDto;
 import org.sonar.core.template.LoadedTemplateMapper;
-import org.sonar.core.user.*;
+import org.sonar.core.user.AuthorDto;
+import org.sonar.core.user.AuthorMapper;
+import org.sonar.core.user.GroupDto;
+import org.sonar.core.user.GroupMembershipDto;
+import org.sonar.core.user.GroupMembershipMapper;
+import org.sonar.core.user.GroupRoleDto;
+import org.sonar.core.user.RoleMapper;
+import org.sonar.core.user.UserDto;
+import org.sonar.core.user.UserMapper;
+import org.sonar.core.user.UserRoleDto;
 
 import java.io.InputStream;
 
@@ -78,10 +135,12 @@ public class MyBatis implements BatchComponent, ServerComponent {
   private final Database database;
   private final Logback logback;
   private SqlSessionFactory sessionFactory;
+  private WorkQueue queue;
 
-  public MyBatis(Database database, Logback logback) {
+  public MyBatis(Database database, Logback logback, WorkQueue queue) {
     this.database = database;
     this.logback = logback;
+    this.queue = queue;
   }
 
   public MyBatis start() {
index 2c2ee23e1ee4c56603a43d56ab37650eb4ceb25d..8053e3ccd9dae414813c76bb19817ff8e89440f7 100644 (file)
  */
 package org.sonar.core.rule;
 
-import org.sonar.core.db.UnsuportedException;
-
 import com.google.common.collect.Lists;
 import org.apache.ibatis.session.SqlSession;
 import org.sonar.api.BatchComponent;
 import org.sonar.api.ServerComponent;
 import org.sonar.api.rule.RuleKey;
-import org.sonar.core.cluster.WorkQueue;
 import org.sonar.core.db.BaseDao;
+import org.sonar.core.db.UnsuportedException;
 import org.sonar.core.persistence.MyBatis;
 
 import javax.annotation.CheckForNull;
@@ -40,8 +38,8 @@ import static com.google.common.collect.Lists.newArrayList;
 public class RuleDao extends BaseDao<RuleDto, RuleKey>
   implements BatchComponent, ServerComponent {
 
-  public RuleDao(MyBatis mybatis, WorkQueue queue) {
-    super(queue, mybatis);
+  public RuleDao(MyBatis mybatis) {
+    super(mybatis);
   }
 
   @Override
@@ -50,13 +48,21 @@ public class RuleDao extends BaseDao<RuleDto, RuleKey>
   }
 
   @Override
-  protected void doInsert(RuleDto item, SqlSession session) {
+  @CheckForNull
+  protected RuleDto doGetByKey(RuleKey key, SqlSession session) {
+    return getMapper(session).selectByKey(key);
+  }
+
+  @Override
+  protected RuleDto doInsert(RuleDto item, SqlSession session) {
     session.getMapper(RuleMapper.class).insert(item);
+    return item;
   }
 
   @Override
-  protected void doUpdate(RuleDto item, SqlSession session) {
+  protected RuleDto doUpdate(RuleDto item, SqlSession session) {
     session.getMapper(RuleMapper.class).update(item);
+    return item;
   }
 
   @Override
@@ -65,16 +71,10 @@ public class RuleDao extends BaseDao<RuleDto, RuleKey>
   }
 
   @Override
-  protected void doDeleteByKey(RuleDto item, SqlSession session) {
+  protected void doDeleteByKey(RuleKey key, SqlSession session) {
     throw new UnsuportedException("Rules cannot be deleted");
   }
 
-  @Override
-  @CheckForNull
-  protected RuleDto doGetByKey(RuleKey key, SqlSession session) {
-    return getMapper(session).selectByKey(key);
-  }
-
   public List<RuleDto> selectAll() {
     SqlSession session = mybatis.openSession();
     try {
@@ -136,21 +136,12 @@ public class RuleDao extends BaseDao<RuleDto, RuleKey>
     }
   }
 
-  /**
-   *
-   * @deprecated use {@link getByKey(RuleKey key, SqlSession session)} instead.
-   */
-  @Deprecated
   @CheckForNull
   public RuleDto selectByKey(RuleKey ruleKey, SqlSession session) {
     return getMapper(session).selectByKey(ruleKey);
   }
 
-  /**
-  *
-  * @deprecated use {@link getByKey(RuleKey key)} instead.
-  */
-  @Deprecated
+
   @CheckForNull
   public RuleDto selectByKey(RuleKey ruleKey) {
     SqlSession session = mybatis.openSession();
index 78dd41c99a54d715c7d9a15c82198ed740e2dd8d..e7d871fa2a32532ccaaed5e8c3177fe72a3c0bc0 100644 (file)
@@ -69,7 +69,6 @@ public final class RuleDto implements Dto<RuleKey>{
     return RuleKey.of(this.getRepositoryKey(), this.getRuleKey());
   }
 
-  @Deprecated
   public Integer getId() {
     return id;
   }
index 3445aaa1c9b8ad987ee497048a99c1720c22a1ee..26843e8e90d13f392cebd9364ee34e4ade0c937d 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.core.persistence;
 
+import org.sonar.core.cluster.WorkQueue;
+
 import com.google.common.collect.Maps;
 import com.google.common.io.Closeables;
 import org.apache.commons.io.FileUtils;
@@ -53,6 +55,8 @@ import java.sql.SQLException;
 import java.util.Map;
 import java.util.Properties;
 
+import static org.mockito.Mockito.mock;
+
 import static org.junit.Assert.fail;
 
 public abstract class AbstractDaoTestCase {
@@ -61,6 +65,8 @@ public abstract class AbstractDaoTestCase {
   private static DatabaseCommands databaseCommands;
   private static IDatabaseTester databaseTester;
   private static MyBatis myBatis;
+  private WorkQueue queue = mock(WorkQueue.class);
+
 
   @Before
   public void startDatabase() throws Exception {
@@ -84,7 +90,7 @@ public abstract class AbstractDaoTestCase {
       databaseCommands = DatabaseCommands.forDialect(database.getDialect());
       databaseTester = new DataSourceDatabaseTester(database.getDataSource());
 
-      myBatis = new MyBatis(database, new Logback());
+      myBatis = new MyBatis(database, new Logback(),queue);
       myBatis.start();
     }
 
index 49f4ab0d09b19755ec603354766b861cd8291ac2..26e56f1934757155ab048ed16c340f87c9c61290 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.core.persistence;
 
+import org.sonar.core.cluster.WorkQueue;
+
 import org.apache.ibatis.session.Configuration;
 import org.apache.ibatis.session.SqlSession;
 import org.hamcrest.core.Is;
@@ -27,7 +29,6 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 import org.sonar.core.config.Logback;
 import org.sonar.core.rule.RuleMapper;
-
 import static org.hamcrest.Matchers.notNullValue;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
@@ -35,6 +36,7 @@ import static org.mockito.Mockito.mock;
 public class MyBatisTest {
   private static H2Database database;
   private Logback logback = mock(Logback.class);
+  private WorkQueue queue = mock(WorkQueue.class);
 
   @BeforeClass
   public static void start() {
@@ -49,7 +51,7 @@ public class MyBatisTest {
 
   @Test
   public void shouldConfigureMyBatis() {
-    MyBatis myBatis = new MyBatis(database, logback);
+    MyBatis myBatis = new MyBatis(database, logback, queue);
     myBatis.start();
 
     Configuration conf = myBatis.getSessionFactory().getConfiguration();
@@ -60,7 +62,7 @@ public class MyBatisTest {
 
   @Test
   public void shouldOpenBatchSession() {
-    MyBatis myBatis = new MyBatis(database, logback);
+    MyBatis myBatis = new MyBatis(database, logback, queue);
     myBatis.start();
 
     SqlSession session = myBatis.openBatchSession();
index 003649a00c0ea96cede7cf9ab3f1fbb985ebec60..a8c5dd16d5caeafcc7f8f7afa2b9c1726893ba2a 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.core.persistence;
 
+import org.sonar.core.cluster.WorkQueue;
+
 import com.google.common.collect.Maps;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.dbutils.DbUtils;
@@ -62,6 +64,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
+import static org.mockito.Mockito.mock;
+
 import static org.junit.Assert.fail;
 
 /**
@@ -76,6 +80,7 @@ public class TestDatabase extends ExternalResource {
   private DatabaseCommands commands;
   private IDatabaseTester tester;
   private MyBatis myBatis;
+  private WorkQueue queue = mock(WorkQueue.class);
   private String schemaPath = null;
 
   public TestDatabase schema(Class baseClass, String filename) {
@@ -109,7 +114,7 @@ public class TestDatabase extends ExternalResource {
     commands = DatabaseCommands.forDialect(db.getDialect());
     tester = new DataSourceDatabaseTester(db.getDataSource());
 
-    myBatis = new MyBatis(db, new Logback());
+    myBatis = new MyBatis(db, new Logback(), queue);
     myBatis.start();
 
     commands.truncateDatabase(db.getDataSource());
index 152447530c92b4daf102f65c5b63aab2b0f45155..6386962c054ab7ce98a067f8e6d3c0ceca4b45ad 100644 (file)
@@ -30,14 +30,12 @@ import org.sonar.api.rule.Severity;
 import org.sonar.api.rules.Rule;
 import org.sonar.api.utils.DateUtils;
 import org.sonar.check.Cardinality;
-import org.sonar.core.cluster.WorkQueue;
 import org.sonar.core.persistence.AbstractDaoTestCase;
 
 import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 import static org.fest.assertions.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
 
 public class RuleDaoTest extends AbstractDaoTestCase {
 
@@ -45,8 +43,7 @@ public class RuleDaoTest extends AbstractDaoTestCase {
 
   @Before
   public void createDao() throws Exception {
-    WorkQueue queue = mock(WorkQueue.class);
-    dao = new RuleDao(getMyBatis(), queue);
+    dao = new RuleDao(getMyBatis());
   }
 
   @Test
index 6707ea1385211ffc503bc46810db0e1dfe1e712b..91ab6c1461810ff42e00e05f412b04631939e1ca 100644 (file)
@@ -97,10 +97,9 @@ public class RegisterRulesTest extends AbstractDaoTestCase {
   @Before
   public void before() {
     system = mock(System2.class);
-    queue = mock(WorkQueue.class);
     when(system.now()).thenReturn(date.getTime());
     myBatis = getMyBatis();
-    ruleDao = new RuleDao(myBatis, queue);
+    ruleDao = new RuleDao(myBatis);
     ruleTagDao = new RuleTagDao(myBatis);
     activeRuleDao = new ActiveRuleDao(myBatis);
     ruleTagOperations = new RuleTagOperations(ruleTagDao, esRuleTags);