ログイン
検索
メインメニュー
フォーラム一覧   -   トピック一覧
   astah*への改善アイデア
     API シーケンス図の読み込みについて
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
ゲスト
投稿日時: 2008-12-15 0:13
API シーケンス図の読み込みについて
ゲストの「eikichi」さんからの投稿です。
---

こんにちは。
JUDE APIで色々試させていただいていますが、気になった点があります。

【使用バージョン】
Pro 5.4 (モデルバージョン: 29)

【気になった点】
シーケンス図から次の情報を取得することができない。
定義欄があるにも関わらず、取得できないのはなぜか。
1.ライフラインの「ベースクラス」に対するパッケージ
2.メッセージの「返り値変数」

ご回答お願いします。
yamazaki
投稿日時: 2008-12-15 17:45
一人前
登録日: 2006-5-5
居住地:
投稿: 132
Re: API シーケンス図の読み込みについて
eikichiさん、こんばんは。
JUDE APIのご利用、どうもありがとうございます。

引用:

【気になった点】
シーケンス図から次の情報を取得することができない。
定義欄があるにも関わらず、取得できないのはなぜか。
1.ライフラインの「ベースクラス」に対するパッケージ
2.メッセージの「返り値変数」


シーケンス図の定義欄を取得したい場合は、次の方法をご利用ください。

ISequenceDiagram は INamedElementを継承しており、INamedElement の
getDefinition で ISequenceDiagram の定義を取得できます。

> 1.ライフラインの「ベースクラス」に対するパッケージ

ILifeLine の getBase() でベースクラスを取得できます。
ベースクラスはIElementを継承しており、IElement の getOwner で所属するパッケージを取得できます。

> 2.メッセージの「返り値変数」

残念ながら、メッセージの「返り値変数」を取得するAPIを提供していないため、
APIでメッセージの「返り値変数」を取得することはできません。
こちらはご要望としてお預かりしたいと思います。

シーケンス図の定義欄の位置を示す画像











ベースクラスのパッケージを取得するサンプルコードを
載せておきますので、どうぞお試しください。

import java.io.IOException;
import com.change_vision.jude.api.inf.exception.LicenseNotFoundException;
import com.change_vision.jude.api.inf.exception.NonCompatibleException;
import com.change_vision.jude.api.inf.exception.ProjectLockedException;
import com.change_vision.jude.api.inf.exception.ProjectNotFoundException;
import com.change_vision.jude.api.inf.model.IClass;
import com.change_vision.jude.api.inf.model.IDiagram;
import com.change_vision.jude.api.inf.model.IElement;
import com.change_vision.jude.api.inf.model.IInteraction;
import com.change_vision.jude.api.inf.model.ILifeline;
import com.change_vision.jude.api.inf.model.IMessage;
import com.change_vision.jude.api.inf.model.IModel;
import com.change_vision.jude.api.inf.model.INamedElement;
import com.change_vision.jude.api.inf.model.ISequenceDiagram;
import com.change_vision.jude.api.inf.project.ProjectAccessor;
import com.change_vision.jude.api.inf.project.ProjectAccessorFactory;


public class APIForReadingSequenceDiagramSample {

public static void main(String[] args) {
try {
ProjectAccessor prjAccessor = ProjectAccessorFactory.getProjectAccessor();
prjAccessor.open("C:/sequenceDiagramSample.jude", true, false, true);

IModel project = prjAccessor.getProject();
IDiagram[] iDiagrams = project.getDiagrams();
for (int i = 0; i < iDiagrams.length; i++) {
if (iDiagrams[i] instanceof ISequenceDiagram) {
ISequenceDiagram iSequenceDgm = (ISequenceDiagram) iDiagrams[i];
System.out.println("sequence diagram definition: " + iSequenceDgm.getDefinition());

IInteraction iInteraction = iSequenceDgm.getInteraction();
ILifeline[] iLifeLine = iInteraction.getLifelines();
for (int j = 0; j < iLifeLine.length; j++) {
IClass baseClass = iLifeLine[j].getBase();
if (baseClass != null) {
IElement owner = baseClass.getOwner();
if (owner instanceof INamedElement) {
System.out.println("package of base class: " + ((INamedElement)owner).getName());
}
}
}

IMessage[] iMessages = iInteraction.getMessages();
for (int j = 0; j < iMessages.length; j++) {
System.out.println("return value of a message: " + iMessages[j].getReturnValue());
}
}
}

prjAccessor.close();
} catch (LicenseNotFoundException e) {
e.printStackTrace();
} catch (ProjectNotFoundException e) {
e.printStackTrace();
} catch (ProjectLockedException e) {
e.printStackTrace();
} catch (NonCompatibleException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
}
}
eikichi
投稿日時: 2008-12-15 23:13
新米
登録日: 2008-12-5
居住地:
投稿: 13
Re: API シーケンス図の読み込みについて
yamazakiさん、ありがとうございます。

getOwnerは気になってはいましたが、取り方がよくわかりませんでした。実は、利用ガイドに書いてあったのですね。申し訳ありませんでした。けれど、もう少しjavadoc側にも説明があるとうれしいのですが、わがままでしょうか?
(「INamedElementにとってgetOwnerとは名前空間を意味し、特にIClassにとってはパッケージを意味する」、など)

2.は「戻り値」で代用することにしました。
シーケンス図でアクティビティ図レベルのメソッドの中身は生成できないか試みています。2.の問題をこの代用にすることで、簡単な処理は生成できるようになりました。

今後とも、よろしくお願いします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を