モデル / プレゼンテーションの編集
編集を行う場合は必ずトランザクション処理が必要となります。
なお、下記条件を満たしていない場合は例外が発生します。
- プロジェクトアクセサにプロジェクトを登録していること
- 編集APIが対応しているエディションであること
- 対象が編集可能であること
トランザクション処理
トランザクションはastah*のプロジェクトに対して行われる更新処理の単位です。
beginTransaction
メソッドがトランザクションの開始、endTransaction
メソッドがトランザクションを確定させる処理です。 beginTransaction
メソッドからendTransaction
メソッドまでが1つの更新処理となり、undo/redoした場合はこの処理単位で行われます。 abortTransaction
メソッドがトランザクションを取消す処理です。トランザクションを取消した場合、プロジェクトはトランザクション開始前の状態に戻ります。 例外処理で必ずabortTransaction
メソッドを呼ぶようにしましょう。
= projectAccessor.getTransactionManager();
ITransactionManager transactionManager try {
.beginTransaction();
transactionManager
// 編集処理(省略)
.endTransaction();
transactionManager
} catch (BadTransactionException e) {
.abortTransaction();
transactionManager
// 処理(省略)
}
モデルの編集
モデルエディタ
モデルの編集はモデルエディタ(ModelEditor)を使用して行います。 ファセット(Facet)毎にモデルエディタ(ModelEditor)があります。例えば、SysML関連モデルの作成はSysmlModelEditorから作成できます。 モデルとプレゼンテーションが1:nで対応するモデルは各種モデルエディタから作成できます。
下記以外に、プレゼンテーションの作成と同時に時に一緒に作成されるモデルがあります。これについては図・プレゼンテーションの編集をご覧ください。
モデルエディタの種類 | 作成可能要素 |
---|---|
BasicModelEditor | クラス、成果物、関連、関連クラス、属性、コンポーネント、制限、コピー、依存、導出、汎化、インタフェース、モデル、ノード、操作、パッケージ、パラメタ、ポート、限定子、実現、洗練、要求、満足、サブシステム、タグ付き値、テンプレートバインディング、テンプレートパラメタ、テストケース、トレース、使用依存、検証 |
モデルにパッケージを作成する
// 要トランザクション処理
public IPackage createPackage(ProjectAccessor projectAccessor, IModel parent, String name)
throws InvalidEditingException {
= projectAccessor.getModelEditorFactory();
IModelEditorFactory modelEditorFactory = modelEditorFactory.getSysmlModelEditor();
SysmlModelEditor sysmlModelEditor return sysmlModelEditor.createPackage(parent, name);
}
タグ付き値を作成する
// 要トランザクション処理
public void createTaggedValue(SysmlModelEditor sysmlModelEditor, IElement element, String tag, String value)
throws InvalidEditingException {
.createTaggedValue(element, tag, value);
sysmlModelEditor}
モデルを削除する
// 要トランザクション処理
public void deleteElement(SysmlModelEditor sysmlModelEditor, IElement element)
throws InvalidEditingException {
.delete(element);
sysmlModelEditor}
ブロックに定義を設定する
// 要トランザクション処理
public void setDefinition(IBlock block, String definition)
throws InvalidEditingException {
.setDefinition(definition);
block}
モデルにステレオタイプを追加する
// 要トランザクション処理
public void addStereotype(IElement element, String stereotype) throws InvalidEditingException {
.addStereotype(stereotype);
element}
図・プレゼンテーションの編集
ダイアグラムエディタ
図およびプレゼンテーションの作成や削除はダイアグラムエディタ(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,
, Point2D location) throws InvalidEditingException {
INodePresentation parentreturn editor.createState(name, parent, location);
}
プレゼンテーションを削除する
// 要トランザクション処理
public void deletePresentation(DiagramEditor editor, IPresentation presentation)
throws InvalidEditingException {
.deletePresentation(presentation);
editor}
プレゼンテーション情報を変更する
プレゼンテーション情報(背景色等)の変更はPresentationPropertyConstants、PresentationPropertyUtilを使用します。
モデルとプレゼンテーションの対応関係については対応プレゼンテーション一覧をご覧ください。
プレゼンテーションの背景色を変更する
// 要トランザクション処理
public void changeColor(IPresentation presentation, final String color)
throws InvalidEditingException {
.setProperty(Key.FILL_COLOR, color);
presentation}
プレゼンテーションの位置を変更する
// 要トランザクション処理
public void setLocation(INodePresentation presentation, Point2D location)
throws InvalidEditingException {
.setLocation(location);
presentation}