aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2015-06-02 13:34:07 +0200
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>2015-06-04 14:36:03 +0200
commit5cf7d52c0172117aa11b0fa0e4cc08215628bc52 (patch)
tree88e02164246a517f4971be10847776a54c3bd666
parent0cf12ff5662b16ac1ec8b89c0354447e02672195 (diff)
downloadsonarqube-5cf7d52c0172117aa11b0fa0e4cc08215628bc52.tar.gz
sonarqube-5cf7d52c0172117aa11b0fa0e4cc08215628bc52.zip
SONAR-6568 SONAR-6569 refacto PersisteEventStep to use Component tree
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistEventsStep.java140
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistEventsStepTest.java8
2 files changed, 78 insertions, 70 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistEventsStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistEventsStep.java
index e1a6af7af2e..b93863785ae 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistEventsStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistEventsStep.java
@@ -20,7 +20,10 @@
package org.sonar.server.computation.step;
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
import java.util.List;
+import javax.annotation.Nonnull;
import org.sonar.api.utils.System2;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
@@ -33,14 +36,14 @@ import org.sonar.server.computation.component.DepthTraversalTypeAwareVisitor;
import org.sonar.server.computation.component.TreeRootHolder;
import org.sonar.server.db.DbClient;
-import static org.sonar.server.computation.component.DepthTraversalTypeAwareVisitor.Order.PRE_ORDER;
+import static com.google.common.collect.Iterables.transform;
public class PersistEventsStep implements ComputationStep {
private final DbClient dbClient;
private final System2 system2;
- private final TreeRootHolder treeRootHolder;
private final BatchReportReader reportReader;
+ private final TreeRootHolder treeRootHolder;
public PersistEventsStep(DbClient dbClient, System2 system2, TreeRootHolder treeRootHolder, BatchReportReader reportReader) {
this.dbClient = dbClient;
@@ -51,91 +54,98 @@ public class PersistEventsStep implements ComputationStep {
@Override
public void execute() {
- DbSession session = dbClient.openSession(false);
+ final DbSession session = dbClient.openSession(false);
try {
- new EventVisitor(session, reportReader.readMetadata().getAnalysisDate()).visit(treeRootHolder.getRoot());
+ final long analysisDate = reportReader.readMetadata().getAnalysisDate();
+ new DepthTraversalTypeAwareVisitor(Component.Type.FILE, DepthTraversalTypeAwareVisitor.Order.PRE_ORDER) {
+ @Override
+ public void visitProject(Component project) {
+ processComponent(project, session, analysisDate);
+ }
+
+ @Override
+ public void visitModule(Component module) {
+ processComponent(module, session, analysisDate);
+ }
+
+ @Override
+ public void visitDirectory(Component directory) {
+ processComponent(directory, session, analysisDate);
+ }
+
+ @Override
+ public void visitFile(Component file) {
+ processComponent(file, session, analysisDate);
+ }
+ }.visit(treeRootHolder.getRoot());
session.commit();
} finally {
MyBatis.closeQuietly(session);
}
}
- private class EventVisitor extends DepthTraversalTypeAwareVisitor {
-
- private final DbSession session;
- private final long analysisDate;
-
- private EventVisitor(DbSession session, long analysisDate) {
- super(Component.Type.FILE, PRE_ORDER);
- this.session = session;
- this.analysisDate = analysisDate;
- }
-
- @Override
- public void visitModule(Component module) {
- visitProjectOrModule(module);
- }
-
- @Override
- public void visitProject(Component project) {
- visitProjectOrModule(project);
- }
+ private void processComponent(Component component, DbSession session, long analysisDate) {
+ BatchReport.Component batchComponent = reportReader.readComponent(component.getRef());
+ processEvents(session, batchComponent, component, analysisDate);
+ saveVersionEvent(session, batchComponent, component, analysisDate);
+ }
- private void visitProjectOrModule(Component component) {
- BatchReport.Component batchComponent = reportReader.readComponent(component.getRef());
- processEvents(batchComponent, component);
- saveVersionEvent(batchComponent, component);
+ private void processEvents(DbSession session, final BatchReport.Component batchComponent, final Component component, final Long analysisDate) {
+ List<BatchReport.Event> events = batchComponent.getEventList();
+ if (events.isEmpty()) {
+ return;
}
- private void processEvents(BatchReport.Component batchComponent, Component component) {
- List<BatchReport.Event> events = batchComponent.getEventList();
- if (!events.isEmpty()) {
- for (BatchReport.Event event : events) {
- dbClient.eventDao().insert(session, newBaseEvent(component, batchComponent.getSnapshotId())
+ List<EventDto> batchEventDtos = Lists.newArrayList(transform(events, new Function<BatchReport.Event, EventDto>() {
+ @Override
+ public EventDto apply(@Nonnull BatchReport.Event event) {
+ return newBaseEvent(batchComponent, component, analysisDate)
.setName(event.getName())
.setCategory(convertCategory(event.getCategory()))
.setDescription(event.hasDescription() ? event.getDescription() : null)
- .setData(event.hasEventData() ? event.getEventData() : null)
- );
- }
+ .setData(event.hasEventData() ? event.getEventData() : null);
}
+ }));
+
+ for (EventDto batchEventDto : batchEventDtos) {
+ dbClient.eventDao().insert(session, batchEventDto);
}
+ }
- private void saveVersionEvent(BatchReport.Component batchComponent, Component component) {
- if (batchComponent.hasVersion()) {
- deletePreviousEventsHavingSameVersion(batchComponent, component);
- dbClient.eventDao().insert(session, newBaseEvent(component, batchComponent.getSnapshotId())
- .setName(batchComponent.getVersion())
- .setCategory(EventDto.CATEGORY_VERSION)
- );
- }
+ private void saveVersionEvent(DbSession session, BatchReport.Component batchComponent, Component component, Long analysisDate) {
+ if (batchComponent.hasVersion()) {
+ deletePreviousEventsHavingSameVersion(session, batchComponent, component);
+ dbClient.eventDao().insert(session, newBaseEvent(batchComponent, component, analysisDate)
+ .setName(batchComponent.getVersion())
+ .setCategory(EventDto.CATEGORY_VERSION)
+ );
}
+ }
- private void deletePreviousEventsHavingSameVersion(BatchReport.Component batchComponent, Component component) {
- for (EventDto dto : dbClient.eventDao().selectByComponentUuid(session, component.getUuid())) {
- if (dto.getCategory().equals(EventDto.CATEGORY_VERSION) && dto.getName().equals(batchComponent.getVersion())) {
- dbClient.eventDao().delete(session, dto.getId());
- }
+ private void deletePreviousEventsHavingSameVersion(DbSession session, BatchReport.Component batchComponent, Component component) {
+ for (EventDto dto : dbClient.eventDao().selectByComponentUuid(session, component.getUuid())) {
+ if (dto.getCategory().equals(EventDto.CATEGORY_VERSION) && dto.getName().equals(batchComponent.getVersion())) {
+ dbClient.eventDao().delete(session, dto.getId());
}
}
+ }
- private EventDto newBaseEvent(Component component, long snapshotId) {
- return new EventDto()
- .setComponentUuid(component.getUuid())
- .setSnapshotId(snapshotId)
- .setCreatedAt(system2.now())
- .setDate(analysisDate);
- }
+ private EventDto newBaseEvent(BatchReport.Component batchComponent, Component component, Long analysisDate) {
+ return new EventDto()
+ .setComponentUuid(component.getUuid())
+ .setSnapshotId(batchComponent.getSnapshotId())
+ .setCreatedAt(system2.now())
+ .setDate(analysisDate);
+ }
- private String convertCategory(Constants.EventCategory category) {
- switch (category) {
- case ALERT:
- return EventDto.CATEGORY_ALERT;
- case PROFILE:
- return EventDto.CATEGORY_PROFILE;
- default:
- throw new IllegalArgumentException(String.format("Unsupported category %s", category.name()));
- }
+ private static String convertCategory(Constants.EventCategory category) {
+ switch (category) {
+ case ALERT:
+ return EventDto.CATEGORY_ALERT;
+ case PROFILE:
+ return EventDto.CATEGORY_PROFILE;
+ default:
+ throw new IllegalArgumentException(String.format("Unsupported category %s", category.name()));
}
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistEventsStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistEventsStepTest.java
index d359abcec66..3e9835f25e1 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistEventsStepTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistEventsStepTest.java
@@ -47,12 +47,10 @@ public class PersistEventsStepTest extends BaseStepTest {
@ClassRule
public static DbTester dbTester = new DbTester();
-
- @Rule
- public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule();
-
@Rule
public BatchReportReaderRule reportReader = new BatchReportReaderRule();
+ @Rule
+ public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule();
DbSession session;
PersistEventsStep step;
@@ -138,7 +136,7 @@ public class PersistEventsStepTest extends BaseStepTest {
dbTester.prepareDbUnit(getClass(), "empty.xml");
treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", null,
- new DumbComponent(Component.Type.MODULE, 2, "BCDE", null)));
+ new DumbComponent(Component.Type.MODULE, 2, "BCDE", null)));
reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)