Пример #1
0
        private Resolver ParseClassicProvider(XElement provider)
        {
            string   providerName = MakeIdentifier(provider.Attribute(AttributeNames.Name).Value);
            string   providerGuid = provider.Attribute(AttributeNames.Guid).Value;
            XElement templates    = provider.Element(ElementNames.Templates);

            GetEarliestVersions(provider);
            var nameFunction = FindNameFunction(provider);

            XElement events = provider.Element(ElementNames.Events);
            XElement tasks  = provider.Element(ElementNames.Tasks);
            IEnumerable <XElement> opcodes = provider.Descendants(ElementNames.Opcodes);
            XElement messages = this._stringTable;

            Resolver resolver = new CrimsonSymbolResolver();

            resolver.ProviderName = providerName;
            resolver.ProviderId   = Guid.Parse(providerGuid);

            resolver = this.CreateResolver(
                false,
                providerName,
                providerGuid,
                events,
                null,                 //MOF doesn't have keywords.
                tasks,
                opcodes,
                messages);

            return(resolver);
        }
Пример #2
0
        private Resolver ParseClassicProvider(XElement provider)
        {
            string providerName = MakeIdentifier(provider.Attribute(AttributeNames.Name).Value);
            string providerGuid = provider.Attribute(AttributeNames.Guid).Value;
            XElement templates = provider.Element(ElementNames.Templates);

            GetEarliestVersions(provider);
            var nameFunction = FindNameFunction(provider);

            XElement events = provider.Element(ElementNames.Events);
            XElement tasks = provider.Element(ElementNames.Tasks);
            IEnumerable<XElement> opcodes = provider.Descendants(ElementNames.Opcodes);
            XElement messages = this._stringTable;

            Resolver resolver = new CrimsonSymbolResolver();
            resolver.ProviderName = providerName;
            resolver.ProviderId = Guid.Parse(providerGuid);

            resolver = this.CreateResolver(
                                false,
                                providerName,
                                providerGuid,
                                events,
                                null, //MOF doesn't have keywords.
                                tasks,
                                opcodes,
                                messages);

            return resolver;
        }
Пример #3
0
        private Resolver CreateResolver(bool crimson,
                                        string providerName,
                                        string providerGuid,
                                        XElement events,
                                        XElement keywords,
                                        XElement tasks,
                                        IEnumerable <XElement> opcodes,
                                        XElement messages)
        {
            Resolver resolver;

            resolver = new CrimsonSymbolResolver();
            resolver.ProviderName = providerName;
            resolver.ProviderId   = Guid.Parse(providerGuid);

            if (messages != null)
            {
                var m = from t in messages.Elements()
                        select new MessagDefinition
                {
                    Id      = (string)t.Attribute(AttributeNames.Id),
                    Message = t.Attribute(AttributeNames.Value).Value
                };
                resolver.Messages = m.ToList();
            }

            resolver.Symbols = this.GetEventsFromCompiledManifests(resolver.ProviderId);

            Func <XElement, string> findMessage = (t) =>
            {
                string msg     = null;
                string message = t.Attribute(AttributeNames.Message) != null?t.Attribute(AttributeNames.Message).Value : null;

                if (!String.IsNullOrEmpty(message) && message.Length > 9)
                {
                    var stringId = message.Substring(9)       // skip "$(string."
                                   .TrimEnd(')');
                    msg = LookupResourceString(stringId);
                }
                else
                {
                    msg = t.Attribute(AttributeNames.Name) != null?t.Attribute(AttributeNames.Name).Value : null;

                    if (String.IsNullOrEmpty(msg) && t.Name != null)
                    {
                        msg = t.Name.LocalName + "_" + IntAttribute(t, AttributeNames.Value);
                    }
                }

                return(msg ?? string.Empty);
            };

            // Populate tasks
            if (tasks != null)
            {
                var tq = from t in tasks.Elements()
                         select new TaskDefinition
                {
                    Id   = IntAttribute(t, AttributeNames.Value),
                    Name = findMessage(t)
                };

                resolver.Tasks = tq.ToList();
            }

            // Populate keywords
            if (keywords != null)
            {
                Func <XElement, string> LookupKeywordName = (t) =>
                {
                    if (t.Attribute(AttributeNames.Symbol) != null && t.Attribute(AttributeNames.Symbol).Value != null)
                    {
                        return(t.Attribute(AttributeNames.Symbol).Value.ToString());
                    }

                    return(findMessage(t));
                };

                var kv = from t in keywords.Elements()
                         let mask = ulong.Parse(t.Attribute("mask").Value.Substring(2), System.Globalization.NumberStyles.AllowHexSpecifier)
                                    select new KeywordDefinition
                {
                    Name = LookupKeywordName(t),
                    Mask = mask
                };
                resolver.Keywords = kv.ToList();
            }

            // Populate opcodes
            if (opcodes != null)
            {
                var op = from o in opcodes.Elements()
                         select new OpcodeDefinition
                {
                    Id   = IntAttribute(o, AttributeNames.Value),
                    Name = findMessage(o)
                };
                resolver.Opcodes = op.ToList();
            }



            if (resolver.Symbols == null)
            {
                resolver.Symbols = new List <EventDefinition>();
            }
            if (resolver.Keywords == null)
            {
                resolver.Keywords = new List <KeywordDefinition>();
            }
            if (resolver.Tasks == null)
            {
                resolver.Tasks = new List <TaskDefinition>();
            }
            if (resolver.Opcodes == null)
            {
                resolver.Opcodes = new List <OpcodeDefinition>();
            }
            if (resolver.Messages == null)
            {
                resolver.Messages = new List <MessagDefinition>();
            }
            return(resolver);
        }
Пример #4
0
        private Resolver CreateResolver(bool crimson,
            string providerName,
            string providerGuid,
            XElement events,
            XElement keywords,
            XElement tasks,
            IEnumerable<XElement> opcodes,
            XElement messages)
        {
            Resolver resolver;
            resolver = new CrimsonSymbolResolver();
            resolver.ProviderName = providerName;
            resolver.ProviderId = Guid.Parse(providerGuid);

            if (messages != null)
            {
                var m = from t in messages.Elements()
                        select new MessagDefinition
                        {
                            Id = (string)t.Attribute(AttributeNames.Id),
                            Message = t.Attribute(AttributeNames.Value).Value
                        };
                resolver.Messages = m.ToList();
            }

            resolver.Symbols = this.GetEventsFromCompiledManifests(resolver.ProviderId);

            Func<XElement, string> findMessage = (t) =>
                {
                    string msg = null;
                    string message = t.Attribute(AttributeNames.Message) != null ? t.Attribute(AttributeNames.Message).Value : null;
                    if (!String.IsNullOrEmpty(message) && message.Length > 9)
                    {
                        var stringId = message.Substring(9)   // skip "$(string."
                                      .TrimEnd(')');
                        msg = LookupResourceString(stringId);
                    }
                    else
                    {
                        msg = t.Attribute(AttributeNames.Name) != null ? t.Attribute(AttributeNames.Name).Value : null;
                        if (String.IsNullOrEmpty(msg) && t.Name != null)
                        {
                            msg = t.Name.LocalName + "_" + IntAttribute(t, AttributeNames.Value);
                        }
                    }

                    return msg ?? string.Empty;
                };

            // Populate tasks
            if (tasks != null)
            {
                var tq = from t in tasks.Elements()
                         select new TaskDefinition
                         {
                             Id = IntAttribute(t, AttributeNames.Value),
                             Name = findMessage(t)
                         };

                resolver.Tasks = tq.ToList();
            }

            // Populate keywords
            if (keywords != null)
            {
                Func<XElement, string> LookupKeywordName = (t) =>
                    {
                        if (t.Attribute(AttributeNames.Symbol) != null && t.Attribute(AttributeNames.Symbol).Value != null)
                        {
                            return t.Attribute(AttributeNames.Symbol).Value.ToString();
                        }

                        return findMessage(t);
                    };

                var kv = from t in keywords.Elements()
                         let mask = ulong.Parse(t.Attribute("mask").Value.Substring(2), System.Globalization.NumberStyles.AllowHexSpecifier)
                         select new KeywordDefinition
                         {
                             Name = LookupKeywordName(t),
                             Mask = mask
                         };
                resolver.Keywords = kv.ToList();
            }

            // Populate opcodes
            if (opcodes != null)
            {
                var op = from o in opcodes.Elements()
                         select new OpcodeDefinition
                         {
                             Id = IntAttribute(o, AttributeNames.Value),
                             Name = findMessage(o)
                         };
                resolver.Opcodes = op.ToList();
            }

            if (resolver.Symbols == null)
                resolver.Symbols = new List<EventDefinition>();
            if (resolver.Keywords == null)
                resolver.Keywords = new List<KeywordDefinition>();
            if (resolver.Tasks == null)
                resolver.Tasks = new List<TaskDefinition>();
            if (resolver.Opcodes == null)
                resolver.Opcodes = new List<OpcodeDefinition>();
            if (resolver.Messages == null)
                resolver.Messages = new List<MessagDefinition>();
            return resolver;
        }