view api/FileLoadFailure.cs @ 219:f609bcf7035b

Fixes #222: decimal comma/point not handled correctly (again?) in costMultiplier * Replace two "type.Parse" calls with XmlTools calls All decimals in WarFoundry should use the decimal point (or "period" to Americans) rather than the decimal comma because that's what XML uses in its default type definitions
author IBBoard <dev@ibboard.co.uk>
date Sat, 28 Nov 2009 16:40:27 +0000
parents 2f3cafb69799
children
line wrap: on
line source

// This file (FileLoadFailure.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 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 System.IO;
using IBBoard.Lang;
using IBBoard.WarFoundry.API.Factories;

namespace IBBoard.WarFoundry.API
{
	/// <summary>
	/// A container class that holds information about file load failures. Core information covers the file that failed and a message. Additional information includes the factory loading the file and the excetion that was thrown. Messages are passed through <code>String.Format</code> and supplied with the failed file path and the failing factory
	/// </summary>
	public class FileLoadFailure
	{
		private FileInfo failedFile;
		private IWarFoundryFactory loadingFactory;
		private string defaultMessage;
		private string messageTranslationID;
		private string message;
		private Exception cause;
		
		/// <summary>
		/// Constructor for a failed file load where no factory was found. Translatable messages can be providied through a <code>translationID</code> or skipped by passing <code>null</code>.
		/// </summary>
		/// <param name="file">
		/// The <see cref="FileInfo"/> that failed to load
		/// </param>
		/// <param name="message">
		/// A message about the failure in English - used as a default fall-back message.
		/// </param>
		/// <param name="translationID">
		/// The ID of a translation for the message.
		/// </param>
		public FileLoadFailure(FileInfo file, string message, string translationID) : this (file, null, message, "")
		{
		}
		
		/// <summary>
		/// Constructor for a failed file load where a factory was identified as supporting the file but failed to load it. Translatable messages can be providied through a <code>translationID</code> or skipped by passing <code>null</code>.
		/// </summary>
		/// <param name="file">
		/// The <see cref="FileInfo"/> that failed to load
		/// </param>
		/// <param name="factory">
		/// The <see cref="IWarFoundryFactory"/> that failed to load the file
		/// </param>
		/// <param name="message">
		/// A message about the failure in English - used as a default fall-back message.
		/// </param>
		/// <param name="translationID">
		/// The ID of a translation for the message.
		/// </param>
		public FileLoadFailure(FileInfo file, IWarFoundryFactory factory, string message, string translationID) : this(file, factory, message, translationID, null)
		{
		}
		
		/// <summary>
		/// Constructor for a failed file load where a factory was identified as supporting the file but an exception occurred while loading it. Translatable messages can be providied through a <code>translationID</code> or skipped by passing <code>null</code>.
		/// </summary>
		/// <param name="file">
		/// The <see cref="FileInfo"/> that failed to load
		/// </param>
		/// <param name="factory">
		/// The <see cref="IWarFoundryFactory"/> that failed to load the file
		/// </param>
		/// <param name="message">
		/// A message about the failure in English - used as a default fall-back message.
		/// </param>
		/// <param name="translationID">
		/// The ID of a translation for the message.
		/// </param>
		/// <param name="exception">
		/// The <see cref="Exception"/> that occurred to cause the load to fail
		/// </param>
		public FileLoadFailure(FileInfo file, IWarFoundryFactory factory, string message, string translationID, Exception exception)
		{
			failedFile = file;
			loadingFactory = factory;
			defaultMessage = message;
			messageTranslationID = translationID;
			cause = exception;
		}

		public FileInfo FailedFile
		{
			get
			{
				return failedFile;
			}
		}

		public string Message
		{
			get
			{
				if (message == null)
				{
					string fileName = FailedFile.FullName;
					string factoryType = (loadingFactory == null ? "" : loadingFactory.GetType().Name);
					if (messageTranslationID == "" || messageTranslationID == null)
					{
						message = String.Format(defaultMessage, fileName, factoryType);
				 	}
					else
				 	{
						message = Translation.GetTranslation(messageTranslationID, defaultMessage, fileName, factoryType);
					}
				}
				
				return message;
			}
		}
		
		public Exception Exception
		{
			get { return cause; }
		}
	}
}