From e4ba9869d57dc4dd92648b5c8406d26fcd550d46 Mon Sep 17 00:00:00 2001 From: Duarte Meneses Date: Mon, 15 Jun 2015 14:59:17 +0200 Subject: SONARUNNER-136 and SONARUNNER-137 - Provide a new API to run several analysis with same process and an interactive mode --- .../sonar/runner/batch/BatchIsolatedLauncher.java | 109 +++++++++++++++++++++ .../org/sonar/runner/batch/IsolatedLauncher.java | 95 ------------------ 2 files changed, 109 insertions(+), 95 deletions(-) create mode 100644 sonar-runner-batch/src/main/java/org/sonar/runner/batch/BatchIsolatedLauncher.java delete mode 100644 sonar-runner-batch/src/main/java/org/sonar/runner/batch/IsolatedLauncher.java (limited to 'sonar-runner-batch/src/main/java/org') diff --git a/sonar-runner-batch/src/main/java/org/sonar/runner/batch/BatchIsolatedLauncher.java b/sonar-runner-batch/src/main/java/org/sonar/runner/batch/BatchIsolatedLauncher.java new file mode 100644 index 0000000..069f16a --- /dev/null +++ b/sonar-runner-batch/src/main/java/org/sonar/runner/batch/BatchIsolatedLauncher.java @@ -0,0 +1,109 @@ +/* + * SonarQube Runner - Batch + * Copyright (C) 2011 SonarSource + * dev@sonar.codehaus.org + * + * This program 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. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 + */ +package org.sonar.runner.batch; + +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.joran.JoranConfigurator; +import ch.qos.logback.core.joran.spi.JoranException; +import com.google.common.annotations.VisibleForTesting; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import org.slf4j.LoggerFactory; +import org.sonar.api.utils.SonarException; +import org.sonar.batch.bootstrapper.Batch; +import org.sonar.batch.bootstrapper.EnvironmentInformation; + +/** + * This class is executed within the classloader provided by the server. It contains the installed plugins and + * the same version of sonar-batch as the server. + */ +public class BatchIsolatedLauncher implements IsolatedLauncher { + + private static final String WARN = "WARN"; + private static final String DEBUG = "DEBUG"; + private static final String FALSE = "false"; + + private Batch batch = null; + + @Override + public void start(Properties globalProperties, List extensions) { + batch = createBatch(globalProperties, extensions); + batch.start(); + } + + @Override + public void stop() { + batch.stop(); + } + + @Override + public void execute(Properties properties) { + batch.executeTask((Map) properties); + } + + Batch createBatch(Properties properties, List extensions) { + initLogging(properties); + EnvironmentInformation env = new EnvironmentInformation(properties.getProperty("sonarRunner.app"), properties.getProperty("sonarRunner.appVersion")); + return Batch.builder() + .setEnvironment(env) + .addComponents(extensions) + .setBootstrapProperties((Map) properties) + .build(); + } + + private void initLogging(Properties props) { + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + JoranConfigurator jc = new JoranConfigurator(); + jc.setContext(context); + context.reset(); + try (InputStream input = Batch.class.getResourceAsStream("/org/sonar/batch/logback.xml")) { + System.setProperty("ROOT_LOGGER_LEVEL", isDebug(props) ? DEBUG : "INFO"); + context.putProperty("SQL_LOGGER_LEVEL", getSqlLevel(props)); + context.putProperty("SQL_RESULTS_LOGGER_LEVEL", getSqlResultsLevel(props)); + jc.doConfigure(input); + } catch (JoranException e) { + throw new SonarException("can not initialize logging", e); + } catch (IOException e1) { + throw new SonarException("couldn't close resource", e1); + } + } + + @VisibleForTesting + protected boolean isDebug(Properties props) { + return Boolean.parseBoolean(props.getProperty("sonar.verbose", FALSE)); + } + + @VisibleForTesting + protected static String getSqlLevel(Properties props) { + boolean showSql = "true".equals(props.getProperty("sonar.showSql", FALSE)); + return showSql ? DEBUG : WARN; + } + + @VisibleForTesting + protected static String getSqlResultsLevel(Properties props) { + boolean showSql = "true".equals(props.getProperty("sonar.showSqlResults", FALSE)); + return showSql ? DEBUG : WARN; + } +} diff --git a/sonar-runner-batch/src/main/java/org/sonar/runner/batch/IsolatedLauncher.java b/sonar-runner-batch/src/main/java/org/sonar/runner/batch/IsolatedLauncher.java deleted file mode 100644 index 8298d63..0000000 --- a/sonar-runner-batch/src/main/java/org/sonar/runner/batch/IsolatedLauncher.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SonarQube Runner - Batch - * Copyright (C) 2011 SonarSource - * dev@sonar.codehaus.org - * - * This program 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. - * - * This program 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 this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 - */ -package org.sonar.runner.batch; - -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.JoranConfigurator; -import ch.qos.logback.core.joran.spi.JoranException; -import com.google.common.annotations.VisibleForTesting; - -import java.io.IOException; -import java.io.InputStream; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import org.slf4j.LoggerFactory; -import org.sonar.api.utils.SonarException; -import org.sonar.batch.bootstrapper.Batch; -import org.sonar.batch.bootstrapper.EnvironmentInformation; - -/** - * This class is executed within the classloader provided by the server. It contains the installed plugins and - * the same version of sonar-batch as the server. - */ -public class IsolatedLauncher { - - private static final String WARN = "WARN"; - private static final String DEBUG = "DEBUG"; - private static final String FALSE = "false"; - - public void execute(Properties properties, List extensions) { - createBatch(properties, extensions).execute(); - } - - Batch createBatch(Properties properties, List extensions) { - initLogging(properties); - EnvironmentInformation env = new EnvironmentInformation(properties.getProperty("sonarRunner.app"), properties.getProperty("sonarRunner.appVersion")); - return Batch.builder() - .setEnvironment(env) - .addComponents(extensions) - .setBootstrapProperties((Map) properties) - .build(); - } - - private void initLogging(Properties props) { - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - JoranConfigurator jc = new JoranConfigurator(); - jc.setContext(context); - context.reset(); - try (InputStream input = Batch.class.getResourceAsStream("/org/sonar/batch/logback.xml")) { - System.setProperty("ROOT_LOGGER_LEVEL", isDebug(props) ? DEBUG : "INFO"); - context.putProperty("SQL_LOGGER_LEVEL", getSqlLevel(props)); - context.putProperty("SQL_RESULTS_LOGGER_LEVEL", getSqlResultsLevel(props)); - jc.doConfigure(input); - } catch (JoranException e) { - throw new SonarException("can not initialize logging", e); - } catch (IOException e1) { - throw new SonarException("couldn't close resource", e1); - } - } - - @VisibleForTesting - protected boolean isDebug(Properties props) { - return Boolean.parseBoolean(props.getProperty("sonar.verbose", FALSE)); - } - - @VisibleForTesting - protected static String getSqlLevel(Properties props) { - boolean showSql = "true".equals(props.getProperty("sonar.showSql", FALSE)); - return showSql ? DEBUG : WARN; - } - - @VisibleForTesting - protected static String getSqlResultsLevel(Properties props) { - boolean showSql = "true".equals(props.getProperty("sonar.showSqlResults", FALSE)); - return showSql ? DEBUG : WARN; - } -} -- cgit v1.2.3