/// <summary>
        /// Gets the build.
        /// </summary>
        /// <param name="buildDescriptor">The build descriptor.</param>
        /// <returns></returns>
        public Build GetBuild(BuildDescriptor buildDescriptor)
        {
            Build build = new NullBuild(buildDescriptor);

            var url = new XmlApiPrepender().Prepend(build.Url);

            if (buildDescriptor != null)
            {
                var xml = XmlService.GetPage(url);

                if (xml.IsValid)
                {
                    build = new BuildMapper().Map(xml.Contents);
                }
            }

            return build;
        }
        /// <summary>
        /// Gets the full <see cref="Job"/> from the given <see cref="JobDescriptor"/>.
        /// </summary>
        /// <param name="jobDescriptor">The job descriptor.</param>
        /// <returns></returns>
        public Job GetJob(JobDescriptor jobDescriptor)
        {
            Job job = new NullJob(jobDescriptor);

            var url = new XmlApiPrepender().Prepend(jobDescriptor.Url);

            var xml = XmlService.GetPage(url);

            if (xml.IsValid)
            {
                job = new JobMapper().Map(xml.Contents);

                /* Get Builds (takes a while...)
                var descriptors = mapper.MapMany(xml.Contents, "//build");
                job.Builds = BuildService.GetBuilds(descriptors); */

                // Get Last Build
                var firstBuild = mapper.Map(xml.Contents, "//firstBuild");
                job.FirstBuild = BuildService.GetBuild(firstBuild);

                // Get Last Build
                var lastBuild = mapper.Map(xml.Contents, "//lastBuild");
                job.LastBuild = BuildService.GetBuild(lastBuild);

                // Get Last Failed Build
                var lastFailedBuild = mapper.Map(xml.Contents, "//lastFailedBuild");
                job.LastFailedBuild = BuildService.GetBuild(lastFailedBuild);

                // Get Last Stable Build
                var lastStableBuild = mapper.Map(xml.Contents, "//lastStableBuild");
                job.LastStableBuild = BuildService.GetBuild(lastStableBuild);

                // Get Last Successful Build
                var lastSuccessfulBuild = mapper.Map(xml.Contents, "//lastSuccessfulBuild");
                job.LastSuccessfulBuild = BuildService.GetBuild(lastSuccessfulBuild);
            }

            return job;
        }
        /// <summary>
        /// Gets the Hudson <see cref="Server"/>.
        /// </summary>
        /// <param name="url">The URL of the server.</param>
        /// <returns></returns>
        public Server GetServer(Uri url)
        {
            Server server = new NullServer(url);

            url = new XmlApiPrepender().Prepend(url);

            var page = XmlService.GetPage(url);

            if (page.IsValid)
            {
                server = new ServerMapper().Map(page.Contents);

                var descriptors = new JobDescriptorMapper().Map(page.Contents);

                foreach (var descriptor in descriptors)
                {
                    var job = JobService.GetJob(descriptor);

                    server.Jobs.Add(job);
                }
            }

            return server;
        }
 public void SetUp()
 {
     prepender = new XmlApiPrepender();
 }