Files
2025-09-29 00:52:08 +02:00

211 lines
5.3 KiB
C#
Executable File

using System.Drawing;
using ThoughtWorks.CruiseControl.Core.Reporting.Dashboard.Navigation;
using ThoughtWorks.CruiseControl.Core.Util;
using ThoughtWorks.CruiseControl.Remote;
namespace ThoughtWorks.CruiseControl.WebDashboard.Dashboard
{
public class ProjectGridRow
{
private readonly ProjectStatus status;
private readonly IServerSpecifier serverSpecifier;
private readonly string url;
public ProjectGridRow(ProjectStatus status, IServerSpecifier serverSpecifier, string url)
{
this.status = status;
this.serverSpecifier = serverSpecifier;
this.url = url;
}
public string Name
{
get { return status.Name; }
}
public string ServerName
{
get { return serverSpecifier.ServerName; }
}
public string Category
{
get { return status.Category; }
}
public string BuildStatus
{
get { return status.BuildStatus.ToString(); }
}
public string BuildStatusHtmlColor
{
get { return CalculateHtmlColor(status.BuildStatus); }
}
public string LastBuildDate
{
get { return DateUtil.FormatDate(status.LastBuildDate); }
}
public string NextBuildTime
{
get { return DateUtil.FormatDate(status.NextBuildTime); }
}
public string LastBuildLabel
{
get { return (status.LastBuildLabel != null ? status.LastBuildLabel : "no build available"); }
}
public string Status
{
get { return status.Status.ToString(); }
}
public string Activity
{
get { return status.Activity.ToString(); }
}
public string CurrentMessage
{
get { return status.CurrentMessage; }
}
public string LastChangelist
{
get { return status.LastChangelist; }
}
public System.TimeSpan TotalIntegrationTime
{
get { return status.TotalIntegrationTime; }
}
public System.DateTime StartTime
{
get { return status.StartTime; }
}
public string Url
{
get { return url; }
}
public string Queue
{
get { return status.Queue; }
}
public int QueuePriority
{
get { return status.QueuePriority; }
}
public string StartStopButtonName
{
get { return (status.Status == ProjectIntegratorState.Running) ? "StopBuild" : "StartBuild"; }
}
public string StartStopButtonValue
{
get { return (status.Status == ProjectIntegratorState.Running) ? "Stop" : "Start"; }
}
public string ForceAbortBuildButtonName
{
get { return (status.Activity != ProjectActivity.Building) ? "ForceBuild" : "AbortBuild"; }
}
public string ForceAbortBuildButtonValue
{
get { return (status.Activity != ProjectActivity.Building) ? "Force" : "Abort"; }
}
public bool AllowForceBuild
{
get { return serverSpecifier.AllowForceBuild; }
}
public bool AllowStartStopBuild
{
get { return serverSpecifier.AllowStartStopBuild; }
}
private string CalculateHtmlColor(IntegrationStatus integrationStatus)
{
if (integrationStatus == IntegrationStatus.Success)
{
return Color.Green.Name;
}
else if (integrationStatus == IntegrationStatus.Unknown)
{
return Color.Blue.Name;
}
else
{
return Color.Red.Name;
}
}
public string BuildStage
{
get
{
string CurrentBuildStage = status.BuildStage;
if (CurrentBuildStage.Length == 0)
{ return ""; }
else
{ return GetFormattedBuildStage(CurrentBuildStage); }
}
}
private string GetFormattedBuildStage(string buildStageData)
{
System.Xml.XmlDocument XDoc = new System.Xml.XmlDocument();
System.Xml.XmlTextReader XReader;
System.Text.StringBuilder Result = new System.Text.StringBuilder();
try
{
XDoc.LoadXml(buildStageData);
XReader = new System.Xml.XmlTextReader(XDoc.OuterXml, System.Xml.XmlNodeType.Document, null);
XReader.WhitespaceHandling = System.Xml.WhitespaceHandling.None;
Result.Append("<table width=\"80%\">");
Result.AppendLine();
while (XReader.Read())
{
XReader.MoveToContent();
if (XReader.AttributeCount > 0)
{
Result.AppendFormat("<tr><td NOWRAP>{0}</td> ", XReader.GetAttribute("Time"));
Result.AppendFormat("<td>{0}</td></tr>", XReader.GetAttribute("Data"));
Result.AppendLine();
}
}
Result.Append("</table>");
XReader.Close();
}
catch
{
Result = new System.Text.StringBuilder();
}
return Result.ToString();
}
}
}