source: ruby/trunk/lib/open_ehr/serializer.rb@ 408

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

serializer implementation

File size: 4.9 KB
Line 
1require 'rexml/document'
2require 'builder'
3
4module OpenEHR
5 module Serializer
6 NL = "\r\n"
7 INDENT = ' '
8
9 class BaseSerializer
10 def initialize(archetype)
11 @archetype = archetype
12 end
13
14 def serialize
15 return self.merge
16 end
17 end
18
19 class ADLSerializer < BaseSerializer
20 def header
21 hd = 'archetype'
22 unless @archetype.adl_version.nil?
23 hd << " (adl_version = #{@archetype.adl_version})"
24 end
25 hd << NL+INDENT + "#{@archetype.archetype_id.value}"+NL*2
26 hd << 'concept'+NL+ INDENT+"[#{@archetype.concept}]"+NL
27 hd << NL+'language'+NL+INDENT+'original_language = <['+
28 @archetype.original_language.terminology_id.value+'::'+
29 @archetype.original_language.code_string+']>'+NL
30 return hd
31 end
32
33 def description
34 desc = ''
35 if @archetype.description
36 ad = @archetype.description
37 desc << 'description' + NL
38 desc << INDENT + 'original_author = <' + NL
39 ad.original_author.each do |k,v|
40 desc << INDENT+INDENT+'["'+k+'"] = <"'+v+'">'+NL
41 end
42 desc << INDENT+'>'+NL
43 desc << INDENT+'lifecycle_state = <"'+ad.lifecycle_state+'">'+NL
44 desc << INDENT+'details = <'+NL
45 ad.details.each do |lang,item|
46 desc << INDENT*2+'["'+lang+'"] = <'+NL
47 desc << INDENT*3+'language = <['+
48 item.language.terminology_id.value+'::'+
49 item.language.code_string+']>'+NL
50 desc << INDENT*3+'purpose = <"'+item.purpose+'">'+NL
51 if item.keywords then
52 desc << INDENT*3+'keywords = <'
53 item.keywords.each do |word|
54 desc << '"'+word+'",'
55 end
56 desc.chop! << '>'+NL
57 end
58 desc << INDENT*3+'use = <"'+item.use+'">'+NL if item.use
59 desc << INDENT*3+'misuse = <"'+item.misuse+'">'+NL if item.misuse
60 desc << INDENT*3+'copyright = <"'+item.copyright+'">'+NL if item.copyright
61 if item.original_resource_uri
62 desc << INDENT*3 + 'original_resource_uri = <'
63 item.original_resource_uri.each do |k,v|
64 desc << INDENT*4+'["'+k+'"] = <"'+v+'">'+NL
65 end
66 desc << INDENT*3+'>'+NL
67 end
68 if item.other_details
69 desc << INDENT*3 + 'other_details = <'
70 item.original_resource_uri.each do |k,v|
71 desc << INDENT*4+'["'+k+'"] = <"'+v+'">'+NL
72 end
73 desc << INDENT*3+'>'+NL
74 end
75 desc << INDENT*2+'>'+NL
76 end
77 desc << INDENT+'>'+NL
78 end
79 return desc
80 end
81
82 def definition
83 end
84
85 def ontology
86 end
87
88 def envelope
89 end
90
91 def merge
92 return header + description + definition + ontology
93 end
94 end
95
96 class XMLSerializer < BaseSerializer
97
98 def header
99 header = ''
100 xml = Builder::XmlMarkup.new(:indent => 2, :target => header)
101 xml.archetype_id do
102 xml.value @archetype.archetype_id.value
103 end
104 xml.concept @archetype.concept
105 xml.original_language do
106 xml.terminology_id do
107 xml.value @archetype.original_language.terminology_id.value
108 end
109 xml.code_string @archetype.original_language.code_string
110 end
111 return header
112 end
113
114 def description
115 desc = ''
116 xml = Builder::XmlMarkup.new(:indent => 2, :target => desc)
117 ad = @archetype.description
118 if ad
119 xml.description do
120 ad.original_author.each do |key,value|
121 xml.original_author(value,"id"=>key)
122 end
123 if ad.other_contributors
124 ad.other_contributors.each do |co|
125 xml.other_contributors co
126 end
127 end
128 xml.lifecycle_state ad.lifecycle_state
129 xml.details do
130 ad.details.each do |lang, item|
131 xml.language do
132 xml.terminology_id do
133 xml.value item.language.terminology_id.value
134 end
135 xml.code_string lang
136 end
137 xml.purpose item.purpose
138 xml.use item.use if item.use
139 xml.misuse item.misuse if item.misuse
140 xml.copyright item.copyright if item.copyright
141 if ad.other_details
142 ad.other_details.each do |key,value|
143 xml.other_details(value, "id"=>key)
144 end
145 end
146 end
147 end
148 end
149 end
150 return desc
151 end
152
153 def merge
154
155 end
156 end
157 end
158end
159
160class Publisher
161 def initialize(serializer)
162 @serializer = serializer
163 end
164
165 def publish(writer)
166 writer.out(@serializer.serialize)
167 end
168end
169
170class Writer
171 def initialize(target)
172 @target = target
173 end
174 def out
175 end
176end
Note: See TracBrowser for help on using the repository browser.