.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();
}
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;
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;
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);
}
}
}
*/
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);
}
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;
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;
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;
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;
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() {
*/
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;
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
}
@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
}
@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 {
}
}
- /**
- *
- * @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();
return RuleKey.of(this.getRepositoryKey(), this.getRuleKey());
}
- @Deprecated
public Integer getId() {
return id;
}
*/
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;
import java.util.Map;
import java.util.Properties;
+import static org.mockito.Mockito.mock;
+
import static org.junit.Assert.fail;
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 {
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();
}
*/
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;
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;
public class MyBatisTest {
private static H2Database database;
private Logback logback = mock(Logback.class);
+ private WorkQueue queue = mock(WorkQueue.class);
@BeforeClass
public static void start() {
@Test
public void shouldConfigureMyBatis() {
- MyBatis myBatis = new MyBatis(database, logback);
+ MyBatis myBatis = new MyBatis(database, logback, queue);
myBatis.start();
Configuration conf = myBatis.getSessionFactory().getConfiguration();
@Test
public void shouldOpenBatchSession() {
- MyBatis myBatis = new MyBatis(database, logback);
+ MyBatis myBatis = new MyBatis(database, logback, queue);
myBatis.start();
SqlSession session = myBatis.openBatchSession();
*/
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;
import java.util.Map;
import java.util.Properties;
+import static org.mockito.Mockito.mock;
+
import static org.junit.Assert.fail;
/**
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) {
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());
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 {
@Before
public void createDao() throws Exception {
- WorkQueue queue = mock(WorkQueue.class);
- dao = new RuleDao(getMyBatis(), queue);
+ dao = new RuleDao(getMyBatis());
}
@Test
@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);