55 lines
1.9 KiB
C#
Executable File
55 lines
1.9 KiB
C#
Executable File
using System;
|
|
using ThoughtWorks.CruiseControl.Core.Util;
|
|
|
|
namespace ThoughtWorks.CruiseControl.WebDashboard.IO
|
|
{
|
|
public class ConditionalGetFingerprint
|
|
{
|
|
public readonly static ConditionalGetFingerprint NOT_AVAILABLE = new ConditionalGetFingerprint(DateTime.MinValue, "\"NOT AVAILABLE\"");
|
|
|
|
private readonly DateTime lastModifiedTime;
|
|
private readonly string eTag;
|
|
|
|
public ConditionalGetFingerprint(DateTime ifModifiedSince, string ifNoneMatch)
|
|
{
|
|
lastModifiedTime = ifModifiedSince;
|
|
eTag = ifNoneMatch;
|
|
}
|
|
|
|
public ConditionalGetFingerprint Combine(ConditionalGetFingerprint other)
|
|
{
|
|
if (this == NOT_AVAILABLE || other == NOT_AVAILABLE) return NOT_AVAILABLE;
|
|
if (eTag != other.eTag) throw new UncombinableFingerprintException(eTag, other.eTag);
|
|
|
|
DateTime newerModificationTime = DateUtil.MaxDate(lastModifiedTime, other.lastModifiedTime);
|
|
return new ConditionalGetFingerprint(newerModificationTime, eTag);
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
if (this == NOT_AVAILABLE || obj == NOT_AVAILABLE) return false;
|
|
if (this == obj) return true;
|
|
ConditionalGetFingerprint conditionalGetFingerprint = obj as ConditionalGetFingerprint;
|
|
if (conditionalGetFingerprint == null) return false;
|
|
|
|
return
|
|
lastModifiedTime.Equals(conditionalGetFingerprint.lastModifiedTime) &&
|
|
eTag.Equals(conditionalGetFingerprint.eTag);
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return lastModifiedTime.GetHashCode() + 29*eTag.GetHashCode();
|
|
}
|
|
|
|
public DateTime LastModifiedTime
|
|
{
|
|
get { return lastModifiedTime; }
|
|
}
|
|
|
|
public string ETag
|
|
{
|
|
get { return eTag; }
|
|
}
|
|
}
|
|
} |