[System] UriKind.RelativeOrAbsolute workaround.
[mono.git] / mcs / class / System.Web.Routing / System.Web.Routing / RouteValueDictionaryExtensions.cs
1 //
2 // PatternParser.cs
3 //
4 // Author:
5 //      Marek Habersack <mhabersack@novell.com>
6 //
7 // Copyright (C) 2009 Novell Inc. http://novell.com
8 //
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 #if SYSTEMCORE_DEP
31 using System;
32 using System.Collections.Generic;
33 using System.Diagnostics;
34
35 namespace System.Web.Routing
36 {
37         static class RouteValueDictionaryExtensions
38         {
39                 public static bool Has (this RouteValueDictionary dict, string key)
40                 {
41                         if (dict == null)
42                                 return false;
43                         
44                         return dict.ContainsKey (key);
45                 }
46
47                 public static bool Has (this RouteValueDictionary dict, string key, object value)
48                 {
49                         if (dict == null)
50                                 return false;
51
52                         object entryValue;
53                         if (dict.TryGetValue (key, out entryValue)) {
54                                 if (value is string) {
55                                         if (!(entryValue is string))
56                                                 return false;
57                                         
58                                         string s1 = value as string;
59                                         string s2 = entryValue as string;
60                                         return String.Compare (s1, s2, StringComparison.OrdinalIgnoreCase) == 0;
61                                 }
62                                 
63                                 return entryValue == null ? value == null : entryValue.Equals (value);
64                         }
65                         
66                         return false;
67                 }
68
69                 public static bool GetValue (this RouteValueDictionary dict, string key, out object value)
70                 {
71                         if (dict == null) {
72                                 value = null;
73                                 return false;
74                         }
75
76                         return dict.TryGetValue (key, out value);
77                 }
78
79                 [Conditional ("DEBUG")]
80                 public static void Dump (this RouteValueDictionary dict, string name, string indent)
81                 {
82                         if (indent == null)
83                                 indent = String.Empty;
84                         
85                         if (dict == null) {
86                                 Console.WriteLine (indent + "Dictionary '{0}' is null", name);
87                                 return;
88                         }
89                         
90                         if (dict.Count == 0) {
91                                 Console.WriteLine (indent + "Dictionary '{0}' is empty", name);
92                                 return;
93                         }
94
95                         Console.WriteLine (indent + "Dictionary '{0}':", name);
96                         foreach (var de in dict)
97                                 Console.WriteLine (indent + "\t'{0}' == {1}", de.Key, de.Value);
98                 }
99         }
100 }
101 #endif