source: ruby/branches/0.5/lib/open_ehr/rm/data_structures/item_structure.rb@ 339

Last change on this file since 339 was 339, checked in by KOBAYASHI, Shinji, 15 years ago

data_structure will nearly completed

File size: 4.8 KB
RevLine 
[190]1# rm::data_structures::item_structure
2# ItemStructure module
3# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_0_76d0249_1109346709572_859750_3810Report.html
4# refs #54
[209]5require 'set'
[216]6include OpenEHR::RM::DataStructures
7module OpenEHR
[190]8 module RM
9 module DataStructures
10 module ItemStructure
11 class ItemStructure < DataStructure
12 end
13
14 class ItemSingle < ItemStructure
15 attr_reader :item
16
17 def initialize(args = {})
18 super(args)
19 self.item = args[:item]
20 end
21
22 def as_hierarchy
23 return @item
24 end
25
26 def item=(item)
27 raise ArgumentError, 'item is mandatory' if item.nil?
28 @item = item
29 end
30 end
[192]31
32 class ItemList < ItemStructure
[194]33 attr_accessor :items
34
[195]35 def initialize(args = {})
36 super(args)
37 self.items = args[:items]
38 end
39
[194]40 def item_count
41 unless @items.nil?
42 return @items.size
43 else
44 return 0
45 end
46 end
[195]47
48 def names
49 return @items.collect{|item| item.name}
50 end
51
52 def named_item(a_name)
53 @items.each do |item|
54 return item if item.name.value == a_name
55 end
[339]56 return nil
[195]57 end
58
59 def ith_item(i)
[207]60 raise ArgumentError, 'index invalid' if i <= 0
61 return @items[i - 1]
[195]62 end
63
64 def as_hierarchy
65 return Cluster.new(:name => @name,
66 :archetype_node_id => @archetype_node_id,
67 :items => @items)
68 end
[192]69 end
[203]70
[200]71 class ItemTable < ItemStructure
72 attr_accessor :rows
73
[203]74 def initialize(args = {})
[200]75 super(args)
76 self.rows = args[:rows]
77 end
[203]78
79 def row_count
80 if @rows.nil?
81 return 0
82 else
83 return @rows.size
84 end
85 end
[207]86
87 def column_count
88 if @rows.nil?
89 return 0
90 else
91 return @rows[0].items.count
92 end
93 end
94
95 def row_names
96 if @rows.nil?
97 return []
98 else
99 return @rows.collect{|r| r.name}
100 end
101 end
102
103 def column_names
104 if @rows.nil?
105 return []
106 else
107 return @rows[0].items.collect{|i| i.name}
108 end
109 end
110
111 def ith_row(i)
112 raise ArgumentError, 'invalid index' if i<=0 or i>@rows.size
[339]113 return @rows[i - 1]
[207]114 end
[208]115
116 def has_row_with_name?(key)
117 raise ArgumentError, 'invalid argument' if key.nil? or key.empty?
118 @rows.each do |row|
119 return true if row.items[0].name.value == key
120 end
121 return false
122 end
123
124 def has_column_with_name?(key)
125 raise ArgumentError, 'invalid argument' if key.nil? or key.empty?
126 self.column_names.each do |name|
127 return true if name.value == key
128 end
129 return false
130 end
131
132 def named_row(key)
133 raise ArgumentError, 'invalid argument' unless has_row_with_name?(key)
134 @rows.each do |row|
[209]135 return row if row.items[0].name.value == key
[208]136 end
137 end
[209]138
139 def has_row_with_key?(keys)
140 keys.each do |key|
141 @rows.each do |row|
142 return true if row.items[0].name.value == key
143 end
144 end
145 return false
146 end
[210]147
148 def row_with_key(keys)
149 unless has_row_with_key?(keys)
150 raise ArgumentError, 'no row for key'
151 end
152 keys.each do |key|
153 @rows.each do |row|
154 return row if row.items[0].name.value == key
155 end
156 end
157 end
[211]158
159 def element_at_cell_ij(i,j)
160 return @rows[i-1].items[j-1]
161 end
[212]162
163 def element_at_named_cell(row_key, column_key)
164 i,j=0,0
165 @rows[0].items.each do |c|
166 break if c.name.value == column_key
167 i+=1
168 end
169 @rows.each do |row|
170 break if row.name.value == row_key
171 j+=1
172 end
173 return element_at_cell_ij(i,j)
174 end
175
176 def as_hierarchy
177 return @rows[0]
178 end
[200]179 end
[213]180
181 class ItemTree < ItemStructure
[215]182 attr_accessor :items
183
184 def initialize(args ={ })
185 super(args)
186 self.items = args[:items]
187 end
[213]188 end
[190]189 end # of ItemStructure
190 end # of DataStructures
191 end # of RM
[216]192end # of OpenEHR
Note: See TracBrowser for help on using the repository browser.