private static void TestXPathParser() { var parser = new XPathParser <string>(); var builder = new XPathStringBuilder(); Queue <IXPathPart> queue; parser.Parse("/Person[@FirstName]", builder); queue = builder.PartQueue; foreach (var part in queue) { var debugInfo = part.ToString(); } parser = new XPathParser <string>(); builder = new XPathStringBuilder(); parser.Parse("$ABCCompany/Person[@FirstName]", builder); queue = builder.PartQueue; foreach (var part in queue) { var debugInfo = part.ToString(); } }
public QueryPathAttribute(string xpathExpression, QueryKind kind = QueryKind.None) { var parser = new XPathParser <string>(); var builder = new XPathStringBuilder(); var id = string.Empty; var path = xpathExpression; this.XPathExpression = xpathExpression; this.QueryPathKind = kind; parser.Parse(path, builder); this.PartQueue = builder.PartQueue; }
public static IQueryable <T> GenerateByID <T>(this IProviderService service, string id) { var queue = new Queue <string>(); var parser = new XPathParser <string>(); var builder = new XPathStringBuilder(); parser.Parse(id, builder); var axisElement = builder.AxisElementQueue.Last(); var method = service.GetType().GetMethods().Single(m => m.ReturnType.Name == "IQueryable`1" && m.GetParameters().Length == 0 && m.ReturnType.GetGenericArguments().Any(a => a.Name == axisElement.Element)); service.LogGenerateByID(id, method); var results = (IQueryable <IBase>)method.Invoke(service, null); service.PostLogGenerateByID(); return(results.Where(b => b.ID == id).Cast <T>()); }
public static string GetID(this IBase baseObject) { if (CodeInterfaceExtensions.DebugInfoShowOptions.HasFlag(DebugInfoShowOptions.ShowCondensedID)) { var parser = new XPathParser <string>(); var builder = new XPathStringBuilder(); var id = string.Empty; parser.Parse(baseObject.ID, builder); id = string.Join("../", builder.AxisElementQueue.Select(e => e.Element)); id += "[" + builder.AxisElementQueue.Last().Predicates.First().ToString() + "]"; return(id); } else { return(baseObject.ID); } }
public static string GetID(this IBase baseObject) { if (AbstraXExtensions.DebugInfoShowOptions.HasFlag(DebugInfoShowOptions.ShowCondensedID)) { var parser = new XPathParser<string>(); var builder = new XPathStringBuilder(); var id = string.Empty; parser.Parse(baseObject.ID, builder); id = string.Join("../", builder.PartQueue.OfType<XPathElement>().Select(e => e.Text)); id += "[" + builder.PartQueue.OfType<XPathElement>().Last().Predicates.First().ToString() + "]"; return id; } else { return baseObject.ID; } }
public static IBase GenerateByID(this IAbstraXProviderService service, string id) { var queue = new Queue<string>(); var parser = new XPathParser<string>(); var builder = new XPathStringBuilder(); parser.Parse(id, builder); if (builder.PartQueue.Count == 1) { var axisElement = builder.PartQueue.OfType<XPathElement>().Single(); var method = service.GetType().GetMethods().Single(m => m.ReturnType.Name == axisElement.Text && m.GetParameters().Length == 0); service.LogGenerateByID(id, method); var rootObject = (IBase)method.Invoke(service, null); service.PostLogGenerateByID(); return rootObject; } else { var axisElement = builder.PartQueue.OfType<XPathElement>().Last(); var method = service.GetType().GetMethods().Single(m => m.ReturnType.Name == "IQueryable`1" && m.GetParameters().Length == 0 && m.ReturnType.GetGenericArguments().Any(a => a.Name == axisElement.Text)); service.LogGenerateByID(id, method); var results = (IQueryable<IBase>)method.Invoke(service, null); service.PostLogGenerateByID(); return results.Where(b => b.ID == id).Single(); } }