]> source.dussan.org Git - sonarqube.git/commitdiff
Allow to replace default ProjectTree component.
authorJulien HENRY <julien.henry@sonarsource.com>
Fri, 15 Mar 2013 08:56:16 +0000 (09:56 +0100)
committerJulien HENRY <julien.henry@sonarsource.com>
Fri, 15 Mar 2013 08:56:16 +0000 (09:56 +0100)
sonar-batch/src/main/java/org/sonar/batch/DefaultProjectTree.java [new file with mode: 0644]
sonar-batch/src/main/java/org/sonar/batch/ProjectTree.java
sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java

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 (file)
index 0000000..0bd84ba
--- /dev/null
@@ -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);
+  }
+}
index 38334bb54c768d2eaf2b8068e2b9484b5a86b375..90540fd31e0a805c9f57f731f1fc6a3a1133d741 100644 (file)
  */
 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);
-  }
 }
index f57bbb2e08572fbdf9b52c41be8cf99024a9c305..406fb2d059d0c70b2963a37a7c4558a6ffdee50c 100644 (file)
@@ -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();
   }
 
-
 }