/// <summary> /// Returns the created Metric Tree with all data values and metadata included /// </summary> /// <param name="metricInstanceSetRequest">The request originally passed to the metric service, containing the domain-specific context.</param> /// <param name="metricMetadataNode">Should already Filtered by MetricNodeId</param> /// <param name="metricDataContainer">Should already be filtered by the domain entity key</param> /// <returns>An instance of a class derived from <see cref="MetricBase"/>, and all its descendents.</returns> public MetricBase CreateTree(MetricInstanceSetRequestBase metricInstanceSetRequest, MetricMetadataNode metricMetadataNode, MetricDataContainer metricDataContainer) { // Get the custom metric initialization activity data var initializationActivityData = GetMetricInitializationActivityData(metricInstanceSetRequest); return CreateMetric(metricInstanceSetRequest, metricMetadataNode, metricDataContainer, null, initializationActivityData); }
private MetricBase CreateMetric(MetricInstanceSetRequestBase metricInstanceSetRequest, MetricMetadataNode metricMetadataNode, MetricDataContainer metricDataContainer, MetricBase parentMetric, Dictionary<string, object> initializationActivityData) { MetricBase metric; var metricData = metricDataContainer.GetMetricData(metricMetadataNode); switch (metricMetadataNode.MetricType) { case MetricType.ContainerMetric: metric = containerMetricFactory.CreateMetric(metricInstanceSetRequest, metricMetadataNode, metricData, parentMetric); break; case MetricType.AggregateMetric: metric = aggregateMetricFactory.CreateMetric(metricInstanceSetRequest, metricMetadataNode, metricData, parentMetric); break; case MetricType.GranularMetric: metric = granularMetricFactory.CreateMetric(metricInstanceSetRequest, metricMetadataNode, metricData, parentMetric); break; default: throw new NotSupportedException(string.Format("Unsupported metric type '{0}'.", metricMetadataNode.MetricType)); } // Process children var metricWithChildren = metric as ContainerMetric; // If this is a node type that has children if (metricWithChildren != null) ProcessForChildren(metricInstanceSetRequest, metricMetadataNode, metricDataContainer, metricWithChildren, initializationActivityData); // Execute initialization activities InvokeInitializationActivities(metric, metricInstanceSetRequest, metricMetadataNode, metricData, initializationActivityData); return metric; }
protected virtual void ProcessForChildren(MetricInstanceSetRequestBase metricInstanceSetRequest, MetricMetadataNode metricMetadataNode, MetricDataContainer metricDataContainer, ContainerMetric parentMetric, Dictionary<string, object> initializationActivityData) { // Initialize the list if it's not already initialized if (parentMetric.Children == null) parentMetric.Children = new List<MetricBase>(); // Iterate through the children in the metadata foreach (var node in metricMetadataNode.Children) { // Call recursively to create the tree var newChildMetric = CreateMetric(metricInstanceSetRequest, node, metricDataContainer, parentMetric, initializationActivityData); parentMetric.Children.Add(newChildMetric); } }
protected override void ExecuteTest() { var service = new MetricDataService<LocalEducationAgencyMetricInstanceSetRequest>(new [] { dataProvider1, dataProvider2, dataProvider3 }); actualModel = service.Get(suppliedRequest); }