public SubsetList CreateSubsets(IEnumerable <SubResult> subResults) { SubsetList result = new SubsetList(); if (subResults == null) { return(result); } foreach (SubResult subResult in subResults) { DbSetInfo dbSetInfo = _metadata.DbSets[subResult.dbSetName]; if (result.Any(r => r.dbSetName == subResult.dbSetName)) { throw new DomainServiceException(string.Format("The included sub results already have DbSet {0} entities", dbSetInfo.dbSetName)); } RowGenerator rowGenerator = new RowGenerator(dbSetInfo, subResult.Result, _dataHelper); Subset current = new Subset { dbSetName = dbSetInfo.dbSetName, rows = rowGenerator.CreateDistinctRows(), names = dbSetInfo.GetNames() }; result.Add(current); } return(result); }
public SubsetList CreateSubsets(IEnumerable <SubResult> subResults) { var result = new SubsetList(); if (subResults == null) { return(result); } var metadata = MetadataHelper.GetInitializedMetadata(_domainService); foreach (var subResult in subResults) { var dbSetInfo = metadata.dbSets[subResult.dbSetName]; if (result.Any(r => r.dbSetName == subResult.dbSetName)) { throw new DomainServiceException(string.Format("The included results already have {0} entities", dbSetInfo.dbSetName)); } var rowGenerator = new RowGenerator(dbSetInfo, subResult.Result, _dataHelper); var current = new Subset { dbSetName = dbSetInfo.dbSetName, rows = rowGenerator.CreateDistinctRows(), names = dbSetInfo.GetNames() }; result.Add(current); } return(result); }
public void SetEntry(XivImc info, int subsetID = -1, string slot = "", bool allowNew = false) { // Variant IDs are 1 based, not 0 based. var index = subsetID - 1; // Invalid Index, return default. if ((index >= SubsetCount && !allowNew) || index < 0) { index = -1; } // Test for getting default set. var subset = DefaultSubset; if (index >= 0) { if (index >= SubsetCount) { subset = new List <XivImc>(); if (TypeIdentifier == ImcType.Set) { // Five entries for set types. subset.Add(new XivImc()); subset.Add(new XivImc()); subset.Add(new XivImc()); subset.Add(new XivImc()); subset.Add(new XivImc()); } else { // One entry for nonset types. subset.Add(info); } SubsetList.Add(subset); } else { subset = SubsetList[index]; } } // Get which offset the slot uses. var idx = 0; if (slot != null && SlotOffsetDictionary.ContainsKey(slot) && SlotOffsetDictionary[slot] < subset.Count) { idx = SlotOffsetDictionary[slot]; } // Assign info. subset[idx] = info; }
public async Task Invoke(QueryContext <TService> ctx) { DbSetInfo dbSetInfo = ctx.Request.GetDbSetInfo() ?? throw new InvalidOperationException($"Could not get the DbSet for {ctx.Request.dbSetName}"); IDataHelper <TService> dataHelper = ctx.ServiceContainer.GetDataHelper(); IServiceOperationsHelper <TService> serviceHelper = ctx.ServiceContainer.GetServiceHelper(); RunTimeMetadata metadata = ctx.Service.GetMetadata(); MethodDescription method = metadata.GetQueryMethod(ctx.Request.dbSetName, ctx.Request.queryName); LinkedList <object> methParams = new LinkedList <object>(); for (int i = 0; i < method.parameters.Count; ++i) { methParams.AddLast(ctx.Request.paramInfo.GetValue(method.parameters[i].name, method, dataHelper)); } RequestContext req = QueryContext <TService> .CreateRequestContext(ctx.Service, ctx.Request); using (RequestCallContext callContext = new RequestCallContext(req)) { MethodInfoData methodData = method.GetMethodData(); object instance = serviceHelper.GetMethodOwner(methodData); object invokeRes = methodData.MethodInfo.Invoke(instance, methParams.ToArray()); QueryResult queryResult = (QueryResult)await serviceHelper.GetMethodResult(invokeRes); IEnumerable <object> entities = queryResult.Result; int? totalCount = queryResult.TotalCount; RowGenerator rowGenerator = new RowGenerator(dbSetInfo, entities, dataHelper); IEnumerable <Row> rows = rowGenerator.CreateRows(); SubsetsGenerator subsetsGenerator = new SubsetsGenerator(metadata, dataHelper); SubsetList subResults = subsetsGenerator.CreateSubsets(queryResult.subResults); ctx.Response.names = dbSetInfo.GetNames(); ctx.Response.totalCount = totalCount; ctx.Response.rows = rows; ctx.Response.subsets = subResults; ctx.Response.extraInfo = queryResult.extraInfo; } await _next(ctx); }