使用Groovy解析OFBiz的entitymodel.xml文件

本文描述了如何使用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()
            }
        }
    }
}
运行解图如下: 分享家:Addthis中国

Leave a Reply





◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。