1 package org
.argeo
.api
.gcr
;
3 import java
.io
.PrintStream
;
5 import java
.net
.URISyntaxException
;
6 import java
.util
.Arrays
;
7 import java
.util
.Base64
;
9 import java
.util
.function
.BiConsumer
;
11 public class ContentUtils
{
12 public static void traverse(Content content
, BiConsumer
<Content
, Integer
> doIt
) {
13 traverse(content
, doIt
, 0);
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
);
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
++) {
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
));
35 if (content
.hasText()) {
36 out
.println("<![CDATA[" + content
.getText().trim() + "]]>");
41 public static URI
bytesToDataURI(byte[] arr
) {
42 String base64Str
= Base64
.getEncoder().encodeToString(arr
);
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
);
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");
62 String base64Str
= schemeSpecificPart
.substring(commaIndex
+ 1);
63 return Base64
.getDecoder().decode(base64Str
);
67 public static <T
> boolean isString(T t
) {
68 return t
instanceof String
;
72 private ContentUtils() {