Mercurial > repos > IBBoard.WarFoundry.API
view API/FileLoadFailure.cs @ 450:8811737baebf
Fixes #352: Test/fix cyclic references in unit types
* Tell the Race it has a new UnitType earlier to resolve load loops
* Update example data file to one that uses all requirements, but caused cyclic issues
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 22 Jan 2012 19:17:06 +0000 |
parents | 6da9db4a9c23 |
children | 1ed2f3ab5e35 |
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 (String.IsNullOrEmpty(messageTranslationID)) { message = String.Format(defaultMessage, fileName, factoryType); } else { message = Translation.GetTranslation(messageTranslationID, defaultMessage, fileName, factoryType); } } return message; } } public Exception Exception { get { return cause; } } } }