|
//---------------------------------------------------------------------
// <copyright file="EdmSchemaError.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//
// @owner Microsoft
// @backupOwner Microsoft
//---------------------------------------------------------------------
namespace System.Data.Metadata.Edm
{
using System;
/// <summary>
/// This class encapsulates the error information for a schema error that was encountered.
/// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")]
[Serializable]
public sealed class EdmSchemaError : EdmError
{
#region Instance Fields
private int _errorCode = 0;
private EdmSchemaErrorSeverity _severity = EdmSchemaErrorSeverity.Warning;
private string _schemaLocation = null;
private int _line = -1;
private int _column = -1;
private string _stackTrace = string.Empty;
#endregion
#region Public Methods
/// <summary>
/// Constructs a EdmSchemaError object.
/// </summary>
/// <param name="message">The explanation of the error.</param>
/// <param name="errorCode">The code associated with this error.</param>
/// <param name="severity">The severity of the error.</param>
internal EdmSchemaError(string message, int errorCode, EdmSchemaErrorSeverity severity) :
this(message, errorCode, severity, null)
{
}
/// <summary>
/// Constructs a EdmSchemaError object.
/// </summary>
/// <param name="message">The explanation of the error.</param>
/// <param name="errorCode">The code associated with this error.</param>
/// <param name="severity">The severity of the error.</param>
/// <param name="exception">The exception that caused the error to be filed.</param>
internal EdmSchemaError(string message, int errorCode, EdmSchemaErrorSeverity severity, Exception exception)
: base(message)
{
Initialize(errorCode, severity, null, -1, -1, exception);
}
/// <summary>
/// Constructs a EdmSchemaError object.
/// </summary>
/// <param name="message">The explanation of the error.</param>
/// <param name="errorCode">The code associated with this error.</param>
/// <param name="severity">The severity of the error.</param>
/// <param name="sourceUri"></param>
/// <param name="lineNumber"></param>
/// <param name="sourceColumn"></param>
internal EdmSchemaError(string message, int errorCode, EdmSchemaErrorSeverity severity, string schemaLocation, int line, int column)
: this(message, errorCode, severity, schemaLocation, line, column, null)
{
}
/// <summary>
/// Constructs a EdmSchemaError object.
/// </summary>
/// <param name="message">The explanation of the error.</param>
/// <param name="errorCode">The code associated with this error.</param>
/// <param name="severity">The severity of the error.</param>
/// <param name="sourceUri"></param>
/// <param name="lineNumber"></param>
/// <param name="sourceColumn"></param>
/// <param name="exception">The exception that caused the error to be filed.</param>
internal EdmSchemaError(string message, int errorCode, EdmSchemaErrorSeverity severity, string schemaLocation, int line, int column, Exception exception)
: base(message)
{
if (severity < EdmSchemaErrorSeverity.Warning || severity > EdmSchemaErrorSeverity.Error)
{
throw new ArgumentOutOfRangeException("severity", severity, System.Data.Entity.Strings.ArgumentOutOfRange(severity));
}
Initialize(errorCode, severity, schemaLocation, line, column, exception);
}
private void Initialize(int errorCode, EdmSchemaErrorSeverity severity, string schemaLocation, int line, int column, Exception exception)
{
if (errorCode < 0)
{
throw new ArgumentOutOfRangeException("errorCode", errorCode, System.Data.Entity.Strings.ArgumentOutOfRangeExpectedPostiveNumber(errorCode));
}
_errorCode = errorCode;
_severity = severity;
_schemaLocation = schemaLocation;
_line = line;
_column = column;
if (exception != null)
{
_stackTrace = exception.StackTrace;
}
}
/// <summary>
/// Creates a string representation of the error.
/// </summary>
public override string ToString()
{
string text;
string severity;
switch (Severity)
{
case EdmSchemaErrorSeverity.Error:
severity = System.Data.Entity.Strings.GeneratorErrorSeverityError;
break;
case EdmSchemaErrorSeverity.Warning:
severity = System.Data.Entity.Strings.GeneratorErrorSeverityWarning;
break;
default:
severity = System.Data.Entity.Strings.GeneratorErrorSeverityUnknown;
break;
}
if (String.IsNullOrEmpty(SchemaName) && Line < 0 && Column < 0)
{
text = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0} {1:0000}: {2}",
severity,
ErrorCode,
Message);
}
else
{
text = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0}({1},{2}) : {3} {4:0000}: {5}",
(SchemaName == null) ? System.Data.Entity.Strings.SourceUriUnknown : SchemaName,
Line,
Column,
severity,
ErrorCode,
Message);
}
return text;
}
#endregion
#region Public Properties
/// <summary>
/// Gets the ErrorCode.
/// </summary>
public int ErrorCode
{
get
{
return _errorCode;
}
}
/// <summary>
/// Gets the Severity of the error.
/// </summary>
public EdmSchemaErrorSeverity Severity
{
get
{
return _severity;
}
set
{
_severity = value;
}
}
/// <summary>
/// Gets the LineNumber that the error occured on.
/// </summary>
public int Line
{
get
{
return _line;
}
}
/// <summary>
/// Gets the column that the error occured in.
/// </summary>
public int Column
{
get
{
return _column;
}
}
/// <summary>
/// Gets the of the schema that contains the error.
/// </summary>
public string SchemaLocation
{
get
{
return _schemaLocation;
}
}
/// <summary>
/// Gets the of the schema that contains the error.
/// </summary>
public string SchemaName
{
get
{
return GetNameFromSchemaLocation(SchemaLocation);
}
}
/// <summary>
/// Gets the stack trace of when the error occured.
/// </summary>
/// <value></value>
public string StackTrace
{
get
{
return _stackTrace;
}
}
#endregion
private static string GetNameFromSchemaLocation(string schemaLocation)
{
if (string.IsNullOrEmpty(schemaLocation))
{
return schemaLocation;
}
int pos = Math.Max(schemaLocation.LastIndexOf('/'), schemaLocation.LastIndexOf('\\'));
int start = pos + 1;
if (pos < 0)
{
return schemaLocation;
}
else if (start >= schemaLocation.Length)
{
return string.Empty;
}
return schemaLocation.Substring(start);
}
}
}
|