Пример #1
0
        public void ExportToXml(XmlTextWriter xmlWriter)
        {
            StringBuilder sb;

            xmlWriter.WriteStartElement("ResourceDescription");
            xmlWriter.WriteStartElement("id");
            xmlWriter.WriteStartAttribute("gid");
            xmlWriter.WriteValue(String.Format("0x{0:x16}", this.Id));
            xmlWriter.WriteStartAttribute("type");
            xmlWriter.WriteValue(((DMSType)ModelCodeHelper.ExtractTypeFromGlobalId(this.Id)).ToString());
            xmlWriter.WriteEndElement();             // id
            xmlWriter.WriteStartElement("Properties");
            for (int i = 0; i < this.Properties.Count; i++)
            {
                xmlWriter.WriteStartElement("Property");
                xmlWriter.WriteStartAttribute("id");
                xmlWriter.WriteValue(this.Properties[i].Id.ToString());
                xmlWriter.WriteStartAttribute("value");
                switch (Properties[i].Type)
                {
                case PropertyType.Float:
                    xmlWriter.WriteValue(this.Properties[i].AsFloat());
                    break;

                case PropertyType.Bool:
                case PropertyType.Byte:
                case PropertyType.Int32:
                case PropertyType.Int64:
                case PropertyType.TimeSpan:
                case PropertyType.DateTime:
                    if (this.Properties[i].Id == ModelCode.IDOBJ_GID)
                    {
                        xmlWriter.WriteValue(String.Format("0x{0:x16}", this.Properties[i].AsLong()));
                    }
                    else
                    {
                        xmlWriter.WriteValue(this.Properties[i].AsLong());
                    }

                    break;

                case PropertyType.Enum:
                    try
                    {
                        EnumDescs enumDescs = new EnumDescs();
                        xmlWriter.WriteValue(enumDescs.GetStringFromEnum(this.Properties[i].Id, this.Properties[i].AsEnum()));
                    }
                    catch (Exception)
                    {
                        xmlWriter.WriteValue(this.Properties[i].AsEnum());
                    }

                    break;

                case PropertyType.Reference:
                    xmlWriter.WriteValue(String.Format("0x{0:x16}", this.Properties[i].AsReference()));
                    break;

                case PropertyType.String:
                    if (this.Properties[i].PropertyValue.StringValue == null)
                    {
                        this.Properties[i].PropertyValue.StringValue = String.Empty;
                    }
                    xmlWriter.WriteValue(this.Properties[i].AsString());
                    break;

                case PropertyType.Int64Vector:
                case PropertyType.ReferenceVector:
                    if (this.Properties[i].AsLongs().Count > 0)
                    {
                        sb = new StringBuilder(100);
                        for (int j = 0; j < this.Properties[i].AsLongs().Count; j++)
                        {
                            sb.Append(String.Format("0x{0:x16}", this.Properties[i].AsLongs()[j])).Append(", ");
                        }

                        xmlWriter.WriteValue(sb.ToString(0, sb.Length - 2));
                    }
                    else
                    {
                        xmlWriter.WriteValue("empty long/reference vector");
                    }

                    break;

                case PropertyType.TimeSpanVector:
                    if (this.Properties[i].AsLongs().Count > 0)
                    {
                        sb = new StringBuilder(100);
                        for (int j = 0; j < this.Properties[i].AsLongs().Count; j++)
                        {
                            sb.Append(String.Format("0x{0:x16}", this.Properties[i].AsTimeSpans()[j])).Append(", ");
                        }

                        xmlWriter.WriteValue(sb.ToString(0, sb.Length - 2));
                    }
                    else
                    {
                        xmlWriter.WriteValue("empty long/reference vector");
                    }

                    break;

                case PropertyType.Int32Vector:
                    if (this.Properties[i].AsInts().Count > 0)
                    {
                        sb = new StringBuilder(100);
                        for (int j = 0; j < this.Properties[i].AsInts().Count; j++)
                        {
                            sb.Append(String.Format("{0}", this.Properties[i].AsInts()[j])).Append(", ");
                        }

                        xmlWriter.WriteValue(sb.ToString(0, sb.Length - 2));
                    }
                    else
                    {
                        xmlWriter.WriteValue("empty int vector");
                    }

                    break;

                case PropertyType.DateTimeVector:
                    if (this.Properties[i].AsDateTimes().Count > 0)
                    {
                        sb = new StringBuilder(100);
                        for (int j = 0; j < this.Properties[i].AsDateTimes().Count; j++)
                        {
                            sb.Append(String.Format("{0}", this.Properties[i].AsDateTimes()[j])).Append(", ");
                        }

                        xmlWriter.WriteValue(sb.ToString(0, sb.Length - 2));
                    }
                    else
                    {
                        xmlWriter.WriteValue("empty DateTime vector");
                    }

                    break;

                case PropertyType.BoolVector:
                    if (this.Properties[i].AsBools().Count > 0)
                    {
                        sb = new StringBuilder(100);
                        for (int j = 0; j < this.Properties[i].AsBools().Count; j++)
                        {
                            sb.Append(String.Format("{0}", this.Properties[i].AsBools()[j])).Append(", ");
                        }

                        xmlWriter.WriteValue(sb.ToString(0, sb.Length - 2));
                    }
                    else
                    {
                        xmlWriter.WriteValue("empty int vector");
                    }

                    break;

                case PropertyType.FloatVector:
                    if (this.Properties[i].AsFloats().Count > 0)
                    {
                        sb = new StringBuilder(100);
                        for (int j = 0; j < this.Properties[i].AsFloats().Count; j++)
                        {
                            sb.Append(this.Properties[i].AsFloats()[j]).Append(", ");
                        }

                        xmlWriter.WriteValue(sb.ToString(0, sb.Length - 2));
                    }
                    else
                    {
                        xmlWriter.WriteValue("empty float vector");
                    }

                    break;

                case PropertyType.StringVector:
                    if (this.Properties[i].AsStrings().Count > 0)
                    {
                        sb = new StringBuilder(100);
                        for (int j = 0; j < this.Properties[i].AsStrings().Count; j++)
                        {
                            sb.Append(this.Properties[i].AsStrings()[j]).Append(", ");
                        }

                        xmlWriter.WriteValue(sb.ToString(0, sb.Length - 2));
                    }
                    else
                    {
                        xmlWriter.WriteValue("empty string vector");
                    }

                    break;

                case PropertyType.EnumVector:
                    if (this.Properties[i].AsEnums().Count > 0)
                    {
                        sb = new StringBuilder(100);
                        EnumDescs enumDescs = new EnumDescs();

                        for (int j = 0; j < this.Properties[i].AsEnums().Count; j++)
                        {
                            try
                            {
                                sb.Append(String.Format("{0}", enumDescs.GetStringFromEnum(this.Properties[i].Id, this.Properties[i].AsEnums()[j]))).Append(", ");
                            }
                            catch (Exception)
                            {
                                sb.Append(String.Format("{0}", this.Properties[i].AsEnums()[j])).Append(", ");
                            }
                        }

                        xmlWriter.WriteValue(sb.ToString(0, sb.Length - 2));
                    }
                    else
                    {
                        xmlWriter.WriteValue("empty enum vector");
                    }

                    break;

                default:
                    throw new Exception("Failed to export Resource Description as XML. Invalid property type.");
                }

                xmlWriter.WriteEndElement();                 // Property
            }

            xmlWriter.WriteEndElement();             // Properties
            xmlWriter.WriteEndElement();             // ResourceDescription
        }