using System;
using System.Runtime.Serialization;
using GitHub.Services.WebApi;
namespace GitHub.DistributedTask.WebApi
{
///
/// Details about an agent update.
///
[DataContract]
public class TaskAgentUpdate
{
internal TaskAgentUpdate()
{
}
private TaskAgentUpdate(TaskAgentUpdate agentUpdateToBeCloned)
{
this.CurrentState = agentUpdateToBeCloned.CurrentState;
if (agentUpdateToBeCloned.SourceVersion != null)
{
this.SourceVersion = agentUpdateToBeCloned.SourceVersion.Clone();
}
if (agentUpdateToBeCloned.TargetVersion != null)
{
this.TargetVersion = agentUpdateToBeCloned.TargetVersion.Clone();
}
if (agentUpdateToBeCloned.RequestTime != null)
{
this.RequestTime = agentUpdateToBeCloned.RequestTime;
}
if (agentUpdateToBeCloned.RequestedBy != null)
{
this.RequestedBy = agentUpdateToBeCloned.RequestedBy.Clone();
}
if (agentUpdateToBeCloned.Reason != null)
{
switch (agentUpdateToBeCloned.Reason.Code)
{
case TaskAgentUpdateReasonType.Manual:
this.Reason = (agentUpdateToBeCloned.Reason as TaskAgentManualUpdate).Clone();
break;
case TaskAgentUpdateReasonType.MinAgentVersionRequired:
this.Reason = (agentUpdateToBeCloned.Reason as TaskAgentMinAgentVersionRequiredUpdate).Clone();
break;
}
}
}
///
/// Source agent version of the update.
///
[DataMember]
public PackageVersion SourceVersion
{
get;
internal set;
}
///
/// Target agent version of the update.
///
[DataMember]
public PackageVersion TargetVersion
{
get;
internal set;
}
///
/// Date on which this update was requested.
///
[DataMember]
public DateTime? RequestTime
{
get;
internal set;
}
///
/// Identity which requested this update.
///
[DataMember(EmitDefaultValue = false)]
public IdentityRef RequestedBy
{
get;
internal set;
}
///
/// Current state of this agent update.
///
[DataMember(EmitDefaultValue = false)]
public String CurrentState
{
get;
set;
}
///
/// Reason for this update.
///
[DataMember]
public TaskAgentUpdateReason Reason
{
get;
set;
}
public TaskAgentUpdate Clone()
{
return new TaskAgentUpdate(this);
}
}
}