// プロジェクトを開いて、プロジェクトモデルを取得する 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(); |