本文描述了如何使用Groovy来解析OFBiz的实体模型配置文件:entitymodel.xml。 源码如下:
/**
* ==================================================
* Author: rain(http://rainboyan.com)
*
* v1 2008/12/11 23:13
* - 实现了解析entitymodel.xml,打印至控制台。
* - 字段包括:
* Entity Name | Field Name | Field Type | PK | FK
* ==================================================
*/
def getPKs = { primkeys ->
def pks = []
for (key in primkeys) {
pks << key["@field"]
}
return pks
}
def isPK = { field, pks ->
for (pk in pks) {
if (field == pk) return true
}
return false
}
def getFKs = { relations ->
def fks = []
relations.each { relation ->
def keys = relation.'key-map'
fks << keys[0]["@field-name"]
}
return fks
}
def isFK = { field, fks ->
for (key in fks) {
if (field == key) return true
}
return false
}
def conf = new Properties()
conf.load(getClass().getResourceAsStream("/conf.properties"))
new File(conf['entitymodel.dir']).eachFileRecurse { file ->
if (file.isDirectory()) println file
if (file.isFile() && file.name.endsWith(".xml")) {
def model = new XmlParser().parse(file)
println model.title.text()
def entities = model.entity
println entities.size()
entities.each { entity ->
println "Entity: " + entity["@entity-name"]
def fields = entity.field
def primkeys = entity.'prim-key'
def pks = getPKs(primkeys)
def relations = entity.relation
def fks = getFKs(relations)
fields.each { field ->
print field["@name"].padRight(30)
print field["@type"].padRight(20)
print isPK(field["@name"], pks).toString().padRight(15)
print isFK(field["@name"], fks).toString().padRight(15)
println()
}
}
}
}
运行解图如下:


2008-12-11 23:31:28
Posted in
Tags:
Comments: 


