Add more beans to AbstractShellComponent
- Add more common stuff like ResourceLoader, TemplateExecutor, ThemeResolver. - Make class abstract. - Expose more with sub-classes.
This commit is contained in:
@@ -20,43 +20,29 @@ import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ResourceLoaderAware;
|
||||
import org.springframework.core.io.ResourceLoader;
|
||||
import org.springframework.shell.component.ConfirmationInput;
|
||||
import org.springframework.shell.component.MultiItemSelector;
|
||||
import org.springframework.shell.component.PathInput;
|
||||
import org.springframework.shell.component.SingleItemSelector;
|
||||
import org.springframework.shell.component.StringInput;
|
||||
import org.springframework.shell.component.ConfirmationInput.ConfirmationInputContext;
|
||||
import org.springframework.shell.component.MultiItemSelector;
|
||||
import org.springframework.shell.component.MultiItemSelector.MultiItemSelectorContext;
|
||||
import org.springframework.shell.component.PathInput;
|
||||
import org.springframework.shell.component.PathInput.PathInputContext;
|
||||
import org.springframework.shell.component.SingleItemSelector;
|
||||
import org.springframework.shell.component.SingleItemSelector.SingleItemSelectorContext;
|
||||
import org.springframework.shell.component.StringInput;
|
||||
import org.springframework.shell.component.StringInput.StringInputContext;
|
||||
import org.springframework.shell.component.support.SelectorItem;
|
||||
import org.springframework.shell.standard.AbstractShellComponent;
|
||||
import org.springframework.shell.standard.ShellComponent;
|
||||
import org.springframework.shell.standard.ShellMethod;
|
||||
import org.springframework.shell.style.TemplateExecutor;
|
||||
|
||||
@ShellComponent
|
||||
public class ComponentCommands extends AbstractShellComponent implements ResourceLoaderAware {
|
||||
|
||||
private ResourceLoader resourceLoader;
|
||||
|
||||
@Autowired
|
||||
private TemplateExecutor templateExecutor;
|
||||
|
||||
@Override
|
||||
public void setResourceLoader(ResourceLoader resourceLoader) {
|
||||
this.resourceLoader = resourceLoader;
|
||||
}
|
||||
public class ComponentCommands extends AbstractShellComponent {
|
||||
|
||||
@ShellMethod(key = "component string", value = "String input", group = "Components")
|
||||
public String stringInput(boolean mask) {
|
||||
StringInput component = new StringInput(getTerminal(), "Enter value", "myvalue");
|
||||
component.setResourceLoader(resourceLoader);
|
||||
component.setTemplateExecutor(templateExecutor);
|
||||
component.setResourceLoader(getResourceLoader());
|
||||
component.setTemplateExecutor(getTemplateExecutor());
|
||||
if (mask) {
|
||||
component.setMaskCharater('*');
|
||||
}
|
||||
@@ -67,8 +53,8 @@ public class ComponentCommands extends AbstractShellComponent implements Resourc
|
||||
@ShellMethod(key = "component path", value = "Path input", group = "Components")
|
||||
public String pathInput() {
|
||||
PathInput component = new PathInput(getTerminal(), "Enter value");
|
||||
component.setResourceLoader(resourceLoader);
|
||||
component.setTemplateExecutor(templateExecutor);
|
||||
component.setResourceLoader(getResourceLoader());
|
||||
component.setTemplateExecutor(getTemplateExecutor());
|
||||
PathInputContext context = component.run(PathInputContext.empty());
|
||||
return "Got value " + context.getResultValue();
|
||||
}
|
||||
@@ -76,8 +62,8 @@ public class ComponentCommands extends AbstractShellComponent implements Resourc
|
||||
@ShellMethod(key = "component confirmation", value = "Confirmation input", group = "Components")
|
||||
public String confirmationInput(boolean no) {
|
||||
ConfirmationInput component = new ConfirmationInput(getTerminal(), "Enter value", !no);
|
||||
component.setResourceLoader(resourceLoader);
|
||||
component.setTemplateExecutor(templateExecutor);
|
||||
component.setResourceLoader(getResourceLoader());
|
||||
component.setTemplateExecutor(getTemplateExecutor());
|
||||
ConfirmationInputContext context = component.run(ConfirmationInputContext.empty());
|
||||
return "Got value " + context.getResultValue();
|
||||
}
|
||||
@@ -89,8 +75,8 @@ public class ComponentCommands extends AbstractShellComponent implements Resourc
|
||||
items.add(SelectorItem.of("key2", "value2"));
|
||||
SingleItemSelector<String, SelectorItem<String>> component = new SingleItemSelector<>(getTerminal(),
|
||||
items, "testSimple", null);
|
||||
component.setResourceLoader(resourceLoader);
|
||||
component.setTemplateExecutor(templateExecutor);
|
||||
component.setResourceLoader(getResourceLoader());
|
||||
component.setTemplateExecutor(getTemplateExecutor());
|
||||
SingleItemSelectorContext<String, SelectorItem<String>> context = component
|
||||
.run(SingleItemSelectorContext.empty());
|
||||
String result = context.getResultItem().flatMap(si -> Optional.ofNullable(si.getItem())).get();
|
||||
@@ -105,8 +91,8 @@ public class ComponentCommands extends AbstractShellComponent implements Resourc
|
||||
items.add(SelectorItem.of("key3", "value3"));
|
||||
MultiItemSelector<String, SelectorItem<String>> component = new MultiItemSelector<>(getTerminal(),
|
||||
items, "testSimple", null);
|
||||
component.setResourceLoader(resourceLoader);
|
||||
component.setTemplateExecutor(templateExecutor);
|
||||
component.setResourceLoader(getResourceLoader());
|
||||
component.setTemplateExecutor(getTemplateExecutor());
|
||||
MultiItemSelectorContext<String, SelectorItem<String>> context = component
|
||||
.run(MultiItemSelectorContext.empty());
|
||||
String result = context.getResultItems().stream()
|
||||
|
||||
@@ -17,7 +17,6 @@ package org.springframework.shell.standard.commands;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.context.ResourceLoaderAware;
|
||||
import org.springframework.core.io.ResourceLoader;
|
||||
import org.springframework.shell.standard.AbstractShellComponent;
|
||||
import org.springframework.shell.standard.ShellComponent;
|
||||
@@ -30,7 +29,7 @@ import org.springframework.shell.standard.completion.BashCompletions;
|
||||
* @author Janne Valkealahti
|
||||
*/
|
||||
@ShellComponent
|
||||
public class Completion extends AbstractShellComponent implements ResourceLoaderAware {
|
||||
public class Completion extends AbstractShellComponent {
|
||||
|
||||
/**
|
||||
* Marker interface used in auto-config.
|
||||
|
||||
@@ -27,7 +27,6 @@ import org.jline.utils.AttributedString;
|
||||
|
||||
import org.springframework.boot.info.BuildProperties;
|
||||
import org.springframework.boot.info.GitProperties;
|
||||
import org.springframework.context.ResourceLoaderAware;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.core.io.ResourceLoader;
|
||||
import org.springframework.shell.standard.AbstractShellComponent;
|
||||
@@ -43,7 +42,7 @@ import org.springframework.util.StringUtils;
|
||||
* @author Janne Valkealahti
|
||||
*/
|
||||
@ShellComponent
|
||||
public class Version extends AbstractShellComponent implements ResourceLoaderAware {
|
||||
public class Version extends AbstractShellComponent {
|
||||
|
||||
/**
|
||||
* Marker interface used in auto-config.
|
||||
@@ -70,11 +69,6 @@ public class Version extends AbstractShellComponent implements ResourceLoaderAwa
|
||||
this.templateExecutor = templateExecutor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setResourceLoader(ResourceLoader resourceLoader) {
|
||||
this.resourceLoader = resourceLoader;
|
||||
}
|
||||
|
||||
@ShellMethod(key = "version", value = "Show version info")
|
||||
public AttributedString version() {
|
||||
String templateResource = resourceAsString(resourceLoader.getResource(template));
|
||||
|
||||
@@ -24,19 +24,25 @@ import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.context.ResourceLoaderAware;
|
||||
import org.springframework.core.io.ResourceLoader;
|
||||
import org.springframework.shell.CommandRegistry;
|
||||
import org.springframework.shell.ParameterResolver;
|
||||
import org.springframework.shell.Shell;
|
||||
import org.springframework.shell.style.TemplateExecutor;
|
||||
import org.springframework.shell.style.ThemeResolver;
|
||||
|
||||
/**
|
||||
* Base class helping to build shell components.
|
||||
*
|
||||
* @author Janne Valkealahti
|
||||
*/
|
||||
public class AbstractShellComponent implements ApplicationContextAware, InitializingBean {
|
||||
public abstract class AbstractShellComponent implements ApplicationContextAware, InitializingBean, ResourceLoaderAware {
|
||||
|
||||
private ApplicationContext applicationContext;
|
||||
|
||||
private ResourceLoader resourceLoader;
|
||||
|
||||
private ObjectProvider<Shell> shellProvider;
|
||||
|
||||
private ObjectProvider<Terminal> terminalProvider;
|
||||
@@ -45,11 +51,20 @@ public class AbstractShellComponent implements ApplicationContextAware, Initiali
|
||||
|
||||
private ObjectProvider<ParameterResolver> parameterResolverProvider;
|
||||
|
||||
private ObjectProvider<TemplateExecutor> templateExecutorProvider;
|
||||
|
||||
private ObjectProvider<ThemeResolver> themeResolverProvider;
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
||||
this.applicationContext = applicationContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setResourceLoader(ResourceLoader resourceLoader) {
|
||||
this.resourceLoader = resourceLoader;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
shellProvider = applicationContext.getBeanProvider(Shell.class);
|
||||
@@ -58,6 +73,14 @@ public class AbstractShellComponent implements ApplicationContextAware, Initiali
|
||||
parameterResolverProvider = applicationContext.getBeanProvider(ParameterResolver.class);
|
||||
}
|
||||
|
||||
protected ApplicationContext getApplicationContext() {
|
||||
return applicationContext;
|
||||
}
|
||||
|
||||
protected ResourceLoader getResourceLoader() {
|
||||
return resourceLoader;
|
||||
}
|
||||
|
||||
protected Shell getShell() {
|
||||
return shellProvider.getObject();
|
||||
}
|
||||
@@ -73,4 +96,12 @@ public class AbstractShellComponent implements ApplicationContextAware, Initiali
|
||||
protected Stream<ParameterResolver> getParameterResolver() {
|
||||
return parameterResolverProvider.orderedStream();
|
||||
}
|
||||
|
||||
protected TemplateExecutor getTemplateExecutor() {
|
||||
return templateExecutorProvider.getObject();
|
||||
}
|
||||
|
||||
protected ThemeResolver getThemeResolver() {
|
||||
return themeResolverProvider.getObject();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user