grails で再帰的なドメイン クラスを定義しました。
class Work {
String code
String title
String description
static hasMany = [subWorks:Work]
static mappedBy = [subWorks: 'parentWork']
Work getRootWork(){
if(parentWork) return parentWork.getRootWork()
else return this
}
boolean isLeafWork(){
return subWorks.isEmpty()
}
boolean isRootWork(){
return !parentWork
}
作品一覧はありますが、まだ階層構造が構築されていません。構造は次のようになります。
def works = [new Work(code:'A', title:'TitleA'),
new Work(code:'B', title:'TitleB'),
new Work(code:'A.1', title:'Titile A.1'),
new Work(code:'B.1', title:'Title B.1'),
new Work(code:'B.2', title:'Title B.2'),
new Work(code:'B.3', title:'Title B.3'),
new Work(code:'B.2.2', title:'Title B.2.2'),
new Work(code:'B.2.3', title:'Title B.2.3'),
new Work(code:'A.1.1', title:'Title A.1.1'),
new Work(code:'A.1.2', title:'Title A.1.2'),]
私が必要としているのは、示唆されたコードに基づいて、これらの作品間の階層関係を構築することです。たとえば、A.1 は A の最初の子作品です。B.1.1 は B.1 作業の最初の子であり、その親は B 作業です。この種の階層構造を構築するために、Groovy が再帰クロージャをサポートしていることは知っています。Groovy の公式ドキュメントにある JN2515 フィボナッチ数の例など、Groovy の再帰クロージャーを使用して目標を達成するにはどうすればよいですか? どうもありがとう!