モデル / プレゼンテーションの編集

編集を行う場合は必ずトランザクション処理が必要となります。
なお、下記条件を満たしていない場合は例外が発生します。

  • プロジェクトアクセサにプロジェクトを登録していること
  • 編集APIが対応しているエディションであること
  • 対象が編集可能であること

トランザクション処理

トランザクションはastah*のプロジェクトに対して行われる更新処理の単位です。

beginTransactionメソッドがトランザクションの開始、endTransactionメソッドがトランザクションを確定させる処理です。 beginTransactionメソッドからendTransactionメソッドまでが1つの更新処理となり、undo/redoした場合はこの処理単位で行われます。 abortTransactionメソッドがトランザクションを取消す処理です。トランザクションを取消した場合、プロジェクトはトランザクション開始前の状態に戻ります。 例外処理で必ずabortTransactionメソッドを呼ぶようにしましょう。

ITransactionManager transactionManager = projectAccessor.getTransactionManager();
try {

    transactionManager.beginTransaction();

    // 編集処理(省略)

    transactionManager.endTransaction();
    
} catch (BadTransactionException | Exception e) {

    transactionManager.abortTransaction();
    
    // 処理(省略)

}

モデルの編集

モデルエディタ

モデルの編集はモデルエディタ(ModelEditor)を使用して行います。 モデルとプレゼンテーションが1:nで対応するモデルは各種モデルエディタから作成できます。

モデルエディタの取得

下記以外に、プレゼンテーションの作成と同時に時に一緒に作成されるモデルがあります。これについては図・プレゼンテーションの編集をご覧ください。

モデルエディタの種類 作成可能要素
BasicModelEditor クラス、成果物、関連、関連クラス、属性、コンポーネント、制限、コピー、依存、導出、汎化、インタフェース、モデル、ノード、操作、パッケージ、パラメタ、ポート、限定子、実現、洗練、要求、満足、サブシステム、タグ付き値、テンプレートバインディング、テンプレートパラメタ、テストケース、トレース、使用依存、検証
UseCaseModelEditor アクター、ユースケース、拡張点、拡張、包含
CompositeStructureModelEditor コネクタ、実現、使用
ERModelEditor ERモデル、ERエンティティ、ドメイン、属性、データ型、インデックス、依存型リレーションシップ、多対多型リレーションシップ、非依存型リレーションシップ、サプタイプ

パッケージにクラスを作成する

// 要トランザクション処理
public IClass createClass(ProjectAccessor projectAccessor, IModel parent, String name)
        throws InvalidEditingException {
    IModelEditorFactory modelEditorFactory = projectAccessor.getModelEditorFactory();
    BasicModelEditor basicModelEditor = modelEditorFactory.getBasicModelEditor();
    return basicModelEditor.createClass(parent, name);
}

タグ付き値を作成する

// 要トランザクション処理
public void createTaggedValue(BasicModelEditor modelEditor, IElement element, String tag, String value)
        throws InvalidEditingException {
    modelEditor.createTaggedValue(element, tag, value);
}

モデルを削除する

// 要トランザクション処理
public void deleteElement(BasicModelEditor basicModelEditor, IElement element)
        throws InvalidEditingException {
    basicModelEditor.delete(element);
}

クラスに定義を設定する

// 要トランザクション処理
public void setDefinition(IClass clazz, String definition)
        throws InvalidEditingException {
    clazz.setDefinition(definition);
}

モデルにステレオタイプを追加する

// 要トランザクション処理
public void addStereotype(IElement element, String stereotype) throws InvalidEditingException {
    element.addStereotype(stereotype);
}

図・プレゼンテーションの編集

ダイアグラムエディタ

図およびプレゼンテーションの作成や削除はダイアグラムエディタ(DiagramEditor)を使用して行います。

DiagramEditor は基本的に事前に図を設定することが必要です。
図を作成すると DiagramEditor にその図が自動的に設定されますが、既存の図を編集する場合は DiagramEditor#setDiagram(IDiagram diagram) を用いて図を設定します。

ダイアグラムエディタの取得

ダイアグラムエディタの種類 編集可能図
ClassDiagramEditor クラス図
UseCaseDiagramEditor ユースケース図
StateMachineDiagramEditor ステートマシン図
ActivityDiagramEditor アクティビティ図、フローチャート
SequenceDiagramEditor シーケンス図
CompositeStructureDiagramEditor 合成構造図
RequirementDiagramEditor 要求図
ERDiagramEditor ER図
MindmapEditor マインドマップ

クラス図を作成する

// 要トランザクション処理
public IClassDiagram createClassDiagram(ClassDiagramEditor editor, INamedElement owner,
        String name) throws InvalidEditingException {
    return editor.createClassDiagram(owner, name);
}

クラスプレゼンテーションを作成する

// 要トランザクション処理
public INodePresentation createClassPresentation(ClassDiagramEditor editor, IClass model,
        Point2D location) throws InvalidEditingException {
    return createNodePresentation(editor, model, location);
}

// 要トランザクション処理
public INodePresentation createNodePresentation(ClassDiagramEditor editor, IElement model,
        Point2D location) throws InvalidEditingException {
    return editor.createNodePresentation(model, location);
}

アクティビティ図のアクションを作成する

アクティビティ図のアクション等、モデルとプレゼンテーションの対応が1:1となる場合、プレゼンテーションを作成するとモデルも一緒に作成されます。

// 要トランザクション処理
public INodePresentation createActionPresentation(ActivityDiagramEditor editor, String name,
        Point2D location) throws InvalidEditingException {
    return editor.createAction(name, location);
}

プレゼンテーションを削除する

// 要トランザクション処理
public void deletePresentation(DiagramEditor editor, IPresentation presentation)
        throws InvalidEditingException {
    editor.deletePresentation(presentation);
}

プレゼンテーション情報を変更する

プレゼンテーション情報(背景色等)の変更はPresentationPropertyConstantsPresentationPropertyUtilを使用します。
モデルとプレゼンテーションの対応関係については対応プレゼンテーション一覧をご覧ください。

プレゼンテーション群の操作

プレゼンテーションの背景色を変更する

// 要トランザクション処理
public void changeColor(IPresentation presentation, final String color)
        throws InvalidEditingException {
    presentation.setProperty(Key.FILL_COLOR, color);
}

プレゼンテーションの位置を変更する

// 要トランザクション処理
public void setLocation(INodePresentation presentation, Point2D location) {
        throws InvalidEditingException {
        presentation.setLocation(location);
}