]> source.dussan.org Git - sonarqube.git/blob
647322c36a1a2d4f4c518161ab52e2223f01f35a
[sonarqube.git] /
1 /*
2  * SonarQube
3  * Copyright (C) 2009-2024 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.ce.task.projectanalysis.analysis;
21
22 import java.util.Date;
23 import java.util.Map;
24 import java.util.Optional;
25 import javax.annotation.CheckForNull;
26 import javax.annotation.Nullable;
27 import org.junit.jupiter.api.extension.AfterEachCallback;
28 import org.junit.jupiter.api.extension.ExtensionContext;
29 import org.junit.rules.ExternalResource;
30 import org.sonar.ce.task.util.InitializedProperty;
31 import org.sonar.db.component.BranchType;
32 import org.sonar.server.project.Project;
33 import org.sonar.server.qualityprofile.QualityProfile;
34
35 import static com.google.common.base.Preconditions.checkNotNull;
36 import static com.google.common.base.Preconditions.checkState;
37 import static org.apache.commons.lang.StringUtils.defaultIfBlank;
38
39 public class AnalysisMetadataHolderRule extends ExternalResource implements MutableAnalysisMetadataHolder, AfterEachCallback {
40
41   private final InitializedProperty<String> uuid = new InitializedProperty<>();
42   private final InitializedProperty<Long> analysisDate = new InitializedProperty<>();
43   private final InitializedProperty<Analysis> baseAnalysis = new InitializedProperty<>();
44   private final InitializedProperty<Boolean> crossProjectDuplicationEnabled = new InitializedProperty<>();
45   private final InitializedProperty<Branch> branch = new InitializedProperty<>();
46   private final InitializedProperty<String> pullRequestId = new InitializedProperty<>();
47   private final InitializedProperty<Project> project = new InitializedProperty<>();
48   private final InitializedProperty<Integer> rootComponentRef = new InitializedProperty<>();
49   private final InitializedProperty<Map<String, QualityProfile>> qProfilesPerLanguage = new InitializedProperty<>();
50   private final InitializedProperty<Map<String, ScannerPlugin>> pluginsByKey = new InitializedProperty<>();
51   private final InitializedProperty<String> scmRevision = new InitializedProperty<>();
52   private final InitializedProperty<String> newCodeReferenceBranch = new InitializedProperty<>();
53
54   @Override
55   public AnalysisMetadataHolderRule setUuid(String s) {
56     checkNotNull(s, "UUID must not be null");
57     this.uuid.setProperty(s);
58     return this;
59   }
60
61   @Override
62   public String getUuid() {
63     checkState(uuid.isInitialized(), "Analysis UUID has not been set");
64     return this.uuid.getProperty();
65   }
66
67   public AnalysisMetadataHolderRule setAnalysisDate(Date date) {
68     checkNotNull(date, "Date must not be null");
69     this.analysisDate.setProperty(date.getTime());
70     return this;
71   }
72
73   @Override
74   public AnalysisMetadataHolderRule setAnalysisDate(long date) {
75     this.analysisDate.setProperty(date);
76     return this;
77   }
78
79   @Override
80   public long getAnalysisDate() {
81     checkState(analysisDate.isInitialized(), "Analysis date has not been set");
82     return this.analysisDate.getProperty();
83   }
84
85   @Override
86   public boolean hasAnalysisDateBeenSet() {
87     return analysisDate.isInitialized();
88   }
89
90   @Override
91   public boolean isFirstAnalysis() {
92     return getBaseAnalysis() == null;
93   }
94
95   @Override
96   public AnalysisMetadataHolderRule setBaseAnalysis(@Nullable Analysis baseAnalysis) {
97     this.baseAnalysis.setProperty(baseAnalysis);
98     return this;
99   }
100
101   @Override
102   @CheckForNull
103   public Analysis getBaseAnalysis() {
104     checkState(baseAnalysis.isInitialized(), "Base analysis has not been set");
105     return baseAnalysis.getProperty();
106   }
107
108   @Override
109   public AnalysisMetadataHolderRule setCrossProjectDuplicationEnabled(boolean isCrossProjectDuplicationEnabled) {
110     this.crossProjectDuplicationEnabled.setProperty(isCrossProjectDuplicationEnabled);
111     return this;
112   }
113
114   @Override
115   public boolean isCrossProjectDuplicationEnabled() {
116     checkState(crossProjectDuplicationEnabled.isInitialized(), "Cross project duplication flag has not been set");
117     return crossProjectDuplicationEnabled.getProperty();
118   }
119
120   @Override
121   public AnalysisMetadataHolderRule setBranch(Branch branch) {
122     this.branch.setProperty(branch);
123     return this;
124   }
125
126   @Override
127   public Branch getBranch() {
128     checkState(branch.isInitialized(), "Branch has not been set");
129     return branch.getProperty();
130   }
131
132   @Override
133   public MutableAnalysisMetadataHolder setPullRequestKey(String pullRequestKey) {
134     this.pullRequestId.setProperty(pullRequestKey);
135     return this;
136   }
137
138   @Override
139   public String getPullRequestKey() {
140     checkState(pullRequestId.isInitialized(), "Pull request id has not been set");
141     return pullRequestId.getProperty();
142   }
143
144   @Override
145   public AnalysisMetadataHolderRule setProject(Project p) {
146     this.project.setProperty(p);
147     return this;
148   }
149
150   @Override
151   public Project getProject() {
152     checkState(project.isInitialized(), "Project has not been set");
153     return project.getProperty();
154   }
155
156   @Override
157   public AnalysisMetadataHolderRule setRootComponentRef(int rootComponentRef) {
158     this.rootComponentRef.setProperty(rootComponentRef);
159     return this;
160   }
161
162   @Override
163   public int getRootComponentRef() {
164     checkState(rootComponentRef.isInitialized(), "Root component ref has not been set");
165     return rootComponentRef.getProperty();
166   }
167
168   @Override
169   public AnalysisMetadataHolderRule setQProfilesByLanguage(Map<String, QualityProfile> qProfilesPerLanguage) {
170     this.qProfilesPerLanguage.setProperty(qProfilesPerLanguage);
171     return this;
172   }
173
174   @Override
175   public Map<String, QualityProfile> getQProfilesByLanguage() {
176     checkState(qProfilesPerLanguage.isInitialized(), "QProfile per language has not been set");
177     return qProfilesPerLanguage.getProperty();
178   }
179
180   @Override
181   public AnalysisMetadataHolderRule setScannerPluginsByKey(Map<String, ScannerPlugin> plugins) {
182     this.pluginsByKey.setProperty(plugins);
183     return this;
184   }
185
186   @Override
187   public Map<String, ScannerPlugin> getScannerPluginsByKey() {
188     checkState(pluginsByKey.isInitialized(), "Plugins per key has not been set");
189     return pluginsByKey.getProperty();
190   }
191
192   @Override
193   public MutableAnalysisMetadataHolder setScmRevision(@Nullable String s) {
194     checkState(!this.scmRevision.isInitialized(), "ScmRevisionId has already been set");
195     this.scmRevision.setProperty(defaultIfBlank(s, null));
196     return this;
197   }
198
199   @Override
200   public MutableAnalysisMetadataHolder setNewCodeReferenceBranch(String newCodeReferenceBranch) {
201     checkState(!this.newCodeReferenceBranch.isInitialized(), "ScmRevisionId has already been set");
202     this.newCodeReferenceBranch.setProperty(defaultIfBlank(newCodeReferenceBranch, null));
203     return this;
204   }
205
206   @Override
207   public Optional<String> getScmRevision() {
208     if (!scmRevision.isInitialized()) {
209       return Optional.empty();
210     }
211     return Optional.ofNullable(scmRevision.getProperty());
212   }
213
214   @Override
215   public Optional<String> getNewCodeReferenceBranch() {
216     if (!newCodeReferenceBranch.isInitialized()) {
217       return Optional.empty();
218     }
219     return Optional.ofNullable(newCodeReferenceBranch.getProperty());
220   }
221
222   @Override
223   public boolean isBranch() {
224     Branch property = this.branch.getProperty();
225     return property != null && property.getType() == BranchType.BRANCH;
226   }
227
228   @Override
229   public boolean isPullRequest() {
230     Branch property = this.branch.getProperty();
231     return property != null && property.getType() == BranchType.PULL_REQUEST;
232   }
233
234   @Override
235   public void afterEach(ExtensionContext context) {
236     after();
237   }
238 }