You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ProjectDao.java 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2023 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.db.project;
  21. import java.util.Collection;
  22. import java.util.List;
  23. import java.util.Optional;
  24. import java.util.Set;
  25. import javax.annotation.Nullable;
  26. import org.sonar.api.utils.System2;
  27. import org.sonar.db.Dao;
  28. import org.sonar.db.DbSession;
  29. import org.sonar.db.Pagination;
  30. import org.sonar.db.audit.AuditPersister;
  31. import org.sonar.db.audit.model.ComponentNewValue;
  32. import static java.util.Collections.emptyList;
  33. import static org.sonar.db.DatabaseUtils.executeLargeInputs;
  34. public class ProjectDao implements Dao {
  35. private final System2 system2;
  36. private final AuditPersister auditPersister;
  37. public ProjectDao(System2 system2, AuditPersister auditPersister) {
  38. this.system2 = system2;
  39. this.auditPersister = auditPersister;
  40. }
  41. public void insert(DbSession session, ProjectDto project) {
  42. this.insert(session, project, false);
  43. }
  44. public void insert(DbSession session, ProjectDto project, boolean track) {
  45. if (track) {
  46. auditPersister.addComponent(session, new ComponentNewValue(project));
  47. }
  48. mapper(session).insert(project);
  49. }
  50. public Optional<ProjectDto> selectProjectByKey(DbSession session, String key) {
  51. return Optional.ofNullable(mapper(session).selectProjectByKey(key));
  52. }
  53. public Optional<ProjectDto> selectApplicationByKey(DbSession session, String key) {
  54. return Optional.ofNullable(mapper(session).selectApplicationByKey(key));
  55. }
  56. public Optional<ProjectDto> selectProjectOrAppByKey(DbSession session, String key) {
  57. return Optional.ofNullable(mapper(session).selectProjectOrAppByKey(key));
  58. }
  59. public List<ProjectDto> selectAllApplications(DbSession session) {
  60. return mapper(session).selectAllApplications();
  61. }
  62. public List<ProjectDto> selectProjectsByKeys(DbSession session, Collection<String> keys) {
  63. if (keys.isEmpty()) {
  64. return emptyList();
  65. }
  66. return mapper(session).selectProjectsByKeys(keys);
  67. }
  68. public List<ProjectDto> selectApplicationsByKeys(DbSession session, Set<String> keys) {
  69. if (keys.isEmpty()) {
  70. return emptyList();
  71. }
  72. return executeLargeInputs(keys, partition -> mapper(session).selectApplicationsByKeys(partition));
  73. }
  74. public Optional<ProjectDto> selectByBranchUuid(DbSession dbSession, String branchUuid) {
  75. return Optional.ofNullable(mapper(dbSession).selectByBranchUuid(branchUuid));
  76. }
  77. public List<ProjectDto> selectProjects(DbSession session) {
  78. return mapper(session).selectProjects();
  79. }
  80. public Optional<ProjectDto> selectByUuid(DbSession session, String uuid) {
  81. return Optional.ofNullable(mapper(session).selectByUuid(uuid));
  82. }
  83. public List<ProjectDto> selectAll(DbSession session) {
  84. return mapper(session).selectAll();
  85. }
  86. public List<ProjectDto> selectByUuids(DbSession session, Set<String> uuids) {
  87. if (uuids.isEmpty()) {
  88. return emptyList();
  89. }
  90. return executeLargeInputs(uuids, partition -> mapper(session).selectByUuids(partition));
  91. }
  92. public List<ProjectDto> selectByUuids(DbSession session, Set<String> uuids, Pagination pagination) {
  93. if (uuids.isEmpty()) {
  94. return emptyList();
  95. }
  96. return mapper(session).selectByUuidsWithPagination(uuids, pagination);
  97. }
  98. public void updateVisibility(DbSession session, String uuid, boolean isPrivate) {
  99. mapper(session).updateVisibility(uuid, isPrivate, system2.now());
  100. }
  101. public void updateTags(DbSession session, ProjectDto project) {
  102. mapper(session).updateTags(project);
  103. }
  104. public void update(DbSession session, ProjectDto project) {
  105. auditPersister.updateComponent(session, new ComponentNewValue(project));
  106. mapper(session).update(project);
  107. }
  108. private static ProjectMapper mapper(DbSession session) {
  109. return session.getMapper(ProjectMapper.class);
  110. }
  111. public List<String> selectAllProjectUuids(DbSession session) {
  112. return mapper(session).selectAllProjectUuids();
  113. }
  114. public Set<String> selectProjectUuidsAssociatedToDefaultQualityProfileByLanguage(DbSession session, String language) {
  115. Set<String> languageFilters = Set.of(language + "=%", "%;" + language + "=%");
  116. return mapper(session).selectProjectUuidsAssociatedToDefaultQualityProfileByLanguage(languageFilters);
  117. }
  118. public void updateNcloc(DbSession dbSession, String projectUuid, long ncloc) {
  119. mapper(dbSession).updateNcloc(projectUuid, ncloc);
  120. }
  121. public long getNclocSum(DbSession dbSession) {
  122. return getNclocSum(dbSession, null);
  123. }
  124. public long getNclocSum(DbSession dbSession, @Nullable String projectUuidToExclude) {
  125. return Optional.ofNullable(mapper(dbSession).getNclocSum(projectUuidToExclude)).orElse(0L);
  126. }
  127. public int countIndexedProjects(DbSession session) {
  128. return mapper(session).countIndexedProjects();
  129. }
  130. public int countProjects(DbSession session) {
  131. return mapper(session).countProjects();
  132. }
  133. }