Implement MachineKey.Protect and MachineKey.Unprotect
[mono.git] / mcs / class / System.Web.Mvc2 / System.Web.Mvc / ViewEngineCollection.cs
1 /* ****************************************************************************\r
2  *\r
3  * Copyright (c) Microsoft Corporation. All rights reserved.\r
4  *\r
5  * This software is subject to the Microsoft Public License (Ms-PL). \r
6  * A copy of the license can be found in the license.htm file included \r
7  * in this distribution.\r
8  *\r
9  * You must not remove this notice, or any other, from this software.\r
10  *\r
11  * ***************************************************************************/\r
12 \r
13 namespace System.Web.Mvc {\r
14     using System.Collections.Generic;\r
15     using System.Collections.ObjectModel;\r
16     using System.Web.Mvc.Resources;\r
17 \r
18     public class ViewEngineCollection : Collection<IViewEngine> {\r
19 \r
20         public ViewEngineCollection() {\r
21         }\r
22 \r
23         public ViewEngineCollection(IList<IViewEngine> list)\r
24             : base(list) {\r
25         }\r
26 \r
27         protected override void InsertItem(int index, IViewEngine item) {\r
28             if (item == null) {\r
29                 throw new ArgumentNullException("item");\r
30             }\r
31             base.InsertItem(index, item);\r
32         }\r
33 \r
34         protected override void SetItem(int index, IViewEngine item) {\r
35             if (item == null) {\r
36                 throw new ArgumentNullException("item");\r
37             }\r
38             base.SetItem(index, item);\r
39         }\r
40 \r
41         private ViewEngineResult Find(Func<IViewEngine, ViewEngineResult> cacheLocator, Func<IViewEngine, ViewEngineResult> locator) {\r
42             ViewEngineResult result;\r
43 \r
44             foreach (IViewEngine engine in Items) {\r
45                 if (engine != null) {\r
46                     result = cacheLocator(engine);\r
47 \r
48                     if (result.View != null) {\r
49                         return result;\r
50                     }\r
51                 }\r
52             }\r
53 \r
54             List<string> searched = new List<string>();\r
55 \r
56             foreach (IViewEngine engine in Items) {\r
57                 if (engine != null) {\r
58                     result = locator(engine);\r
59 \r
60                     if (result.View != null) {\r
61                         return result;\r
62                     }\r
63 \r
64                     searched.AddRange(result.SearchedLocations);\r
65                 }\r
66             }\r
67 \r
68             return new ViewEngineResult(searched);\r
69         }\r
70 \r
71         public virtual ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName) {\r
72             if (controllerContext == null) {\r
73                 throw new ArgumentNullException("controllerContext");\r
74             }\r
75             if (string.IsNullOrEmpty(partialViewName)) {\r
76                 throw new ArgumentException(MvcResources.Common_NullOrEmpty, "partialViewName");\r
77             }\r
78             Func<IViewEngine, ViewEngineResult> cacheLocator = e => e.FindPartialView(controllerContext, partialViewName, true);\r
79             Func<IViewEngine, ViewEngineResult> locator = e => e.FindPartialView(controllerContext, partialViewName, false);\r
80             return Find(cacheLocator, locator);\r
81         }\r
82 \r
83         public virtual ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName) {\r
84             if (controllerContext == null) {\r
85                 throw new ArgumentNullException("controllerContext");\r
86             }\r
87             if (string.IsNullOrEmpty(viewName)) {\r
88                 throw new ArgumentException(MvcResources.Common_NullOrEmpty, "viewName");\r
89             }\r
90             Func<IViewEngine, ViewEngineResult> cacheLocator = e => e.FindView(controllerContext, viewName, masterName, true);\r
91             Func<IViewEngine, ViewEngineResult> locator = e => e.FindView(controllerContext, viewName, masterName, false);\r
92             return Find(cacheLocator, locator);\r
93         }\r
94     }\r
95 }\r