Exemple #1
0
        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);
        }
Exemple #3
0
            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;
            }
Exemple #4
0
        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);
        }