18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/hqmf-parser/converter/pass1/precondition_converter.rb', line 18
def self.parse_precondition(precondition,data_criteria_converter)
preconditions = parse_and_merge_preconditions(precondition[:preconditions],data_criteria_converter) if precondition[:preconditions] || []
preconditions_from_restrictions = HQMF::PreconditionExtractor.(precondition[:restrictions], data_criteria_converter)
driv_preconditions = []
preconditions_from_restrictions.delete_if {|element| driv_preconditions << element if element.is_a? HQMF::Converter::SimpleRestriction and element.operator.type == 'DRIV'}
apply_restrictions_to_comparisons(preconditions, preconditions_from_restrictions) unless preconditions_from_restrictions.empty?
conjunction_code = convert_logical_conjunction(precondition[:conjunction])
if (precondition[:expression])
type = precondition[:expression][:type]
operator = HQMF::Converter::SimpleOperator.new(HQMF::Converter::SimpleOperator.find_category(type), type, HQMF::Converter::SimpleOperator.parse_value(precondition[:expression][:value]))
children = []
if driv_preconditions and !driv_preconditions.empty?
children = driv_preconditions.map(&:preconditions).flatten
end
reference = nil
restriction = HQMF::Converter::SimpleRestriction.new(operator, nil, children)
comparison_precondition = HQMF::Converter::SimplePrecondition.new(nil,[restriction],reference,conjunction_code, false)
comparison_precondition.klass = HQMF::Converter::SimplePrecondition::COMPARISON
comparison_precondition.subset_comparison = true
preconditions << comparison_precondition
end
reference = nil
negation = precondition[:negation]
if (precondition[:comparison])
preconditions ||= []
comparison_precondition = HQMF::PreconditionExtractor.convert_comparison_to_precondition(precondition[:comparison],data_criteria_converter)
preconditions << comparison_precondition
end
if (precondition[:subset])
type = precondition[:subset]
operator = HQMF::Converter::SimpleOperator.new(HQMF::Converter::SimpleOperator.find_category(type), type, nil)
children = preconditions
reference = nil
restriction = HQMF::Converter::SimpleRestriction.new(operator, nil, children)
comparison_precondition = HQMF::Converter::SimplePrecondition.new(nil,[restriction],reference,conjunction_code, false)
comparison_precondition.klass = HQMF::Converter::SimplePrecondition::COMPARISON
preconditions = [comparison_precondition]
end
HQMF::Converter::SimplePrecondition.new(nil,preconditions,reference,conjunction_code, negation)
end
|