Base docs for PathSearch

- Relates #555
This commit is contained in:
Janne Valkealahti
2022-10-19 08:12:12 +01:00
parent 4bab975ecf
commit 7866c9666d
6 changed files with 90 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ Some info how screen recordings were made
asciinema rec spring-shell-docs/src/main/asciidoc/asciinema/component-text-input-1.cast
asciinema rec spring-shell-docs/src/main/asciidoc/asciinema/component-path-input-1.cast
asciinema rec spring-shell-docs/src/main/asciidoc/asciinema/component-path-search-1.cast
asciinema rec spring-shell-docs/src/main/asciidoc/asciinema/component-confirmation-1.cast
asciinema rec spring-shell-docs/src/main/asciidoc/asciinema/component-single-select-1.cast
asciinema rec spring-shell-docs/src/main/asciidoc/asciinema/component-multi-select-1.cast
@@ -14,6 +15,9 @@ svg-term \
svg-term \
--in spring-shell-docs/src/main/asciidoc/asciinema/component-path-input-1.cast \
--out spring-shell-docs/src/main/asciidoc/images/component-path-input-1.svg
svg-term \
--in spring-shell-docs/src/main/asciidoc/asciinema/component-path-search-1.cast \
--out spring-shell-docs/src/main/asciidoc/images/component-path-search-1.svg
svg-term \
--in spring-shell-docs/src/main/asciidoc/asciinema/component-confirmation-1.cast \
--out spring-shell-docs/src/main/asciidoc/images/component-confirmation-1.svg

View File

@@ -0,0 +1,23 @@
{"version": 2, "width": 85, "height": 10, "timestamp": 1666162443, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}}
[1.881363, "o", "java -jar spring-shell-samples/build/libs/spring-shell-samples.jar"]
[2.630692, "o", "\r\n"]
[6.50287, "o", "\u001b[?1h\u001b=\u001b[?2004h\u001b[33mmy-shell:>\u001b[0m"]
[8.347165, "o", "\u001b[1mcomponent path search\u001b[0m"]
[9.422581, "o", "\r\r\n\u001b[?1l\u001b>\u001b[?1000l\u001b[?2004l"]
[9.524556, "o", "\u001b[?1h\u001b=\u001b[?25l"]
[9.612905, "o", "\u001b[32;1m?\u001b[0m \u001b[1mEnter value\u001b[0m \u001b[70C \u001b[32m\u001b[0m \u001b[32mType '<path> <pattern>' to search\u001b[0m\u001b[A\r"]
[10.889157, "o", "\u001b[14C.\r\r\n\u001b[35C\u001b[32m, 20/27\u001b[0m\u001b[42C \u001b[96;1m\u001b[0m\u001b[96;1m buildSrc/src\u001b[0m\u001b[70C \u001b[96;1mbuildSrc/src/main\u001b[0m\u001b[65C \u001b[96;1mbuildSrc/build.gradle\u001b[0m\u001b[61C \u001b[96;1mbuildSrc/src/main/java\u001b[0m\u001b[60C \u001b[96;1mbuildSrc/src/main/java/org\u001b[0m\u001b[6A\r"]
[12.272435, "o", "\u001b[15C \r"]
[12.486882, "o", "\u001b[16Cg\r\r\n\r\n\u001b[14C\u001b[96;1m/main/java/org/springframework/shell/\u001b[33;22mg\u001b[96;1mradle\u001b[0m\r\r\n\u001b[19C\u001b[96;1m/java/org/springframework/shell/\u001b[33;22mg\u001b[96;1mradle/BomPlugin.java\u001b[0m\r\r\n\u001b[11C\u001b[96;1msrc/main/java/org/springframework/shell/\u001b[33;22mg\u001b[96;1mradle/DocsPlugin.java\u001b[0m\u001b[K\r\r\n\u001b[24C\u001b[96;1m/org/springframework/shell/\u001b[33;22mg\u001b[96;1mradle/RootPlugin.java\u001b[0m\r\r\n\u001b[28C\u001b[96;1m/springframework/shell/\u001b[33;22mg\u001b[96;1mradle/ModulePlugin.java\u001b[0m\u001b[6A\r"]
[12.707385, "o", "\u001b[17Cr\r\r\n\r\n\u001b[52C\u001b[33mr\u001b[0m\r\r\n\u001b[52C\u001b[33mr\u001b[0m\r\r\n\u001b[52C\u001b[33mr\u001b[96;1madle/Root\u001b[0m\r\r\n\u001b[52C\u001b[33mr\u001b[96;1madle/Docs\u001b[0m\r\r\n\u001b[52C\u001b[33mr\u001b[96;1madle/Samp\u001b[0m\u001b[6A\r"]
[12.758464, "o", "\u001b[18Ca\r\r\n\r\n\u001b[53C\u001b[33ma\u001b[0m\r\r\n\u001b[53C\u001b[33ma\u001b[0m\r\r\n\u001b[53C\u001b[33ma\u001b[0m\r\r\n\u001b[53C\u001b[33ma\u001b[0m\r\r\n\u001b[53C\u001b[33ma\u001b[96;1mdle/Modu\u001b[0m\u001b[6A\r"]
[13.035614, "o", "\u001b[19Cd\r\r\n\u001b[37C\u001b[32m19\u001b[0m\r\r\n\u001b[54C\u001b[33md\u001b[0m\r\r\n\u001b[54C\u001b[33md\u001b[0m\r\r\n\u001b[54C\u001b[33md\u001b[96;1mle/Docs\u001b[0m\r\r\n\u001b[54C\u001b[33md\u001b[96;1mle/Module\u001b[0m\u001b[K\u001b[96;1mPlugin.java\u001b[0m\r\r\n\u001b[54C\u001b[33md\u001b[96;1mle/Samp\u001b[0m\u001b[6A\r"]
[13.132591, "o", "\u001b[20Cl\r\r\n\r\n\u001b[55C\u001b[33ml\u001b[0m\r\r\n\u001b[55C\u001b[33ml\u001b[0m\r\r\n\u001b[55C\u001b[33ml\u001b[0m\r\r\n\u001b[55C\u001b[33ml\u001b[96;1me/Samp\u001b[0m\r\r\n\u001b[55C\u001b[33ml\u001b[96;1me/Modu\u001b[0m\u001b[6A\r"]
[13.226949, "o", "\u001b[21Ce\r\r\n\r\n\u001b[56C\u001b[33me\u001b[0m\r\r\n\u001b[56C\u001b[33me\u001b[0m\r\r\n\u001b[56C\u001b[33me\u001b[0m\r\r\n\u001b[56C\u001b[33me\u001b[0m\r\r\n\u001b[56C\u001b[33me\u001b[0m\u001b[6A\r"]
[14.514777, "o", "\r\r\n\r\n \r\r\n\u001b[96;1m \u001b[0m\u001b[3A\r"]
[15.008775, "o", "\r\r\n\r\n\u001b[96;1m \u001b[0m\r\r\n \u001b[3A\r"]
[15.547301, "o", "\u001b[?1l\u001b>\u001b[?12;25h\u001b[K\r\r\n\u001b[K\r\r\n\u001b[K\r\r\n\u001b[K\r\r\n\u001b[K\r\r\n\u001b[K\r\r\n\u001b[K\u001b[6A"]
[15.552903, "o", "\u001b[32;1m?\u001b[0m \u001b[1mEnter value\u001b[0m \u001b[34mbuildSrc/src/main/java/org/springframework/shell/gradle\u001b[0m\r\n"]
[15.55352, "o", "Got value buildSrc/src/main/java/org/springframework/shell/gradle\r\n"]
[16.475016, "o", "\u001b[?1h\u001b=\u001b[?2004h\u001b[33mmy-shell:>\u001b[0m"]
[18.475016, "o", "\u001b[?1h\u001b=\u001b[?2004h\u001b[33mmy-shell:>\u001b[0m"]

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,32 @@
[[using-shell-components-ui-pathsearch]]
==== Path Search
ifndef::snippets[:snippets: ../../test/java/org/springframework/shell/docs]
The path search component asks base directory for scan and optional search expression.
Results are shown in a single select list where user can pick a path.
`PathSearchConfig` can be used to customise component behaviour.
====
[source, java, indent=0]
----
include::{snippets}/UiComponentSnippets.java[tag=snippet9]
----
====
The following image shows typical output from a path search component:
image::images/component-path-search-1.svg[text input]
The context object is `PathSearchContext`. The following table describes its context variables:
[[pathsearchcontext-template-variables]]
.PathSearchContext Template Variables
|===
|Key |Description
|`pathViewItems`
|The items available for rendering search results.
|`model`
|The parent context variables (see <<textcomponentcontext-template-variables>>).
|===

View File

@@ -27,6 +27,8 @@ include::using-shell-components-ui-stringinput.adoc[]
include::using-shell-components-ui-pathinput.adoc[]
include::using-shell-components-ui-pathsearch.adoc[]
include::using-shell-components-ui-confirmation.adoc[]
include::using-shell-components-ui-singleselect.adoc[]

View File

@@ -28,11 +28,14 @@ import org.jline.utils.AttributedStringBuilder;
import org.springframework.shell.component.ConfirmationInput;
import org.springframework.shell.component.MultiItemSelector;
import org.springframework.shell.component.PathInput;
import org.springframework.shell.component.PathSearch;
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.MultiItemSelectorContext;
import org.springframework.shell.component.PathInput.PathInputContext;
import org.springframework.shell.component.PathSearch.PathSearchConfig;
import org.springframework.shell.component.PathSearch.PathSearchContext;
import org.springframework.shell.component.SingleItemSelector.SingleItemSelectorContext;
import org.springframework.shell.component.StringInput.StringInputContext;
import org.springframework.shell.component.support.SelectorItem;
@@ -109,7 +112,7 @@ public class UiComponentSnippets {
@ShellComponent
public class ComponentCommands extends AbstractShellComponent {
@ShellMethod(key = "component path", value = "Path input", group = "Components")
@ShellMethod(key = "component path input", value = "Path input", group = "Components")
public String pathInput() {
PathInput component = new PathInput(getTerminal(), "Enter value");
component.setResourceLoader(getResourceLoader());
@@ -211,4 +214,28 @@ public class UiComponentSnippets {
}
}
class Dump8 {
@ShellComponent
public class ComponentCommands extends AbstractShellComponent {
@ShellMethod(key = "component path input", value = "Path search", group = "Components")
public String pathSearch() {
// tag::snippet9[]
PathSearchConfig config = new PathSearch.PathSearchConfig();
config.setMaxPathsShow(5);
config.setMaxPathsSearch(100);
config.setSearchForward(true);
config.setSearchCaseSensitive(false);
config.setSearchNormalize(false);
PathSearch component = new PathSearch(getTerminal(), "Enter value", config);
component.setResourceLoader(getResourceLoader());
component.setTemplateExecutor(getTemplateExecutor());
PathSearchContext context = component.run(PathSearchContext.empty());
return "Got value " + context.getResultValue();
// end::snippet9[]
}
}
}
}