Overview Schemas Index

Characteristic_arm (jsdai.SCharacteristic_arm)


FUNCTION get_characterized_column_headers
          (input : Characteristic_data_table_header) : LIST [1:?] OF Independent_property;

LOCAL
      middle : SET  [1:?] OF  Independent_property;
      result : LIST [1:?] OF  Independent_property;
      links  : SET  [1:?] OF  Characteristic_data_table_header_link;
      temp   : Independent_property;
      precedent : SET  [0:?] OF  Characteristic_data_table_header_link;
      subsequent : SET [0:?] OF Characteristic_data_table_header_link;
    END_LOCAL;
    -- Collect all headers
    links := bag_to_set(USEDIN(input, 'CHARACTERISTIC_ARM.' + 'CHARACTERISTIC_DATA_TABLE_HEADER_LINK.TABLE'));
    -- Collect all Independent_properties
    REPEAT  i := 1 TO  HIINDEX(links);
      middle := middle + links[i]\Characteristic_data_table_header_link.precedent;
      middle := middle + links[i]\Characteristic_data_table_header_link.subsequent;
    END_REPEAT;
    result[1] := ?;
    -- Now need TO  construct the resulting list
    REPEAT  i := 1 TO  HIINDEX(middle);
      precedent := bag_to_set(QUERY (l <* (USEDIN(middle[i], 'CHARACTERISTIC_ARM.' + 
        'CHARACTERISTIC_DATA_TABLE_HEADER_LINK.PRECEDENT')) | l.table = input));
      -- illegal chain
      IF  (SIZEOF(precedent) > 1) THEN
        RETURN(?);
      END_IF;
      -- check IF  this is NOT last member
      IF  (SIZEOF(precedent) = 1) THEN
        subsequent := bag_to_set(QUERY (l <* (USEDIN(middle[i], 'CHARACTERISTIC_ARM.' + 
          'CHARACTERISTIC_DATA_TABLE_HEADER_LINK.SUBSEQUENT')) | l.table = input));
        -- we found first member
        IF  (SIZEOF(subsequent) = 0) THEN
          result[1] := middle[i];
          ESCAPE;
        END_IF;
      END_IF;
    END_REPEAT;
    -- IF  there is no first member found yet - chain is broken
    IF  (result[1] = ?) THEN
      RETURN  (?);
    END_IF;
    temp := result[1];
    REPEAT i := 2 TO HIINDEX(middle);
      result[i] := precedent[1]\Characteristic_data_table_header_link.subsequent;
      precedent := bag_to_set(QUERY (l <* (USEDIN(result[i], 'CHARACTERISTIC_ARM.' + 
        'CHARACTERISTIC_DATA_TABLE_HEADER_LINK.PRECEDENT')) | l.table = input));
      IF  (HIINDEX(middle) = i) THEN
        ESCAPE;
      END_IF;
      -- illegal chain
      IF (SIZEOF(precedent) <> 1) THEN
        RETURN(?);
      END_IF;
    END_REPEAT; 
    RETURN (result);

END_FUNCTION; -- get_characterized_column_headers

public class FGet_characterized_column_headers
          public static Value run(SdaiContext _context, Value input)