Example #1
0
        private IEnumerable <DynamicMemberDescriptor> CreateDynamicMembers(DynamicMemberSpecification spec, PSObject ps)
        {
            using (Log.PushContext("CreateDynamicMembers"))
            {
                List <DynamicMemberDescriptor> descriptors = new List <DynamicMemberDescriptor>();
                if (null != spec.AcrossSpecifier)
                {
                    descriptors.Add(new DynamicMemberDescriptor(spec.AcrossSpecifier, null));
                }

                var byItemMembers = CreateByItemMemberDescriptors(spec, ps).ToList();
                if (byItemMembers.Any())
                {
                    descriptors.AddRange(byItemMembers);

                    foreach (var byItemMember in byItemMembers)
                    {
                        descriptors.AddRange(CreateMemberDescriptors(spec, ps, byItemMember));
                    }
                }
                else
                {
                    descriptors.AddRange(CreateMemberDescriptors(spec, ps, null));
                }
                return(descriptors);
            }
        }
        IEnumerable<DynamicMemberDescriptor> AddWildcardDynamicMembers(DynamicMemberSpecification spec, WildcardPattern pattern, PSObject ps, string proxyPropertyName)
        {
            var props = ps.Properties;
            var scriptFormat = "$this.'{0}'";
            if (null != proxyPropertyName)
            {
                props = ps.Properties[proxyPropertyName].ToPSObject().Properties;
                scriptFormat = "$this.'{1}'.'{0}'";
            }
            var matchingPropertyNames = from prop in props
                                        where pattern.IsMatch(prop.Name)
                                        select prop.Name;

            var members = matchingPropertyNames.ToList().ConvertAll(
                s => new
                {
                    PropertyName = s,
                    Member = new PSScriptProperty(
                         (proxyPropertyName ?? "" ) + "_" + s,
                         System.Management.Automation.ScriptBlock.Create(String.Format(scriptFormat, s,
                                                                                       proxyPropertyName))
                         )
                });
            return (from m in members
                    let s = (from sd in spec.ScaleDescriptors
                                 where sd.Key.IsMatch(m.PropertyName)
                                 select sd.Value).FirstOrDefault()
                    select new DynamicMemberDescriptor(m.Member, s)).ToList();
        }
Example #3
0
        IEnumerable <DynamicMemberDescriptor> AddWildcardDynamicMembers(DynamicMemberSpecification spec, WildcardPattern pattern, PSObject ps, string proxyPropertyName)
        {
            var props        = ps.Properties;
            var scriptFormat = "$this.'{0}'";

            if (null != proxyPropertyName)
            {
                props        = ps.Properties[proxyPropertyName].ToPSObject().Properties;
                scriptFormat = "$this.'{1}'.'{0}'";
            }
            var matchingPropertyNames = from prop in props
                                        where pattern.IsMatch(prop.Name)
                                        select prop.Name;


            var members = matchingPropertyNames.ToList().ConvertAll(
                s => new
            {
                PropertyName = s,
                Member       = new PSScriptProperty(
                    (proxyPropertyName ?? "") + "_" + s,
                    System.Management.Automation.ScriptBlock.Create(String.Format(scriptFormat, s,
                                                                                  proxyPropertyName))
                    )
            });

            return((from m in members
                    let s = (from sd in spec.ScaleDescriptors
                             where sd.Key.IsMatch(m.PropertyName)
                             select sd.Value).FirstOrDefault()
                            select new DynamicMemberDescriptor(m.Member, s)).ToList());
        }
Example #4
0
        private IEnumerable <DynamicMemberDescriptor> CreateMemberDescriptors(DynamicMemberSpecification spec, PSObject ps, DynamicMemberDescriptor byItemMember)
        {
            var list = new List <DynamicMemberDescriptor>();
            PSScriptProperty scriptProperty = null;

            var plotItemMembers = UpdatePlotItemMembers(spec, ps, byItemMember);

            list.AddRange(plotItemMembers);
            list.Add(UpdateAgainstItemMember(spec, ps, byItemMember));
            return(list);
        }
Example #5
0
        private DynamicMemberDescriptor UpdateAgainstItemMember(DynamicMemberSpecification spec, PSObject ps, DynamicMemberDescriptor byItemMember)
        {
            if (null == spec.AgainstItem)
            {
                return(null);
            }
            var againstMember = GetMemberDescriptorForSpecItem(spec, ps, spec.AgainstItem, byItemMember).FirstOrDefault();

            if (null == againstMember)
            {
                //todo
                return(null);
            }

            spec.AgainstProperty = againstMember.MemberInfo;
            //SafeAddDynamicMember(againstMember.MemberInfo);
            return(new DynamicMemberDescriptor(againstMember.MemberInfo, null));
        }
        IEnumerable <TSeriesViewModel> CreatePlotSeriesViewModels(object[] plotItems, object againstItem, PSScriptProperty acrossItem, PSScriptProperty indexItem)
        {
            var dataSource = DataSource;

            _spec = new DynamicMemberSpecification(plotItems, againstItem, acrossItem, indexItem, ScaleDescriptorTable);
            dataSource.AddDynamicMemberSpecification(_spec);

            if (0 < dataSource.Data.Count || 0 < dataSource.AllRecords.Count)
            {
                CreateAndAddSeriesViewModels();
            }
            else
            {
                dataSource.Data.CollectionChanged       += OnFirstDataItem;
                dataSource.AllRecords.CollectionChanged += OnFirstDataItem;
            }
            return(null);
        }
Example #7
0
        private IEnumerable <DynamicMemberDescriptor> UpdatePlotItemMembers(DynamicMemberSpecification spec, PSObject ps, DynamicMemberDescriptor byItemMember)
        {
            var plotItemMembers = CreatePlotItemMembers(byItemMember, spec, ps);

            if (null == plotItemMembers || !plotItemMembers.Any())
            {
                return(new List <DynamicMemberDescriptor>());
            }

            foreach (var item in plotItemMembers.Where(a => null != a && null != a.MemberInfo))
            {
                Log.DebugFormat("adding plot property [{0}]", item.MemberInfo);
                spec.PlotItemDescriptors.Add(item);
            }

            return(plotItemMembers
                   .Where(pm => null != pm && null != pm.MemberInfo && !String.IsNullOrEmpty(pm.MemberInfo.Name))
                   .Where(pm => !ps.Properties.Match(pm.MemberInfo.Name).Any())
                   .ToList());
        }
        public IEnumerable <TSeriesViewModel> CreateSeriesViewModelsFromDynamicMemberSpecification(DynamicMemberSpecification spec, IPowerShellDataSource dataSource)
        {
            var vms = CreateSeriesViewModelAndScale(spec.PlotItemDescriptors, spec.AgainstPropertyName, dataSource);

            return(new[] { vms });
        }
Example #9
0
 public void AddDynamicMemberSpecification(DynamicMemberSpecification spec)
 {
     throw new NotSupportedException();
 }
Example #10
0
        private IEnumerable <DynamicMemberDescriptor> GetMemberDescriptorForSpecItem(DynamicMemberSpecification spec, PSObject ps, object specItem, DynamicMemberDescriptor byProperty)
        {
            var    list              = new List <DynamicMemberDescriptor>();
            var    specMember        = specItem as PSPropertyInfo;
            string proxyPropertyName = null;

            if (null != byProperty && null != byProperty.MemberInfo)
            {
                proxyPropertyName = byProperty.MemberInfo.Name;
            }

            if (null != specMember)
            {
                var name = specItem.ToString();

                var psp = specMember as PSScriptProperty;
                if (null != psp)
                {
                    name = ScriptBlockDynamicPropertyArgumentTransformationAttribute.GetReadableName(psp);
                }

                if (null != byProperty && null != byProperty.IndexValue)
                {
                    name = byProperty.IndexValue.ToString() + "\\" + name;
                    //name.Replace("$", "").Replace("{","").Replace("}","").Replace(".","");
                }

                CreateDynamicMemberProperty(ref specMember, "_" + Guid.NewGuid().ToString(), proxyPropertyName);
                IScaleDescriptor scale = new DynamicPropertyScaleDescriptor(_dataSource, specMember.Name);
                scale = (from sd in spec.ScaleDescriptors
                         where sd.Key.IsMatch(name)
                         select sd.Value).FirstOrDefault() ??
                        (from sd in spec.ScaleDescriptors
                         where sd.Key.IsMatch(specMember.Name)
                         select sd.Value).FirstOrDefault() ??
                        scale;

                spec.ScaleDescriptors.Add(new Regex(Regex.Escape(specMember.Name)), scale);
                //var assignment = AddDynamicScaleForProperty(specMember.Name);


                list.Add(new DynamicMemberDescriptor(specMember, scale, name));
            }
            else if (specItem is string && WildcardPattern.ContainsWildcardCharacters(specItem.ToString()))
            {
                var p       = new WildcardPattern(specItem.ToString());
                var members = AddWildcardDynamicMembers(spec, p, ps, proxyPropertyName);
                foreach (var member in members)
                {
                    list.Add(member);
                }
            }
            else
            {
                var name = specItem.ToString();
                if (null != byProperty && null != byProperty.IndexValue)
                {
                    name = byProperty.IndexValue.ToString() + "\\" + name;
                }

                if (null != proxyPropertyName)
                {
                    var m     = CreateDynamicMemberProperty(specItem.ToString(), proxyPropertyName);
                    var scale = (from sd in spec.ScaleDescriptors
                                 where sd.Key.IsMatch(m.Name)
                                 select sd.Value).FirstOrDefault();
                    //var s = GetOrCreateScaleAssignment(name, m).Scale;
                    list.Add(new DynamicMemberDescriptor(m, scale, name));
                }
                else
                {
                    var scale = (from sd in spec.ScaleDescriptors
                                 where sd.Key.IsMatch(name)
                                 select sd.Value).FirstOrDefault();
                    if (null == ps.Properties[name])
                    {
                        //throw new DataPropertyNotFoundException(name);

                        list.Add(new DynamicMemberDescriptor(
                                     new PSScriptProperty(
                                         "_" + Guid.NewGuid().ToString("N") + "_" + name,
                                         ScriptBlock.Create(String.Format("$local:val = $this.'{0}'; if( $local:val ) {{ $local:val }} else {{ 0 }}", specItem.ToString()))
                                         ),
                                     scale,
                                     name
                                     )
                                 );
                    }
                    list.Add(new DynamicMemberDescriptor(ps.Properties[name], scale, name));
                }
            }

            return(list);
        }
        private IEnumerable<DynamicMemberDescriptor> UpdatePlotItemMembers(DynamicMemberSpecification spec, PSObject ps, DynamicMemberDescriptor byItemMember)
        {
            var plotItemMembers = CreatePlotItemMembers(byItemMember, spec, ps);
            if (null == plotItemMembers || !plotItemMembers.Any())
            {
                return new List<DynamicMemberDescriptor>();
            }

            foreach (var item in plotItemMembers.Where(a=>null != a && null !=a.MemberInfo))
            {
                Log.DebugFormat( "adding plot property [{0}]", item.MemberInfo );
                spec.PlotItemDescriptors.Add(item);
            }

            return plotItemMembers
                .Where( pm => null != pm && null != pm.MemberInfo && ! String.IsNullOrEmpty( pm.MemberInfo.Name))
                .Where(pm => !ps.Properties.Match(pm.MemberInfo.Name).Any())
                .ToList();
        }
        private DynamicMemberDescriptor UpdateAgainstItemMember(DynamicMemberSpecification spec, PSObject ps, DynamicMemberDescriptor byItemMember)
        {
            if (null == spec.AgainstItem)
            {
                return null;

            }
            var againstMember = GetMemberDescriptorForSpecItem(spec, ps, spec.AgainstItem, byItemMember).FirstOrDefault();
                if (null == againstMember)
                {
                    //todo
                    return null;
                }

                spec.AgainstProperty = againstMember.MemberInfo;
                //SafeAddDynamicMember(againstMember.MemberInfo);
                return new DynamicMemberDescriptor( againstMember.MemberInfo, null );
        }
        private IEnumerable<DynamicMemberDescriptor> GetMemberDescriptorForSpecItem(DynamicMemberSpecification spec, PSObject ps, object specItem, DynamicMemberDescriptor byProperty)
        {
            var list = new List<DynamicMemberDescriptor>();
            var specMember = specItem as PSPropertyInfo;
            string proxyPropertyName = null;

            if( null != byProperty && null != byProperty.MemberInfo )
            {
                proxyPropertyName = byProperty.MemberInfo.Name;
            }

            if (null != specMember)
            {
                var name = specItem.ToString();

                var psp = specMember as PSScriptProperty;
                if (null != psp)
                {
                    name = ScriptBlockDynamicPropertyArgumentTransformationAttribute.GetReadableName(psp);
                }

                if (null != byProperty && null != byProperty.IndexValue)
                {
                    name = byProperty.IndexValue.ToString() + "\\" + name;
                    //name.Replace("$", "").Replace("{","").Replace("}","").Replace(".","");
                }

                CreateDynamicMemberProperty(ref specMember, "_" + Guid.NewGuid().ToString(), proxyPropertyName);
                IScaleDescriptor scale = new DynamicPropertyScaleDescriptor(_dataSource, specMember.Name);
                scale = (from sd in spec.ScaleDescriptors
                         where sd.Key.IsMatch(name)
                         select sd.Value).FirstOrDefault() ??
                        (from sd in spec.ScaleDescriptors
                         where sd.Key.IsMatch(specMember.Name)
                         select sd.Value).FirstOrDefault() ??
                        scale;

                spec.ScaleDescriptors.Add( new Regex( Regex.Escape(specMember.Name)), scale );
                //var assignment = AddDynamicScaleForProperty(specMember.Name);

                list.Add( new DynamicMemberDescriptor(specMember, scale, name) );
            }
            else if (specItem is string && WildcardPattern.ContainsWildcardCharacters(specItem.ToString()))
            {
                var p = new WildcardPattern(specItem.ToString());
                var members = AddWildcardDynamicMembers(spec, p, ps, proxyPropertyName);
                foreach (var member in members)
                {

                    list.Add(member);
                }
            }
            else
            {
                var name = specItem.ToString();
                if( null != byProperty && null != byProperty.IndexValue )
                {
                    name = byProperty.IndexValue.ToString() + "\\" + name;
                }

                if (null != proxyPropertyName)
                {
                    var m = CreateDynamicMemberProperty(specItem.ToString(), proxyPropertyName);
                    var scale = (from sd in spec.ScaleDescriptors
                                 where sd.Key.IsMatch(m.Name)
                                 select sd.Value).FirstOrDefault();
                    //var s = GetOrCreateScaleAssignment(name, m).Scale;
                    list.Add(new DynamicMemberDescriptor(m, scale, name));
                }
                else
                {
                    var scale = (from sd in spec.ScaleDescriptors
                                 where sd.Key.IsMatch(name)
                                 select sd.Value).FirstOrDefault();
                    if (null == ps.Properties[name])
                    {
                        //throw new DataPropertyNotFoundException(name);

                        list.Add(new DynamicMemberDescriptor(
                            new PSScriptProperty(
                                "_" + Guid.NewGuid().ToString("N") + "_" + name,
                                ScriptBlock.Create(String.Format("$local:val = $this.'{0}'; if( $local:val ) {{ $local:val }} else {{ 0 }}", specItem.ToString()))
                                ),
                            scale,
                            name
                            )
                        );
                    }
                    list.Add(new DynamicMemberDescriptor(ps.Properties[name],scale,name));
                }
            }

            return list;
        }
        private IEnumerable<DynamicMemberDescriptor> CreatePlotItemMembers(DynamicMemberDescriptor byItemMember, DynamicMemberSpecification spec, PSObject ps)
        {
            List<DynamicMemberDescriptor> list = new List<DynamicMemberDescriptor>();
            bool acrossSpecifierAdded = false;
            bool bySpecifierAdded = false;
            if (null != spec.AcrossSpecifier)
            {
                acrossSpecifierAdded = ps.SafeAddDynamicProperty(spec.AcrossSpecifier);
            }

            if (null != byItemMember)
            {
                bySpecifierAdded = ps.SafeAddDynamicProperty(byItemMember.MemberInfo);
            }

            foreach (var plot in spec.PlotItems)
            {
                foreach (var memberDescriptor in GetMemberDescriptorForSpecItem(spec, ps, plot, byItemMember))
                {
                    list.Add(memberDescriptor);
                }
            }

            if (bySpecifierAdded)
            {
                ps.Properties.Remove(byItemMember.MemberInfo.Name);
            }
            if (acrossSpecifierAdded)
            {
                ps.Properties.Remove(spec.AcrossSpecifier.Name);
            }
            return list;
        }
        private IEnumerable<DynamicMemberDescriptor> CreateMemberDescriptors(DynamicMemberSpecification spec, PSObject ps, DynamicMemberDescriptor byItemMember)
        {
            var list = new List<DynamicMemberDescriptor>();
            PSScriptProperty scriptProperty = null;

            var plotItemMembers = UpdatePlotItemMembers(spec, ps, byItemMember);

            list.AddRange( plotItemMembers );
            list.Add( UpdateAgainstItemMember(spec, ps, byItemMember) );
            return list;
        }
        private IEnumerable<DynamicMemberDescriptor> CreateDynamicMembers(DynamicMemberSpecification spec, PSObject ps)
        {
            using (Log.PushContext("CreateDynamicMembers"))
            {
                List<DynamicMemberDescriptor> descriptors = new List<DynamicMemberDescriptor>();
                if (null != spec.AcrossSpecifier)
                {
                    descriptors.Add(new DynamicMemberDescriptor(spec.AcrossSpecifier, null));
                }

                var byItemMembers = CreateByItemMemberDescriptors(spec, ps).ToList();
                if (byItemMembers.Any())
                {
                    descriptors.AddRange(byItemMembers);

                    foreach (var byItemMember in byItemMembers)
                    {
                        descriptors.AddRange(CreateMemberDescriptors(spec, ps, byItemMember));
                    }
                }
                else
                {
                    descriptors.AddRange(CreateMemberDescriptors(spec, ps, null));
                }
                return descriptors;
            }
        }
Example #17
0
        private IEnumerable <DynamicMemberDescriptor> CreatePlotItemMembers(DynamicMemberDescriptor byItemMember, DynamicMemberSpecification spec, PSObject ps)
        {
            List <DynamicMemberDescriptor> list = new List <DynamicMemberDescriptor>();
            bool acrossSpecifierAdded           = false;
            bool bySpecifierAdded = false;

            if (null != spec.AcrossSpecifier)
            {
                acrossSpecifierAdded = ps.SafeAddDynamicProperty(spec.AcrossSpecifier);
            }

            if (null != byItemMember)
            {
                bySpecifierAdded = ps.SafeAddDynamicProperty(byItemMember.MemberInfo);
            }

            foreach (var plot in spec.PlotItems)
            {
                foreach (var memberDescriptor in GetMemberDescriptorForSpecItem(spec, ps, plot, byItemMember))
                {
                    list.Add(memberDescriptor);
                }
            }

            if (bySpecifierAdded)
            {
                ps.Properties.Remove(byItemMember.MemberInfo.Name);
            }
            if (acrossSpecifierAdded)
            {
                ps.Properties.Remove(spec.AcrossSpecifier.Name);
            }
            return(list);
        }
        private IEnumerable<DynamicMemberDescriptor> CreateByItemMemberDescriptors(DynamicMemberSpecification spec, PSObject ps)
        {
            if (null == spec.AcrossSpecifier)
            {
                return new DynamicMemberDescriptor[]{ };
            }
            var list = new List<DynamicMemberDescriptor>();
            var acrossAccessorName = spec.AcrossSpecifier.Name;
            ps.Properties.Add(spec.AcrossSpecifier);
            var sps = new PSObjectSolidifier().AsConcreteType(ps) as SolidPSObjectBase;
            object oitem = sps.GetPropValue<object>(acrossAccessorName);
            ps.Properties.Remove(acrossAccessorName);

            var items = oitem as ICollection;
            if (null == items)
            {
                items = new object[] { oitem };
            }

            if (null == spec.IndexSpecifier)
            {

                for (int i = 0; i < items.Count; ++i)
                {
                    var byItemScript = String.Format("$this.'{1}' | select-object -index '{0}'", i, acrossAccessorName);
                    var prop = new PSScriptProperty(
                        acrossAccessorName + i,
                        System.Management.Automation.ScriptBlock.Create(byItemScript));
                    var scale = ( from sd in spec.ScaleDescriptors
                                where sd.Key.IsMatch(prop.Name)
                                select sd.Value ).FirstOrDefault();
                    list.Add( new DynamicMemberDescriptor( prop, scale, "Index " + i ));
                }
            }
            else
            {
                foreach (var item in items)
                {
                    var pso = item.ToPSObject();
                    var tempProperty = new PSScriptProperty(
                        "_" + Guid.NewGuid().ToString("N"),
                        System.Management.Automation.ScriptBlock.Create(
                            "$this | " + spec.IndexSpecifier.GetterScript));
                    pso.Properties.Add(tempProperty);
                    var specValue = pso.Properties[tempProperty.Name].Value.ToPSObject();
                    pso.Properties.Remove(tempProperty.Name);
                    var name = specValue.Properties["Name"].Value;

                    var byItemScript =
                        String.Format("$this.'{1}' | {2} | where {{ $_.Name -eq '{0}' }} | select -expand Group",
                                      name, acrossAccessorName, spec.IndexSpecifier.GetterScript);
                    var prop = new PSScriptProperty(
                                 acrossAccessorName + "_" + name,
                                 System.Management.Automation.ScriptBlock.Create(byItemScript));
                    var scale = (from sd in spec.ScaleDescriptors
                                 where sd.Key.IsMatch(prop.Name)
                                 select sd.Value).FirstOrDefault();
                    list.Add( new DynamicMemberDescriptor( prop, scale, name));
                }
            }
            return list;
        }
Example #19
0
        private IEnumerable <DynamicMemberDescriptor> CreateByItemMemberDescriptors(DynamicMemberSpecification spec, PSObject ps)
        {
            if (null == spec.AcrossSpecifier)
            {
                return(new DynamicMemberDescriptor[] { });
            }
            var list = new List <DynamicMemberDescriptor>();
            var acrossAccessorName = spec.AcrossSpecifier.Name;

            ps.Properties.Add(spec.AcrossSpecifier);
            var    sps   = new PSObjectSolidifier().AsConcreteType(ps) as SolidPSObjectBase;
            object oitem = sps.GetPropValue <object>(acrossAccessorName);

            ps.Properties.Remove(acrossAccessorName);

            var items = oitem as ICollection;

            if (null == items)
            {
                items = new object[] { oitem };
            }

            if (null == spec.IndexSpecifier)
            {
                for (int i = 0; i < items.Count; ++i)
                {
                    var byItemScript = String.Format("$this.'{1}' | select-object -index '{0}'", i, acrossAccessorName);
                    var prop         = new PSScriptProperty(
                        acrossAccessorName + i,
                        System.Management.Automation.ScriptBlock.Create(byItemScript));
                    var scale = (from sd in spec.ScaleDescriptors
                                 where sd.Key.IsMatch(prop.Name)
                                 select sd.Value).FirstOrDefault();
                    list.Add(new DynamicMemberDescriptor(prop, scale, "Index " + i));
                }
            }
            else
            {
                foreach (var item in items)
                {
                    var pso          = item.ToPSObject();
                    var tempProperty = new PSScriptProperty(
                        "_" + Guid.NewGuid().ToString("N"),
                        System.Management.Automation.ScriptBlock.Create(
                            "$this | " + spec.IndexSpecifier.GetterScript));
                    pso.Properties.Add(tempProperty);
                    var specValue = pso.Properties[tempProperty.Name].Value.ToPSObject();
                    pso.Properties.Remove(tempProperty.Name);
                    var name = specValue.Properties["Name"].Value;

                    var byItemScript =
                        String.Format("$this.'{1}' | {2} | where {{ $_.Name -eq '{0}' }} | select -expand Group",
                                      name, acrossAccessorName, spec.IndexSpecifier.GetterScript);
                    var prop = new PSScriptProperty(
                        acrossAccessorName + "_" + name,
                        System.Management.Automation.ScriptBlock.Create(byItemScript));
                    var scale = (from sd in spec.ScaleDescriptors
                                 where sd.Key.IsMatch(prop.Name)
                                 select sd.Value).FirstOrDefault();
                    list.Add(new DynamicMemberDescriptor(prop, scale, name));
                }
            }
            return(list);
        }
        protected virtual IEnumerable <TSeriesViewModel> CreateSeriesViewModelsFromDynamicMemberSpecification(DynamicMemberSpecification spec)
        {
            var vms = SpecAdapter.CreateSeriesViewModelsFromDynamicMemberSpecification(spec, DataSource);

            return(vms);
        }
        public IEnumerable <TSeriesViewModel> CreateSeriesViewModelsFromDynamicMemberSpecification(DynamicMemberSpecification spec, IPowerShellDataSource dataSource)
        {
            var vms =
                (from prop in spec.PlotItemDescriptors
                 let propName = prop.MemberInfo.Name.StartsWith("_") ? null : prop.MemberInfo.Name
                                let scriptName = prop.MemberInfo is PSScriptProperty ? (prop.MemberInfo as PSScriptProperty).GetterScript.ToString() : null
                                                 let indexName = prop.IndexValue
                                                                 let seriesName = (indexName ?? propName ?? scriptName).ToString()
                                                                                  select CreateSeriesViewModelAndScale(seriesName, prop.MemberInfo.Name, spec.AgainstPropertyName, dataSource)).ToList();

            return(vms);
        }
Example #22
0
        protected override ChartSeriesViewModel CreateSeriesViewModel(string seriesName, IEnumerable <string> plotPropertyName, string againstPropertyName, IPowerShellDataSource dataSource)
        {
            var series = new ChartSeriesViewModel()
            {
                Name = seriesName, EnableConfigureAxes = false
            };

            series.LiteralSeriesName = _literalPlotValue;
            series.LiteralByName     = _literalByValue;
            series.SeriesType        = Type;
            series.DataSource        = dataSource;
            series.LabelMemberPath   = series.XMemberPath = series.AngleMemberPath = againstPropertyName;
            series.ValueMemberPath   = series.RadiusMemberPath = series.YMemberPath = plotPropertyName.FirstOrDefault();
            series.ScaleDescriptors  = this.ScaleDescriptorTable;
            switch (series.SeriesType)
            {
            case (ChartSeriesType.Bubble):
            {
                if (null != RadiusFrom)
                {
                    var spec = new DynamicMemberSpecification(new[] { RadiusFrom }, null,
                                                              Across as PSScriptProperty,
                                                              KeyOn as PSScriptProperty,
                                                              ScaleDescriptorTable);

                    series.DataSource.AddDynamicMemberSpecification(spec);

                    var prop = spec.PlotItemDescriptors.FirstOrDefault();
                    if (null != prop)
                    {
                        series.RadiusMemberPath = prop.MemberInfo.Name;
                    }
                }
                else
                {
                    series.SeriesType = ChartSeriesType.Scatter;
                }

                break;
            }

            case (ChartSeriesType.RangeArea):
            case (ChartSeriesType.RangeColumn):
            {
                if (2 != plotPropertyName.Count())
                {
                    //todo
                }
                series.HighMemberPath = plotPropertyName.First();
                series.LowMemberPath  = plotPropertyName.Last();

                break;
            }

            default:
                series.HighMemberPath = null;
                series.LowMemberPath  = null;
                break;
            }

            series.EnableConfigureAxes = true;

            return(series);
        }