in accord-core/src/main/java/accord/local/Commands.java [1199:1274]
private static boolean validate(EnsureAction action, Ranges existingRanges, Ranges additionalRanges,
Ranges existing, Ranges adding, String kind, Object obj)
{
switch (action)
{
default: throw new IllegalStateException();
case Ignore:
break;
case TrySet:
if (adding != null)
{
if (!adding.containsAll(existingRanges))
return false;
if (additionalRanges != existingRanges && !adding.containsAll(additionalRanges))
return false;
break;
}
case Set:
// failing any of these tests is always an illegal state
Invariants.checkState(adding != null);
if (!adding.containsAll(existingRanges))
throw new IllegalArgumentException("Incomplete " + kind + " (" + obj + ") provided; does not cover " + existingRanges);
if (additionalRanges != existingRanges && !adding.containsAll(additionalRanges))
throw new IllegalArgumentException("Incomplete " + kind + " (" + obj + ") provided; does not cover " + additionalRanges);
break;
case Check:
case Add:
if (adding == null)
{
if (existing == null)
return false;
Invariants.checkState(existing.containsAll(existingRanges));
if (existingRanges != additionalRanges && !existing.containsAll(additionalRanges))
{
if (action == Check)
return false;
throw new IllegalArgumentException("Missing additional " + kind + "; existing does not cover " + additionalRanges.difference(existingRanges));
}
}
else if (existing != null)
{
Ranges covering = adding.with(existing);
Invariants.checkState(covering.containsAll(existingRanges));
if (existingRanges != additionalRanges && !covering.containsAll(additionalRanges))
{
if (action == Check)
return false;
throw new IllegalArgumentException("Incomplete additional " + kind + " (" + obj + ") provided; does not cover " + additionalRanges.difference(existingRanges));
}
}
else
{
if (!adding.containsAll(existingRanges))
return false;
if (existingRanges != additionalRanges && !adding.containsAll(additionalRanges))
{
if (action == Check)
return false;
throw new IllegalArgumentException("Incomplete additional " + kind + " (" + obj + ") provided; does not cover " + additionalRanges.difference(existingRanges));
}
}
break;
}
return true;
}