diff API/WarFoundryLoader.cs @ 379:04f4c2fea356

Re #351: Add extensible requirement handling method * Extract common IRequirementFactory interface * Drop back to just returning IRequirement from factory to simplify generics * Add initial registration of requirement factories
author IBBoard <dev@ibboard.co.uk>
date Sat, 23 Jul 2011 19:53:42 +0000
parents 3c4a6403a88c
children 1a632b133606
line wrap: on
line diff
--- a/API/WarFoundryLoader.cs	Sat Jul 16 19:59:04 2011 +0000
+++ b/API/WarFoundryLoader.cs	Sat Jul 23 19:53:42 2011 +0000
@@ -1,16 +1,19 @@
 // This file (WarFoundryLoader.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2007, 2008, 2009 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 ICSharpCode.SharpZipLib.Zip;
+using System.Collections.Generic;
+using IBBoard.WarFoundry.API.Factories.Requirement;
+using IBBoard.WarFoundry.API.Objects.Requirement;
 
 namespace IBBoard.WarFoundry.API
 {
 	public class WarFoundryLoader
 	{		
 		private static AbstractWarFoundryLoader loader;
-		
+		private static Dictionary<string, IRequirementFactory> requirementFactories = new Dictionary<string, IRequirementFactory>();
+
 		/// <summary>
 		/// Gets the default <see cref="WarFoundryLoader"/> used to load WarFoundry data files.
 		/// </summary>
@@ -29,12 +32,22 @@
 		
 		public static void SetDefault(AbstractWarFoundryLoader newLoader)
 		{
-			loader = newLoader;	
+			loader = newLoader;
 		}
-		
+
 		private WarFoundryLoader()
 		{
 			//Hide constructor
 		}
+
+		public static void RegisterRequirementFactory(IRequirementFactory factory)
+		{
+			requirementFactories[factory.AppliesToID] = factory;
+		}
+
+		public static IRequirementFactory GetRequirementFactory(string requirementID)
+		{
+			return DictionaryUtils.GetValue(requirementFactories, requirementID);
+		}
 	}
 }