Line data Source code
1 : /* File: json_element_reader.c; Copyright and License: see below */
2 :
3 : #include "json/json_element_reader.h"
4 : #include "u8/u8_trace.h"
5 : #include "u8/u8_log.h"
6 : #include <assert.h>
7 :
8 21 : void json_element_reader_init ( json_element_reader_t *this_, universal_input_stream_t *in_data )
9 : {
10 21 : U8_TRACE_BEGIN();
11 21 : assert( NULL != in_data );
12 :
13 21 : (*this_).temp_string = utf8stringbuf_new( (*this_).temp_string_buffer, sizeof((*this_).temp_string_buffer) );
14 :
15 21 : json_token_reader_init( &((*this_).tokenizer), in_data );
16 :
17 21 : (*this_).top_array_after_first_entry = false;
18 21 : (*this_).sub_array_after_first_entry = false;
19 :
20 21 : U8_TRACE_END();
21 21 : }
22 :
23 0 : void json_element_reader_reinit ( json_element_reader_t *this_, universal_input_stream_t *in_data )
24 : {
25 0 : U8_TRACE_BEGIN();
26 0 : assert( NULL != in_data );
27 :
28 0 : json_element_reader_destroy( this_ );
29 0 : json_element_reader_init( this_, in_data );
30 :
31 0 : U8_TRACE_END();
32 0 : }
33 :
34 21 : void json_element_reader_destroy ( json_element_reader_t *this_ )
35 : {
36 21 : U8_TRACE_BEGIN();
37 :
38 21 : json_token_reader_destroy( &((*this_).tokenizer) );
39 :
40 21 : U8_TRACE_END();
41 21 : }
42 :
43 21 : u8_error_t json_element_reader_expect_header ( json_element_reader_t *this_ )
44 : {
45 21 : U8_TRACE_BEGIN();
46 21 : u8_error_t result = U8_ERROR_NONE;
47 21 : char member_name_buf[24] = "";
48 21 : utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
49 :
50 21 : result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
51 :
52 21 : if ( U8_ERROR_NONE == result )
53 : {
54 20 : result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
55 20 : if ( ! utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_HEAD ) )
56 : {
57 0 : U8_LOG_ERROR_INT( "unexpected object contents at line",
58 : json_token_reader_get_input_line( &((*this_).tokenizer) )
59 : );
60 0 : result |= U8_ERROR_PARSER_STRUCTURE;
61 : }
62 : }
63 :
64 21 : if ( U8_ERROR_NONE == result )
65 : {
66 20 : result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
67 : }
68 :
69 21 : if ( U8_ERROR_NONE == result )
70 : {
71 20 : result = json_element_reader_skip_next_object( this_ );
72 : }
73 :
74 21 : U8_TRACE_END_ERR( result );
75 21 : return result;
76 : }
77 :
78 55 : u8_error_t json_element_reader_expect_begin_top_array ( json_element_reader_t *this_ )
79 : {
80 55 : U8_TRACE_BEGIN();
81 55 : u8_error_t result = U8_ERROR_NONE;
82 55 : char member_name_buf[24] = "";
83 55 : utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
84 :
85 55 : result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
86 :
87 55 : if ( U8_ERROR_NONE == result )
88 : {
89 55 : result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
90 55 : if (( ! utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_VIEWS ) )
91 35 : && ( ! utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_NODES ) )
92 17 : && ( ! utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_EDGES ) ))
93 : {
94 0 : U8_LOG_ERROR_INT( "unexpected object contents at line",
95 : json_token_reader_get_input_line( &((*this_).tokenizer) )
96 : );
97 0 : result |= U8_ERROR_PARSER_STRUCTURE;
98 : }
99 : }
100 :
101 55 : if ( U8_ERROR_NONE == result )
102 : {
103 55 : result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
104 : }
105 :
106 55 : if ( U8_ERROR_NONE == result )
107 : {
108 55 : result = json_token_reader_expect_begin_array( &((*this_).tokenizer) );
109 : }
110 :
111 55 : U8_TRACE_END_ERR( result );
112 55 : return result;
113 : }
114 :
115 14 : u8_error_t json_element_reader_expect_footer ( json_element_reader_t *this_ )
116 : {
117 14 : U8_TRACE_BEGIN();
118 14 : u8_error_t result = U8_ERROR_NONE;
119 :
120 : bool end_ok;
121 14 : result = json_token_reader_check_end_object ( &((*this_).tokenizer), &end_ok );
122 14 : if ( ! end_ok )
123 : {
124 0 : U8_LOG_ERROR_INT( "unexpected object contents at line",
125 : json_token_reader_get_input_line( &((*this_).tokenizer) )
126 : );
127 0 : result |= U8_ERROR_PARSER_STRUCTURE;
128 : }
129 :
130 14 : if ( U8_ERROR_NONE == result )
131 : {
132 14 : result = json_token_reader_expect_eof ( &((*this_).tokenizer) );
133 : }
134 :
135 14 : U8_TRACE_END_ERR( result );
136 14 : return result;
137 : }
138 :
139 86 : u8_error_t json_element_reader_check_end_top_array ( json_element_reader_t *this_, bool* out_end )
140 : {
141 86 : U8_TRACE_BEGIN();
142 86 : assert( NULL != out_end );
143 86 : u8_error_t result = U8_ERROR_NONE;
144 :
145 86 : result = json_token_reader_check_end_array ( &((*this_).tokenizer), out_end );
146 :
147 86 : if (( U8_ERROR_NONE == result ) && ( *out_end ))
148 : {
149 49 : (*this_).top_array_after_first_entry = false;
150 : }
151 :
152 86 : U8_TRACE_END_ERR( result );
153 86 : return result;
154 : }
155 :
156 20 : u8_error_t json_element_reader_expect_begin_sub_array ( json_element_reader_t *this_ )
157 : {
158 20 : U8_TRACE_BEGIN();
159 20 : u8_error_t result = U8_ERROR_NONE;
160 :
161 20 : result = json_token_reader_expect_begin_array( &((*this_).tokenizer) );
162 20 : if ( U8_ERROR_NONE == result )
163 : {
164 20 : (*this_).sub_array_after_first_entry = false;
165 : }
166 :
167 20 : U8_TRACE_END_ERR( result );
168 20 : return result;
169 : }
170 :
171 49 : u8_error_t json_element_reader_check_end_sub_array ( json_element_reader_t *this_, bool* out_end )
172 : {
173 49 : U8_TRACE_BEGIN();
174 49 : assert( NULL != out_end );
175 49 : u8_error_t result = U8_ERROR_NONE;
176 :
177 49 : result = json_token_reader_check_end_array ( &((*this_).tokenizer), out_end );
178 :
179 49 : if ( U8_ERROR_NONE == result )
180 : {
181 49 : if ( *out_end )
182 : {
183 20 : (*this_).sub_array_after_first_entry = false;
184 : }
185 : else
186 : {
187 29 : if ( (*this_).sub_array_after_first_entry )
188 : {
189 11 : result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
190 : }
191 : else
192 : {
193 18 : (*this_).sub_array_after_first_entry = true;
194 : }
195 : }
196 : }
197 :
198 49 : U8_TRACE_END_ERR( result );
199 49 : return result;
200 : }
201 :
202 37 : u8_error_t json_element_reader_expect_begin_type_of_element ( json_element_reader_t *this_, data_table_t *out_type )
203 : {
204 37 : U8_TRACE_BEGIN();
205 37 : assert ( NULL != out_type );
206 37 : u8_error_t result = U8_ERROR_NONE;
207 :
208 : bool array_end;
209 : char member_name_buf[24];
210 37 : utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
211 :
212 37 : result = json_token_reader_check_end_array ( &((*this_).tokenizer), &array_end );
213 :
214 37 : if ( U8_ERROR_NONE == result )
215 : {
216 37 : if ( array_end )
217 : {
218 0 : (*out_type) = DATA_TABLE_VOID;
219 : }
220 : else
221 : {
222 37 : if ( (*this_).top_array_after_first_entry )
223 : {
224 1 : result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
225 : }
226 : else
227 : {
228 36 : (*this_).top_array_after_first_entry = true;
229 : }
230 37 : if ( U8_ERROR_NONE == result )
231 : {
232 37 : result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
233 : }
234 37 : if ( U8_ERROR_NONE == result )
235 : {
236 37 : result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
237 : }
238 37 : if ( U8_ERROR_NONE == result )
239 : {
240 37 : if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM ) )
241 : {
242 9 : (*out_type) = DATA_TABLE_DIAGRAM;
243 : }
244 : /*
245 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT ) )
246 : {
247 : (*out_type) = DATA_TABLE_DIAGRAMELEMENT;
248 : }
249 : */
250 28 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER ) )
251 : {
252 14 : (*out_type) = DATA_TABLE_CLASSIFIER;
253 : }
254 : /*
255 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE ) )
256 : {
257 : (*out_type) = DATA_TABLE_FEATURE;
258 : }
259 : */
260 14 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP ) )
261 : {
262 13 : (*out_type) = DATA_TABLE_RELATIONSHIP;
263 : }
264 : else
265 : {
266 1 : U8_LOG_ERROR_INT( "unexpected token at line",
267 : json_token_reader_get_input_line( &((*this_).tokenizer) )
268 : );
269 1 : result = U8_ERROR_PARSER_STRUCTURE;
270 : }
271 : }
272 37 : if ( U8_ERROR_NONE == result )
273 : {
274 36 : result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
275 : }
276 : }
277 : }
278 :
279 37 : U8_TRACE_END_ERR( result );
280 37 : return result;
281 : }
282 :
283 31 : u8_error_t json_element_reader_expect_end_type_of_element ( json_element_reader_t *this_ )
284 : {
285 31 : U8_TRACE_BEGIN();
286 31 : u8_error_t result = U8_ERROR_NONE;
287 : bool condition;
288 :
289 31 : result = json_token_reader_check_end_object ( &((*this_).tokenizer), &condition );
290 31 : if ( ! condition )
291 : {
292 0 : U8_LOG_ERROR_INT( "unexpected object contents at line",
293 : json_token_reader_get_input_line( &((*this_).tokenizer) )
294 : );
295 0 : result |= U8_ERROR_PARSER_STRUCTURE;
296 : }
297 :
298 31 : U8_TRACE_END_ERR( result );
299 31 : return result;
300 : }
301 :
302 14 : u8_error_t json_element_reader_get_next_classifier ( json_element_reader_t *this_,
303 : data_classifier_t *out_object,
304 : bool* out_has_features_array )
305 : {
306 14 : U8_TRACE_BEGIN();
307 14 : assert ( NULL != out_object );
308 14 : assert ( NULL != out_has_features_array );
309 14 : u8_error_t result = U8_ERROR_NONE;
310 :
311 : char member_name_buf[24];
312 14 : utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
313 :
314 14 : data_classifier_init_empty( out_object );
315 :
316 : /* header */
317 :
318 14 : result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
319 :
320 : /* members */
321 :
322 14 : bool first_member_passed = false;
323 14 : bool object_end = false;
324 14 : bool break_at_features = false;
325 156 : while (( ! object_end )&&( ! break_at_features )&&( U8_ERROR_NONE == result ))
326 : {
327 142 : result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
328 142 : if ( U8_ERROR_NONE == result )
329 : {
330 142 : if ( ! object_end )
331 : {
332 142 : if ( first_member_passed )
333 : {
334 128 : result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
335 : }
336 : else
337 : {
338 14 : first_member_passed = true;
339 : }
340 142 : if ( U8_ERROR_NONE == result )
341 : {
342 142 : result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
343 : }
344 142 : if ( U8_ERROR_NONE == result )
345 : {
346 142 : result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
347 : }
348 142 : if ( U8_ERROR_NONE == result )
349 : {
350 142 : if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_ID ) )
351 : {
352 : int64_t parsed_integer;
353 14 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
354 14 : data_classifier_set_row_id ( out_object, parsed_integer );
355 : }
356 128 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_MAIN_TYPE )
357 114 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_TYPE_ID ) )
358 14 : {
359 : int64_t parsed_integer;
360 14 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
361 14 : data_classifier_set_main_type ( out_object, parsed_integer );
362 : }
363 114 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_TYPE_NAME ) )
364 : {
365 7 : result = json_element_reader_skip_next_string( this_ );
366 : }
367 107 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_X_ORDER ) )
368 : {
369 : int64_t parsed_integer;
370 14 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
371 14 : data_classifier_set_x_order ( out_object, parsed_integer );
372 : }
373 93 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_Y_ORDER ) )
374 : {
375 : int64_t parsed_integer;
376 14 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
377 14 : data_classifier_set_y_order ( out_object, parsed_integer );
378 : }
379 79 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_LIST_ORDER )
380 65 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_ORDER ) )
381 14 : {
382 : int64_t parsed_integer;
383 14 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
384 14 : data_classifier_set_list_order ( out_object, parsed_integer );
385 : }
386 65 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_STEREOTYPE ) )
387 : {
388 14 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
389 14 : data_classifier_set_stereotype( out_object,
390 14 : utf8stringbuf_get_string( &((*this_).temp_string) )
391 : );
392 : }
393 51 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_NAME ) )
394 : {
395 14 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
396 14 : data_classifier_set_name( out_object,
397 14 : utf8stringbuf_get_string( &((*this_).temp_string) )
398 : );
399 : }
400 37 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_DESCRIPTION ) )
401 : {
402 14 : result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
403 14 : data_classifier_set_description( out_object,
404 14 : utf8stringbuf_get_string( &((*this_).temp_string) )
405 : );
406 : }
407 23 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_UUID ) )
408 : {
409 9 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
410 9 : result |= data_classifier_set_uuid( out_object,
411 9 : utf8stringbuf_get_string( &((*this_).temp_string) )
412 : );
413 : }
414 14 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_FEATURES ) )
415 : {
416 14 : break_at_features = true; /* end the loop */
417 : }
418 : else
419 : {
420 0 : U8_LOG_ERROR_INT( "unexpected member name at line",
421 : json_token_reader_get_input_line( &((*this_).tokenizer) )
422 : );
423 0 : result = U8_ERROR_PARSER_STRUCTURE;
424 : }
425 : }
426 : }
427 : }
428 : else
429 : {
430 0 : U8_LOG_ERROR_INT( "unexpected character at line",
431 : json_token_reader_get_input_line( &((*this_).tokenizer) )
432 : );
433 0 : result = U8_ERROR_PARSER_STRUCTURE;
434 0 : object_end = true;
435 : }
436 : }
437 :
438 : /* footer */
439 :
440 14 : if ( U8_ERROR_NONE == result )
441 : {
442 14 : data_classifier_trace( out_object );
443 : }
444 :
445 14 : *out_has_features_array = break_at_features;
446 14 : U8_TRACE_END_ERR( result );
447 14 : return result;
448 : }
449 :
450 20 : u8_error_t json_element_reader_end_unfinished_object ( json_element_reader_t *this_ )
451 : {
452 20 : U8_TRACE_BEGIN();
453 20 : u8_error_t result = U8_ERROR_NONE;
454 :
455 20 : bool object_end = false;
456 20 : result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
457 20 : if ( U8_ERROR_NONE == result )
458 : {
459 20 : if (! object_end)
460 : {
461 0 : result = U8_ERROR_PARSER_STRUCTURE;
462 : }
463 : }
464 :
465 20 : U8_TRACE_END_ERR( result );
466 20 : return result;
467 : }
468 :
469 9 : u8_error_t json_element_reader_get_next_diagram ( json_element_reader_t *this_,
470 : data_diagram_t *out_object,
471 : utf8stringbuf_t out_parent_uuid,
472 : bool* out_has_diagramelements_array )
473 : {
474 9 : U8_TRACE_BEGIN();
475 9 : assert ( NULL != out_object );
476 9 : assert ( NULL != out_has_diagramelements_array );
477 9 : u8_error_t result = U8_ERROR_NONE;
478 :
479 : char member_name_buf[24];
480 9 : utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
481 :
482 9 : data_diagram_init_empty( out_object );
483 9 : utf8stringbuf_clear( &out_parent_uuid );
484 :
485 : /* header */
486 :
487 9 : result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
488 :
489 : /* members */
490 :
491 9 : bool first_member_passed = false;
492 9 : bool object_end = false;
493 9 : bool break_at_subelements = false;
494 92 : while (( ! object_end )&&( ! break_at_subelements )&&( U8_ERROR_NONE == result ))
495 : {
496 83 : result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
497 83 : if ( U8_ERROR_NONE == result )
498 : {
499 83 : if ( ! object_end )
500 : {
501 82 : if ( first_member_passed )
502 : {
503 74 : result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
504 : }
505 : else
506 : {
507 8 : first_member_passed = true;
508 : }
509 82 : if ( U8_ERROR_NONE == result )
510 : {
511 82 : result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
512 : }
513 82 : if ( U8_ERROR_NONE == result )
514 : {
515 82 : result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
516 : }
517 82 : if ( U8_ERROR_NONE == result )
518 : {
519 82 : if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_ID ) )
520 : {
521 : int64_t parsed_integer;
522 8 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
523 8 : data_diagram_set_row_id ( out_object, parsed_integer );
524 : }
525 74 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_PARENT_ID ) )
526 : {
527 : int64_t ignored_integer;
528 0 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &ignored_integer );
529 : (void) ignored_integer;
530 : }
531 74 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_PARENT_NAME ) )
532 : {
533 7 : result = json_element_reader_skip_next_string( this_ );
534 : }
535 67 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_DIAGRAM_TYPE )
536 59 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_TYPE_ID ) )
537 8 : {
538 : int64_t parsed_integer;
539 8 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
540 8 : data_diagram_set_diagram_type ( out_object, parsed_integer );
541 : }
542 59 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_TYPE_NAME ) )
543 : {
544 7 : result = json_element_reader_skip_next_string( this_ );
545 : }
546 52 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_LIST_ORDER )
547 44 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_ORDER ) )
548 8 : {
549 : int64_t parsed_integer;
550 8 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
551 8 : data_diagram_set_list_order ( out_object, parsed_integer );
552 : }
553 44 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_DESCRIPTION ) )
554 : {
555 8 : result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
556 8 : data_diagram_set_description( out_object,
557 8 : utf8stringbuf_get_string( &((*this_).temp_string) )
558 : );
559 : }
560 36 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_NAME ) )
561 : {
562 8 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
563 8 : result |= data_diagram_set_name( out_object,
564 8 : utf8stringbuf_get_string( &((*this_).temp_string) )
565 : );
566 : }
567 28 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_STEREOTYPE ) )
568 : {
569 : /* new in 1.43.0: stereotype; imported since 1.47.0 */
570 0 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
571 0 : result |= data_diagram_set_stereotype( out_object,
572 0 : utf8stringbuf_get_string( &((*this_).temp_string) )
573 : );
574 : }
575 28 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_DISPLAY_FLAGS ) )
576 : {
577 : int64_t parsed_integer;
578 7 : result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
579 7 : data_diagram_set_display_flags ( out_object, parsed_integer );
580 : }
581 21 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_DISPLAY_FLAG_NAMES ) )
582 : {
583 7 : result = json_element_reader_skip_next_string( this_ );
584 : }
585 14 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_PARENT ) )
586 : {
587 0 : result = json_token_reader_read_string_value( &((*this_).tokenizer), out_parent_uuid );
588 : }
589 14 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_UUID ) )
590 : {
591 7 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
592 7 : result |= data_diagram_set_uuid( out_object,
593 7 : utf8stringbuf_get_string( &((*this_).temp_string) )
594 : );
595 : }
596 7 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_ELEMENTS )
597 0 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_ELEMENT_LIST ) )
598 : {
599 7 : break_at_subelements = true; /* end the loop */
600 : }
601 : else
602 : {
603 0 : U8_LOG_ERROR_INT( "unexpected member name at line",
604 : json_token_reader_get_input_line( &((*this_).tokenizer) )
605 : );
606 0 : result = U8_ERROR_PARSER_STRUCTURE;
607 : }
608 : }
609 : }
610 : }
611 : else
612 : {
613 0 : U8_LOG_ERROR_INT( "unexpected character at line",
614 : json_token_reader_get_input_line( &((*this_).tokenizer) )
615 : );
616 0 : result = U8_ERROR_PARSER_STRUCTURE;
617 0 : object_end = true;
618 : }
619 : }
620 :
621 : /* footer */
622 :
623 9 : if ( U8_ERROR_NONE == result )
624 : {
625 8 : data_diagram_trace( out_object );
626 : }
627 :
628 9 : *out_has_diagramelements_array = break_at_subelements;
629 9 : U8_TRACE_END_ERR( result );
630 9 : return result;
631 : }
632 :
633 13 : u8_error_t json_element_reader_get_next_relationship ( json_element_reader_t *this_,
634 : data_relationship_t *out_object,
635 : utf8stringbuf_t out_from_node_uuid,
636 : utf8stringbuf_t out_to_node_uuid
637 : )
638 : {
639 13 : U8_TRACE_BEGIN();
640 13 : assert( NULL != out_object );
641 13 : u8_error_t result = U8_ERROR_NONE;
642 :
643 : char member_name_buf[24];
644 13 : utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
645 :
646 13 : data_relationship_init_empty( out_object );
647 13 : utf8stringbuf_clear( &out_from_node_uuid );
648 13 : utf8stringbuf_clear( &out_to_node_uuid );
649 :
650 : /* header */
651 :
652 13 : result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
653 :
654 : /* members */
655 :
656 13 : bool first_member_passed = false;
657 13 : bool object_end = false;
658 236 : while (( ! object_end )&&( U8_ERROR_NONE == result ))
659 : {
660 223 : result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
661 223 : if ( U8_ERROR_NONE == result )
662 : {
663 223 : if ( ! object_end )
664 : {
665 210 : if ( first_member_passed )
666 : {
667 197 : result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
668 : }
669 : else
670 : {
671 13 : first_member_passed = true;
672 : }
673 210 : if ( U8_ERROR_NONE == result )
674 : {
675 210 : result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
676 : }
677 210 : if ( U8_ERROR_NONE == result )
678 : {
679 210 : result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
680 : }
681 210 : if ( U8_ERROR_NONE == result )
682 : {
683 210 : if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_ID ) )
684 : {
685 : int64_t parsed_integer;
686 13 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
687 13 : data_relationship_set_row_id ( out_object, parsed_integer );
688 : }
689 197 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_MAIN_TYPE )
690 184 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_TYPE_ID ) )
691 13 : {
692 : int64_t parsed_integer;
693 13 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
694 13 : data_relationship_set_main_type ( out_object, parsed_integer );
695 : }
696 184 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_TYPE_NAME ) )
697 : {
698 7 : result = json_element_reader_skip_next_string( this_ );
699 : }
700 177 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_STEREOTYPE ) )
701 : {
702 : /* new in 1.43.0: stereotype; imported since 1.47.0 */
703 0 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
704 0 : data_relationship_set_stereotype( out_object,
705 0 : utf8stringbuf_get_string( &((*this_).temp_string) )
706 : );
707 : }
708 177 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_LIST_ORDER )
709 164 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_ORDER ) )
710 13 : {
711 : int64_t parsed_integer;
712 13 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
713 13 : data_relationship_set_list_order ( out_object, parsed_integer );
714 : }
715 164 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_DESCRIPTION ) )
716 : {
717 13 : result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
718 13 : data_relationship_set_description( out_object,
719 13 : utf8stringbuf_get_string( &((*this_).temp_string) )
720 : );
721 : }
722 151 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_NAME ) )
723 : {
724 13 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
725 13 : data_relationship_set_name( out_object,
726 13 : utf8stringbuf_get_string( &((*this_).temp_string) )
727 : );
728 : }
729 138 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_CLASSIFIER_ID ) )
730 : {
731 : int64_t parsed_integer;
732 13 : result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
733 13 : data_relationship_set_from_classifier_row_id ( out_object, parsed_integer );
734 : }
735 125 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_CLASSIFIER_NAME )
736 112 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_NODE_NAME ) )
737 : {
738 13 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
739 13 : U8_TRACE_INFO_STR( "from-classifier name:", utf8stringbuf_get_string( &((*this_).temp_string) ) );
740 : }
741 112 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_FEATURE_ID ) )
742 : {
743 : int64_t parsed_integer;
744 13 : result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
745 13 : data_relationship_set_from_feature_row_id ( out_object, parsed_integer );
746 : }
747 99 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_FEATURE_KEY )
748 86 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_PORT_NAME ) )
749 : {
750 13 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
751 13 : U8_TRACE_INFO_STR( "from-feature key:", utf8stringbuf_get_string( &((*this_).temp_string) ) );
752 : }
753 86 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_CLASSIFIER_ID ) )
754 : {
755 : int64_t parsed_integer;
756 13 : result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
757 13 : data_relationship_set_to_classifier_row_id ( out_object, parsed_integer );
758 : }
759 73 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_CLASSIFIER_NAME )
760 60 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_NODE_NAME ) )
761 : {
762 13 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
763 13 : U8_TRACE_INFO_STR( "to-classifier name:", utf8stringbuf_get_string( &((*this_).temp_string) ) );
764 : }
765 60 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_FEATURE_ID ) )
766 : {
767 : int64_t parsed_integer;
768 13 : result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
769 13 : data_relationship_set_to_feature_row_id ( out_object, parsed_integer );
770 : }
771 47 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_FEATURE_KEY )
772 34 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_PORT_NAME ) )
773 : {
774 :
775 13 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
776 13 : U8_TRACE_INFO_STR( "to-feature key:", utf8stringbuf_get_string( &((*this_).temp_string) ) );
777 : }
778 34 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_NODE )
779 21 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_NODE_UUID ) )
780 : {
781 13 : result = json_token_reader_read_string_value( &((*this_).tokenizer), out_from_node_uuid );
782 : }
783 21 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_NODE )
784 8 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_NODE_UUID ) )
785 : {
786 13 : result = json_token_reader_read_string_value( &((*this_).tokenizer), out_to_node_uuid );
787 : }
788 8 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_UUID ) )
789 : {
790 8 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
791 8 : result |= data_relationship_set_uuid( out_object,
792 8 : utf8stringbuf_get_string( &((*this_).temp_string) )
793 : );
794 : }
795 : else
796 : {
797 0 : U8_LOG_ERROR_INT( "unexpected member name at line",
798 : json_token_reader_get_input_line( &((*this_).tokenizer) )
799 : );
800 0 : result = U8_ERROR_PARSER_STRUCTURE;
801 : }
802 : }
803 : }
804 : }
805 : else
806 : {
807 0 : U8_LOG_ERROR_INT( "unexpected character at line",
808 : json_token_reader_get_input_line( &((*this_).tokenizer) )
809 : );
810 0 : result = U8_ERROR_PARSER_STRUCTURE;
811 0 : object_end = true;
812 : }
813 : }
814 :
815 : /* footer */
816 :
817 13 : if ( U8_ERROR_NONE == result )
818 : {
819 13 : data_relationship_trace( out_object );
820 : }
821 :
822 13 : U8_TRACE_END_ERR( result );
823 13 : return result;
824 : }
825 :
826 20 : u8_error_t json_element_reader_skip_next_object ( json_element_reader_t *this_ )
827 : {
828 20 : U8_TRACE_BEGIN();
829 20 : u8_error_t result = U8_ERROR_NONE;
830 :
831 : char member_name_buf[24];
832 20 : utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
833 :
834 : /* header */
835 :
836 20 : result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
837 :
838 : /* members */
839 :
840 20 : bool first_member_passed = false;
841 20 : bool object_end = false;
842 61 : while (( ! object_end )&&( U8_ERROR_NONE == result ))
843 : {
844 41 : result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
845 41 : if ( U8_ERROR_NONE == result )
846 : {
847 41 : if ( ! object_end )
848 : {
849 21 : if ( first_member_passed )
850 : {
851 18 : result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
852 : }
853 : else
854 : {
855 3 : first_member_passed = true;
856 : }
857 21 : if ( U8_ERROR_NONE == result )
858 : {
859 21 : result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
860 : }
861 21 : if ( U8_ERROR_NONE == result )
862 : {
863 21 : result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
864 : }
865 : json_value_type_t v_type;
866 21 : if ( U8_ERROR_NONE == result )
867 : {
868 21 : result = json_token_reader_get_value_type ( &((*this_).tokenizer), &v_type );
869 : }
870 21 : if ( U8_ERROR_NONE == result )
871 : {
872 21 : switch ( v_type )
873 : {
874 0 : case JSON_VALUE_TYPE_OBJECT:
875 : {
876 0 : result = U8_ERROR_PARSER_STRUCTURE; /* this function does not expect objects in objects */
877 : }
878 0 : break;
879 :
880 0 : case JSON_VALUE_TYPE_ARRAY:
881 : {
882 0 : result = U8_ERROR_PARSER_STRUCTURE; /* this function does not expect arrays in objects */
883 : }
884 0 : break;
885 :
886 6 : case JSON_VALUE_TYPE_NUMBER:
887 : {
888 : double parsed_number;
889 6 : /* result = */ json_token_reader_read_number_value ( &((*this_).tokenizer), &parsed_number );
890 : /* ignore the U8_ERROR_NOT_YET_IMPLEMENTED here... */
891 : }
892 6 : break;
893 :
894 0 : case JSON_VALUE_TYPE_INTEGER:
895 : {
896 : int64_t parsed_integer;
897 0 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
898 : }
899 0 : break;
900 :
901 15 : case JSON_VALUE_TYPE_STRING:
902 : {
903 15 : result = json_element_reader_skip_next_string( this_ );
904 : }
905 15 : break;
906 :
907 0 : case JSON_VALUE_TYPE_BOOLEAN:
908 : {
909 : bool parsed_bool;
910 0 : result = json_token_reader_read_boolean_value ( &((*this_).tokenizer), &parsed_bool );
911 : }
912 0 : break;
913 :
914 0 : case JSON_VALUE_TYPE_NULL:
915 : {
916 0 : result = json_token_reader_expect_null_value ( &((*this_).tokenizer) );
917 : }
918 0 : break;
919 :
920 0 : case JSON_VALUE_TYPE_UNDEF:
921 : default:
922 : {
923 0 : U8_LOG_ERROR_INT( "unexpected member name at line",
924 : json_token_reader_get_input_line( &((*this_).tokenizer) )
925 : );
926 0 : result = U8_ERROR_PARSER_STRUCTURE; /* this function does not expect objects in objects */
927 : }
928 0 : break;
929 : }
930 : }
931 : }
932 : }
933 : else
934 : {
935 0 : U8_LOG_ERROR_INT( "unexpected character at line",
936 : json_token_reader_get_input_line( &((*this_).tokenizer) )
937 : );
938 0 : result = U8_ERROR_PARSER_STRUCTURE;
939 0 : object_end = true;
940 : }
941 : }
942 :
943 : /* footer */
944 :
945 20 : U8_TRACE_END_ERR( result );
946 20 : return result;
947 : }
948 :
949 78 : u8_error_t json_element_reader_skip_next_string ( json_element_reader_t *this_ )
950 : {
951 78 : U8_TRACE_BEGIN();
952 78 : u8_error_t result = U8_ERROR_NONE;
953 : char dummy_str[4];
954 78 : utf8stringbuf_t dummy_strbuf = UTF8STRINGBUF ( dummy_str );
955 :
956 78 : result = json_token_reader_read_string_value ( &((*this_).tokenizer), dummy_strbuf );
957 78 : if ( result == U8_ERROR_STRING_BUFFER_EXCEEDED )
958 : {
959 : /* ignore this. The result string is not needed therefore dummy_str may be too small */
960 50 : result = U8_ERROR_NONE;
961 : }
962 :
963 78 : U8_TRACE_END_ERR( result );
964 78 : return result;
965 : }
966 :
967 21 : uint32_t json_element_reader_get_read_line ( json_element_reader_t *this_ )
968 : {
969 21 : U8_TRACE_BEGIN();
970 :
971 21 : const uint32_t read_line = json_token_reader_get_input_line( &((*this_).tokenizer) );
972 21 : U8_TRACE_INFO_INT( "line", read_line );
973 :
974 21 : U8_TRACE_END();
975 21 : return read_line;
976 : }
977 :
978 22 : u8_error_t json_element_reader_get_next_feature ( json_element_reader_t *this_, data_feature_t *out_object )
979 : {
980 22 : U8_TRACE_BEGIN();
981 22 : assert ( NULL != out_object );
982 :
983 22 : u8_error_t result = U8_ERROR_NONE;
984 :
985 : char member_name_buf[24];
986 22 : utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
987 :
988 22 : data_feature_init_empty( out_object );
989 :
990 : /* header */
991 :
992 22 : result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
993 :
994 : /* members */
995 :
996 22 : bool first_member_passed = false;
997 22 : bool object_end = false;
998 194 : while (( ! object_end )&&( U8_ERROR_NONE == result ))
999 : {
1000 172 : result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
1001 172 : if ( U8_ERROR_NONE == result )
1002 : {
1003 172 : if ( ! object_end )
1004 : {
1005 150 : if ( first_member_passed )
1006 : {
1007 128 : result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
1008 : }
1009 : else
1010 : {
1011 22 : first_member_passed = true;
1012 : }
1013 150 : if ( U8_ERROR_NONE == result )
1014 : {
1015 150 : result = json_token_reader_read_member_name( &((*this_).tokenizer), member_name );
1016 : }
1017 150 : if ( U8_ERROR_NONE == result )
1018 : {
1019 150 : result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
1020 : }
1021 150 : if ( U8_ERROR_NONE == result )
1022 : {
1023 150 : if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_ID ) )
1024 : {
1025 : int64_t parsed_integer;
1026 22 : result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
1027 22 : data_feature_set_row_id ( out_object, parsed_integer );
1028 : }
1029 128 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_MAIN_TYPE )
1030 106 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_TYPE_ID ) )
1031 22 : {
1032 : int64_t parsed_integer;
1033 22 : result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
1034 22 : data_feature_set_main_type( out_object, parsed_integer );
1035 : }
1036 106 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_TYPE_NAME ) )
1037 : {
1038 7 : result = json_element_reader_skip_next_string( this_ );
1039 : }
1040 99 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_LIST_ORDER )
1041 77 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_ORDER ) )
1042 22 : {
1043 : int64_t parsed_integer;
1044 22 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
1045 22 : data_feature_set_list_order ( out_object, parsed_integer );
1046 : }
1047 77 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_DESCRIPTION ) )
1048 : {
1049 22 : result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
1050 22 : data_feature_set_description( out_object,
1051 22 : utf8stringbuf_get_string( &((*this_).temp_string) )
1052 : );
1053 : }
1054 55 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_KEY ) )
1055 : {
1056 22 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
1057 22 : data_feature_set_key( out_object,
1058 22 : utf8stringbuf_get_string( &((*this_).temp_string) )
1059 : );
1060 : }
1061 33 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_VALUE ) )
1062 : {
1063 22 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
1064 22 : data_feature_set_value( out_object,
1065 22 : utf8stringbuf_get_string( &((*this_).temp_string) )
1066 : );
1067 : }
1068 11 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_UUID ) )
1069 : {
1070 11 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
1071 11 : result |= data_feature_set_uuid( out_object,
1072 11 : utf8stringbuf_get_string( &((*this_).temp_string) )
1073 : );
1074 : }
1075 : else
1076 : {
1077 0 : U8_LOG_ERROR_INT( "unexpected member name at line",
1078 : json_token_reader_get_input_line( &((*this_).tokenizer) )
1079 : );
1080 0 : result = U8_ERROR_PARSER_STRUCTURE;
1081 : }
1082 : }
1083 : }
1084 : }
1085 : else
1086 : {
1087 0 : U8_LOG_ERROR_INT( "unexpected character at line",
1088 : json_token_reader_get_input_line( &((*this_).tokenizer) )
1089 : );
1090 0 : result = U8_ERROR_PARSER_STRUCTURE;
1091 0 : object_end = true;
1092 : }
1093 : }
1094 :
1095 : /* footer */
1096 :
1097 22 : if ( U8_ERROR_NONE == result )
1098 : {
1099 22 : data_feature_trace( out_object );
1100 : }
1101 :
1102 22 : U8_TRACE_END_ERR( result );
1103 22 : return result;
1104 : }
1105 :
1106 7 : u8_error_t json_element_reader_get_next_diagramelement( json_element_reader_t *this_,
1107 : data_diagramelement_t *out_object,
1108 : utf8stringbuf_t out_node_uuid )
1109 : {
1110 7 : U8_TRACE_BEGIN();
1111 7 : assert ( NULL != out_object );
1112 :
1113 7 : u8_error_t result = U8_ERROR_NONE;
1114 :
1115 : char member_name_buf[24];
1116 7 : utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
1117 :
1118 7 : data_diagramelement_init_empty( out_object );
1119 :
1120 : /* header */
1121 :
1122 7 : result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
1123 :
1124 : /* members */
1125 :
1126 7 : bool first_member_passed = false;
1127 7 : bool object_end = false;
1128 77 : while (( ! object_end )&&( U8_ERROR_NONE == result ))
1129 : {
1130 70 : result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
1131 70 : if ( U8_ERROR_NONE == result )
1132 : {
1133 70 : if ( ! object_end )
1134 : {
1135 63 : if ( first_member_passed )
1136 : {
1137 56 : result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
1138 : }
1139 : else
1140 : {
1141 7 : first_member_passed = true;
1142 : }
1143 63 : if ( U8_ERROR_NONE == result )
1144 : {
1145 63 : result = json_token_reader_read_member_name( &((*this_).tokenizer), member_name );
1146 : }
1147 63 : if ( U8_ERROR_NONE == result )
1148 : {
1149 63 : result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
1150 : }
1151 63 : if ( U8_ERROR_NONE == result )
1152 : {
1153 63 : if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_ID ) )
1154 : {
1155 : int64_t parsed_integer;
1156 7 : result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
1157 7 : data_diagramelement_set_row_id ( out_object, parsed_integer );
1158 : }
1159 56 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_DIAGRAM_ID ) )
1160 : {
1161 : int64_t parsed_integer;
1162 0 : result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
1163 0 : data_diagramelement_set_diagram_row_id( out_object, parsed_integer );
1164 : }
1165 56 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_CLASSIFIER_ID ) )
1166 : {
1167 : int64_t parsed_integer;
1168 7 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
1169 7 : data_diagramelement_set_classifier_row_id ( out_object, parsed_integer );
1170 : }
1171 49 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_CLASSIFIER_NAME )
1172 42 : || utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_NODE_NAME ) )
1173 : {
1174 7 : result = json_element_reader_skip_next_string( this_ );
1175 : }
1176 42 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_FOCUSED_FEATURE_ID ) )
1177 : {
1178 : int64_t parsed_integer;
1179 7 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
1180 7 : data_diagramelement_set_focused_feature_row_id ( out_object, parsed_integer );
1181 : }
1182 35 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_FOCUSED_FEATURE_NAME ) )
1183 : {
1184 7 : result = json_element_reader_skip_next_string( this_ );
1185 : }
1186 28 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_DISPLAY_FLAGS ) )
1187 : {
1188 : int64_t parsed_integer;
1189 7 : result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
1190 7 : data_diagramelement_set_display_flags ( out_object, parsed_integer );
1191 : }
1192 21 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_DISPLAY_FLAG_NAMES ) )
1193 : {
1194 7 : result = json_element_reader_skip_next_string( this_ );
1195 : }
1196 14 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_NODE ) )
1197 : {
1198 7 : result = json_token_reader_read_string_value( &((*this_).tokenizer), out_node_uuid );
1199 : }
1200 7 : else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_UUID ) )
1201 : {
1202 7 : result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
1203 7 : result |= data_diagramelement_set_uuid( out_object,
1204 7 : utf8stringbuf_get_string( &((*this_).temp_string) )
1205 : );
1206 : }
1207 : else
1208 : {
1209 0 : U8_LOG_ERROR_INT( "unexpected member name at line",
1210 : json_token_reader_get_input_line( &((*this_).tokenizer) )
1211 : );
1212 0 : result = U8_ERROR_PARSER_STRUCTURE;
1213 : }
1214 : }
1215 : }
1216 : }
1217 : else
1218 : {
1219 0 : U8_LOG_ERROR_INT( "unexpected character at line",
1220 : json_token_reader_get_input_line( &((*this_).tokenizer) )
1221 : );
1222 0 : result = U8_ERROR_PARSER_STRUCTURE;
1223 0 : object_end = true;
1224 : }
1225 : }
1226 :
1227 : /* footer */
1228 :
1229 7 : if ( U8_ERROR_NONE == result )
1230 : {
1231 7 : data_diagramelement_trace( out_object );
1232 : }
1233 :
1234 7 : U8_TRACE_END_ERR( result );
1235 7 : return result;
1236 : }
1237 :
1238 57 : u8_error_t json_element_reader_private_read_string_array ( json_element_reader_t *this_,
1239 : utf8stringbuf_t out_joined_string )
1240 : {
1241 57 : U8_TRACE_BEGIN();
1242 57 : u8_error_t result = U8_ERROR_NONE;
1243 :
1244 57 : utf8stringbuf_clear( &out_joined_string );
1245 :
1246 57 : result = json_token_reader_expect_begin_array( &((*this_).tokenizer) );
1247 :
1248 57 : bool end_array = false;
1249 57 : bool first_element_passed = false;
1250 173 : while (( ! end_array )&&( U8_ERROR_NONE == result ))
1251 : {
1252 116 : result = json_token_reader_check_end_array( &((*this_).tokenizer), &end_array );
1253 116 : if ( U8_ERROR_NONE == result )
1254 : {
1255 116 : if ( ! end_array )
1256 : {
1257 59 : if ( first_element_passed )
1258 : {
1259 14 : result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
1260 : }
1261 : else
1262 : {
1263 45 : first_element_passed = true;
1264 : }
1265 59 : utf8stringbuf_t unused_remaining = utf8stringbuf_get_end( &out_joined_string );
1266 59 : result |= json_token_reader_read_string_value( &((*this_).tokenizer), unused_remaining );
1267 : }
1268 : }
1269 : else
1270 : {
1271 : /* error, break loop */
1272 0 : U8_LOG_ERROR_INT( "unexpected array contents at line",
1273 : json_token_reader_get_input_line( &((*this_).tokenizer) )
1274 : );
1275 : }
1276 : }
1277 :
1278 57 : U8_TRACE_END_ERR( result );
1279 57 : return result;
1280 : }
1281 :
1282 :
1283 : /*
1284 : Copyright 2016-2026 Andreas Warnke
1285 :
1286 : Licensed under the Apache License, Version 2.0 (the "License");
1287 : you may not use this file except in compliance with the License.
1288 : You may obtain a copy of the License at
1289 :
1290 : http://www.apache.org/licenses/LICENSE-2.0
1291 :
1292 : Unless required by applicable law or agreed to in writing, software
1293 : distributed under the License is distributed on an "AS IS" BASIS,
1294 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1295 : See the License for the specific language governing permissions and
1296 : limitations under the License.
1297 : */
|