]> source.dussan.org Git - sonarqube.git/commitdiff
fix quality flaws and refactorings
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Fri, 7 Nov 2014 09:30:34 +0000 (10:30 +0100)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Mon, 10 Nov 2014 07:44:10 +0000 (08:44 +0100)
12 files changed:
server/sonar-server/src/main/java/org/sonar/server/computation/ComputationStepRegistry.java
server/sonar-server/src/main/java/org/sonar/server/computation/DataCleanerStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/InvalidatePreviewCacheStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/db/AnalysisReportDao.java
server/sonar-server/src/main/java/org/sonar/server/computation/ws/ActiveAnalysisReportsAction.java
server/sonar-server/src/main/java/org/sonar/server/computation/ws/AnalysisReportHistorySearchAction.java
server/sonar-server/src/main/java/org/sonar/server/properties/package-info.java [new file with mode: 0644]
server/sonar-server/src/test/java/org/sonar/server/computation/DataCleanerStepTest.java
sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/ProjectPurgeTask.java
sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/DefaultPeriodCleaner.java
sonar-core/src/main/java/org/sonar/core/purge/PurgeDao.java
sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/ProjectPurgeTaskTest.java

index 4362514650fad324fffb88dd1a6d7b14417f4de1..0049337f07dccbd0d288181b541a6408c886159f 100644 (file)
@@ -38,12 +38,18 @@ public class ComputationStepRegistry implements ServerComponent {
 
   public List<ComputationStep> steps() {
     List<ComputationStep> steps = Lists.newArrayList();
-    steps.add(pico.getComponentByType(SynchronizeProjectPermissionsStep.class)); // project only
-    steps.add(pico.getComponentByType(SwitchSnapshotStep.class)); // project & views
-    steps.add(pico.getComponentByType(InvalidatePreviewCacheStep.class)); // project only
-    steps.add(pico.getComponentByType(ComponentIndexationInDatabaseStep.class)); // project & views
-    steps.add(pico.getComponentByType(DataCleanerStep.class)); // project & views
-    steps.add(pico.getComponentByType(IndexProjectIssuesStep.class)); // project only
+    // project only
+    steps.add(pico.getComponentByType(SynchronizeProjectPermissionsStep.class));
+    // project & views
+    steps.add(pico.getComponentByType(SwitchSnapshotStep.class));
+    // project only
+    steps.add(pico.getComponentByType(InvalidatePreviewCacheStep.class));
+    // project & views
+    steps.add(pico.getComponentByType(ComponentIndexationInDatabaseStep.class));
+    // project & views
+    steps.add(pico.getComponentByType(DataCleanerStep.class));
+    // project only
+    steps.add(pico.getComponentByType(IndexProjectIssuesStep.class));
 
     return ImmutableList.copyOf(steps);
   }
index 5aa590f5ee9345d9b010b39220100820dd70851f..6c6b7f9a280027a8f502c7a6f36d5f3984385297 100644 (file)
@@ -49,8 +49,11 @@ public class DataCleanerStep implements ComputationStep {
     Settings settings = projectSettingsFactory.newProjectSettings(projectId, session);
     PurgeConfiguration purgeConfiguration = newDefaultPurgeConfiguration(projectId, settings);
 
-    purgeTask.purge(purgeConfiguration, settings, session);
-    issueIndex.deleteClosedIssuesOfProjectBefore(project.uuid(), purgeConfiguration.maxLiveDateOfClosedIssues());
+    purgeTask.purge(session, purgeConfiguration, settings);
+
+    if (purgeConfiguration.maxLiveDateOfClosedIssues() != null) {
+      issueIndex.deleteClosedIssuesOfProjectBefore(project.uuid(), purgeConfiguration.maxLiveDateOfClosedIssues());
+    }
   }
 
   @Override
index 4bb9f9fd470bf422cb6b5385aacffb57816904ed..fba5af6eb4eec87e0fffd7952a3b5e0deafe1e74 100644 (file)
@@ -40,7 +40,9 @@ public class InvalidatePreviewCacheStep implements ComputationStep {
   }
 
   private PropertyDto newProjectPreviewCacheProperty(ComponentDto project) {
-    return new PropertyDto().setKey(PreviewCache.SONAR_PREVIEW_CACHE_LAST_UPDATE_KEY).setResourceId(project.getId())
+    return new PropertyDto()
+      .setKey(PreviewCache.SONAR_PREVIEW_CACHE_LAST_UPDATE_KEY)
+      .setResourceId(project.getId())
       .setValue(String.valueOf(System.currentTimeMillis()));
   }
 
index 8d70d3a0e3054bb8d0121dcb0d94fe1391300ace..5ea9eb3e96caa0f3aa712c1bae1de9fd780880a4 100644 (file)
@@ -71,7 +71,6 @@ public class AnalysisReportDao extends BaseDao<AnalysisReportMapper, AnalysisRep
   }
 
   public AnalysisReportDto getNextAvailableReport(DbSession session) {
-    // TODO to improve – the query should return one element or null
     List<AnalysisReportDto> reports = mapper(session).selectNextAvailableReport(PENDING, WORKING);
 
     if (reports.isEmpty()) {
index 7c1c4e9bc98562c94ed95c5d515b9502bf407e5b..4c1e7f038bbf1f41c857bda62f217abbbdafd9e1 100644 (file)
@@ -57,7 +57,6 @@ public class ActiveAnalysisReportsAction implements RequestHandler {
       json.beginObject();
       json.prop("id", report.getId());
       json.prop("project", report.getProjectKey());
-      // TODO give the project name !
       json.prop("projectName", report.getProjectKey());
       json.propDateTime("startedAt", report.getStartedAt());
       json.propDateTime("finishedAt", report.getFinishedAt());
index 06dad05d9f57ff8b70a8b712007ed2bc2e8bd0e9..be4cef61c1cc092195adf987afe9c298b8421951 100644 (file)
@@ -67,10 +67,6 @@ public class AnalysisReportHistorySearchAction implements RequestHandler {
 
   @Override
   public void handle(Request request, Response response) {
-    /*
-     * TODO should be done in a specific service, not logService but maybe something like AnalysisReportHistory ? A Facade Service could be
-     * needed
-     */
     checkUserRights();
 
     ActivityQuery query = logService.newActivityQuery();
diff --git a/server/sonar-server/src/main/java/org/sonar/server/properties/package-info.java b/server/sonar-server/src/main/java/org/sonar/server/properties/package-info.java
new file mode 100644 (file)
index 0000000..bc5ad07
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * 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.server.properties;
+
+import javax.annotation.ParametersAreNonnullByDefault;
index 67dd2357d594035bbecb2625efc8dac5eae23b62..562a9ad8e42085c897cfd03813707f700df9029a 100644 (file)
@@ -37,9 +37,7 @@ import java.util.Date;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyLong;
 import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
 
 public class DataCleanerStepTest {
 
@@ -56,6 +54,7 @@ public class DataCleanerStepTest {
     this.settings = mock(ProjectSettings.class);
     this.projectSettingsFactory = mock(ProjectSettingsFactory.class);
     when(projectSettingsFactory.newProjectSettings(anyLong(), any(DbSession.class))).thenReturn(settings);
+    when(settings.getInt(any(String.class))).thenReturn(123);
 
     this.sut = new DataCleanerStep(projectSettingsFactory, purgeTask, issueIndex);
   }
@@ -68,7 +67,7 @@ public class DataCleanerStepTest {
     sut.execute(mock(DbSession.class), report, project);
 
     verify(projectSettingsFactory).newProjectSettings(anyLong(), any(DbSession.class));
-    verify(purgeTask).purge(any(PurgeConfiguration.class), any(Settings.class), any(DbSession.class));
+    verify(purgeTask).purge(any(DbSession.class), any(PurgeConfiguration.class), any(Settings.class));
     verify(issueIndex).deleteClosedIssuesOfProjectBefore(anyString(), any(Date.class));
   }
 }
index f633414e2cdcdb16b336f033a5e8fb5cb9c43c24..96b391a06ea0fa5e50af9d54aa84ed362f015350 100644 (file)
@@ -44,11 +44,11 @@ public class ProjectPurgeTask implements ServerComponent {
     this.profiler = profiler;
   }
 
-  public ProjectPurgeTask purge(PurgeConfiguration configuration, Settings settings, DbSession session) {
+  public ProjectPurgeTask purge(DbSession session, PurgeConfiguration configuration, Settings settings) {
     long start = System.currentTimeMillis();
     profiler.reset();
-    cleanHistoricalData(configuration.rootProjectId(), settings, session);
-    doPurge(configuration, session);
+    cleanHistoricalData(session, configuration.rootProjectId(), settings);
+    doPurge(session, configuration);
     if (settings.getBoolean(CoreProperties.PROFILING_LOG_PROPERTY)) {
       long duration = System.currentTimeMillis() - start;
       LOG.info("\n -------- Profiling for purge: " + TimeUtils.formatDuration(duration) + " --------\n");
@@ -58,18 +58,18 @@ public class ProjectPurgeTask implements ServerComponent {
     return this;
   }
 
-  private void cleanHistoricalData(long resourceId, Settings settings, DbSession session) {
+  private void cleanHistoricalData(DbSession session, long resourceId, Settings settings) {
     try {
-      periodCleaner.clean(resourceId, settings, session);
+      periodCleaner.clean(session, resourceId, settings);
     } catch (Exception e) {
       // purge errors must no fail the batch
       LOG.error("Fail to clean historical data [id=" + resourceId + "]", e);
     }
   }
 
-  private void doPurge(PurgeConfiguration configuration, DbSession session) {
+  private void doPurge(DbSession session, PurgeConfiguration configuration) {
     try {
-      purgeDao.purge(configuration, session);
+      purgeDao.purge(session, configuration);
     } catch (Exception e) {
       // purge errors must no fail the report analysis
       LOG.error("Fail to purge data [id=" + configuration.rootProjectId() + "]", e);
index aedf34cf311ccdca685d917b148a7a2520105887..e87214d4e0e7f1df7015f3ac7d89e78b57e3bab3 100644 (file)
@@ -61,7 +61,7 @@ public class DefaultPeriodCleaner implements TaskExtension, ServerExtension {
     }
   }
 
-  public void clean(long projectId, Settings settings, DbSession session) {
+  public void clean(DbSession session, long projectId, Settings settings) {
     doClean(projectId, new Filters(settings).all(), session);
   }
 
index 55b5981f1b59d98c5f1c861eeeae0f68ea25b4b4..a7bde27f95e0d1b030c186c5e142e4c4a5606b88 100644 (file)
@@ -57,7 +57,7 @@ public class PurgeDao {
   public PurgeDao purge(PurgeConfiguration conf) {
     DbSession session = mybatis.openSession(true);
     try {
-      purge(conf, session);
+      purge(session, conf);
       session.commit();
     } finally {
       MyBatis.closeQuietly(session);
@@ -65,7 +65,7 @@ public class PurgeDao {
     return this;
   }
 
-  public void purge(PurgeConfiguration conf, DbSession session) {
+  public void purge(DbSession session, PurgeConfiguration conf) {
     PurgeMapper mapper = session.getMapper(PurgeMapper.class);
     PurgeCommands commands = new PurgeCommands(session, mapper, profiler);
     List<ResourceDto> projects = getProjects(conf.rootProjectId(), session);
index b9e034193ebcc554198a22c2d85b52ff67b6b271..1ba7d65497efb87d24a1f5580d079ce2a9e8c03a 100644 (file)
@@ -61,7 +61,7 @@ public class ProjectPurgeTaskTest {
     Settings settings = mock(Settings.class);
     when(settings.getBoolean(CoreProperties.PROFILING_LOG_PROPERTY)).thenReturn(false);
 
-    sut.purge(mock(PurgeConfiguration.class), settings, mock(DbSession.class));
+    sut.purge(mock(DbSession.class), mock(PurgeConfiguration.class), settings);
 
     verify(profiler, never()).dump(anyLong(), any(Logger.class));
   }
@@ -71,7 +71,7 @@ public class ProjectPurgeTaskTest {
     Settings settings = mock(Settings.class);
     when(settings.getBoolean(CoreProperties.PROFILING_LOG_PROPERTY)).thenReturn(true);
 
-    sut.purge(mock(PurgeConfiguration.class), settings, mock(DbSession.class));
+    sut.purge(mock(DbSession.class), mock(PurgeConfiguration.class), settings);
 
     verify(profiler, times(1)).dump(anyLong(), any(Logger.class));
   }
@@ -80,17 +80,17 @@ public class ProjectPurgeTaskTest {
   public void if_dao_purge_fails_it_should_not_interrupt_program_execution() throws Exception {
     when(dao.purge(any(PurgeConfiguration.class))).thenThrow(NullPointerException.class);
 
-    sut.purge(mock(PurgeConfiguration.class), mock(Settings.class), mock(DbSession.class));
+    sut.purge(mock(DbSession.class), mock(PurgeConfiguration.class), mock(Settings.class));
 
-    verify(dao, times(1)).purge(any(PurgeConfiguration.class), any(DbSession.class));
+    verify(dao, times(1)).purge(any(DbSession.class), any(PurgeConfiguration.class));
   }
 
   @Test
   public void if_profiler_cleaning_fails_it_should_not_interrupt_program_execution() throws Exception {
     doThrow(NullPointerException.class).when(periodCleaner).clean(anyLong(), any(Settings.class));
 
-    sut.purge(mock(PurgeConfiguration.class), mock(Settings.class), mock(DbSession.class));
+    sut.purge(mock(DbSession.class), mock(PurgeConfiguration.class), mock(Settings.class));
 
-    verify(periodCleaner, times(1)).clean(anyLong(), any(Settings.class), any(DbSession.class));
+    verify(periodCleaner, times(1)).clean(any(DbSession.class), anyLong(), any(Settings.class));
   }
 }