Exemplo n.º 1
0
        public static void WriteXmlDigest(ISupportDigest digest, XmlWriter writer, bool writeStartElement, bool writeEndElement)
        {
            bool changed = digest.HasChanged;

            if (changed)
            {
                if (writeStartElement)
                {
                    writer.WriteStartElement(digest.GetType().Name);
                }

                object defaultObject = ReflectionHelpers.GetFieldOrProperty <object>(digest, "Default");
                writer.WriteAttributeString("changed", changed.ToString());
                foreach (string value in digest.DigestableProperties)
                {
                    object cur = ReflectionHelpers.GetFieldOrProperty <object>(digest, value);
                    if (cur != null)
                    {
                        if ((cur is ISupportDigest) && ReflectionHelpers.GetFieldOrProperty <object>(cur, "Default") != null)
                        {
                            ISupportDigest curDigest = cur as ISupportDigest;
                            if (curDigest.HasChanged)
                            {
                                writer.WriteStartElement(value);
                                WriteXmlDigest(cur as ISupportDigest, writer, false, true);
                            }
                        }
                        else
                        {
                            object def = ReflectionHelpers.GetFieldOrProperty <object>(defaultObject, value);
                            if (def != null)
                            {
                                string formatString = "{0}";
                                if (ReflectionHelpers.FieldOrPropertyHasAttribute <HexAttribute>(digest, value))
                                {
                                    formatString = "0x{0:X2}";
                                }
                                WriteDigestEntry(writer, value, def, cur, formatString);
                            }
                        }
                    }
                }

                if (writeEndElement)
                {
                    writer.WriteEndElement();
                }
            }
        }
Exemplo n.º 2
0
        public static void WriteXmlDigest( ISupportDigest digest, XmlWriter writer, bool writeStartElement, bool writeEndElement )
        {
            bool changed = digest.HasChanged;
            if( changed )
            {
                if( writeStartElement )
                {
                    writer.WriteStartElement( digest.GetType().Name );
                }

                object defaultObject = ReflectionHelpers.GetFieldOrProperty<object>( digest, "Default" );
                writer.WriteAttributeString( "changed", changed.ToString() );
                foreach( string value in digest.DigestableProperties )
                {
                    object cur = ReflectionHelpers.GetFieldOrProperty<object>( digest, value );
                    if( cur != null )
                    {
                        if( (cur is ISupportDigest) && ReflectionHelpers.GetFieldOrProperty<object>( cur, "Default" ) != null )
                        {
                            ISupportDigest curDigest = cur as ISupportDigest;
                            if( curDigest.HasChanged )
                            {
                                writer.WriteStartElement( value );
                                WriteXmlDigest( cur as ISupportDigest, writer, false, true );
                            }
                        }
                        else
                        {
                            object def = ReflectionHelpers.GetFieldOrProperty<object>( defaultObject, value );
                            if( def != null )
                            {
                                string formatString = "{0}";
                                if( ReflectionHelpers.FieldOrPropertyHasAttribute<HexAttribute>( digest, value ) )
                                {
                                    formatString = "0x{0:X2}";
                                }
                                WriteDigestEntry( writer, value, def, cur, formatString );
                            }
                        }
                    }
                }

                if( writeEndElement )
                {
                    writer.WriteEndElement();
                }
            }
        }