// プロジェクトを開いて、プロジェクトモデルを取得する
ProjectAccessor prjAccessor = AstahAPI.getAstahAPI().getProjectAccessor();
prjAccessor.open(inputFile);
IModel iModel = prjAccessor.getProject();
|
/**
* 指定パッケージ配下のパッケージを、再帰的に全て取得する。
*
* @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;
}
|
/**
* 指定パッケージ配下のクラスを取得する。
*
* @param iPackage
* 指定パッケージ
* @return クラス一覧を格納したリスト
*/
private List getIClasses(IPackage iPackage) {
List iClasses = new ArrayList();
INamedElement[] iNamedElements = iPackage.getOwnedElements();
for (int i = 0; i < iNamedElements.length; i++) {
INamedElement iNamedElement = iNamedElements[i];
if (iNamedElement instanceof IClass) {
iClasses.add(iNamedElement);
}
}
return iClasses;
}
|
/**
* クラスの名前をフルパスで取得する
*
* @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();
}
|
(例)アクティビティ図の取得
public List getActivityDiagram(IPackage iPackage) {
List activityDiagrams = new ArrayList();
IDiagram[] dgms = iPackage.getDiagrams();
for (int i = 0; i < dgms.length; i++) {
IDiagram dgm = dgms[i];
if (dgm instanceof IActivityDiagram
&& !((IActivityDiagram )dgm).isFlowChart()) {
activityDiagrams.add(dgm);
}
}
return activityDiagrams;
}
|
(例)フローチャートの取得
public List getFlowCharts(IPackage iPackage) {
List flowCharts = new ArrayList();
IDiagram[] dgms = iPackage.getDiagrams();
for (int i = 0; i < dgms.length; i++) {
IDiagram dgm = dgms[i];
if (dgm instanceof IActivityDiagram
&& ((IActivityDiagram )dgm).isFlowChart()) {
flowCharts.add(dgm);
}
}
return flowCharts ;
}
|
(例)別名1の取得
private static final String KEY_ALIAS1 = "jude.multi_language.alias1";
private String geAlias1(INamedElement element) {
ITaggedValue[] tvs = element.getTaggedValues();
for (int i = 0; i < tvs.length; i++) {
ITaggedValue tv = tvs[i];
if (KEY_ALIAS1.equals(tv.getKey())) {
return tv.getValue();
}
}
return null;
}
|
(例)ハイパーリンクの取得
private void showHyperlinkStrings(INamedElement element) {
IHyperlink[] links = element.getHyperlinks();
for (int i = 0; i < links.length; i++) {
IHyperlink link = links[i];
if(link.isFile()) {
System.out.println(link.getName());
System.out.println(link.getPath());
System.out.println(link.getComment());
} else if(link.isModel()) {
System.out.println(link.getName());
System.out.println(link.getPath());
System.out.println(link.getComment());
} else if(link.isURL()) {
System.out.println(link.getName());
System.out.println(link.getPath());
System.out.println(link.getComment());
}
}
}
|
以下の例のように、ハイパーリンクの種類がモデルになる場合、nameがモデルのid、IElementImpのgetId()によって取得することも可能です。
(例)ハイパーリンク文字列
type=file,name=astah_com.log,path=C:/Documents and Settings,comment= Target is a file type=url,name=http://www.change-vision.com,path=http://,comment= Target is a web page type=model,name=9a1411-1112fec29a5-0804d01aa6c5fb9fe2aab956b4ca593a,path=,comment= Target is a astah* model |
(例)ループ開始要素の取得
private static final String LOOP_START_ELEMENT = "loop_start";
public List getLoopStartElements(IActivityDiagram iActivityDiagram) {
List loopStartElements = new ArrayList();
IActivity iActivity = iActivityDiagram.getActivity();
IActivityNode[] activityNodes = iActivity.getActivityNodes();
for (int i = 0; i < activityNodes.length; i++) {
IActivityNode node = activityNodes[i];
String[] stereotypes = node.getStereotypes();
for (int j = 0; j < stereotypes.length; j++) {
if (LOOP_START_ELEMENT.equals(stereotypes[j])) {
loopStartElements.add(node);
break;
}
}
}
return loopStartElements;
}
|
(例)findElements(Class elementKind, String name)の使用
ProjectAccessor prjAccessor = AstahAPI.getAstahAPI().getProjectAccessor();
prjAccessor.open("C:\\test.asta");
//classDgm0という名前のクラス図を検索
INamedElement[] iNamedElements = prjAccessor.findElements(IClassDiagram.class, "classDgm0");
//Aという名前のクラスを検索
iNamedElements = prjAccessor.findElements(IClass.class, "A");
//Bという名前の属性を検索
iNamedElements = prjAccessor.findElements(IAttribute.class, "B");
//Cという名前の操作を検索
iNamedElements = prjAccessor.findElements(IOperation.class, "C");
//Dという名前の関連を検索
iNamedElements = prjAccessor.findElements(IAssociation.class, "D");
//Eという名前のユースケースを検索
iNamedElements = prjAccessor.findElements(IUseCase.class, "E");
//Fという名前の包含を検索
iNamedElements = prjAccessor.findElements(IInclude.class, "F");
//Gという名前の状態を検索
iNamedElements = prjAccessor.findElements(IState.class, "G");
//Hという名前の擬似状態を検索
iNamedElements = prjAccessor.findElements(IPseudostate.class, "H");
//Iという名前の遷移を検索
iNamedElements = prjAccessor.findElements(ITransition.class, "I");
//Jという名前のパーティションを検索
iNamedElements = prjAccessor.findElements(IPartition.class, "J");
//Kという名前のアクションを検索
iNamedElements = prjAccessor.findElements(IAction.class, "K");
//Lという名前のオブジェクトノードを検索
iNamedElements = prjAccessor.findElements(IObjectNode.class, "L");
//Mという名前のフローを検索
iNamedElements = prjAccessor.findElements(IFlow.class, "M");
//Nという名前のライフラインを検索
iNamedElements = prjAccessor.findElements(ILifeline.class, "N");
//Oという名前のメッセージを検索
iNamedElements = prjAccessor.findElements(IMessage.class, "O");
//Pという名前の外部エンティティを検索
iNamedElements = prjAccessor.findElements(IExternalEntity.class, "P");
//Qという名前のデータストアを検索
iNamedElements = prjAccessor.findElements(IDataStore.class, "Q");
//Rという名前のERモデルを検索
iNamedElements = prjAccessor.findElements(IERModel.class, "R");
//Sという名前のERドメインを検索
iNamedElements = prjAccessor.findElements(IERDomain.class, "S");
//USER_DEFINED_DATATYPE1という名前のERデータタイプを検索
iNamedElements = prjAccessor.findElements(IERDatatype.class, "USER_DEFINED_DATATYPE1");
//Tという名前のERエンティティを検索
iNamedElements = prjAccessor.findElements(IEREntity.class, "T");
//Uという名前のER属性を検索
iNamedElements = prjAccessor.findElements(IERAttribute.class, "U");
//Vという名前のERリレーションシップを検索
iNamedElements = prjAccessor.findElements(IERRelationship.class, "V");
//Wという名前のERサブタイプリレーションシップを検索
iNamedElements = prjAccessor.findElements(IERSubtypeRelationship.class, "W");
//Xという名前のERインデックスを検索
iNamedElements = prjAccessor.findElements(IERIndex.class, "X");
prjAccessor.close();
|
public abstract INamedElement[] findElements(Class elementKind) throws ProjectNotFoundException;
要素の種類で要素を検索します。ITopicPresentationなどのプレゼンテーションは検索対象となりません。
(例)findElements(Class elementKind)の使用 classDgm0という名前のクラス図を検索
ProjectAccessor prjAccessor = AstahAPI.getAstahAPI().getProjectAccessor();
prjAccessor.open("C:\\test.asta");
//クラス図を検索
INamedElement[] iNamedElements = prjAccessor.findElements(IClassDiagram.class);
prjAccessor.close();
|
public INamedElement[] findElements(ModelFinder picker) throws ProjectNotFoundException;
ModelFinderで要素を検索します。
(例)findElements(ModelFinder picker)の使用
//クラス図を抽出するModelFinderインターフェースを実装したクラス
class ClassDiagramPicker implements ModelFinder {
public boolean isTarget(INamedElement namedElement) {
if (namedElement instanceof IClassDiagram) {
return true;
}
return false;
}
}
|
ProjectAccessor prjAccessor = AstahAPI.getAstahAPI().getProjectAccessor();
prjAccessor.open("C:\\test.asta");
//classDgm0という名前のクラス図を検索
INamedElement[] iNamedElements = prjAccessor.findElements(new ClassDiagramPicker());
prjAccessor.close();
|