aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacek <jacek.poreda@sonarsource.com>2019-08-06 13:41:48 +0200
committerSonarTech <sonartech@sonarsource.com>2019-09-24 20:21:12 +0200
commit3ca59798cc4cd29d230b6cf222ed22b8ff8635f4 (patch)
tree476e2e1cebcbc464fa00c4d6436b9be6ff0d14f4
parentba41dbfdf353e6b1d50a9b2af75d57faa65eeb95 (diff)
downloadsonarqube-3ca59798cc4cd29d230b6cf222ed22b8ff8635f4.tar.gz
sonarqube-3ca59798cc4cd29d230b6cf222ed22b8ff8635f4.zip
SONAR-12364 - migrate project analysis delete action to new concept
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodDao.java5
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodMapper.java2
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/newcodeperiod/NewCodePeriodMapper.xml9
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/newcodeperiod/NewCodePeriodDaoTest.java20
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java12
5 files changed, 40 insertions, 8 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodDao.java
index c4c535ed2e1..bf5408c44c7 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodDao.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodDao.java
@@ -85,6 +85,11 @@ public class NewCodePeriodDao implements Dao {
return Optional.ofNullable(mapper(dbSession).selectByBranch(projectUuid, branchUuid));
}
+ public boolean existsByProjectAnalysisUuid(DbSession dbSession, String projectAnalysisUuid) {
+ requireNonNull(projectAnalysisUuid, "Project analysis uuid must be specified.");
+ return mapper(dbSession).countByProjectAnalysis(projectAnalysisUuid) > 0;
+ }
+
public void deleteByProjectUuidAndBranchUuid(DbSession dbSession, String projectUuid, String branchUuid) {
requireNonNull(projectUuid, "Project uuid must be specified.");
mapper(dbSession).deleteByProjectAndBranch(projectUuid, branchUuid);
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodMapper.java
index c02e89ad973..cd800842cf3 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodMapper.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodMapper.java
@@ -37,4 +37,6 @@ public interface NewCodePeriodMapper {
void deleteByProjectAndBranch(@Param("projectUuid") String projectUuid, @Param("branchUuid") String branchUuid);
NewCodePeriodDto selectByBranch(@Param("projectUuid") String projectUuid, @Param("branchUuid") String branchUuid);
+
+ long countByProjectAnalysis(String projectAnalysisUuid);
}
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/newcodeperiod/NewCodePeriodMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/newcodeperiod/NewCodePeriodMapper.xml
index 74de5d5e48e..fbd85860878 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/newcodeperiod/NewCodePeriodMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/newcodeperiod/NewCodePeriodMapper.xml
@@ -80,4 +80,13 @@
AND branch_uuid=#{branchUuid, jdbcType=VARCHAR}
</update>
+ <select id="countByProjectAnalysis" parameterType="map" resultType="java.lang.Long">
+ SELECT
+ count(1)
+ FROM new_code_periods ncp
+ WHERE
+ ncp.type='SPECIFIC_ANALYSIS'
+ AND ncp.value=#{projectAnalysisUuid, jdbcType=VARCHAR}
+ </select>
+
</mapper>
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/newcodeperiod/NewCodePeriodDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/newcodeperiod/NewCodePeriodDaoTest.java
index cfe74ad7093..4b238b9eef9 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/newcodeperiod/NewCodePeriodDaoTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/newcodeperiod/NewCodePeriodDaoTest.java
@@ -239,6 +239,26 @@ public class NewCodePeriodDaoTest {
}
@Test
+ public void exists_by_project_analysis_is_true() {
+ when(uuidFactory.create()).thenReturn(NEW_CODE_PERIOD_UUID);
+
+ underTest.insert(dbSession, new NewCodePeriodDto()
+ .setProjectUuid("proj-uuid")
+ .setBranchUuid("branch-uuid")
+ .setType(NewCodePeriodType.SPECIFIC_ANALYSIS)
+ .setValue("analysis-uuid"));
+
+ boolean exists = underTest.existsByProjectAnalysisUuid(dbSession, "analysis-uuid");
+ assertThat(exists).isTrue();
+ }
+
+ @Test
+ public void exists_by_project_analysis_is_false() {
+ boolean exists = underTest.existsByProjectAnalysisUuid(dbSession, "analysis-uuid");
+ assertThat(exists).isFalse();
+ }
+
+ @Test
public void fail_select_by_project_and_branch_uuids_if_project_uuid_not_provided() {
expectedException.expect(NullPointerException.class);
expectedException.expectMessage("Project uuid must be specified.");
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java
index f1940d7c49a..fec3383bfd6 100644
--- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java
+++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java
@@ -86,14 +86,10 @@ public class DeleteAction implements ProjectAnalysesWsAction {
}
private void checkNotBaseline(DbSession dbSession, SnapshotDto analysis) {
- dbClient.branchDao().selectByUuid(dbSession, analysis.getComponentUuid())
- .ifPresent(branchDto -> {
- dbClient.newCodePeriodDao().selectByBranch(dbSession, branchDto.getProjectUuid(), branchDto.getUuid())
- .ifPresent(newCodePeriodDto ->
- checkArgument(!newCodePeriodDto.getValue().equals(analysis.getUuid()),
- "The analysis '%s' can not be deleted because it is set as a manual new code period baseline", analysis.getUuid())
- );
- });
+ boolean isSetAsBaseline = dbClient.newCodePeriodDao().existsByProjectAnalysisUuid(dbSession, analysis.getUuid());
+ checkArgument(!isSetAsBaseline,
+ "The analysis '%s' can not be deleted because it is set as a manual new code period baseline", analysis.getUuid());
+
}
private static NotFoundException analysisNotFoundException(String analysis) {