// This file (RequirementHandler.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2011 IBBoard
//
// The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
using System;
using System.Collections.Generic;
using IBBoard.WarFoundry.API.Objects.Requirement.Context;
namespace IBBoard.WarFoundry.API.Objects.Requirement
{
///
/// The requirement handler that tests the validity of armies.
///
public class RequirementHandler
{
private RequirementHandler()
{
}
public static Validation ValidateArmy(Army army)
{
ICollection ignored;
return ValidateArmy(army, out ignored);
}
public static Validation ValidateArmy(Army army, out ICollection failureMessages)
{
Validation result = Validation.Passed;
failureMessages = new List();
foreach (IRequirement requirement in army.GetRequirements())
{
if (!Validates.AsOkay(requirement.ValidatesArmy(army)))
{
result = Validation.Failed;
failureMessages.Add(requirement.GetValidationMessage(army));
}
}
return result;
}
public static Validation AllowsAdding(UnitType unitType, Army army)
{
return AllowsAdding(unitType, army, new NullAddingContext());
}
public static Validation AllowsAdding(UnitType unitType, Army army, AddingContext context)
{
ICollection ignored;
return AllowsAdding(unitType, army, context, out ignored);
}
public static Validation AllowsAdding(UnitType unitType, Army army, out ICollection failureMessages)
{
return AllowsAdding(unitType, army, new NullAddingContext(), out failureMessages);
}
public static Validation AllowsAdding(UnitType unitType, Army army, AddingContext context, out ICollection failureMessages)
{
Validation result = Validation.Passed;
failureMessages = new List();
foreach (IRequirement requirement in army.GetAddingUnitRequirements(unitType))
{
if (!Validates.AsOkay(requirement.AllowsAdding(unitType, army)))
{
result = Validation.Failed;
failureMessages.Add(requirement.GetAllowsAddingMessage(unitType, army, context));
}
}
return result;
}
}
}