Sun, 28 Jan 2024 14:02:41 +0100
minimize application code
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | package de.unixwork.uwproj; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | import org.w3c.dom.Element; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | import org.w3c.dom.Node; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | import org.w3c.dom.NodeList; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | |
113
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
7 | import java.util.stream.IntStream; |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
8 | import java.util.stream.Stream; |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
9 | |
40
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
0
diff
changeset
|
10 | public class Util { |
95
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
11 | |
40
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
0
diff
changeset
|
12 | /** |
113
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
13 | * Returns a stream of all children for the specified XML node. |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
14 | * @param node the node |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
15 | * @return a stream of child elements of node |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
16 | */ |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
17 | public static Stream<Element> getChildElements(Node node) { |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
18 | final var children = node.getChildNodes(); |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
19 | return IntStream.range(0, children.getLength()) |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
20 | .mapToObj(children::item) |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
21 | .filter(n -> n.getNodeType() == Node.ELEMENT_NODE) |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
22 | .map(n -> (Element)n); |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
23 | } |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
24 | |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
25 | /** |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
26 | * Returns the value of an attribute, or a default if the attribute is not set. |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
27 | * @param elm the element |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
28 | * @param attr the attribute name |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
29 | * @param def the default value when the attribute is empty |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
30 | * @return the attribute value or the default |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
31 | */ |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
32 | public static String getAttrOrDefault(Element elm, String attr, String def) { |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
33 | final var v = elm.getAttribute(attr); |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
34 | return v.isBlank() ? def : v; |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
35 | } |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
36 | |
24f32dbd88cd
minimize application code
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
37 | /** |
95
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
38 | * Returns the text content of the given element with indentation automatically trimmed. |
40
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
0
diff
changeset
|
39 | * |
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
0
diff
changeset
|
40 | * @param elm the element |
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
0
diff
changeset
|
41 | * @return the contents or empty string if there are no contents |
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
0
diff
changeset
|
42 | */ |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | public static String getContent(Element elm) { |
95
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
44 | return getContent(elm, true); |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
45 | } |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
46 | |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
47 | /** |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
48 | * Returns the text content of the given element. |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
49 | * |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
50 | * @param elm the element |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
51 | * @param trimIndent indicates whether indentation shall be trimmed |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
52 | * @return the contents or empty string if there are no contents |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
53 | */ |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
54 | public static String getContent(Element elm, boolean trimIndent) { |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
55 | NodeList nodes = elm.getChildNodes(); |
40
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
0
diff
changeset
|
56 | for (int i = 0; i < nodes.getLength(); i++) { |
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
0
diff
changeset
|
57 | var node = nodes.item(i); |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | if (node.getNodeType() == Node.TEXT_NODE) { |
41 | 59 | final var v = node.getNodeValue(); |
95
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
60 | if (v == null) { |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
61 | return ""; |
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
62 | } else if (trimIndent) { |
96
eb9152e5f1b6
trim all contents by default - relates to #317
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
63 | return v.trim().replaceAll("\\n[ \\t]+", "\n"); |
95
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
64 | } else { |
96
eb9152e5f1b6
trim all contents by default - relates to #317
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
65 | return v.trim(); |
95
afe11f0ad62b
trim indents by default - fixes #317
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
66 | } |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
67 | } |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
68 | } |
40
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
0
diff
changeset
|
69 | return ""; |
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
0
diff
changeset
|
70 | } |
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
0
diff
changeset
|
71 | |
41 | 72 | /** |
73 | * Creates an identifier from the given string that can be used as an identifier in a POSIX shell script. | |
74 | * <p> | |
75 | * If the given string does not contain any character that is illegal in a POSIX shell variable or function name, | |
76 | * the string is returned unmodified. | |
77 | * | |
78 | * @param s the input string | |
79 | * @return the sanitized string | |
80 | */ | |
81 | public static String shId(String s) { | |
64
00586d892855
basic implementation of shId()
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
82 | return s.replaceAll("[^A-Za-z0-9_]", "_"); |
41 | 83 | } |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
84 | } |