Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4986,16 +4986,28 @@ Octopus.Client.Model
class RetentionPeriod
IEquatable<RetentionPeriod>
{
.ctor(Octopus.Client.Model.RetentionPeriodStrategy, Int32, Octopus.Client.Model.RetentionUnit)
.ctor(Int32, Octopus.Client.Model.RetentionUnit)
Int32 QuantityToKeep { get; }
Boolean ShouldKeepForever { get; }
Octopus.Client.Model.RetentionPeriodStrategy Strategy { get; }
Octopus.Client.Model.RetentionUnit Unit { get; }
static Octopus.Client.Model.RetentionPeriod Default()
Boolean Equals(Octopus.Client.Model.RetentionPeriod)
Boolean Equals(Object)
Int32 GetHashCode()
static Octopus.Client.Model.RetentionPeriod KeepForever()
String ToString()
}
class RetentionPeriodStrategy
IComparable
Octopus.TinyTypes.CaseInsensitiveStringTinyType
{
static Octopus.Client.Model.RetentionPeriodStrategy Count
static Octopus.Client.Model.RetentionPeriodStrategy Default
static Octopus.Client.Model.RetentionPeriodStrategy Forever
.ctor(String)
}
class RetentionPoliciesConfigurationResource
Octopus.Client.Extensibility.IResource
Octopus.Client.Model.IAuditedResource
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5004,16 +5004,28 @@ Octopus.Client.Model
class RetentionPeriod
IEquatable<RetentionPeriod>
{
.ctor(Octopus.Client.Model.RetentionPeriodStrategy, Int32, Octopus.Client.Model.RetentionUnit)
.ctor(Int32, Octopus.Client.Model.RetentionUnit)
Int32 QuantityToKeep { get; }
Boolean ShouldKeepForever { get; }
Octopus.Client.Model.RetentionPeriodStrategy Strategy { get; }
Octopus.Client.Model.RetentionUnit Unit { get; }
static Octopus.Client.Model.RetentionPeriod Default()
Boolean Equals(Octopus.Client.Model.RetentionPeriod)
Boolean Equals(Object)
Int32 GetHashCode()
static Octopus.Client.Model.RetentionPeriod KeepForever()
String ToString()
}
class RetentionPeriodStrategy
IComparable
Octopus.TinyTypes.CaseInsensitiveStringTinyType
{
static Octopus.Client.Model.RetentionPeriodStrategy Count
static Octopus.Client.Model.RetentionPeriodStrategy Default
static Octopus.Client.Model.RetentionPeriodStrategy Forever
.ctor(String)
}
class RetentionPoliciesConfigurationResource
Octopus.Client.Extensibility.IResource
Octopus.Client.Model.IAuditedResource
Expand Down
4 changes: 2 additions & 2 deletions source/Octopus.Server.Client/Model/LifecycleResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ public class LifecycleResource : Resource, INamedResource, IHaveSpaceResource, I
public LifecycleResource()
{
Phases = new List<PhaseResource>();
ReleaseRetentionPolicy = RetentionPeriod.KeepForever();
TentacleRetentionPolicy = RetentionPeriod.KeepForever();
ReleaseRetentionPolicy = RetentionPeriod.Default();
TentacleRetentionPolicy = RetentionPeriod.Default();
}

[Writeable]
Expand Down
72 changes: 38 additions & 34 deletions source/Octopus.Server.Client/Model/RetentionPeriod.cs
Original file line number Diff line number Diff line change
@@ -1,43 +1,45 @@
using System;
using Newtonsoft.Json;
using Octopus.TinyTypes;

namespace Octopus.Client.Model
{
public class RetentionPeriod : IEquatable<RetentionPeriod>
{
readonly int quantityToKeep;
readonly RetentionUnit unit;

public RetentionPeriod(int quantityToKeep, RetentionUnit unit)
[JsonConstructor]
public RetentionPeriod(RetentionPeriodStrategy strategy, int quantityToKeep, RetentionUnit unit)
{
this.quantityToKeep = quantityToKeep;
this.unit = unit;
Strategy = strategy ?? SelectStrategyBasedOnSettings(quantityToKeep, unit);
QuantityToKeep = quantityToKeep;
Unit = unit;
}

public RetentionUnit Unit
{
get { return unit; }
}
public RetentionPeriod(int quantityToKeep, RetentionUnit unit) : this(null, quantityToKeep, unit)
{}

public int QuantityToKeep
{
get { return quantityToKeep; }
}
public RetentionPeriodStrategy Strategy { get; protected set; }

public bool ShouldKeepForever
{
get { return QuantityToKeep == 0; }
}
public RetentionUnit Unit { get; protected set; }

public int QuantityToKeep { get; protected set; }

public bool ShouldKeepForever => QuantityToKeep == 0;

public static RetentionPeriod Default() => new(RetentionPeriodStrategy.Default, 0, RetentionUnit.Items);
public static RetentionPeriod KeepForever() => new(RetentionPeriodStrategy.Forever, 0, RetentionUnit.Items);

public static RetentionPeriod KeepForever()
RetentionPeriodStrategy SelectStrategyBasedOnSettings(int quantityToKeep, RetentionUnit unit)
{
return new RetentionPeriod(0, RetentionUnit.Items);
return quantityToKeep == 0 && unit == RetentionUnit.Items
? Strategy = RetentionPeriodStrategy.Default
: Strategy = RetentionPeriodStrategy.Count;
}

public bool Equals(RetentionPeriod other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return quantityToKeep == other.quantityToKeep && unit.Equals(other.unit);
return Strategy.Equals(other.Strategy) && QuantityToKeep == other.QuantityToKeep && Unit.Equals(other.Unit);
}

public override bool Equals(object obj)
Expand All @@ -52,23 +54,25 @@ public override int GetHashCode()
{
unchecked
{
return (quantityToKeep*397) ^ unit.GetHashCode();
var hashCode = Strategy.GetHashCode();
hashCode = (hashCode * 397) ^ (int)Unit;
hashCode = (hashCode * 397) ^ QuantityToKeep;
return hashCode;
}
}

public static bool operator ==(RetentionPeriod left, RetentionPeriod right)
{
return Equals(left, right);
}
public static bool operator ==(RetentionPeriod left, RetentionPeriod right) => Equals(left, right);

public static bool operator !=(RetentionPeriod left, RetentionPeriod right)
{
return !Equals(left, right);
}
public static bool operator !=(RetentionPeriod left, RetentionPeriod right) => !Equals(left, right);

public override string ToString()
{
return ShouldKeepForever ? "Forever" : "Last " + quantityToKeep + " " + (unit == RetentionUnit.Days ? "day" + (quantityToKeep == 1 ? "" : "s") : "item" + (quantityToKeep == 1 ? "" : "s"));
}
public override string ToString() => ShouldKeepForever ? "Forever" : "Last " + QuantityToKeep + " " + (Unit == RetentionUnit.Days ? "day" + (QuantityToKeep == 1 ? "" : "s") : "item" + (QuantityToKeep == 1 ? "" : "s"));

}

public class RetentionPeriodStrategy(string value) : CaseInsensitiveStringTinyType(value)
{
public static readonly RetentionPeriodStrategy Default = new("Default");
public static readonly RetentionPeriodStrategy Count = new("Count");
public static readonly RetentionPeriodStrategy Forever = new("Forever");
}
}
Loading