/[xmltv_parser]/trunk/libxmltv/Core/ExtraMetaData.cs
ViewVC logotype

Diff of /trunk/libxmltv/Core/ExtraMetaData.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 106 by william, Sun Mar 10 12:25:54 2013 UTC revision 110 by william, Sun Mar 10 14:28:57 2013 UTC
# Line 4  using System.Linq; Line 4  using System.Linq;
4  using System.Text;  using System.Text;
5  using libxmltv.Interfaces;  using libxmltv.Interfaces;
6  using System.Xml.Linq;  using System.Xml.Linq;
7    using System.IO;
8    using System.Xml.Serialization;
9    using System.Xml;
10    
11  namespace libxmltv.Core  namespace libxmltv.Core
12  {  {
13      internal class ExtraMetaData : ExtraMetaData<XElement>, IExtraMetaData      [Serializable]
14        internal class ExtraMetaData : IExtraMetaData
15      {      {
16          public ExtraMetaData() : base() { }          public ExtraMetaData() : this(string.Empty, string.Empty) { }
17          public ExtraMetaData(XElement value) : base(value) { }          public ExtraMetaData(XElement node) : this()
     }  
     internal class ExtraMetaData<TValue> : IExtraMetaData<TValue>  
         where TValue: XElement  
     {  
         public ExtraMetaData() : this(default(TValue)) { }  
         public ExtraMetaData(TValue value)  
18          {          {
19              if (value == null) { throw new ArgumentNullException("value", "cannot be null"); }              //throw new NotImplementedException("ExtraMetaData from XElement as not been implemented");
20              if (value.Name == null) { throw new ArgumentNullException("value.Name", "cannot be null"); }              if (node == null) { throw new ArgumentNullException("value", "cannot be null"); }
21              this.Name = value.Name.ToString();              if (node.Name == null) { throw new ArgumentNullException("value.Name", "cannot be null"); }
22              this.Value = value;              this.Name = node.Name.ToString();
23                this.Value = XElementSerializer<string>.FromXElement(node);
24            }
25            public ExtraMetaData(string name, string value)
26            {
27                this.Name = name;
28                this.Value = value;
29          }          }
         #region IExtraMetaData<TKey,TValue> memebers  
         #endregion  
         private string _name;  
         public string Name { get { return _name; } protected set { _name = value; } }  
         private TValue _value;  
         public TValue Value { get { return _value; } protected set { _value = value; } }  
30          public override string ToString()          public override string ToString()
31          {          {
32              return string.Format("{0}", this.Name);              return string.Format("{0}", this.Name);
33          }          }
34            private string _Name;
35            public string Name { get { return _Name; } set { _Name = value; } }
36            private string _Value;
37            public string Value { get { return _Value; } set { _Value = value; } }
38    
39            public XElement AsXElement()
40            {
41                //throw new NotImplementedException("ExtraMetaData.AsXElement() has not been implemented");
42                return XElementSerializer<string>.ToXElement(Value);
43            }
44    
45            #region sub-classes
46            private static class XElementSerializer<TValue>
47            {
48                public static XElement ToXElement(TValue value)
49                {
50                    if (value == null)
51                    {
52                        throw new ArgumentNullException("value", string.Format("cannot convert a null '{0}' value to '{1}'.", typeof(TValue).Name, typeof(XElement).Name));
53                    }
54                    XElement element = null;
55                    try
56                    {
57                        element = XElement.Parse(value.ToString());
58                    }
59                    catch (Exception ex)
60                    {
61                        throw ex;
62                    }
63    
64    
65    
66                    return element;
67                }
68                public static TValue FromXElement(XElement node)
69                {
70                    if (node == null)
71                    {
72                        throw new ArgumentNullException("node", string.Format("cannot convert a null '{0}' value to {1}.", typeof(XElement).Name, typeof(TValue).Name));
73                    }
74                    TValue value = default(TValue);                
75                    object raw_object = new object();
76                    using (var ms = new MemoryStream())
77                    {
78                        using (var tw = XmlWriter.Create(ms)) { node.WriteTo(tw); tw.Flush(); tw.Close(); }
79                        ms.Seek(0, SeekOrigin.Begin);
80                        using (var sr = new StreamReader(ms)) { raw_object = sr.ReadToEnd(); }
81                    }
82                    value = (TValue)Convert.ChangeType(raw_object, typeof(TValue));
83                    return value;
84                }
85            }
86            #endregion
87      }      }
88  }  }

Legend:
Removed from v.106  
changed lines
  Added in v.110

  ViewVC Help
Powered by ViewVC 1.1.22