ログイン
検索
メインメニュー
フォーラム一覧   -   トピック一覧
   astah*の使い方
     JUDE APIを用いたユースケース図の情報取得
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
SuperTurbo
投稿日時: 2009-6-14 1:19
新米
登録日: 2009-6-14
居住地:
投稿: 5
JUDE APIを用いたユースケース図の情報取得
JUDE APIを用いてユースケース図から次の様な情報を取得することを考えています。

例えば、ユースケースAとユースケースBが存在し、AとBが関連を持っているとします。
「A−B」

「ユースケースAについて、関連があるのはBである」

という情報を得たいのですが、うまくいきません。

現在、
・プロジェクト配下のモデル(IUseCase)を取得
・モデル配下の要素(IAttribute)を取得
・要素から関連に関する情報(IAssociation)を取得
までを行っています。

ここから先、どうすれば、「B」という情報を取得することができるのかがわかりません。
ご教授頂けませんでしょうか?
よろしくお願いします。
yamazaki
投稿日時: 2009-6-17 18:29
一人前
登録日: 2006-5-5
居住地:
投稿: 132
Re: JUDE APIを用いたユースケース図の情報取得
SuperTurboさん、こんにちは。ご投稿、ありがとうございます。

ご希望の情報は、関連(IAssociation)から getMemberEnds()を
用いて取得できると思いますので、お試しください。

IAssociationのJavaDoc は以下よりご覧いただけます。

http://jude.change-vision.com/javadoc/jude-api/5_5/api/ja/doc/javadoc/com/change_vision/jude/api/inf/model/IAssociation.html

今後もどうぞご活用ください。
SuperTurbo
投稿日時: 2009-6-17 20:29
新米
登録日: 2009-6-14
居住地:
投稿: 5
Re: JUDE APIを用いたユースケース図の情報取得
yamazakiさん

こんにちわ。
ご返答、ありがとうございます。

早速試してみたのですが、うまくいきませんでした。

具体的には、まず、ユースケース図で、A-B(ユースケースAはユースケースBに関連している/ユースケースBはユースケースAに関連している)というものを作成しました。

次に、JUDE APIを用いて、Aというユースケースから辿って行って、最終的にBという名前を表示しようとしてみました。

しかし、Bという名前が表示できませんでした。
また、getMemberEnds()で取得したIAttributeのlengthを表示させてみたところ、2となってしまいました。
(1であってほしかった)

どこで間違ってしまったのか知りたいのですが、ご指摘頂けないでしょうか?

---
コード

public void printNextUC(IUseCase uc)
{
// モデル名を取得
String master_name;
master_name = uc.getName();
System.out.printf("モデル名は\t\t%s\n", master_name);

// モデルの属性を取得
IAttribute[] iAttribute = uc.getAttributes();
System.out.printf("モデルの属性の数は\t%d\n" ,iAttribute.length);

// 関連の属性を取得
IAssociation iAssociation = iAttribute[0].getAssociation();

// 関連端の属性を取得
IAttribute[] a = iAssociation.getMemberEnds();
System.out.printf("関連端の属性の数は\t%d\n", a.length);

// 関連短の属性名を表示
for(int i = 0; i<a.length; i++)
{
System.out.println( a[i].getName() );
}
}

---
出力結果

モデル名は A
モデルの属性の数は 1
関連端の属性の数は 2


モデル名は B
モデルの属性の数は 1
関連端の属性の数は 2


---

もしよろしければ、お願いいたします。
Kota
投稿日時: 2009-6-22 10:55
開発者
登録日: 2006-5-9
居住地:
投稿: 151
Re: JUDE APIを用いたユースケース図の情報取得
SuperTurboさん、こんにちわ。
ご不便をおかけして申し訳ないです。
開発部で実際にコードを書いて試してみました。

プロジェクト直下にユースケースA,Bがありその間に関連があり、それぞれの関連端名が、ユースケースA,Bです。


以下書いたJUnitの一部です。

    protected INamedElement getElement(INamedElement[] elements, String elementName) {
        for (int i = 0; i < elements.length; i++) {
            if (elements[i].getName().equals(elementName)) {
                return elements[i];
            }
        }
        return null;
    }
    
    public void test01() {
    	showInfo((IUseCase)getElement(project.getOwnedElements(), "ユースケースA"));
    	showInfo((IUseCase)getElement(project.getOwnedElements(), "ユースケースB"));
    }
    
    private void showInfo(IUseCase uc) {
        System.out.println("IUseCase=" + uc.getName());
        
        IAttribute[] iAttribute = uc.getAttributes();
        for (int i = 0; i < iAttribute.length; i++) {
        	System.out.println("IUseCase.getAttributes()=" + iAttribute[i].getName());
        	IAssociation association = iAttribute[i].getAssociation();
          System.out.println("IAssociation=" + association.getName());
        	IAttribute[] memberEnds = association.getMemberEnds();
        	for (int j = 0; j < memberEnds.length; j++) {
        		System.out.println("IAssociation.getMemberEnds()=" + memberEnds[j].getName());
        	}
		}
    }

以下出力結果です。

IUseCase=ユースケースA
IUseCase.getAttributes()=ユースケースB
IAssociation=関連
IUseCase=ユースケースA
IUseCase.getAttributes()=ユースケースB
IAssociation=関連
IAssociation.getMemberEnds()=ユースケースA
IAssociation.getMemberEnds()=ユースケースB
IUseCase=ユースケースB
IUseCase.getAttributes()=ユースケースA
IAssociation=関連
IAssociation.getMemberEnds()=ユースケースA
IAssociation.getMemberEnds()=ユースケースB

UML2.0になって属性と関連はプロパティといって以下のような意味合いになります。
ユースケースAがユースケースBへの関連をもつ=ユースケースAがユースケースBの属性をもつ。

上記のシンプルなモデルでは、ユースケースAやBから一つの関連が取得でき、その関連がもつ関連端は2つのはずです。

もし、うまい具合いに行かないのであれば
もしかしたら、モデルが壊れている可能性もありますので、
[ツール][モデル補正][不正なモデルを修正]で修正しても、
結果が異なる場合、モデルをjude-bugs@change-vision.com(@は小文字に変換してください)まで送っていただければ、調査いたします。

あと、返信内容にあやまりがありましたので、
最初の投稿(10:55)より、
本日13:00ごろに内容(ソース、結果)とも変更しました。
すみませんです。
Kota
投稿日時: 2009-6-22 18:21
開発者
登録日: 2006-5-9
居住地:
投稿: 151
Re: JUDE APIを用いたユースケース図の情報取得
もっとシンプルに取得できる方法がありましたので
紹介しておきます。


    protected INamedElement getElement(INamedElement[] elements, String elementName) {
        for (int i = 0; i < elements.length; i++) {
            if (elements[i].getName().equals(elementName)) {
                return elements[i];
            }
        }
        return null;
    }
    
    public void test01() {
    	showInfo((IUseCase)getElement(project.getOwnedElements(), "ユースケースA"));
    	showInfo((IUseCase)getElement(project.getOwnedElements(), "ユースケースB"));
    }
    
    private void showInfo(IUseCase uc) {
        System.out.println("IUseCase=" + uc.getName());
        
        IAttribute[] iAttribute = uc.getAttributes();
        for (int i = 0; i < iAttribute.length; i++) {
        	System.out.println("IUseCase.getAttributes()=" + iAttribute[i].getName());
        	System.out.println("IAttribute.getType()=" + iAttribute[i].getType().getName());
		}
    }


結果

IUseCase=ユースケースA
IUseCase.getAttributes()=ユースケースB
IAttribute.getType()=ユースケースB
IUseCase=ユースケースB
IUseCase.getAttributes()=ユースケースA
IAttribute.getType()=ユースケースA
okamura
投稿日時: 2009-6-22 18:30
開発者
登録日: 2006-5-2
居住地:
投稿: 157
Re: JUDE APIを用いたユースケース図の情報取得
こんにちは補足させていただきます。
a[i].getName() とした場合、関連端の名前が取得されます。
関連のつながっている先を取得する場合は、a[i].getType() をご利用ください。

このひとつ前の投稿では、AssociationからgetMemberEnds()したりせずに、getAttributes()で得られたものから、getType()することでも目的のデータが取得できます、ということをお伝えしました。
SuperTurbo
投稿日時: 2009-6-28 1:07
新米
登録日: 2009-6-14
居住地:
投稿: 5
Re: JUDE APIを用いたユースケース図の情報取得
Kotaさん、こんにちは!
お返事をありがとうございます。

さっそく、同じユースケースを描いてやってみました。
(私の場合、関連の関連端名を入力していませんでした…)
結果、同じ実行結果が得られ、また、色々と気づきもありました。
ありがとうございます。

ところで、同じ要領で、ユースケース名を表示することは可能なのでしょうか?
ユースケースのユースケースAから属性(IAttribute)を得て、色々とひも解いて、ユースケースのユースケースB(IUseCase)を得るといった…。

もしよろしければ、ご教授のほどお願いいたします。
SuperTurbo
投稿日時: 2009-6-28 1:10
新米
登録日: 2009-6-14
居住地:
投稿: 5
Re: JUDE APIを用いたユースケース図の情報取得
okamuraさん、こんにちわ。
お返事、ありがとうございます。

表示することができなかった理由がわかりました。
ユースケース図の関連端名に何も入力していなかった…。
お恥ずかしい
ただ、色々と気づきもあり、良い勉強になりました。
ありがとうございます。
Kota
投稿日時: 2009-7-3 9:36
開発者
登録日: 2006-5-9
居住地:
投稿: 151
Re: JUDE APIを用いたユースケース図の情報取得
引用:
ところで、同じ要領で、ユースケース名を表示することは可能なのでしょうか?


この件については解決されましたでしょうか?
5番目の投稿の
iAttribute[i].getType()でユースケース(IUseCase)が取得できます。
それからgetName()するだけです。

IAttribute.getType()
http://jude.change-vision.com/javadoc/jude-api/5_5/api/ja/doc/javadoc/com/change_vision/jude/api/inf/model/IAttribute.html#getType()

IUseCase
http://jude.change-vision.com/javadoc/jude-api/5_5/api/ja/doc/javadoc/com/change_vision/jude/api/inf/model/IUseCase.html
SuperTurbo
投稿日時: 2009-7-16 0:46
新米
登録日: 2009-6-14
居住地:
投稿: 5
Re: JUDE APIを用いたユースケース図の情報取得
Kotaさん、こんばんは。
おっしゃる通り、うまく取得することができました
ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を