JUDEモデルの作成・編集方法
モデルの参照方法が分かったところで、次は編集方法を説明します。ここでもサンプルコードを見てください。
サンプルプログラム
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モデルを新規に作成します。
通常は、何かの入力情報などを基にモデルを作成することが多いと思いますが、ここでは簡単のために入力なしとしています。
基本手順
JUDEのAPIを使ってモデル情報を編集する基本手順は次のとおりです。★の部分で目的の編集を行います。
プロジェクトを新規に作成する場合
- ProjectAccessorの取得
- .judeファイルの新規作成
- モデルのルートとなるモデルの取得
- トランザクションの開始
- ルートとなるモデルに目的の編集を実行(★)
- トランザクションの終了
- .judeファイルの保存
- .judeファイルのクローズ
既にあるプロジェクトを編集する場合
- ProjectAccessorの取得
- .judeファイルのオープン
- モデルのルートとなるモデルの取得
- トランザクションの開始
- ルートとなるモデルから編集対象のモデルを辿り、目的の編集を実行(★)
- トランザクションの終了
- .judeファイルの保存
- .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を使ったモデルの参照方法と編集方法のサンプルプログラムを説明してきました。サンプルプログラムはダウンロードできるようにしてありますので、ぜひ動かしてみてください。ビルドや実行方法も難しくありませんので、次の説明を参考にやってみてもらえればと思います。
