2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / Mono.Xml.Ext / Mono.Xml / XmlStoredResolver.cs
1 //\r
2 // XmlStoredResolver.cs\r
3 //\r
4 // Author: Atsushi Enomoto <atsushi@ximian.com>\r
5 //\r
6 // This code is too short to have "creativity". (thus, there must be no \r
7 // copyright on this code). Feel free to use anywhere.\r
8 //\r
9 // Use like this:\r
10 //\r
11 //      XmlDocument doc = new XmlDocument ();\r
12 //      XmlStoredResolver r = new XmlStoredResolver (new XmlUrlResolver ());\r
13 //      r.Add ("http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd",\r
14 //              "svg10.dtd");\r
15 //      doc.XmlResolver = r;\r
16 //\r
17 using System;\r
18 using System.Collections;\r
19 using System.Net;\r
20 using System.Xml;\r
21 \r
22 namespace Mono.Xml\r
23 {\r
24         public class XmlStoredResolver : XmlResolver\r
25         {\r
26                 XmlResolver external;\r
27                 XmlResolver local;\r
28                 IDictionary uriTable;\r
29 \r
30                 public XmlStoredResolver (XmlResolver resolver)\r
31                         : this (resolver, resolver, new Hashtable ())\r
32                 {\r
33                 }\r
34 \r
35                 public XmlStoredResolver (XmlResolver resolver, IDictionary uriTable)\r
36                         : this (resolver, resolver, uriTable)\r
37                 {\r
38                 }\r
39 \r
40                 public XmlStoredResolver (XmlResolver external, XmlResolver local)\r
41                         : this (external, local, new Hashtable ())\r
42                 {\r
43                 }\r
44                 \r
45                 public XmlStoredResolver (XmlResolver external, XmlResolver local, IDictionary uriTable)\r
46                 {\r
47                         this.external = external;\r
48                         this.local = local;\r
49                         this.uriTable = uriTable;\r
50                 }\r
51 \r
52                 public override ICredentials Credentials {\r
53                         set {\r
54                                 external.Credentials = value;\r
55                                 if (local != external)\r
56                                         local.Credentials = value;\r
57                         }\r
58                 }\r
59 \r
60                 public IDictionary Mapping {\r
61                         get { return uriTable; }\r
62                 }\r
63 \r
64                 public void Add (string nominalUri, string actualLocation)\r
65                 {\r
66                         uriTable.Add (\r
67                                 external.ResolveUri (null, nominalUri).ToString (),\r
68                                 local.ResolveUri (null, actualLocation).ToString ());\r
69                 }\r
70 \r
71                 public override object GetEntity (Uri uri, string role, Type returnType)\r
72                 {\r
73                         string uriString = uri.ToString ();\r
74                         string actualLocation = (string) uriTable [uriString];\r
75                         if (actualLocation == null)\r
76                                 return external.GetEntity (uri, role, returnType);\r
77                         else\r
78                                 return local.GetEntity (local.ResolveUri (null, actualLocation), role, returnType);\r
79                 }\r
80         }\r
81 }\r