Created freshly looking WebControl.cs
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / AdRotator.cs
1 /**\r
2  * Namespace: System.Web.UI.WebControls\r
3  * Class:     AdRotator\r
4  * \r
5  * Author:  Gaurav Vaish\r
6  * Contact: <gvaish@iitk.ac.in>\r
7  * Status:  10??%\r
8  * \r
9  * (C) Gaurav Vaish (2001)\r
10  */\r
11 \r
12 using System;\r
13 using System.IO;\r
14 using System.Collections;\r
15 using System.Collections.Specialized;\r
16 using System.Web;\r
17 using System.Web.UI;\r
18 using System.Xml;\r
19 \r
20 namespace System.Web.UI.WebControls\r
21 {\r
22         public class AdRotator: WebControl\r
23         {\r
24 \r
25                 private string advertisementFile;\r
26                 private string keywordFilter;\r
27                 private string target;\r
28                 private static readonly object AdCreatedEvent = new object();\r
29 \r
30                 // Will be set values during (On)PreRender-ing\r
31                 private string alternateText;\r
32                 private string imageUrl;\r
33                 private string navigateUrl;\r
34 \r
35                 private string fileDirctory;\r
36 \r
37                 private static class AdRecord\r
38                 {\r
39                         public IDictionary adProps;\r
40                         public int         hits; // or impressions or clicks\r
41                         public string      keyword;\r
42 \r
43                         public AdRecord()\r
44                         {\r
45                         }\r
46                         \r
47                         public void Initialize(IDictionary adProps)\r
48                         {\r
49                                 this.adProps = adProps;\r
50                         }\r
51                 }\r
52 \r
53 /*\r
54  * Loading / Saving data from/to ad file and all the manipulations wrt to the URL...\r
55  * are incorporated by the following functions.\r
56  * GetData(string)\r
57  * LoadAdFile(string)\r
58  * IsAdMatching(AdRecord)\r
59  * ResolveAdUrl(string)\r
60  * SelectAd()\r
61  * The exact control flow will be detailed. Let me first write the functions\r
62  */\r
63 \r
64                 private AdRecord[] LoadAdFile(string file)\r
65                 {\r
66                         //TODO: Implement me\r
67                         Stream      fSream;\r
68                         ArrayList   list;\r
69                         XmlReader   reader;\r
70                         XmlDocument document;\r
71                         XmlNode     topNode, innerNode;\r
72                         IDictionary hybridDict;\r
73                         AdRecord[]  adsArray = null;\r
74                         try\r
75                         {\r
76                                 fStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read);\r
77                         } catch(Exception e)\r
78                         {\r
79                                 throw new HttpException("AdRotator: Unable to open file");\r
80                         }\r
81                         try\r
82                         {\r
83                                 list = new ArrayList();\r
84                                 reader = new XmlTextReader(fStream);\r
85                                 document = new XmlDocument();\r
86                                 document.Load(reader);\r
87                                 if(document.DocumentElement!=null)\r
88                                 {\r
89                                         if(docuent.DocumentElement.LocalName=="Advertisements")\r
90                                         {\r
91                                                 topNode = documentElement.FirstChild;\r
92                                                 while(topNode!=null)\r
93                                                 {\r
94                                                         if(topNode.LocalName=="Ad")\r
95                                                         {\r
96                                                                 innerNode = topNode.FirstChild;\r
97                                                                 while(innerNode!=null)\r
98                                                                 {\r
99                                                                         if(innerNode.NodeType==NodeType.Element)\r
100                                                                         {\r
101                                                                                 if(hybridDic==null)\r
102                                                                                 {\r
103                                                                                         hybirdDict = new HybridDictionary();\r
104                                                                                 }\r
105                                                                                 hybridDic.Add(innerNode.LocalName, innerNode.InnerText);\r
106                                                                         }\r
107                                                                         innerNode = innerNode.NextSibling;\r
108                                                                 }\r
109                                                                 if(hybridDict!=null)\r
110                                                                         list.Add(hybridDict);\r
111                                                         }\r
112                                                         topNode = topNode.NextSibling;\r
113                                                 }\r
114                                         }\r
115                                 }\r
116                                 if(list.Count>0)\r
117                                 {\r
118                                         adsArray = new AdRecord[list.Count];\r
119                                         for(int i=0; i < list.Count; i++)\r
120                                         {\r
121                                                 adsArray[i] = new AdRecord((IDictionary)list.Item[i]);\r
122                                         }\r
123                                 }\r
124                         } catch(Excetion e)\r
125                         {\r
126                                 //TODO: Write error. Parsing error has occured\r
127                                 throw new HttpException("AdRotator: Unable to parse file" + file);\r
128                         } finally\r
129                         {\r
130                                 fStream.close();\r
131                         }\r
132                         if(adsArray == null)\r
133                         {\r
134                                 throw new HttpException("AdRotator: No Advertisements Fount");\r
135                         }\r
136                         return adsArray;\r
137                 }\r
138                 \r
139                 private AdRecord[] GetData(string file)\r
140                 {\r
141                         //TODO: Implement me\r
142                         fileDirectory = TemplateSourceDirectory + MapPathSecure(file);\r
143                         //TODO: Do I need to check caching?\r
144                 }\r
145                 \r
146                 private IDictionary SelectAd()\r
147                 {\r
148                         //TODO: Implement Me\r
149                 }\r
150                 \r
151                 private bool IsAdMatching(AdRecord currAd)\r
152                 {\r
153                         //TODO: Implement me\r
154                 }\r
155                 \r
156                 private string ResolveAdUrl(string)\r
157                 {\r
158                         //TODO: Implement me\r
159                 }\r
160                 \r
161                 public event AdCreatedEventHandler AdCreated\r
162                 {\r
163                         add\r
164                         {\r
165                                 Events.AddHandler(AdCreatedEvent, value);\r
166                         }\r
167                         remove\r
168                         {\r
169                                 Events.RemoveHandler(AdCreatedEvent, value);\r
170                         }\r
171                 }\r
172                 \r
173                 public AdRotator()\r
174                 {\r
175                         base();\r
176                         advertisementFile = string.Empty;\r
177                         keywordFilter     = string.Empty;\r
178                         target            = string.Empty;\r
179                 }\r
180                 \r
181                 public string AdvertisementFile\r
182                 {\r
183                         get\r
184                         {\r
185                                 return advertisementFile;\r
186                         }\r
187                         set\r
188                         {\r
189                                 advertisementFile = value;\r
190                         }\r
191                 }\r
192                 \r
193                 public string KeywordFilter\r
194                 {\r
195                         get\r
196                         {\r
197                                 return keywordFilter;\r
198                         }\r
199                         set\r
200                         {\r
201                                 keywordFilter = value;\r
202                         }\r
203                 }\r
204                 \r
205                 public string Target\r
206                 {\r
207                         get\r
208                         {\r
209                                 return target;\r
210                         }\r
211                         set\r
212                         {\r
213                                 target = value;\r
214                         }\r
215                 }\r
216                 \r
217                 protected override ControlCollection CreateControlCollection()\r
218                 {\r
219                         return new EmptyControlCollection(this);\r
220                 }\r
221                 \r
222                 protected virtual void OnAdCreated(AdCreatedEventArgs e)\r
223                 {\r
224                         if(Events!=null)\r
225                         {\r
226                                 AdCreatedEventHandler aceh = (AdCreatedEventHandler)(Events[AdCreatedEvent]);\r
227                                 if(aceh!=null)\r
228                                         aceh(this, e);\r
229                         }\r
230                 }\r
231 \r
232                 protected override void OnPreRender(EventArgs e)\r
233                 {\r
234                         if(AdvertisementFile!=String.Empty)\r
235                         {\r
236                                 AdCreatedEventArgs acea = new AdCreatedEventArgs(SelectAd());\r
237                                 imageUrl      = acea.ImageUrl;\r
238                                 navigateUrl   = acea.NavigateUrl;\r
239                                 alternateText = acea.AlternateText;\r
240                         }\r
241                 }\r
242                 \r
243                 protected override void Render(HtmlTextWriter writer)\r
244                 {\r
245                         HyperLink hLink = new HyperLink();\r
246                         Image     image;\r
247 \r
248                         AttributeCollection attributeColl = base.Attributes;\r
249                         ICollection keys = attributeColl.Keys;\r
250                         IEnumerator iterator = keys.GetEnumerator();\r
251                         \r
252                         \r
253                 }\r
254         }\r
255 }\r