]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6589 remove ComputationContext.getReportReader and getReportMetadata
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Wed, 27 May 2015 15:53:42 +0000 (17:53 +0200)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Mon, 1 Jun 2015 15:08:28 +0000 (17:08 +0200)
27 files changed:
server/sonar-server/src/main/java/org/sonar/server/computation/ComputationContext.java
server/sonar-server/src/main/java/org/sonar/server/computation/component/ComponentTreeBuilders.java
server/sonar-server/src/main/java/org/sonar/server/computation/issue/IssueComputation.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/IndexComponentsStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/IndexSourceLinesStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/IndexTestsStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/ParseReportStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistDuplicationsStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistEventsStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistFileSourcesStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistMeasuresStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistNumberOfDaysSinceLastCommitStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistProjectLinksStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistTestsStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/PopulateComponentsUuidAndKeyStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/PurgeDatastoresStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/SendIssueNotificationsStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/SwitchSnapshotStep.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/ValidateProjectStep.java
server/sonar-server/src/test/java/org/sonar/server/computation/issue/IssueComputationTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/IndexComponentsStepTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/IndexSourceLinesStepTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/IndexTestsStepTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/ParseReportStepTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/PurgeDatastoresStepTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/SwitchSnapshotStepTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/ValidateProjectStepTest.java

index 4eac5d2c44ef0451332adc295c37b2f18e4b2082..e6edb3836840917b33dd77aaafff7b8c498a8148 100644 (file)
@@ -20,7 +20,6 @@
 package org.sonar.server.computation;
 
 import org.sonar.api.config.Settings;
-import org.sonar.batch.protocol.output.BatchReport;
 import org.sonar.server.computation.batch.BatchReportReader;
 import org.sonar.server.computation.component.Component;
 import org.sonar.server.computation.component.ComponentTreeBuilder;
@@ -28,30 +27,17 @@ import org.sonar.server.computation.language.LanguageRepository;
 import org.sonar.server.db.DbClient;
 
 public class ComputationContext implements org.sonar.server.computation.context.ComputationContext {
-  private final BatchReportReader reportReader;
   private final DbClient dbClient;
-  // cache of metadata as it's frequently accessed
-  private final BatchReport.Metadata reportMetadata;
   private final Component component;
   private final LanguageRepository languageRepository;
 
   public ComputationContext(BatchReportReader reportReader, String projectKey, Settings projectSettings, DbClient dbClient,
     ComponentTreeBuilder componentTreeBuilder, LanguageRepository languageRepository) {
-    this.reportReader = reportReader;
     this.dbClient = dbClient;
-    this.reportMetadata = reportReader.readMetadata();
     this.component = componentTreeBuilder.build(this);
     this.languageRepository = languageRepository;
   }
 
-  public BatchReport.Metadata getReportMetadata() {
-    return reportMetadata;
-  }
-
-  public BatchReportReader getReportReader() {
-    return reportReader;
-  }
-
   @Override
   public Component getRoot() {
     return component;
index 3369a91e1a073b1584c8d06b71880f03255180d9..7496e287df0e837c2c99e7ad314f5f39a0e4edbb 100644 (file)
@@ -64,7 +64,7 @@ public final class ComponentTreeBuilders {
     }
 
     private Component buildComponentRoot(ComputationContext computationContext, BatchReportReader reportReader) {
-      int rootComponentRef = computationContext.getReportMetadata().getRootComponentRef();
+      int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
       BatchReport.Component component = reportReader.readComponent(rootComponentRef);
       return new ComponentImpl(computationContext, component, reportReader, buildComponent(computationContext, rootComponentRef));
     }
index 568d2b9982d37fba4ec8b48ae1affcf6a19c50e6..76079a64a852dfc44780830b32b50f17e4fb02fb 100644 (file)
@@ -33,7 +33,6 @@ import org.sonar.api.utils.log.Logger;
 import org.sonar.api.utils.log.Loggers;
 import org.sonar.batch.protocol.output.BatchReport;
 import org.sonar.core.rule.RuleDto;
-import org.sonar.server.computation.ComputationContext;
 import org.sonar.server.computation.batch.BatchReportReader;
 import org.sonar.server.computation.component.ProjectSettingsRepository;
 import org.sonar.server.user.index.UserDoc;
@@ -65,12 +64,12 @@ public class IssueComputation {
     this.diskIssuesAppender = issueCache.newAppender();
   }
 
-  public void processComponentIssues(ComputationContext context, Iterable<BatchReport.Issue> issues, String componentUuid, @Nullable Integer componentReportRef,
+  public void processComponentIssues(Iterable<BatchReport.Issue> issues, String componentUuid, @Nullable Integer componentReportRef,
     String projectKey, String projectUuid) {
     linesCache.init(componentUuid, componentReportRef, reportReader);
     computeDefaultAssignee(projectSettingsRepository.getProjectSettings(projectKey).getString(CoreProperties.DEFAULT_ISSUE_ASSIGNEE));
     for (BatchReport.Issue reportIssue : issues) {
-      DefaultIssue issue = toDefaultIssue(context, componentUuid, reportIssue, projectKey, projectUuid);
+      DefaultIssue issue = toDefaultIssue(componentUuid, reportIssue, projectKey, projectUuid);
       if (issue.isNew()) {
         guessAuthor(issue);
         autoAssign(issue, defaultAssignee);
@@ -81,7 +80,7 @@ public class IssueComputation {
     linesCache.clear();
   }
 
-  private DefaultIssue toDefaultIssue(ComputationContext context, String componentUuid, BatchReport.Issue issue, String projectKey, String projectUuid) {
+  private DefaultIssue toDefaultIssue(String componentUuid, BatchReport.Issue issue, String projectKey, String projectUuid) {
     DefaultIssue target = new DefaultIssue();
     target.setKey(issue.getUuid());
     target.setComponentUuid(componentUuid);
@@ -96,7 +95,7 @@ public class IssueComputation {
     target.setDebt(issue.hasDebtInMinutes() ? Duration.create(issue.getDebtInMinutes()) : null);
     if (issue.hasDiffFields()) {
       FieldDiffs fieldDiffs = FieldDiffs.parse(issue.getDiffFields());
-      fieldDiffs.setCreationDate(new Date(context.getReportMetadata().getAnalysisDate()));
+      fieldDiffs.setCreationDate(new Date(reportReader.readMetadata().getAnalysisDate()));
       target.setCurrentChange(fieldDiffs);
     }
     target.setStatus(issue.getStatus());
index 80f6cfb87a62484fb26974be1df77eadcbd5f1e6..88d7227991096108e92a427a53749be410728356 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.server.computation.step;
 
 import org.sonar.core.resource.ResourceIndexerDao;
 import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
 import org.sonar.server.computation.component.DbComponentsRefCache;
 
 /**
@@ -30,15 +31,17 @@ import org.sonar.server.computation.component.DbComponentsRefCache;
 public class IndexComponentsStep implements ComputationStep {
   private final ResourceIndexerDao resourceIndexerDao;
   private final DbComponentsRefCache dbComponentsRefCache;
+  private final BatchReportReader reportReader;
 
-  public IndexComponentsStep(ResourceIndexerDao resourceIndexerDao, DbComponentsRefCache dbComponentsRefCache) {
+  public IndexComponentsStep(ResourceIndexerDao resourceIndexerDao, DbComponentsRefCache dbComponentsRefCache, BatchReportReader reportReader) {
     this.resourceIndexerDao = resourceIndexerDao;
     this.dbComponentsRefCache = dbComponentsRefCache;
+    this.reportReader = reportReader;
   }
 
   @Override
   public void execute(ComputationContext context) {
-    resourceIndexerDao.indexProject(dbComponentsRefCache.getByRef(context.getReportMetadata().getRootComponentRef()).getId());
+    resourceIndexerDao.indexProject(dbComponentsRefCache.getByRef(reportReader.readMetadata().getRootComponentRef()).getId());
   }
 
   @Override
index acdf08cb74dbeebd7989a802350686f0fdfacc29..ae6fbe0afb3cbb287ace05ae45b9171ba5db4c97 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.server.computation.step;
 
 import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
 import org.sonar.server.computation.component.DbComponentsRefCache;
 import org.sonar.server.source.index.SourceLineIndexer;
 
@@ -27,15 +28,17 @@ public class IndexSourceLinesStep implements ComputationStep {
 
   private final SourceLineIndexer indexer;
   private final DbComponentsRefCache dbComponentsRefCache;
+  private final BatchReportReader reportReader;
 
-  public IndexSourceLinesStep(SourceLineIndexer indexer, DbComponentsRefCache dbComponentsRefCache) {
+  public IndexSourceLinesStep(SourceLineIndexer indexer, DbComponentsRefCache dbComponentsRefCache, BatchReportReader reportReader) {
     this.indexer = indexer;
     this.dbComponentsRefCache = dbComponentsRefCache;
+    this.reportReader = reportReader;
   }
 
   @Override
   public void execute(ComputationContext context) {
-    indexer.index(dbComponentsRefCache.getByRef(context.getReportMetadata().getRootComponentRef()).getUuid());
+    indexer.index(dbComponentsRefCache.getByRef(reportReader.readMetadata().getRootComponentRef()).getUuid());
   }
 
   @Override
index b727452be997c41189cd222d20b59eb160529a77..37bc3c59dc633ff96cb1fcb58a18cc97a7321fa4 100644 (file)
@@ -21,6 +21,7 @@
 package org.sonar.server.computation.step;
 
 import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
 import org.sonar.server.computation.component.DbComponentsRefCache;
 import org.sonar.server.test.index.TestIndexer;
 
@@ -28,15 +29,17 @@ public class IndexTestsStep implements ComputationStep {
 
   private final TestIndexer indexer;
   private final DbComponentsRefCache dbComponentsRefCache;
+  private final BatchReportReader reportReader;
 
-  public IndexTestsStep(TestIndexer indexer, DbComponentsRefCache dbComponentsRefCache) {
+  public IndexTestsStep(TestIndexer indexer, DbComponentsRefCache dbComponentsRefCache, BatchReportReader reportReader) {
     this.indexer = indexer;
     this.dbComponentsRefCache = dbComponentsRefCache;
+    this.reportReader = reportReader;
   }
 
   @Override
   public void execute(ComputationContext context) {
-    indexer.index(dbComponentsRefCache.getByRef(context.getReportMetadata().getRootComponentRef()).getUuid());
+    indexer.index(dbComponentsRefCache.getByRef(reportReader.readMetadata().getRootComponentRef()).getUuid());
   }
 
   @Override
index 78a46f3c9ec95d2ee5bcb442d6153b95c85e1cd3..d1caf76ab5eeb5f67096a0788e3db2a54476dfcf 100644 (file)
@@ -47,10 +47,10 @@ public class ParseReportStep implements ComputationStep {
   }
 
   private void processDeletedComponents(ComputationContext context, IssueDepthTraversalTypeAwareVisitor visitor) {
-    int deletedComponentsCount = context.getReportMetadata().getDeletedComponentsCount();
+    int deletedComponentsCount = reportReader.readMetadata().getDeletedComponentsCount();
     for (int componentRef = 1; componentRef <= deletedComponentsCount; componentRef++) {
       BatchReport.Issues issues = reportReader.readDeletedComponentIssues(componentRef);
-      issueComputation.processComponentIssues(context, issues.getIssueList(), issues.getComponentUuid(), null, visitor.projectKey, visitor.projectUuid);
+      issueComputation.processComponentIssues(issues.getIssueList(), issues.getComponentUuid(), null, visitor.projectKey, visitor.projectUuid);
     }
   }
 
@@ -96,7 +96,7 @@ public class ParseReportStep implements ComputationStep {
     private void executeForComponent(Component component, ComputationContext context) {
       int componentRef = component.getRef();
       List<BatchReport.Issue> issues = reportReader.readComponentIssues(componentRef);
-      issueComputation.processComponentIssues(context, issues, component.getUuid(), componentRef, projectKey, projectUuid);
+      issueComputation.processComponentIssues(issues, component.getUuid(), componentRef, projectKey, projectUuid);
     }
   }
 }
index 5c5ba3067109fee557e18a0d86907043648053fb..15213ffbc0763489eb39e9ecd8870e8da2512a06 100644 (file)
@@ -55,7 +55,7 @@ public class PersistDuplicationsStep implements ComputationStep {
     try {
       MetricDto duplicationMetric = dbClient.metricDao().selectByKey(session, CoreMetrics.DUPLICATIONS_DATA_KEY);
       DuplicationContext duplicationContext = new DuplicationContext(context, duplicationMetric, session);
-      int rootComponentRef = context.getReportMetadata().getRootComponentRef();
+      int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
       recursivelyProcessComponent(duplicationContext, rootComponentRef);
       session.commit();
     } finally {
index aa8d40d295caaf276d4bb483ea0e64bb6a1c34b6..fbd482e58a5bea5f9c12d9be74d62e461a54f5bd 100644 (file)
@@ -50,7 +50,7 @@ public class PersistEventsStep implements ComputationStep {
   public void execute(ComputationContext context) {
     DbSession session = dbClient.openSession(false);
     try {
-      int rootComponentRef = context.getReportMetadata().getRootComponentRef();
+      int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
       recursivelyProcessComponent(session, context, rootComponentRef);
       session.commit();
     } finally {
@@ -60,8 +60,9 @@ public class PersistEventsStep implements ComputationStep {
 
   private void recursivelyProcessComponent(DbSession session, ComputationContext context, int componentRef) {
     BatchReport.Component component = reportReader.readComponent(componentRef);
-    processEvents(session, component, context.getReportMetadata().getAnalysisDate());
-    saveVersionEvent(session, component, context.getReportMetadata().getAnalysisDate());
+    long analysisDate = reportReader.readMetadata().getAnalysisDate();
+    processEvents(session, component, analysisDate);
+    saveVersionEvent(session, component, analysisDate);
 
     for (Integer childRef : component.getChildRefList()) {
       recursivelyProcessComponent(session, context, childRef);
index b06f5a087ca0447b614482e1624e7381301c322d..ffeaf4d04713d36e07a501b5c3efad01ec19d370 100644 (file)
@@ -65,12 +65,12 @@ public class PersistFileSourcesStep implements ComputationStep {
 
   @Override
   public void execute(ComputationContext context) {
-    int rootComponentRef = context.getReportMetadata().getRootComponentRef();
+    int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
     // Don't use batch insert for file_sources since keeping all data in memory can produce OOM for big files
     DbSession session = dbClient.openSession(false);
     try {
       final Map<String, FileSourceDto> previousFileSourcesByUuid = new HashMap<>();
-      String projectUuid = dbComponentsRefCache.getByRef(context.getReportMetadata().getRootComponentRef()).getUuid();
+      String projectUuid = dbComponentsRefCache.getByRef(rootComponentRef).getUuid();
       session.select("org.sonar.core.source.db.FileSourceMapper.selectHashesForProject", ImmutableMap.of("projectUuid", projectUuid, "dataType", Type.SOURCE),
         new ResultHandler() {
           @Override
index 8c42e477423f72eb0bff487bfcba692cae293575..627aacab9edbd91f120b76a0edea7233bd3f5ae8 100644 (file)
@@ -66,7 +66,7 @@ public class PersistMeasuresStep implements ComputationStep {
 
   @Override
   public void execute(ComputationContext context) {
-    int rootComponentRef = context.getReportMetadata().getRootComponentRef();
+    int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
     try (DbSession dbSession = dbClient.openSession(true)) {
       recursivelyProcessComponent(dbSession, context, rootComponentRef);
       dbSession.commit();
index 1c794d58e0ade023ed2e5791bc4375cc3a53d634..e3585ecd32dfc3da6bca44b37a91c6f2f1f258a7 100644 (file)
@@ -69,11 +69,11 @@ public class PersistNumberOfDaysSinceLastCommitStep implements ComputationStep {
 
   @Override
   public void execute(ComputationContext context) {
-    int rootComponentRef = context.getReportMetadata().getRootComponentRef();
+    int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
     recursivelyProcessComponent(context, rootComponentRef);
 
     if (!commitFound()) {
-      Long lastCommitFromIndex = lastCommitFromIndex(dbComponentsRefCache.getByRef(context.getReportMetadata().getRootComponentRef()).getUuid());
+      Long lastCommitFromIndex = lastCommitFromIndex(dbComponentsRefCache.getByRef(rootComponentRef).getUuid());
       lastCommitTimestamp = firstNonNull(lastCommitFromIndex, lastCommitTimestamp);
     }
 
@@ -119,7 +119,7 @@ public class PersistNumberOfDaysSinceLastCommitStep implements ComputationStep {
       dbClient.measureDao().insert(dbSession, new MeasureDto()
         .setValue((double) numberOfDaysSinceLastCommit)
         .setMetricId(metricCache.get(CoreMetrics.DAYS_SINCE_LAST_COMMIT_KEY).getId())
-        .setSnapshotId(context.getReportMetadata().getSnapshotId()));
+        .setSnapshotId(reportReader.readMetadata().getSnapshotId()));
       dbSession.commit();
     } finally {
       MyBatis.closeQuietly(dbSession);
index 7fd436b36ee8de91633d776ebf5c162e13f505c0..8fab3b3aa445871bee5548ad074d7a9f02e8694b 100644 (file)
@@ -70,7 +70,7 @@ public class PersistProjectLinksStep implements ComputationStep {
   public void execute(ComputationContext context) {
     DbSession session = dbClient.openSession(false);
     try {
-      int rootComponentRef = context.getReportMetadata().getRootComponentRef();
+      int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
       recursivelyProcessComponent(session, context, rootComponentRef);
       session.commit();
     } finally {
index fe4a9e3cb0863472eb938c697470072493b5c5fa..07e9b997c95bfe889ff9c12b6d1ee99d3721e8d6 100644 (file)
@@ -78,7 +78,7 @@ public class PersistTestsStep implements ComputationStep {
       visitor.visit(context.getRoot());
       session.commit();
       if (visitor.hasUnprocessedCoverageDetails) {
-        String projectKey = dbComponentsRefCache.getByRef(context.getReportMetadata().getRootComponentRef()).getKey();
+        String projectKey = dbComponentsRefCache.getByRef(reportReader.readMetadata().getRootComponentRef()).getKey();
         LOG.warn("Some coverage tests are not taken into account during analysis of project '{}'", projectKey);
       }
     } finally {
index 406f50d2c4b301e7abe4864177e12e3b89478397..cb0f362f0bbbcfcdf356ace0e8ff959b51ce6290 100644 (file)
@@ -52,8 +52,9 @@ public class PopulateComponentsUuidAndKeyStep implements ComputationStep {
   public void execute(ComputationContext context) {
     DbSession session = dbClient.openSession(false);
     try {
-      String branch = context.getReportMetadata().hasBranch() ? context.getReportMetadata().getBranch() : null;
-      BatchReport.Component project = reportReader.readComponent(context.getReportMetadata().getRootComponentRef());
+      BatchReport.Metadata metadata = reportReader.readMetadata();
+      String branch = metadata.hasBranch() ? metadata.getBranch() : null;
+      BatchReport.Component project = reportReader.readComponent(metadata.getRootComponentRef());
       String projectKey = ComponentKeys.createKey(project.getKey(), branch);
 
       Map<String, String> componentUuidsByKey = new HashMap<>();
index 14f8b6865da0186a1e8ca9fcbfbaf053ed14fd5a..731d4947c89f58b0bf9d9ad71ba31a7988fd5320 100644 (file)
@@ -25,6 +25,7 @@ import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
 import org.sonar.core.purge.IdUuidPair;
 import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
 import org.sonar.server.computation.component.DbComponentsRefCache;
 import org.sonar.server.computation.component.ProjectSettingsRepository;
 import org.sonar.server.db.DbClient;
@@ -35,19 +36,21 @@ public class PurgeDatastoresStep implements ComputationStep {
   private final DbClient dbClient;
   private final DbComponentsRefCache dbComponentsRefCache;
   private final ProjectSettingsRepository projectSettingsRepository;
+  private final BatchReportReader reportReader;
 
-  public PurgeDatastoresStep(DbClient dbClient, ProjectCleaner projectCleaner, DbComponentsRefCache dbComponentsRefCache, ProjectSettingsRepository projectSettingsRepository) {
+  public PurgeDatastoresStep(DbClient dbClient, ProjectCleaner projectCleaner, DbComponentsRefCache dbComponentsRefCache, ProjectSettingsRepository projectSettingsRepository, BatchReportReader reportReader) {
     this.projectCleaner = projectCleaner;
     this.dbClient = dbClient;
     this.dbComponentsRefCache = dbComponentsRefCache;
     this.projectSettingsRepository = projectSettingsRepository;
+    this.reportReader = reportReader;
   }
 
   @Override
   public void execute(ComputationContext context) {
     DbSession session = dbClient.openSession(true);
     try {
-      DbComponentsRefCache.DbComponent project = dbComponentsRefCache.getByRef(context.getReportMetadata().getRootComponentRef());
+      DbComponentsRefCache.DbComponent project = dbComponentsRefCache.getByRef(reportReader.readMetadata().getRootComponentRef());
       projectCleaner.purge(session, new IdUuidPair(project.getId(), project.getUuid()), projectSettingsRepository.getProjectSettings(project.getKey()));
       session.commit();
     } finally {
index 5a9ca7ff37a10d3fe897523f7c03e5aae2518cd2..79aee785e962c126fa79f0141a973634fd7ab933 100644 (file)
@@ -68,16 +68,16 @@ public class SendIssueNotificationsStep implements ComputationStep {
 
   @Override
   public void execute(ComputationContext context) {
-    DbComponent project = dbComponentsRefCache.getByRef(context.getReportMetadata().getRootComponentRef());
+    DbComponent project = dbComponentsRefCache.getByRef(reportReader.readMetadata().getRootComponentRef());
     if (service.hasProjectSubscribersForTypes(project.getUuid(), NOTIF_TYPES)) {
-      doExecute(context, project);
+      doExecute(project);
     }
   }
 
-  private void doExecute(ComputationContext context, DbComponent project) {
+  private void doExecute(DbComponent project) {
     NewIssuesStatistics newIssuesStats = new NewIssuesStatistics();
     CloseableIterator<DefaultIssue> issues = issueCache.traverse();
-    String projectName = reportReader.readComponent(context.getReportMetadata().getRootComponentRef()).getName();
+    String projectName = reportReader.readComponent(reportReader.readMetadata().getRootComponentRef()).getName();
     try {
       while (issues.hasNext()) {
         DefaultIssue issue = issues.next();
@@ -95,16 +95,17 @@ public class SendIssueNotificationsStep implements ComputationStep {
     } finally {
       issues.close();
     }
-    sendNewIssuesStatistics(context, newIssuesStats, project, projectName);
+    sendNewIssuesStatistics(newIssuesStats, project, projectName);
   }
 
-  private void sendNewIssuesStatistics(ComputationContext context, NewIssuesStatistics statistics, DbComponent project, String projectName) {
+  private void sendNewIssuesStatistics(NewIssuesStatistics statistics, DbComponent project, String projectName) {
     if (statistics.hasIssues()) {
       NewIssuesStatistics.Stats globalStatistics = statistics.globalStatistics();
+      long analysisDate = reportReader.readMetadata().getAnalysisDate();
       NewIssuesNotification notification = newIssuesNotificationFactory
         .newNewIssuesNotication()
         .setProject(project.getKey(), project.getUuid(), projectName)
-        .setAnalysisDate(new Date(context.getReportMetadata().getAnalysisDate()))
+        .setAnalysisDate(new Date(analysisDate))
         .setStatistics(projectName, globalStatistics)
         .setDebt(globalStatistics.debt());
       service.deliver(notification);
@@ -118,7 +119,7 @@ public class SendIssueNotificationsStep implements ComputationStep {
           .setAssignee(assignee);
         myNewIssuesNotification
           .setProject(project.getKey(), project.getUuid(), projectName)
-          .setAnalysisDate(new Date(context.getReportMetadata().getAnalysisDate()))
+          .setAnalysisDate(new Date(analysisDate))
           .setStatistics(projectName, assigneeStatistics)
           .setDebt(assigneeStatistics.debt());
 
index 5d39075307ec9cffa827f1fdb5dfbfe14116cf42..912c32ebf27b0b9588ae5a9bbf3322fd600017bb 100644 (file)
@@ -25,6 +25,7 @@ import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
 import org.sonar.server.component.db.SnapshotDao;
 import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
 import org.sonar.server.db.DbClient;
 
 import java.util.List;
@@ -32,16 +33,18 @@ import java.util.List;
 public class SwitchSnapshotStep implements ComputationStep {
 
   private final DbClient dbClient;
+  private final BatchReportReader reportReader;
 
-  public SwitchSnapshotStep(DbClient dbClient) {
+  public SwitchSnapshotStep(DbClient dbClient, BatchReportReader reportReader) {
     this.dbClient = dbClient;
+    this.reportReader = reportReader;
   }
 
   @Override
   public void execute(ComputationContext context) {
     DbSession session = dbClient.openSession(true);
     try {
-      long snapshotId = context.getReportMetadata().getSnapshotId();
+      long snapshotId = reportReader.readMetadata().getSnapshotId();
       disablePreviousSnapshot(session, snapshotId);
       enableCurrentSnapshot(session, snapshotId);
     } finally {
index 06cee079db866c80f960b67da44c2f0d327e69ea..747fec66c8eefdb24c6da175aafbb0032c46c7e9 100644 (file)
@@ -57,10 +57,12 @@ public class ValidateProjectStep implements ComputationStep {
 
   private final DbClient dbClient;
   private final Settings settings;
+  private final BatchReportReader reportReader;
 
-  public ValidateProjectStep(DbClient dbClient, Settings settings) {
+  public ValidateProjectStep(DbClient dbClient, Settings settings, BatchReportReader reportReader) {
     this.dbClient = dbClient;
     this.settings = settings;
+    this.reportReader = reportReader;
   }
 
   @Override
@@ -74,8 +76,7 @@ public class ValidateProjectStep implements ComputationStep {
           return input.key();
         }
       });
-      ValidateProjectsVisitor visitor = new ValidateProjectsVisitor(session, dbClient.componentDao(), context.getReportMetadata(),
-        context.getReportReader(), settings.getBoolean(CoreProperties.CORE_PREVENT_AUTOMATIC_PROJECT_CREATION), modulesByKey);
+      ValidateProjectsVisitor visitor = new ValidateProjectsVisitor(session, dbClient.componentDao(), settings.getBoolean(CoreProperties.CORE_PREVENT_AUTOMATIC_PROJECT_CREATION), modulesByKey);
       visitor.visit(context.getRoot());
 
       if (!visitor.validationMessages.isEmpty()) {
@@ -91,24 +92,19 @@ public class ValidateProjectStep implements ComputationStep {
     return "Validate project and modules keys";
   }
 
-  private static class ValidateProjectsVisitor extends DepthTraversalTypeAwareVisitor {
+  private class ValidateProjectsVisitor extends DepthTraversalTypeAwareVisitor {
     private final DbSession session;
     private final ComponentDao componentDao;
-    private final BatchReport.Metadata reportMetadata;
-    private final BatchReportReader batchReportReader;
     private final boolean preventAutomaticProjectCreation;
     private final Map<String, ComponentDto> modulesByKey;
     private final List<String> validationMessages = new ArrayList<>();
 
     private Component root;
 
-    public ValidateProjectsVisitor(DbSession session, ComponentDao componentDao, BatchReport.Metadata reportMetadata, BatchReportReader batchReportReader,
-      boolean preventAutomaticProjectCreation, Map<String, ComponentDto> modulesByKey) {
+    public ValidateProjectsVisitor(DbSession session, ComponentDao componentDao, boolean preventAutomaticProjectCreation, Map<String, ComponentDto> modulesByKey) {
       super(Component.Type.MODULE, Order.PRE_ORDER);
       this.session = session;
       this.componentDao = componentDao;
-      this.reportMetadata = reportMetadata;
-      this.batchReportReader = batchReportReader;
 
       this.preventAutomaticProjectCreation = preventAutomaticProjectCreation;
       this.modulesByKey = modulesByKey;
@@ -157,7 +153,7 @@ public class ValidateProjectStep implements ComputationStep {
     }
 
     private void validateBatchKey(Component component) {
-      String batchKey = batchReportReader.readComponent(component.getRef()).getKey();
+      String batchKey = reportReader.readComponent(component.getRef()).getKey();
       if (!ComponentKeys.isValidModuleKey(batchKey)) {
         validationMessages.add(String.format("\"%s\" is not a valid project or module key. "
           + "Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit.", batchKey));
@@ -166,10 +162,11 @@ public class ValidateProjectStep implements ComputationStep {
 
     @CheckForNull
     private void validateBranch() {
-      if (!reportMetadata.hasBranch()) {
+      BatchReport.Metadata metadata = reportReader.readMetadata();
+      if (!metadata.hasBranch()) {
         return;
       }
-      String branch = reportMetadata.getBranch();
+      String branch = metadata.getBranch();
       if (!ComponentKeys.isValidBranch(branch)) {
         validationMessages.add(String.format("\"%s\" is not a valid branch name. "
           + "Allowed characters are alphanumeric, '-', '_', '.' and '/'.", branch));
index 44759320a3e3a6b1ae4645dc05f663afeb5bf1c6..2ebea449e71d1e1e111879807cc9c822a76578b1 100644 (file)
@@ -224,6 +224,6 @@ public class IssueComputationTest {
   }
 
   private void process() {
-    sut.processComponentIssues(context, Arrays.asList(inputIssue.build()), "FILE_A", 1, PROJECT_KEY, "PROJECT_UUID");
+    sut.processComponentIssues(Arrays.asList(inputIssue.build()), "FILE_A", 1, PROJECT_KEY, "PROJECT_UUID");
   }
 }
index ccf6b1be883d144120d278846dc9756c8d2dd5d2..36031d1b3f8c93da175e08b722406425127558a5 100644 (file)
@@ -49,7 +49,7 @@ public class IndexComponentsStepTest extends BaseStepTest {
 
   ResourceIndexerDao resourceIndexerDao = mock(ResourceIndexerDao.class);
   DbComponentsRefCache dbComponentsRefCache = new DbComponentsRefCache();
-  IndexComponentsStep sut = new IndexComponentsStep(resourceIndexerDao, dbComponentsRefCache);
+  IndexComponentsStep sut = new IndexComponentsStep(resourceIndexerDao, dbComponentsRefCache, reportReader);
 
   @Test
   public void call_indexProject_of_dao() throws IOException {
index 1d7586d2ae7e64aba23f1074f5c43ab7d8a4f0ad..1b452ceaf7b2f120463e98974ecde7c6f0a59bb8 100644 (file)
@@ -27,7 +27,6 @@ import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.sonar.api.config.Settings;
-import org.sonar.batch.protocol.Constants;
 import org.sonar.batch.protocol.output.BatchReport;
 import org.sonar.core.persistence.DbTester;
 import org.sonar.server.computation.ComputationContext;
@@ -72,7 +71,7 @@ public class IndexSourceLinesStepTest extends BaseStepTest {
   protected ComputationStep step() {
     SourceLineIndexer sourceLineIndexer = new SourceLineIndexer(dbClient, esTester.client());
     sourceLineIndexer.setEnabled(true);
-    return new IndexSourceLinesStep(sourceLineIndexer, dbComponentsRefCache);
+    return new IndexSourceLinesStep(sourceLineIndexer, dbComponentsRefCache, reportReader);
   }
 
   @Test
index edb4ff90efae146261f8d77faa53339e114bd247..eaabcea7bba01793fb7ae648544a72914d16095a 100644 (file)
@@ -71,7 +71,7 @@ public class IndexTestsStepTest extends BaseStepTest {
   protected ComputationStep step() {
     TestIndexer testIndexer = new TestIndexer(dbClient, esTester.client());
     testIndexer.setEnabled(true);
-    return new IndexTestsStep(testIndexer, dbComponentsRefCache);
+    return new IndexTestsStep(testIndexer, dbComponentsRefCache, reportReader);
   }
 
   @Test
index c7574ebc8c7d506d1ed7ac46afc263a0bcb937ce..7b5a665a2126e9b72b6b321fdd9923ecc82c2249 100644 (file)
@@ -77,14 +77,14 @@ public class ParseReportStepTest extends BaseStepTest {
 
     sut.execute(context);
 
-    assertThat(context.getReportMetadata().getRootComponentRef()).isEqualTo(1);
-    assertThat(context.getReportMetadata().getDeletedComponentsCount()).isEqualTo(1);
+    assertThat(reportReader.readMetadata().getRootComponentRef()).isEqualTo(1);
+    assertThat(reportReader.readMetadata().getDeletedComponentsCount()).isEqualTo(1);
 
     // verify that all components are processed (currently only for issues)
-    verify(issueComputation).processComponentIssues(context, Collections.<BatchReport.Issue>emptyList(), "PROJECT_UUID", 1, PROJECT_KEY, "PROJECT_UUID");
-    verify(issueComputation).processComponentIssues(context, Collections.<BatchReport.Issue>emptyList(), "FILE1_UUID", 2, PROJECT_KEY, "PROJECT_UUID");
-    verify(issueComputation).processComponentIssues(context, Collections.<BatchReport.Issue>emptyList(), "FILE2_UUID", 3, PROJECT_KEY, "PROJECT_UUID");
-    verify(issueComputation).processComponentIssues(context, ISSUES_ON_DELETED_COMPONENT, "DELETED_UUID", null, PROJECT_KEY, "PROJECT_UUID");
+    verify(issueComputation).processComponentIssues(Collections.<BatchReport.Issue>emptyList(), "PROJECT_UUID", 1, PROJECT_KEY, "PROJECT_UUID");
+    verify(issueComputation).processComponentIssues(Collections.<BatchReport.Issue>emptyList(), "FILE1_UUID", 2, PROJECT_KEY, "PROJECT_UUID");
+    verify(issueComputation).processComponentIssues(Collections.<BatchReport.Issue>emptyList(), "FILE2_UUID", 3, PROJECT_KEY, "PROJECT_UUID");
+    verify(issueComputation).processComponentIssues(ISSUES_ON_DELETED_COMPONENT, "DELETED_UUID", null, PROJECT_KEY, "PROJECT_UUID");
     verify(issueComputation).afterReportProcessing();
   }
 
index db909759c887bec76884dd9e6d8bf639dd28cef4..df09612b63977fd3ae52dafb33f79ac00df77300 100644 (file)
@@ -56,7 +56,7 @@ public class PurgeDatastoresStepTest extends BaseStepTest {
   ProjectCleaner projectCleaner = mock(ProjectCleaner.class);
   DbComponentsRefCache dbComponentsRefCache = new DbComponentsRefCache();
   ProjectSettingsRepository projectSettingsRepository = mock(ProjectSettingsRepository.class);
-  PurgeDatastoresStep sut = new PurgeDatastoresStep(mock(DbClient.class, Mockito.RETURNS_DEEP_STUBS), projectCleaner, dbComponentsRefCache, projectSettingsRepository);
+  PurgeDatastoresStep sut = new PurgeDatastoresStep(mock(DbClient.class, Mockito.RETURNS_DEEP_STUBS), projectCleaner, dbComponentsRefCache, projectSettingsRepository, reportReader);
 
   Settings projectSettings;
 
index 55e368882ec2fd4eeb09c6e3a1a79304447c55dc..63f5209f717a0f9bc37bf9a3d5c305cf51104711 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.server.computation.step;
 
 import org.junit.Before;
 import org.junit.ClassRule;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.sonar.api.utils.DateUtils;
@@ -30,6 +31,7 @@ import org.sonar.batch.protocol.output.BatchReport;
 import org.sonar.core.persistence.DbTester;
 import org.sonar.server.component.db.SnapshotDao;
 import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
 import org.sonar.server.db.DbClient;
 import org.sonar.test.DbTests;
 
@@ -41,6 +43,8 @@ public class SwitchSnapshotStepTest {
 
   @ClassRule
   public static DbTester db = new DbTester();
+  @Rule
+  public BatchReportReaderRule reportReader = new BatchReportReaderRule();
 
   SwitchSnapshotStep sut;
 
@@ -49,19 +53,17 @@ public class SwitchSnapshotStepTest {
     db.truncateTables();
     System2 system2 = mock(System2.class);
     when(system2.now()).thenReturn(DateUtils.parseDate("2011-09-29").getTime());
-    this.sut = new SwitchSnapshotStep(new DbClient(db.database(), db.myBatis(), new SnapshotDao(system2)));
+    this.sut = new SwitchSnapshotStep(new DbClient(db.database(), db.myBatis(), new SnapshotDao(system2)), reportReader);
   }
 
   @Test
   public void one_switch_with_a_snapshot_and_his_children() {
     db.prepareDbUnit(getClass(), "snapshots.xml");
 
-    BatchReport.Metadata metadata = BatchReport.Metadata.newBuilder()
-      .setSnapshotId(1L).build();
-    ComputationContext context = mock(ComputationContext.class);
-    when(context.getReportMetadata()).thenReturn(metadata);
+    reportReader.setMetadata(BatchReport.Metadata.newBuilder()
+      .setSnapshotId(1L).build());
 
-    sut.execute(context);
+    sut.execute(mock(ComputationContext.class));
 
     db.assertDbUnit(getClass(), "snapshots-result.xml", "snapshots");
   }
index 33b34698f0f760628d6985480c9874741a8abffc..8b83fb10c93d28a3bccfde7cea89a6b6573c06e7 100644 (file)
@@ -69,7 +69,7 @@ public class ValidateProjectStepTest {
     dbSession = dbClient.openSession(false);
     settings = new Settings();
 
-    sut = new ValidateProjectStep(dbClient, settings);
+    sut = new ValidateProjectStep(dbClient, settings, reportReader);
   }
 
   @After
@@ -81,10 +81,10 @@ public class ValidateProjectStepTest {
   public void not_fail_if_provisioning_enforced_and_project_exists() throws Exception {
     reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(1)
-      .setType(Constants.ComponentType.PROJECT)
-      .setKey(PROJECT_KEY)
-      .build());
+        .setRef(1)
+        .setType(Constants.ComponentType.PROJECT)
+        .setKey(PROJECT_KEY)
+        .build());
 
     settings.appendProperty(CoreProperties.CORE_PREVENT_AUTOMATIC_PROJECT_CREATION, "true");
     dbClient.componentDao().insert(dbSession, ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY));
@@ -101,10 +101,10 @@ public class ValidateProjectStepTest {
 
     reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(1)
-      .setType(Constants.ComponentType.PROJECT)
-      .setKey(PROJECT_KEY)
-      .build());
+        .setRef(1)
+        .setType(Constants.ComponentType.PROJECT)
+        .setKey(PROJECT_KEY)
+        .build());
 
     settings.appendProperty(CoreProperties.CORE_PREVENT_AUTOMATIC_PROJECT_CREATION, "true");
 
@@ -116,10 +116,10 @@ public class ValidateProjectStepTest {
   public void fail_if_provisioning_not_enforced_and_project_does_not_exists() throws Exception {
     reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(1)
-      .setType(Constants.ComponentType.PROJECT)
-      .setKey(PROJECT_KEY)
-      .build());
+        .setRef(1)
+        .setType(Constants.ComponentType.PROJECT)
+        .setKey(PROJECT_KEY)
+        .build());
 
     settings.appendProperty(CoreProperties.CORE_PREVENT_AUTOMATIC_PROJECT_CREATION, "false");
 
@@ -130,13 +130,13 @@ public class ValidateProjectStepTest {
   @Test
   public void not_fail_on_valid_branch() throws Exception {
     reportReader.setMetadata(BatchReport.Metadata.newBuilder()
-      .setBranch("origin/master")
-      .build());
+        .setBranch("origin/master")
+        .build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(1)
-      .setType(Constants.ComponentType.PROJECT)
-      .setKey(PROJECT_KEY)
-      .build());
+        .setRef(1)
+        .setType(Constants.ComponentType.PROJECT)
+        .setKey(PROJECT_KEY)
+        .build());
 
     sut.execute(new ComputationContext(reportReader, null, null, null,
       ComponentTreeBuilders.from(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY + ":origin/master")), null));
@@ -149,13 +149,13 @@ public class ValidateProjectStepTest {
       "  o \"bran#ch\" is not a valid branch name. Allowed characters are alphanumeric, '-', '_', '.' and '/'.");
 
     reportReader.setMetadata(BatchReport.Metadata.newBuilder()
-      .setBranch("bran#ch")
-      .build());
+        .setBranch("bran#ch")
+        .build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(1)
-      .setType(Constants.ComponentType.PROJECT)
-      .setKey(PROJECT_KEY)
-      .build());
+        .setRef(1)
+        .setType(Constants.ComponentType.PROJECT)
+        .setKey(PROJECT_KEY)
+        .build());
 
     sut.execute(new ComputationContext(reportReader, null, null, null,
       ComponentTreeBuilders.from(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY + ":bran#ch")), null));
@@ -172,16 +172,16 @@ public class ValidateProjectStepTest {
 
     reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(1)
-      .setType(Constants.ComponentType.PROJECT)
-      .setKey(invalidProjectKey)
-      .addChildRef(2)
-      .build());
+        .setRef(1)
+        .setType(Constants.ComponentType.PROJECT)
+        .setKey(invalidProjectKey)
+        .addChildRef(2)
+        .build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(2)
-      .setType(Constants.ComponentType.MODULE)
-      .setKey("Module$Key")
-      .build());
+        .setRef(2)
+        .setType(Constants.ComponentType.MODULE)
+        .setKey("Module$Key")
+        .build());
 
     DumbComponent root = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", invalidProjectKey,
       new DumbComponent(Component.Type.MODULE, 2, "BCDE", "Module$Key"));
@@ -198,16 +198,16 @@ public class ValidateProjectStepTest {
 
     reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(1)
-      .setType(Constants.ComponentType.PROJECT)
-      .setKey(PROJECT_KEY)
-      .addChildRef(2)
-      .build());
+        .setRef(1)
+        .setType(Constants.ComponentType.PROJECT)
+        .setKey(PROJECT_KEY)
+        .addChildRef(2)
+        .build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(2)
-      .setType(Constants.ComponentType.MODULE)
-      .setKey(MODULE_KEY)
-      .build());
+        .setRef(2)
+        .setType(Constants.ComponentType.MODULE)
+        .setKey(MODULE_KEY)
+        .build());
 
     ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(MODULE_KEY);
     dbClient.componentDao().insert(dbSession, project);
@@ -228,16 +228,16 @@ public class ValidateProjectStepTest {
 
     reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(1)
-      .setType(Constants.ComponentType.PROJECT)
-      .setKey(PROJECT_KEY)
-      .addChildRef(2)
-      .build());
+        .setRef(1)
+        .setType(Constants.ComponentType.PROJECT)
+        .setKey(PROJECT_KEY)
+        .addChildRef(2)
+        .build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(2)
-      .setType(Constants.ComponentType.MODULE)
-      .setKey(MODULE_KEY)
-      .build());
+        .setRef(2)
+        .setType(Constants.ComponentType.MODULE)
+        .setKey(MODULE_KEY)
+        .build());
 
     ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY);
     ComponentDto anotherProject = ComponentTesting.newProjectDto().setKey(anotherProjectKey);
@@ -263,16 +263,16 @@ public class ValidateProjectStepTest {
 
     reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(1)
-      .setType(Constants.ComponentType.PROJECT)
-      .setKey(PROJECT_KEY)
-      .addChildRef(2)
-      .build());
+        .setRef(1)
+        .setType(Constants.ComponentType.PROJECT)
+        .setKey(PROJECT_KEY)
+        .addChildRef(2)
+        .build());
     reportReader.putComponent(BatchReport.Component.newBuilder()
-      .setRef(2)
-      .setType(Constants.ComponentType.MODULE)
-      .setKey(MODULE_KEY)
-      .build());
+        .setRef(2)
+        .setType(Constants.ComponentType.MODULE)
+        .setKey(MODULE_KEY)
+        .build());
 
     ComponentDto anotherProject = ComponentTesting.newProjectDto().setKey(anotherProjectKey);
     dbClient.componentDao().insert(dbSession, anotherProject);