source: ruby/trunk/lib/open_ehr/am/archetype/assertion.rb@ 388

Last change on this file since 388 was 388, checked in by KOBAYASHI, Shinji, 14 years ago

refs #73

File size: 3.1 KB
Line 
1module OpenEHR
2 module AM
3 module Archetype
4 module Assertion
5 class Assertion
6 attr_reader :expression, :tag
7 attr_accessor :string_expression, :variables
8
9 def initialize(args = { })
10 self.expression = args[:expression]
11 self.tag = args[:tag]
12 self.string_expression = args[:string_expression]
13 self.variables = args[:variables]
14 end
15
16 def expression=(expression)
17 if expression.nil? or expression.type.upcase != 'BOOLEAN'
18 raise ArgumentError, 'invalid expression'
19 end
20 @expression = expression
21 end
22
23 def tag=(tag)
24 if !tag.nil? && tag.empty?
25 raise ArgumentError, 'tag should not be empty'
26 end
27 @tag = tag
28 end
29 end
30
31 class ExprItem
32 attr_reader :type
33
34 def initialize(args = { })
35 self.type = args[:type]
36 end
37
38 def type=(type)
39 if type.nil? or type.empty?
40 raise ArgumentError, 'type is mandatory'
41 end
42 @type = type
43 end
44 end
45
46 class ExprLeaf < ExprItem
47 attr_reader :item, :reference_type
48
49 def initialize(args = { })
50 super
51 self.item = args[:item]
52 self.reference_type = args[:reference_type]
53 end
54
55 def item=(item)
56 if item.nil?
57 raise ArgumentError, 'item is mandatory'
58 end
59 @item = item
60 end
61
62 def reference_type=(reference_type)
63 if reference_type.nil?
64 raise ArgumentError, 'reference_type is mandatory'
65 end
66 @reference_type = reference_type
67 end
68 end
69
70 class ExprOperator < ExprItem
71 attr_accessor :operator, :precedence_overridden
72
73 def initialize(args = { })
74 super
75 self.operator = args[:operator]
76 self.precedence_overridden = args[:precedence_overridden]
77 end
78 end
79
80 class OperatorKind
81 OP_EQ = 2001
82 OP_NE = 2002
83 OP_LE = 2003
84 OP_LT = 2004
85 OP_GE = 2005
86 OP_GT = 2006
87 OP_MATCHES = 2007
88
89 OP_NOT = 2010
90 OP_AND = 2011
91 OP_OR = 2012
92 OP_XOR = 2013
93 OP_IMPLIES = 2014
94 OP_FOR_ALL = 2015
95 OP_EXISTS = 2016
96
97 OP_PLUS = 2020
98 OP_MINUS = 2021
99 OP_MULTIPLY = 2022
100 OP_DIVIDE = 2023
101 OP_EXP = 2024
102
103 attr_reader :value
104
105 def initialize(args = { })
106 self.value = args[:value]
107 end
108
109 def value=(value)
110 unless OperatorKind.valid_operator? value
111 raise ArgumentError, 'invalid value'
112 end
113 @value = value
114 end
115
116 def self.valid_operator?(value)
117 if value >= OP_EQ && value <= OP_EXP
118 return true
119 else
120 return false
121 end
122 end
123 end
124 end # of Assetion
125 end # of Archtype
126 end #of AM
127end # of OpenEHR
Note: See TracBrowser for help on using the repository browser.