PageRenderTime 21ms CodeModel.GetById 11ms app.highlight 5ms RepoModel.GetById 2ms app.codeStats 0ms

/src/Manos/Manos.Routing/HtmlFormDataTypeConverter.cs

http://github.com/jacksonh/manos
C# | 74 lines | 36 code | 13 blank | 25 comment | 11 complexity | aa24fc714da62768889e27ef6e2c92ef MD5 | raw file
 1//
 2// Copyright (C) 2010 Jackson Harper (jackson@manosdemono.com)
 3//
 4// Permission is hereby granted, free of charge, to any person obtaining
 5// a copy of this software and associated documentation files (the
 6// "Software"), to deal in the Software without restriction, including
 7// without limitation the rights to use, copy, modify, merge, publish,
 8// distribute, sublicense, and/or sell copies of the Software, and to
 9// permit persons to whom the Software is furnished to do so, subject to
10// the following conditions:
11// 
12// The above copyright notice and this permission notice shall be
13// included in all copies or substantial portions of the Software.
14// 
15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22//
23//
24
25using System;
26using System.ComponentModel;
27using System.Globalization;
28
29
30namespace Manos.Routing
31{
32	public class HtmlFormDataTypeConverter : TypeConverter
33	{
34		public HtmlFormDataTypeConverter (Type dest_type)
35		{
36			if (dest_type == null)
37				throw new ArgumentNullException ("dest_type");
38			
39			DestinationType = dest_type;
40		}
41		
42		public Type DestinationType {
43			get;
44			private set;
45		}
46		
47		public override bool CanConvertFrom (ITypeDescriptorContext context, Type source_type)	
48		{
49			return source_type == typeof (string);
50		}
51		
52		public override object ConvertFrom (ITypeDescriptorContext context, CultureInfo culture, object value)
53		{
54			if (DestinationType == typeof (bool)) {
55				
56				if (value == null)
57					return false;
58				
59				string str = (string) value;
60
61				if (String.Compare ("on", str, StringComparison.InvariantCultureIgnoreCase) == 0)
62					return true;
63				
64				if (String.Compare ("off", str, StringComparison.InvariantCultureIgnoreCase) == 0)
65					return false;
66			}
67			
68			// Technically I am supposed to throw NotSupportedException here, but lets
69			// at least pretend to be effecient.
70			return null;
71		}
72	}
73}
74