Commit Graph

56 Commits

Author SHA1 Message Date
Janne Valkealahti
e159cfcc52 Change properties for interactive and script to false on default
- Change defaults for `spring.shell.interactive.enabled` and
  `spring.shell.script.enabled` to false.
- Change samples to use interactive/script where applicable.
- Fixes #1051
2024-04-20 08:13:12 +01:00
Janne Valkealahti
831f2cf54b Provide pty info
- Enhance ShellContext for pty info
- Enhance CommandContext to include ShellContext
- Fixes #985
2024-03-10 17:51:38 +00:00
Janne Valkealahti
cdbbf1d96d Only NonInteractiveShellRunner is active on default
- Disable InteractiveShellRunner and ScriptShellRunner on default
- Enable those in commands and e2e sample apps
- Document changes
- Fixes #1017
2024-03-10 13:48:54 +00:00
Janne Valkealahti
7fa953f131 ViewComponent async execution
- Modifies ViewComponent with changed api's so that
  it can be executed with a thread allowing caller
  not to block.
- Add ViewComponentBuilder concept and create is as
  a bean similar to TerminalUIBuilder.
- Relates #997
2024-02-10 15:08:34 +00:00
Janne Valkealahti
abc4ffaaa3 ProgressView spinner theming
- New SpinnerSettings which integrates with ThemeSettings
- Support infra around spinner theming
- Relates #995
2024-02-04 14:57:23 +00:00
Janne Valkealahti
2fdd45a4d1 Switch to ApplicationConversionService
- ApplicationConversionService extends FormattingConversionService
  and defines some additional default converters like
  StringToFileConverter which makes `script` command work
  under native with given file type option.
- Fixes #960
2024-01-02 10:15:22 +00:00
Janne Valkealahti
51f49f7567 Fix exception mapping with exit codes
- Migitates changed behaviour in boot how exceptions are
  handled thus caused trouble with exit code mappings
  on a shell side.
- Fixes #961
2023-12-24 08:49:33 +00:00
Janne Valkealahti
320c9b21ab Add spring-configuration-metadata
- Adding boot's annotation processor to spring-shell-autoconfigure
  and spring-shell-test-autoconfigure
- Fixes #948
2023-12-15 09:49:26 +00:00
icodening
21d1ce8599 Bugfix: Tab-completion fails 2023-11-06 18:07:56 +00:00
Janne Valkealahti
efdf83a1ed Upgrade jline 3.24.1
- Disable jni terminal provider in test ShellAutoConfiguration
  like it's done for jna/jansi
- Default TerminalBuilder system outpu to SysOut to restore
  writing to stdout instead of stderr when redirect exists
- Relates #891
- Relates #901
2023-11-03 14:27:40 +00:00
Janne Valkealahti
82df453cc0 Autoconfigure TerminalUI
- Add TerminalUIBuilder which can be used to build TerminalUI
- Add TerminalUICustomizer which can customize TerminalUI
- What is autoconfigured is TerminalUIBuilder.
- In TerminalUI add configure for views which now allows
  easier way to set needed stuff in views.
- Various changes in a catalog app
- Fixes #900
2023-10-25 09:10:42 +01:00
Janne Valkealahti
2e5264a379 Optionally close context after command logic
- spring.shell.context.close=true adds ApplicationListerner
  which attempts to close context with ApplicationReadyEvent.
- Relates #863
2023-09-12 08:08:23 +03:00
MJ Gallego
b9180ba899 Completion proposal support for complete jline parameter
- to allow completing single argument with multiple tab clicks,
  for example file paths.
- Fixes #512
2023-07-25 09:11:34 +01:00
Janne Valkealahti
32675c5e73 Add primary command feature
- NonInteractiveShellRunner can now shortcircuit into primary command
  just running it and passing args.
- Add hooks into autoconfig so that this is easy to configure.
- Relates #755
2023-07-05 10:33:55 +01:00
Janne Valkealahti
042d56e7e3 Add HandlerMethodArgumentResolver for @Option
- New OptionMethodArgumentResolver which is similar
  than ShellOptionMethodArgumentResolver for @ShellOption.
- Add missing annotation commands for e2e test command.
- Fixes #767
2023-06-07 15:28:57 +01:00
cachescrubber
84cb5a7332 Pass ShellContext to CommandCatalog.of in CommandCatalogAutoConfiguration (#693)
- Fixes #702
2023-04-06 09:08:09 +01:00
Janne Valkealahti
a04091c08f Support modify option names
- New OptionNameModifier which is just a Function<String,String> to
  modify a name.
- Can be defined per option in CommandRegistration.
- Can be defined as global default as bean.
- Default implementation for common case types is enabled via boot's
  config props under spring.shell.option.naming.case-type
- Support facilities for camel, kebab, snake and pascal conversions.
- Fixes #621
2023-01-15 10:02:55 +00:00
Janne Valkealahti
f91b255bda Create BuilderSupplier interface
- Fixes #607
2023-01-08 13:38:33 +00:00
Janne Valkealahti
ef191e66f3 Add support for global help options
- Essentially this commit registeres on default `--help` and
  `-h` options to every command and execution short circuits
  in presense of help options to help command.
- Add Supplier<CommandRegistration.Builder> as a bean which
  can be autowired registration beans.
- Make this common bean customisable via CommandRegistrationCustomizer.
- Change StandardMethodTargetRegistrar to use supplier so that
  annotated commands gets common customizations.
- Change sample commands to use supplier.
- Add new group, spring.shell.help to config props.
- Docs changes
- Fixes #582
- Fixes #585
2022-12-04 17:23:25 +00:00
Janne Valkealahti
2bfcf99e96 Make Terminal configurable
- Add TerminalCustomizer which can be used to customise
  TerminalBuilder before instance from it is build.
- Fixes #516
2022-11-29 12:21:24 +00:00
Janne Valkealahti
217b9b7079 Use @AutoConfiguration
- Replace from @Configuration to @AutoConfiguration as that is now
  recommended by boot.
- Fixes #565
2022-11-15 08:30:17 +00:00
Janne Valkealahti
4c48017a97 Implement more flexible error handling
- Add exception handling around new interface CommandExceptionResolver
  which allows to define a chain of resolvers to process errors before
  exception is bubbled up to result handlers.
- Will be foundation to add more sophisticated error handling features
  compared to what spring itself have for rest layer.
- Resolver returns CommandHandlingResult holder which further can be
  used to make a choice what to print into console and if spesific exit
  code should be used in non-interactive mode.
- Exception handling can be defined globally and per command giving
  a change for user to customise i.e. error thrown by parser.
- CommandParserExceptionResolver replaces CommandParserExceptionsExceptionResultHandler
  and provides more meaninful message for missing options.
- Fixes #503
2022-10-14 10:55:05 +01:00
Janne Valkealahti
23df374660 Migrate auto-configuration registration
- Move auto-configs from spring.factories to imports file.
- Relates #523
2022-09-22 16:17:25 +01:00
Janne Valkealahti
c1c1da84db Remove maven build
- Relates #470
2022-08-16 12:48:04 +01:00
Janne Valkealahti
39c4519a3f Add gradle build files
- First set of changes for introduction of a gradle build.
- Relates #470
2022-08-16 10:30:15 +01:00
Janne Valkealahti
bff7a22b5e Next major development version 2022-07-23 15:57:21 +01:00
Janne Valkealahti
f826f29d77 Next development version 2022-07-23 15:15:17 +01:00
Janne Valkealahti
32f77c1917 Rework completion interfaces
- Use same interface type in a generic interactive completions
  in a method level and option value level.
- Change CompletionResolver to have same function signature
  as with options and use CompletionContext to keep
  relevant information.
- Fixes #449
2022-07-06 09:02:06 +01:00
Janne Valkealahti
5eaa5dd093 Implement interactive completion
- This is a re-implementation of a interactive completion
  with breaking changes as it moves away from a direct use
  of a MethodParameter in favour of a CommandRegistration
  and its option definitions.
- Fixes #449
2022-06-28 14:10:23 +03:00
Janne Valkealahti
073cd8562c Rework themes support
- Add theme settings for figures.
- Settings for styles are now in it own class and
  ThemeSettings are wrapping those.
- Prefixed formatting string to have `style-` prefix.
- Templates can now use added `figures` dictionary which
  is resolved per activated theme.
- Create `dump` theme.
- New `ThemeActive` interface where default impl uses dump
  theme if `CI` or `NO_COLOR` env is set.
- Rework existing templates.
- Fixes #442
2022-06-10 13:56:21 +01:00
Janne Valkealahti
3556352ab3 Fix exit codes
- Fix not to error so that other mappers can be used.
- Relates #431
2022-06-03 12:52:57 +01:00
Janne Valkealahti
7201a25567 Make ConversionService customisable
- Add ShellConversionServiceSupplier interface to define
  shell spesific ConversionService so that we don't
  get trouble with other services in boot.
- Fixes #435
2022-05-31 12:58:10 +01:00
Janne Valkealahti
3891a8b375 Add support for exit codes
- New configurations to CommandRegistration
- Re-using exit code concepts from boot
- Handling exit codes only in non-interactive mode
- Adding e2e commands and tests for better coverage
- Fixes #431
2022-05-31 07:49:50 +01:00
Janne Valkealahti
bd9ab62013 Rework help command
- Change help command output to get templated using
  model classes.
- Remove things around ParameterDescription as those are
  replaced with template classes.
- Fixes for native configs.
- For now availability and aliases are removed from
  help to get back in better form.
- Aliases has been partly introduced to structure.
- Fixes #422
2022-05-26 07:45:35 +01:00
Janne Valkealahti
57f6cff7c6 Convert default value
- Change parser to user conversion service to attempt
  conversion from a default value to an expected type.
- Make more use of shellConversionService bean so that
  we use the one which can be customized.
2022-05-18 08:00:49 +01:00
Janne Valkealahti
6a1158dc12 Make history file path configurable
- UserConfigPathProvider interface to provid "user-level"
  config directory which can be used within a shell.
- New options which can be used to configure behaviour.
  spring.shell.history.enabled
  spring.shell.history.name
  spring.shell.config.location
  spring.shell.config.env
- Fixes #417
2022-05-17 18:29:58 +01:00
Janne Valkealahti
32baac91d5 Fix ConversionService in auto-config
- Now using qualifier for one we expect which should
  work if some other services are in a context.
- Properly use shellConversionService in defined
  MethodArgumentResolver beans.
- Fixes #400
2022-05-10 14:03:34 +01:00
Janne Valkealahti
8a23518b84 Rework command subsystem
- Focus of these changes are to introduce a new command system based on
  real registrations (new way) instead of continuously (old way) resolve
  methods and its parameters via reflection.
- There's a lot of changes as this resolution via reflection had its
  hooks almost everywhere and thus most changes are just refactorings.
- Order to understand real changes I'd start to look classes under
  `org.springframework.shell.command` package as it defines new registration,
  catalog and parser classes. Also samples contain new classes to demonstrate
  new functionality.
- Fixes #380
2022-05-06 08:32:53 +01:00
Janne Valkealahti
81e5bf8c81 Fix auto-config
- Remove JCommanderParameterResolverAutoConfiguration from
  spring.factories as it was mistake not to remove it.
- Relates #395
2022-05-03 16:08:07 +01:00
Janne Valkealahti
4e625feb03 Drop jcommander
- Fixes #395
2022-04-29 15:55:21 +01:00
Janne Valkealahti
412053d414 Change bean name
- To not clash with exchangeStrategiesCustomizer bean name from boot
  change it to shellCommonComponentFlowCustomizer.
- This was a typical copy/pasting mistake.
2022-03-09 08:41:42 +00:00
Janne Valkealahti
30e7c4d370 Add auto-config for ComponentFlow
- ComponentFlowAutoConfiguration which creates a builder bean
  and configures ComponentFlowCustomizer to set needed
  defaults for terminal, resource loader and template executor.
- Fixes #387
2022-03-05 09:37:27 +00:00
onobc
5f447aa831 Add support for multiple non-interactive commmands
Also:
* Rename ThemeResolver bean to avoid clash w/ Spring Boot registered ThemeResolver
* Move shell runner precedence to public static field to allow extension/access
2022-02-21 08:47:07 +00:00
Janne Valkealahti
9ec5ffa9e0 Make grouping configurable in build-in help
- New option spring.shell.command.help.grouping-mode which can be either flat/group.
- Build-in help command can now choose if to group command or just show flat list.
- Fixes #347
2022-02-01 14:42:46 +00:00
Chris Bono
0efd71aea2 Add non-interactive shell runner customizer
- Add non-interactive shell runner customizer
- Update javadoc for DefaultApplicationRunner
- Rename DefaultApplicationRunner
- Formatting
2022-02-01 14:40:57 +00:00
Janne Valkealahti
9d7a345fff Add missing boot configuration processor 2022-01-28 16:17:37 +00:00
Janne Valkealahti
3197c94be7 Switch main from 3.0.0-SNAPSHOT to 2.1.0-SNAPSHOT
- Relates #356
2022-01-28 09:27:06 +00:00
Janne Valkealahti
52ff4a2d85 Add version command
- Add new styling system which works around concept that
  you use tags to request jline styles where tags comes
  from an activated theme.
- There is a default theme with options to add custom
  ones and change it via property.
- Add templating system which uses antlr stringtemplate which
  allows to write output with a template instead of manually
  crafting code.
- Add version command which integrates to Boot's BuildProperties
  and GitProperties. Only version field is visible on default
  and others can be enabled/disable via properties.
- Fixes #352
- Fixes #353
2022-01-23 09:23:16 +00:00
Janne Valkealahti
dbe8a8b408 Separate interactive and non-interactive commands
- Add new ShellContext concept which now is just a way
  to stash info about interaction mode where ShellRunner
  can update supported mode.
- ShellMethod has a new field interactionMode which user
  can use to define commands between interactive/non-interactive
  modes which then prevents CommandRegistry to show
  commands at runtime.
- Fixes #345
2022-01-09 14:15:47 +00:00
Janne Valkealahti
3cb3309d68 Rename ShellRunner classes 2022-01-08 09:34:59 +00:00