Line data Source code
1 : /* File: document_link_provider.c; Copyright and License: see below */
2 :
3 : #include "document/document_link_provider.h"
4 : #include "utf8stringbuf/utf8stringview.h"
5 : #include "u8/u8_trace.h"
6 : #include "u8/u8_log.h"
7 : #include <stdio.h>
8 : #include <stdbool.h>
9 : #include <assert.h>
10 :
11 0 : void document_link_provider_init( document_link_provider_t *this_,
12 : data_database_reader_t *db_reader,
13 : const char * tag_xref_separator,
14 : const char * tag_xref_start,
15 : const char * tag_xref_middle,
16 : const char * tag_xref_end,
17 : io_xml_writer_t *xml_writer )
18 : {
19 0 : U8_TRACE_BEGIN();
20 0 : assert( NULL != db_reader );
21 0 : assert( NULL != tag_xref_separator );
22 0 : assert( NULL != tag_xref_start );
23 0 : assert( NULL != tag_xref_middle );
24 0 : assert( NULL != tag_xref_end );
25 0 : assert( NULL != xml_writer );
26 :
27 0 : (*this_).db_reader = db_reader;
28 0 : (*this_).tag_xref_separator = tag_xref_separator;
29 0 : (*this_).tag_xref_start = tag_xref_start;
30 0 : (*this_).tag_xref_middle = tag_xref_middle;
31 0 : (*this_).tag_xref_end = tag_xref_end;
32 0 : (*this_).xml_writer = xml_writer;
33 :
34 0 : (*this_).current_diagram = DATA_ID_VOID;
35 :
36 0 : U8_TRACE_END();
37 0 : }
38 :
39 0 : void document_link_provider_destroy( document_link_provider_t *this_ )
40 : {
41 0 : U8_TRACE_BEGIN();
42 :
43 0 : (*this_).current_diagram = DATA_ID_VOID;
44 :
45 0 : (*this_).db_reader = NULL;
46 0 : (*this_).xml_writer = NULL;
47 :
48 0 : U8_TRACE_END();
49 0 : }
50 :
51 0 : u8_error_t document_link_provider_write_occurrences( document_link_provider_t *this_,
52 : data_id_t classifier_id )
53 : {
54 0 : U8_TRACE_BEGIN();
55 0 : assert ( NULL != (*this_).db_reader );
56 0 : assert ( DATA_TABLE_CLASSIFIER == data_id_get_table( &classifier_id ) );
57 0 : u8_error_t db_err = U8_ERROR_NONE;
58 0 : u8_error_t export_err = U8_ERROR_NONE;
59 :
60 : /* read from database */
61 : data_diagram_iterator_t diagram_iterator;
62 0 : db_err |= data_diagram_iterator_init_empty( &diagram_iterator );
63 0 : db_err |= data_database_reader_get_diagrams_by_classifier_id( (*this_).db_reader,
64 : data_id_get_row_id( &classifier_id ),
65 : &diagram_iterator
66 : );
67 0 : bool is_first = true;
68 0 : while( data_diagram_iterator_has_next( &diagram_iterator ) )
69 : {
70 0 : db_err |= data_diagram_iterator_next( &diagram_iterator, &((*this_).temp_diagram) );
71 :
72 : /* write to sink */
73 0 : if ( is_first )
74 : {
75 0 : is_first = false;
76 : }
77 : else
78 : {
79 0 : export_err |= io_xml_writer_write_plain ( (*this_).xml_writer, (*this_).tag_xref_separator );
80 : }
81 0 : const data_id_t diag_ref_id = data_diagram_get_data_id( &((*this_).temp_diagram) );
82 0 : const char *const diag_ref_name = data_diagram_get_name_const( &((*this_).temp_diagram) );
83 0 : if ( data_id_equals( &diag_ref_id, &((*this_).current_diagram) ) )
84 : {
85 0 : export_err |= io_xml_writer_write_xml_enc( (*this_).xml_writer, diag_ref_name );
86 : }
87 : else
88 : {
89 0 : export_err |= io_xml_writer_write_plain ( (*this_).xml_writer, (*this_).tag_xref_start );
90 0 : export_err |= io_xml_writer_write_plain_id( (*this_).xml_writer, diag_ref_id );
91 0 : export_err |= io_xml_writer_write_plain ( (*this_).xml_writer, (*this_).tag_xref_middle );
92 0 : export_err |= io_xml_writer_write_xml_enc( (*this_).xml_writer, diag_ref_name );
93 0 : export_err |= io_xml_writer_write_plain ( (*this_).xml_writer, (*this_).tag_xref_end );
94 : }
95 : }
96 0 : db_err |= data_diagram_iterator_destroy( &diagram_iterator );
97 :
98 0 : U8_TRACE_END_ERR( db_err || export_err );
99 0 : return ( db_err || export_err );
100 : }
101 :
102 0 : void document_link_provider_set_current_diagram( document_link_provider_t *this_, const data_id_t *current_diagram )
103 : {
104 0 : U8_TRACE_BEGIN();
105 :
106 0 : (*this_).current_diagram = *current_diagram;
107 :
108 0 : U8_TRACE_END();
109 0 : }
110 :
111 :
112 : /*
113 : Copyright 2023-2025 Andreas Warnke
114 :
115 : Licensed under the Apache License, Version 2.0 (the "License");
116 : you may not use this file except in compliance with the License.
117 : You may obtain a copy of the License at
118 :
119 : http://www.apache.org/licenses/LICENSE-2.0
120 :
121 : Unless required by applicable law or agreed to in writing, software
122 : distributed under the License is distributed on an "AS IS" BASIS,
123 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124 : See the License for the specific language governing permissions and
125 : limitations under the License.
126 : */
|