astah* APIを用いることで、astah* のモデル要素を取得して、アプリケーションソフトウェア上で利用できます。
- 使い方の例1 - プロジェクトを表す(起点となる)モデルの取得
- 使い方の例2 - パッケージ配下のパッケージを、再帰的に全て取得
- 使い方の例3 - クラスのフルパス名の取得
例1) プロジェクトを表す(起点となる)モデルの取得
astahプロジェクトファイルの全てのモデル情報は、プロジェクトを表すモデル(以下、プロジェクトモデル)の下にツリー状に存在します。 まず、ProjectAccessorオブジェクトを取得して、astahプロジェクトファイルを開き、プロジェクトモデル(IModelクラスのオブジェクト)を取得します。
ClassDefinitionBuilder.java
// プロジェクトを開いて、プロジェクトモデルを取得する
ProjectAccessor prjAccessor = ProjectAccessorFactory.getProjectAccessor();
prjAccessor.open(inputFile);
IModel iModel = prjAccessor.getProject();
例2) パッケージ配下のパッケージを、再帰的に全て取得
ここでは、パッケージ(IPackage)を継承するサブシステムやモデルも、パッケージに含めます。 パッケージ(IPackage)の直下にある全てのモデル要素を、メソッドgetOwnedElements()の利用により 配列として取得し、その中からパッケージだけを抽出します。また、取得したパッケージに対しても 同様の処理を行い、再帰的に全てのパッケージを取得します。
ClassDefinitionBuilder.java
/**
* 指定パッケージ配下のパッケージを、再帰的に全て取得する。
*
* @param iPackage 指定パッケージ
* @param iPackages パッケージ一覧を格納するリスト
* @return パッケージ一覧を格納したリスト
*/
private List getPackages(IPackage iPackage, List iPackages) {
INamedElement[] iNamedElements = iPackage.getOwnedElements();
for (int i = 0; i < iNamedElements.length; i++) {
INamedElement iNamedElement = iNamedElements[i];>
if (iNamedElement instanceof IPackage) {
iPackages.add(iNamedElement);
getPackages((IPackage)iNamedElement, iPackages);
}
}
return iPackages;
}
例3) クラスのフルパス名の取得
クラス(IClass)を含め INamedElementのサブクラスの場合、メソッドgetName()を用いることで名前を取得できます。 さらに、自分を所有するモデル要素を所得するメソッド getOwner()を組み合わせることによって、プロジェクトモデルからのフルパス名を取得できます。
ClassDefinitionBuilder.java
/**
* クラスの名前をフルパスで取得する
*
* @param iClass
* クラス
* @return クラス名(フルパス)
*/
private String getFullName(IClass iClass) {
StringBuffer sb = new StringBuffer();
IElement owner = iClass.getOwner();
while (owner != null && owner instanceof INamedElement && owner.getOwner() != null) {
sb.insert(0, ((INamedElement) owner).getName() + "::");
owner = owner.getOwner();
}
sb.append(iClass.getName());
return sb.toString();
}


