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