private ReadableQueryPart GetReadableQueryPart()

in Source/Actions/Microsoft.Deployment.Actions.AzureCustom/PowerApp/ConfigurePowerAppTables.cs [72:154]


        private ReadableQueryPart GetReadableQueryPart(string query)
        {
            ReadableQueryPart readableQueryPart = new ReadableQueryPart();

            StringBuilder sbPart = new StringBuilder();
            StringBuilder sbRead = new StringBuilder();

            bool isOpenQuote = false;
            bool isTerminated = false;

            for (int i = 0; i < query.Length; i++)
            {
                switch (query[i])
                {
                    case '"':
                        if (isOpenQuote)
                        {
                            isTerminated = true;
                        }
                        isOpenQuote = !isOpenQuote;
                        break;
                    case ' ':
                        if (isOpenQuote)
                        {
                            sbPart.Append(query[i]);
                        }
                        else
                        {
                            isTerminated = true;
                        }
                        break;
                    case '(':
                        if (isOpenQuote)
                        {
                            sbPart.Append(query[i]);
                        }
                        break;
                    case ')':
                        if (isOpenQuote)
                        {
                            sbPart.Append(query[i]);
                        }
                        else
                        {
                            isTerminated = true;
                        }
                        break;
                    default:
                        sbPart.Append(query[i]);
                        break;
                }

                if (isTerminated || i == query.Length - 1)
                {
                    string read = sbPart.ToString();
                    if (read.Length > 0)
                    {
                        if (read[0] == '-')
                        {
                            string detail = $"{TWITTER_OPERATOR_DOES_NOT_CONTAIN} \"{read.Substring(1)}\"";
                            readableQueryPart.Details.Add(detail);
                            sbRead.Append(detail);
                        }
                        else
                        {
                            string detail = $"{TWITTER_OPERATOR_CONTAINS} \"{read}\"";
                            readableQueryPart.Details.Add(detail);
                            sbRead.Append(detail);
                        }
                        if (i < query.Length - 2)
                        {
                            sbRead.Append(TWITTER_OPERATOR_AND);
                        }
                    }
                    sbPart.Clear();
                    isTerminated = false;
                }
            }

            readableQueryPart.Query = sbRead.ToString();

            return readableQueryPart;
        }