ログイン
検索
メインメニュー
フォーラム一覧   -   トピック一覧
   astah*の使い方
     タグについて(タグ付値)
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
ゲスト
投稿日時: 2007-9-9 14:40
タグについて(タグ付値)
ゲストの「syuuhei」さんからの投稿です。
---

クラス図で、操作の中にタグがあります。その中の定義をAPIを利用して取得することは可能でしょうか。お答えいただけると幸いです。よろしく、お願いします。
ゲスト
投稿日時: 2007-9-10 16:50
Re: タグについて(タグ付値)
ゲストの「zhouyi」さんからの投稿です。
---

こんにちは、zhouyiです。
ご質問ありがとうございます。

[Q]
クラス図で、操作の中にタグがあります。
その中の定義をAPIを利用して取得することは可能でしょうか。
[A]
はい、APIで取得することができます。

IElementにgetTaggedValues()があります。
IOperationはIElementの子でgetTaggedValuesを継承します。

各APIクラスの関係および各メソッドの説明において、
User API Guideを参照して頂ければと思います。

----------- サンプルソース (s) --------------------------
//Judeのタグ付き値タブで入力したキー
private static final String KEY_OPERATION_COMMENT = "operation.comment";

private String getOperationComment(IOperation opr) {
ITaggedValue[] tvs = opr.getTaggedValues();
for (int i = 0; i < tvs.length; i++) {
ITaggedValue tv = tvs[i];
if (KEY_OPERATION_COMMENT.equals(tv.getKey())) {
return tv.getValue();
}
}
return null;
}
----------- サンプルソース (e) --------------------------
以上、よろしくお願い致します。


zhouyi
投稿日時: 2007-9-10 17:08
開発者
登録日: 2006-5-9
居住地: 福井
投稿: 48
Re: タグについて(タグ付値)
こんにちは、JUDE開発者のzhouyiです。
ゲストの「zhouyi」さん と同一人物です。

ログインせずに投稿したのでゲストになりました。
本当に申し訳ございませんでした。

今後もよろしくお願い致します。
ゲスト
投稿日時: 2007-9-11 16:28
Re: タグについて(タグ付値)
ゲストの「syuuhei」さんからの投稿です。
---

早々のご返信ありがとうございます。
javaを使うこと事態が初めてで、基礎的かつ、要領を得ない質問になっているかもしれませんが、お答えいただけると幸いです。

サンプルソースコードでは、引数の型がIOperationになっています。
当方の都合により、getAttributes()を使いたいと思っています。
しかし、getAttributes()は、IOperationが未定義となっています。
引数に使っている型は、IClassなのですが、IClassをキャストして、
IOperationにして使用した場合に、何か不都合が起きますか。
試してみたところ、不都合が起きているように感じます。
また、これまたかなり基礎的な質問になると思いますが、
サンプルソースコードで返している、tv.getValue();をSystem.out.printlnで出力するには、どのようにしたら良いでしょうか。
zhouyi
投稿日時: 2007-9-11 20:10
開発者
登録日: 2006-5-9
居住地: 福井
投稿: 48
Re: タグについて(タグ付値)
こんばんは、zhouyiです。

>>サンプルソースコードでは、引数の型がIOperationになっています。
>>当方の都合により、getAttributes()を使いたいと思っています。

あーーーーーーーー
属性
IAttribute --- クラスの属性のAPI
IOperation --- クラスの操作のAPI

したがって、サンプルソースコードを以下のように修正いたします。
----------- サンプルソース (s) --------------------------
//Judeのタグ付き値タブで入力したキー
private static final String KEY_ATTRIBUTE_COMMENT = "attribute.comment";

private String getOperationComment(IAttribute attr) {
ITaggedValue[] tvs = attr.getTaggedValues();
for (int i = 0; i < tvs.length; i++) {
ITaggedValue tv = tvs[i];
if (KEY_ATTRIBUTE_COMMENT .equals(tv.getKey())) {
return tv.getValue();
}
}
return null;
}
----------- サンプルソース (e) --------------------------

補足ですが、
IElementは、IClassやIAttribute、IOperationなどの親です。
IAttributeなどのクラスは、IElementのgetTaggedValues()を
継承しています。
サンプルソースを以下のように修正すれば、
すべてのクラスのタグ付き値を取得できます。

----------- サンプルソース (s) --------------------------
//Judeのタグ付き値タブで入力したキー
private static final String KEY_COMMENT = "comment";

private String getComment(IElement element) {
ITaggedValue[] tvs = element.getTaggedValues();
for (int i = 0; i < tvs.length; i++) {
ITaggedValue tv = tvs[i];
if (KEY_COMMENT.equals(tv.getKey())) {
return tv.getValue();
}
}
return null;
}
----------- サンプルソース (e) --------------------------

>>サンプルソースコードで返している、
>>tv.getValue();をSystem.out.printlnで出力するには、
>>どのようにしたら良いでしょうか。

ITaggedValueのgetKey()とgetValue()ですが、いずれもStringを返してくれます。
System.out.println用にサンプルソースを改造いたします。

----------- サンプルソース (s) --------------------------
//Judeのタグ付き値タブで入力したキー
private static final String KEY_COMMENT = "comment";

private void showComment(IElement element) {
ITaggedValue[] tvs = element.getTaggedValues();
for (int i = 0; i < tvs.length; i++) {
ITaggedValue tv = tvs[i];
if (KEY_COMMENT.equals(tv.getKey())) {
System.out.println("Comment is " + tv.getValue());
}
}
}
----------- サンプルソース (e) --------------------------

以上、よろしくお願い致します。

ゲスト
投稿日時: 2007-9-12 1:14
Re: タグについて(タグ付値)
ゲストの「syuuhei」さんからの投稿です。
---

何から何まで丁寧に解説いただき、ありがとうございます。
早速試してみたいと思います。
ゲスト
投稿日時: 2007-9-12 1:16
Re: タグについて(タグ付値)
ゲストの「syuuhei」さんからの投稿です。
---

何から何まで丁寧に解説いただき、ありがとうございます。
早速試してみたいと思います。
ゲスト
投稿日時: 2007-9-13 15:23
Re: タグについて(タグ付値)
ゲストの「syuuhei」さんからの投稿です。
---

度々すいません。
サンプルで提供していただいたコードに持たせる引数ですが、
下記コードによって取得したものを持たせるのではいけないのでしょうか?

ProjectAccessor prjAccessor =ProjectAccessorFactory.getProjectAccessor();
prjAccessor.open("APItest.jude");
IModel model = prjAccessor.getProject();
INamedElement[] elements = model.getOwnedElements();

IClass c = (IClass) elements[i];

showComment(c);
(途中の処理は省略しております。)

tvs.lengthが0になっているようで、for文を通ってないように思われます。
どうしても上手くいきません。
基礎的なことだと分かっているのですが。
よろしくお願いします。
zhouyi
投稿日時: 2007-9-13 17:27
開発者
登録日: 2006-5-9
居住地: 福井
投稿: 48
Re: タグについて(タグ付値)
こんにちは、zhouyiです。
コーディング御疲れ様です。

>>サンプルで提供していただいたコードに持たせる引数ですが、
>>下記コードによって取得したものを持たせるのではいけないの
>>でしょうか?

IClassを取得しましたよね?
IElementの子ですから、showComment()に持たせることができます。

>>tvs.lengthが0になっているようで、for文を通ってないように思われます。
>>どうしても上手くいきません。

対象となるクラスにタグ付き値を設定していないのでは?
JUDEでモデルを開いて、クラスのタグ付き値Tabで確認して頂けないでしょうか?

以下のJUnitで実験した結果、タグ付き値の表示ができました。

------------------- 実験コード (s) -------------------
public class ITaggedValueTest extends ITestCase {

public static Test suite() {
return suite("testModel/judeAPITest/IElementTest.jude", ITaggedValueTest.class);
}

public void testShowComment() {
INamedElement[] elements = project.getOwnedElements();

for(int i = 0; i < elements.length; i++) {
if(elements[i] instanceof IClass) {
IClass c = (IClass) elements[i];
showComment(c);
}
}
}

private static final String KEY_COMMENT = "comment";

private void showComment(IElement element) {
ITaggedValue[] tvs = element.getTaggedValues();
for (int i = 0; i < tvs.length; i++) {
ITaggedValue tv = tvs[i];
if (KEY_COMMENT.equals(tv.getKey())) {
System.out.println("Comment is " + tv.getValue());
}
}
}

}
------------------- 実験コード (e) -------------------

以上、よろしくお願い致します。




ゲスト
投稿日時: 2007-9-13 17:55
Re: タグについて(タグ付値)
ゲストの「syuuhei」さんからの投稿です。
---

度々の丁寧なご返信ありがとうございます。
以下、確認させてください。
クラス図の、操作をクリックすると、タグが表示されます。
その中のベースというタグの中の定義に”test message”と書いています。クラス名や、属性のタグのベースにある定義にも同様の文字を書いています。タグの中の、staticなどをtrueなどにしないといけないなどの設定があるのでしょうか?ご確認のほど、よろしくお願いします。
(1) 2 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を