Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System.Web.Entity / System / Data / WebControls / WebControlParameterProxy.cs
1 //---------------------------------------------------------------------
2 // <copyright file="WebControlParameterProxy.cs" company="Microsoft">
3 //      Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 //
6 // @owner       Microsoft
7 // @backupOwner objsdev
8 //---------------------------------------------------------------------
9 using System;
10 using System.Collections.Generic;
11 using System.Linq;
12 using System.Text;
13 using System.Web.UI.WebControls;
14 using System.Diagnostics;
15 using System.Data;
16 using System.Globalization;
17
18 namespace System.Web.UI.WebControls
19 {
20     internal class WebControlParameterProxy
21     {
22         ParameterCollection _collection;
23         EntityDataSource _entityDataSource;
24         Parameter _parameter; // Can be null, that's why this class doesn't subclass Parameter
25
26         internal WebControlParameterProxy(string propertyName, ParameterCollection parameterCollection, EntityDataSource entityDataSource)
27         {
28             Debug.Assert(null != entityDataSource);
29             Debug.Assert(!String.IsNullOrEmpty(propertyName));
30
31             _parameter = EntityDataSourceUtil.GetParameter(propertyName, parameterCollection);
32             _collection = parameterCollection;
33             _entityDataSource = entityDataSource;
34             VerifyUniqueType(_parameter);
35         }
36         internal WebControlParameterProxy(Parameter parameter, ParameterCollection parameterCollection, EntityDataSource entityDataSource)
37         {
38             Debug.Assert(null != entityDataSource);
39             _parameter = parameter;
40             _collection = parameterCollection;
41             _entityDataSource = entityDataSource;
42             VerifyUniqueType(_parameter);
43         }
44         internal string Name
45         {
46             get 
47             {
48                 if (null != _parameter)
49                 {
50                     return _parameter.Name;
51                 }
52                 return null;
53             }
54         }
55         internal bool HasValue
56         {
57             get 
58             { 
59                 return null != _parameter && 
60                     null != Value; 
61             }
62         }
63         internal bool ConvertEmptyStringToNull
64         {
65             get
66             {
67                 if (null != _parameter)
68                 {
69                     return _parameter.ConvertEmptyStringToNull;
70                 }
71                 return false;
72             }
73         }
74         internal TypeCode TypeCode
75         {
76             get
77             {
78                 if (null != _parameter)
79                 {
80                     return _parameter.Type;
81                 }
82                 return TypeCode.Empty;
83             }
84         }
85         internal DbType DbType
86         {
87             get
88             {
89                 if (null != _parameter)
90                 {
91                     return _parameter.DbType;
92                 }
93                 return DbType.Object;
94             }
95         }
96         internal Type ClrType
97         {
98             get
99             {
100                 Debug.Assert(this.TypeCode != TypeCode.Empty || this.DbType != DbType.Object, "Need to have TypeCode or DbType to get a ClrType");
101                 if (this.TypeCode != TypeCode.Empty)
102                 {
103                     return EntityDataSourceUtil.ConvertTypeCodeToType(this.TypeCode);
104                 }
105                 return EntityDataSourceUtil.ConvertDbTypeToType(this.DbType);
106             }
107         }
108
109         internal object Value
110         {
111             get 
112             {
113                 if (_parameter != null)
114                 {
115                     object paramValue = EntityDataSourceUtil.GetParameterValue(_parameter.Name, _collection, _entityDataSource);
116
117                     if (paramValue != null)
118                     {
119                         if (this.DbType == DbType.DateTimeOffset)
120                         {
121                             object value = (paramValue is DateTimeOffset)
122                                 ? paramValue
123                                 : DateTimeOffset.Parse(this.Value.ToString(), CultureInfo.CurrentCulture);
124                             return value;
125                         }
126                         else if (this.DbType == DbType.Time)
127                         {
128                             object value = (paramValue is TimeSpan)
129                                 ? paramValue
130                                 : TimeSpan.Parse(paramValue.ToString(), CultureInfo.CurrentCulture);
131                             return value;
132                         }
133                         else if (this.DbType == DbType.Guid)
134                         {
135                             object value = (paramValue is Guid)
136                                 ? paramValue
137                                 : new Guid(paramValue.ToString());
138                             return value;
139                         }
140                     }
141
142                     return paramValue;
143                 }
144
145                 return null;
146             }
147         }
148
149         private static void VerifyUniqueType(Parameter parameter)
150         {
151             if (parameter != null && parameter.Type == TypeCode.Empty && parameter.DbType == DbType.Object)
152             {
153                 throw new InvalidOperationException(Strings.WebControlParameterProxy_TypeDbTypeMutuallyExclusive);
154             }
155
156             if (parameter != null && parameter.DbType != DbType.Object && parameter.Type != TypeCode.Empty)
157             {
158                 throw new InvalidOperationException(Strings.WebControlParameterProxy_TypeDbTypeMutuallyExclusive);
159             }
160         }
161
162     }
163
164 }