diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/InitCommand.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/InitCommand.java deleted file mode 100644 index 0252a38c2c..0000000000 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/InitCommand.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2012-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.cli.command; - -import groovy.lang.Binding; -import groovy.lang.GroovyClassLoader; -import groovy.lang.Script; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.ServiceLoader; - -import joptsimple.OptionSet; -import joptsimple.OptionSpec; - -import org.springframework.boot.cli.Command; -import org.springframework.boot.cli.CommandFactory; -import org.springframework.boot.cli.SpringCli; -import org.springframework.boot.cli.compiler.GroovyCompiler; -import org.springframework.boot.cli.compiler.GroovyCompilerConfiguration; -import org.springframework.boot.cli.compiler.GroovyCompilerConfigurationAdapter; -import org.springframework.boot.cli.compiler.GroovyCompilerScope; -import org.springframework.boot.cli.compiler.RepositoryConfigurationFactory; -import org.springframework.boot.cli.compiler.grape.RepositoryConfiguration; -import org.springframework.core.env.JOptCommandLinePropertySource; -import org.springframework.util.StringUtils; - -/** - *

- * Command to initialize the Spring CLI with commands from the classpath. If the current - * context class loader is a GroovyClassLoader then it can be enhanced by passing in - * compiler options (e.g. --classpath=...). - *

- *

- * If the current context class loader is not already GroovyClassLoader then one will be - * created and will replace the current context loader. In this case command arguments can - * include files to compile that have @Grab annotations to process. By - * default a script called "init.groovy" or "spring.groovy" is used if it exists in the - * current directory or the root of the classpath. - *

- * - * @author Dave Syer - */ -public class InitCommand extends OptionParsingCommand { - - public static final String NAME = "init"; - - public InitCommand(SpringCli cli) { - super(NAME, "(Re)-initialize the Spring cli", new InitOptionHandler(cli)); - } - - private static class InitOptionHandler extends CompilerOptionHandler { - - private static final String DEFAULT_PATH = "file:init.groovy,file:spring.groovy"; - private SpringCli cli; - private GroovyCompiler compiler; - private OptionSpec initOption; - - public InitOptionHandler(SpringCli cli) { - this.cli = cli; - } - - @Override - protected void doOptions() { - this.initOption = option("init", - "Path to init file as comma-separated list (default file:init.groovy,file:spring.groovy)") - .withOptionalArg().defaultsTo( - System.getProperty("spring.cli.init", DEFAULT_PATH)); - } - - @Override - protected void run(OptionSet options) throws Exception { - - ClassLoader loader = Thread.currentThread().getContextClassLoader(); - boolean enhanced = false; - - String[] paths = StringUtils.commaDelimitedListToStringArray(this.initOption - .value(options)); - SourceOptions sourceOptions = new SourceOptions(options, loader, paths); - String[] sources = sourceOptions.getSourcesArray(); - - if (!(loader instanceof GroovyClassLoader) && sources.length > 0) { - - List repositoryConfiguration = RepositoryConfigurationFactory - .createDefaultRepositoryConfiguration(); - - GroovyCompilerConfiguration configuration = new InitGroovyCompilerConfigurationAdapter( - options, this, repositoryConfiguration); - - this.compiler = new GroovyCompiler(configuration); - loader = this.compiler.getLoader(); - Thread.currentThread().setContextClassLoader(loader); - - } - else { - String classpath = getClasspathOption().value(options); - if (classpath != null && classpath.length() > 0) { - ((GroovyClassLoader) loader).addClasspath(classpath); - enhanced = true; - } - } - - if (this.compiler != null && sources.length > 0) { - Class[] classes = this.compiler.compile(sources); - for (Class type : classes) { - if (Script.class.isAssignableFrom(type)) { - Script script = (Script) type.newInstance(); - JOptCommandLinePropertySource properties = new JOptCommandLinePropertySource( - options); - Map map = new HashMap(); - for (String key : properties.getPropertyNames()) { - map.put(key, properties.getProperty(key)); - } - script.setBinding(new Binding(map)); - script.run(); - } - enhanced = true; - } - } - - if (enhanced) { - - for (CommandFactory factory : ServiceLoader.load(CommandFactory.class, - loader)) { - for (Command command : factory.getCommands(this.cli)) { - this.cli.register(command); - } - } - - } - - } - } - - private static class InitGroovyCompilerConfigurationAdapter extends - GroovyCompilerConfigurationAdapter { - private InitGroovyCompilerConfigurationAdapter(OptionSet optionSet, - CompilerOptionHandler compilerOptionHandler, - List repositoryConfiguration) { - super(optionSet, compilerOptionHandler, repositoryConfiguration); - } - - @Override - public GroovyCompilerScope getScope() { - return GroovyCompilerScope.EXTENSION; - } - } - -} diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/ShellCommand.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/ShellCommand.java index 31d67e38ae..f567b74a35 100644 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/ShellCommand.java +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/ShellCommand.java @@ -99,7 +99,6 @@ public class ShellCommand extends AbstractCommand { PromptCommand prompt = new PromptCommand(this); cli.register(prompt); - cli.register(new InitCommand(cli)); } private ConsoleReader createConsoleReader() throws IOException { diff --git a/spring-boot-cli/src/test/java/org/springframework/boot/cli/command/InitCommandPerformanceTests.java b/spring-boot-cli/src/test/java/org/springframework/boot/cli/command/InitCommandPerformanceTests.java deleted file mode 100644 index e296d4c846..0000000000 --- a/spring-boot-cli/src/test/java/org/springframework/boot/cli/command/InitCommandPerformanceTests.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2012-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.cli.command; - -import java.util.Random; -import java.util.ServiceLoader; - -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.springframework.boot.OutputCapture; -import org.springframework.boot.cli.Command; -import org.springframework.boot.cli.CommandFactory; -import org.springframework.boot.cli.SpringCli; - -/** - * @author Dave Syer - */ -public class InitCommandPerformanceTests { - - @Rule - public OutputCapture output = new OutputCapture(); - private ClassLoader classLoader; - private Random random = new Random(); - - @Before - public void init() { - this.classLoader = Thread.currentThread().getContextClassLoader(); - } - - @After - public void close() { - Thread.currentThread().setContextClassLoader(this.classLoader); - } - - @Test - public void initDefault() throws Exception { - for (int i = 0; i < 100; i++) { - SpringCli cli = new SpringCli(); - InitCommand command = new InitCommand(cli); - command.run(); - close(); - } - } - - @Test - // Fast... - public void initNonExistent() throws Exception { - for (int i = 0; i < 100; i++) { - SpringCli cli = new SpringCli(); - InitCommand command = new InitCommand(cli); - command.run("--init=" + this.random.nextInt() + ".groovy"); - close(); - } - } - - @Test - // Fast... - public void fakeCommand() throws Exception { - final SpringCli cli = new SpringCli(); - for (int i = 0; i < 100; i++) { - Command command = new AbstractCommand("fake", "") { - @Override - public void run(String... args) throws Exception { - for (CommandFactory factory : ServiceLoader.load( - CommandFactory.class, Thread.currentThread() - .getContextClassLoader())) { - for (Command command : factory.getCommands(cli)) { - cli.register(command); - } - } - } - }; - command.run("--init=" + this.random.nextInt() + ".groovy"); - close(); - } - } - - @Test - // Fast... - public void initNonExistentWithPrefix() throws Exception { - for (int i = 0; i < 100; i++) { - SpringCli cli = new SpringCli(); - InitCommand command = new InitCommand(cli); - command.run("--init=file:" + this.random.nextInt() + ".groovy"); - close(); - } - } - - @Test - // There is an init.groovy on the test classpath so this succeeds - // Slow... - public void initFromClasspath() throws Exception { - for (int i = 0; i < 5; i++) { - SpringCli cli = new SpringCli(); - InitCommand command = new InitCommand(cli); - command.run("--init=init.groovy"); - close(); - } - } - - public static void main(String[] args) { - SpringCli.main("hint"); - } - -} diff --git a/spring-boot-cli/src/test/java/org/springframework/boot/cli/command/InitCommandTests.java b/spring-boot-cli/src/test/java/org/springframework/boot/cli/command/InitCommandTests.java deleted file mode 100644 index fa0a20ada9..0000000000 --- a/spring-boot-cli/src/test/java/org/springframework/boot/cli/command/InitCommandTests.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2012-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.cli.command; - -import groovy.lang.GroovyClassLoader; - -import java.util.Random; - -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.springframework.boot.OutputCapture; -import org.springframework.boot.cli.Command; -import org.springframework.boot.cli.SpringCli; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -/** - * @author Dave Syer - */ -public class InitCommandTests { - - @Rule - public OutputCapture output = new OutputCapture(); - - private SpringCli cli = mock(SpringCli.class); - private InitCommand command = new InitCommand(this.cli); - private int defaultCount = new DefaultCommandFactory().getCommands(this.cli).size(); - private ClassLoader classLoader; - - @Before - public void init() { - this.classLoader = Thread.currentThread().getContextClassLoader(); - } - - @After - public void close() { - Thread.currentThread().setContextClassLoader(this.classLoader); - } - - @Test - public void explicitClasspath() throws Exception { - Thread.currentThread().setContextClassLoader(new GroovyClassLoader()); - this.command.run("--cp=src/test/plugins/custom/custom/0.0.1/custom-0.0.1.jar"); - verify(this.cli, times(this.defaultCount + 1)).register(any(Command.class)); - } - - @Test - public void initScript() throws Exception { - this.command.run("src/test/resources/grab.groovy"); - verify(this.cli, times(this.defaultCount + 1)).register(any(Command.class)); - assertTrue(this.output.toString().contains("Hello Grab")); - } - - @Test(expected = IllegalArgumentException.class) - public void initNonExistentScript() throws Exception { - this.command.run("nonexistent.groovy"); - } - - @Test - public void initDefault() throws Exception { - this.command.run(); - assertFalse(this.output.toString().contains("Hello Init")); - } - - @Test - public void initWithCommandline() throws Exception { - this.command.run("--init=init.groovy"); - assertTrue(this.output.toString().contains("Hello Init")); - } - - public static void main(String[] args) throws Exception { - Random random = new Random(); - InitCommandTests test = new InitCommandTests(); - test.init(); - SpringCli cli = new SpringCli(); - while (true) { - InitCommand command = new InitCommand(cli); - command.run("--init=file:" + random.nextInt() + ".groovy"); - test.close(); - } - } - -}