Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 5
0
        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;
            }
        }
Esempio n. 6
0
        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();
            }
        }