summaryrefslogtreecommitdiffstats
path: root/plugins/sonar-dbcleaner-plugin
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2014-10-23 17:15:00 +0200
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2014-10-27 09:08:39 +0100
commit4c64f4f00be61229d4c4c8be8f8bec9b25df2bac (patch)
treeb5844e988c063e80cb3cc6cede99d4f68a61fb7f /plugins/sonar-dbcleaner-plugin
parent9c467f71a35ebb691acbb77bb1de3d825c4b109d (diff)
downloadsonarqube-4c64f4f00be61229d4c4c8be8f8bec9b25df2bac.tar.gz
sonarqube-4c64f4f00be61229d4c4c8be8f8bec9b25df2bac.zip
SONAR-5628 - Compute Engine - Move DbCleaner
Diffstat (limited to 'plugins/sonar-dbcleaner-plugin')
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java89
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DefaultPurgeTask.java99
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DeprecatedDefaultPurgeTask.java (renamed from plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/ProjectPurgePostJob.java)33
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java13
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java6
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleaner.java74
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilter.java52
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filter.java30
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filters.java59
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Interval.java73
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/KeepOneFilter.java88
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/package-info.java25
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerPluginTest.java32
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerTestUtils.java44
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DefaultPurgeTaskTest.java107
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleanerTest.java92
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilterTest.java46
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/IntervalTest.java107
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/KeepOneFilterTest.java94
19 files changed, 36 insertions, 1127 deletions
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java
index 01397e6be89..56cad6f8a84 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java
@@ -17,98 +17,27 @@
* 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.plugins.dbcleaner;
import com.google.common.collect.ImmutableList;
-import org.sonar.api.CoreProperties;
-import org.sonar.api.PropertyType;
+import com.google.common.collect.Lists;
import org.sonar.api.SonarPlugin;
import org.sonar.api.config.PropertyDefinition;
-import org.sonar.api.resources.Qualifiers;
-import org.sonar.plugins.dbcleaner.api.DbCleanerConstants;
-import org.sonar.plugins.dbcleaner.period.DefaultPeriodCleaner;
+import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
-import java.util.Arrays;
import java.util.List;
+@Deprecated
public final class DbCleanerPlugin extends SonarPlugin {
+ static List<PropertyDefinition> propertyDefinitions() {
+ return Lists.newArrayList();
+ }
+
@Override
public List getExtensions() {
- return ImmutableList.builder().add(DefaultPeriodCleaner.class, DefaultPurgeTask.class, ProjectPurgePostJob.class)
+ return ImmutableList.builder().add(DefaultPeriodCleaner.class, DeprecatedDefaultPurgeTask.class)
.addAll(propertyDefinitions()).build();
}
-
- static List<PropertyDefinition> propertyDefinitions() {
- return Arrays.asList(
- PropertyDefinition.builder(DbCleanerConstants.PROPERTY_CLEAN_DIRECTORY)
- .defaultValue("true")
- .name("Clean directory/package history")
- .description("If set to true, no history is kept at directory/package level. Setting this to false can cause database bloat.")
- .type(PropertyType.BOOLEAN)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(1)
- .build(),
-
- PropertyDefinition.builder(DbCleanerConstants.DAYS_BEFORE_DELETING_CLOSED_ISSUES)
- .defaultValue("30")
- .name("Delete closed issues after")
- .description("Issues that have been closed for more than this number of days will be deleted.")
- .type(PropertyType.INTEGER)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(2)
- .build(),
-
- PropertyDefinition.builder(DbCleanerConstants.HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY)
- .defaultValue("24")
- .name("Keep only one snapshot a day after")
- .description("After this number of hours, if there are several snapshots during the same day, "
- + "the DbCleaner keeps the most recent one and fully deletes the other ones.")
- .type(PropertyType.INTEGER)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(3)
- .build(),
-
- PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK)
- .defaultValue("4")
- .name("Keep only one snapshot a week after")
- .description("After this number of weeks, if there are several snapshots during the same week, "
- + "the DbCleaner keeps the most recent one and fully deletes the other ones")
- .type(PropertyType.INTEGER)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(4)
- .build(),
-
- PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH)
- .defaultValue("52")
- .name("Keep only one snapshot a month after")
- .description("After this number of weeks, if there are several snapshots during the same month, "
- + "the DbCleaner keeps the most recent one and fully deletes the other ones.")
- .type(PropertyType.INTEGER)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(5)
- .build(),
-
- PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS)
- .defaultValue("260")
- .name("Delete all snapshots after")
- .description("After this number of weeks, all snapshots are fully deleted.")
- .type(PropertyType.INTEGER)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(6)
- .build()
- );
- }
}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DefaultPurgeTask.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DefaultPurgeTask.java
deleted file mode 100644
index 5636515cb3e..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DefaultPurgeTask.java
+++ /dev/null
@@ -1,99 +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.plugins.dbcleaner;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.sonar.api.CoreProperties;
-import org.sonar.api.config.Settings;
-import org.sonar.api.resources.Scopes;
-import org.sonar.api.utils.TimeUtils;
-import org.sonar.core.purge.PurgeConfiguration;
-import org.sonar.core.purge.PurgeDao;
-import org.sonar.core.purge.PurgeProfiler;
-import org.sonar.plugins.dbcleaner.api.DbCleanerConstants;
-import org.sonar.plugins.dbcleaner.api.PurgeTask;
-import org.sonar.plugins.dbcleaner.period.DefaultPeriodCleaner;
-
-/**
- * @since 2.14
- */
-public class DefaultPurgeTask implements PurgeTask {
- private static final Logger LOG = LoggerFactory.getLogger(DefaultPurgeTask.class);
-
- private PurgeDao purgeDao;
- private Settings settings;
- private DefaultPeriodCleaner periodCleaner;
- private final PurgeProfiler profiler;
-
- public DefaultPurgeTask(PurgeDao purgeDao, Settings settings, DefaultPeriodCleaner periodCleaner, PurgeProfiler profiler) {
- this.purgeDao = purgeDao;
- this.settings = settings;
- this.periodCleaner = periodCleaner;
- this.profiler = profiler;
- }
-
- @Override
- public PurgeTask delete(long resourceId) {
- purgeDao.deleteResourceTree(resourceId);
- return this;
- }
-
- @Override
- public PurgeTask purge(long resourceId) {
- long start = System.currentTimeMillis();
- profiler.reset();
- cleanHistoricalData(resourceId);
- doPurge(resourceId);
- if (settings.getBoolean(CoreProperties.PROFILING_LOG_PROPERTY)) {
- long duration = System.currentTimeMillis() - start;
- LOG.info("\n -------- Profiling for purge: " + TimeUtils.formatDuration(duration) + " --------\n");
- profiler.dump(duration, LOG);
- LOG.info("\n -------- End of profiling for purge --------\n");
- }
- return this;
- }
-
- private void cleanHistoricalData(long resourceId) {
- try {
- periodCleaner.clean(resourceId);
- } catch (Exception e) {
- // purge errors must no fail the batch
- LOG.error("Fail to clean historical data [id=" + resourceId + "]", e);
- }
- }
-
- private void doPurge(long resourceId) {
- try {
- purgeDao.purge(newConf(resourceId));
- } catch (Exception e) {
- // purge errors must no fail the batch
- LOG.error("Fail to purge data [id=" + resourceId + "]", e);
- }
- }
-
- private PurgeConfiguration newConf(long resourceId) {
- String[] scopes = new String[] {Scopes.FILE};
- if (settings.getBoolean(DbCleanerConstants.PROPERTY_CLEAN_DIRECTORY)) {
- scopes = new String[] {Scopes.DIRECTORY, Scopes.FILE};
- }
- return new PurgeConfiguration(resourceId, scopes, settings.getInt(DbCleanerConstants.DAYS_BEFORE_DELETING_CLOSED_ISSUES));
- }
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/ProjectPurgePostJob.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DeprecatedDefaultPurgeTask.java
index 1a412bcda8a..50e340bc1c1 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/ProjectPurgePostJob.java
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DeprecatedDefaultPurgeTask.java
@@ -17,25 +17,36 @@
* 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.plugins.dbcleaner;
-import org.sonar.api.batch.PostJob;
-import org.sonar.api.batch.SensorContext;
-import org.sonar.api.resources.Project;
-import org.sonar.core.DryRunIncompatible;
+import org.sonar.api.config.Settings;
+import org.sonar.core.computation.dbcleaner.DefaultPurgeTask;
+import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
+import org.sonar.core.purge.PurgeDao;
+import org.sonar.core.purge.PurgeProfiler;
import org.sonar.plugins.dbcleaner.api.PurgeTask;
-@DryRunIncompatible
-public class ProjectPurgePostJob implements PostJob {
+/**
+ * @since 2.14
+ */
+@Deprecated
+public class DeprecatedDefaultPurgeTask implements PurgeTask {
+ private final DefaultPurgeTask defaultPurgeTask;
- private PurgeTask purgeTask;
+ public DeprecatedDefaultPurgeTask(PurgeDao purgeDao, Settings settings, DefaultPeriodCleaner periodCleaner, PurgeProfiler profiler) {
+ defaultPurgeTask = new DefaultPurgeTask(purgeDao, settings, periodCleaner, profiler);
+ }
- public ProjectPurgePostJob(PurgeTask purgeTask) {
- this.purgeTask = purgeTask;
+ @Override
+ public DeprecatedDefaultPurgeTask delete(long resourceId) {
+ defaultPurgeTask.delete(resourceId);
+ return this;
}
@Override
- public void executeOn(final Project project, SensorContext context) {
- purgeTask.purge(project.getId());
+ public DeprecatedDefaultPurgeTask purge(long resourceId) {
+ defaultPurgeTask.purge(resourceId);
+ return this;
}
}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java
index 7f77420e2f8..881fca768a3 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java
@@ -19,15 +19,6 @@
*/
package org.sonar.plugins.dbcleaner.api;
-public interface DbCleanerConstants {
-
- String PLUGIN_KEY = "dbcleaner";
- String PLUGIN_NAME = "DbCleaner";
- String PROPERTY_CLEAN_DIRECTORY = "sonar.dbcleaner.cleanDirectory";
-
- String HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY = "sonar.dbcleaner.hoursBeforeKeepingOnlyOneSnapshotByDay";
- String WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK = "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByWeek";
- String WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH = "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByMonth";
- String WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS = "sonar.dbcleaner.weeksBeforeDeletingAllSnapshots";
- String DAYS_BEFORE_DELETING_CLOSED_ISSUES = "sonar.dbcleaner.daysBeforeDeletingClosedIssues";
+@Deprecated
+public interface DbCleanerConstants extends org.sonar.core.computation.dbcleaner.DbCleanerConstants {
}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java
index eec483cc45e..810608f6069 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java
@@ -19,18 +19,18 @@
*/
package org.sonar.plugins.dbcleaner.api;
-import org.sonar.api.task.TaskExtension;
-
import com.google.common.annotations.Beta;
+import org.sonar.api.task.TaskExtension;
/**
* @since 2.14
*/
@Beta
+@Deprecated
public interface PurgeTask extends TaskExtension {
/**
* Purges the data related to a tree of resources.
- *
+ * <p/>
* Exceptions are logged and are not thrown again, so this method fails only on {@link Error}s.
*
* @param resourceId the root of the tree
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleaner.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleaner.java
deleted file mode 100644
index ade98c3dbaf..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleaner.java
+++ /dev/null
@@ -1,74 +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.plugins.dbcleaner.period;
-
-import com.google.common.annotations.VisibleForTesting;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.sonar.api.config.Settings;
-import org.sonar.api.resources.Project;
-import org.sonar.api.task.TaskExtension;
-import org.sonar.api.utils.DateUtils;
-import org.sonar.core.purge.PurgeDao;
-import org.sonar.core.purge.PurgeSnapshotQuery;
-import org.sonar.core.purge.PurgeableSnapshotDto;
-
-import java.util.List;
-
-public class DefaultPeriodCleaner implements TaskExtension {
-
- private static final Logger LOG = LoggerFactory.getLogger(DefaultPeriodCleaner.class);
- private PurgeDao purgeDao;
- private Settings settings;
-
- public DefaultPeriodCleaner(PurgeDao purgeDao, Settings settings) {
- this.purgeDao = purgeDao;
- this.settings = settings;
- }
-
- public void purge(Project project, int projectSnapshotId) {
- clean(project.getId());
- }
-
- public void clean(long projectId) {
- doClean(projectId, new Filters(settings).all());
- }
-
- @VisibleForTesting
- void doClean(long projectId, List<Filter> filters) {
- List<PurgeableSnapshotDto> history = selectProjectSnapshots(projectId);
- for (Filter filter : filters) {
- filter.log();
- delete(filter.filter(history));
- }
- }
-
- private void delete(List<PurgeableSnapshotDto> snapshots) {
- for (PurgeableSnapshotDto snapshot : snapshots) {
- LOG.info("<- Delete snapshot: " + DateUtils.formatDateTime(snapshot.getDate()) + " [" + snapshot.getSnapshotId() + "]");
- purgeDao.deleteSnapshots(PurgeSnapshotQuery.create().setRootSnapshotId(snapshot.getSnapshotId()));
- purgeDao.deleteSnapshots(PurgeSnapshotQuery.create().setId(snapshot.getSnapshotId()));
- }
- }
-
- private List<PurgeableSnapshotDto> selectProjectSnapshots(long resourceId) {
- return purgeDao.selectPurgeableSnapshots(resourceId);
- }
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilter.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilter.java
deleted file mode 100644
index 18a795e1ee7..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilter.java
+++ /dev/null
@@ -1,52 +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.plugins.dbcleaner.period;
-
-import com.google.common.collect.Lists;
-import org.slf4j.LoggerFactory;
-import org.sonar.api.utils.DateUtils;
-import org.sonar.core.purge.PurgeableSnapshotDto;
-
-import java.util.Date;
-import java.util.List;
-
-class DeleteAllFilter implements Filter {
- private final Date before;
-
- public DeleteAllFilter(Date before) {
- this.before = before;
- }
-
- @Override
- public List<PurgeableSnapshotDto> filter(List<PurgeableSnapshotDto> history) {
- List<PurgeableSnapshotDto> result = Lists.newArrayList();
- for (PurgeableSnapshotDto snapshot : history) {
- if (snapshot.getDate().before(before)) {
- result.add(snapshot);
- }
- }
- return result;
- }
-
- @Override
- public void log() {
- LoggerFactory.getLogger(getClass()).info("-> Delete data prior to: " + DateUtils.formatDate(before));
- }
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filter.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filter.java
deleted file mode 100644
index 4d4419be8c4..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filter.java
+++ /dev/null
@@ -1,30 +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.plugins.dbcleaner.period;
-
-import org.sonar.core.purge.PurgeableSnapshotDto;
-
-import java.util.List;
-
-interface Filter {
- List<PurgeableSnapshotDto> filter(List<PurgeableSnapshotDto> snapshots);
-
- void log();
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filters.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filters.java
deleted file mode 100644
index c291cd8fec4..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filters.java
+++ /dev/null
@@ -1,59 +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.plugins.dbcleaner.period;
-
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.time.DateUtils;
-import org.sonar.api.config.Settings;
-import org.sonar.plugins.dbcleaner.api.DbCleanerConstants;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-class Filters {
- private final List<Filter> all = Lists.newArrayList();
-
- Filters(Settings settings) {
- Date dateToStartKeepingOneSnapshotByDay = getDateFromHours(settings, DbCleanerConstants.HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY);
- Date dateToStartKeepingOneSnapshotByWeek = getDateFromWeeks(settings, DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK);
- Date dateToStartKeepingOneSnapshotByMonth = getDateFromWeeks(settings, DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH);
- Date dateToStartDeletingAllSnapshots = getDateFromWeeks(settings, DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS);
-
- all.add(new KeepOneFilter(dateToStartKeepingOneSnapshotByWeek, dateToStartKeepingOneSnapshotByDay, Calendar.DAY_OF_YEAR, "day"));
- all.add(new KeepOneFilter(dateToStartKeepingOneSnapshotByMonth, dateToStartKeepingOneSnapshotByWeek, Calendar.WEEK_OF_YEAR, "week"));
- all.add(new KeepOneFilter(dateToStartDeletingAllSnapshots, dateToStartKeepingOneSnapshotByMonth, Calendar.MONTH, "month"));
- all.add(new DeleteAllFilter(dateToStartDeletingAllSnapshots));
- }
-
- List<Filter> all() {
- return all;
- }
-
- static Date getDateFromWeeks(Settings settings, String propertyKey) {
- int weeks = settings.getInt(propertyKey);
- return DateUtils.addWeeks(new Date(), -weeks);
- }
-
- static Date getDateFromHours(Settings settings, String propertyKey) {
- int hours = settings.getInt(propertyKey);
- return DateUtils.addHours(new Date(), -hours);
- }
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Interval.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Interval.java
deleted file mode 100644
index 18b02c38d08..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Interval.java
+++ /dev/null
@@ -1,73 +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.plugins.dbcleaner.period;
-
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.time.DateUtils;
-import org.sonar.core.purge.PurgeableSnapshotDto;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-final class Interval {
- List<PurgeableSnapshotDto> snapshots = Lists.newArrayList();
-
- void add(PurgeableSnapshotDto snapshot) {
- snapshots.add(snapshot);
- }
-
- List<PurgeableSnapshotDto> get() {
- return snapshots;
- }
-
- int count() {
- return snapshots.size();
- }
-
- static List<Interval> group(List<PurgeableSnapshotDto> snapshots, Date start, Date end, int calendarField) {
- List<Interval> intervals = Lists.newArrayList();
-
- GregorianCalendar calendar = new GregorianCalendar();
- int lastYear = -1;
- int lastFieldValue = -1;
- Interval currentInterval = null;
-
- for (PurgeableSnapshotDto snapshot : snapshots) {
- if (!DateUtils.isSameDay(start, snapshot.getDate()) && snapshot.getDate().after(start) &&
- (snapshot.getDate().before(end) || DateUtils.isSameDay(end, snapshot.getDate()))) {
- calendar.setTime(snapshot.getDate());
- int currentFieldValue = calendar.get(calendarField);
- int currentYear = calendar.get(Calendar.YEAR);
- if (lastYear!=currentYear || lastFieldValue != currentFieldValue) {
- currentInterval = new Interval();
- intervals.add(currentInterval);
- }
- lastFieldValue = currentFieldValue;
- lastYear = currentYear;
- if (currentInterval != null) {
- currentInterval.add(snapshot);
- }
- }
- }
- return intervals;
- }
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/KeepOneFilter.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/KeepOneFilter.java
deleted file mode 100644
index 81249fdd929..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/KeepOneFilter.java
+++ /dev/null
@@ -1,88 +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.plugins.dbcleaner.period;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Lists;
-import org.slf4j.LoggerFactory;
-import org.sonar.api.utils.DateUtils;
-import org.sonar.core.purge.PurgeableSnapshotDto;
-
-import java.util.Date;
-import java.util.List;
-
-class KeepOneFilter implements Filter {
-
- private final Date start;
- private final Date end;
- private final int dateField;
- private final String label;
-
- KeepOneFilter(Date start, Date end, int calendarField, String label) {
- this.start = start;
- this.end = end;
- this.dateField = calendarField;
- this.label = label;
- }
-
- @Override
- public List<PurgeableSnapshotDto> filter(List<PurgeableSnapshotDto> history) {
- List<Interval> intervals = Interval.group(history, start, end, dateField);
- List<PurgeableSnapshotDto> result = Lists.newArrayList();
- for (Interval interval : intervals) {
- appendSnapshotsToDelete(interval, result);
- }
-
- return result;
- }
-
- @Override
- public void log() {
- LoggerFactory.getLogger(getClass()).info("-> Keep one snapshot per " + label + " between " + DateUtils.formatDate(start) + " and " + DateUtils.formatDate(end));
- }
-
- private void appendSnapshotsToDelete(Interval interval, List<PurgeableSnapshotDto> toDelete) {
- if (interval.count() > 1) {
- List<PurgeableSnapshotDto> deletables = Lists.newArrayList();
- List<PurgeableSnapshotDto> toKeep = Lists.newArrayList();
- for (PurgeableSnapshotDto snapshot : interval.get()) {
- if (isDeletable(snapshot)) {
- deletables.add(snapshot);
- } else {
- toKeep.add(snapshot);
- }
- }
-
- if (!toKeep.isEmpty()) {
- toDelete.addAll(deletables);
-
- } else if (deletables.size() > 1) {
- // keep one snapshot
- toDelete.addAll(deletables.subList(1, deletables.size()));
- }
- }
- }
-
- @VisibleForTesting
- static boolean isDeletable(PurgeableSnapshotDto snapshot) {
- return !snapshot.isLast() && !snapshot.hasEvents();
- }
-
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/package-info.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/package-info.java
deleted file mode 100644
index f5b97cfc92b..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/package-info.java
+++ /dev/null
@@ -1,25 +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.
- */
-
-@ParametersAreNonnullByDefault
-package org.sonar.plugins.dbcleaner.period;
-
-import javax.annotation.ParametersAreNonnullByDefault;
-
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerPluginTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerPluginTest.java
deleted file mode 100644
index da6ddc93bcd..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerPluginTest.java
+++ /dev/null
@@ -1,32 +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.plugins.dbcleaner;
-
-import org.junit.Test;
-
-import static org.fest.assertions.Assertions.assertThat;
-
-public class DbCleanerPluginTest {
-
- @Test
- public void shouldGetExtensions() {
- assertThat(new DbCleanerPlugin().getExtensions()).hasSize(9);
- }
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerTestUtils.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerTestUtils.java
deleted file mode 100644
index 944c34b3e95..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerTestUtils.java
+++ /dev/null
@@ -1,44 +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.plugins.dbcleaner;
-
-import org.sonar.api.utils.DateUtils;
-import org.sonar.core.purge.PurgeableSnapshotDto;
-
-public final class DbCleanerTestUtils {
-
- private DbCleanerTestUtils() {
- }
-
- public static PurgeableSnapshotDto createSnapshotWithDate(long snapshotId, String date) {
- PurgeableSnapshotDto snapshot = new PurgeableSnapshotDto();
- snapshot.setSnapshotId(snapshotId);
- snapshot.setDate(DateUtils.parseDate(date));
- return snapshot;
- }
-
- public static PurgeableSnapshotDto createSnapshotWithDateTime(long snapshotId, String datetime) {
- PurgeableSnapshotDto snapshot = new PurgeableSnapshotDto();
- snapshot.setSnapshotId(snapshotId);
- snapshot.setDate(DateUtils.parseDateTime(datetime));
- return snapshot;
- }
-
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DefaultPurgeTaskTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DefaultPurgeTaskTest.java
deleted file mode 100644
index 7d6e48bbcce..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DefaultPurgeTaskTest.java
+++ /dev/null
@@ -1,107 +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.plugins.dbcleaner;
-
-import ch.qos.logback.classic.Logger;
-import org.junit.Test;
-import org.mockito.ArgumentMatcher;
-import org.sonar.api.CoreProperties;
-import org.sonar.api.config.PropertyDefinitions;
-import org.sonar.api.config.Settings;
-import org.sonar.api.resources.Scopes;
-import org.sonar.core.purge.PurgeConfiguration;
-import org.sonar.core.purge.PurgeDao;
-import org.sonar.core.purge.PurgeProfiler;
-import org.sonar.plugins.dbcleaner.api.DbCleanerConstants;
-import org.sonar.plugins.dbcleaner.period.DefaultPeriodCleaner;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.argThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-public class DefaultPurgeTaskTest {
- @Test
- public void shouldNotDeleteHistoricalDataOfDirectories() {
- PurgeDao purgeDao = mock(PurgeDao.class);
- Settings settings = new Settings(new PropertyDefinitions(DbCleanerPlugin.propertyDefinitions()));
- settings.setProperty(DbCleanerConstants.PROPERTY_CLEAN_DIRECTORY, "false");
- DefaultPurgeTask task = new DefaultPurgeTask(purgeDao, settings, mock(DefaultPeriodCleaner.class), mock(PurgeProfiler.class));
-
- task.purge(1L);
-
- verify(purgeDao).purge(argThat(new ArgumentMatcher<PurgeConfiguration>() {
- @Override
- public boolean matches(Object o) {
- PurgeConfiguration conf = (PurgeConfiguration) o;
- return conf.rootProjectId() == 1L && conf.scopesWithoutHistoricalData().length == 1 && conf.scopesWithoutHistoricalData()[0].equals(Scopes.FILE);
- }
- }));
- }
-
- @Test
- public void shouldDeleteHistoricalDataOfDirectoriesByDefault() {
- PurgeDao purgeDao = mock(PurgeDao.class);
- Settings settings = new Settings(new PropertyDefinitions(DbCleanerPlugin.propertyDefinitions()));
- DefaultPurgeTask task = new DefaultPurgeTask(purgeDao, settings, mock(DefaultPeriodCleaner.class), mock(PurgeProfiler.class));
-
- task.purge(1L);
-
- verify(purgeDao).purge(argThat(new ArgumentMatcher<PurgeConfiguration>() {
- @Override
- public boolean matches(Object o) {
- PurgeConfiguration conf = (PurgeConfiguration) o;
- return conf.rootProjectId() == 1L &&
- conf.scopesWithoutHistoricalData().length == 2 &&
- conf.scopesWithoutHistoricalData()[0].equals(Scopes.DIRECTORY) &&
- conf.scopesWithoutHistoricalData()[1].equals(Scopes.FILE);
- }
- }));
- }
-
- @Test
- public void shouldNotFailOnErrors() {
- PurgeDao purgeDao = mock(PurgeDao.class);
- when(purgeDao.purge(any(PurgeConfiguration.class))).thenThrow(new RuntimeException());
- DefaultPurgeTask task = new DefaultPurgeTask(purgeDao, new Settings(), mock(DefaultPeriodCleaner.class), mock(PurgeProfiler.class));
-
- task.purge(1L);
-
- verify(purgeDao, times(1)).purge(any(PurgeConfiguration.class));
- }
-
- @Test
- public void shouldDumpProfiling() {
- PurgeConfiguration conf = new PurgeConfiguration(1L, new String[0], 30);
- PurgeDao purgeDao = mock(PurgeDao.class);
- when(purgeDao.purge(conf)).thenThrow(new RuntimeException());
- Settings settings = new Settings(new PropertyDefinitions(DbCleanerPlugin.propertyDefinitions()));
- settings.setProperty(CoreProperties.PROFILING_LOG_PROPERTY, true);
- PurgeProfiler profiler = mock(PurgeProfiler.class);
-
- DefaultPurgeTask task = new DefaultPurgeTask(purgeDao, settings, mock(DefaultPeriodCleaner.class), profiler);
- task.purge(1L);
-
- verify(profiler).dump(anyLong(), any(Logger.class));
- }
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleanerTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleanerTest.java
deleted file mode 100644
index c252c3bfb22..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleanerTest.java
+++ /dev/null
@@ -1,92 +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.plugins.dbcleaner.period;
-
-import org.apache.commons.lang.ObjectUtils;
-import org.hamcrest.BaseMatcher;
-import org.junit.Test;
-import org.mockito.ArgumentMatcher;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.sonar.api.config.Settings;
-import org.sonar.core.purge.PurgeDao;
-import org.sonar.core.purge.PurgeSnapshotQuery;
-import org.sonar.core.purge.PurgeableSnapshotDto;
-
-import java.util.Arrays;
-import java.util.Date;
-
-import static org.mockito.Matchers.anyListOf;
-import static org.mockito.Matchers.argThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-public class DefaultPeriodCleanerTest {
-
-
- @Test
- public void doClean() {
- PurgeDao dao = mock(PurgeDao.class);
- when(dao.selectPurgeableSnapshots(123L)).thenReturn(Arrays.asList(
- new PurgeableSnapshotDto().setSnapshotId(999L).setDate(new Date())));
- Filter filter1 = newLazyFilter();
- Filter filter2 = newLazyFilter();
-
- DefaultPeriodCleaner cleaner = new DefaultPeriodCleaner(dao, mock(Settings.class));
- cleaner.doClean(123L, Arrays.asList(filter1, filter2));
-
- verify(filter1).log();
- verify(filter2).log();
- verify(dao, times(2)).deleteSnapshots(argThat(newRootSnapshotQuery()));
- verify(dao, times(2)).deleteSnapshots(argThat(newSnapshotIdQuery()));
- }
-
- private BaseMatcher<PurgeSnapshotQuery> newRootSnapshotQuery() {
- return new ArgumentMatcher<PurgeSnapshotQuery>() {
- @Override
- public boolean matches(Object o) {
- PurgeSnapshotQuery query = (PurgeSnapshotQuery) o;
- return ObjectUtils.equals(query.getRootSnapshotId(), 999L);
- }
- };
- }
-
- private BaseMatcher<PurgeSnapshotQuery> newSnapshotIdQuery() {
- return new ArgumentMatcher<PurgeSnapshotQuery>() {
- @Override
- public boolean matches(Object o) {
- PurgeSnapshotQuery query = (PurgeSnapshotQuery) o;
- return ObjectUtils.equals(query.getId(), 999L);
- }
- };
- }
-
- private Filter newLazyFilter() {
- Filter filter1 = mock(Filter.class);
- when(filter1.filter(anyListOf(PurgeableSnapshotDto.class))).thenAnswer(new Answer<Object>() {
- public Object answer(InvocationOnMock invocation) throws Throwable {
- return invocation.getArguments()[0];
- }
- });
- return filter1;
- }
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilterTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilterTest.java
deleted file mode 100644
index 12967c16951..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilterTest.java
+++ /dev/null
@@ -1,46 +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.plugins.dbcleaner.period;
-
-import org.junit.Test;
-import org.sonar.api.utils.DateUtils;
-import org.sonar.core.purge.PurgeableSnapshotDto;
-import org.sonar.plugins.dbcleaner.DbCleanerTestUtils;
-
-import java.util.Arrays;
-import java.util.List;
-
-import static org.fest.assertions.Assertions.assertThat;
-
-public class DeleteAllFilterTest {
-
- @Test
- public void shouldDeleteAllSnapshotsPriorToDate() {
- Filter filter = new DeleteAllFilter(DateUtils.parseDate("2011-12-25"));
-
- List<PurgeableSnapshotDto> toDelete = filter.filter(Arrays.asList(
- DbCleanerTestUtils.createSnapshotWithDate(1L, "2010-01-01"),
- DbCleanerTestUtils.createSnapshotWithDate(2L, "2010-12-25"),
- DbCleanerTestUtils.createSnapshotWithDate(3L, "2012-01-01")
- ));
-
- assertThat(toDelete).onProperty("snapshotId").containsOnly(1L, 2L);
- }
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/IntervalTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/IntervalTest.java
deleted file mode 100644
index 5a519f721f1..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/IntervalTest.java
+++ /dev/null
@@ -1,107 +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.plugins.dbcleaner.period;
-
-import org.junit.Test;
-import org.sonar.api.utils.DateUtils;
-import org.sonar.core.purge.PurgeableSnapshotDto;
-
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-import static org.sonar.plugins.dbcleaner.DbCleanerTestUtils.createSnapshotWithDate;
-import static org.sonar.plugins.dbcleaner.DbCleanerTestUtils.createSnapshotWithDateTime;
-
-public class IntervalTest {
- @Test
- public void shouldGroupByIntervals() {
- List<PurgeableSnapshotDto> snapshots = Arrays.asList(
- createSnapshotWithDate(1L, "2011-04-03"),
-
- createSnapshotWithDate(2L, "2011-05-01"),
- createSnapshotWithDate(3L, "2011-05-19"),
-
- createSnapshotWithDate(4L, "2011-06-02"),
- createSnapshotWithDate(5L, "2011-06-20"),
-
- createSnapshotWithDate(6L, "2012-06-29") // out of scope
- );
-
- List<Interval> intervals = Interval.group(snapshots, DateUtils.parseDate("2010-01-01"), DateUtils.parseDate("2011-12-31"), Calendar.MONTH);
- assertThat(intervals.size(), is(3));
-
- assertThat(intervals.get(0).count(), is(1));
- assertThat(calendarField(intervals.get(0), Calendar.MONTH), is(Calendar.APRIL));
-
- assertThat(intervals.get(1).count(), is(2));
- assertThat(calendarField(intervals.get(1), Calendar.MONTH), is(Calendar.MAY));
-
- assertThat(intervals.get(2).count(), is(2));
- assertThat(calendarField(intervals.get(2), Calendar.MONTH), is(Calendar.JUNE));
- }
-
- @Test
- public void shouldNotJoinMonthsOfDifferentYears() {
- List<PurgeableSnapshotDto> snapshots = Arrays.asList(
- createSnapshotWithDate(1L, "2010-04-03"),
- createSnapshotWithDate(2L, "2011-04-13")
- );
-
- List<Interval> intervals = Interval.group(snapshots, DateUtils.parseDate("2010-01-01"), DateUtils.parseDate("2011-12-31"), Calendar.MONTH);
- assertThat(intervals.size(), is(2));
-
- assertThat(intervals.get(0).count(), is(1));
- assertThat(calendarField(intervals.get(0), Calendar.MONTH), is(Calendar.APRIL));
- assertThat(calendarField(intervals.get(0), Calendar.YEAR), is(2010));
-
- assertThat(intervals.get(1).count(), is(1));
- assertThat(calendarField(intervals.get(1), Calendar.MONTH), is(Calendar.APRIL));
- assertThat(calendarField(intervals.get(1), Calendar.YEAR), is(2011));
- }
-
- @Test
- public void shouldIgnoreTimeWhenGroupingByIntervals() {
- List<PurgeableSnapshotDto> snapshots = Arrays.asList(
- createSnapshotWithDateTime(1L, "2011-05-25T16:16:48+0100"),
- createSnapshotWithDateTime(2L, "2012-01-26T16:16:48+0100"),
- createSnapshotWithDateTime(3L, "2012-01-27T16:16:48+0100")
- );
-
- List<Interval> intervals = Interval.group(snapshots, DateUtils.parseDate("2011-05-25"), DateUtils.parseDate("2012-01-26"), Calendar.MONTH);
- assertThat(intervals.size(), is(1));
- assertThat(intervals.get(0).count(), is(1));
- assertThat(intervals.get(0).get().get(0).getSnapshotId(), is(2L));
- }
-
- static int calendarField(Interval interval, int field) {
- if (interval.count() == 0) {
- return -1;
- }
-
- PurgeableSnapshotDto first = interval.get().iterator().next();
- GregorianCalendar cal = new GregorianCalendar();
- cal.setTime(first.getDate());
- return cal.get(field);
- }
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/KeepOneFilterTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/KeepOneFilterTest.java
deleted file mode 100644
index 4a9ecd48ea8..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/KeepOneFilterTest.java
+++ /dev/null
@@ -1,94 +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.plugins.dbcleaner.period;
-
-import com.google.common.base.Function;
-import com.google.common.collect.Iterables;
-import org.junit.Test;
-import org.sonar.api.utils.DateUtils;
-import org.sonar.core.purge.PurgeableSnapshotDto;
-
-import javax.annotation.Nullable;
-
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.List;
-
-import static com.google.common.collect.Lists.newArrayList;
-import static org.fest.assertions.Assertions.assertThat;
-import static org.sonar.plugins.dbcleaner.DbCleanerTestUtils.createSnapshotWithDate;
-
-public class KeepOneFilterTest {
-
- @Test
- public void shouldOnlyOneSnapshotPerInterval() {
- Filter filter = new KeepOneFilter(DateUtils.parseDate("2011-03-25"), DateUtils.parseDate("2011-08-25"), Calendar.MONTH, "month");
-
- List<PurgeableSnapshotDto> toDelete = filter.filter(Arrays.<PurgeableSnapshotDto>asList(
- createSnapshotWithDate(1L, "2010-01-01"), // out of scope -> keep
- createSnapshotWithDate(2L, "2011-05-01"), // may -> keep
- createSnapshotWithDate(3L, "2011-05-02"), // may -> to be deleted
- createSnapshotWithDate(4L, "2011-05-19"), // may -> to be deleted
- createSnapshotWithDate(5L, "2011-06-01"), // june -> keep
- createSnapshotWithDate(6L, "2012-01-01") // out of scope -> keep
- ));
-
- assertThat(toDelete).hasSize(2);
-
- List<Long> snapshotIds = snapshotIds(toDelete);
- assertThat(snapshotIds).contains(3L);
- assertThat(snapshotIds.contains(4L));
- }
-
- @Test
- public void shouldKeepNonDeletableSnapshots() {
- Filter filter = new KeepOneFilter(DateUtils.parseDate("2011-03-25"), DateUtils.parseDate("2011-08-25"), Calendar.MONTH, "month");
-
- List<PurgeableSnapshotDto> toDelete = filter.filter(Arrays.<PurgeableSnapshotDto>asList(
- createSnapshotWithDate(1L, "2011-05-01"), // to be deleted
- createSnapshotWithDate(2L, "2011-05-02").setLast(true),
- createSnapshotWithDate(3L, "2011-05-19").setHasEvents(true).setLast(false),
- createSnapshotWithDate(4L, "2011-05-23") // to be deleted
- ));
-
- assertThat(toDelete).hasSize(2);
-
- List<Long> snapshotIds = snapshotIds(toDelete);
- assertThat(snapshotIds).contains(1L);
- assertThat(snapshotIds.contains(4L));
- }
-
- @Test
- public void test_isDeletable() {
- assertThat(KeepOneFilter.isDeletable(createSnapshotWithDate(1L, "2011-05-01"))).isTrue();
- assertThat(KeepOneFilter.isDeletable(createSnapshotWithDate(1L, "2011-05-01").setLast(true))).isFalse();
- assertThat(KeepOneFilter.isDeletable(createSnapshotWithDate(1L, "2011-05-01").setHasEvents(true))).isFalse();
- }
-
- private static List<Long> snapshotIds(List<PurgeableSnapshotDto> snapshotDtos){
- return newArrayList(Iterables.transform(snapshotDtos, new Function<PurgeableSnapshotDto, Long>() {
- @Override
- public Long apply(@Nullable PurgeableSnapshotDto input) {
- return input != null ? input.getSnapshotId() : null;
- }
- }));
- }
-
-}