public static void Serialize(XmlWriter w, IKvaSerializable drawing, SerializationFilter filter)
        {
            if (drawing.Id == Guid.Empty)
            {
                return;
            }

            // The XML name for this drawing should be stored in its [XMLType] C# attribute.
            Type t = drawing.GetType();

            object[] attributes = t.GetCustomAttributes(typeof(XmlTypeAttribute), false);

            if (attributes.Length == 0)
            {
                return;
            }

            string xmlName = ((XmlTypeAttribute)attributes[0]).TypeName;

            w.WriteStartElement(xmlName);
            w.WriteAttributeString("id", drawing.Id.ToString());
            w.WriteAttributeString("name", drawing.Name);
            drawing.WriteXml(w, filter);
            w.WriteEndElement();
        }
Esempio n. 2
0
        public void WriteXml(XmlWriter w)
        {
            w.WriteStartElement("Position");
            string userTime = m_ParentMetadata.TimeStampsToTimecode(m_Position, TimeCodeFormat.Unknown, false);

            w.WriteAttributeString("UserTime", userTime);
            w.WriteString(m_Position.ToString());
            w.WriteEndElement();

            if (!string.IsNullOrEmpty(Title))
            {
                w.WriteElementString("Title", Title);
            }

            if (!string.IsNullOrEmpty(m_CommentRtf))
            {
                w.WriteElementString("Comment", m_CommentRtf);
            }

            if (m_Drawings.Count > 0)
            {
                w.WriteStartElement("Drawings");
                foreach (AbstractDrawing drawing in m_Drawings)
                {
                    IKvaSerializable serializableDrawing = drawing as IKvaSerializable;
                    if (serializableDrawing != null)
                    {
                        // The XML name for this drawing should be stored in its [XMLType] C# attribute.
                        Type     t          = serializableDrawing.GetType();
                        object[] attributes = t.GetCustomAttributes(typeof(XmlTypeAttribute), false);

                        if (attributes.Length > 0)
                        {
                            string xmlName = ((XmlTypeAttribute)attributes[0]).TypeName;

                            w.WriteStartElement(xmlName);
                            serializableDrawing.WriteXml(w);
                            w.WriteEndElement();
                        }
                    }
                }
                w.WriteEndElement();
            }
        }
Esempio n. 3
0
        public void WriteXml(XmlWriter w)
        {
            w.WriteStartElement("Position");
            if (metadata.TimeCodeBuilder != null)
            {
                string userTime = metadata.TimeCodeBuilder(position, TimeType.UserOrigin, TimecodeFormat.Unknown, false);
                w.WriteAttributeString("UserTime", userTime);
            }

            w.WriteString(position.ToString());
            w.WriteEndElement();

            if (!string.IsNullOrEmpty(Title))
            {
                w.WriteElementString("Title", Title);
            }

            if (!string.IsNullOrEmpty(comments))
            {
                w.WriteElementString("Comment", comments);
            }

            if (drawings.Count == 0)
            {
                return;
            }

            // Drawings are written in reverse order to match order of addition.
            w.WriteStartElement("Drawings");
            for (int i = drawings.Count - 1; i >= 0; i--)
            {
                IKvaSerializable serializableDrawing = drawings[i] as IKvaSerializable;
                if (serializableDrawing == null)
                {
                    continue;
                }

                DrawingSerializer.Serialize(w, serializableDrawing, SerializationFilter.All);
            }
            w.WriteEndElement();
        }
Esempio n. 4
0
        public static void DeserializeModifyMemento(Guid managerId, Guid drawingId, string data, Metadata metadata)
        {
            AbstractDrawingManager manager = metadata.GetDrawingManager(managerId);
            IKvaSerializable       drawing = manager.GetDrawing(drawingId) as IKvaSerializable;

            if (drawing == null)
            {
                return;
            }

            PointF identityScale = new PointF(1, 1);

            XmlReaderSettings settings = new XmlReaderSettings();

            settings.IgnoreComments = true;
            settings.IgnoreProcessingInstructions = true;
            settings.IgnoreWhitespace             = true;
            settings.CloseInput = true;

            using (XmlReader r = XmlReader.Create(new StringReader(data), settings))
            {
                r.MoveToContent();

                if (!(r.Name == "DrawingMemento"))
                {
                    return;
                }

                r.ReadStartElement();

                drawing.ReadXml(r, identityScale, TimeHelper.IdentityTimestampMapper);

                if (drawing is ITrackable)
                {
                    metadata.TrackabilityManager.ReadTracker(r, identityScale, TimeHelper.IdentityTimestampMapper);
                    metadata.TrackabilityManager.Assign(drawing as ITrackable);
                }
            }
        }
Esempio n. 5
0
        public static string SerializeMemento(Metadata metadata, AbstractDrawing drawing, SerializationFilter filter, bool saveTrackability)
        {
            IKvaSerializable kvaDrawing = drawing as IKvaSerializable;

            if (kvaDrawing == null)
            {
                return("");
            }

            string result = "";

            XmlWriterSettings settings = new XmlWriterSettings();

            settings.Indent      = false;
            settings.CloseOutput = true;

            StringBuilder builder = new StringBuilder();

            using (XmlWriter w = XmlWriter.Create(builder, settings))
            {
                w.WriteStartElement("DrawingMemento");

                Serialize(w, kvaDrawing, filter);

                if (saveTrackability && drawing is ITrackable)
                {
                    metadata.TrackabilityManager.WriteTracker(w, drawing.Id);
                }

                w.WriteEndElement();

                w.Flush();
                result = builder.ToString();
            }

            return(result);
        }