SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

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

JUDE APIの概要と使い方

  • X ポスト
  • このエントリーをはてなブックマークに追加

JUDEモデルの作成・編集方法

 モデルの参照方法が分かったところで、次は編集方法を説明します。ここでもサンプルコードを見てください。

サンプルプログラム

EditingModels.java
 1  import com.change_vision.jude.api.inf.editor.BasicModelEditor;
 2  import com.change_vision.jude.api.inf.editor.ModelEditorFactory;
 3  import com.change_vision.jude.api.inf.editor.TransactionManager;
 4  import com.change_vision.jude.api.inf.exception.InvalidEditingException;
 5  import com.change_vision.jude.api.inf.exception.ProjectLockedException;
 6  import com.change_vision.jude.api.inf.model.IClass;
 7  import com.change_vision.jude.api.inf.model.IModel;
 8  import com.change_vision.jude.api.inf.model.IPackage;
 9  import com.change_vision.jude.api.inf.project.ProjectAccessor;
10  import com.change_vision.jude.api.inf.project.ProjectAccessorFactory;
11  
12  /**
13   * APIでJUDEモデルを作成するサンプルコード. 
14   * パッケージ1つと配下のクラスを2つ、その間の関連を作成する。

15   * このサンプルでは、図は作成されない。図で見る場合は、[クラス図の自動作成]や
16   * ツリーから図へのドラッグアンドドロップでご覧ください。
17   */
18  public class EditingModels {
19  
20      public static void main(String[] args) {
21  
22          try {
23              System.out.println("Creating new project...");
24  
25              // プロジェクトを作成して、起点となるモデルを取得
26              ProjectAccessor prjAccessor = ProjectAccessorFactory.getProjectAccessor();
27              prjAccessor.create("../SampleModel.jude");
28              IModel project = prjAccessor.getProject();
29  
30              System.out.println("Creating new elements in the project...");
31  
32              try {
33                  // クラスなどのモデル要素を作成または編集する場合、まとまり単位としてトランザクション操作が必要
34                  TransactionManager.beginTransaction();
35  
36                  // クラスなどのモデル要素を作成または編集する
37                  createModels(project);
38  
39                  // トランザクションの終了
40                  TransactionManager.endTransaction();
41                  
42              } catch (InvalidEditingException e) {
43                  // トランザクションの放棄
44                  TransactionManager.abortTransaction();
45                  // 不正編集の例外メッセージを取得
46                  System.err.println(e.getMessage());
47                  e.printStackTrace();
48              } 
49  
50              // プロジェクトを保存
51              prjAccessor.save();
52  
53              // プロジェクトを閉じる
54              prjAccessor.close();
55  
56              System.out.println("Finished");
57  
58          } catch (ProjectLockedException e) {
59              e.printStackTrace();
60          } catch (Throwable e) {
61              e.printStackTrace();
62          }
63      }
64  
65      private static void createModels(IModel project)
66              throws ClassNotFoundException, InvalidEditingException {
67          // クラス関連のモデル要素を作成するエディタを取得
68          BasicModelEditor basicModelEditor = ModelEditorFactory.getBasicModelEditor();
69  
70          // パッケージを作成
71          IPackage packageA = basicModelEditor.createPackage(project, "PackageA");
72  
73          // 指定のパッケージにクラスを作成
74          IClass classA = basicModelEditor.createClass(packageA, "ClassA");
75          
76          // クラスの定義を追加
77          classA.setDefinition("Definition of ClassA");
78          
79          // クラスに属性を追加
80          basicModelEditor.createAttribute(classA, "attribute0", "int");
81          
82          // クラスに操作を追加
83          basicModelEditor.createOperation(classA, "operation0", "void");
84  
85          // 指定のパッケージにクラスを作成
86          IClass classB = basicModelEditor.createClass(packageA, "ClassB");
87  
88          // クラス間の関連を作成
89          basicModelEditor.createAssociation(classA, classB, "association name",
90                  "classA end", "classB end");
91      }
92  }
出力例3(JUDEモデル)
出力例3(JUDEモデル)

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

 本節のサンプルプログラムは、「出力例3」のJUDEモデルを新規に作成します。

 通常は、何かの入力情報などを基にモデルを作成することが多いと思いますが、ここでは簡単のために入力なしとしています。

基本手順

 JUDEのAPIを使ってモデル情報を編集する基本手順は次のとおりです。★の部分で目的の編集を行います。

プロジェクトを新規に作成する場合

  1. ProjectAccessorの取得
  2. .judeファイルの新規作成
  3. モデルのルートとなるモデルの取得
  4. トランザクションの開始
  5. ルートとなるモデルに目的の編集を実行(★)
  6. トランザクションの終了
  7. .judeファイルの保存
  8. .judeファイルのクローズ

既にあるプロジェクトを編集する場合

  1. ProjectAccessorの取得
  2. .judeファイルのオープン
  3. モデルのルートとなるモデルの取得
  4. トランザクションの開始
  5. ルートとなるモデルから編集対象のモデルを辿り、目的の編集を実行(★)
  6. トランザクションの終了
  7. .judeファイルの保存
  8. .judeファイルのクローズ

 編集の前後でトランザクションの手続きが必要なことに注意してください。実際の編集方法とトランザクションの手続きについて、このあと説明していきます。

モデルの作成方法

 クラスやパッケージなどを作成する場合、API中のModelEditorFactoryクラスと各ModelEditorクラスを使います。

 IPackage.addClass()ようなインターフェイスではなくて、モデルの作成と削除を主に担当するModelEditorクラスを利用する点に注意してください。例えば、BasicModelEditorでクラスやパッケージなどクラス図関連のモデルを作成でき、ERModelEditorでEREntityなどER図関連のモデルを作成できます。各ModelEditorは、ModelEditorFactoryから取得できます。

setメソッド

 JUDE APIの各モデル要素インターフェイスにsetメソッドを提供します。

 名前や定義といった簡単な属性については、各モデル要素に用意されているsetメソッドを利用して編集します。例えば、IAttributeのsetInitialValueメソッドで属性の初期値を編集できます。

トランザクションの手続き

 JUDEモデルを作成・編集する場合、トランザクションの開始と終了を宣言する必要があります。トランザクションは、モデルデータを編集するまとまり単位を示すもので、編集を取り消したりできる単位になっています。例えば、編集の途中に名前が衝突したら、あるところまで編集をさかのぼって取り消したい、といったことを実現するために利用できます。

 実際には、そこまで厳密に処理したいケースは少ないと思いますので、「編集処理はbeginTransaction()endTransaction()で囲う必要がある」ということを覚えておいてもらえればよいと思います。前の「基本手順」でも、編集処理全体を一つのトランザクションでごっそり囲う例を示しました。

 トランザクションの開始と終了には、JUDE APIが提供するTransactionManagerクラスを利用します。

 ここまで、ごく簡単にですが、APIを使ったモデルの参照方法と編集方法のサンプルプログラムを説明してきました。サンプルプログラムはダウンロードできるようにしてありますので、ぜひ動かしてみてください。ビルドや実行方法も難しくありませんので、次の説明を参考にやってみてもらえればと思います。

次のページ
サンプルプログラムの実行環境とビルド環境

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

周 翼(シュウ ヨク)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3165 2008/11/07 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング