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

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

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

トランザクション処理

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

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

ITransactionManager transactionManager = projectAccessor.getTransactionManager();
try {

    transactionManager.beginTransaction();

    // 編集処理(省略)

    transactionManager.endTransaction();

} catch (BadTransactionException e) {

    transactionManager.abortTransaction();

    // 処理(省略)

}

モデルの編集

モデルエディタ

モデルの編集はモデルエディタ(ModelEditor)を使用して行います。 ファセット(Facet)毎にモデルエディタ(ModelEditor)があります。例えば、SysML関連モデルの作成はSysmlModelEditorから作成できます。 モデルとプレゼンテーションが1:nで対応するモデルは各種モデルエディタから作成できます。

モデルエディタの取得

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

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

モデルにパッケージを作成する

// 要トランザクション処理
public IPackage createPackage(ProjectAccessor projectAccessor, IModel parent, String name)
        throws InvalidEditingException {
    IModelEditorFactory modelEditorFactory = projectAccessor.getModelEditorFactory();
    SysmlModelEditor sysmlModelEditor = modelEditorFactory.getSysmlModelEditor();
    return sysmlModelEditor.createPackage(parent, name);
}

タグ付き値を作成する

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

モデルを削除する

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

ブロックに定義を設定する

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

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

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

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

ダイアグラムエディタ

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

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

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

ダイアグラムエディタの例 編集可能図
BlockDefinitionDiagramEditor ブロック定義図
RequirementDiagramEditor 要求図

図を作成する

SysMLのブロック定義図の作成を例にします。

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

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

SysMLのブロック定義図にブロックプレゼンテーションの作成を例にします。

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

モデルとの対応が1:1となるプレゼンテーションを作成する

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

// 要トランザクション処理
public INodePresentation createStatePresentation(StateMachineDiagramEditor editor, String name,
        INodePresentation parent, Point2D location) throws InvalidEditingException {
    return editor.createState(name, parent, 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);
}