RULE approval_history_contains_approval_elements

(* SCHEMA ship_structures_schema; *)
  RULE approval_history_contains_approval_elements FOR (object_role, 
             applied_group_assignment);

    LOCAL
      t3_set          : SET OF approval := [];
      gr_ass_set      : SET OF applied_group_assignment := [];
      violation       : LOGICAL := FALSE;
      valid_items_set : SET OF approval_item := [];
      t1_set          : SET OF applied_approval_assignment := [];
      first_runs      : LOGICAL := TRUE;
    END_LOCAL;
    gr_ass_set := QUERY ( aga <* applied_group_assignment | ((aga.role.
        name = 'approvals') AND ('approval history' IN which_class(aga.
        assigned_group))) );
    REPEAT i := 1 TO HIINDEX(gr_ass_set) BY 1 WHILE NOT violation;
      t3_set := QUERY ( aga_item <* gr_ass_set[i].items | (
          'SHIP_STRUCTURES_SCHEMA.APPROVAL' IN TYPEOF(aga_item)) );
      REPEAT j := 1 TO HIINDEX(t3_set) BY 1;
        t1_set := QUERY ( aga <* bag_to_set(USEDIN(t3_set[j],
            'SHIP_STRUCTURES_SCHEMA.' + 
            'APPROVAL_ASSIGNMENT.ASSIGNED_APPROVAL')) | (aga.role.name = 
            'subject') );
        REPEAT k := 1 TO HIINDEX(t1_set) BY 1;
          IF first_runs AND (SIZEOF(t1_set[k].items) > 0) THEN
            valid_items_set := t1_set[k].items;
            first_runs := FALSE;
          ELSE
            REPEAT l := 1 TO HIINDEX(t1_set[k].items) BY 1;
              violation := t1_set[k].items[l] :<>: valid_items_set[l];
            END_REPEAT;
          END_IF;
        END_REPEAT;
      END_REPEAT;
      first_runs := TRUE;
    END_REPEAT;

  WHERE
    wr1: (NOT violation);

  END_RULE; -- approval_history_contains_approval_elements

[Top Level Definitions] [Exit]

Generated by STEP Tools® EXPRESS to HTML Converter
2012-03-27T17:17:01-04:00