aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2015-06-12 18:01:10 +0200
committerSimon Brandhof <simon.brandhof@sonarsource.com>2015-06-12 18:01:10 +0200
commita58eab01247fc0aa6bd5f4938c0412fc0e110f76 (patch)
tree3ed671a30833bdc4d288cd37ac252eac7151f96b
parentba81359381fc1f77efdcd919ea5cfb5e71ff0f43 (diff)
downloadsonarqube-a58eab01247fc0aa6bd5f4938c0412fc0e110f76.tar.gz
sonarqube-a58eab01247fc0aa6bd5f4938c0412fc0e110f76.zip
Drop support of org.sonar.api.batch.TimeMachine
It can't be supported anymore by design. Analyzers do not connect to database anymore.
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/deprecated/components/DefaultTimeMachine.java168
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java2
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/TimeMachine.java49
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/TimeMachineQuery.java234
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/TimeMachineQueryTest.java43
5 files changed, 0 insertions, 496 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/deprecated/components/DefaultTimeMachine.java b/sonar-batch/src/main/java/org/sonar/batch/deprecated/components/DefaultTimeMachine.java
deleted file mode 100644
index 2cd1898e75f..00000000000
--- a/sonar-batch/src/main/java/org/sonar/batch/deprecated/components/DefaultTimeMachine.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.batch.deprecated.components;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.Nullable;
-import javax.persistence.Query;
-import org.sonar.api.batch.TimeMachine;
-import org.sonar.api.batch.TimeMachineQuery;
-import org.sonar.api.database.DatabaseSession;
-import org.sonar.api.database.model.MeasureModel;
-import org.sonar.api.database.model.Snapshot;
-import org.sonar.api.measures.Measure;
-import org.sonar.api.measures.Metric;
-import org.sonar.api.measures.MetricFinder;
-import org.sonar.api.resources.Resource;
-import org.sonar.api.technicaldebt.batch.Characteristic;
-import org.sonar.api.technicaldebt.batch.TechnicalDebtModel;
-import org.sonar.batch.index.DefaultIndex;
-
-import static org.sonar.api.utils.DateUtils.dateToLong;
-
-public class DefaultTimeMachine implements TimeMachine {
-
- private DatabaseSession session;
- private DefaultIndex index;
- private MetricFinder metricFinder;
- private TechnicalDebtModel techDebtModel;
-
- public DefaultTimeMachine(DatabaseSession session, DefaultIndex index, MetricFinder metricFinder, TechnicalDebtModel techDebtModel) {
- this.session = session;
- this.index = index;
- this.metricFinder = metricFinder;
- this.techDebtModel = techDebtModel;
- }
-
- @Override
- public List<Measure> getMeasures(TimeMachineQuery query) {
- Map<Integer, Metric> metricById = getMetricsById(query);
-
- List<Object[]> objects = execute(query, metricById.keySet());
- List<Measure> result = Lists.newArrayList();
-
- for (Object[] object : objects) {
- MeasureModel model = (MeasureModel) object[0];
- Integer characteristicId = model.getCharacteristicId();
- Characteristic characteristic = techDebtModel.characteristicById(characteristicId);
- Measure measure = toMeasure(model, metricById.get(model.getMetricId()), characteristic);
- measure.setDate(new Date((Long) object[1]));
- result.add(measure);
- }
- return result;
- }
-
- @Override
- public List<Object[]> getMeasuresFields(TimeMachineQuery query) {
- return Collections.emptyList();
- }
-
- protected List<Object[]> execute(TimeMachineQuery query, Set<Integer> metricIds) {
- Resource resource = query.getResource();
- if (resource != null && resource.getId() == null) {
- resource = index.getResource(query.getResource());
- }
- if (resource == null) {
- return Collections.emptyList();
- }
-
- StringBuilder sb = new StringBuilder();
- Map<String, Object> params = Maps.newHashMap();
-
- sb.append("SELECT m, s.createdAt ");
- sb.append(" FROM ")
- .append(MeasureModel.class.getSimpleName())
- .append(" m, ")
- .append(Snapshot.class.getSimpleName())
- .append(" s WHERE m.snapshotId=s.id AND s.resourceId=:resourceId AND s.status=:status");
- params.put("resourceId", resource.getId());
- params.put("status", Snapshot.STATUS_PROCESSED);
-
- sb.append(" AND m.characteristicId IS NULL");
- sb.append(" AND m.personId IS NULL");
- sb.append(" AND m.ruleId IS NULL AND m.rulePriority IS NULL");
- if (!metricIds.isEmpty()) {
- sb.append(" AND m.metricId IN (:metricIds) ");
- params.put("metricIds", metricIds);
- }
- if (query.isFromCurrentAnalysis()) {
- sb.append(" AND s.createdAt>=:from ");
- params.put("from", index.getProject().getAnalysisDate());
-
- } else if (query.getFrom() != null) {
- sb.append(" AND s.createdAt>=:from ");
- params.put("from", dateToLong(query.getFrom()));
- }
- if (query.isToCurrentAnalysis()) {
- sb.append(" AND s.createdAt<=:to ");
- params.put("to", dateToLong(index.getProject().getAnalysisDate()));
-
- } else if (query.getTo() != null) {
- sb.append(" AND s.createdAt<=:to ");
- params.put("to", dateToLong(query.getTo()));
- }
- if (query.isOnlyLastAnalysis()) {
- sb.append(" AND s.last=:last ");
- params.put("last", Boolean.TRUE);
- }
- sb.append(" ORDER BY s.createdAt ");
-
- Query jpaQuery = session.createQuery(sb.toString());
-
- for (Map.Entry<String, Object> entry : params.entrySet()) {
- jpaQuery.setParameter(entry.getKey(), entry.getValue());
- }
- return jpaQuery.getResultList();
- }
-
- public Map<Integer, Metric> getMetricsById(TimeMachineQuery query) {
- Collection<Metric> metrics = metricFinder.findAll(query.getMetricKeys());
- Map<Integer, Metric> result = Maps.newHashMap();
- for (Metric metric : metrics) {
- result.put(metric.getId(), metric);
- }
- return result;
- }
-
- static Measure toMeasure(MeasureModel model, Metric metric, @Nullable Characteristic characteristic) {
- // NOTE: measures on rule are not supported
- Measure measure = new Measure(metric);
- measure.setDescription(model.getDescription());
- measure.setValue(model.getValue());
- measure.setData(model.getData(metric));
- measure.setAlertStatus(model.getAlertStatus());
- measure.setAlertText(model.getAlertText());
- measure.setVariation1(model.getVariationValue1());
- measure.setVariation2(model.getVariationValue2());
- measure.setVariation3(model.getVariationValue3());
- measure.setVariation4(model.getVariationValue4());
- measure.setVariation5(model.getVariationValue5());
- measure.setCharacteristic(characteristic);
- measure.setPersonId(model.getPersonId());
- return measure;
- }
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
index 1809108f70f..4d4fb03fff9 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
@@ -36,7 +36,6 @@ import org.sonar.batch.bootstrap.ExtensionMatcher;
import org.sonar.batch.bootstrap.ExtensionUtils;
import org.sonar.batch.deprecated.DeprecatedSensorContext;
import org.sonar.batch.deprecated.ResourceFilters;
-import org.sonar.batch.deprecated.components.DefaultTimeMachine;
import org.sonar.batch.deprecated.perspectives.BatchPerspectives;
import org.sonar.batch.events.EventBus;
import org.sonar.batch.index.DefaultIndex;
@@ -153,7 +152,6 @@ public class ModuleScanContainer extends ComponentContainer {
DefaultSensorStorage.class,
DeprecatedSensorContext.class,
BatchExtensionDictionnary.class,
- DefaultTimeMachine.class,
IssueFilters.class,
CoverageExclusions.class,
ResourceFilters.class,
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/TimeMachine.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/TimeMachine.java
deleted file mode 100644
index 4183d18fd95..00000000000
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/TimeMachine.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.api.batch;
-
-import org.sonar.api.measures.Measure;
-
-import java.util.List;
-
-/**
- * The TimeMachine component
- *
- * @since 1.10
- * @deprecated since 5.1 ability to access previous data from batch side will soon be removed
- */
-@Deprecated
-@RequiresDB
-@BatchSide
-public interface TimeMachine {
-
- /**
- * Past measures, sorted by date. Returns all fields.
- * <p/>
- * <p>Measures of current analysis are not included.</p>
- */
- List<Measure> getMeasures(TimeMachineQuery query);
-
- /**
- * Return an empty list since 5.2. See https://jira.sonarsource.com/browse/SONAR-6392
- */
- List<Object[]> getMeasuresFields(TimeMachineQuery query);
-
-}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/TimeMachineQuery.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/TimeMachineQuery.java
deleted file mode 100644
index e4d5482ad5f..00000000000
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/TimeMachineQuery.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.api.batch;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.sonar.api.measures.Metric;
-import org.sonar.api.resources.Resource;
-
-import java.util.Arrays;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * A class to query TimeMachine on a given resource
- * <p/>
- * <p>The query is constructed by setting filters on metrics and on dates</p>
- * <p>It is to be noted that all filters will be applied regardless of their coherence</p>
- *
- * @since 1.10
- */
-public class TimeMachineQuery {
-
- private Resource resource;
- private List<Metric> metrics;
- private List<String> metricKeys;
- private Date from;
- private Date to;
- private boolean onlyLastAnalysis = false;
- private boolean fromCurrentAnalysis = false;
- private boolean toCurrentAnalysis = false;
-
- /**
- * <p>Create a TimeMachine query for a given resource
- * </p>
- * Apart from the resource the query is empty, i.e. will return all data for the resource
- *
- * @param resource the resource
- */
- public TimeMachineQuery(Resource resource) {
- this.resource = resource;
- }
-
- /**
- * @return the resource of the Query
- */
- public Resource getResource() {
- return resource;
- }
-
- /**
- * Sets the resource of the query
- *
- * @param resource the resource
- * @return this
- */
- public TimeMachineQuery setResource(Resource resource) {
- this.resource = resource;
- return this;
- }
-
- /**
- * @return the metrics beloging to the query
- */
- public List<Metric> getMetrics() {
- return metrics;
- }
-
- /**
- * Sets the metrics to return
- *
- * @param metrics the list of metrics
- * @return this
- */
- public TimeMachineQuery setMetrics(List<Metric> metrics) {
- this.metrics = metrics;
- this.metricKeys = new LinkedList<>();
- for (Metric metric : this.metrics) {
- this.metricKeys.add(metric.getKey());
- }
- return this;
- }
-
- public TimeMachineQuery setMetricKeys(String... metricKeys) {
- this.metricKeys = Arrays.asList(metricKeys);
- return this;
- }
-
- public List<String> getMetricKeys() {
- return metricKeys;
- }
-
- public TimeMachineQuery setMetricKeys(List<String> metricKeys) {
- this.metricKeys = metricKeys;
- return this;
- }
-
- /**
- * Sets the metrics to return
- *
- * @param metrics the list of metrics
- * @return this
- */
- public TimeMachineQuery setMetrics(Metric... metrics) {
- this.metrics = Arrays.asList(metrics);
- this.metricKeys = new LinkedList<>();
- for (Metric metric : this.metrics) {
- this.metricKeys.add(metric.getKey());
- }
- return this;
- }
-
- /**
- * Unsets the metrics
- *
- * @return this
- */
- public TimeMachineQuery unsetMetrics() {
- this.metrics = null;
- return this;
- }
-
- /**
- * @return the from date of the query
- */
- public Date getFrom() {
- return from;
- }
-
- /**
- * Sets the from date to be used in the query
- *
- * @param from the from date
- * @return this
- */
- public TimeMachineQuery setFrom(Date from) {
- this.from = from;
- return this;
- }
-
- /**
- * @param b whether to use the latest analysis as a from date
- * @return this
- */
- public TimeMachineQuery setFromCurrentAnalysis(boolean b) {
- this.fromCurrentAnalysis = b;
- return this;
- }
-
- /**
- * @param b whether to use the latest analysis as a to date
- * @return this
- */
- public TimeMachineQuery setToCurrentAnalysis(boolean b) {
- this.toCurrentAnalysis = b;
- return this;
- }
-
- /**
- * @return whether the latest analysis is used as a from date
- */
- public boolean isFromCurrentAnalysis() {
- return fromCurrentAnalysis;
- }
-
- /**
- * @return whether the latest analysis is used as a to date
- */
- public boolean isToCurrentAnalysis() {
- return toCurrentAnalysis;
- }
-
- /**
- * @return the to date of the query
- */
- public Date getTo() {
- return to;
- }
-
- /**
- * Sets the to date to be used in the query
- *
- * @param to the to date
- * @return this
- */
- public TimeMachineQuery setTo(Date to) {
- this.to = to;
- return this;
- }
-
- /**
- * @return whether to return only the latest analysis
- */
- public boolean isOnlyLastAnalysis() {
- return onlyLastAnalysis;
- }
-
- /**
- *
- * @param onlyLastAnalysis whether to only return the latest analysis
- * @return this
- */
- public TimeMachineQuery setOnlyLastAnalysis(boolean onlyLastAnalysis) {
- this.onlyLastAnalysis = onlyLastAnalysis;
- return this;
- }
-
- @Override
- public String toString() {
- return new ToStringBuilder(this)
- .append("resource", resource)
- .append("metrics", metrics)
- .append("from", from)
- .append("to", to)
- .toString();
- }
-}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/TimeMachineQueryTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/TimeMachineQueryTest.java
deleted file mode 100644
index 9599f16b550..00000000000
--- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/TimeMachineQueryTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.api.batch;
-
-import org.junit.Test;
-import org.sonar.api.measures.CoreMetrics;
-import org.sonar.api.measures.Metric;
-
-import java.util.Arrays;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class TimeMachineQueryTest {
-
- @Test
- public void setNullMetrics() {
- TimeMachineQuery query = new TimeMachineQuery(null).setMetrics(Arrays.<Metric>asList(CoreMetrics.LINES));
- assertThat(query.getMetrics()).contains(CoreMetrics.LINES);
-
- query.unsetMetrics();
- assertThat(query.getMetrics()).isNull();
-
- query.setMetrics(CoreMetrics.LINES, CoreMetrics.COVERAGE);
- assertThat(query.getMetrics()).contains(CoreMetrics.LINES, CoreMetrics.COVERAGE);
- }
-}