Exemple #1
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);
        }
Exemple #2
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);
        }
Exemple #3
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());
        }
Exemple #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);
        }
Exemple #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));
        }
        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;
        }