Beispiel #1
0
        public IEnumerable <TOut> ExecuteQuery <TOut>(string cypherQuery)
        {
            var request  = CypherQueryRequest.Create(cypherQuery);
            var srequest = _serializer.Serialize(request);

            Logger.Current.Log("Executing: " + srequest, LogLevel.Info);
            var responseTask = _webClient.PostAsync(_transactionUri, srequest);

            responseTask.Wait();
            var readTask = responseTask.Result.Content.ReadAsStringAsync();

            readTask.Wait();
            var response = readTask.Result;

            Logger.Current.Log("Response: " + response, LogLevel.Info);
            var cypherResponse = _serializer.Deserialize <CypherResponse <TOut> >(response);

            if (cypherResponse.Errors.Any())
            {
                throw new CypherResponseException(cypherResponse.Errors.Select(e => e.Message).ToArray());
            }

            if (!_isInitialized)
            {
                _transactionUri = cypherResponse.Commit.Substring(0, cypherResponse.Commit.Length - ("/commit").Length);
                _isInitialized  = true;
            }

            return(cypherResponse.Results ?? Enumerable.Empty <TOut>());
        }
Beispiel #2
0
        public static Result <UnityWebRequest, WebError> CreateRequest(string url, IWebAction action, WebActionData actionData, IWebSerializer serializer)
        {
            if (action.Method == WebMethod.POST)
            {
                object[] values = actionData.values;

                var form = new Dictionary <string, object>();
                for (int i = 0; i < values.Length; i++)
                {
                    form.Add(action.ParamNames[i], values[i]);
                }

                return(serializer.Serialize(form).Select(postData =>
                {
                    var request = UnityWebRequest.Post(url, postData);
                    serializer.OnBeforeRequest(request);
                    return request;
                }));
            }
            else
            {
                var request = UnityWebRequest.Get(url);
                serializer.OnBeforeRequest(request);
                return(request);
            }
        }
        public IEnumerable <TOut> ExecuteQuery <TOut>(string cypherQuery)
        {
            var request  = CypherQueryRequest.Create(cypherQuery);
            var srequest = _serializer.Serialize(request);

            Logger.Current.Log("Executing: " + srequest, LogLevel.Info);
            var responseTask = _webClient.PostAsync(_baseUri, srequest);
            var response     = responseTask.Result.Content.ReadAsStringAsync().Result;

            Logger.Current.Log("Response: " + response, LogLevel.Info);
            var cypherResponse = _serializer.Deserialize <CypherResponse <TOut> >(response);

            if (cypherResponse.Errors.Any())
            {
                throw new CypherResponseException(cypherResponse.Errors);
            }
            return(cypherResponse.Results);
        }
        public IEnumerable <TOut> ExecuteQuery <TOut>(string cypherQuery)
        {
            var request  = CypherQueryRequest.Create(cypherQuery);
            var srequest = _serializer.Serialize(request);

            Logger.Current.Log("Executing: " + srequest, LogLevel.Info);
            var responseTask = _webClient.PostAsync(_baseUri, _username, _password, srequest);

            responseTask.Wait();
            var readTask = responseTask.Result.Content.ReadAsStringAsync();

            readTask.Wait();
            var response = readTask.Result;

            Logger.Current.Log("Response: " + response, LogLevel.Info);
            var cypherResponse = _serializer.Deserialize <CypherResponse <TOut> >(response);

            if (cypherResponse.Errors.Any())
            {
                throw new CypherResponseException(cypherResponse.Errors.Select(e => e.Message).ToArray());
            }

            return(cypherResponse.Results ?? Enumerable.Empty <TOut>());
        }
Beispiel #5
0
        /// <summary>
        /// Serializes and sends table data back to the client
        /// </summary>
        /// <param name="context"></param>
        private void SendTableData(HttpContext context, string language, string db, string[] tablePath, ResponseBucket cacheResponse)
        {
            //// TODO: Limit data size?
            //string data = "";
            //using (var stream = new StreamReader(context.Request.InputStream))
            //{
            //    data = stream.ReadToEnd();
            //}

            var tableQuery = JsonHelper.Deserialize <TableQuery>(cacheResponse.PostData) as TableQuery;

            if (tableQuery.Response == null || tableQuery.Response.Format == null)
            {
                tableQuery.Response = new QueryResponse()
                {
                    Format = _defaultResponseFormat
                };
            }

            // Initialize the builder
            PCAxis.Paxiom.IPXModelBuilder builder = GetPXBuilder(language, db, tablePath);
            builder.DoNotApplyCurrentValueSet = true;  // DoNotApplyCurrentValueSet means the "client that made the request" is an api(, not a GUI) so that
                                                       // CNMM2.4 property DefaultInGUI (for Valueset/grouping) should not be used
            builder.SetPreferredLanguage(language);
            builder.BuildForSelection();

            // Process selections
            List <PCAxis.Paxiom.Selection> selections;

            try
            {
                selections = PCAxisRepository.BuildSelections(builder, tableQuery);
            }

            catch (Exception ex)
            {
                var message = ex is HttpException ? ex.Message : "Parameter error";

                cacheResponse.ResponseData = context.Response.ContentEncoding.GetBytes(Error(message, false));
                context.SendJSONError(cacheResponse, 400, true);
                // Logs usage
                _usageLogger.Info(String.Format("url={0}, type=error, caller={1}, cached=false, message=Parameter error", context.Request.RawUrl, context.Request.UserHostAddress));
                return;
            }

            // Check that the number of selected cells do not exceed the limit
            long cellCount = 1;

            foreach (var sel in selections)
            {
                if (sel.ValueCodes.Count > 0)
                {
                    cellCount *= sel.ValueCodes.Count;
                }
            }
            if (cellCount > Settings.Current.FetchCellLimit)
            {
                Write403Response(context);
                return;
            }

            builder.BuildForPresentation(selections.ToArray());

            // Output handling starts here
            context.Response.Clear();

            IWebSerializer serializer = WebSerializerSwitch.GetSerializer(tableQuery.Response.Format);

            //serializer.Serialize(builder.Model, context.Response);
            serializer.Serialize(builder.Model, cacheResponse);
            //context.Response.AddHeader("Content-Type", cacheResponse.ContentType);
            //context.Response.OutputStream.Write(cacheResponse.ResponseData, 0, cacheResponse.ResponseData.Length);
            context.Send(cacheResponse, true);
            //Logs usage
            _usageLogger.Info(String.Format("url={0}, type=data, caller={3}, cached=false, format={1}, matrix-size={2}", context.Request.RawUrl, tableQuery.Response.Format, builder.Model.Data.MatrixSize, context.Request.UserHostAddress));
        }