]> source.dussan.org Git - sonarqube.git/blob
5f7dfa12008976349c183787645750f5073375dd
[sonarqube.git] /
1 /*
2  * SonarQube
3  * Copyright (C) 2009-2019 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.rules.ExternalResource;
28 import org.sonar.ce.task.util.InitializedProperty;
29 import org.sonar.db.component.BranchType;
30 import org.sonar.db.organization.OrganizationDto;
31 import org.sonar.server.project.Project;
32 import org.sonar.server.qualityprofile.QualityProfile;
33
34 import static com.google.common.base.Preconditions.checkNotNull;
35 import static com.google.common.base.Preconditions.checkState;
36 import static java.util.Objects.requireNonNull;
37
38 public class AnalysisMetadataHolderRule extends ExternalResource implements MutableAnalysisMetadataHolder {
39
40   private final InitializedProperty<Boolean> organizationsEnabled = new InitializedProperty<>();
41
42   private final InitializedProperty<Organization> organization = new InitializedProperty<>();
43
44   private final InitializedProperty<String> uuid = new InitializedProperty<>();
45
46   private final InitializedProperty<Long> analysisDate = new InitializedProperty<>();
47
48   private final InitializedProperty<Analysis> baseAnalysis = new InitializedProperty<>();
49
50   private final InitializedProperty<Boolean> crossProjectDuplicationEnabled = new InitializedProperty<>();
51
52   private final InitializedProperty<Branch> branch = new InitializedProperty<>();
53
54   private final InitializedProperty<String> pullRequestId = new InitializedProperty<>();
55
56   private final InitializedProperty<Project> project = new InitializedProperty<>();
57
58   private final InitializedProperty<Integer> rootComponentRef = new InitializedProperty<>();
59
60   private final InitializedProperty<Map<String, QualityProfile>> qProfilesPerLanguage = new InitializedProperty<>();
61
62   private final InitializedProperty<Map<String, ScannerPlugin>> pluginsByKey = new InitializedProperty<>();
63
64   private final InitializedProperty<String> scmRevisionId = new InitializedProperty<>();
65
66   @Override
67   public AnalysisMetadataHolderRule setOrganizationsEnabled(boolean isOrganizationsEnabled) {
68     this.organizationsEnabled.setProperty(isOrganizationsEnabled);
69     return this;
70   }
71
72   @Override
73   public boolean isOrganizationsEnabled() {
74     checkState(organizationsEnabled.isInitialized(), "Organizations enabled flag has not been set");
75     return organizationsEnabled.getProperty();
76   }
77
78   @Override
79   public AnalysisMetadataHolderRule setOrganization(Organization organization) {
80     requireNonNull(organization, "organization can't be null");
81     this.organization.setProperty(organization);
82     return this;
83   }
84
85   public AnalysisMetadataHolderRule setOrganizationUuid(String uuid, String defaultQualityGateUuid) {
86     requireNonNull(uuid, "organization uuid can't be null");
87     this.organization
88       .setProperty(Organization.from(new OrganizationDto().setUuid(uuid).setKey("key_" + uuid).setName("name_" + uuid).setDefaultQualityGateUuid(defaultQualityGateUuid)));
89     return this;
90   }
91
92   @Override
93   public Organization getOrganization() {
94     checkState(organization.isInitialized(), "Organization has not been set");
95     return this.organization.getProperty();
96   }
97
98   @Override
99   public AnalysisMetadataHolderRule setUuid(String s) {
100     checkNotNull(s, "UUID must not be null");
101     this.uuid.setProperty(s);
102     return this;
103   }
104
105   @Override
106   public String getUuid() {
107     checkState(uuid.isInitialized(), "Analysis UUID has not been set");
108     return this.uuid.getProperty();
109   }
110
111   public AnalysisMetadataHolderRule setAnalysisDate(Date date) {
112     checkNotNull(date, "Date must not be null");
113     this.analysisDate.setProperty(date.getTime());
114     return this;
115   }
116
117   @Override
118   public AnalysisMetadataHolderRule setAnalysisDate(long date) {
119     checkNotNull(date, "Date must not be null");
120     this.analysisDate.setProperty(date);
121     return this;
122   }
123
124   @Override
125   public long getAnalysisDate() {
126     checkState(analysisDate.isInitialized(), "Analysis date has not been set");
127     return this.analysisDate.getProperty();
128   }
129
130   @Override
131   public boolean hasAnalysisDateBeenSet() {
132     return analysisDate.isInitialized();
133   }
134
135   @Override
136   public boolean isFirstAnalysis() {
137     return getBaseAnalysis() == null;
138   }
139
140   @Override
141   public AnalysisMetadataHolderRule setBaseAnalysis(@Nullable Analysis baseAnalysis) {
142     this.baseAnalysis.setProperty(baseAnalysis);
143     return this;
144   }
145
146   @Override
147   @CheckForNull
148   public Analysis getBaseAnalysis() {
149     checkState(baseAnalysis.isInitialized(), "Base analysis has not been set");
150     return baseAnalysis.getProperty();
151   }
152
153   @Override
154   public AnalysisMetadataHolderRule setCrossProjectDuplicationEnabled(boolean isCrossProjectDuplicationEnabled) {
155     this.crossProjectDuplicationEnabled.setProperty(isCrossProjectDuplicationEnabled);
156     return this;
157   }
158
159   @Override
160   public boolean isCrossProjectDuplicationEnabled() {
161     checkState(crossProjectDuplicationEnabled.isInitialized(), "Cross project duplication flag has not been set");
162     return crossProjectDuplicationEnabled.getProperty();
163   }
164
165   @Override
166   public AnalysisMetadataHolderRule setBranch(Branch branch) {
167     this.branch.setProperty(branch);
168     return this;
169   }
170
171   @Override
172   public Branch getBranch() {
173     checkState(branch.isInitialized(), "Branch has not been set");
174     return branch.getProperty();
175   }
176
177   @Override
178   public MutableAnalysisMetadataHolder setPullRequestKey(String pullRequestKey) {
179     this.pullRequestId.setProperty(pullRequestKey);
180     return this;
181   }
182
183   @Override
184   public String getPullRequestKey() {
185     checkState(pullRequestId.isInitialized(), "Pull request id has not been set");
186     return pullRequestId.getProperty();
187   }
188
189   @Override
190   public AnalysisMetadataHolderRule setProject(Project p) {
191     this.project.setProperty(p);
192     return this;
193   }
194
195   @Override
196   public Project getProject() {
197     checkState(project.isInitialized(), "Project has not been set");
198     return project.getProperty();
199   }
200
201   @Override
202   public AnalysisMetadataHolderRule setRootComponentRef(int rootComponentRef) {
203     this.rootComponentRef.setProperty(rootComponentRef);
204     return this;
205   }
206
207   @Override
208   public int getRootComponentRef() {
209     checkState(rootComponentRef.isInitialized(), "Root component ref has not been set");
210     return rootComponentRef.getProperty();
211   }
212
213   @Override
214   public AnalysisMetadataHolderRule setQProfilesByLanguage(Map<String, QualityProfile> qProfilesPerLanguage) {
215     this.qProfilesPerLanguage.setProperty(qProfilesPerLanguage);
216     return this;
217   }
218
219   @Override
220   public Map<String, QualityProfile> getQProfilesByLanguage() {
221     checkState(qProfilesPerLanguage.isInitialized(), "QProfile per language has not been set");
222     return qProfilesPerLanguage.getProperty();
223   }
224
225   @Override
226   public AnalysisMetadataHolderRule setScannerPluginsByKey(Map<String, ScannerPlugin> plugins) {
227     this.pluginsByKey.setProperty(plugins);
228     return this;
229   }
230
231   @Override
232   public Map<String, ScannerPlugin> getScannerPluginsByKey() {
233     checkState(pluginsByKey.isInitialized(), "Plugins per key has not been set");
234     return pluginsByKey.getProperty();
235   }
236
237   @Override
238   public MutableAnalysisMetadataHolder setScmRevisionId(String scmRevisionId) {
239     checkState(!this.scmRevisionId.isInitialized(), "ScmRevisionId has already been set");
240     this.scmRevisionId.setProperty(scmRevisionId);
241     return this;
242   }
243
244   @Override
245   public Optional<String> getScmRevisionId() {
246     if (!scmRevisionId.isInitialized()) {
247       return Optional.empty();
248     }
249     return Optional.of(scmRevisionId.getProperty());
250   }
251
252   @Override
253   public boolean isShortLivingBranch() {
254     Branch property = this.branch.getProperty();
255     return property != null && property.getType() == BranchType.SHORT;
256   }
257
258   @Override
259   public boolean isLongLivingBranch() {
260     Branch property = this.branch.getProperty();
261     return property != null && property.getType() == BranchType.LONG;
262   }
263
264   @Override
265   public boolean isPullRequest() {
266     Branch property = this.branch.getProperty();
267     return property != null && property.getType() == BranchType.PULL_REQUEST;
268   }
269 }