]> 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 13:40:49 +0000 (15:40 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Mon, 28 Apr 2014 15:30:49 +0000 (17:30 +0200)
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/db/UnsuportedException.java [new file with mode: 0644]
sonar-core/src/main/java/org/sonar/core/persistence/BatchSession.java
sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java
sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java

index e10bbf6cfdb7a8b2cf3895c41272c6b589559c99..38c2c849ae0e46571642309362265060ce02eab6 100644 (file)
@@ -25,7 +25,7 @@ import org.sonar.core.persistence.MyBatis;
 
 import java.io.Serializable;
 
-public abstract class BaseDao<E extends Dto<K>, K extends Serializable, M extends Dao<E,K>>
+public abstract class BaseDao<E extends Dto<K>, K extends Serializable>
   implements Dao<E, K> {
 
   protected MyBatis mybatis;
@@ -38,11 +38,15 @@ public abstract class BaseDao<E extends Dto<K>, K extends Serializable, M extend
 
   protected abstract String getIndexName();
 
-  protected abstract Class<M> getMapperClass();
+  protected abstract void doInsert(E item, SqlSession session);
 
-  private M getMapper(SqlSession session) {
-    return session.getMapper(getMapperClass());
-  }
+  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);
@@ -56,44 +60,56 @@ public abstract class BaseDao<E extends Dto<K>, K extends Serializable, M extend
     this.queue.enqueDelete(this.getIndexName(), key);
   }
 
-  protected MyBatis getMyBatis(){
+  protected MyBatis getMyBatis() {
     return this.mybatis;
   }
 
   @Override
-  @SuppressWarnings("unchecked")
   public E getByKey(K key) {
-    E item = null;
     SqlSession session = getMyBatis().openSession();
-    item = getMapper(session).getByKey(key);
+    E item = this.doGetByKey(key, session);
     MyBatis.closeQuietly(session);
     return item;
   }
 
   @Override
-  public void update(E item) {
+  public E update(E item) {
     SqlSession session = getMyBatis().openSession();
     try {
-      getMapper(session).update(item);
+      this.doUpdate(item, session);
       session.commit();
       this.enqueUpdate(item.getKey());
+      return item;
     } finally {
       MyBatis.closeQuietly(session);
     }
   }
 
   @Override
-  public void insert(E item) {
+  public E insert(E item) {
     SqlSession session = getMyBatis().openSession();
     try {
-      getMapper(session).insert(item);
+      this.doInsert(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) {
+
+  }
+
+  public void delete(E item, SqlSession session) {
+
+  }
+
   @Override
   public void delete(E item) {
     this.deleteByKey(item.getKey());
@@ -103,7 +119,7 @@ public abstract class BaseDao<E extends Dto<K>, K extends Serializable, M extend
   public void deleteByKey(K key) {
     SqlSession session = getMyBatis().openSession();
     try {
-      getMapper(session).deleteByKey(key);
+      this.deleteByKey(key);
       session.commit();
     } finally {
       MyBatis.closeQuietly(session);
index 458d2b703e2d4deed68823135505a889a2d5be27..5fc95d944d69188f052cbc7d9cf38d0fe4ac3442 100644 (file)
@@ -26,9 +26,9 @@ public interface Dao<E extends Dto<K>, K extends Serializable> {
 
   public E getByKey(K key);
 
-  public void update(E item);
+  public E update(E item);
 
-  public void insert(E item);
+  public E insert(E item);
 
   public void delete(E item);
 
diff --git a/sonar-core/src/main/java/org/sonar/core/db/UnsuportedException.java b/sonar-core/src/main/java/org/sonar/core/db/UnsuportedException.java
new file mode 100644 (file)
index 0000000..6e593f2
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.core.db;
+
+public class UnsuportedException extends RuntimeException {
+
+  public UnsuportedException(String cause) {
+    super(cause);
+  }
+
+}
index 2579314b8bbd18cb2ff3fd7f3f32ca05995506cb..05cc551769a7fdbe5a8393806011c536d7f7de62 100644 (file)
@@ -40,6 +40,7 @@ public class BatchSession implements SqlSession {
   private final int batchSize;
   private int count = 0;
 
+
   BatchSession(SqlSession session) {
     this(session, MAX_BATCH_SIZE);
   }
index 1c87168d8b57b29caa98b54c24ae2d8e3cd7da09..2c2ee23e1ee4c56603a43d56ab37650eb4ceb25d 100644 (file)
@@ -19,6 +19,8 @@
  */
 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;
@@ -35,10 +37,9 @@ import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class RuleDao extends BaseDao<RuleDto, RuleKey, RuleMapper>
+public class RuleDao extends BaseDao<RuleDto, RuleKey>
   implements BatchComponent, ServerComponent {
 
-
   public RuleDao(MyBatis mybatis, WorkQueue queue) {
     super(queue, mybatis);
   }
@@ -49,8 +50,29 @@ public class RuleDao extends BaseDao<RuleDto, RuleKey, RuleMapper>
   }
 
   @Override
-  protected Class<RuleMapper> getMapperClass() {
-    return RuleMapper.class;
+  protected void doInsert(RuleDto item, SqlSession session) {
+    session.getMapper(RuleMapper.class).insert(item);
+  }
+
+  @Override
+  protected void doUpdate(RuleDto item, SqlSession session) {
+    session.getMapper(RuleMapper.class).update(item);
+  }
+
+  @Override
+  protected void doDelete(RuleDto item, SqlSession session) {
+    throw new UnsuportedException("Rules cannot be deleted");
+  }
+
+  @Override
+  protected void doDeleteByKey(RuleDto item, 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() {
@@ -114,11 +136,21 @@ public class RuleDao extends BaseDao<RuleDto, RuleKey, RuleMapper>
     }
   }
 
+  /**
+   *
+   * @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();
@@ -139,23 +171,6 @@ public class RuleDao extends BaseDao<RuleDto, RuleKey, RuleMapper>
     }
   }
 
-  public void update(RuleDto rule, SqlSession session) {
-    getMapper(session).update(rule);
-  }
-
-//  public RuleDto update(RuleDto rule) {
-//   return super.update(rule);
-//  }
-//
-//  public RuleDto insert(RuleDto ruleToInsert) {
-//    return super.insert(ruleToInsert);
-//  }
-
-  public void insert(RuleDto ruleToInsert, SqlSession session) {
-    getMapper(session).insert(ruleToInsert);
-  }
-
-
   public void insert(Collection<RuleDto> rules) {
     SqlSession session = mybatis.openBatchSession();
     try {
@@ -168,9 +183,9 @@ public class RuleDao extends BaseDao<RuleDto, RuleKey, RuleMapper>
     }
   }
 
-  //******************************
+  // ******************************
   // Methods for Rule Parameters
-  //******************************
+  // ******************************
 
   public List<RuleParamDto> selectParameters() {
     SqlSession session = mybatis.openSession();
@@ -253,10 +268,9 @@ public class RuleDao extends BaseDao<RuleDto, RuleKey, RuleMapper>
     return session.getMapper(RuleMapper.class);
   }
 
-  //***************************
+  // ***************************
   // Methods for Rule Tags
-  //***************************
-
+  // ***************************
 
   public void insert(RuleRuleTagDto newTag, SqlSession session) {
     getMapper(session).insertTag(newTag);
index 536071017ebccf6b3a69e44397f1cb49bf617943..75f3d4e62b16a97fa82fd7e7a975e1ed7c07084f 100644 (file)
@@ -21,11 +21,10 @@ package org.sonar.core.rule;
 
 import org.apache.ibatis.annotations.Param;
 import org.sonar.api.rule.RuleKey;
-import org.sonar.core.db.Dao;
 
 import java.util.List;
 
-public interface RuleMapper extends Dao<RuleDto, RuleKey>{
+public interface RuleMapper {
 
   List<RuleDto> selectAll();