using System;
using System.Collections.Generic;
using CTA.FeatureDetection.Common.Models.Configuration;
using CTA.FeatureDetection.Common.Models.Features;
using CTA.FeatureDetection.Common.Models.Features.Base;
using CTA.FeatureDetection.Common.Models.Parsers;
namespace CTA.FeatureDetection.Load.Loaders
{
public class FeatureSetLoader
{
///
/// Loads features to be detected into a FeatureSet object using metadata stored in FeatureConfig objects
///
/// Collection of FeatureConfig objects
/// FeatureSet object containing all features loaded into memory
public static FeatureSet LoadFeatureSetFromFeatureConfigs(IEnumerable featureConfigs)
{
var featureSet = new FeatureSet();
foreach (var featureConfig in featureConfigs)
{
var featureSubset = LoadFeatureSetFromFeatureConfig(featureConfig);
featureSet.UnionWith(featureSubset);
}
return featureSet;
}
///
/// Load features to be detected into a FeatureSet object from config file
///
/// Collection of config file path
/// FeatureSet containing features specified in config file
public static FeatureSet LoadFeatureSetFromFeatureConfigFile(string featureConfigPath)
{
return LoadFeatureSetFromFeatureConfigFiles(new[] { featureConfigPath });
}
///
/// Load features to be detected into a FeatureSet object from config files
///
/// Collection of config file paths
/// FeatureSet containing features specified in config files
public static FeatureSet LoadFeatureSetFromFeatureConfigFiles(IEnumerable featureConfigPaths)
{
var featureConfigs = FeatureConfigParser.Parse(featureConfigPaths);
return LoadFeatureSetFromFeatureConfigs(featureConfigs);
}
///
/// Loads features to be detected into a FeatureSet object using metadata stored in a single FeatureConfig object
///
/// FeatureConfig object
/// FeatureSet object containing all features loaded into memory
public static FeatureSet LoadFeatureSetFromFeatureConfig(FeatureConfig featureConfig)
{
var compiledFeatures = new HashSet();
var configuredFeatures = new HashSet();
foreach (var featureGroup in featureConfig.FeatureGroups)
{
var featureScope = featureGroup.FeatureScope;
var newCompiledFeatures = FeatureLoader.LoadCompiledFeaturesFromAssemblies(featureScope, featureGroup.CompiledFeatureAssemblies);
var newConfiguredFeatures = FeatureLoader.LoadConfiguredFeatures(featureScope, featureGroup.ConfiguredFeatures);
compiledFeatures.UnionWith(newCompiledFeatures);
configuredFeatures.UnionWith(newConfiguredFeatures);
}
return new FeatureSet(compiledFeatures, configuredFeatures);
}
///
/// Create a FeatureSet using a feature type
///
/// Type of feature to include
/// FeatureSet containing the feature of the specified type
public static FeatureSet LoadFeatureSetFromType(Type type)
{
return LoadFeatureSetFromTypes(new[] { type });
}
///
/// Create a FeatureSet using feature types
///
/// Types of features to include
/// FeatureSet containing the features of the specified types
public static FeatureSet LoadFeatureSetFromTypes(IEnumerable types)
{
var features = FeatureLoader.LoadFeaturesByTypes(types);
return new FeatureSet(features);
}
///
/// Load the FeatureSet defined in the default feature config file
///
/// Default FeatureSet
public static FeatureSet LoadDefaultFeatureSet()
{
return LoadFeatureSetFromFeatureConfigFile(Constants.DefaultFeatureConfigPath);
}
}
}