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.
- checksums.yaml +7 -0
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +77 -0
- data/bin/xmltogdl +88 -0
- data/docs/README.txt +20 -0
- data/lib/xmlutils/contextlistener.rb +432 -0
- data/lib/xmlutils/contextparser.rb +111 -0
- data/lib/xmlutils/dumplistener.rb +57 -0
- data/lib/xmlutils/gdlcontext.rb +305 -0
- data/lib/xmlutils/gdlcontextobjs.rb +286 -0
- data/lib/xmlutils/gdldoc.rb +547 -0
- data/lib/xmlutils/gdldocbuilder.rb +181 -0
- data/lib/xmlutils/gdllistener.rb +265 -0
- data/lib/xmlutils/gdltemplate.rb +488 -0
- data/lib/xmlutils/lineparser.rb +193 -0
- data/lib/xmlutils/listener.rb +459 -0
- data/lib/xmlutils/rulelistener.rb +414 -0
- data/lib/xmlutils/ruleparser.rb +112 -0
- data/lib/xmlutils/varlistener.rb +86 -0
- data/lib/xmlutils/version.rb +5 -0
- data/lib/xmlutils/xmlrulevisitor.rb +704 -0
- data/lib/xmlutils/xmltogdlcontroller.rb +93 -0
- data/lib/xmlutils/xmltogdltask.rb +23 -0
- data/lib/xmlutils/xmlvisitor.rb +690 -0
- data/lib/xmlutils.rb +40 -0
- data/rakefile.rb +34 -0
- data/unittests/2830.xml +1 -0
- data/unittests/chunks.rb +31 -0
- data/unittests/curDirTest.rb +2 -0
- data/unittests/data/2830-GENERATED.gdl +309 -0
- data/unittests/data/2830-GENERATED.xml +1 -0
- data/unittests/data/AUGuideline.xml +12 -0
- data/unittests/data/AUGuideline.xml.gdl +19190 -0
- data/unittests/data/BAKUP.DCTEST1.xml +1 -0
- data/unittests/data/DCTEST.xml +1 -0
- data/unittests/data/DCTEST1.xml +1 -0
- data/unittests/data/DCTEST1.xml.gdl +14890 -0
- data/unittests/data/DCTEST1.xml.rename.csv +180 -0
- data/unittests/data/DCTEST1wLookups.xml +174 -0
- data/unittests/data/DCTEST1wLookups.xml.gdl +127 -0
- data/unittests/data/GENERATED.gdl.xml +1 -0
- data/unittests/data/Message.xml +1 -0
- data/unittests/data/Message.xml.gdl +142 -0
- data/unittests/data/Pricing2ndGuideline.xml +1 -0
- data/unittests/data/Pricing2ndGuideline.xml.gdl +52670 -0
- data/unittests/data/Z-TEMP-Jeff.xml +1 -0
- data/unittests/data/Z-TEMP-Jeff.xml.gdl +288 -0
- data/unittests/tc_convert_xml_to_gdl.rb +23 -0
- data/unittests/ts_allTests.rb +2 -0
- data/xmlutils.gemspec +25 -0
- 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
|
+
|