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(); }
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()); }
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 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); }
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 }); }
public void AddDynamicMemberSpecification(DynamicMemberSpecification spec) { throw new NotSupportedException(); }
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; } }
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; }
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); }
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); }