プロダクトを取得する
エクステンションAPIでプロダクトラインのフィーチャとプロダクトを取得する例です。
public void OutputFeatureAndProducts(ICommandContext c, ICommandParams p)
{
var project = c.App.Workspace.CurrentProject;
// プロダクトライン開発の対象プロジェクトであることを確認します
if (!project.IsProductLineSupported) {
c.App.Output.WriteLine("sample", "このプロジェクトはプロダクトライン開発を開始していません。");
return;
}
// フィーチャモデル以下のフィーチャを取得します
IFeatureModelCollection featureModels = project.ProductLineModel.FeatureModels;
foreach (IFeatureModel featureModel in featureModels)
{
// フィーチャモデル名を出力します
c.App.Output.WriteLine("sample", $"Feature model: {featureModel.Name}");
foreach (IFeature rootFeature in featureModel.RootFeatures)
{
// 第1階層のフィーチャ名とフィーチャの種類を出力します
c.App.Output.WriteLine("sample", $" Root feature: {rootFeature.Name} (Kind: {rootFeature.VariationKind})");
foreach (IFeature subFeature in rootFeature.SubFeatures)
{
// 第2階層のフィーチャ名とフィーチャの種類を出力します
c.App.Output.WriteLine("sample", $" Sub feature: {subFeature.Name} (Kind: {subFeature.VariationKind})");
// 本サンプルでは固定で第2階層までしか取得していませんが、
// 第3階層以下も subFeature.SubFeatures プロパティで取得できます。
// 再帰呼び出しなどを使うことでツリーの深さによらず末端のフィーチャまで取得できます。
}
}
}
// プロダクトとプロダクトごとのフィーチャを取得します
IConfigurationModel configurationModel = project.ProductLineModel.ConfigurationModel;
foreach (IProduct product in configurationModel.AllProducts)
{
// プロダクト名を出力します
c.App.Output.WriteLine("sample", $"Product: {product.Name}");
foreach (IFeature selectedFeature in product.SelectedFeatures)
{
// プロダクトごとのフィーチャ名(プロダクトで選択されているフィーチャ名)を出力します
c.App.Output.WriteLine("sample", $" Selected feature: {selectedFeature.Name}");
}
}
}