src/main/java/de/unixwork/uwproj/Util.java

Sun, 28 Jan 2024 14:02:41 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 28 Jan 2024 14:02:41 +0100
changeset 113
24f32dbd88cd
parent 96
eb9152e5f1b6
permissions
-rw-r--r--

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
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
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
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
72 /**
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
73 * Creates an identifier from the given string that can be used as an identifier in a POSIX shell script.
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
74 * <p>
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
75 * If the given string does not contain any character that is illegal in a POSIX shell variable or function name,
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
76 * the string is returned unmodified.
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
77 *
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
78 * @param s the input string
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
79 * @return the sanitized string
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
80 */
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
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
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
83 }
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 }

mercurial