diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2013-02-11 10:33:54 +0100 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2013-02-11 10:33:54 +0100 |
commit | 72eac35f15c5b373840c1d80e26b39b20b18128b (patch) | |
tree | be9aa541e80b5ce7340100b411ab1b6d5d7814ba /sonar-batch/src/main/java/org/sonar/batch/bootstrap/TaskBootstrapContainer.java | |
parent | f535f02d56515a571430f7ccb77dcd315e525cbd (diff) | |
download | sonarqube-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.java | 79 |
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(); + } + } +} |