FUNCTION validate_inspected_elements_type
(ei : shape_data_quality_criterion; type_list : BAG [0:?] OF STRING) : LOGICAL;
LOCAL sdqir: SET OF SHAPE_DATA_QUALITY_INSPECTION_RESULT:=[]; sdir: SET OF SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT:=[]; sdiri: SET OF SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM:=[]; t_type_list:BAG OF STRING:=[]; END_LOCAL; -- STEP-1 -- collect all shape_data_quality_inspection_instance_report_item -- instances associated WITH the given shape_data_quality_criterion -- via shape_data_quality_inspection_result and -- shape_data_quality_inspection_instance_report
sdqir := QUERY(q <* bag_to_set(USEDIN(ei, 'PRODUCT_DATA_QUALITY_INSPECTION_RESULT_SCHEMA.'+ 'DATA_QUALITY_INSPECTION_RESULT.'+ 'CRITERION_INSPECTED'))| 'SHAPE_DATA_QUALITY_INSPECTION_RESULT_SCHEMA.'+ 'SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(q)); IF(SIZEOF(sdqir) = 0) THEN RETURN(TRUE); END_IF; REPEAT i:= 1 TO SIZEOF(sdqir); sdir := sdir + QUERY(q <* bag_to_set(USEDIN(sdqir[i], 'PRODUCT_DATA_QUALITY_INSPECTION_RESULT_SCHEMA.'+ 'DATA_QUALITY_INSPECTION_REPORT.'+ 'INSPECTION_RESULT'))| 'SHAPE_DATA_QUALITY_INSPECTION_RESULT_SCHEMA.'+ 'SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN TYPEOF(q)); END_REPEAT; IF(SIZEOF(sdir) = 0) THEN RETURN(TRUE); END_IF;
REPEAT i:= 1 TO SIZEOF(sdir); sdiri := sdiri + QUERY(q <* sdir[i].inspected_instances| 'SHAPE_DATA_QUALITY_INSPECTION_RESULT_SCHEMA.'+ 'SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM' IN TYPEOF(q)); END_REPEAT;
-- STEP-2 -- check IF the types OF inspected_elements OF the collected -- instances are exactly coincident WITH the TYPE names IN the -- TYPE LIST given AS an input argument OF this function.
-- IF there is no instance_report_item, THEN RETURN true. IF(SIZEOF(sdiri) = 0) THEN RETURN(TRUE); END_IF; -- When reports exist, THEN perform the following checking process. REPEAT i:= 1 TO SIZEOF(sdiri); -- IF the size OF inspected_elements is NOT equal TO the size of -- type_list, THEN RETURN false. IF(SIZEOF(sdiri[i].inspected_elements) <> SIZEOF(type_list)) THEN RETURN(FALSE); END_IF; -- check all elements IN the type_list -- FOR each element OF inspected_elements. t_type_list := type_list; REPEAT j:= 1 TO SIZEOF(sdiri[i].inspected_elements); REPEAT k:= 1 TO SIZEOF(t_type_list); IF(t_type_list[k] IN TYPEOF(sdiri[i].inspected_elements[j])) THEN t_type_list := t_type_list - t_type_list[k]; ESCAPE; END_IF; END_REPEAT; END_REPEAT; IF(SIZEOF(t_type_list) > 0) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE); END_FUNCTION; -- validate_inspected_elements_type
|