| @@ -5,26 +5,54 import java.util.stream.Stream; | |||
|
|
5 | 5 | import org.eclipse.jdt.annotation.NonNullByDefault; |
|
|
6 | 6 | import org.implab.gradle.common.utils.Values; |
|
|
7 | 7 | |
|
|
8 | /** Command builder interface, used to specify the executable and parameters */ | |
|
|
8 | 9 | @NonNullByDefault |
|
|
9 | 10 | public interface CommandBuilder { |
|
|
10 | 11 | |
|
|
12 | /** Sets the executable, the parameters are left intact. */ | |
|
|
11 | 13 | CommandBuilder executable(String executable); |
|
|
12 | 14 | |
|
|
15 | /** Sets the specified executable and parameters, old executable and parameters | |
|
|
16 | * are discarded. | |
|
|
17 | */ | |
|
|
13 | 18 | default CommandBuilder commandLine(String executable, String... args) { |
|
|
14 | 19 | return executable(executable) |
|
|
15 | 20 | .arguments(args); |
|
|
16 | 21 | } |
|
|
17 | 22 | |
|
|
18 | default CommandBuilder arg(String arg0, String... args) { | |
|
|
23 | /** Sets the specified executable and parameters, old executable and parameters | |
|
|
24 | * are discarded. | |
|
|
25 | * | |
|
|
26 | * @param command The command line. Must contain at least one element (executable). | |
|
|
27 | * | |
|
|
28 | */ | |
|
|
29 | default CommandBuilder commandLine(Iterable<? extends String> command) { | |
|
|
30 | var iterator = command.iterator(); | |
|
|
31 | ||
|
|
32 | // set executable | |
|
|
33 | executable(Values.take(iterator).orElseThrow()); | |
|
|
34 | // cleat arguments | |
|
|
35 | arguments(); | |
|
|
36 | // set new arguments | |
|
|
37 | while (iterator.hasNext()) | |
|
|
38 | addArguments(iterator.next()); | |
|
|
39 | ||
|
|
40 | return this; | |
|
|
41 | } | |
|
|
42 | ||
|
|
43 | /** Adds the specified arguments to this builder */ | |
|
|
44 | default CommandBuilder addArguments(String arg0, String... args) { | |
|
|
19 | 45 | return arguments(() -> Stream |
|
|
20 | 46 | .concat(Stream.of(arg0), Stream.of(args)) |
|
|
21 | 47 | .iterator()); |
|
|
22 | 48 | } |
|
|
23 | 49 | |
|
|
50 | /** Replaces arguments in the builder with the specified one. */ | |
|
|
24 | 51 | default CommandBuilder arguments(String... args) { |
|
|
25 | 52 | return arguments(Values.iterable(args)); |
|
|
26 | 53 | } |
|
|
27 | 54 | |
|
|
55 | /** Replaces arguments in the builder with the specified one. */ | |
|
|
28 | 56 | CommandBuilder arguments(Iterable<String> args); |
|
|
29 | 57 | |
|
|
30 | 58 | default CommandBuilder from(CommandSpec commandSpec) { |
| @@ -53,17 +53,8 public abstract class ExecBuilder implem | |||
|
|
53 | 53 | return this; |
|
|
54 | 54 | } |
|
|
55 | 55 | |
|
|
56 | public ExecBuilder commandLine(Iterable<? extends String> cmd) { | |
|
|
57 | requireNonNull(cmd, "cmd can't be null"); | |
|
|
58 | ||
|
|
59 | this.arguments.clear(); | |
|
|
60 | for (var arg : cmd) | |
|
|
61 | this.arguments.add(arg); | |
|
|
62 | return this; | |
|
|
63 | } | |
|
|
64 | ||
|
|
65 | 56 | @Override |
|
|
66 | public ExecBuilder arg(String arg0, String... args) { | |
|
|
57 | public ExecBuilder addArguments(String arg0, String... args) { | |
|
|
67 | 58 | requireNonNull(arg0, "arg0 parameter can't be null"); |
|
|
68 | 59 | arguments.add(arg0); |
|
|
69 | 60 | |
| @@ -2,10 +2,15 package org.implab.gradle.common.utils; | |||
|
|
2 | 2 | |
|
|
3 | 3 | import java.util.Iterator; |
|
|
4 | 4 | import java.util.Map; |
|
|
5 | import java.util.Spliterator; | |
|
|
6 | import java.util.Spliterators; | |
|
|
5 | 7 | import java.util.Map.Entry; |
|
|
8 | import java.util.Optional; | |
|
|
6 | 9 | import java.util.function.Function; |
|
|
7 | 10 | import java.util.function.Supplier; |
|
|
8 | 11 | import java.util.stream.Collectors; |
|
|
12 | import java.util.stream.Stream; | |
|
|
13 | import java.util.stream.StreamSupport; | |
|
|
9 | 14 | |
|
|
10 | 15 | import org.gradle.api.provider.Provider; |
|
|
11 | 16 | |
| @@ -46,6 +51,16 public final class Values { | |||
|
|
46 | 51 | } |
|
|
47 | 52 | } |
|
|
48 | 53 | |
|
|
54 | public static <T> Stream<T> stream(Iterator<T> remaining) { | |
|
|
55 | var spliterator = Spliterators.spliteratorUnknownSize(remaining, 0); | |
|
|
56 | ||
|
|
57 | return StreamSupport.stream(spliterator, false); | |
|
|
58 | } | |
|
|
59 | ||
|
|
60 | public static <T> Optional<T> take(Iterator<T> iterator) { | |
|
|
61 | return iterator.hasNext() ? Optional.of(iterator.next()) : Optional.empty(); | |
|
|
62 | } | |
|
|
63 | ||
|
|
49 | 64 | public static <T> Iterable<T> iterable(T[] values) { |
|
|
50 | 65 | return () -> new ArrayIterator<>(values); |
|
|
51 | 66 | } |
General Comments 0
You need to be logged in to leave comments.
Login now
