annotate API/Objects/Requirement/AbstractRequirement.cs @ 427:3882b533d99d

Re #27: Define unit requirements * Add ID to requirements so that it isn't just defined in factories * Make factory use ID from requirement class to avoid duplication and possible mismatch
author IBBoard <dev@ibboard.co.uk>
date Sun, 30 Oct 2011 20:31:43 +0000
parents 71fceea2725b
children 8f5125740316
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
381
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
6
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 namespace IBBoard.WarFoundry.API.Objects.Requirement
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8 {
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 public abstract class AbstractRequirement : IRequirement
381
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
10 {
427
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
11 /// <summary>
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
12 /// Gets the ID of the requirement type. This is used by the requirement factories.
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
13 /// It may be, but is not required to be, the name of the class.
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
14 /// </summary>
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
15 /// <value>
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
16 /// The requirement I.
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
17 /// </value>
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
18 public abstract string RequirementID { get; }
3882b533d99d Re #27: Define unit requirements
IBBoard <dev@ibboard.co.uk>
parents: 419
diff changeset
19
381
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
20 public override bool Equals (object obj)
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
21 {
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
22 if (obj == null)
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
23 {
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
24 return false;
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
25 }
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
26 else if (obj.GetType().Equals(this.GetType()))
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
27 {
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
28 return TypeEquals(obj);
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
29 }
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
30 else
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
31 {
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
32 return false;
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
33 }
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34 }
381
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
35
419
71fceea2725b Code tidy-up - remove warnings
IBBoard <dev@ibboard.co.uk>
parents: 381
diff changeset
36 public override abstract int GetHashCode();
71fceea2725b Code tidy-up - remove warnings
IBBoard <dev@ibboard.co.uk>
parents: 381
diff changeset
37
381
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
38 /// <summary>
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
39 /// Type-specific equality checking - must be implemented by each class
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
40 /// </summary>
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
41 /// <returns>
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
42 /// <code>true</code> if this object is equal to <code>obj</code>, else <code>false</code>
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
43 /// </returns>
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
44 /// <param name='obj'>
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
45 /// The object to compare to
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
46 /// </param>
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
47 protected abstract bool TypeEquals(object obj);
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
48
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
49 protected virtual bool IsApplicable(WarFoundryObject toObjectAdded, Army toArmy)
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
50 {
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
51 return IsApplicable(toArmy) || IsApplicable(toObjectAdded);
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
52 }
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
53
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
54 protected virtual bool IsApplicable(Army toArmy)
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
55 {
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
56 return true;
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
57 }
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
58
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
59 protected virtual bool IsApplicable(WarFoundryObject toObject)
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
60 {
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
61 return true;
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
62 }
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
63
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
64
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
65 public string GetValidationMessage(Army army)
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
66 {
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
67 string message = "";
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
68
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
69 Validation result = ValidatesArmy(army);
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
70 if (!Validates.AsOkay(result))
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
71 {
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
72 message = GetValidationFailedMessage(army);
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
73 }
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
74
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
75 return message;
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
76 }
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
77
364
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
78 protected abstract string GetValidationFailedMessage(Army army);
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 public string GetAllowsAddingMessage(UnitType toAdd, Army toArmy)
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
81 {
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
82 string message = "";
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
83
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
84 Validation result = AllowsAdding(toAdd, toArmy);
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
85 if (!Validates.AsOkay(result))
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
86 {
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
87 message = GetAllowsAddingFailedMessage(toAdd, toArmy);
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
88 }
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
89
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
90 return message;
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
91 }
0dd8dbe8afe9 Fixes #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents: 358
diff changeset
92
381
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
93 protected abstract string GetAllowsAddingFailedMessage(UnitType toAdd, Army toArmy);
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
94
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
95 public abstract Validation AllowsAdding(WarFoundryObject wfObject, Army toArmy);
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
96
30db6669f5cd * Update to VS.Net 2010 compatibility
IBBoard <dev@ibboard.co.uk>
parents: 364
diff changeset
97 public abstract Validation ValidatesArmy(Army army);
358
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
98 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
99 }
dbe7ccb1e557 Re #345: Add failure message to requirements
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
100