diff options
author | Jean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com> | 2013-04-09 18:07:14 +0200 |
---|---|---|
committer | Jean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com> | 2013-04-09 18:07:14 +0200 |
commit | c98cee4a59781f8adc15ee58255518f1a6c4c4c7 (patch) | |
tree | 000a0de24ac34d70de77179092bfb17920fb6304 | |
parent | 6d05888e34e7aab3a8aa0a1ed1a6c34b224dd60e (diff) | |
download | sonarqube-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
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 |