71 lines
3.1 KiB
C#
Executable File
71 lines
3.1 KiB
C#
Executable File
using System;
|
|
using System.Web;
|
|
using ThoughtWorks.CruiseControl.Core;
|
|
using ThoughtWorks.CruiseControl.Core.Util;
|
|
using ThoughtWorks.CruiseControl.WebDashboard.Config;
|
|
using ThoughtWorks.CruiseControl.WebDashboard.IO;
|
|
using ThoughtWorks.CruiseControl.WebDashboard.MVC;
|
|
|
|
namespace ThoughtWorks.CruiseControl.WebDashboard.Dashboard.XmlDownloader
|
|
{
|
|
// ToDo - this is untested. We are going to make the main MVC controller an HttpHandler too, and at that point
|
|
// this can become just another action (albeit one without UI decorators and setting a Content Type)
|
|
public class XmlDownloader : IHttpHandler
|
|
{
|
|
public void ProcessRequest(HttpContext context)
|
|
{
|
|
ObjectGiver objectGiver = CreateObjectGiver(context);
|
|
|
|
ICruiseRequest cruiseRequest = (ICruiseRequest) objectGiver.GiveObjectByType(typeof(ICruiseRequest));
|
|
if (cruiseRequest.ServerName == "" || cruiseRequest.ProjectName == "" || cruiseRequest.BuildName == "")
|
|
{
|
|
throw new Exception("All of Server, Project and Build Names must be specified on request in order to retrieve a build log");
|
|
}
|
|
|
|
string log = ((IBuildRetriever) objectGiver.GiveObjectByType(typeof(IBuildRetriever))).GetBuild(cruiseRequest.BuildSpecifier).Log;
|
|
|
|
context.Response.ContentType = "Text/XML";
|
|
|
|
// None of this seems to have an effect - doh!
|
|
// context.Response.Cache.SetExpires(DateTime.Now.AddDays(1));
|
|
// context.Response.Cache.SetCacheability(HttpCacheability.Public);
|
|
// context.Response.Cache.VaryByParams[RequestWrappingCruiseRequest.ServerQueryStringParameter] = true;
|
|
// context.Response.Cache.VaryByParams[RequestWrappingCruiseRequest.ProjectQueryStringParameter] = true;
|
|
// context.Response.Cache.VaryByParams[RequestWrappingCruiseRequest.BuildQueryStringParameter] = true;
|
|
|
|
context.Response.Write(log);
|
|
context.Response.Flush();
|
|
}
|
|
|
|
public bool IsReusable
|
|
{
|
|
get { return true; }
|
|
}
|
|
|
|
private ObjectGiver CreateObjectGiver(HttpContext context)
|
|
{
|
|
// ToDo - merge this with the main request controller setup
|
|
ObjectGiverAndRegistrar giverAndRegistrar = new ObjectGiverAndRegistrar();
|
|
HttpRequest request = context.Request;
|
|
giverAndRegistrar.AddTypedObject(typeof(HttpRequest), request);
|
|
giverAndRegistrar.AddTypedObject(typeof(HttpContext), context);
|
|
giverAndRegistrar.AddTypedObject(typeof(ObjectGiver), giverAndRegistrar);
|
|
|
|
// Add functionality to object giver to handle this?
|
|
giverAndRegistrar.AddTypedObject(typeof(IRequest), new AggregatedRequest(new NameValueCollectionRequest(request.Form), new NameValueCollectionRequest(request.QueryString)));
|
|
|
|
giverAndRegistrar.SetImplementationType(typeof(IPathMapper), typeof(HttpPathMapper));
|
|
|
|
giverAndRegistrar.SetDependencyImplementationForType(typeof(PathMappingMultiTransformer), typeof(IMultiTransformer), typeof (HtmlAwareMultiTransformer));
|
|
|
|
IConfigurationGetter configurationGetter = (IConfigurationGetter) giverAndRegistrar.GiveObjectByType(typeof(IConfigurationGetter));
|
|
if (configurationGetter == null)
|
|
{
|
|
throw new CruiseControlException("Unable to instantiate configuration getter");
|
|
}
|
|
|
|
return giverAndRegistrar;
|
|
}
|
|
}
|
|
}
|