JUDE API を使ったクラスの出力 - Groovy と Scala
以前 id:fits:20070515 は JRuby から JUDE API を使ったが、今回は Groovy と Scala で .jude ファイル内の全クラス(IClass インターフェース実装オブジェクト)を出力するような簡単なスクリプトを書いてみた。
実行に使った環境は以下の通り。
- Groovy 1.5.6
- Scala 2.7.1
なお、IClass インターフェースで判定するとユースケースやアクター等も含まれる。
- ユースケースは、IClass を extends した IUseCase の実装オブジェクト
- アクターは、IClass の実装オブジェクトでステレオタイプが "actor"
Groovy で処理
まず、Groovy。args でスクリプト実行時の引数を参照。
class_listup.groovy
import com.change_vision.jude.api.inf.project.* import com.change_vision.jude.api.inf.model.* scriptName = System.getProperty("script.name") if (args.length < 1) { println "groovy ${scriptName} [jude fileName]" return } def printClasses(packageObj) { packageObj.ownedElements.each { if (it instanceof IClass) { println it.name } else if(it instanceof IPackage) { printClasses(it) } } } def pro = ProjectAccessorFactory.projectAccessor pro.open(args[0]) printClasses(pro.project) pro.close()
Scala で処理
次に Scala。パターンマッチングでクラスの判定をやってるのが特徴。
Groovy と同様に args で実行時の引数を参照。
class_listup.scala
import com.change_vision.jude.api.inf.project.ProjectAccessorFactory import com.change_vision.jude.api.inf.model.{IClass, IPackage} if (args.length < 1) { println("scala class_listup.scala [jude fileName]") return } def printClasses(packageObj: IPackage): Unit = { packageObj.getOwnedElements.foreach {el => el match { case o: IClass => println(o.getName) case p: IPackage => printClasses(p) } } } val pro = ProjectAccessorFactory.getProjectAccessor pro.open(args(0)) printClasses(pro.getProject) pro.close
実行は以下の通り。(%JUDE_HOME% は JUDE のインストールディレクトリへのパス)
>scala -classpath %JUDE_HOME%\jude-api.jar;%JUDE_HOME%\jude-community.jar class_listup.scala test.jude