aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch/src/main/java/org/sonar/batch/bootstrap/TaskBootstrapContainer.java
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2013-02-11 10:33:54 +0100
committerJulien HENRY <julien.henry@sonarsource.com>2013-02-11 10:33:54 +0100
commit72eac35f15c5b373840c1d80e26b39b20b18128b (patch)
treebe9aa541e80b5ce7340100b411ab1b6d5d7814ba /sonar-batch/src/main/java/org/sonar/batch/bootstrap/TaskBootstrapContainer.java
parentf535f02d56515a571430f7ccb77dcd315e525cbd (diff)
downloadsonarqube-72eac35f15c5b373840c1d80e26b39b20b18128b.tar.gz
sonarqube-72eac35f15c5b373840c1d80e26b39b20b18128b.zip
Rename pico *Module classes to *Container to not confuse with Sonar Module concept
Diffstat (limited to 'sonar-batch/src/main/java/org/sonar/batch/bootstrap/TaskBootstrapContainer.java')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/TaskBootstrapContainer.java79
1 files changed, 79 insertions, 0 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/TaskBootstrapContainer.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/TaskBootstrapContainer.java
new file mode 100644
index 00000000000..6504eeee35d
--- /dev/null
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/TaskBootstrapContainer.java
@@ -0,0 +1,79 @@
+/*
+ * 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.bootstrap;
+
+import org.sonar.api.batch.bootstrap.ProjectReactor;
+import org.sonar.api.task.TaskDefinition;
+import org.sonar.api.utils.SonarException;
+import org.sonar.batch.tasks.InspectionTask;
+import org.sonar.batch.tasks.ListTasksTask;
+import org.sonar.batch.tasks.Tasks;
+
+import javax.annotation.Nullable;
+
+/**
+ * Level-2 components. Collect tasks definitions.
+ */
+public class TaskBootstrapContainer extends Container {
+
+ private String taskCommand;
+
+ public TaskBootstrapContainer(@Nullable String taskCommand) {
+ this.taskCommand = taskCommand;
+ }
+
+ @Override
+ protected void configure() {
+ registerCoreTaskDefinitions();
+ registerTaskDefinitionExtensions();
+ container.addSingleton(Tasks.class);
+ }
+
+ private void registerCoreTaskDefinitions() {
+ container.addSingleton(InspectionTask.DEFINITION);
+ container.addSingleton(ListTasksTask.DEFINITION);
+ }
+
+ private void registerTaskDefinitionExtensions() {
+ ExtensionInstaller installer = container.getComponentByType(ExtensionInstaller.class);
+ installer.installTaskDefinitionExtensions(container);
+ }
+
+ @Override
+ protected void doStart() {
+ Tasks tasks = container.getComponentByType(Tasks.class);
+ executeTask(tasks.getTaskDefinition(taskCommand));
+ }
+
+ private void executeTask(TaskDefinition taskDefinition) {
+ boolean projectPresent = container.getComponentByType(ProjectReactor.class) != null;
+ if (ExtensionUtils.requiresProject(taskDefinition.getTask()) && !projectPresent) {
+ throw new SonarException("Task " + taskDefinition.getName() + " requires to be run on a project");
+ }
+ Container childModule = new TaskContainer(taskDefinition, projectPresent);
+ try {
+ installChild(childModule);
+ childModule.start();
+ } finally {
+ childModule.stop();
+ uninstallChild();
+ }
+ }
+}