Grails Tips : ドメインクラスを奥までさわる
久しぶりの更新!!!
そういえば、Grails eXchange 2007の日程が変わりました。
http://www.grails-exchange.com/
色々あって、10月に移動。理由書いて良いのか?わからないので知りたい人は、メールください。
本日の内容「ドメインクラスを奥までさわる」
Java Doc見ればわかるよと言われれば、それまでですが・・・
ドメインクラスを名指しで取り出す
def domainCls = grailsApplication.getDomainClass("Book")
//又は、(0.5から対応)
def domainCls = grailsApplication.getArtefact("Domain","Book")
ドメインクラスから色々取得
ドメインクラスを取り出したら:
println domainCls.name // クラス名
println domainCls.propertyName // 頭も小文字の名前 Book -> book
println domainCls.clazz.list() // MetaMethods実行 clazz.findAll* 等
println domainCls.getRelatedClassType("projects")//リレークラスの型取得
//メソッド一覧
domainCls.class.methods.each{
println it.name
}
プロパティーリスト取得
そして、constraints 内容順にソート
def comparator = org.codehaus.groovy.grails.scaffolding.DomainClassPropertyComparator.class
def props = domainCls.properties.findAll { it.name != 'version' }
Collections.sort(props, comparator.constructors[0].newInstance([domainCls] as Object[]))
println props
プロパティーリストから、色々取得
props.each{prop->
println "------"
println "getName ${prop.name}"
println "getType ${prop.type} ${prop.type.name}"
println "getNaturalName ${prop.naturalName}" // fieldNameOne => Field Name One
println "getDomainClass ${prop.domainClass}"
println "getFieldName ${prop.fieldName}"
println "isOneToMany ${prop.isOneToMany()}"
println "isManyToOne ${prop.isManyToOne()}"
println "isBidirectional ${prop.isBidirectional()}"
println "isAssociation ${prop.isAssociation()}"
println "isPersistent ${prop.isPersistent()}"
println "isManyToMany ${prop.isManyToMany()}"
println "isOwningSide ${prop.isOwningSide()}"
println "isOptional ${prop.isOptional()}"
println "isOneToOne ${prop.isOneToOne()}"
println "isCircular ${prop.isCircular()}"
println "getReferencedPropertyType ${prop.referencedPropertyType}"
println "getReferencedDomainClass ${prop.referencedDomainClass}"
println "getReferencedPropertyName ${prop.referencedPropertyName}"
println "getFetchMode ${prop.getFetchMode()}"
println "getOtherSide ${prop.getOtherSide()}"
println "getTypePropertyName ${prop.name}"
println "isInherited ${prop.isInherited()}"
println "isIdentity ${prop.isIdentity()}"
}
こんな感じで、ドメインクラスの色々を紹介しました。
これだけできると、ダイナミックに色々操作する仕組みが結構想像できます。
0 Comments:
Post a Comment
<< Home