モデルの所有元を調べる
モデルの所有の階層構造で、親モデル(祖先モデル)を探す方法について説明します。
所有元のモデルの取得
直接の所有元のモデルを調べるにはIModel
オブジェクトのOwner
プロパティを用います。
public void GetOwner(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;
// 所有元モデル
IModel owner = model.Owner;
//...
}
すべての親を調べる
所有関係で探索できるすべての所有元インスタンスを取得するには、IModel
オブジェクトのGetOwners
メソッドを用います。
public void GetOwners(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;
var owners = model.GetOwners();
c.App.Output.WriteLine("sample", $"モデル : {model.Name} の所有元インスタンスを取得しました。");
if (!owners.Any())
{
c.App.Output.WriteLine("sample", "所有元インスタンスはありません。");
}
else
{
int count = 1;
foreach (var owner in owners) {
c.App.Output.WriteLine("sample", $"{count} 個目名前 : {owner.Name} ");
count++;
}
}
}
特定メタモデルの親を取得する
祖先を含めた親の中で、特定のクラスの親を探索するにはIModel
オブジェクトのFindOwnerByClass
メソッドを用います。FindOwnerByClass
メソッドはモデルのインスタンスを保持する指定クラスの最初の所有元インスタンスを取得します。
public void FindOwnerByClass(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;
string className = "SystemRequirementSpecificationLayer";
var owner = model.FindOwnerByClass(className);
c.App.Output.WriteLine("sample", "所有元インスタンスの取得(FindOwnerByClass)");
if (owner != null)
{
c.App.Output.WriteLine("sample", $"モデル : { model.Name} の {className} クラス所有元インスタンスは { owner.Name} です。");
}
else
{
c.App.Output.WriteLine("sample", $"モデル : {model.Name} の {className} クラス所有元インスタンスはありません。");
}
}
所属プロジェクトを調べる
モデルから所属プロジェクトを調べるにはIModel
オブジェクトのOwnerProject
プロパティがありますが、単に現在開いているプロジェクトにアクセスする場合はIWorkspace
オブジェクトのCurrentProject
プロパティでも可能です。
public void OwnerProject(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;
var project = model.OwnerProject;
// シンプルにこちらを用いることも可能
// var project = c.App.Workspace.CurrentProject;
c.App.Output.WriteLine("sample", project.Name);
}