Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

分析設計モデルをわがままに活用しよう
JUDE API入門

JUDE APIの概要と使い方

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/11/07 14:00

 この記事では、システム設計ツール「JUDE」のAPIについて、概要と使い方を基本から紹介します。作成した分析設計モデルは使い捨てる場合もあると思いますが、開発プロセスの前後の作業と関連し合っている場合も多いと思います。せっかくモデリングツールを使ってモデルを書くのですから、プログラムを使って作業を効率化してしまいましょう。それを可能にするのがAPIです。

目次

はじめに

 この記事では、システム設計ツール「JUDE」のAPIについて、概要と使い方を、サンプルプログラムを中心にして基本から紹介します。

 皆さんは、作成した分析設計モデルをどこまで活用されているでしょうか? 単独で作成して頭の中の整理やコミュニケーションに使い、使い捨てる場合もあると思いますが、開発プロセスの前後の作業と関連し合っている場合も多いと思います。

JUDEモデルの活用プロセス
JUDEモデルの活用プロセス

 上図のように、何かの情報をもとにモデルを作成したり、モデルからドキュメントやソースを作成できたりします。せっかくモデリングツールを使ってモデルを書くのですから、プログラムを使って作業を効率化してしまいましょう。それを可能にするのが、プログラムでモデルにアクセスできるAPIです。

具体的な活用例

 はじめにJUDEのAPIの具体的な活用例を示します。

 これらの例はほんの一部で、皆さんの状況ごとにいろいろな活用方法が考えられると思います。開発プロセスも扱っているモデルもツールもプロジェクトによってさまざまですから、やりたいこともさまざまでしょう。そんなわがままな要求にこたえられるのがAPIです。

 さて、前置きはこのぐらいにして、さっそくAPIを使ってみましょう。

 JUDEのAPIでは、モデル情報の参照と編集が可能です。まずは、モデル情報を参照する例を示します。

JUDEモデル情報の取得方法

サンプルプログラム1

ReadingPackageName.java
 1  import com.change_vision.jude.api.inf.exception.ProjectLockedException;
 2  import com.change_vision.jude.api.inf.model.IModel;
 3  import com.change_vision.jude.api.inf.model.INamedElement;
 4  import com.change_vision.jude.api.inf.model.IPackage;
 5  import com.change_vision.jude.api.inf.project.ProjectAccessor;
 6  import com.change_vision.jude.api.inf.project.ProjectAccessorFactory;
 7  
 8  /**
 9   * APIでJUDEモデルのパッケージ情報を取得するサンプルコード. 
10   * パッケージ名をコンソールに出力する。
11   */
12  public class ReadingPackagesName {
13  
14      public static void main(String[] args) {
15          try {
16              System.out.println("Opening project...");
17  
18              ProjectAccessor prjAccessor = ProjectAccessorFactory.getProjectAccessor();
19  
20              // プロジェクトを開く。
21              prjAccessor.open("../SampleModel.jude", true, false, true);
22  
23              System.out.println("Printing the packages...");
24  
25              // 起点となるモデルを取得する。
26              IModel project = prjAccessor.getProject();
27  
28              // プロジェクトに含まれる全てのパッケージを取得する。
29              printPackageInfo(project);
30  
31              // プロジェクトを閉じる
32              prjAccessor.close();
33  
34              System.out.println("Finished");
35  
36          } catch (ProjectLockedException e) {
37              e.printStackTrace();
38          } catch (Throwable e) {
39              e.printStackTrace();
40          }
41      }
42  
43      private static void printPackageInfo(IPackage iPackage) {
44          // パッケージ名を表示
45          System.out.println("Package name: " + iPackage.getName());
46  
47          // サブパッケージを表示
48          INamedElement[] subPackages = iPackage.getOwnedElements();
49          for (int i = 0; i < subPackages.length; i++) {
50              if (subPackages[i] instanceof IPackage) {
51                  IPackage subPackage = (IPackage) subPackages[i];
52                  // パッケージを表示
53                  printPackageInfo(subPackage);
54              } 
55          }
56      }
57  }
入力となるJUDEモデルの例1
入力となるJUDEモデルの例1
出力例1
出力例1

サンプルプログラム1の内容

 サンプルプログラム1は、JUDEモデルを読み込んで、その中にあるパッケージ名をコンソールに出力します。入力例と出力例を見てください。簡単のため、パッケージの入れ子関係などは無視してフラットに出力します。

基本手順

 JUDEのAPIを使ってモデル情報を参照する基本手順は、次のようになっています。★の部分をカスタマイズすることで、目的の情報を抜き出して好みの出力を得るようにします。

  1. ProjectAccessorの取得
  2. .judeファイルのオープン
  3. モデルのルートとなるモデルの取得
  4. モデル情報をたどって目的のモデルを取得し、好みの出力をする(★)
  5. .judeファイルのクローズ

モデル情報の辿り方

 JUDEモデルのすべてのモデル情報は、プロジェクトを表すモデル(プロジェクトモデル)の下にツリー状に存在します。その入れ子になった子要素は、getOwnedElements()で取得できます。パッケージの配下には、クラスやパッケージが存在します。その中からパッケージ(IPackage)を抽出して(48行目から51行目までのソースコード)同様の処理(getOwnedElements())を再帰的に繰り返すことで、すべてのパッケージ(IPackage)およびパッケージ(IPackage)の直下にあるモデル要素を取得できます。

getメソッド

 JUDE APIの各モデル要素には、いくつかのgetメソッドがあります。例えば、IPackageのgetNameメソッドでパッケージの名前を取得でき、getDefinition()で定義を取得できます。

Projectのopenの引数

 ProjectAccessor.open()にたくさん引数が付いている点、気になった方もいると思います。これは、プロジェクトファイルのロックの扱いなどが関係しています。「APIを使ってみようとしたけどopenに失敗する」といったトラブルにあわないように、注意してください。

 JUDEでプロジェクトファイルを開くと、プロジェクトファイルがロックされ、他のJUDEプログラムから編集できない状態になります。そのため、そのような場合に、ProjectAccessor.open(String projectName)で開こうとするとProjectLockedExcetpionで失敗してしまいます。その場合は、サンプルソースコードのように引数を調整することで、読み込み専用モードでプロジェクトを開けます(21行目のソースコード)。詳しくは、API利用ガイドを参照してください。

 これからサンプルプログラム1を少し拡張した例を紹介します。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 周 翼(シュウ ヨク)

     1999年4月に来日。プログラマの仕事とソフトウェア科学の修士課程を経て、2003年10月にJUDE開発チームに参加。現在は、ブリッジSEとして、中国オフショア開発における&quot;見える化&quot;を実践しつつ、日中開発チーム間の橋渡し役を務める。

  • 岡村 敏弘(オカムラ トシヒロ)

     オブジェクト指向を中心として、CADやカーナビ関連の開発・コンサルを経験。現在は、JUDE開発部リーダーとして、JUDEのフィードバックを集めつつ、改善案を検討することに従事。

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5