From: Stephane Gamard Date: Mon, 28 Apr 2014 13:40:49 +0000 (+0200) Subject: SONAR-5237 - Delegation from BaseIndex rather than BaseMapper X-Git-Tag: 4.4-RC1~1371 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=43854de0cea41fa4acc6929c864e4134301add18;p=sonarqube.git SONAR-5237 - Delegation from BaseIndex rather than BaseMapper --- diff --git a/sonar-core/src/main/java/org/sonar/core/db/BaseDao.java b/sonar-core/src/main/java/org/sonar/core/db/BaseDao.java index e10bbf6cfdb..38c2c849ae0 100644 --- a/sonar-core/src/main/java/org/sonar/core/db/BaseDao.java +++ b/sonar-core/src/main/java/org/sonar/core/db/BaseDao.java @@ -25,7 +25,7 @@ import org.sonar.core.persistence.MyBatis; import java.io.Serializable; -public abstract class BaseDao, K extends Serializable, M extends Dao> +public abstract class BaseDao, K extends Serializable> implements Dao { protected MyBatis mybatis; @@ -38,11 +38,15 @@ public abstract class BaseDao, K extends Serializable, M extend protected abstract String getIndexName(); - protected abstract Class 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, 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, 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); diff --git a/sonar-core/src/main/java/org/sonar/core/db/Dao.java b/sonar-core/src/main/java/org/sonar/core/db/Dao.java index 458d2b703e2..5fc95d944d6 100644 --- a/sonar-core/src/main/java/org/sonar/core/db/Dao.java +++ b/sonar-core/src/main/java/org/sonar/core/db/Dao.java @@ -26,9 +26,9 @@ public interface Dao, 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 index 00000000000..6e593f2380b --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/core/db/UnsuportedException.java @@ -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); + } + +} diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/BatchSession.java b/sonar-core/src/main/java/org/sonar/core/persistence/BatchSession.java index 2579314b8bb..05cc551769a 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/BatchSession.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/BatchSession.java @@ -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); } diff --git a/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java index 1c87168d8b5..2c2ee23e1ee 100644 --- a/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java +++ b/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java @@ -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 +public class RuleDao extends BaseDao implements BatchComponent, ServerComponent { - public RuleDao(MyBatis mybatis, WorkQueue queue) { super(queue, mybatis); } @@ -49,8 +50,29 @@ public class RuleDao extends BaseDao } @Override - protected Class 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 selectAll() { @@ -114,11 +136,21 @@ public class RuleDao extends BaseDao } } + /** + * + * @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 } } - 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 rules) { SqlSession session = mybatis.openBatchSession(); try { @@ -168,9 +183,9 @@ public class RuleDao extends BaseDao } } - //****************************** + // ****************************** // Methods for Rule Parameters - //****************************** + // ****************************** public List selectParameters() { SqlSession session = mybatis.openSession(); @@ -253,10 +268,9 @@ public class RuleDao extends BaseDao return session.getMapper(RuleMapper.class); } - //*************************** + // *************************** // Methods for Rule Tags - //*************************** - + // *************************** public void insert(RuleRuleTagDto newTag, SqlSession session) { getMapper(session).insertTag(newTag); diff --git a/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java index 536071017eb..75f3d4e62b1 100644 --- a/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java @@ -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{ +public interface RuleMapper { List selectAll();