aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>2013-04-09 18:07:14 +0200
committerJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>2013-04-09 18:07:14 +0200
commitc98cee4a59781f8adc15ee58255518f1a6c4c4c7 (patch)
tree000a0de24ac34d70de77179092bfb17920fb6304
parent6d05888e34e7aab3a8aa0a1ed1a6c34b224dd60e (diff)
downloadsonarqube-c98cee4a59781f8adc15ee58255518f1a6c4c4c7.tar.gz
sonarqube-c98cee4a59781f8adc15ee58255518f1a6c4c4c7.zip
(SONAR-3893) Improve the highlighter API to not depend on sonar-channel and allow to work on multi-line tokens - Added MyBatis layer to access snapshot sources
-rw-r--r--sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java5
-rw-r--r--sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDao.java4
-rw-r--r--sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDto.java38
-rw-r--r--sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataMapper.java2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceDao.java49
-rw-r--r--sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceDto.java43
-rw-r--r--sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceMapper.java31
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/source/jdbc/SnapshotDataMapper.xml4
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/source/jdbc/SnapshotSourceMapper.xml14
-rw-r--r--sonar-core/src/test/java/org/sonar/core/source/jdbc/SnapshotDataDaoTest.java15
-rw-r--r--sonar-core/src/test/java/org/sonar/core/source/jdbc/SnapshotSourceDaoTest.java46
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/source/jdbc/SnapshotSourceDaoTest/shared.xml10
12 files changed, 210 insertions, 51 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java b/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
index de787cfd5ad..3b36169c575 100644
--- a/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
+++ b/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
@@ -63,6 +63,8 @@ import org.sonar.core.rule.RuleDto;
import org.sonar.core.rule.RuleMapper;
import org.sonar.core.source.jdbc.SnapshotDataDto;
import org.sonar.core.source.jdbc.SnapshotDataMapper;
+import org.sonar.core.source.jdbc.SnapshotSourceDto;
+import org.sonar.core.source.jdbc.SnapshotSourceMapper;
import org.sonar.core.template.LoadedTemplateDto;
import org.sonar.core.template.LoadedTemplateMapper;
import org.sonar.core.user.*;
@@ -124,12 +126,13 @@ public class MyBatis implements BatchComponent, ServerComponent {
loadAlias(conf, "Issue", IssueDto.class);
loadAlias(conf, "IssueChange", IssueChangeDto.class);
loadAlias(conf, "SnapshotData", SnapshotDataDto.class);
+ loadAlias(conf, "SnapshotSource", SnapshotSourceDto.class);
Class<?>[] mappers = {ActiveDashboardMapper.class, AuthorMapper.class, DashboardMapper.class,
DependencyMapper.class, DuplicationMapper.class, GraphDtoMapper.class, LoadedTemplateMapper.class, MeasureFilterMapper.class, PropertiesMapper.class, PurgeMapper.class,
ResourceKeyUpdaterMapper.class, ResourceIndexerMapper.class, ResourceMapper.class, ResourceSnapshotMapper.class, ReviewCommentMapper.class,
ReviewMapper.class, RoleMapper.class, RuleMapper.class, SchemaMigrationMapper.class, SemaphoreMapper.class, UserMapper.class, WidgetMapper.class, WidgetPropertyMapper.class,
- MeasureMapper.class, IssueMapper.class, IssueChangeMapper.class, SnapshotDataMapper.class};
+ MeasureMapper.class, IssueMapper.class, IssueChangeMapper.class, SnapshotDataMapper.class, SnapshotSourceMapper.class};
loadMappers(conf, mappers);
configureLogback(mappers);
diff --git a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDao.java b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDao.java
index 4d3e7630b87..de8512aedbd 100644
--- a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDao.java
@@ -34,13 +34,13 @@ public class SnapshotDataDao {
this.mybatis = mybatis;
}
- public SnapshotDataDto selectBySnapshot(long snapshotId) {
+ public String selectSnapshotData(long snapshotId) {
SqlSession session = mybatis.openBatchSession();
try {
SnapshotDataMapper mapper = session.getMapper(SnapshotDataMapper.class);
- return mapper.selectBySnapshot(snapshotId);
+ return mapper.selectSnapshotData(snapshotId);
} finally {
MyBatis.closeQuietly(session);
diff --git a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDto.java b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDto.java
index 340c7690b71..ed222d8903a 100644
--- a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDto.java
+++ b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataDto.java
@@ -25,11 +25,10 @@ package org.sonar.core.source.jdbc;
*/
public class SnapshotDataDto {
- private long id;
- private long snapshotId;
- private long resourceId;
- private String data;
- private String dataType;
+ private final long snapshotId;
+ private final long resourceId;
+ private final String data;
+ private final String dataType;
public SnapshotDataDto(long snapshotId, long resourceId, String data, String dataType) {
this.snapshotId = snapshotId;
@@ -38,48 +37,19 @@ public class SnapshotDataDto {
this.dataType = dataType;
}
- public long getId() {
- return id;
- }
-
- public SnapshotDataDto setId(long id) {
- this.id = id;
- return this;
- }
-
public long getSnapshotId() {
return snapshotId;
}
- public SnapshotDataDto setSnapshotId(long snapshotId) {
- this.snapshotId = snapshotId;
- return this;
- }
-
public long getResourceId() {
return resourceId;
}
- public SnapshotDataDto setResourceId(long resourceId) {
- this.resourceId = resourceId;
- return this;
- }
-
public String getData() {
return data;
}
- public SnapshotDataDto setData(String data) {
- this.data = data;
- return this;
- }
-
public String getDataType() {
return dataType;
}
-
- public SnapshotDataDto setDataType(String dataType) {
- this.dataType = dataType;
- return this;
- }
}
diff --git a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataMapper.java b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataMapper.java
index aa7d4f90352..8ca60f0a17f 100644
--- a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataMapper.java
+++ b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotDataMapper.java
@@ -29,5 +29,5 @@ public interface SnapshotDataMapper {
void insert(SnapshotDataDto snapshotData);
- SnapshotDataDto selectBySnapshot(@Param("sid") long snapshotId);
+ String selectSnapshotData(@Param("sid") long snapshotId);
}
diff --git a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceDao.java b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceDao.java
new file mode 100644
index 00000000000..2e2629e0ba0
--- /dev/null
+++ b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceDao.java
@@ -0,0 +1,49 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar 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.
+ *
+ * Sonar 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 Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+
+package org.sonar.core.source.jdbc;
+
+import org.apache.ibatis.session.SqlSession;
+import org.sonar.core.persistence.MyBatis;
+
+/**
+ * @since 3.6
+ */
+public class SnapshotSourceDao {
+
+ private final MyBatis mybatis;
+
+ public SnapshotSourceDao(MyBatis myBatis) {
+ this.mybatis = myBatis;
+ }
+
+ public String selectSnapshotSource(long snapshotId) {
+
+ SqlSession session = mybatis.openBatchSession();
+
+ try {
+ SnapshotSourceMapper mapper = session.getMapper(SnapshotSourceMapper.class);
+ return mapper.selectSnapshotSource(snapshotId);
+
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
+}
diff --git a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceDto.java b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceDto.java
new file mode 100644
index 00000000000..57b27ac8766
--- /dev/null
+++ b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceDto.java
@@ -0,0 +1,43 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar 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.
+ *
+ * Sonar 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 Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+
+package org.sonar.core.source.jdbc;
+
+/**
+ * @since 3.6
+ */
+public class SnapshotSourceDto {
+
+ private final long snapshotId;
+ private final String data;
+
+ public SnapshotSourceDto(long snapshotId, String data) {
+ this.snapshotId = snapshotId;
+ this.data = data;
+ }
+
+ public long getSnapshotId() {
+ return snapshotId;
+ }
+
+ public String getData() {
+ return data;
+ }
+}
diff --git a/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceMapper.java b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceMapper.java
new file mode 100644
index 00000000000..e010349d64c
--- /dev/null
+++ b/sonar-core/src/main/java/org/sonar/core/source/jdbc/SnapshotSourceMapper.java
@@ -0,0 +1,31 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar 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.
+ *
+ * Sonar 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 Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+
+package org.sonar.core.source.jdbc;
+
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @since 3.6
+ */
+public interface SnapshotSourceMapper {
+
+ String selectSnapshotSource(@Param("sid") long snapshotId);
+}
diff --git a/sonar-core/src/main/resources/org/sonar/core/source/jdbc/SnapshotDataMapper.xml b/sonar-core/src/main/resources/org/sonar/core/source/jdbc/SnapshotDataMapper.xml
index 85141757b47..884cf5f5c64 100644
--- a/sonar-core/src/main/resources/org/sonar/core/source/jdbc/SnapshotDataMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/source/jdbc/SnapshotDataMapper.xml
@@ -3,8 +3,8 @@
<mapper namespace="org.sonar.core.source.jdbc.SnapshotDataMapper">
- <select id="selectBySnapshot" parameterType="map" resultType="SnapshotData">
- SELECT id, resource_id as resourceId, snapshot_id as snapshotId, data, data_type as dataType
+ <select id="selectSnapshotData" parameterType="map" resultType="string">
+ SELECT data
FROM snapshot_data
WHERE snapshot_id = #{sid}
</select>
diff --git a/sonar-core/src/main/resources/org/sonar/core/source/jdbc/SnapshotSourceMapper.xml b/sonar-core/src/main/resources/org/sonar/core/source/jdbc/SnapshotSourceMapper.xml
new file mode 100644
index 00000000000..893f9f471da
--- /dev/null
+++ b/sonar-core/src/main/resources/org/sonar/core/source/jdbc/SnapshotSourceMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="org.sonar.core.source.jdbc.SnapshotSourceMapper">
+
+ <select id="selectSnapshotSource" parameterType="map" resultType="string">
+ SELECT data
+ FROM snapshot_sources
+ WHERE snapshot_id = #{sid}
+ </select>
+
+</mapper>
+
diff --git a/sonar-core/src/test/java/org/sonar/core/source/jdbc/SnapshotDataDaoTest.java b/sonar-core/src/test/java/org/sonar/core/source/jdbc/SnapshotDataDaoTest.java
index 687cb83bdb0..935b88bdd05 100644
--- a/sonar-core/src/test/java/org/sonar/core/source/jdbc/SnapshotDataDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/source/jdbc/SnapshotDataDaoTest.java
@@ -39,13 +39,9 @@ public class SnapshotDataDaoTest extends AbstractDaoTestCase {
@Test
public void should_retrieve_snapshot_data_by_snapshot_id() throws Exception {
- SnapshotDataDto dto = dao.selectBySnapshot(10L);
+ String data = dao.selectSnapshotData(10L);
- assertThat(dto.getId()).isEqualTo(101L);
- assertThat(dto.getResourceId()).isEqualTo(1L);
- assertThat(dto.getSnapshotId()).isEqualTo(10L);
- assertThat(dto.getData()).isEqualTo("0,10,k");
- assertThat(dto.getDataType()).isEqualTo("highlight_syntax");
+ assertThat(data).isEqualTo("0,10,k");
}
@Test
@@ -58,11 +54,8 @@ public class SnapshotDataDaoTest extends AbstractDaoTestCase {
dao.insert(dto);
- SnapshotDataDto serializedData = dao.selectBySnapshot(11L);
+ String serializedData = dao.selectSnapshotData(11L);
- assertThat(serializedData.getResourceId()).isEqualTo(1L);
- assertThat(serializedData.getSnapshotId()).isEqualTo(11L);
- assertThat(serializedData.getData()).isEqualTo(data);
- assertThat(serializedData.getDataType()).isEqualTo(dataType);
+ assertThat(serializedData).isEqualTo(data);
}
}
diff --git a/sonar-core/src/test/java/org/sonar/core/source/jdbc/SnapshotSourceDaoTest.java b/sonar-core/src/test/java/org/sonar/core/source/jdbc/SnapshotSourceDaoTest.java
new file mode 100644
index 00000000000..d02eb1fad19
--- /dev/null
+++ b/sonar-core/src/test/java/org/sonar/core/source/jdbc/SnapshotSourceDaoTest.java
@@ -0,0 +1,46 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar 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.
+ *
+ * Sonar 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 Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+
+package org.sonar.core.source.jdbc;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.sonar.core.persistence.AbstractDaoTestCase;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class SnapshotSourceDaoTest extends AbstractDaoTestCase {
+
+ private SnapshotSourceDao dao;
+
+ @Before
+ public void setUpTestData() {
+ dao = new SnapshotSourceDao(getMyBatis());
+ setupData("shared");
+ }
+
+ @Test
+ public void should_retrieve_snapshot_source() throws Exception {
+
+ String snapshotSource = dao.selectSnapshotSource(10L);
+
+ assertThat(snapshotSource).isEqualTo("public class Foo {public Foo(){}}");
+ }
+}
diff --git a/sonar-core/src/test/resources/org/sonar/core/source/jdbc/SnapshotSourceDaoTest/shared.xml b/sonar-core/src/test/resources/org/sonar/core/source/jdbc/SnapshotSourceDaoTest/shared.xml
new file mode 100644
index 00000000000..588993346b5
--- /dev/null
+++ b/sonar-core/src/test/resources/org/sonar/core/source/jdbc/SnapshotSourceDaoTest/shared.xml
@@ -0,0 +1,10 @@
+<dataset>
+
+ <projects id="1" kee="org.apache.struts:struts" enabled="[true]"/>
+
+ <snapshots id="10" project_id="1" islast="[false]" />
+ <snapshots id="11" project_id="1" islast="[true]" />
+
+ <snapshot_sources id="101" snapshot_id="10" data="public class Foo {public Foo(){}}" />
+
+</dataset> \ No newline at end of file