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); }
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); } } }
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); }
public TokenValueProvider(ParsedToken token, bool isExplicit) { this.ParsedToken = token; this.IsExplicit = isExplicit; }
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); } }
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); } }