モデル編集の概要
エクステンションではAPIで次のようにモデル編集が可能です。
モデルを追加するにはIProject
オブジェクトのAddNewRootModel
メソッドやIModel
オブジェクトのAddNewModel
メソッドを用います。また、フィールドへの値のセットはIModel
オブジェクトのSetField
メソッドを用います。
public void AddNewRootModel(ICommandContext c, ICommandParams p)
{
// プロジェクトにモデルを作成します
IModel ucModel = c.App.Workspace.CurrentProject.AddNewRootModel("UseCaseModel");
// ユースケースのモデルとアクタのモデルを作成します
IModel uc1 = ucModel.AddNewModel("UseCases", "UseCase");
uc1.SetField("Name", "定速走行する");
uc1.SetField("Description", "・・・");
IModel uc2 = ucModel.AddNewModel("UseCases", "UseCase");
uc2.SetField("Name", "追従走行する");
IModel ac1 = ucModel.AddNewModel("Actors", "Actor");
ac1.SetField("Name", "ドライバ");
IModel ac2 = ucModel.AddNewModel("Actors", "Actor");
ac2.SetField("Name", "コントロールパネル");
}
フィールドの値の取得はIModel
オブジェクトのGetField
メソッドやGetFieldString
メソッドを用います。
public void GetField(ICommandContext c, ICommandParams p)
{
// 現在のモデルを取得します
IModel model = c.App.Workspace.CurrentModel;
// "SomeField"のフィールド値を取得します
object someFieldValue = model.GetField("SomeField");
// 文字列型でフィールド値を取得します
string someStringField = model.GetFieldString("SomeField");
}
関連付けは IModel
オブジェクトのRelate
メソッドを使います。参照フィールドを指定した場合関連付けを行いますが、所有フィールドを指定した場合関連付けは行われません。
public void Relate(ICommandContext c, ICommandParams p)
{
// 関連付け対象のモデルを取得します
IModel uc1 = ..
IModel ac1 = ..
IModel ac2 = ..
// ユースケースの参照フィールドを指定してアクタと関連付けを行います
uc1.Relate("MainActor", ac1);
// ユースケースの所有フィールドを指定した場合、関連付けは行われません
uc1.Relate("SubActors", ac2);
}
IModel
オブジェクトのSetField
メソッドを用いても関連付けできます。参照フィールドを指定した場合は参照関連を追加、所有フィールドを指定した場合はモデルを移動します。詳しい利用方法は、こちらを参照してください。
public void Relate(ICommandContext c, ICommandParams p)
{
// 関連付け対象のモデルを取得します
IModel uc1 = ..
IModel ac1 = ..
IModel ac2 = ..
// ユースケースの参照フィールドを指定してアクタと関連付けを行います
uc1.SetField("MainActor", ac1);
// ユースケースの所有フィールドを指定してアクタをユースケース下に移動します
// 既に設定されていたモデルは削除されます
uc1.SetField("SubActors", ac2);
}
モデルの移動はIModel
オブジェクトのMoveTo
メソッド、削除はIModel
オブジェクトのDelete
メソッドを用います。
public void MoveToAndDelete(ICommandContext c, ICommandParams p)
{
// 操作対象のモデルを取得します
IModel uc1 = ..
IModel uc2 = ..
// ユースケースのシナリオを追加します
var scenario1 = uc1.AddNewModel("Scenarios", "Scenario");
// インデックスを指定して追加します
var scenario2 = uc1.AddNewModelAt("Scenarios", "Scenario", "after", 0);
// シナリオを移動します
scenario1.MoveTo(uc2, "Scenarios", "after", 0);
// シナリオを削除します
scenario2.Delete();
}