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