Esempio n. 1
0
 public TranslateInstanceValueProvider(ParsedToken token, bool isExplicit, Action <bool, string> addError)
 {
     this.ParsedToken = token;
     this.Route       = token.QueryToken.GetPropertyRoute();
     this.IsExplicit  = isExplicit;
     this.EntityToken = DeterminEntityToken(token.QueryToken, addError);
 }
Esempio n. 2
0
        internal void SynchronizeToken(ParsedToken parsedToken, string remainingText)
        {
            if (parsedToken.QueryToken == null)
            {
                string tokenString = parsedToken.String;

                if (tokenString.StartsWith("$"))
                {
                    string v = tokenString.TryBefore('.') ?? tokenString;

                    if (!Variables.TryGetValue(v, out ValueProviderBase prov))
                    {
                        SafeConsole.WriteLineColor(ConsoleColor.Magenta, "Variable '{0}' not found!".FormatWith(v));
                    }

                    var provToken = prov as TokenValueProvider;
                    if (!(provToken is TokenValueProvider))
                    {
                        SafeConsole.WriteLineColor(ConsoleColor.Magenta, "Variable '{0}' is not a Query Token");
                    }

                    var part = provToken?.ParsedToken;

                    if (part != null && part.QueryToken == null)
                    {
                        SafeConsole.WriteLineColor(ConsoleColor.Magenta, "Variable '{0}' is not fixed yet! currently: '{1}'".FormatWith(v, part.String));
                    }

                    var after = tokenString.TryAfter('.');

                    tokenString =
                        (part == null ? "Unknown" :
                         part.QueryToken == null ? part.String :
                         part.QueryToken.FullKey()) + (after == null ? null : ("." + after));
                }

                SafeConsole.WriteColor(ConsoleColor.Red, "  " + tokenString);
                Console.WriteLine(" " + remainingText);

                FixTokenResult result = QueryTokenSynchronizer.FixToken(Replacements, tokenString, out QueryToken? token, QueryDescription, SubTokensOptions.CanElement | SubTokensOptions.CanAnyAll /*not always*/, remainingText, allowRemoveToken: false, allowReGenerate: ModelType != null);
                switch (result)
                {
                case FixTokenResult.Nothing:
                case FixTokenResult.Fix:
                    this.HasChanges        = true;
                    parsedToken.QueryToken = token;
                    parsedToken.String     = token !.FullKey();
                    break;

                case FixTokenResult.SkipEntity:
                case FixTokenResult.RemoveToken:
                case FixTokenResult.ReGenerateEntity:
                    throw new TemplateSyncException(result);
                }
            }
        }
Esempio n. 3
0
        public static ParsedToken TryParseToken(string tokenString, SubTokensOptions options, QueryDescription qd, ScopedDictionary <string, ValueProviderBase> variables, Action <bool, string> addError)
        {
            ParsedToken result = new ParsedToken {
                String = tokenString
            };

            if (tokenString.StartsWith("$"))
            {
                string v = tokenString.TryBefore('.') ?? tokenString;

                if (!variables.TryGetValue(v, out ValueProviderBase vp))
                {
                    addError(false, "Variable '{0}' is not defined at this scope".FormatWith(v));
                    return(result);
                }

                var tvp = vp as TokenValueProvider;

                if (tvp == null)
                {
                    addError(false, "Variable '{0}' is not a token".FormatWith(v));
                    return(result);
                }

                if (tvp.ParsedToken.QueryToken == null)
                {
                    addError(false, "Variable '{0}' is not a correctly parsed".FormatWith(v));
                    return(result);
                }

                var after = tokenString.TryAfter('.');

                tokenString = tvp.ParsedToken.QueryToken.FullKey() + (after == null ? null : ("." + after));
            }

            try
            {
                result.QueryToken = QueryUtils.Parse(tokenString, qd, options);
            }
            catch (Exception ex)
            {
                addError(false, ex.Message);
            }
            return(result);
        }
Esempio n. 4
0
 public TokenValueProvider(ParsedToken token, bool isExplicit)
 {
     this.ParsedToken = token;
     this.IsExplicit  = isExplicit;
 }
Esempio n. 5
0
        public static ValueProviderBase TryParse(string type, string token, string variable, Type modelType, PropertyInfo modelProperty, QueryDescription qd, ScopedDictionary <string, ValueProviderBase> variables, Action <bool, string> addError)
        {
            switch (type)
            {
            case "":
            {
                if (token.StartsWith("$"))
                {
                    string v = token.TryBefore('.') ?? token;

                    if (!variables.TryGetValue(v, out ValueProviderBase vp))
                    {
                        addError(false, "Variable '{0}' is not defined at this scope".FormatWith(v));
                        return(null);
                    }

                    if (!(vp is TokenValueProvider))
                    {
                        return(new ContinueValueProvider(token.TryAfter('.'), vp, addError));
                    }
                }

                ParsedToken result = ParsedToken.TryParseToken(token, SubTokensOptions.CanElement, qd, variables, addError);

                if (result.QueryToken != null && TranslateInstanceValueProvider.IsTranslateInstanceCanditate(result.QueryToken))
                {
                    return new TranslateInstanceValueProvider(result, false, addError)
                           {
                               Variable = variable
                           }
                }
                ;
                else
                {
                    return new TokenValueProvider(result, false)
                           {
                               Variable = variable
                           }
                };
            }

            case "q":
            {
                ParsedToken result = ParsedToken.TryParseToken(token, SubTokensOptions.CanElement, qd, variables, addError);

                return(new TokenValueProvider(result, true)
                    {
                        Variable = variable
                    });
            }

            case "t":
            {
                ParsedToken result = ParsedToken.TryParseToken(token, SubTokensOptions.CanElement, qd, variables, addError);

                return(new TranslateInstanceValueProvider(result, true, addError)
                    {
                        Variable = variable
                    });
            }

            case "m":
                return(new ModelValueProvider(token, modelType, modelProperty, addError)
                {
                    Variable = variable
                });

            case "g":
                return(new GlobalValueProvider(token, addError)
                {
                    Variable = variable
                });

            case "d":
                return(new DateValueProvider(token, addError)
                {
                    Variable = variable
                });

            default:
                addError(false, "{0} is not a recognized value provider (q:Query, t:Translate, m:Model, g:Global or just blank)");
                return(null);
            }
        }
Esempio n. 6
0
        public static ValueProviderBase?TryParse(string typeToken, string variable, ITemplateParser tp)
        {
            var type  = typeToken.TryBefore(":") ?? "";
            var token = typeToken.TryAfter(":") ?? typeToken;

            switch (type)
            {
            case "":
            {
                if (token.StartsWith("$"))
                {
                    string v = token.TryBefore('.') ?? token;

                    if (!tp.Variables.TryGetValue(v, out ValueProviderBase? vp))
                    {
                        tp.AddError(false, "Variable '{0}' is not defined at this scope".FormatWith(v));
                        return(null);
                    }

                    if (!(vp is TokenValueProvider))
                    {
                        return(new ContinueValueProvider(token.TryAfter('.'), vp, tp.AddError));
                    }
                }

                ParsedToken result = ParsedToken.TryParseToken(token, SubTokensOptions.CanElement, tp.QueryDescription, tp.Variables, tp.AddError);

                if (result.QueryToken != null && TranslateInstanceValueProvider.IsTranslateInstanceCanditate(result.QueryToken))
                {
                    return new TranslateInstanceValueProvider(result, false, tp.AddError)
                           {
                               Variable = variable
                           }
                }
                ;
                else
                {
                    return new TokenValueProvider(result, false)
                           {
                               Variable = variable
                           }
                };
            }

            case "q":
            {
                ParsedToken result = ParsedToken.TryParseToken(token, SubTokensOptions.CanElement, tp.QueryDescription, tp.Variables, tp.AddError);

                return(new TokenValueProvider(result, true)
                    {
                        Variable = variable
                    });
            }

            case "t":
            {
                ParsedToken result = ParsedToken.TryParseToken(token, SubTokensOptions.CanElement, tp.QueryDescription, tp.Variables, tp.AddError);

                return(new TranslateInstanceValueProvider(result, true, tp.AddError)
                    {
                        Variable = variable
                    });
            }

            case "m":
                return(new ModelValueProvider(token, tp.ModelType, tp.AddError)
                {
                    Variable = variable
                });

            case "g":
                return(new GlobalValueProvider(token, tp.AddError)
                {
                    Variable = variable
                });

            case "d":
                return(new DateValueProvider(token, tp.AddError)
                {
                    Variable = variable
                });

            default:
                tp.AddError(false, "{0} is not a recognized value provider (q:Query, t:Translate, m:Model, g:Global or just blank)");
                return(null);
            }
        }