モデル / プレゼンテーションの編集
編集を行う場合は必ずトランザクション処理が必要となります。
なお、下記条件を満たしていない場合は例外が発生します。
- プロジェクトアクセサにプロジェクトを登録していること
- 編集APIが対応しているエディションであること
- 対象が編集可能であること
トランザクション処理
トランザクションはastah*のプロジェクトに対して行われる更新処理の単位です。
beginTransaction
メソッドがトランザクションの開始、endTransaction
メソッドがトランザクションを確定させる処理です。 beginTransaction
メソッドからendTransaction
メソッドまでが1つの更新処理となり、undo/redoした場合はこの処理単位で行われます。 abortTransaction
メソッドがトランザクションを取消す処理です。トランザクションを取消した場合、プロジェクトはトランザクション開始前の状態に戻ります。 例外処理で必ずabortTransaction
メソッドを呼ぶようにしましょう。
= projectAccessor.getTransactionManager();
ITransactionManager transactionManager try {
.beginTransaction();
transactionManager
// 編集処理(省略)
.endTransaction();
transactionManager
} catch (BadTransactionException | Exception e) {
.abortTransaction();
transactionManager
// 処理(省略)
}
モデルの編集
モデルエディタ
モデルの編集はモデルエディタ(ModelEditor)を使用して行います。 モデルとプレゼンテーションが1:nで対応するモデルは各種モデルエディタから作成できます。
下記以外に、プレゼンテーションの作成と同時に時に一緒に作成されるモデルがあります。これについては図・プレゼンテーションの編集をご覧ください。
モデルエディタの種類 | 作成可能要素 |
---|---|
BasicModelEditor | クラス、成果物、関連、関連クラス、属性、コンポーネント、制限、コピー、依存、導出、汎化、インタフェース、モデル、ノード、操作、パッケージ、パラメタ、ポート、限定子、実現、洗練、要求、満足、サブシステム、タグ付き値、テンプレートバインディング、テンプレートパラメタ、テストケース、トレース、使用依存、検証 |
UseCaseModelEditor | アクター、ユースケース、拡張点、拡張、包含 |
CompositeStructureModelEditor | コネクタ、実現、使用 |
ERModelEditor | ERモデル、ERエンティティ、ドメイン、属性、データ型、インデックス、依存型リレーションシップ、多対多型リレーションシップ、非依存型リレーションシップ、サプタイプ |
パッケージにクラスを作成する
// 要トランザクション処理
public IClass createClass(ProjectAccessor projectAccessor, IModel parent, String name)
throws InvalidEditingException {
= projectAccessor.getModelEditorFactory();
IModelEditorFactory modelEditorFactory = modelEditorFactory.getBasicModelEditor();
BasicModelEditor basicModelEditor return basicModelEditor.createClass(parent, name);
}
タグ付き値を作成する
// 要トランザクション処理
public void createTaggedValue(BasicModelEditor modelEditor, IElement element, String tag, String value)
throws InvalidEditingException {
.createTaggedValue(element, tag, value);
modelEditor}
モデルを削除する
// 要トランザクション処理
public void deleteElement(BasicModelEditor basicModelEditor, IElement element)
throws InvalidEditingException {
.delete(element);
basicModelEditor}
クラスに定義を設定する
// 要トランザクション処理
public void setDefinition(IClass clazz, String definition)
throws InvalidEditingException {
.setDefinition(definition);
clazz}
モデルにステレオタイプを追加する
// 要トランザクション処理
public void addStereotype(IElement element, String stereotype) throws InvalidEditingException {
.addStereotype(stereotype);
element}
図・プレゼンテーションの編集
ダイアグラムエディタ
図およびプレゼンテーションの作成や削除はダイアグラムエディタ(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 {
.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}