モデルを移動する
所有関係にあるモデルを移動する方法について説明します。
指定位置に移動する
自モデルの親モデルを指定のモデルに変更する場合は、IModel
オブジェクトのMoveTo
メソッドを用います。新しい親モデル、移動先のフィールドの名前、移動方向と基準位置を指定します。
public void MoveTo(ICommandContext c, ICommandParams p)
{
// 移動対象のモデルを取得します
IModel model = c.App.Workspace.CurrentModel;
// 新しい親モデルを取得します
// モデルパスを指定してモデルを取得する場合
IModel newOwner = model.OwnerProject.GetModelByPath("サンプルプロジェクト/ユースケースモデル");
// 移動対象のモデルを新しい親モデルの子要素として移動します
// 新しい親モデルの"Actors"フィールドの末尾に移動する場合
model.MoveTo(newOwner, "Actors", "last", 0);
}
移動先の親モデルとフィールドに現在と同じものを指定すると、自モデルの順序を変更することができます。
public void ChangeOrder(ICommandContext c, ICommandParams p)
{
// 移動対象のモデルを取得します
IModel model = c.App.Workspace.CurrentModel;
// 現在の親モデルと所有フィールドを指定して、移動対象のモデルを移動します
// この場合、移動対象モデルのフィールド内の順序を変更します
// モデルを先頭に移動する場合
model.MoveTo(model.Owner, model.GetOwnerField().Name, "first", 0);
}
IModel
オブジェクトのMoveTo
メソッドの第3引数、第4引数には、それぞれ移動先における追加方向、追加基準位置を指定します。
追加方向(direction):
文字列で方向を指定します。指定できる値は以下のいずれかです。
指定できる値 | 追加方向 |
---|---|
first | 先頭 |
last | 末尾 |
before | 前 |
after | 後 |
追加基準位置(index):
先頭位置を0とするインデックスを整数で指定します。追加方向の指定値によって、追加位置が変わります。
追加方向の値 | 追加位置 |
---|---|
first | インデックスの値に関係なく先頭 |
last | インデックスの値に関係なく末尾 |
before | 指定したインデックス位置 |
after | 指定したインデックス位置の次の位置 |
自分の子要素として移動する
指定のモデルの親モデルを自モデルに変更する場合は、IModel
オブジェクトのTake
メソッドを用います。
public void TakeModel(ICommandContext c, ICommandParams p)
{
// 移動先の親モデルを取得します
IModel model = c.App.Workspace.CurrentModel;
// 移動対象のモデルを取得します
// モデルパスを指定してモデルを取得する場合
IModel target = model.OwnerProject.GetModelByPath("サンプルプロジェクト/システム要件/非機能要件");
// 移動先の親モデルの子要素として移動対象のモデルを移動します
// 移動先の親モデルの"SubRequirements"フィールドの末尾に移動する場合
model.Take("SubRequirements", target, "first", 0);
}
移動方向と基準位置の詳細は、IModel
オブジェクトのMoveTo
メソッドと同様です。