public void Execute(PullResponseBuilder response) { var @object = this.session.Instantiate(this.pull.Object); var @class = @object.Strategy?.Class; if (@class != null && this.pull.ObjectType is IComposite objectType) { if (!objectType.IsAssignableFrom(@class)) { return; } } if (this.pull.Results != null) { foreach (var result in this.pull.Results) { try { var name = result.Name; var fetch = result.Fetch; if ((fetch == null) && result.FetchRef.HasValue) { fetch = this.fetchService.Get(result.FetchRef.Value); } if (fetch != null) { var include = fetch.Include ?? fetch.Step?.End.Include; if (fetch.Step != null) { var propertyType = fetch.Step.End.PropertyType; if (fetch.Step.IsOne) { name ??= propertyType.SingularName; @object = (IObject)fetch.Step.Get(@object, this.acls); response.AddObject(name, @object, include); } else { name ??= propertyType.PluralName; var stepResult = fetch.Step.Get(@object, this.acls); var objects = stepResult is HashSet <object> set?set.Cast <IObject>().ToArray() : ((Extent)stepResult)?.ToArray() ?? new IObject[0]; if (result.Skip.HasValue || result.Take.HasValue) { var paged = result.Skip.HasValue ? objects.Skip(result.Skip.Value) : objects; if (result.Take.HasValue) { paged = paged.Take(result.Take.Value); } paged = paged.ToArray(); response.AddValue(name + "_total", objects.Length.ToString()); response.AddCollection(name, paged, include); } else { response.AddCollection(name, objects, include); } } } else { name ??= this.pull.ObjectType?.Name ?? @object.Strategy.Class.SingularName; response.AddObject(name, @object, include); } } else { name ??= this.pull.ObjectType?.Name ?? @object.Strategy.Class.SingularName; response.AddObject(name, @object); } } catch (Exception e) { throw new Exception($"Instantiate: {@object?.Strategy.Class}[{@object?.Strategy.ObjectId}], {result}", e); } } } else { var name = this.pull.ObjectType?.Name ?? @object.Strategy.Class.SingularName; response.AddObject(name, @object); } }
public void Execute(PullResponseBuilder response) { var @object = this.session.Instantiate(this.pull.Object); var objectType = this.pull.ObjectType as IComposite; var @class = @object.Strategy?.Class; if (@class != null && objectType != null) { if (!objectType.IsAssignableFrom(@class)) { return; } } if (this.pull.Results != null) { foreach (var result in this.pull.Results) { var name = result.Name; var fetch = result.Fetch; if (fetch == null && result.FetchRef.HasValue) { fetch = this.fetchService.Get(result.FetchRef.Value); } if (fetch != null) { var include = fetch.Include ?? fetch.Step?.End.Include; if (fetch.Step != null) { var aclCache = new AccessControlListFactory(this.user); var propertyType = fetch.Step.End.PropertyType; if (fetch.Step.IsOne) { name = name ?? propertyType.SingularName; @object = (IObject)fetch.Step.Get(@object, aclCache); response.AddObject(name, @object, include); } else { name = name ?? propertyType.PluralName; var stepResult = fetch.Step.Get(@object, aclCache); var objects = stepResult is HashSet <object> set?set.Cast <IObject>().ToArray() : ((Extent)stepResult).ToArray(); if (result.Skip.HasValue || result.Take.HasValue) { var paged = result.Skip.HasValue ? objects.Skip(result.Skip.Value) : objects; if (result.Take.HasValue) { paged = paged.Take(result.Take.Value); } paged = paged.ToArray(); response.AddValue(name + "_total", objects.Length); response.AddCollection(name, paged, include); } else { response.AddCollection(name, objects, include); } } } else { name = name ?? this.pull.ObjectType?.Name ?? @object.Strategy.Class.SingularName; response.AddObject(name, @object, include); } } else { name = name ?? this.pull.ObjectType?.Name ?? @object.Strategy.Class.SingularName; response.AddObject(name, @object); } } } else { var name = this.pull.ObjectType?.Name ?? @object.Strategy.Class.SingularName; response.AddObject(name, @object); } }
public void Execute(PullResponseBuilder response) { if (this.pull.Extent == null && !this.pull.ExtentRef.HasValue) { throw new Exception("Either an Extent or an ExtentRef is required."); } var extent = this.pull.Extent ?? this.extentService.Get(this.pull.ExtentRef.Value); var objects = extent.Build(this.session, this.pull.Arguments).ToArray(); if (this.pull.Results != null) { foreach (var result in this.pull.Results) { var name = result.Name; var fetch = result.Fetch; if (fetch == null && result.FetchRef.HasValue) { fetch = this.fetchService.Get(result.FetchRef.Value); } if (fetch != null) { var include = fetch.Include ?? fetch.Step?.End.Include; if (fetch.Step != null) { var aclCache = new AccessControlListFactory(this.user); var propertyType = fetch.Step.End.PropertyType; objects = propertyType.IsOne ? objects.Select(v => fetch.Step.Get(v, aclCache)).Where(v => v != null).Cast <IObject>().Distinct().ToArray() : objects.SelectMany(v => ((Extent)fetch.Step.Get(v, aclCache)).ToArray()).Distinct().ToArray(); name = name ?? propertyType.PluralName; } name = name ?? extent.ObjectType.PluralName; if (result.Skip.HasValue || result.Take.HasValue) { var paged = result.Skip.HasValue ? objects.Skip(result.Skip.Value) : objects; if (result.Take.HasValue) { paged = paged.Take(result.Take.Value); } paged = paged.ToArray(); response.AddValue(name + "_total", extent.Build(this.session, this.pull.Arguments).Count); response.AddCollection(name, paged, include); } else { response.AddCollection(name, objects, include); } } else { name = name ?? extent.ObjectType.PluralName; response.AddCollection(name, objects); } } } else { var name = extent.ObjectType.PluralName; response.AddCollection(name, objects); } }
public void Execute(PullResponseBuilder response) { if (this.pull.Extent == null && !this.pull.ExtentRef.HasValue) { throw new Exception("Either an Extent or an ExtentRef is required."); } var extent = this.pull.Extent ?? this.extentService.Get(this.pull.ExtentRef.Value); var objects = extent.Build(this.session, this.pull.Parameters).ToArray(); if (this.pull.Results != null) { foreach (var result in this.pull.Results) { try { var name = result.Name; var fetch = result.Fetch; if (fetch == null && result.FetchRef.HasValue) { fetch = this.fetchService.Get(result.FetchRef.Value); } if (fetch != null) { var include = fetch.Include ?? fetch.Step?.End.Include; if (fetch.Step != null) { objects = fetch.Step.IsOne ? objects.Select(v => fetch.Step.Get(v, this.acls)).Where(v => v != null).Cast <IObject>().Distinct().ToArray() : objects.SelectMany(v => { var stepResult = fetch.Step.Get(v, this.acls); return(stepResult is HashSet <object> set ? set.Cast <IObject>().ToArray() : ((Extent)stepResult)?.ToArray() ?? Array.Empty <IObject>()); }).Distinct().ToArray(); var propertyType = fetch.Step.End.PropertyType; name ??= propertyType.PluralName; } name ??= extent.ObjectType.PluralName; if (result.Skip.HasValue || result.Take.HasValue) { var paged = result.Skip.HasValue ? objects.Skip(result.Skip.Value) : objects; if (result.Take.HasValue) { paged = paged.Take(result.Take.Value); } paged = paged.ToArray(); response.AddValue(name + "_total", extent.Build(this.session, this.pull.Parameters).Count.ToString()); response.AddCollection(name, paged, include); } else { response.AddCollection(name, objects, include); } } else { name ??= extent.ObjectType.PluralName; if (result.Skip.HasValue || result.Take.HasValue) { var paged = result.Skip.HasValue ? objects.Skip(result.Skip.Value) : objects; if (result.Take.HasValue) { paged = paged.Take(result.Take.Value); } paged = paged.ToArray(); response.AddValue(name + "_total", extent.Build(this.session, this.pull.Parameters).Count.ToString()); response.AddCollection(name, paged); } else { response.AddCollection(name, objects); } } } catch (Exception e) { throw new Exception($"Extent: {extent.ObjectType}, {result}", e); } } } else { var name = extent.ObjectType.PluralName; response.AddCollection(name, objects); } }