aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2013-03-15 09:56:16 +0100
committerJulien HENRY <julien.henry@sonarsource.com>2013-03-15 09:56:16 +0100
commit2fe323cd854a8aa7f39cbed73a0384f7046a77ca (patch)
treec414de46ee5c46b459e484357ebe0d047c365677 /sonar-batch
parent914e1160fa83f1c4613b164fcb79d204f677938d (diff)
downloadsonarqube-2fe323cd854a8aa7f39cbed73a0384f7046a77ca.tar.gz
sonarqube-2fe323cd854a8aa7f39cbed73a0384f7046a77ca.zip
Allow to replace default ProjectTree component.
Diffstat (limited to 'sonar-batch')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/DefaultProjectTree.java97
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/ProjectTree.java78
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java57
3 files changed, 135 insertions, 97 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/DefaultProjectTree.java b/sonar-batch/src/main/java/org/sonar/batch/DefaultProjectTree.java
new file mode 100644
index 00000000000..0bd84ba8e3e
--- /dev/null
+++ b/sonar-batch/src/main/java/org/sonar/batch/DefaultProjectTree.java
@@ -0,0 +1,97 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar 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.
+ *
+ * Sonar 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 Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+package org.sonar.batch;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.apache.commons.lang.ObjectUtils;
+import org.sonar.api.batch.bootstrap.ProjectDefinition;
+import org.sonar.api.batch.bootstrap.ProjectReactor;
+import org.sonar.api.resources.Project;
+import org.sonar.batch.scan.ProjectReactorReady;
+
+import java.util.List;
+import java.util.Map;
+
+public class DefaultProjectTree implements ProjectTree {
+
+ private final ProjectConfigurator configurator;
+ private ProjectReactor projectReactor;
+
+ private List<Project> projects;
+ private Map<ProjectDefinition, Project> projectsByDef;
+
+ public DefaultProjectTree(ProjectReactor projectReactor,
+ ProjectConfigurator projectConfigurator,
+ ProjectReactorReady reactorReady) {
+ this.projectReactor = projectReactor;
+ this.configurator = projectConfigurator;
+ }
+
+ public void start() {
+ doStart(projectReactor.getProjects());
+ }
+
+ void doStart(List<ProjectDefinition> definitions) {
+ projects = Lists.newArrayList();
+ projectsByDef = Maps.newHashMap();
+
+ for (ProjectDefinition def : definitions) {
+ Project project = configurator.create(def);
+ projectsByDef.put(def, project);
+ projects.add(project);
+ }
+
+ for (Map.Entry<ProjectDefinition, Project> entry : projectsByDef.entrySet()) {
+ ProjectDefinition def = entry.getKey();
+ Project project = entry.getValue();
+ for (ProjectDefinition module : def.getSubProjects()) {
+ projectsByDef.get(module).setParent(project);
+ }
+ }
+
+ // Configure
+ for (Project project : projects) {
+ configurator.configure(project);
+ }
+ }
+
+ public List<Project> getProjects() {
+ return projects;
+ }
+
+ public Project getRootProject() {
+ for (Project project : projects) {
+ if (project.getParent() == null) {
+ return project;
+ }
+ }
+ throw new IllegalStateException("Can not find the root project from the list of Maven modules");
+ }
+
+ public ProjectDefinition getProjectDefinition(Project project) {
+ for (Map.Entry<ProjectDefinition, Project> entry : projectsByDef.entrySet()) {
+ if (ObjectUtils.equals(entry.getValue(), project)) {
+ return entry.getKey();
+ }
+ }
+ throw new IllegalStateException("Can not find ProjectDefinition for " + project);
+ }
+}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/ProjectTree.java b/sonar-batch/src/main/java/org/sonar/batch/ProjectTree.java
index 38334bb54c7..90540fd31e0 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/ProjectTree.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/ProjectTree.java
@@ -19,80 +19,18 @@
*/
package org.sonar.batch;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import org.apache.commons.lang.ObjectUtils;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.batch.bootstrap.ProjectReactor;
import org.sonar.api.resources.Project;
-import org.sonar.batch.scan.ProjectReactorReady;
-
-import java.util.List;
-import java.util.Map;
-
-public class ProjectTree {
-
- private final ProjectConfigurator configurator;
- private ProjectReactor projectReactor;
-
- private List<Project> projects;
- private Map<ProjectDefinition, Project> projectsByDef;
-
- public ProjectTree(ProjectReactor projectReactor,
- ProjectConfigurator projectConfigurator,
- ProjectReactorReady reactorReady) {
- this.projectReactor = projectReactor;
- this.configurator = projectConfigurator;
- }
-
- public void start() {
- doStart(projectReactor.getProjects());
- }
-
- void doStart(List<ProjectDefinition> definitions) {
- projects = Lists.newArrayList();
- projectsByDef = Maps.newHashMap();
-
- for (ProjectDefinition def : definitions) {
- Project project = configurator.create(def);
- projectsByDef.put(def, project);
- projects.add(project);
- }
-
- for (Map.Entry<ProjectDefinition, Project> entry : projectsByDef.entrySet()) {
- ProjectDefinition def = entry.getKey();
- Project project = entry.getValue();
- for (ProjectDefinition module : def.getSubProjects()) {
- projectsByDef.get(module).setParent(project);
- }
- }
-
- // Configure
- for (Project project : projects) {
- configurator.configure(project);
- }
- }
+/**
+ * TODO Maybe it should be moved in Sonar API?
+ * @author julien
+ *
+ */
+public interface ProjectTree {
- public List<Project> getProjects() {
- return projects;
- }
+ Project getRootProject();
- public Project getRootProject() {
- for (Project project : projects) {
- if (project.getParent() == null) {
- return project;
- }
- }
- throw new IllegalStateException("Can not find the root project from the list of Maven modules");
- }
+ ProjectDefinition getProjectDefinition(Project module);
- public ProjectDefinition getProjectDefinition(Project project) {
- for (Map.Entry<ProjectDefinition, Project> entry : projectsByDef.entrySet()) {
- if (ObjectUtils.equals(entry.getValue(), project)) {
- return entry.getKey();
- }
- }
- throw new IllegalStateException("Can not find ProjectDefinition for " + project);
- }
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
index f57bbb2e085..406fb2d059d 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
@@ -24,6 +24,7 @@ import org.sonar.api.batch.InstantiationStrategy;
import org.sonar.api.platform.ComponentContainer;
import org.sonar.api.resources.Project;
import org.sonar.batch.DefaultFileLinesContextFactory;
+import org.sonar.batch.DefaultProjectTree;
import org.sonar.batch.DefaultResourceCreationLock;
import org.sonar.batch.ProjectConfigurator;
import org.sonar.batch.ProjectTree;
@@ -57,38 +58,41 @@ public class ProjectScanContainer extends ComponentContainer {
@Override
protected void doBeforeStart() {
addBatchComponents();
+ addProjectComponents();
fixMavenExecutor();
addBatchExtensions();
}
+ protected void addProjectComponents() {
+ add(DefaultProjectTree.class);
+ }
+
private void addBatchComponents() {
add(
- DefaultResourceCreationLock.class,
- DefaultPersistenceManager.class,
- DependencyPersister.class,
- EventPersister.class,
- LinkPersister.class,
- MeasurePersister.class,
- MemoryOptimizer.class,
- DefaultResourcePermissions.class,
- DefaultResourcePersister.class,
- SourcePersister.class,
- DefaultNotificationManager.class,
- MetricProvider.class,
- ProjectExclusions.class,
- ProjectReactorReady.class,
- ProjectTree.class,
- ProjectConfigurator.class,
- DefaultIndex.class,
- DefaultFileLinesContextFactory.class,
- ProjectLock.class,
- LastSnapshots.class,
- ScanGraph.create(),
- TestPlanBuilder.class,
- TestableBuilder.class,
- ScanPerspectives.class,
- ScanGraphStore.class
- );
+ DefaultResourceCreationLock.class,
+ DefaultPersistenceManager.class,
+ DependencyPersister.class,
+ EventPersister.class,
+ LinkPersister.class,
+ MeasurePersister.class,
+ MemoryOptimizer.class,
+ DefaultResourcePermissions.class,
+ DefaultResourcePersister.class,
+ SourcePersister.class,
+ DefaultNotificationManager.class,
+ MetricProvider.class,
+ ProjectExclusions.class,
+ ProjectReactorReady.class,
+ ProjectConfigurator.class,
+ DefaultIndex.class,
+ DefaultFileLinesContextFactory.class,
+ ProjectLock.class,
+ LastSnapshots.class,
+ ScanGraph.create(),
+ TestPlanBuilder.class,
+ TestableBuilder.class,
+ ScanPerspectives.class,
+ ScanGraphStore.class);
}
private void fixMavenExecutor() {
@@ -123,5 +127,4 @@ public class ProjectScanContainer extends ComponentContainer {
new ModuleScanContainer(this, module).execute();
}
-
}