]> source.dussan.org Git - sonarqube.git/blob
2226440dbcc9c7b249df03340f51a9a18707783f
[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.api.posttask;
21
22 import com.google.common.base.Function;
23 import java.util.Map;
24 import javax.annotation.Nonnull;
25 import org.sonar.api.ce.posttask.QualityGate;
26 import org.sonar.ce.task.projectanalysis.qualitygate.Condition;
27 import org.sonar.ce.task.projectanalysis.qualitygate.ConditionStatus;
28
29 import static com.google.common.base.Preconditions.checkState;
30 import static java.lang.String.format;
31
32 /**
33  * Converts a {@link Condition} from the Compute Engine internal API to a {@link org.sonar.api.ce.posttask.QualityGate.Condition}
34  * of the public API.
35  */
36 class ConditionToCondition implements Function<Condition, QualityGate.Condition> {
37   private final ConditionImpl.Builder builder = ConditionImpl.newBuilder();
38   private final Map<Condition, ConditionStatus> statusPerConditions;
39
40   public ConditionToCondition(Map<Condition, ConditionStatus> statusPerConditions) {
41     this.statusPerConditions = statusPerConditions;
42   }
43
44   @Override
45   @Nonnull
46   public QualityGate.Condition apply(Condition input) {
47     String metricKey = input.getMetric().getKey();
48     ConditionStatus conditionStatus = statusPerConditions.get(input);
49     checkState(conditionStatus != null, "Missing ConditionStatus for condition on metric key %s", metricKey);
50     return builder
51       .setStatus(convert(conditionStatus.getStatus()))
52       .setMetricKey(metricKey)
53       .setOperator(convert(input.getOperator()))
54       .setErrorThreshold(input.getErrorThreshold())
55       .setValue(conditionStatus.getValue())
56       .build();
57   }
58
59   private static QualityGate.EvaluationStatus convert(ConditionStatus.EvaluationStatus status) {
60     switch (status) {
61       case NO_VALUE:
62         return QualityGate.EvaluationStatus.NO_VALUE;
63       case OK:
64         return QualityGate.EvaluationStatus.OK;
65       case ERROR:
66         return QualityGate.EvaluationStatus.ERROR;
67       default:
68         throw new IllegalArgumentException(format(
69           "Unsupported value '%s' of ConditionStatus.EvaluationStatus can not be converted to QualityGate.EvaluationStatus",
70           status));
71     }
72   }
73
74   private static QualityGate.Operator convert(Condition.Operator operator) {
75     switch (operator) {
76       case EQUALS:
77         return QualityGate.Operator.EQUALS;
78       case NOT_EQUALS:
79         return QualityGate.Operator.NOT_EQUALS;
80       case GREATER_THAN:
81         return QualityGate.Operator.GREATER_THAN;
82       case LESS_THAN:
83         return QualityGate.Operator.LESS_THAN;
84       default:
85         throw new IllegalArgumentException(format(
86           "Unsupported value '%s' of Condition.Operation can not be converted to QualityGate.Operator",
87           operator));
88     }
89   }
90 }