FUNCTION validate_accuracy_types
(ei : shape_data_quality_criterion; type_list : BAG [0:?] OF STRING) : LOGICAL;
LOCAL sdqca: BAG OF SHAPE_DATA_QUALITY_CRITERION_AND_ACCURACY_ASSOCIATION:=[]; sma: BAG OF SHAPE_MEASUREMENT_ACCURACY:=[]; sdqir: SET OF SHAPE_DATA_QUALITY_INSPECTION_RESULT:=[]; scraa: BAG OF SHAPE_INSPECTION_RESULT_ACCURACY_ASSOCIATION:=[]; t_logic:BOOLEAN; END_LOCAL; -- STEP-1 -- collect types OF range attribute OF shape_measurement_accuracy -- referred FROM shape_data_quality_criterion_and_accuracy_association -- that refers TO given shape_data_quality_criterion. sdqca := USEDIN(ei, 'SHAPE_DATA_QUALITY_CRITERIA_SCHEMA.'+ 'SHAPE_DATA_QUALITY_CRITERION_AND_ACCURACY_ASSOCIATION.'+ 'SHAPE_DATA_QUALITY_CRITERION'); IF(SIZEOF(sdqca) <> 0) THEN REPEAT i:= 1 TO SIZEOF(sdqca); sma := sma + sdqca[i].required_specific_accuracy; END_REPEAT; -- STEP-2 -- check whether the collected types include all the TYPE names -- IN the TYPE LIST given AS an input argument OF this function -- AND they do NOT include any other TYPE names. IF(SIZEOF(type_list) < SIZEOF(sma)) THEN RETURN(FALSE); END_IF; REPEAT i:= 1 TO SIZEOF(sma); t_logic := FALSE; REPEAT j:= 1 TO SIZEOF(type_list); IF(type_list[j] IN value_limit_type(sma[i].range)) THEN t_logic := TRUE; ESCAPE; END_IF; END_REPEAT; IF(NOT(t_logic)) THEN RETURN(FALSE); END_IF; END_REPEAT; END_IF; -- STEP-3 -- collect types OF range attribute OF shape_measurement_accuracy -- referred FROM shape_inspection_result_accuracy_association -- that refers TO shape_data_quality_inspection_result -- FOR the given shape_data_quality_criterion. 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); scraa := USEDIN(sdqir[i], 'SHAPE_DATA_QUALITY_INSPECTION_RESULT_SCHEMA.'+ 'SHAPE_INSPECTION_RESULT_ACCURACY_ASSOCIATION.'+ 'SHAPE_DATA_QUALITY_RESULT'); IF(SIZEOF(scraa) <> 0) THEN sma := []; REPEAT j:= 1 TO SIZEOF(scraa); sma := sma + scraa[j].applied_specific_accuracy; END_REPEAT; -- STEP-4 -- check whether the collected types include all the type -- names IN the TYPE LIST given AS an input argument of -- this FUNCTION AND they do NOT include any other TYPE names. IF(SIZEOF(type_list) < SIZEOF(sma)) THEN RETURN(FALSE); END_IF; REPEAT j:= 1 TO SIZEOF(sma); t_logic := FALSE; REPEAT k:= 1 TO SIZEOF(type_list); IF(type_list[k] IN value_limit_type(sma[j].range)) THEN t_logic := TRUE; ESCAPE; END_IF; END_REPEAT; IF(NOT(t_logic)) THEN RETURN(FALSE); END_IF; END_REPEAT; END_IF; END_REPEAT; RETURN(TRUE); END_FUNCTION; -- validate_accuracy_types
|