| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- /**
- * Namespace: System.Web.UI.WebControls
- * Class: AdRotator
- *
- * Author: Gaurav Vaish
- * Maintainer: [email protected]
- * Implementation: yes
- * Contact: <[email protected]>
- * Status: 75%
- *
- * (C) Gaurav Vaish (2001)
- */
- using System;
- using System.IO;
- using System.Collections;
- using System.Collections.Specialized;
- using System.Web;
- using System.Web.UI;
- using System.Xml;
- using System.Web.Utils;
- namespace System.Web.UI.WebControls
- {
- public class AdRotator: WebControl
- {
- private string advertisementFile;
- private string keywordFilter;
- private string target;
- private static readonly object AdCreatedEvent = new object();
- // Will be set values during (On)PreRender-ing
- private string alternateText;
- private string imageUrl;
- private string navigateUrl;
- private string fileDirctory;
- private class AdRecord
- {
- public IDictionary adProps;
- public int hits; // or impressions or clicks
- public string keyword;
- public AdRecord()
- {
- }
-
- public void Initialize(IDictionary adProps)
- {
- this.adProps = adProps;
- }
- }
- /*
- * Loading / Saving data from/to ad file and all the manipulations wrt to the URL...
- * are incorporated by the following functions.
- * GetData(string)
- * LoadAdFile(string)
- * IsAdMatching(AdRecord)
- * ResolveAdUrl(string)
- * SelectAd()
- * The exact control flow will be detailed. Let me first write the functions
- */
- private AdRecord[] LoadAdFile(string file)
- {
- Stream fSream;
- ArrayList list;
- XmlReader reader;
- XmlDocument document;
- XmlNode topNode, innerNode;
- IDictionary hybridDict;
- AdRecord[] adsArray = null;
- try
- {
- fStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read);
- } catch(Exception e)
- {
- throw new HttpException("AdRotator: Unable to open file");
- }
- try
- {
- list = new ArrayList();
- reader = new XmlTextReader(fStream);
- document = new XmlDocument();
- document.Load(reader);
- if(document.DocumentElement!=null)
- {
- if(docuent.DocumentElement.LocalName=="Advertisements")
- {
- topNode = documentElement.FirstChild;
- while(topNode!=null)
- {
- if(topNode.LocalName=="Ad")
- {
- innerNode = topNode.FirstChild;
- while(innerNode!=null)
- {
- if(innerNode.NodeType==NodeType.Element)
- {
- if(hybridDic==null)
- {
- hybirdDict = new HybridDictionary();
- }
- hybridDic.Add(innerNode.LocalName, innerNode.InnerText);
- }
- innerNode = innerNode.NextSibling;
- }
- if(hybridDict!=null)
- list.Add(hybridDict);
- }
- topNode = topNode.NextSibling;
- }
- }
- }
- if(list.Count>0)
- {
- adsArray = new AdRecord[list.Count];
- for(int i=0; i < list.Count; i++)
- {
- adsArray[i] = new AdRecord((IDictionary)list.Item[i]);
- }
- }
- } catch(Excetion e)
- {
- throw new HttpException("AdRotator: Unable to parse file" + file);
- } finally
- {
- fStream.close();
- }
- if(adsArray == null)
- {
- throw new HttpException("AdRotator: No Advertisements Fount");
- }
- return adsArray;
- }
-
- private AdRecord[] GetData(string file)
- {
- //TODO: Implement me
- fileDirectory = UrlUtils.GetDirectory(TemplateSourceDirectory + MapPathSecure(file));
- throw new NotImplementedException();
- //TODO: Do I need to check caching?
- return null;
- }
-
- private IDictionary SelectAd()
- {
- //TODO: I have to select a Random Ad from the file
- AdRecord[] records = GetFileData(AdvertisementFile);
- if(records!=null)
- {
- if(records.Length > 0)
- {
- //TODO: Implement Me
- }
- }
- throw new NotImplementedException();
- return null;
- }
-
- private bool IsAdMatching(AdRecord currAd)
- {
- if(KeywordFilter!=String.Empty)
- {
- /* Perform a case-insensitive keyword filtering
- * From the documentation, it looks like there's only one keyword attached.
- */
- if(currAd.keyword.ToLower() == KeywordFilter.ToLower())
- return false;
- }
- return true;
- }
-
- private string ResolveAdUrl(string relativeUrl)
- {
- throw new NotImplementedException();
- //TODO: Implement me
- //TODO: Get the full Url from the relativeUrl
- }
-
- public event AdCreatedEventHandler AdCreated
- {
- add
- {
- Events.AddHandler(AdCreatedEvent, value);
- }
- remove
- {
- Events.RemoveHandler(AdCreatedEvent, value);
- }
- }
-
- public AdRotator()
- {
- base();
- advertisementFile = string.Empty;
- keywordFilter = string.Empty;
- target = string.Empty;
- }
-
- public string AdvertisementFile
- {
- get
- {
- return advertisementFile;
- }
- set
- {
- advertisementFile = value;
- }
- }
-
- public string KeywordFilter
- {
- get
- {
- return keywordFilter;
- }
- set
- {
- keywordFilter = value;
- }
- }
-
- public string Target
- {
- get
- {
- return target;
- }
- set
- {
- target = value;
- }
- }
-
- protected override ControlCollection CreateControlCollection()
- {
- return new EmptyControlCollection(this);
- }
-
- protected virtual void OnAdCreated(AdCreatedEventArgs e)
- {
- if(Events!=null)
- {
- AdCreatedEventHandler aceh = (AdCreatedEventHandler)(Events[AdCreatedEvent]);
- if(aceh!=null)
- aceh(this, e);
- }
- }
- protected override void OnPreRender(EventArgs e)
- {
- if(AdvertisementFile!=String.Empty)
- {
- AdCreatedEventArgs acea = new AdCreatedEventArgs(SelectAd());
- imageUrl = acea.ImageUrl;
- navigateUrl = acea.NavigateUrl;
- alternateText = acea.AlternateText;
- }
- }
-
- protected override void Render(HtmlTextWriter writer)
- {
- HyperLink hLink = new HyperLink();
- Image image;
- AttributeCollection attributeColl = base.Attributes;
- ICollection keys = attributeColl.Keys;
- IEnumerator iterator = keys.GetEnumerator();
- throw new NotImplementedException();
- }
- }
- }
|