]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.api.acr/src/org/argeo/api/acr/ContentUtils.java
Experiment with package level A2 metadata
[lgpl/argeo-commons.git] / org.argeo.api.acr / src / org / argeo / api / acr / ContentUtils.java
1 package org.argeo.api.acr;
2
3 import java.io.PrintStream;
4 import java.net.URI;
5 import java.net.URISyntaxException;
6 import java.util.Arrays;
7 import java.util.Base64;
8 import java.util.List;
9 import java.util.function.BiConsumer;
10
11 import javax.xml.namespace.QName;
12
13 public class ContentUtils {
14 public static void traverse(Content content, BiConsumer<Content, Integer> doIt) {
15 traverse(content, doIt, 0);
16 }
17
18 public static void traverse(Content content, BiConsumer<Content, Integer> doIt, int currentDepth) {
19 doIt.accept(content, currentDepth);
20 int nextDepth = currentDepth + 1;
21 for (Content child : content) {
22 traverse(child, doIt, nextDepth);
23 }
24 }
25
26 public static void print(Content content, PrintStream out, int depth, boolean printText) {
27 StringBuilder sb = new StringBuilder();
28 for (int i = 0; i < depth; i++) {
29 sb.append(" ");
30 }
31 String prefix = sb.toString();
32 out.println(prefix + content.getName());
33 for (QName key : content.keySet()) {
34 out.println(prefix + " " + key + "=" + content.get(key));
35 }
36 if (printText) {
37 if (content.hasText()) {
38 out.println("<![CDATA[" + content.getText().trim() + "]]>");
39 }
40 }
41 }
42
43 public static URI bytesToDataURI(byte[] arr) {
44 String base64Str = Base64.getEncoder().encodeToString(arr);
45 try {
46 final String PREFIX = "data:application/octet-stream;base64,";
47 return new URI(PREFIX + base64Str);
48 } catch (URISyntaxException e) {
49 throw new IllegalStateException("Cannot serialize bytes a Base64 data URI", e);
50 }
51
52 }
53
54 public static byte[] bytesFromDataURI(URI uri) {
55 if (!"data".equals(uri.getScheme()))
56 throw new IllegalArgumentException("URI must have 'data' as a scheme");
57 String schemeSpecificPart = uri.getSchemeSpecificPart();
58 int commaIndex = schemeSpecificPart.indexOf(',');
59 String prefix = schemeSpecificPart.substring(0, commaIndex);
60 List<String> info = Arrays.asList(prefix.split(";"));
61 if (!info.contains("base64"))
62 throw new IllegalArgumentException("URI must specify base64");
63
64 String base64Str = schemeSpecificPart.substring(commaIndex + 1);
65 return Base64.getDecoder().decode(base64Str);
66
67 }
68
69 public static <T> boolean isString(T t) {
70 return t instanceof String;
71 }
72
73 /** Singleton. */
74 private ContentUtils() {
75
76 }
77 }