xmlutils 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+