private BugzillaProfile Parse(XmlDocument document)
        {
            var result = new BugzillaProfile();
            var root   = document.SelectSingleNode("./{0}".Fmt(LegacyBugzillaProfileFields.XmlRoot));

            result.Url           = GetValueByName(root, LegacyBugzillaProfileFields.Url);
            result.Login         = GetValueByName(root, LegacyBugzillaProfileFields.Login);
            result.Password      = GetValueByName(root, LegacyBugzillaProfileFields.Password);
            result.Project       = Int32.Parse(GetValueByName(root, LegacyBugzillaProfileFields.Project), CultureInfo.InvariantCulture);
            result.SavedSearches = GetValueByName(root, LegacyBugzillaProfileFields.Queries);

            var mapping = GetValueByName(root, LegacyBugzillaProfileFields.Maps);
            var parser  = new LegacyMappingParser();

            if (!string.IsNullOrEmpty(mapping))
            {
                parser.Maps = mapping;

                MapUsers(result, parser);
                MapPriorities(result, parser);
                MapSeverities(result, parser);
                MapEntityState(result, parser);
                MapRoles(result, root);
            }

            return(result);
        }
        private void MapPriorities(IBugTrackingMappingSource result, LegacyMappingParser parser)
        {
            foreach (string priority in parser.Priorities.Keys)
            {
                Func <Priority, string> comparator = x => x.Name;
                var tpPriority = GetPriorityBy(parser.Priorities[priority], comparator);

                if (tpPriority != null)
                {
                    result.PrioritiesMapping.Add(new MappingElement {
                        Key = priority, Value = Create(tpPriority)
                    });
                }
            }
        }
        private void MapEntityState(BugzillaProfile result, LegacyMappingParser parser)
        {
            var project = _context.Projects.Single(p => p.ProjectID == result.Project);
            var process = _context.Processes.SingleOrDefault(p => p.ProcessID == project.ProcessID);

            foreach (string state in parser.EntityStates.Keys)
            {
                Func <EntityState, string> comparator = x => x.Name;
                var tpState = GetEntityStateBy(process, BugzillaConstants.BugEntityTypeId, parser.EntityStates[state], comparator);

                if (tpState != null)
                {
                    result.StatesMapping.Add(new MappingElement {
                        Key = state, Value = Create(tpState)
                    });
                }
            }
        }
        private void MapUsers(BugzillaProfile result, LegacyMappingParser parser)
        {
            foreach (string user in parser.Users.Keys)
            {
                var tpUser = GetUserForProjectBy(result.Project, parser.Users[user], x => x.Login);
                if (tpUser != null)
                {
                    result.UserMapping.Add(new MappingElement {
                        Key = user, Value = Create(tpUser)
                    });
                    continue;
                }

                tpUser = GetUserForProjectBy(result.Project, parser.Users[user], x => x.Email);
                if (tpUser != null)
                {
                    result.UserMapping.Add(new MappingElement {
                        Key = user, Value = Create(tpUser)
                    });
                }
            }
        }