JavaライブラリはGroovyから使ったほうが良いと思ったこと

設計は主にastahを使っているので、便利に使うためにastah*APIを使う機会が多いです。astahはJavaなので今まではJavaで書いてましたが、最近Groovyを本格的に学びだして魅力がわかってきたし、astahはJavaなのでせっかくだから、Groovyで書いてみることにしました。

今日一番良かったのは、配列操作。
astahはプロジェクトツリーを配列で持っています。たとえば、あるパッケージ(フォルダ)上にある図を取得するためには、Javaではこう書きます。

IPackage pkg = ...;
IDiagram[] diagrams = pkg.getDiagrams();

このファイルの書くフォルダの図の名前リストを作ろうとすると、こんなかんじになります。

List<IDiagram> collection = new ArrayList<>();
collection.addAll(Arrays.asList(diagrams)); //繰り返し行う

Javaだと配列は要素数が固定なのでコレクションクラスに変換して可変状態にして処理をするのを自分で書かなければいけませんが、Groovyはそれらを判断してやってくれます。

def collection = []
collection += diagrams //繰り返し行う

さらに、これを名前とオブジェクトのリストを作ろうと思うと、これだけですみます。

def collection = []
pkg.getDiagrams().each {
  collection << [it.name : it] //繰り返し行う
}

クラス図だけのリストにしたい場合はこうですね。
図の名前を取得するためにはgetNameメソッドを使ってきましたが、IDiagramのスーパークラスにname属性があるので、nameを指定すればgetterが動作します。
この例でswitch文を使うのは冗長ですが、これも今回覚えた書き方で、astahには10以上の図があるので、もっとたくさんあるときは有効だと思います。

def collection = []
pkg.getDiagrams().findAll{ isClassDiagram(it) }.each {
  collection << [it.name : it] //繰り返し行う
}
def isClassDiagram(def value) {
  switch(value) {
  case IActivityDiagram: true
    break
  default: false
  }
}

今回は既存のJavaのライブラリをGroovyから呼び出して楽をしました。今回のことで思ったのは、既存のJavaシステムがあって、それを拡張する案件があったとき、Groovyを導入するチャンスではないか、ということです。