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); } } }