3
3
import com .bloxbean .cardano .client .metadata .cbor .CBORMetadata ;
4
4
import com .bloxbean .cardano .client .metadata .cbor .CBORMetadataList ;
5
5
import com .bloxbean .cardano .client .metadata .cbor .CBORMetadataMap ;
6
+ import com .bloxbean .cardano .client .metadata .helper .JsonNoSchemaToMetadataConverter ;
7
+ import com .bloxbean .cardano .client .metadata .helper .MetadataToJsonNoSchemaConverter ;
8
+ import com .bloxbean .cardano .client .util .JsonUtil ;
9
+ import com .fasterxml .jackson .core .JsonProcessingException ;
10
+ import com .fasterxml .jackson .databind .*;
11
+ import com .fasterxml .jackson .databind .node .ArrayNode ;
12
+ import com .fasterxml .jackson .databind .node .ObjectNode ;
13
+
14
+ import java .math .BigInteger ;
6
15
7
16
/**
8
- * Builder class to create Metadata, MetadataMap and MetadataList
17
+ * The {@code MetadataBuilder} class provides a collection of static methods for creating
18
+ * and manipulating metadata objects in various formats such as CBOR and JSON.
19
+ * It offers functionality to create, deserialize, and convert metadata
20
+ * between JSON and CBOR representations.
21
+ *
22
+ * <p> This class serves as a utility for handling metadata operations, abstracting
23
+ * the complexity of different metadata types and conversion processes behind
24
+ * simple method calls. It includes methods for:
25
+ * <ul>
26
+ * <li>Creating different types of metadata objects like {@code Metadata}, {@code MetadataMap}, {@code MetadataList}.</li>
27
+ * <li>Deserialization of CBOR byte arrays to Metadata objects.</li>
28
+ * <li>Conversion of JSON strings to Metadata and vice-versa.</li>
29
+ * </ul>
30
+ *
31
+ * <p> Example usage:
32
+ * <pre>
33
+ * {@code
34
+ * Metadata metadata = MetadataBuilder.createMetadata();
35
+ * MetadataMap metadataMap = MetadataBuilder.createMap();
36
+ * MetadataList metadataList = MetadataBuilder.createList();
37
+ * Metadata fromJson = MetadataBuilder.metadataFromJson(jsonString);
38
+ * String jsonString = MetadataBuilder.toJson(metadata);
39
+ * }
40
+ * </pre>
9
41
*/
10
42
public class MetadataBuilder {
11
43
12
44
/**
13
45
* Create Metadata object
46
+ *
14
47
* @return Metadata
15
48
*/
16
49
public static Metadata createMetadata () {
@@ -19,6 +52,7 @@ public static Metadata createMetadata() {
19
52
20
53
/**
21
54
* Create MetadataMap object
55
+ *
22
56
* @return MetadataMap
23
57
*/
24
58
public static MetadataMap createMap () {
@@ -27,9 +61,122 @@ public static MetadataMap createMap() {
27
61
28
62
/**
29
63
* Create MetadataList object
64
+ *
30
65
* @return MetadataList
31
66
*/
32
67
public static MetadataList createList () {
33
68
return new CBORMetadataList ();
34
69
}
70
+
71
+ /**
72
+ * Deserialize cbor bytes to Metadata object
73
+ *
74
+ * @param cborBytes
75
+ * @return Metadata
76
+ */
77
+ public static Metadata deserialize (byte [] cborBytes ) {
78
+ return CBORMetadata .deserialize (cborBytes );
79
+ }
80
+
81
+ /**
82
+ * Converts a JSON string to a Metadata object.
83
+ *
84
+ * @param json the JSON string to be converted to a Metadata object
85
+ * @return a Metadata object generated from the provided JSON string
86
+ * @throws IllegalArgumentException if the JSON format is invalid
87
+ */
88
+ public static Metadata metadataFromJson (String json ) {
89
+ try {
90
+ return JsonNoSchemaToMetadataConverter .jsonToCborMetadata (json );
91
+ } catch (Exception e ) {
92
+ throw new IllegalArgumentException ("Invalid json format for metadta" , e );
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Creates a Metadata object from a JSON string.
98
+ *
99
+ * @param label a BigInteger representing the label associated with the metadata
100
+ * @param jsonBody a JSON string representing the metadata content
101
+ * @return a Metadata object containing the parsed data
102
+ * @throws IllegalArgumentException if the JSON format is invalid or not an object/array
103
+ */
104
+ public static Metadata metadataFromJsonBody (BigInteger label , String jsonBody ) {
105
+ JsonNode jsonNode ;
106
+ try {
107
+ jsonNode = JsonUtil .parseJson (jsonBody );
108
+ } catch (JsonProcessingException e ) {
109
+ throw new IllegalArgumentException ("Invalid json format" );
110
+ }
111
+
112
+ if (jsonNode instanceof ObjectNode ) {
113
+ var metadataMap = JsonNoSchemaToMetadataConverter .parseObjectNode ((ObjectNode ) jsonNode );
114
+ return new CBORMetadata ().put (label , metadataMap );
115
+ } else if (jsonNode .isArray ()) {
116
+ var metadataList = JsonNoSchemaToMetadataConverter .parseArrayNode ((ArrayNode ) jsonNode );
117
+ return new CBORMetadata ().put (label , metadataList );
118
+ } else {
119
+ throw new IllegalArgumentException ("Invalid json format. Should be an object or an array" );
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Parses a JSON string to create a MetadataMap instance.
125
+ *
126
+ * @param jsonBody the JSON string to be converted to a MetadataMap object
127
+ * @return a MetadataMap object generated from the provided JSON object
128
+ * @throws IllegalArgumentException if the JSON format is invalid
129
+ */
130
+ public static MetadataMap metadataMapFromJsonBody (String jsonBody ) {
131
+ try {
132
+ return JsonNoSchemaToMetadataConverter .parseObjectNode ((ObjectNode ) JsonUtil .parseJson (jsonBody ));
133
+ } catch (JsonProcessingException e ) {
134
+ throw new IllegalArgumentException ("Could not parse json body to MetadataMap" , e );
135
+ }
136
+ }
137
+
138
+ /**
139
+ * Converts a JSON string into a MetadataList instance.
140
+ *
141
+ * @param jsonBody the JSON string to be converted to a MetadataList object
142
+ * @return a MetadataList object generated from the provided JSON array
143
+ * @throws IllegalArgumentException if the JSON format is invalid or cannot be parsed
144
+ */
145
+ public static MetadataList metadataListFromJsonBody (String jsonBody ) {
146
+ try {
147
+ return JsonNoSchemaToMetadataConverter .parseArrayNode ((ArrayNode ) JsonUtil .parseJson (jsonBody ));
148
+ } catch (JsonProcessingException e ) {
149
+ throw new IllegalArgumentException ("Could not parse json body to MetadataMap" , e );
150
+ }
151
+ }
152
+
153
+ /**
154
+ * Converts a Metadata object to its JSON representation.
155
+ *
156
+ * @param metadata the Metadata object to be converted
157
+ * @return a JsonNode representing the JSON equivalent of the given Metadata
158
+ * @throws IllegalArgumentException if the serialization results in an invalid JSON format
159
+ */
160
+ public static String toJson (Metadata metadata ) {
161
+ try {
162
+ return MetadataToJsonNoSchemaConverter .cborBytesToJson (metadata .serialize ());
163
+ } catch (Exception e ) {
164
+ throw new IllegalArgumentException ("Invalid json format" );
165
+ }
166
+ }
167
+
168
+ /**
169
+ * Converts the provided CBOR byte array to a JSON string.
170
+ *
171
+ * @param serializedCbor A byte array serialized CBOR data to be converted to JSON.
172
+ * @return A string containing the JSON representation of the given CBOR data.
173
+ * @throws IllegalArgumentException if the CBOR data cannot be converted to a valid JSON format.
174
+ */
175
+ public static String toJson (byte [] serializedCbor ) {
176
+ try {
177
+ return MetadataToJsonNoSchemaConverter .cborBytesToJson (serializedCbor );
178
+ } catch (Exception e ) {
179
+ throw new IllegalArgumentException ("Invalid json format" );
180
+ }
181
+ }
35
182
}
0 commit comments