diff --git a/samples/helloworld/src/main/java/org/springframework/shell/samples/helloworld/commands/MyBannerProvider.java b/samples/helloworld/src/main/java/org/springframework/shell/samples/helloworld/commands/MyBannerProvider.java index 4708bf0d..2cf5a4a7 100644 --- a/samples/helloworld/src/main/java/org/springframework/shell/samples/helloworld/commands/MyBannerProvider.java +++ b/samples/helloworld/src/main/java/org/springframework/shell/samples/helloworld/commands/MyBannerProvider.java @@ -17,6 +17,7 @@ package org.springframework.shell.samples.helloworld.commands; import org.springframework.roo.shell.CliCommand; import org.springframework.roo.shell.CommandMarker; +import org.springframework.roo.support.util.StringUtils; import org.springframework.shell.plugin.BannerProvider; import org.springframework.stereotype.Component; @@ -37,9 +38,19 @@ public class MyBannerProvider implements BannerProvider, CommandMarker { /* (non-Javadoc) * @see org.springframework.shell.plugin.BannerProvider#getBanner() */ - @CliCommand(value = { "version" }, help = "Displays shell version") + @CliCommand(value = { "version" }, help = "Displays current CLI version") public String getBanner() { - return "vHelper. Version: " + this.getVersion(); + StringBuffer buf = new StringBuffer(); + buf.append("=======================================" + StringUtils.LINE_SEPARATOR); + buf.append("* *"+ StringUtils.LINE_SEPARATOR); + buf.append("* *"+ StringUtils.LINE_SEPARATOR); + buf.append("* vHelper *" +StringUtils.LINE_SEPARATOR); + buf.append("* *"+ StringUtils.LINE_SEPARATOR); + buf.append("* *"+ StringUtils.LINE_SEPARATOR); + buf.append("=======================================" + StringUtils.LINE_SEPARATOR); + buf.append("Verson:" + this.getVersion()); + return buf.toString(); + } /* (non-Javadoc) @@ -49,4 +60,11 @@ public class MyBannerProvider implements BannerProvider, CommandMarker { return "1.0.1"; } + /* (non-Javadoc) + * @see org.springframework.shell.plugin.BannerProvider#getWelcomMessage() + */ + public String getWelcomMessage() { + return "Welcome to vHelper CLI"; + } + } diff --git a/src/main/java/org/springframework/shell/Bootstrap.java b/src/main/java/org/springframework/shell/Bootstrap.java index bc52d804..fa8bbb22 100644 --- a/src/main/java/org/springframework/shell/Bootstrap.java +++ b/src/main/java/org/springframework/shell/Bootstrap.java @@ -35,10 +35,11 @@ public class Bootstrap { private Thread shellThread; private ConfigurableApplicationContext ctx; private static StopWatch sw = new StopWatch("Spring Sehll"); + private static SimpleShellCommandLineOptions options; public static void main(String[] args) throws IOException { sw.start(); - SimpleShellCommandLineOptions options = SimpleShellCommandLineOptions.parseCommandLine(args); + options = SimpleShellCommandLineOptions.parseCommandLine(args); for (Map.Entry entry : options.extraSystemProperties.entrySet()) { System.setProperty(entry.getKey(), entry.getValue()); @@ -68,6 +69,9 @@ public class Bootstrap { //shell = new JLineShellComponent(); shell = ctx.getBean("shell", JLineShellComponent.class); shell.setApplicationContext(ctx); + if(options.executeThenQuit != null){ + shell.setPrintBanner(false); + } Map commands = BeanFactoryUtils.beansOfTypeIncludingAncestors(ctx,CommandMarker.class); @@ -191,14 +195,15 @@ public class Bootstrap { // shouldn't really happen, but we'll fallback to this anyway exitShellRequest = ExitShellRequest.NORMAL_EXIT; } + + try { + shellThread.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } - try { - shellThread.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - ctx.close(); sw.stop(); if (shell.isDevelopmentMode()) { diff --git a/src/main/java/org/springframework/shell/Constant.java b/src/main/java/org/springframework/shell/Constant.java index 192e11f9..ac6861a1 100644 --- a/src/main/java/org/springframework/shell/Constant.java +++ b/src/main/java/org/springframework/shell/Constant.java @@ -25,4 +25,6 @@ public interface Constant { String COMMAND_LINE_PROMPT = "spring>"; + String WELCOME_MESSAGE = "Welcome to Spring Shell. For assistance press or type \"hint\" then hit ENTER."; + } diff --git a/src/main/java/org/springframework/shell/JLineShell.java b/src/main/java/org/springframework/shell/JLineShell.java index 8422d8d2..c66a00b7 100644 --- a/src/main/java/org/springframework/shell/JLineShell.java +++ b/src/main/java/org/springframework/shell/JLineShell.java @@ -81,6 +81,8 @@ public abstract class JLineShell extends AbstractShell implements CommandMarker, private boolean shutdownHookFired = false; // ROO-1599 private ApplicationContext applicatonContext; + private boolean printBanner = true; + public void run() { try { @@ -132,15 +134,8 @@ public abstract class JLineShell extends AbstractShell implements CommandMarker, } flashMessageRenderer(); - - logger.info(version(null)); - - flash(Level.FINE, "Spring Roo " + versionInfo(), Shell.WINDOW_TITLE_SLOT); - - - //TODO make this configurable - logger.info("Welcome to Spring Shell. For assistance press " + completionKeys - + " or type \"hint\" then hit ENTER."); + flash(Level.FINE, "Spring Shell " + versionInfo(), Shell.WINDOW_TITLE_SLOT); + printBannerAndWelcome(); String startupNotifications = getStartupNotifications(); if (StringUtils.hasText(startupNotifications)) { @@ -176,6 +171,13 @@ public abstract class JLineShell extends AbstractShell implements CommandMarker, } } + + public void printBannerAndWelcome(){ + if(printBanner){ + logger.info(version(null)); + logger.info(getWelcomeMessage()); + } + } public String getStartupNotifications() { return null; @@ -526,6 +528,12 @@ public abstract class JLineShell extends AbstractShell implements CommandMarker, this.applicatonContext = applicationContext; } + /** + * get history file name from provider. The provider has highest order + * org.springframework.core.Ordered.getOder will win. + * + * @return history file name + */ private String getHistoryFileName() { String historyFileName = null; Map historyFileProviders = getBeansInFactory(HistoryFileProvider.class); @@ -540,6 +548,12 @@ public abstract class JLineShell extends AbstractShell implements CommandMarker, return historyFileName; } + /** + * get prompt text from provider. The provider has highest order + * org.springframework.core.Ordered.getOder will win. + * + * @return + */ private String getPromptText(){ String promptText = null; Map promptProviders = getBeansInFactory(PromptProvider.class); @@ -554,17 +568,25 @@ public abstract class JLineShell extends AbstractShell implements CommandMarker, return promptText; } - private String getBannerText(){ - String bannerText = null; + /** + * Get Banner and Welcome Message from provider. The provider has highest order + * org.springframework.core.Ordered.getOder will win. + * @return BannerText[0]: Banner + * BannerText[1]: Welcome Message. + */ + private String[] getBannerText(){ + String[] bannerText = new String[2]; Map bannerProviders = getBeansInFactory(BannerProvider.class); int order = Integer.MIN_VALUE; for(BannerProvider p : bannerProviders.values()){ if(p.getOrder() > order){ order = p.getOrder(); - bannerText = p.getBanner(); + bannerText[0] = p.getBanner(); + bannerText[1] = p.getWelcomMessage(); } } - bannerText = (bannerText == null)?Constant.COMMAND_LINE_PROMPT:bannerText; + bannerText[0] = (bannerText[0] == null)?Constant.COMMAND_LINE_PROMPT:bannerText[0]; + bannerText[1] = (bannerText[1] == null)?Constant.WELCOME_MESSAGE:bannerText[1]; return bannerText; } @@ -576,7 +598,19 @@ public abstract class JLineShell extends AbstractShell implements CommandMarker, } public String version(String text){ - return getBannerText(); + return getBannerText()[0]; + } + + public String getWelcomeMessage(){ + return getBannerText()[1]; + } + + + /** + * @param printBanner the printBanner to set + */ + public void setPrintBanner(boolean printBanner) { + this.printBanner = printBanner; } } diff --git a/src/main/java/org/springframework/shell/plugin/BannerProvider.java b/src/main/java/org/springframework/shell/plugin/BannerProvider.java index cd6fb89c..aae03905 100644 --- a/src/main/java/org/springframework/shell/plugin/BannerProvider.java +++ b/src/main/java/org/springframework/shell/plugin/BannerProvider.java @@ -22,7 +22,7 @@ import org.springframework.core.Ordered; * getOrder should be > 1 to override default. * * @author Jarred Li - * @since 1.01 + * @since 1.0 * */ public interface BannerProvider extends Ordered { @@ -31,4 +31,6 @@ public interface BannerProvider extends Ordered { String getVersion(); + String getWelcomMessage(); + } diff --git a/src/main/java/org/springframework/shell/plugin/support/DefaultBannerProvider.java b/src/main/java/org/springframework/shell/plugin/support/DefaultBannerProvider.java index 808a78fe..f56ff649 100644 --- a/src/main/java/org/springframework/shell/plugin/support/DefaultBannerProvider.java +++ b/src/main/java/org/springframework/shell/plugin/support/DefaultBannerProvider.java @@ -20,6 +20,7 @@ import static org.springframework.roo.support.util.StringUtils.LINE_SEPARATOR; import org.springframework.roo.shell.CliCommand; import org.springframework.roo.shell.CommandMarker; import org.springframework.roo.support.util.VersionUtils; +import org.springframework.shell.Constant; import org.springframework.shell.plugin.BannerProvider; import org.springframework.stereotype.Component; @@ -30,7 +31,7 @@ import org.springframework.stereotype.Component; * */ @Component -public class DefaultBannerProvider implements BannerProvider, CommandMarker{ +public class DefaultBannerProvider implements BannerProvider, CommandMarker { /* (non-Javadoc) * @see org.springframework.core.Ordered#getOrder() @@ -65,4 +66,11 @@ public class DefaultBannerProvider implements BannerProvider, CommandMarker{ return VersionUtils.versionInfo(); } + /* (non-Javadoc) + * @see org.springframework.shell.plugin.BannerProvider#getWelcomMessage() + */ + public String getWelcomMessage() { + return Constant.WELCOME_MESSAGE; + } + }