annotate API/Objects/Requirement/AbstractRequirement.cs @ 364:0dd8dbe8afe9

Fixes #345: Add failure message to requirements * Add implementation of failure messages for "allows adding"
author IBBoard <dev@ibboard.co.uk>
date Sun, 01 May 2011 19:17:40 +0000
parents dbe7ccb1e557
children 30db6669f5cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 // This file (AbstractRequirement.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2011 IBBoard
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2 //
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
3 // 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.
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4 using System;
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 namespace IBBoard.WarFoundry.API.Objects.Requirement
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8 public abstract class AbstractRequirement : IRequirement
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 public override bool Equals (object obj)
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 if (obj == null)
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 return false;
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16 else if (obj.GetType().Equals(this.GetType()))
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 return TypeEquals(obj);
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20 else
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22 return false;
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26 /// <summary>
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27 /// Type-specific equality checking - must be implemented by each class
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 /// </summary>
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29 /// <returns>
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
30 /// <code>true</code> if this object is equal to <code>obj</code>, else <code>false</code>
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
31 /// </returns>
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
32 /// <param name='obj'>
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
33 /// The object to compare to
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34 /// </param>
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
35 protected abstract bool TypeEquals(object obj);
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
36
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
37 protected virtual bool IsApplicable(WarFoundryObject toObjectAdded, Army toArmy)
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
38 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
39 return IsApplicable(toArmy) || IsApplicable(toObjectAdded);
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
40 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
41
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
42 protected virtual bool IsApplicable(Army toArmy)
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
43 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
44 return true;
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
45 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
46
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
47 protected virtual bool IsApplicable(WarFoundryObject toObject)
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
48 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
49 return true;
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
50 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
51
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
52
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
53 public string GetValidationMessage(Army army)
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
54 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
55 string message = "";
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
56
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
57 Validation result = ValidatesArmy(army);
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
58 if (!Validates.AsOkay(result))
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
59 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
60 message = GetValidationFailedMessage(army);
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
61 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
62
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
63 return message;
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
64 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
65
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
66 protected abstract string GetValidationFailedMessage(Army army);
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
67
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
68 public string GetAllowsAddingMessage(UnitType toAdd, Army toArmy)
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
69 {
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
70 string message = "";
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
71
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
72 Validation result = AllowsAdding(toAdd, toArmy);
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
73 if (!Validates.AsOkay(result))
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
74 {
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
75 message = GetAllowsAddingFailedMessage(toAdd, toArmy);
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
76 }
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
77
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
78 return message;
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
79 }
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
80
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
81 protected abstract string GetAllowsAddingFailedMessage(UnitType toAdd, Army toArmy);
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
82
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
83 public abstract Validation AllowsAdding(WarFoundryObject wfObject, Army toArmy);
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
84
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
85 public abstract Validation ValidatesArmy(Army army);
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
86 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
87 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
88