using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Net.Http.Headers;
namespace ICSSoft.WebAPI.Areas.HelpPage
{
///
/// This is used to identify the place where the sample should be applied.
///
public class HelpPageSampleKey
{
///
/// Creates a new based on media type.
///
/// The media type.
public HelpPageSampleKey(MediaTypeHeaderValue mediaType)
{
if (mediaType == null)
{
throw new ArgumentNullException("mediaType");
}
ActionName = String.Empty;
ControllerName = String.Empty;
MediaType = mediaType;
ParameterNames = new HashSet(StringComparer.OrdinalIgnoreCase);
}
///
/// Creates a new based on media type and CLR type.
///
/// The media type.
/// The CLR type.
public HelpPageSampleKey(MediaTypeHeaderValue mediaType, Type type)
: this(mediaType)
{
if (type == null)
{
throw new ArgumentNullException("type");
}
ParameterType = type;
}
///
/// Creates a new based on , controller name, action name and parameter names.
///
/// The .
/// Name of the controller.
/// Name of the action.
/// The parameter names.
public HelpPageSampleKey(SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable parameterNames)
{
if (!Enum.IsDefined(typeof(SampleDirection), sampleDirection))
{
throw new InvalidEnumArgumentException("sampleDirection", (int)sampleDirection, typeof(SampleDirection));
}
if (controllerName == null)
{
throw new ArgumentNullException("controllerName");
}
if (actionName == null)
{
throw new ArgumentNullException("actionName");
}
if (parameterNames == null)
{
throw new ArgumentNullException("parameterNames");
}
ControllerName = controllerName;
ActionName = actionName;
ParameterNames = new HashSet(parameterNames, StringComparer.OrdinalIgnoreCase);
SampleDirection = sampleDirection;
}
///
/// Creates a new based on media type, , controller name, action name and parameter names.
///
/// The media type.
/// The .
/// Name of the controller.
/// Name of the action.
/// The parameter names.
public HelpPageSampleKey(MediaTypeHeaderValue mediaType, SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable parameterNames)
: this(sampleDirection, controllerName, actionName, parameterNames)
{
if (mediaType == null)
{
throw new ArgumentNullException("mediaType");
}
MediaType = mediaType;
}
///
/// Gets the name of the controller.
///
///
/// The name of the controller.
///
public string ControllerName { get; private set; }
///
/// Gets the name of the action.
///
///
/// The name of the action.
///
public string ActionName { get; private set; }
///
/// Gets the media type.
///
///
/// The media type.
///
public MediaTypeHeaderValue MediaType { get; private set; }
///
/// Gets the parameter names.
///
public HashSet ParameterNames { get; private set; }
public Type ParameterType { get; private set; }
///
/// Gets the .
///
public SampleDirection? SampleDirection { get; private set; }
public override bool Equals(object obj)
{
HelpPageSampleKey otherKey = obj as HelpPageSampleKey;
if (otherKey == null)
{
return false;
}
return String.Equals(ControllerName, otherKey.ControllerName, StringComparison.OrdinalIgnoreCase) &&
String.Equals(ActionName, otherKey.ActionName, StringComparison.OrdinalIgnoreCase) &&
(MediaType == otherKey.MediaType || (MediaType != null && MediaType.Equals(otherKey.MediaType))) &&
ParameterType == otherKey.ParameterType &&
SampleDirection == otherKey.SampleDirection &&
ParameterNames.SetEquals(otherKey.ParameterNames);
}
public override int GetHashCode()
{
int hashCode = ControllerName.ToUpperInvariant().GetHashCode() ^ ActionName.ToUpperInvariant().GetHashCode();
if (MediaType != null)
{
hashCode ^= MediaType.GetHashCode();
}
if (SampleDirection != null)
{
hashCode ^= SampleDirection.GetHashCode();
}
if (ParameterType != null)
{
hashCode ^= ParameterType.GetHashCode();
}
foreach (string parameterName in ParameterNames)
{
hashCode ^= parameterName.ToUpperInvariant().GetHashCode();
}
return hashCode;
}
}
}