/[dgee]/dgee/cslib/DotGNU/XmlRpc/XmlRpcWriter.cs
ViewVC logotype

Diff of /dgee/cslib/DotGNU/XmlRpc/XmlRpcWriter.cs

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

revision 1.1.2.4 by npg, Tue Jul 22 14:42:25 2003 UTC revision 1.1.2.5 by npg, Tue Jul 22 18:56:20 2003 UTC
# Line 37  namespace DotGNU.XmlRpc Line 37  namespace DotGNU.XmlRpc
37    // Grrr Grrr Grrrrr    // Grrr Grrr Grrrrr
38    public class XmlRpcWriter    public class XmlRpcWriter
39    {    {
40      private IndentedTextWriter writer;      private XmlTextWriter writer;
41      private StringWriter sw;      private StringWriter sw;
42      private XmlRpcMethod m;      private XmlRpcMethod m;
43            
44      public XmlRpcWriter()      public XmlRpcWriter()
45      {      {
46        sw     = new StringWriter();        sw     = new StringWriter();
47        writer = new IndentedTextWriter( sw, "  " );        writer = new XmlTextWriter( sw );
48          //writer.Formatting = Formatting.Indented;
49      }      }
50    
51      private void WriteHead()      private void WriteHead()
52      {      {
53        writer.WriteLine( "<?xml version=\"1.0\"?>" );        writer.WriteStartDocument();
54        writer.WriteLine( "<methodResponse>" );        writer.WriteStartElement( "methodResponse" );
55        writer.Indent++;        writer.WriteStartElement( "params" );
56        writer.WriteLine( "<params>" );        writer.WriteStartElement( "param" );
57        writer.Indent++;        writer.WriteStartElement( "value" );
       writer.WriteLine( "<param>" );  
       writer.Indent++;  
       writer.WriteLine( "<value>" );  
       writer.Indent++;  
58      }      }
59    
60      private void WriteTail()      private void WriteTail()
61      {      {
62        writer.Indent--;        writer.WriteEndElement(); // value
63        writer.WriteLine( "</value>" );        writer.WriteEndElement(); // param
64        writer.Indent--;        writer.WriteEndElement(); // params
65        writer.WriteLine( "</param>" );        writer.WriteEndElement(); // methodResponse
66        writer.Indent--;        writer.WriteEndDocument();
       writer.WriteLine( "</params>" );  
       writer.Indent--;  
       writer.WriteLine( "</methodResponse>" );  
67      }      }
68    
69      private void Write( object o )      private void Write( object o )
70      {      {
       string tag;  
71        if( o is int ) {        if( o is int ) {
72          tag = "i4";          writer.WriteElementString( "i4", XmlConvert.ToString( (int)o ) );
         Write( tag, o );  
73        }        }
74        else if( o is double ) {        else if( o is double ) {
75          tag = "double";          // XmlConvert is HORRID doing this!!!!  Try this with a value
76          Write( tag, o );          // of 2.0 and see what i mean
77            writer.WriteElementString( "double",  o.ToString() );
78        }        }
79        else if( o is string ) {        else if( o is string ) {
80          tag = "string";          writer.WriteElementString( "string", (string)o );
         Write( tag, o );  
81        }        }
82        else if( o is bool ) {        else if( o is bool ) {
83          tag = "boolean";          writer.WriteElementString( "boolean", XmlConvert.ToString( (bool)o ) );
         Write( tag, o );  
84        }        }
85        else if( o is DateTime ) {        else if( o is DateTime ) {
86          tag = "dateTime.iso8601";          // ensure this is iso compliant
87          Write( tag, o );          DateTime dt = (DateTime)o;
88    
89            // Why has MS got no clue about ISO 8601???  Horrid.  All
90            // these newbies working on specs.  this is as close as it
91            // gets but not exactly since the 'T' can be left out
92            writer.WriteElementString( "dateTime.iso860", dt.ToString( "s" ) );
93        }        }
94        else if( o is byte[] ) {        else if( o is byte[] ) {
         StringWriter sw = new StringWriter();  
         XmlTextWriter tw = new XmlTextWriter( sw );  
95          byte[] buf = (byte[])o;          byte[] buf = (byte[])o;
96          tw.WriteStartElement( "base64" );          writer.WriteStartElement( "base64" );
97          tw.WriteBase64( buf, 0, buf.Length);          writer.WriteBase64( buf, 0, buf.Length);
98          tw.WriteEndElement();          writer.WriteEndElement(); // base64
         //tag = "base64";  
         //Write( tag, o );  
         writer.WriteLine( sw );  
99        }        }
100        else if( o is XmlRpcStruct ) {        else if( o is XmlRpcStruct ) {
101          tag = "struct";          writer.WriteStartElement( "struct" );
         writer.WriteLine( "<struct>" );  
         writer.Indent++;  
102                
103          foreach( DictionaryEntry entry in (XmlRpcStruct)o ) {          foreach( DictionaryEntry entry in (XmlRpcStruct)o ) {
104            writer.WriteLine( "<member>" );            writer.WriteStartElement( "member" );
105            writer.Indent++;            writer.WriteElementString( "name", (string)entry.Key );
106            writer.WriteLine( "<name>" );            writer.WriteStartElement( "value" );
           writer.Indent++;  
           writer.WriteLine( entry.Key );  
           writer.Indent--;  
           writer.WriteLine( "</name>" );  
           writer.WriteLine( "<value>" );  
           writer.Indent++;  
107            Write( entry.Value );            Write( entry.Value );
108            writer.Indent--;            writer.WriteEndElement(); // value
109            writer.WriteLine( "</value>" );            writer.WriteEndElement(); // member
           writer.Indent--;  
           writer.WriteLine( "</member>" );  
110          }          }
111          writer.Indent--;          writer.WriteEndElement(); // struct
         writer.WriteLine( "</struct>" );  
112        }        }
113        else if( o is XmlRpcArray ) {        else if( o is XmlRpcArray ) {
114          tag = "array";          writer.WriteStartElement( "array" );
115          writer.WriteLine( "<array>" );          writer.WriteStartElement( "data" );
         writer.Indent++;  
         writer.WriteLine( "<data>" );  
         writer.Indent++;  
116          foreach( object entry in (XmlRpcArray)o ) {          foreach( object entry in (XmlRpcArray)o ) {
117            writer.WriteLine( "<value>" );            writer.WriteStartElement( "value" );
           writer.Indent++;  
118            this.Write( entry );            this.Write( entry );
119            writer.Indent--;            writer.WriteEndElement(); // value
           writer.WriteLine( "</value>" );  
120          }          }
121          writer.Indent--;          writer.WriteEndElement(); // data
122          writer.WriteLine( "</data>" );          writer.WriteEndElement(); // array
         writer.Indent--;  
         writer.WriteLine( "</array>" );  
123        }        }
124      }      }
       
     private void Write( string tag, object o )  
     {  
       writer.WriteLine( "<{0}>", tag );  
       writer.Indent++;  
       writer.WriteLine( o );  
       writer.Indent--;  
       writer.WriteLine( "</{0}>", tag );  
     }  
125    
126      public string Parse( XmlRpcStruct s )      public string Parse( XmlRpcStruct s )
127      {      {
128        WriteHead();        WriteHead();
129        Write( s );        Write( s );
130        WriteTail();        WriteTail();
   
       /*  
         
       pile of bollocks.  i thought XmlTextWriter was re-implemented?  
       The indentation is still horribly broken  
         
       StringWriter sw = new StringWriter();  
       XmlTextWriter tw = new XmlTextWriter( sw );  
       tw.Formatting = Formatting.Indented;  
       tw.Indentation = 4;  
   
       tw.WriteStartDocument();  
       tw.WriteStartElement( "foo" );  
       tw.WriteStartElement( "bar" );  
       tw.WriteString( "hello there" );  
       tw.WriteEndElement();  
       tw.WriteEndElement();  
       tw.WriteEndDocument();  
       */  
   
       //tw.Indentation=4;  
131        return sw.ToString();        return sw.ToString();
132      }      }
       
     //public override string ToString()  
     //{  
     //}  
133    }    }
134  }  }

Legend:
Removed from v.1.1.2.4  
changed lines
  Added in v.1.1.2.5

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26