xmlutils 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +22 -0
  5. data/README.md +77 -0
  6. data/bin/xmltogdl +88 -0
  7. data/docs/README.txt +20 -0
  8. data/lib/xmlutils/contextlistener.rb +432 -0
  9. data/lib/xmlutils/contextparser.rb +111 -0
  10. data/lib/xmlutils/dumplistener.rb +57 -0
  11. data/lib/xmlutils/gdlcontext.rb +305 -0
  12. data/lib/xmlutils/gdlcontextobjs.rb +286 -0
  13. data/lib/xmlutils/gdldoc.rb +547 -0
  14. data/lib/xmlutils/gdldocbuilder.rb +181 -0
  15. data/lib/xmlutils/gdllistener.rb +265 -0
  16. data/lib/xmlutils/gdltemplate.rb +488 -0
  17. data/lib/xmlutils/lineparser.rb +193 -0
  18. data/lib/xmlutils/listener.rb +459 -0
  19. data/lib/xmlutils/rulelistener.rb +414 -0
  20. data/lib/xmlutils/ruleparser.rb +112 -0
  21. data/lib/xmlutils/varlistener.rb +86 -0
  22. data/lib/xmlutils/version.rb +5 -0
  23. data/lib/xmlutils/xmlrulevisitor.rb +704 -0
  24. data/lib/xmlutils/xmltogdlcontroller.rb +93 -0
  25. data/lib/xmlutils/xmltogdltask.rb +23 -0
  26. data/lib/xmlutils/xmlvisitor.rb +690 -0
  27. data/lib/xmlutils.rb +40 -0
  28. data/rakefile.rb +34 -0
  29. data/unittests/2830.xml +1 -0
  30. data/unittests/chunks.rb +31 -0
  31. data/unittests/curDirTest.rb +2 -0
  32. data/unittests/data/2830-GENERATED.gdl +309 -0
  33. data/unittests/data/2830-GENERATED.xml +1 -0
  34. data/unittests/data/AUGuideline.xml +12 -0
  35. data/unittests/data/AUGuideline.xml.gdl +19190 -0
  36. data/unittests/data/BAKUP.DCTEST1.xml +1 -0
  37. data/unittests/data/DCTEST.xml +1 -0
  38. data/unittests/data/DCTEST1.xml +1 -0
  39. data/unittests/data/DCTEST1.xml.gdl +14890 -0
  40. data/unittests/data/DCTEST1.xml.rename.csv +180 -0
  41. data/unittests/data/DCTEST1wLookups.xml +174 -0
  42. data/unittests/data/DCTEST1wLookups.xml.gdl +127 -0
  43. data/unittests/data/GENERATED.gdl.xml +1 -0
  44. data/unittests/data/Message.xml +1 -0
  45. data/unittests/data/Message.xml.gdl +142 -0
  46. data/unittests/data/Pricing2ndGuideline.xml +1 -0
  47. data/unittests/data/Pricing2ndGuideline.xml.gdl +52670 -0
  48. data/unittests/data/Z-TEMP-Jeff.xml +1 -0
  49. data/unittests/data/Z-TEMP-Jeff.xml.gdl +288 -0
  50. data/unittests/tc_convert_xml_to_gdl.rb +23 -0
  51. data/unittests/ts_allTests.rb +2 -0
  52. data/xmlutils.gemspec +25 -0
  53. metadata +139 -0
@@ -0,0 +1,111 @@
1
+ #
2
+ # File: contextParser.rb
3
+ #
4
+ # This class will convert XML guideline files to GDL (Guideline Definition Language).
5
+ #
6
+ #
7
+
8
+ require 'rexml/document'
9
+ require 'rexml/streamlistener'
10
+ require 'xmlutils/xmlrulevisitor'
11
+ require 'xmlutils/dumplistener'
12
+ require 'xmlutils/contextlistener'
13
+ require 'xmlutils/rulelistener'
14
+ require 'xmlutils/gdllistener'
15
+
16
+
17
+
18
+ #################################################
19
+ #
20
+ # class ContextParser
21
+ #
22
+ #################################################
23
+ class ContextParser
24
+
25
+ attr_accessor :context
26
+
27
+ def initialize(ctx)
28
+ @context = ctx
29
+ @verbose = false
30
+
31
+ end
32
+
33
+
34
+
35
+ def verbose?()
36
+ return @verbose
37
+ end # verbose?
38
+
39
+
40
+
41
+
42
+ #-------------------------------------------------------------------------------------------------------------#
43
+ # setFlag - Set configuration flags
44
+ #
45
+ # flg - Array of options or single string option. Currently, only -v: verbose is available
46
+ #
47
+ #------------------------------------------------------------------------------------------------------------#
48
+ def setFlag(flg)
49
+ if (flg.class == Array)
50
+ flg.each do |f|
51
+ case f
52
+ when '-v'
53
+ @verbose = true
54
+ end
55
+ end # flg.each
56
+
57
+ return
58
+ end # if flg
59
+
60
+ case flg
61
+ when '-v'
62
+ @verbose = true
63
+ end
64
+
65
+ end
66
+
67
+
68
+ #-------------------------------------------------------------------------------------------------------------#
69
+ # parse - Parse guideline XML
70
+ #
71
+ # fname - Filename of XML file to parse
72
+ #
73
+ #------------------------------------------------------------------------------------------------------------#
74
+ def parse(fname)
75
+ puts "Parsing file." unless (!verbose?)
76
+ ctxListener = ContextListener.new(@context)
77
+ ctxListener.verbose = @verbose
78
+ parser = Parsers::StreamParser.new(File.new(fname), ctxListener)
79
+ parser.parse
80
+
81
+
82
+ puts "Parsing guideline." unless (!verbose?)
83
+ gdlListener = GdlListener.new(@context) # Gets rule and ruleset names and aliases.
84
+ gdlListener.verbose = @verbose
85
+ parser = Parsers::StreamParser.new(File.new(fname), gdlListener)
86
+ parser.parse
87
+
88
+
89
+ puts "Parsing rule XML." unless (!verbose?)
90
+ ruleListener = RuleListener.new(@context)
91
+ ruleListener.verbose = @verbose
92
+ parser = Parsers::StreamParser.new(File.new(fname), ruleListener)
93
+ parser.parse
94
+ end # parse
95
+
96
+
97
+ #-------------------------------------------------------------------------------------------------------------#
98
+ # dumpResults - Dump collected context info to STDOUT
99
+ #
100
+ #
101
+ #------------------------------------------------------------------------------------------------------------#
102
+ def dumpResults()
103
+ @listener.context.dumpDpms()
104
+ @listener.context.dumpPpms()
105
+ @listener.context.dumpLookups()
106
+ @listener.context.dumpRules()
107
+ @listener.context.dumpRulesets()
108
+ end # dumpResults
109
+
110
+ end # class ContextParser
111
+
@@ -0,0 +1,57 @@
1
+ #
2
+ # File: dumpListener.rb
3
+ #
4
+ # This class is used to convert XML to GDL
5
+ #
6
+ #
7
+
8
+ require 'rexml/streamlistener'
9
+
10
+ include REXML
11
+
12
+ #################################################
13
+ #
14
+ # class DumpListener
15
+ #
16
+ #################################################
17
+ class DumpListener
18
+ include StreamListener
19
+
20
+ attr_writer :verbose
21
+
22
+ def verbose?
23
+ @verbose
24
+ end
25
+
26
+
27
+ def initialize()
28
+ @verbose = false
29
+ end
30
+
31
+
32
+ def tag_start(tag, attributes)
33
+ puts "Start #{tag}" unless (false == @verbose)
34
+
35
+ # puts "Arry: " + attributes.inspect
36
+ if(!attributes.empty?)
37
+ puts " Attr:" unless (false == @verbose)
38
+ attributes.each do |attr|
39
+ puts " #{attr[0]}: #{attr[1]}" if verbose?
40
+ end
41
+ end
42
+ end
43
+
44
+ def tag_end(tag)
45
+ puts "End #{tag}" if verbose?
46
+ puts "" if verbose?
47
+ end
48
+
49
+ def entity(content)
50
+ puts "entity: #{content}" if verbose?
51
+ end
52
+
53
+ def text(txt)
54
+ puts "text: #{txt}" if verbose?
55
+ end
56
+ end # class DumpListener
57
+
@@ -0,0 +1,305 @@
1
+ #
2
+ # File: gdlcontext.rb
3
+ #
4
+ # This is a guideline context object
5
+ #
6
+ #
7
+
8
+ require 'xmlutils/gdlcontextobjs'
9
+
10
+
11
+ #################################################
12
+ #
13
+ # class GdlContext
14
+ #
15
+ #################################################
16
+ class GdlContext
17
+
18
+ attr_reader :options
19
+
20
+ attr_accessor :rules
21
+ attr_accessor :ppms
22
+ attr_accessor :dpms
23
+ attr_accessor :lookups
24
+ attr_accessor :rulesets
25
+ attr_accessor :guideline
26
+ attr_accessor :messages
27
+
28
+
29
+ def initialize()
30
+ @rules = Hash.new
31
+ @ppms = Hash.new
32
+ @dpms = Hash.new
33
+ @lookups = Hash.new
34
+ @rulesets = Hash.new
35
+ @messages = Hash.new
36
+ @guideline = nil
37
+ end # initialize
38
+
39
+ def setOptions(options)
40
+ @options = options
41
+ end # setOptions
42
+
43
+ #-------------------------------------------------------------------------------------------------------------#
44
+ # createValidName - Generate a valid GDL name
45
+ #
46
+ # inname - name to convert
47
+ #
48
+ #------------------------------------------------------------------------------------------------------------#
49
+ def createValidName(inname)
50
+ outname = inname.gsub(/[\s\/\\?*#+]/,'') # Remove illegal chars (replace with underscore).
51
+ outname.gsub!(/_+/,"_") # Replace consecutive uscores with single uscore.
52
+ outname.gsub!(/\./,"-") # Replace period with dash.
53
+
54
+ outname
55
+ end
56
+
57
+ def isPpmVar(var)
58
+ isPpm = false
59
+
60
+ case var.varType
61
+ when 'app'
62
+ isPpm = true
63
+
64
+ when 'crd'
65
+ isPpm = true
66
+
67
+ when 'prd'
68
+ isPpm = true
69
+
70
+ end # case
71
+
72
+ isPpm
73
+ end # isPpmVar
74
+
75
+ #-------------------------------------------------------------------------------------------------------------#
76
+ # getLookupParamNames - generate a hash containing a lookup's x and y parameter names (not alias')
77
+ #
78
+ # lkName - name of lookup to get values from.
79
+ #
80
+ # returns Hash - xparam => xParam name, yparam => yParam name
81
+ #------------------------------------------------------------------------------------------------------------#
82
+ def getLookupParamNames(lkName)
83
+ lkParams = Hash.new
84
+
85
+ lkup = @lookups[lkName]
86
+
87
+ #puts lkup.inspect
88
+
89
+ x = nil
90
+ y = nil
91
+
92
+ if (isPpmVar(lkup.xParam))
93
+ x = @ppms[lkup.xParam.alias]
94
+ else
95
+ x = @dpms[lkup.xParam.alias]
96
+ end # if PPM
97
+
98
+ #puts x.inspect
99
+
100
+ if (isPpmVar(lkup.yParam))
101
+ y = @ppms[lkup.yParam.alias]
102
+ else
103
+ y = @dpms[lkup.yParam.alias]
104
+ end # if PPM
105
+
106
+ #puts y.inspect
107
+
108
+ if (nil == x)
109
+ raise "Unable to find xParam (#{lkup.xParam.alias}) in lookup #{lkName}"
110
+ end # if nil
111
+
112
+ if (nil == y)
113
+ raise "Unable to find yParam (#{lkup.yParam.alias}) in lookup #{lkName}"
114
+ end # if nil
115
+
116
+ lkParams["xparam"] = x.name
117
+ lkParams["yparam"] = y.name
118
+
119
+ return lkParams
120
+
121
+ end # getLookupParamNames
122
+
123
+ #-------------------------------------------------------------------------------------------------------------#
124
+ # dumpDpms - Dump all stored DPM variables
125
+ #
126
+ #
127
+ #------------------------------------------------------------------------------------------------------------#
128
+ def dumpDpms()
129
+ 79.times {print "="}
130
+ puts
131
+ puts "DPM DUMP".center(80)
132
+ 79.times {print "="}
133
+ puts
134
+
135
+ if(@dpms.length > 0)
136
+
137
+ dpms = @dpms.sort
138
+ dpms.each do |key, dpm|
139
+ puts "#{dpm.name}\t(#{dpm.alias})" unless dpm.varType == "DSM"
140
+ end
141
+
142
+ else
143
+ puts "No DPM variables to dump."
144
+ end
145
+
146
+ puts ""
147
+
148
+ 79.times {print "="}
149
+ puts
150
+ puts "DSM DUMP".center(80)
151
+ 79.times {print "="}
152
+ puts
153
+
154
+ if(@dpms.length > 0)
155
+ dpms = @dpms.sort
156
+ dpms.each do |key, dpm|
157
+ puts "#{dpm.name}\t(#{dpm.alias})" if dpm.varType == "DSM"
158
+ end
159
+
160
+ else
161
+ puts "No DSM variables to dump."
162
+ end
163
+
164
+ puts ""
165
+
166
+ end # dumpDpms
167
+
168
+ #-------------------------------------------------------------------------------------------------------------#
169
+ # dumpPpms - Dump all PPM variables
170
+ #
171
+ #
172
+ #------------------------------------------------------------------------------------------------------------#
173
+ def dumpPpms()
174
+ 79.times {print "="}
175
+ puts
176
+ puts "PPM DUMP".center(80)
177
+ 79.times {print "="}
178
+ puts
179
+
180
+ if(@ppms.length > 0)
181
+ ppms = @ppms.sort
182
+ ppms.each do |key, ppm|
183
+ puts "#{ppm.name}\t(#{ppm.alias})"
184
+ end
185
+
186
+ else
187
+ puts "No PPM variables to dump."
188
+ end
189
+
190
+ puts ""
191
+
192
+ end # dumpppms
193
+
194
+ #-------------------------------------------------------------------------------------------------------------#
195
+ # dumpRules - Dump all stored rules
196
+ #
197
+ #
198
+ #------------------------------------------------------------------------------------------------------------#
199
+ def dumpRules()
200
+ 79.times {print "="}
201
+ puts
202
+ puts "RULE DUMP".center(80)
203
+ 79.times {print "="}
204
+ puts
205
+
206
+ if(@rules.length > 0)
207
+ rules = @rules.sort
208
+ rules.each do |key, rule|
209
+ puts "#{rule.name}\t(#{rule.alias})"
210
+ puts "#{rule.xml}"
211
+ 40.times {print "-"}
212
+ puts
213
+ end
214
+
215
+ else
216
+ puts "No rules to dump."
217
+ end
218
+
219
+ puts ""
220
+ end # dumpRules
221
+
222
+ #-------------------------------------------------------------------------------------------------------------#
223
+ # dumpRule - Dump one rule
224
+ #
225
+ #
226
+ #------------------------------------------------------------------------------------------------------------#
227
+ def dumpRule(als)
228
+ 79.times {print "="}
229
+ puts
230
+ puts "RULE: #{als}".center(80)
231
+ 79.times {print "="}
232
+ puts
233
+
234
+ rule = @rules[als]
235
+ if (nil != rule)
236
+ puts "#{rule.name}\t(#{rule.alias})"
237
+ puts "#{rule.xml}"
238
+
239
+ else
240
+ puts "Cannot find matching rule."
241
+ end
242
+
243
+ puts ""
244
+ end # dumpRule
245
+
246
+ #-------------------------------------------------------------------------------------------------------------#
247
+ # dumpRulesets - Dump all stored rulesets
248
+ #
249
+ #
250
+ #------------------------------------------------------------------------------------------------------------#
251
+ def dumpRulesets()
252
+ 79.times {print "="}
253
+ puts
254
+ puts "RULESET DUMP".center(80)
255
+ 79.times {print "="}
256
+ puts
257
+
258
+ if(@rulesets.length > 0)
259
+ rulesets = @rulesets.sort
260
+ rulesets.each do |key, ruleset|
261
+
262
+ 40.times {print "-"}
263
+ puts
264
+ puts "#{ruleset.name}\t(#{ruleset.alias}) : #{ruleset.type} : #{ruleset.execType}"
265
+ ruleset.rules.each do |ruleAlias|
266
+ puts "\t#{ruleAlias}"
267
+ end # rules.each
268
+ puts ""
269
+
270
+ end # rulesets.each
271
+
272
+ else
273
+ puts "No rulesets to dump."
274
+ end
275
+
276
+ puts ""
277
+ end # dumpRulesets
278
+
279
+ #-------------------------------------------------------------------------------------------------------------#
280
+ # dumpLookups - Dump all stored rulesets
281
+ #
282
+ #
283
+ #------------------------------------------------------------------------------------------------------------#
284
+ def dumpLookups()
285
+ 79.times {print "="}
286
+ puts
287
+ puts "LOOKUP DUMP".center(80)
288
+ 79.times {print "="}
289
+ puts
290
+
291
+ if(@lookups.length > 0)
292
+ lookups = @lookups.sort
293
+ lookups.each do |key, lookup|
294
+
295
+ puts lookup.toGdlRef()
296
+
297
+ end # lookups.each
298
+ else
299
+ puts "No lookups to dump."
300
+ end # if
301
+
302
+ puts ""
303
+ end # dumpLookups
304
+ end # class GdlContext
305
+