//---------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace System.Data.Metadata.Edm
{
///
/// Class representing a function parameter
///
public sealed class FunctionParameter : MetadataItem
{
internal static Func> DeclaringFunctionLinker = fp => fp._declaringFunction;
#region Constructors
///
/// The constructor for FunctionParameter taking in a name and a TypeUsage object
///
/// The name of this FunctionParameter
/// The TypeUsage describing the type of this FunctionParameter
/// Mode of the parameter
/// Thrown if name or typeUsage arguments are null
/// Thrown if name argument is empty string
internal FunctionParameter(string name, TypeUsage typeUsage, ParameterMode parameterMode)
{
EntityUtil.CheckStringArgument(name, "name");
EntityUtil.GenericCheckArgumentNull(typeUsage, "typeUsage");
_name = name;
_typeUsage = typeUsage;
SetParameterMode(parameterMode);
}
#endregion
#region Fields
private readonly TypeUsage _typeUsage;
private readonly string _name;
private readonly SafeLink _declaringFunction = new SafeLink();
#endregion
#region Properties
///
/// Returns the kind of the type
///
public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.FunctionParameter; } }
///
/// Gets/Sets the mode of this parameter
///
/// Thrown if value passed into setter is null
/// Thrown if the FunctionParameter instance is in ReadOnly state
[MetadataProperty(BuiltInTypeKind.ParameterMode, false)]
public ParameterMode Mode
{
get
{
return GetParameterMode();
}
}
///
/// Returns the identity of the member
///
internal override string Identity
{
get
{
return _name;
}
}
///
/// Returns the name of the member
///
[MetadataProperty(PrimitiveTypeKind.String, false)]
public String Name
{
get
{
return _name;
}
}
///
/// Returns the TypeUsage object containing the type information and facets
/// about the type
///
[MetadataProperty(BuiltInTypeKind.TypeUsage, false)]
public TypeUsage TypeUsage
{
get
{
return _typeUsage;
}
}
///
/// Returns the declaring function of this parameter
///
public EdmFunction DeclaringFunction
{
get
{
return _declaringFunction.Value;
}
}
#endregion
#region Methods
///
/// Overriding System.Object.ToString to provide better String representation
/// for this type.
///
public override string ToString()
{
return Name;
}
///
/// Sets the member to read only mode. Once this is done, there are no changes
/// that can be done to this class
///
internal override void SetReadOnly()
{
if (!IsReadOnly)
{
base.SetReadOnly();
// TypeUsage is always readonly, no reason to set it
}
}
#endregion
}
}