From 9b8d9110b5f3817b44383fc4e05d8fd9a5e83043 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Mon, 27 Jan 2014 17:08:46 +0100 Subject: [PATCH] SourcesShowWS : Add scm author --- .../dashboards/GlobalDefaultDashboard.java | 4 +- .../GlobalDefaultDashboardTest.java | 4 +- .../sonar/core/measure/db/MeasureDataDao.java | 45 ++++++++++ .../sonar/core/measure/db/MeasureDataDto.java | 85 +++++++++++++++++++ .../core/measure/db/MeasureDataMapper.java | 29 +++++++ .../measure/{ => db}/MeasureFilterDao.java | 2 +- .../measure/{ => db}/MeasureFilterDto.java | 2 +- .../measure/{ => db}/MeasureFilterMapper.java | 2 +- .../sonar/core/measure/db/package-info.java | 25 ++++++ .../org/sonar/core/persistence/DaoUtils.java | 4 +- .../org/sonar/core/persistence/MyBatis.java | 12 +-- .../core/measure/db/MeasureDataMapper.xml | 28 ++++++ .../measure/{ => db}/MeasureFilterMapper.xml | 2 +- .../core/measure/db/MeasureDataDaoTest.java | 51 +++++++++++ .../{ => db}/MeasureFilterDaoTest.java | 2 +- .../measure/db/MeasureDataDaoTest/shared.xml | 10 +++ .../{ => db}/MeasureFilterDaoTest/shared.xml | 0 .../shouldInsert-result.xml | 0 .../sonar/server/source/SourceService.java | 17 +++- .../source/ws/SourcesShowWsHandler.java | 58 +++++++++++-- .../startup/RegisterNewMeasureFilters.java | 4 +- .../server/source/SourceServiceTest.java | 20 ++++- .../source/ws/SourcesShowWsHandlerTest.java | 31 ++++++- .../RegisterNewMeasureFiltersTest.java | 9 +- .../show_source_with_scm.json | 17 ++++ ...urce_with_scm_with_from_and_to_params.json | 20 +++++ 26 files changed, 448 insertions(+), 35 deletions(-) create mode 100644 sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataDao.java create mode 100644 sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataDto.java create mode 100644 sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataMapper.java rename sonar-core/src/main/java/org/sonar/core/measure/{ => db}/MeasureFilterDao.java (98%) rename sonar-core/src/main/java/org/sonar/core/measure/{ => db}/MeasureFilterDto.java (98%) rename sonar-core/src/main/java/org/sonar/core/measure/{ => db}/MeasureFilterMapper.java (96%) create mode 100644 sonar-core/src/main/java/org/sonar/core/measure/db/package-info.java create mode 100644 sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureDataMapper.xml rename sonar-core/src/main/resources/org/sonar/core/measure/{ => db}/MeasureFilterMapper.xml (91%) create mode 100644 sonar-core/src/test/java/org/sonar/core/measure/db/MeasureDataDaoTest.java rename sonar-core/src/test/java/org/sonar/core/measure/{ => db}/MeasureFilterDaoTest.java (98%) create mode 100644 sonar-core/src/test/resources/org/sonar/core/measure/db/MeasureDataDaoTest/shared.xml rename sonar-core/src/test/resources/org/sonar/core/measure/{ => db}/MeasureFilterDaoTest/shared.xml (100%) rename sonar-core/src/test/resources/org/sonar/core/measure/{ => db}/MeasureFilterDaoTest/shouldInsert-result.xml (100%) create mode 100644 sonar-server/src/test/resources/org/sonar/server/source/ws/SourcesShowWsHandlerTest/show_source_with_scm.json create mode 100644 sonar-server/src/test/resources/org/sonar/server/source/ws/SourcesShowWsHandlerTest/show_source_with_scm_with_from_and_to_params.json diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/dashboards/GlobalDefaultDashboard.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/dashboards/GlobalDefaultDashboard.java index 60c207ad9e9..7315913c878 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/dashboards/GlobalDefaultDashboard.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/dashboards/GlobalDefaultDashboard.java @@ -22,8 +22,8 @@ package org.sonar.plugins.core.dashboards; import org.sonar.api.web.Dashboard; import org.sonar.api.web.DashboardLayout; import org.sonar.api.web.DashboardTemplate; -import org.sonar.core.measure.MeasureFilterDao; -import org.sonar.core.measure.MeasureFilterDto; +import org.sonar.core.measure.db.MeasureFilterDao; +import org.sonar.core.measure.db.MeasureFilterDto; import org.sonar.plugins.core.measurefilters.MyFavouritesFilter; import org.sonar.plugins.core.measurefilters.ProjectFilter; import org.sonar.plugins.core.widgets.MeasureFilterListWidget; diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/dashboards/GlobalDefaultDashboardTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/dashboards/GlobalDefaultDashboardTest.java index 521aa51fdc6..e74bc8bedec 100644 --- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/dashboards/GlobalDefaultDashboardTest.java +++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/dashboards/GlobalDefaultDashboardTest.java @@ -23,8 +23,8 @@ import org.junit.Before; import org.junit.Test; import org.sonar.api.web.Dashboard; import org.sonar.api.web.Dashboard.Widget; -import org.sonar.core.measure.MeasureFilterDao; -import org.sonar.core.measure.MeasureFilterDto; +import org.sonar.core.measure.db.MeasureFilterDao; +import org.sonar.core.measure.db.MeasureFilterDto; import org.sonar.plugins.core.CorePlugin; import org.sonar.plugins.core.measurefilters.MyFavouritesFilter; import org.sonar.plugins.core.measurefilters.ProjectFilter; diff --git a/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataDao.java b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataDao.java new file mode 100644 index 00000000000..68619c45504 --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataDao.java @@ -0,0 +1,45 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2013 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.measure.db; + +import org.apache.ibatis.session.SqlSession; +import org.sonar.api.ServerComponent; +import org.sonar.core.persistence.MyBatis; + +public class MeasureDataDao implements ServerComponent { + + private MyBatis mybatis; + + public MeasureDataDao(MyBatis mybatis) { + this.mybatis = mybatis; + } + + public MeasureDataDto findByComponentKeyAndMetricKey(String componentKey, String metricKey) { + SqlSession session = mybatis.openSession(); + try { + MeasureDataMapper mapper = session.getMapper(MeasureDataMapper.class); + return mapper.findByComponentKeyAndMetricKey(componentKey, metricKey); + } finally { + MyBatis.closeQuietly(session); + } + } + +} diff --git a/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataDto.java b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataDto.java new file mode 100644 index 00000000000..0e276794426 --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataDto.java @@ -0,0 +1,85 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2013 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.measure.db; + +import com.google.common.base.Charsets; +import com.google.common.base.Throwables; + +import java.io.UnsupportedEncodingException; + +public class MeasureDataDto { + + private Integer id; + + private Integer measureId; + + private Integer snapshotId; + + private byte[] data; + + public Integer getId() { + return id; + } + + public MeasureDataDto setId(Integer id) { + this.id = id; + return this; + } + + public Integer getMeasureId() { + return measureId; + } + + public MeasureDataDto setMeasureId(Integer measureId) { + this.measureId = measureId; + return this; + } + + public Integer getSnapshotId() { + return snapshotId; + } + + public MeasureDataDto setSnapshotId(Integer snapshotId) { + this.snapshotId = snapshotId; + return this; + } + + public byte[] getData() { + return data; + } + + public MeasureDataDto setData(byte[] data) { + this.data = data; + return this; + } + + public String getText() { + if (data != null) { + try { + return new String(data, Charsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + // how is it possible to not support UTF-8 ? + Throwables.propagate(e); + } + } + return null; + } +} diff --git a/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataMapper.java b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataMapper.java new file mode 100644 index 00000000000..5be8ab5ce6d --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDataMapper.java @@ -0,0 +1,29 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2013 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.measure.db; + +import org.apache.ibatis.annotations.Param; + +public interface MeasureDataMapper { + + MeasureDataDto findByComponentKeyAndMetricKey(@Param("componentKey") String componentKey, @Param("metricKey") String metricKey); + +} diff --git a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterDao.java b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureFilterDao.java similarity index 98% rename from sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterDao.java rename to sonar-core/src/main/java/org/sonar/core/measure/db/MeasureFilterDao.java index d1f355c6239..a45d3c31552 100644 --- a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterDao.java +++ b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureFilterDao.java @@ -17,7 +17,7 @@ * 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.measure; +package org.sonar.core.measure.db; import org.apache.ibatis.session.SqlSession; import org.sonar.api.BatchComponent; diff --git a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterDto.java b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureFilterDto.java similarity index 98% rename from sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterDto.java rename to sonar-core/src/main/java/org/sonar/core/measure/db/MeasureFilterDto.java index 5efb7e7bc8d..bd942f8a988 100644 --- a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterDto.java +++ b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureFilterDto.java @@ -17,7 +17,7 @@ * 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.measure; +package org.sonar.core.measure.db; import javax.annotation.Nullable; diff --git a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterMapper.java b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureFilterMapper.java similarity index 96% rename from sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterMapper.java rename to sonar-core/src/main/java/org/sonar/core/measure/db/MeasureFilterMapper.java index 492df2f8c66..25e3eaa8a76 100644 --- a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureFilterMapper.java @@ -17,7 +17,7 @@ * 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.measure; +package org.sonar.core.measure.db; /** * @since 3.4 diff --git a/sonar-core/src/main/java/org/sonar/core/measure/db/package-info.java b/sonar-core/src/main/java/org/sonar/core/measure/db/package-info.java new file mode 100644 index 00000000000..340b04554d9 --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/core/measure/db/package-info.java @@ -0,0 +1,25 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2013 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. + */ + +@ParametersAreNonnullByDefault +package org.sonar.core.measure.db; + +import javax.annotation.ParametersAreNonnullByDefault; + diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java b/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java index f2e8d6f77b2..99ed13b1bc9 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java @@ -25,7 +25,8 @@ import org.sonar.core.dashboard.DashboardDao; import org.sonar.core.duplication.DuplicationDao; import org.sonar.core.graph.jdbc.GraphDao; import org.sonar.core.issue.db.*; -import org.sonar.core.measure.MeasureFilterDao; +import org.sonar.core.measure.db.MeasureDataDao; +import org.sonar.core.measure.db.MeasureFilterDao; import org.sonar.core.notification.db.NotificationQueueDao; import org.sonar.core.permission.PermissionDao; import org.sonar.core.permission.PermissionTemplateDao; @@ -70,6 +71,7 @@ public final class DaoUtils { IssueFilterDao.class, IssueFilterFavouriteDao.class, LoadedTemplateDao.class, + MeasureDataDao.class, MeasureFilterDao.class, NotificationQueueDao.class, PermissionDao.class, 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 09c38625390..ab2b3472488 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 @@ -31,7 +31,6 @@ import org.slf4j.LoggerFactory; import org.sonar.api.BatchComponent; import org.sonar.api.ServerComponent; import org.sonar.api.config.Settings; -import org.sonar.api.database.model.MeasureData; import org.sonar.api.database.model.MeasureMapper; import org.sonar.api.database.model.MeasureModel; import org.sonar.core.component.ComponentDto; @@ -46,8 +45,10 @@ 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.measure.MeasureFilterDto; -import org.sonar.core.measure.MeasureFilterMapper; +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.*; @@ -125,7 +126,7 @@ public class MyBatis implements BatchComponent, ServerComponent { loadAlias(conf, "Widget", WidgetDto.class); loadAlias(conf, "WidgetProperty", WidgetPropertyDto.class); loadAlias(conf, "MeasureModel", MeasureModel.class); - loadAlias(conf, "MeasureData", MeasureData.class); + loadAlias(conf, "MeasureData", MeasureDataDto.class); loadAlias(conf, "Issue", IssueDto.class); loadAlias(conf, "IssueChange", IssueChangeDto.class); loadAlias(conf, "IssueFilter", IssueFilterDto.class); @@ -157,7 +158,8 @@ public class MyBatis implements BatchComponent, ServerComponent { SchemaMigrationMapper.class, SemaphoreMapper.class, UserMapper.class, WidgetMapper.class, WidgetPropertyMapper.class, MeasureMapper.class, SnapshotDataMapper.class, SnapshotSourceMapper.class, ActionPlanMapper.class, ActionPlanStatsMapper.class, NotificationQueueMapper.class, CharacteristicMapper.class, RuleTagMapper.class, - GroupMembershipMapper.class, QualityProfileMapper.class, ActiveRuleMapper.class + GroupMembershipMapper.class, QualityProfileMapper.class, ActiveRuleMapper.class, + MeasureDataMapper.class }; loadMappers(conf, mappers); configureLogback(mappers); diff --git a/sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureDataMapper.xml b/sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureDataMapper.xml new file mode 100644 index 00000000000..bcefc34cca0 --- /dev/null +++ b/sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureDataMapper.xml @@ -0,0 +1,28 @@ + + + + + + + m.id, + m.measure_id as measureId, + m.snapshot_id as snapshotId, + m.measure_id as measureId, + m.data as data + + + + + diff --git a/sonar-core/src/main/resources/org/sonar/core/measure/MeasureFilterMapper.xml b/sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureFilterMapper.xml similarity index 91% rename from sonar-core/src/main/resources/org/sonar/core/measure/MeasureFilterMapper.xml rename to sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureFilterMapper.xml index 425b8cc07bd..b2803b63420 100644 --- a/sonar-core/src/main/resources/org/sonar/core/measure/MeasureFilterMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureFilterMapper.xml @@ -1,7 +1,7 @@ - +