サンプル

astah*に同梱しているサンプルアプリケーションの利用方法や、その他のサンプルを掲載します。

サンプルアプリケーション

astah*をインストールすると、astah*のインストールフォルダ\api\sampleにサンプルアプリケーションが保存されています。

プログラム名 機能
simpleRead パッケージ、クラス情報の取得
simpleEdit パッケージ、クラス、関連モデルの作成
simpleDgmRead 図、プレゼンテーション情報の取得
simpleDgmEdit パッケージやクラス、関連のモデル作成 及びクラス図の作成
csvexporter モデル情報(クラス、属性、操作、定義、汎化、実現)を取得して、CSV形式で出力

サンプルの構成

サンプルアプリケーションは基本的に下記のように構成されています。

ファイルパス 詳細
*.java コンパイル前のjavaソースコードです(複数個ある場合もあります)
compile.bat windowsでのコンパイル時に実行します
compile.sh windows以外でのコンパイル時に実行します
run.bat windowsでの実行に使います
run.sh windows以外での実行に使います

コンパイル・実行方法

環境に合わせ、バッチファイルまたはシェルの記述を適宜変更して実行します。 利用するシステムのコマンドプロンプト、もしくはJavaのIDEツール(統合開発環境)などでコンパイル・実行できます。パスの通し方はバッチファイルまたはシェルを参考にしてください。

csvexporterの実行例

C:\Users\○○>cd C:\Program Files\astah-professional\api\sample\csvexporter

C:\Program Files\astah-professional\api\sample\csvexporter>compile.bat

C:\Program Files\astah-professional\api\sample\csvexporter>run.bat ../../../Sample.asta Sample.csv
Done
続行するには何かキーを押してください . . .

C:\Program Files\astah-professional\api\sample\csvexporter>

※ windowsにて標準のパスにインストールしている場合はコマンドプロンプトを管理者権限で起動する必要があります。

スクリプトエディタ用サンプル

astah*には、スクリプト言語を使って、astah*内のモデルを編集、参照できるスクリプトエディタがあります。
サンプルはスクリプトエディタで、すぐに使えるサンプル集をご参照ください。

その他のサンプルコード

本ドキュメントを作成する際に書き下ろしたサンプルコードを記載します。

クラスを作成する

import java.io.File;
import java.io.IOException;

import com.change_vision.jude.api.inf.AstahAPI;
import com.change_vision.jude.api.inf.editor.BasicModelEditor;
import com.change_vision.jude.api.inf.editor.IModelEditorFactory;
import com.change_vision.jude.api.inf.editor.ITransactionManager;
import com.change_vision.jude.api.inf.exception.BadTransactionException;
import com.change_vision.jude.api.inf.exception.InvalidEditingException;
import com.change_vision.jude.api.inf.exception.LicenseNotFoundException;
import com.change_vision.jude.api.inf.exception.NonCompatibleException;
import com.change_vision.jude.api.inf.exception.ProjectLockedException;
import com.change_vision.jude.api.inf.exception.ProjectNotFoundException;
import com.change_vision.jude.api.inf.model.IModel;
import com.change_vision.jude.api.inf.project.ProjectAccessor;

public class CreateClassSample {

    private static final String PROJECT_PATH = "test.asta";
    private static final String CLASS_NAME = "class0";

    public static void main(String[] args) {

        // プロジェクトアクセサの取得
        ProjectAccessor projectAccessor;
        try {
            projectAccessor = AstahAPI.getAstahAPI().getProjectAccessor();
        } catch (ClassNotFoundException e) {
            System.out.println("予期せぬエラーが発生しました");
            return;
        }

        try {

            // プロジェクトアクセサにプロジェクトを指定
            if (new File(PROJECT_PATH).exists()) {
                System.out.println(PROJECT_PATH + " を開きます");
                try {
                    projectAccessor.open(PROJECT_PATH);
                } catch (ClassNotFoundException | LicenseNotFoundException
                        | ProjectNotFoundException | NonCompatibleException | IOException
                        | ProjectLockedException e) {
                    System.out.println(PROJECT_PATH + " を開けませんでした");
                    System.out.println("詳細 : " + e.getLocalizedMessage());
                    return;
                }
            } else {
                System.out.println(PROJECT_PATH + " にプロジェクトを作成します");
                try {
                    projectAccessor.create(PROJECT_PATH);
                } catch (IOException e) {
                    System.out.println(PROJECT_PATH + " にプロジェクトを作成できませんでした");
                    return;
                }
                try {
                    projectAccessor.save();
                } catch (LicenseNotFoundException | ProjectLockedException
                        | ProjectNotFoundException | IOException e) {
                    System.out.println("保存に失敗しました");
                    System.out.println("詳細 : " + e.getLocalizedMessage());
                    return;
                }
            }

            // 編集対象となるモデルの取得
            IModel parent;
            try {
                parent = projectAccessor.getProject();
            } catch (ProjectNotFoundException e) {
                System.out.println("プロジェクトを作成するか開いてください");
                return;
            }

            // 編集
            if ("community".equals(projectAccessor.getAstahEdition())) {
                System.out.println("コミュニティエディションではプロジェクトを編集できません");
                return;
            }
            System.out.println("\"" + CLASS_NAME + "\"クラスを作成します");
            try {
                createClass(projectAccessor, parent, CLASS_NAME);
            } catch (Exception e) {
                System.out.println("\"" + CLASS_NAME + "\"クラスを作成できませんでした");
                System.out.println("詳細 : " + e.getLocalizedMessage());
            }

            // 保存
            if (!projectAccessor.isProjectModified()) {
                return;
            }
            try {
                projectAccessor.save();
            } catch (LicenseNotFoundException | ProjectLockedException | ProjectNotFoundException
                    | IOException e) {
                System.out.println("保存に失敗しました");
                System.out.println("詳細 : " + e.getLocalizedMessage());
                return;
            }
            System.out.println("変更を保存しました");

        } finally {

            // プロジェクトを閉じる
            projectAccessor.close();
            System.out.println("プロジェクトを閉じました");

        }

    }

    static private void createClass(ProjectAccessor projectAccessor, IModel parent, String name) {
        ITransactionManager transactionManager = projectAccessor.getTransactionManager();
        IModelEditorFactory modelEditorFactory = projectAccessor.getModelEditorFactory();
        try {
            BasicModelEditor basicModelEditor = modelEditorFactory.getBasicModelEditor();
            transactionManager.beginTransaction();
            basicModelEditor.createClass(parent, name);
            transactionManager.endTransaction();
        } catch (BadTransactionException | InvalidEditingException e) {
            transactionManager.abortTransaction();
            throw new RuntimeException(e.getLocalizedMessage(), e);
        }
    }

}