Line data Source code
1 : /* File: data_profile_part.c; Copyright and License: see below */ 2 : 3 : #include "set/data_profile_part.h" 4 : #include "u8/u8_trace.h" 5 : #include <stdio.h> 6 : #include <stdlib.h> 7 : #include <assert.h> 8 : 9 9 : void data_profile_part_init( data_profile_part_t *this_ ) 10 : { 11 9 : U8_TRACE_BEGIN(); 12 9 : U8_TRACE_INFO_INT( "sizeof(data_profile_part_t):", sizeof(data_profile_part_t) ); 13 : 14 9 : (*this_).stereotype_count = 0; 15 : 16 9 : U8_TRACE_END(); 17 9 : } 18 : 19 3 : void data_profile_part_reinit( data_profile_part_t *this_ ) 20 : { 21 3 : U8_TRACE_BEGIN(); 22 : 23 3 : data_profile_part_destroy( this_ ); 24 3 : data_profile_part_init( this_ ); 25 : 26 3 : U8_TRACE_END(); 27 3 : } 28 : 29 9 : void data_profile_part_destroy( data_profile_part_t *this_ ) 30 : { 31 9 : U8_TRACE_BEGIN(); 32 9 : assert( (*this_).stereotype_count <= DATA_PROFILE_PART_MAX_STEREOTYPES ); 33 : 34 34 : for ( int index = 0; index < (*this_).stereotype_count; index ++ ) 35 : { 36 25 : data_classifier_destroy ( &((*this_).stereotypes[index]) ); 37 : } 38 9 : (*this_).stereotype_count = 0; 39 : 40 9 : U8_TRACE_END(); 41 9 : } 42 : 43 3 : u8_error_t data_profile_part_load( data_profile_part_t *this_, 44 : const data_visible_set_t *diagram_elements, 45 : data_database_reader_t *db_reader ) 46 : { 47 3 : U8_TRACE_BEGIN(); 48 3 : assert( NULL != db_reader ); 49 3 : assert( NULL != diagram_elements ); 50 3 : u8_error_t result = U8_ERROR_NONE; 51 : 52 : /* re-init */ 53 3 : data_profile_part_reinit( this_ ); 54 : 55 : 56 : /* load stereotype of diagram */ 57 3 : const data_diagram_t *const diag = data_visible_set_get_diagram_const( diagram_elements ); 58 3 : if ( data_diagram_has_stereotype( diag ) ) 59 : { 60 3 : const char *const diag_stereotype = data_diagram_get_stereotype_const( diag ); 61 3 : result |= data_profile_part_private_load_stereotype( this_, diag_stereotype, db_reader ); 62 : } 63 : 64 : /* load stereotypes of classifiers */ 65 3 : const uint32_t clsfy_count = data_visible_set_get_visible_classifier_count( diagram_elements ); 66 32 : for ( uint32_t clsfy_index = 0; ( clsfy_index < clsfy_count )&&( result == U8_ERROR_NONE ); clsfy_index ++ ) 67 : { 68 29 : const data_visible_classifier_t *const vis_clsfy = data_visible_set_get_visible_classifier_const( diagram_elements, clsfy_index ); 69 29 : const data_classifier_t *const clsfy = data_visible_classifier_get_classifier_const( vis_clsfy ); 70 29 : if ( data_classifier_has_stereotype( clsfy ) ) 71 : { 72 29 : const char *const clsfy_stereotype = data_classifier_get_stereotype_const( clsfy ); 73 29 : result |= data_profile_part_private_load_stereotype( this_, clsfy_stereotype, db_reader ); 74 : } 75 : } 76 : 77 : /* load stereotypes of relationships */ 78 3 : const uint32_t rel_count = data_visible_set_get_relationship_count( diagram_elements ); 79 4 : for ( uint32_t rel_index = 0; ( rel_index < rel_count )&&( result == U8_ERROR_NONE ); rel_index ++ ) 80 : { 81 1 : const data_relationship_t *const rel = data_visible_set_get_relationship_const( diagram_elements, rel_index ); 82 1 : if ( data_relationship_has_stereotype( rel ) ) 83 : { 84 1 : const char *const rel_stereotype = data_relationship_get_stereotype_const( rel ); 85 1 : result |= data_profile_part_private_load_stereotype( this_, rel_stereotype, db_reader ); 86 : } 87 : } 88 : 89 : /* load stereotypes of features (from the value field) */ 90 3 : const uint32_t feat_count = data_visible_set_get_feature_count( diagram_elements ); 91 4 : for ( uint32_t feat_index = 0; ( feat_index < feat_count )&&( result == U8_ERROR_NONE ); feat_index ++ ) 92 : { 93 1 : const data_feature_t *const feat = data_visible_set_get_feature_const( diagram_elements, feat_index ); 94 1 : if ( data_feature_has_value( feat ) ) 95 : { 96 1 : const char *const feat_stereotype = data_feature_get_value_const( feat ); 97 1 : result |= data_profile_part_private_load_stereotype( this_, feat_stereotype, db_reader ); 98 : } 99 : } 100 : 101 3 : U8_TRACE_END_ERR(result); 102 3 : return result; 103 : } 104 : 105 : 106 : /* 107 : Copyright 2023-2024 Andreas Warnke 108 : 109 : Licensed under the Apache License, Version 2.0 (the "License"); 110 : you may not use this file except in compliance with the License. 111 : You may obtain a copy of the License at 112 : 113 : http://www.apache.org/licenses/LICENSE-2.0 114 : 115 : Unless required by applicable law or agreed to in writing, software 116 : distributed under the License is distributed on an "AS IS" BASIS, 117 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 118 : See the License for the specific language governing permissions and 119 : limitations under the License. 120 : */