# astah* API 利用ガイド

## 【モデルの作成/削除】

各インターフェース、メソッドの詳細についてはastah* APIのJavaDocをご覧ください。
astah* APIのモデル作成/編集/削除機能は、astah* UML, professionalでサポートしています。

#### 【トランザクション操作】

モデルを作成/削除する場合、トランザクション操作が必要です。
トランザクション操作(モデル/図/プレゼンテーションの作成・編集・削除時)をご覧ください。

#### 【クラス図に関連するモデルの作成】

BasicModelEditorのcreateClassメソッドなどを用いて、クラス図のクラスなどのモデルを作成します。

#### 【ユースケース図に関連するモデルの作成】

UseCaseModelEditorのcreateUseCaseメソッドなどを用いて、ユースケース図のユースケースなどのモデルを作成します。

#### 【ステートマシン図に関連するモデルの作成】

StateMachineDiagramEditorのcreateStateメソッドなどを用いて、ステートマシン図の状態などのモデルを作成します。

#### 【アクティビティ図に関連するモデルの作成】

ActivityDiagramEditorのcreateActionメソッドなどを用いて、アクティビティ図のアクションなどのモデルを作成します。

#### 【シーケンス図に関連するモデルの作成】

SequenceDiagramEditorのcreateLifelineメソッドなどを用いて、シーケンス図のライフラインなどのモデルを作成します。

#### 【合成構造図に関連するモデルの作成】

CompositeStructureModelEditorのcreateClassメソッドなどを用いて、合成構造図のクラスなどのモデルを作成します。

#### 【ER図に関連するモデルの作成】(professionalのみ)

ERModelEditorのcreateEREntityメソッドなどを用いて、ER図のERエンティティなどのモデルを作成します。

#### 【マインドマップに関連するモデルの作成】(UML、professionalのみ)

MindmapEditorのcreateTopicメソッドなどを用いて、マインドマップのトピックなどのモデルを作成/移動します。

#### 【要求図に関連するモデルの作成】(professionalのみ)

BasicModelEditorのcreateRequirementメソッドなどを用いて、要求図の要求などのモデルを作成します。

#### 【クラス図に関連するモデルの作成例】

パッケージ1つと配下のクラス2つ、そして、その間の関連を作成します。

    public class APIForEditingModelsSample {

        public static void main(String[] args) {

            try {
                System.out.println("Creating new project...");

                // プロジェクトを作成して、起点となるモデルを取得
                ProjectAccessor prjAccessor = AstahAPI.getAstahAPI().getProjectAccessor();
                prjAccessor.create("./SampleModel.asta");
                IModel project = prjAccessor.getProject();

                System.out.println("Creating new elements in the project...");

                // クラスなどのモデル要素を作成または編集する場合、まとまり単位としてトランザクション操作が必要
                TransactionManager.beginTransaction();

                // クラス関連のモデル要素を作成するエディタを取得
                BasicModelEditor basicModelEditor = ModelEditorFactory.getBasicModelEditor();

                // パッケージを作成
                IPackage packageA = basicModelEditor.createPackage(project, "PackageA");

                // 指定のパッケージにクラスを作成
                IClass classA = basicModelEditor.createClass(packageA, "ClassA");
                // クラスの定義を追加
                classA.setDefinition("Definition of ClassA");
                // クラスに属性を追加
                basicModelEditor.createAttribute(classA, "attribute0", "int");
                // クラスに操作を追加
                basicModelEditor.createOperation(classA, "operation0", "void");

                // 指定のパッケージにクラスを作成
                IClass classB = basicModelEditor.createClass(packageA, "ClassB");

                // クラス間の関連を作成
                basicModelEditor.createAssociation(classA, classB, "association name",
                        "classA end", "classB end");

                // トランザクションの終了
                TransactionManager.endTransaction();

                // プロジェクトを保存
                prjAccessor.save();

                // プロジェクトを閉じる
                prjAccessor.close();

                System.out.println("Finished");

            } catch (LicenseNotFoundException e) {
                e.printStackTrace();
            } catch (ProjectNotFoundException e) {
                e.printStackTrace();
            } catch (ProjectLockedException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (InvalidEditingException e) {
                // トランザクションの放棄
                TransactionManager.abortTransaction();
                // 不正編集の例外メッセージを取得
                System.err.println(e.getMessage());
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Throwable e) {
                e.printStackTrace();
            }
        }
    }

HOME