#region  --------------- Copyright Dresser Wayne Pignone -------------
/*
 * $Log: /Wrk/WayneLibraries/Wrk/Log/ErrorLogEntry.cs $
 * 
 * 2     08-02-13 9:26 Mattias.larsson
 * FxCop fixes.
 */
#endregion

using System.Text;
using System.Diagnostics.CodeAnalysis;
namespace Wayne.Lib.Log
{
    /// <summary>
    /// Base LogEntry for Errors.
    /// </summary>
    public class ErrorLogEntry : EventLogEntry
    {
        #region Fields

        private ErrorLogSeverity severity;

        #endregion

        #region Construction

        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="severity"></param>
        /// <param name="logObject">The object to log.</param>
        [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "object")]
        public ErrorLogEntry(IIdentifiableEntity entity, ErrorLogSeverity severity, object logObject)
            : base(entity, logObject)
        {
            this.severity = severity;
        }

        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="severity"></param>
        /// <param name="logObject">The object to log.</param>
        /// <param name="category"></param>
        [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "object")]
        public ErrorLogEntry(IIdentifiableEntity entity, ErrorLogSeverity severity, object logObject, object category)
            : base(entity, logObject, category)
        {
            this.severity = severity;
        }

        #endregion

        #region Properties

        /// <summary>
        /// The keyword "***ERROR" put in the log file.
        /// </summary>
        public const string LogPrefix = "***ERROR";

        /// <summary>
        /// The severity of the error.
        /// </summary>
        public ErrorLogSeverity Severity
        {
            get { return severity; }
        }

        #endregion

        #region Methods: AppendTextToStringBuilder

        /// <summary>
        /// Appends the object to log to a StringBuilder-output.
        /// </summary>
        /// <param name="logWriter">The logwriter to be used for logging.</param>
        /// <param name="output">The StringBuilder.</param>
        /// <param name="indentLength">The indent to be used if many lines.</param>
        /// <param name="isFirstLine">Is this the first line to log?</param>
        /// <param name="indent">A string holding a generated indent-text (=a number of spaces). Use AppendIndent() to append the indent.</param>
        internal override void AppendToStringBuilder(LogWriter logWriter, StringBuilder output,
            int indentLength, ref bool isFirstLine, ref string indent)
        {
            // Add the keyword.
            output.Append(LogPrefix);
            output.Append(": ");

            // Add the generic entry info.
            StringLogObject.AppendObjectToStringBuilder(LogObject, output, logWriter, indentLength, ref isFirstLine, ref indent);
        }

        #endregion
    }
}