From 8f60ad6ccab2adf26b06c08b77f3dfcc8dad41c8 Mon Sep 17 00:00:00 2001 From: Arik Hadas Date: Sat, 18 Jul 2020 22:15:54 +0300 Subject: [PATCH] WIP: grep on InputStreams --- .../src/main/java/org/unix4j/io/FileInput.java | 9 +++++++++ .../src/main/java/org/unix4j/unix/grep/GrepCommand.java | 3 +++ .../src/main/resources/command-definition/grep.xml | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/unix4j-core/unix4j-base/src/main/java/org/unix4j/io/FileInput.java b/unix4j-core/unix4j-base/src/main/java/org/unix4j/io/FileInput.java index a3552510..f55f1f0b 100644 --- a/unix4j-core/unix4j-base/src/main/java/org/unix4j/io/FileInput.java +++ b/unix4j-core/unix4j-base/src/main/java/org/unix4j/io/FileInput.java @@ -34,6 +34,11 @@ public FileInput(FileInputStream fileStream) { this.fileInfo = fileStream.toString(); } + public FileInput(InputStream inputStream) { + super(new InputStreamReader(inputStream), false); + this.fileInfo = inputStream.toString(); + } + public FileInput(FileDescriptor fileDesc) { super(new FileReader(fileDesc), true); this.fileInfo = fileDesc.toString(); @@ -68,6 +73,10 @@ public static List multiple(List files) { return multiple(files.stream()); } + public static List multiple(InputStream... streams) { + return Stream.of(streams).map(FileInput::new).collect(Collectors.toList()); + } + private static List multiple(Stream files) { return files.map(FileInput::new).collect(Collectors.toList()); } diff --git a/unix4j-core/unix4j-command/src/main/java/org/unix4j/unix/grep/GrepCommand.java b/unix4j-core/unix4j-command/src/main/java/org/unix4j/unix/grep/GrepCommand.java index 6aa91f04..cc9755bc 100644 --- a/unix4j-core/unix4j-command/src/main/java/org/unix4j/unix/grep/GrepCommand.java +++ b/unix4j-core/unix4j-command/src/main/java/org/unix4j/unix/grep/GrepCommand.java @@ -32,6 +32,9 @@ public LineProcessor execute(ExecutionContext context, LineProcessor output) { final List files = FileUtil.expandFiles(context.getCurrentDirectory(), args.getPaths()); final List inputs = FileInput.multiple(files); return getFileInputProcessor(inputs, context, output, args); + } else if (args.isStreamsSet()) { + final List inputs = FileInput.multiple(args.getStreams()); + return getFileInputProcessor(inputs, context, output, args); } //from standard input diff --git a/unix4j-core/unix4j-command/src/main/resources/command-definition/grep.xml b/unix4j-core/unix4j-command/src/main/resources/command-definition/grep.xml index e4577a63..cca31705 100644 --- a/unix4j-core/unix4j-command/src/main/resources/command-definition/grep.xml +++ b/unix4j-core/unix4j-command/src/main/resources/command-definition/grep.xml @@ -31,6 +31,9 @@ the given {@code regexp} string using case-sensitive comparison. Line endings are not relevant for the comparison. + + TBD + Filters the input lines from the standard input and writes the matching lines to the standard output. Every line is matched against @@ -148,6 +151,9 @@ not resolved (use the string paths argument to enable relative path resolving based on the current working directory). + + TBD + String arguments defining the options and operands for the command. Options can be specified by acronym (with a leading dash "-") or by