From 378dbf2f8e4501aeb2ad2496df2a7c886f751b77 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Thu, 11 Sep 2014 17:53:21 +0200 Subject: [PATCH] SONAR-5529 Create SnapshotDao in order to more easily do some medium tests --- .../server/component/db/SnapshotDao.java | 50 +++++++ .../component/ws/ComponentAppAction.java | 2 +- .../java/org/sonar/server/db/DbClient.java | 6 + .../server/measure/MeasureFilterContext.java | 2 +- .../server/measure/MeasureFilterSql.java | 7 +- .../server/platform/ServerComponents.java | 2 + .../server/component/db/SnapshotDaoTest.java | 141 ++++++++++++++++++ .../component/ws/ComponentAppActionTest.java | 2 +- .../server/issue/ws/IssuesWsMediumTest.java | 4 + .../measure/MeasureFilterExecutorTest.java | 2 +- .../component/db/SnapshotDaoTest/empty.xml | 3 + .../db/SnapshotDaoTest/insert-result.xml | 13 ++ .../component/db/SnapshotDaoTest/shared.xml | 13 ++ .../{resource => component}/SnapshotDto.java | 27 ++-- .../core/component/db/SnapshotMapper.java | 33 ++++ .../org/sonar/core/persistence/MyBatis.java | 5 +- .../org/sonar/core/resource/ResourceDao.java | 1 + .../sonar/core/resource/ResourceMapper.java | 1 + .../core/component/db/ComponentMapper.xml | 2 +- .../core/component/db/SnapshotMapper.xml | 62 ++++++++ .../sonar/core/resource/ResourceMapper.xml | 2 +- .../SnapshotDtoTest.java | 4 +- .../sonar/core/resource/ResourceDaoTest.java | 1 + 23 files changed, 358 insertions(+), 27 deletions(-) create mode 100644 server/sonar-server/src/main/java/org/sonar/server/component/db/SnapshotDao.java create mode 100644 server/sonar-server/src/test/java/org/sonar/server/component/db/SnapshotDaoTest.java create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/empty.xml create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/insert-result.xml create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/shared.xml rename sonar-core/src/main/java/org/sonar/core/{resource => component}/SnapshotDto.java (94%) create mode 100644 sonar-core/src/main/java/org/sonar/core/component/db/SnapshotMapper.java create mode 100644 sonar-core/src/main/resources/org/sonar/core/component/db/SnapshotMapper.xml rename sonar-core/src/test/java/org/sonar/core/{resource => component}/SnapshotDtoTest.java (95%) diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/db/SnapshotDao.java b/server/sonar-server/src/main/java/org/sonar/server/component/db/SnapshotDao.java new file mode 100644 index 00000000000..f6ec2f20591 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/component/db/SnapshotDao.java @@ -0,0 +1,50 @@ +/* + * 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.server.component.db; + +import org.sonar.api.ServerComponent; +import org.sonar.api.utils.System2; +import org.sonar.core.component.SnapshotDto; +import org.sonar.core.component.db.SnapshotMapper; +import org.sonar.core.persistence.DaoComponent; +import org.sonar.core.persistence.DbSession; +import org.sonar.server.db.BaseDao; + +import javax.annotation.CheckForNull; + +public class SnapshotDao extends BaseDao implements ServerComponent, DaoComponent { + + public SnapshotDao(System2 system) { + super(SnapshotMapper.class, system); + } + + @Override + @CheckForNull + protected SnapshotDto doGetNullableByKey(DbSession session, Long id) { + return mapper(session).selectByKey(id); + } + + @Override + protected SnapshotDto doInsert(DbSession session, SnapshotDto item) { + mapper(session).insert(item); + return item; + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java b/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java index 941767dfc6e..951f9431ad6 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java @@ -40,12 +40,12 @@ import org.sonar.api.web.NavigationSection; import org.sonar.api.web.Page; import org.sonar.api.web.UserRole; import org.sonar.core.component.ComponentDto; +import org.sonar.core.component.SnapshotDto; import org.sonar.core.measure.db.MeasureDto; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; import org.sonar.core.properties.PropertyDto; import org.sonar.core.properties.PropertyQuery; -import org.sonar.core.resource.SnapshotDto; import org.sonar.core.timemachine.Periods; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.NotFoundException; diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java b/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java index e8a4de33c07..b47e0614ec6 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java +++ b/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java @@ -35,6 +35,7 @@ import org.sonar.core.user.AuthorizationDao; import org.sonar.core.user.UserDao; import org.sonar.server.activity.db.ActivityDao; import org.sonar.server.component.db.ComponentDao; +import org.sonar.server.component.db.SnapshotDao; import org.sonar.server.issue.db.IssueAuthorizationDao; import org.sonar.server.issue.db.IssueDao; import org.sonar.server.measure.persistence.MeasureDao; @@ -59,6 +60,7 @@ public class DbClient implements ServerComponent { private final LoadedTemplateDao loadedTemplateDao; private final PropertiesDao propertiesDao; private final ComponentDao componentDao; + private final SnapshotDao snapshotDao; private final ResourceDao resourceDao; private final MeasureDao measureDao; private final MetricDao metricDao; @@ -85,6 +87,7 @@ public class DbClient implements ServerComponent { loadedTemplateDao = getDao(map, LoadedTemplateDao.class); propertiesDao = getDao(map, PropertiesDao.class); componentDao = getDao(map, ComponentDao.class); + snapshotDao = getDao(map, SnapshotDao.class); resourceDao = getDao(map, ResourceDao.class); measureDao = getDao(map, MeasureDao.class); metricDao = getDao(map, MetricDao.class); @@ -140,6 +143,9 @@ public class DbClient implements ServerComponent { public ComponentDao componentDao() { return componentDao; } + public SnapshotDao snapshotDao() { + return snapshotDao; + } public ResourceDao resourceDao() { return resourceDao; diff --git a/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterContext.java b/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterContext.java index 12d5cb0afc9..4f9cf8cacfe 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterContext.java +++ b/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterContext.java @@ -21,7 +21,7 @@ package org.sonar.server.measure; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; -import org.sonar.core.resource.SnapshotDto; +import org.sonar.core.component.SnapshotDto; import javax.annotation.Nullable; diff --git a/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterSql.java b/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterSql.java index fdb42960eb4..17415cab3c0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterSql.java +++ b/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterSql.java @@ -26,16 +26,16 @@ import com.google.common.collect.Ordering; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; +import org.sonar.core.component.SnapshotDto; import org.sonar.core.persistence.Database; import org.sonar.core.persistence.dialect.MsSql; import org.sonar.core.persistence.dialect.Oracle; -import org.sonar.core.resource.SnapshotDto; import javax.annotation.Nullable; import java.sql.*; -import java.sql.Date; -import java.util.*; +import java.util.Comparator; +import java.util.List; class MeasureFilterSql { @@ -358,4 +358,3 @@ class MeasureFilterSql { }); } } - diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java index 6a289ce0464..65834e8cd25 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java @@ -85,6 +85,7 @@ import org.sonar.server.charts.ChartFactory; import org.sonar.server.component.DefaultComponentFinder; import org.sonar.server.component.DefaultRubyComponentService; import org.sonar.server.component.db.ComponentDao; +import org.sonar.server.component.db.SnapshotDao; import org.sonar.server.component.ws.*; import org.sonar.server.config.ws.PropertiesWs; import org.sonar.server.db.DatabaseChecker; @@ -225,6 +226,7 @@ class ServerComponents { MeasureDao.class, MetricDao.class, ComponentDao.class, + SnapshotDao.class, DbClient.class, MeasureFilterDao.class, ActivityDao.class, diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/db/SnapshotDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/db/SnapshotDaoTest.java new file mode 100644 index 00000000000..0499b0f5389 --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/component/db/SnapshotDaoTest.java @@ -0,0 +1,141 @@ +/* + * 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.server.component.db; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.sonar.api.utils.DateUtils; +import org.sonar.api.utils.System2; +import org.sonar.core.component.SnapshotDto; +import org.sonar.core.persistence.AbstractDaoTestCase; +import org.sonar.core.persistence.DbSession; + +import static org.fest.assertions.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class SnapshotDaoTest extends AbstractDaoTestCase { + + DbSession session; + + SnapshotDao dao; + + System2 system2; + + @Before + public void createDao() throws Exception { + session = getMyBatis().openSession(false); + system2 = mock(System2.class); + dao = new SnapshotDao(system2); + } + + @After + public void tearDown() throws Exception { + session.close(); + } + + @Test + public void get_by_key() { + setupData("shared"); + + SnapshotDto result = dao.getNullableByKey(session, 3L); + assertThat(result).isNotNull(); + assertThat(result.getId()).isEqualTo(3L); + assertThat(result.getResourceId()).isEqualTo(3L); + assertThat(result.getRootProjectId()).isEqualTo(1L); + assertThat(result.getParentId()).isEqualTo(2L); + assertThat(result.getRootId()).isEqualTo(1L); + assertThat(result.getStatus()).isEqualTo("P"); + assertThat(result.getLast()).isTrue(); + assertThat(result.getPurgeStatus()).isEqualTo(1); + assertThat(result.getDepth()).isEqualTo(1); + assertThat(result.getScope()).isEqualTo("DIR"); + assertThat(result.getQualifier()).isEqualTo("PAC"); + assertThat(result.getVersion()).isEqualTo("2.1-SNAPSHOT"); + assertThat(result.getPath()).isEqualTo("1.2."); + + assertThat(result.getPeriodMode(1)).isEqualTo("days1"); + assertThat(result.getPeriodModeParameter(1)).isEqualTo("30"); + assertThat(result.getPeriodDate(1)).isEqualTo(DateUtils.parseDate("2011-09-24")); + assertThat(result.getPeriodMode(2)).isEqualTo("days2"); + assertThat(result.getPeriodModeParameter(2)).isEqualTo("31"); + assertThat(result.getPeriodDate(2)).isEqualTo(DateUtils.parseDate("2011-09-25")); + assertThat(result.getPeriodMode(3)).isEqualTo("days3"); + assertThat(result.getPeriodModeParameter(3)).isEqualTo("32"); + assertThat(result.getPeriodDate(3)).isEqualTo(DateUtils.parseDate("2011-09-26")); + assertThat(result.getPeriodMode(4)).isEqualTo("days4"); + assertThat(result.getPeriodModeParameter(4)).isEqualTo("33"); + assertThat(result.getPeriodDate(4)).isEqualTo(DateUtils.parseDate("2011-09-27")); + assertThat(result.getPeriodMode(5)).isEqualTo("days5"); + assertThat(result.getPeriodModeParameter(5)).isEqualTo("34"); + assertThat(result.getPeriodDate(5)).isEqualTo(DateUtils.parseDate("2011-09-28")); + + assertThat(result.getCreatedAt()).isEqualTo(DateUtils.parseDate("2008-12-02")); + assertThat(result.getBuildDate()).isEqualTo(DateUtils.parseDate("2011-09-29")); + + assertThat(dao.getNullableByKey(session, 999L)).isNull(); + } + + @Test + public void insert() { + setupData("empty"); + + when(system2.now()).thenReturn(DateUtils.parseDate("2014-06-18").getTime()); + + SnapshotDto dto = new SnapshotDto() + .setResourceId(3L) + .setRootProjectId(1L) + .setParentId(2L) + .setRootId(1L) + .setStatus("P") + .setLast(true) + .setPurgeStatus(1) + .setDepth(1) + .setScope("DIR") + .setQualifier("PAC") + .setVersion("2.1-SNAPSHOT") + .setPath("1.2.") + .setPeriodMode(1, "days1") + .setPeriodMode(2, "days2") + .setPeriodMode(3, "days3") + .setPeriodMode(4, "days4") + .setPeriodMode(5, "days5") + .setPeriodParam(1, "30") + .setPeriodParam(2, "31") + .setPeriodParam(3, "32") + .setPeriodParam(4, "33") + .setPeriodParam(5, "34") + .setPeriodDate(1, DateUtils.parseDate("2011-09-24")) + .setPeriodDate(2, DateUtils.parseDate("2011-09-25")) + .setPeriodDate(3, DateUtils.parseDate("2011-09-26")) + .setPeriodDate(4, DateUtils.parseDate("2011-09-27")) + .setPeriodDate(5, DateUtils.parseDate("2011-09-28")) + .setBuildDate(DateUtils.parseDate("2011-09-29")); + + dao.insert(session, dto); + session.commit(); + + assertThat(dto.getId()).isNotNull(); + checkTables("insert", "snapshots"); + } + +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java index d69f1b5b542..5de5a0bac76 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java @@ -41,6 +41,7 @@ import org.sonar.api.web.NavigationSection; import org.sonar.api.web.Page; import org.sonar.api.web.UserRole; import org.sonar.core.component.ComponentDto; +import org.sonar.core.component.SnapshotDto; import org.sonar.core.measure.db.MeasureDto; import org.sonar.core.measure.db.MeasureKey; import org.sonar.core.persistence.DbSession; @@ -48,7 +49,6 @@ import org.sonar.core.properties.PropertiesDao; import org.sonar.core.properties.PropertyDto; import org.sonar.core.properties.PropertyQuery; import org.sonar.core.resource.ResourceDao; -import org.sonar.core.resource.SnapshotDto; import org.sonar.core.rule.RuleDto; import org.sonar.core.timemachine.Periods; import org.sonar.server.component.db.ComponentDao; diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssuesWsMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssuesWsMediumTest.java index eb3747a7bfe..8d4da38f57e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssuesWsMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssuesWsMediumTest.java @@ -28,12 +28,14 @@ import org.sonar.api.server.ws.WebService; import org.sonar.api.utils.DateUtils; import org.sonar.api.web.UserRole; import org.sonar.core.component.ComponentDto; +import org.sonar.core.component.SnapshotDto; import org.sonar.core.issue.db.IssueDto; import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.permission.PermissionFacade; import org.sonar.core.persistence.DbSession; import org.sonar.core.rule.RuleDto; import org.sonar.server.component.db.ComponentDao; +import org.sonar.server.component.db.SnapshotDao; import org.sonar.server.db.DbClient; import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; @@ -118,6 +120,7 @@ public class IssuesWsMediumTest { .setKey("MyProject") .setProjectId(1L); tester.get(ComponentDao.class).insert(session, project); + tester.get(SnapshotDao.class).insert(session, new SnapshotDto().setResourceId(project.getId()).setLast(true)); // project can be seen by anyone tester.get(PermissionFacade.class).insertGroupPermission(project.getId(), DefaultGroups.ANYONE, UserRole.USER, session); @@ -128,6 +131,7 @@ public class IssuesWsMediumTest { .setKey("MyComponent") .setId(2L); tester.get(ComponentDao.class).insert(session, resource); + tester.get(SnapshotDao.class).insert(session, new SnapshotDto().setResourceId(resource.getId()).setLast(true)); IssueDto issue = new IssueDto() .setIssueCreationDate(DateUtils.parseDate("2014-09-04")) diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/MeasureFilterExecutorTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/MeasureFilterExecutorTest.java index 527b782b6ce..e404c0eec02 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/measure/MeasureFilterExecutorTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/MeasureFilterExecutorTest.java @@ -26,9 +26,9 @@ import org.sonar.api.measures.CoreMetrics; import org.sonar.api.measures.Metric; import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.System2; +import org.sonar.core.component.SnapshotDto; import org.sonar.core.persistence.TestDatabase; import org.sonar.core.resource.ResourceDao; -import org.sonar.core.resource.SnapshotDto; import java.sql.SQLException; import java.util.Arrays; diff --git a/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/empty.xml b/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/empty.xml new file mode 100644 index 00000000000..871dedcb5e9 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/empty.xml @@ -0,0 +1,3 @@ + + + diff --git a/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/insert-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/insert-result.xml new file mode 100644 index 00000000000..2dfd09d5b68 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/insert-result.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/shared.xml b/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/shared.xml new file mode 100644 index 00000000000..b651e75ffc2 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/component/db/SnapshotDaoTest/shared.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/sonar-core/src/main/java/org/sonar/core/resource/SnapshotDto.java b/sonar-core/src/main/java/org/sonar/core/component/SnapshotDto.java similarity index 94% rename from sonar-core/src/main/java/org/sonar/core/resource/SnapshotDto.java rename to sonar-core/src/main/java/org/sonar/core/component/SnapshotDto.java index 54e18053919..f38aba5cdc4 100644 --- a/sonar-core/src/main/java/org/sonar/core/resource/SnapshotDto.java +++ b/sonar-core/src/main/java/org/sonar/core/component/SnapshotDto.java @@ -17,11 +17,18 @@ * 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.resource; +package org.sonar.core.component; + +import org.sonar.core.persistence.Dto; import java.util.Date; -public final class SnapshotDto { +public final class SnapshotDto extends Dto { + + /** + * This status is set on the snapshot at the beginning of the batch + */ + public static final String STATUS_UNPROCESSED = "U"; private static final String INDEX_SHOULD_BE_IN_RANGE_FROM_1_TO_5 = "Index should be in range from 1 to 5"; @@ -30,10 +37,9 @@ public final class SnapshotDto { private Long rootId; private Long rootProjectId; - private Date date; private Date buildDate; private Long resourceId; - private String status; + private String status = STATUS_UNPROCESSED; private Integer purgeStatus; private Boolean last; private String scope; @@ -87,15 +93,6 @@ public final class SnapshotDto { return this; } - public Date getDate() { - return date; - } - - public SnapshotDto setDate(Date date) { - this.date = date; - return this; - } - public Date getBuildDate() { return buildDate; } @@ -315,4 +312,8 @@ public final class SnapshotDto { } } + @Override + public Long getKey() { + return id; + } } diff --git a/sonar-core/src/main/java/org/sonar/core/component/db/SnapshotMapper.java b/sonar-core/src/main/java/org/sonar/core/component/db/SnapshotMapper.java new file mode 100644 index 00000000000..c33c6711a68 --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/core/component/db/SnapshotMapper.java @@ -0,0 +1,33 @@ +/* + * 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.component.db; + +import org.sonar.core.component.SnapshotDto; + +import javax.annotation.CheckForNull; + +public interface SnapshotMapper { + + @CheckForNull + SnapshotDto selectByKey(long id); + + void insert(SnapshotDto rule); +} 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 fb13bb56181..768edb20cb6 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 @@ -36,7 +36,9 @@ import org.sonar.core.activity.db.ActivityMapper; import org.sonar.core.cluster.WorkQueue; import org.sonar.core.component.AuthorizedComponentDto; import org.sonar.core.component.ComponentDto; +import org.sonar.core.component.SnapshotDto; import org.sonar.core.component.db.ComponentMapper; +import org.sonar.core.component.db.SnapshotMapper; import org.sonar.core.config.Logback; import org.sonar.core.dashboard.*; import org.sonar.core.dependency.DependencyDto; @@ -171,7 +173,8 @@ public class MyBatis implements BatchComponent, ServerComponent { org.sonar.api.database.model.MeasureMapper.class, SnapshotDataMapper.class, SnapshotSourceMapper.class, ActionPlanMapper.class, ActionPlanStatsMapper.class, NotificationQueueMapper.class, CharacteristicMapper.class, GroupMembershipMapper.class, QualityProfileMapper.class, ActiveRuleMapper.class, - MeasureMapper.class, MetricMapper.class, QualityGateMapper.class, QualityGateConditionMapper.class, ComponentMapper.class, ProjectQgateAssociationMapper.class + MeasureMapper.class, MetricMapper.class, QualityGateMapper.class, QualityGateConditionMapper.class, ComponentMapper.class, SnapshotMapper.class, + ProjectQgateAssociationMapper.class }; loadMappers(conf, mappers); configureLogback(mappers); diff --git a/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java b/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java index acb2746d0cc..41ae718bf99 100644 --- a/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java +++ b/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java @@ -26,6 +26,7 @@ import org.apache.ibatis.session.SqlSession; import org.sonar.api.component.Component; import org.sonar.api.utils.System2; import org.sonar.core.component.ComponentDto; +import org.sonar.core.component.SnapshotDto; import org.sonar.core.persistence.DaoComponent; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; diff --git a/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java b/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java index 259a1228b67..77fad8186ce 100644 --- a/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java @@ -22,6 +22,7 @@ package org.sonar.core.resource; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.session.ResultHandler; import org.sonar.core.component.ComponentDto; +import org.sonar.core.component.SnapshotDto; import javax.annotation.Nullable; diff --git a/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml b/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml index 6f590c5e818..24dbeb59aee 100644 --- a/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml @@ -25,7 +25,7 @@ + SELECT + FROM snapshots s + + AND s.id=#{key} + + + + + (parent_snapshot_id, root_snapshot_id, root_project_id, project_id, created_at, build_date, status, purge_status, islast, scope, qualifier, version, path, depth, + period1_mode, period2_mode, period3_mode, period4_mode, period5_mode, + period1_param, period2_param, period3_param, period4_param, period5_param, + period1_date, period2_date, period3_date, period4_date, period5_date) + + + + insert into snapshots + values (#{parentId}, #{rootId}, #{rootProjectId}, #{resourceId}, #{createdAt}, #{buildDate}, #{status}, #{purgeStatus}, #{last}, #{scope}, #{qualifier}, #{version}, #{path}, #{depth}, + #{period1Mode}, #{period2Mode}, #{period3Mode}, #{period4Mode}, #{period5Mode}, + #{period1Param}, #{period2Param}, #{period3Param}, #{period4Param}, #{period5Param}, + #{period1Date}, #{period2Date}, #{period3Date}, #{period4Date}, #{period5Date}) + + + + diff --git a/sonar-core/src/main/resources/org/sonar/core/resource/ResourceMapper.xml b/sonar-core/src/main/resources/org/sonar/core/resource/ResourceMapper.xml index d7cf97970f6..5cbeb044d73 100644 --- a/sonar-core/src/main/resources/org/sonar/core/resource/ResourceMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/resource/ResourceMapper.xml @@ -37,7 +37,7 @@ - + diff --git a/sonar-core/src/test/java/org/sonar/core/resource/SnapshotDtoTest.java b/sonar-core/src/test/java/org/sonar/core/component/SnapshotDtoTest.java similarity index 95% rename from sonar-core/src/test/java/org/sonar/core/resource/SnapshotDtoTest.java rename to sonar-core/src/test/java/org/sonar/core/component/SnapshotDtoTest.java index 94ce88008c7..f25ab5c4e96 100644 --- a/sonar-core/src/test/java/org/sonar/core/resource/SnapshotDtoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/component/SnapshotDtoTest.java @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.core.resource; +package org.sonar.core.component; import org.junit.Test; import org.sonar.api.utils.DateUtils; @@ -34,7 +34,6 @@ public class SnapshotDtoTest { .setParentId(2L) .setRootId(3L) .setRootProjectId(20L) - .setDate(DateUtils.parseDate("2014-07-01")) .setBuildDate(DateUtils.parseDate("2014-07-02")) .setResourceId(21L) .setLast(true) @@ -63,7 +62,6 @@ public class SnapshotDtoTest { assertThat(snapshotDto.getParentId()).isEqualTo(2L); assertThat(snapshotDto.getRootId()).isEqualTo(3L); assertThat(snapshotDto.getRootProjectId()).isEqualTo(20L); - assertThat(snapshotDto.getDate()).isEqualTo(DateUtils.parseDate("2014-07-01")); assertThat(snapshotDto.getBuildDate()).isEqualTo(DateUtils.parseDate("2014-07-02")); assertThat(snapshotDto.getResourceId()).isEqualTo(21L); assertThat(snapshotDto.getLast()).isTrue(); diff --git a/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java b/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java index fa200c46851..c287b65acf5 100644 --- a/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java @@ -31,6 +31,7 @@ import org.sonar.api.resources.Scopes; import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.System2; import org.sonar.core.component.ComponentDto; +import org.sonar.core.component.SnapshotDto; import org.sonar.core.persistence.AbstractDaoTestCase; import org.sonar.core.persistence.DbSession; -- 2.39.5