Ejemplo n.º 1
0
        public LayoutInfo ConvertStringToLayoutInfo(string layoutInfo, Store store)
        {
            LayoutInfo lInfo = null;

            Microsoft.VisualStudio.Modeling.SerializationResult serializationResult = new Microsoft.VisualStudio.Modeling.SerializationResult();
            DomainXmlSerializerDirectory directory = this.GetDirectory(store);

            System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("ISO-8859-1");
            Microsoft.VisualStudio.Modeling.SerializationContext serializationContext = new SerializationContext(directory, "", serializationResult);
            this.InitializeSerializationContext(store.DefaultPartition, serializationContext, false);

            DomainClassXmlSerializer rootSerializer = directory.GetSerializer(LayoutInfo.DomainClassId);

            using (System.Xml.XmlReader reader = System.Xml.XmlReader.Create(new System.IO.StringReader(layoutInfo)))
            {
                reader.Read(); // Move to the first node - will be the XmlDeclaration if there is one.
                serializationResult.Encoding = encoding;

                reader.MoveToContent();

                lInfo = rootSerializer.TryCreateInstance(serializationContext, reader, store.DefaultPartition) as LayoutInfo;
                rootSerializer.Read(serializationContext, lInfo, reader);
            }

            return(lInfo);
        }
Ejemplo n.º 2
0
        public string ConvertLayoutInfoToString(LayoutInfo info)
        {
            string result = String.Empty;

            Microsoft.VisualStudio.Modeling.SerializationResult serializationResult = new Microsoft.VisualStudio.Modeling.SerializationResult();
            DomainXmlSerializerDirectory directory = this.GetDirectory(info.Store);

            System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("ISO-8859-1");
            Microsoft.VisualStudio.Modeling.SerializationContext serializationContext = new SerializationContext(directory, "", serializationResult);
            this.InitializeSerializationContext(info.Partition, serializationContext, false);

            global::System.IO.MemoryStream       newFileContent = new global::System.IO.MemoryStream();
            global::System.Xml.XmlWriterSettings settings       = DiagramsDSLSerializationHelper.Instance.CreateXmlWriterSettings(serializationContext, false, encoding);
            using (global::System.Xml.XmlWriter writer = global::System.Xml.XmlWriter.Create(newFileContent, settings))
            {
                DomainClassXmlSerializer rootSerializer = directory.GetSerializer(LayoutInfo.DomainClassId);

                RootElementSettings rootElementSettings = new RootElementSettings();
                rootElementSettings.SchemaTargetNamespace = "http://schemas.microsoft.com/dsltools/DiagramsDSL";
                rootElementSettings.Version = new global::System.Version("1.0.0.0");

                // Carry out the normal serialization.
                rootSerializer.Write(serializationContext, info, writer, rootElementSettings);
            }

            char[] chars = encoding.GetChars(newFileContent.GetBuffer());

            // search the open angle bracket and trim off the Byte Of Mark.
            result = new string(chars);
            int indexPos = result.IndexOf('<');

            if (indexPos > 0)
            {
                // strip off the leading Byte Of Mark.
                result = result.Substring(indexPos);
            }

            // trim off trailing 0s.
            result = result.TrimEnd('\0');

            return(result);
        }
Ejemplo n.º 3
0
        private void CustomWriteElements(SerializationContext serializationContext, ModelElement element, XmlWriter writer)
        {
            //DefaultWriteElements(context, element, writer);

            if (!serializationContext.Result.Failed)
            {
                writer.WriteAttributeString("modelVersion", ModelApp.ApplicationVersion.ToString());
            }


            // EntityModelHasDomainTypes
            // Non-public getter, use DomainRoleInfo methods.
            System.Collections.ObjectModel.ReadOnlyCollection <EntityModelHasDomainTypes> allEntityModelHasDomainTypesInstances = DomainRoleInfo.GetElementLinks <EntityModelHasDomainTypes>(element, EntityModelHasDomainTypes.EntityModelDomainRoleId);
            if (!serializationContext.Result.Failed && allEntityModelHasDomainTypesInstances.Count > 0)
            {
                writer.WriteStartElement("domainTypes");
                System.Type typeofEntityModelHasDomainTypes = typeof(EntityModelHasDomainTypes);
                foreach (EntityModelHasDomainTypes eachEntityModelHasDomainTypesInstance in allEntityModelHasDomainTypesInstances)
                {
                    if (serializationContext.Result.Failed)
                    {
                        break;
                    }

                    if (eachEntityModelHasDomainTypesInstance.GetType() != typeofEntityModelHasDomainTypes)
                    {   // Derived relationships will be serialized in full-form.
                        DomainClassXmlSerializer derivedRelSerializer = serializationContext.Directory.GetSerializer(eachEntityModelHasDomainTypesInstance.GetDomainClass().Id);
                        System.Diagnostics.Debug.Assert(derivedRelSerializer != null, "Cannot find serializer for " + eachEntityModelHasDomainTypesInstance.GetDomainClass().Name + "!");
                        derivedRelSerializer.Write(serializationContext, eachEntityModelHasDomainTypesInstance, writer);
                    }
                    else
                    {   // No need to serialize the relationship itself, just serialize the role-player directly.
                        ModelElement             targetElement    = eachEntityModelHasDomainTypesInstance.DomainType;
                        DomainClassXmlSerializer targetSerializer = serializationContext.Directory.GetSerializer(targetElement.GetDomainClass().Id);
                        System.Diagnostics.Debug.Assert(targetSerializer != null, "Cannot find serializer for " + targetElement.GetDomainClass().Name + "!");
                        targetSerializer.Write(serializationContext, targetElement, writer);
                    }
                }
                writer.WriteEndElement();
            }

            // EntityModelHasPersistentTypes
            // Non-public getter, use DomainRoleInfo methods.
            System.Collections.ObjectModel.ReadOnlyCollection <EntityModelHasPersistentTypes> allEntityModelHasPersistentTypesInstances = DomainRoleInfo.GetElementLinks <EntityModelHasPersistentTypes>(element, EntityModelHasPersistentTypes.EntityModelDomainRoleId);
            if (!serializationContext.Result.Failed && allEntityModelHasPersistentTypesInstances.Count > 0)
            {
                writer.WriteStartElement("persistentTypes");
                Type typeofEntityModelHasPersistentTypes = typeof(EntityModelHasPersistentTypes);
                foreach (EntityModelHasPersistentTypes eachEntityModelHasPersistentTypesInstance in allEntityModelHasPersistentTypesInstances)
                {
                    if (serializationContext.Result.Failed)
                    {
                        break;
                    }

                    if (eachEntityModelHasPersistentTypesInstance.GetType() != typeofEntityModelHasPersistentTypes)
                    {   // Derived relationships will be serialized in full-form.
                        DomainClassXmlSerializer derivedRelSerializer = serializationContext.Directory.GetSerializer(eachEntityModelHasPersistentTypesInstance.GetDomainClass().Id);
                        System.Diagnostics.Debug.Assert(derivedRelSerializer != null, "Cannot find serializer for " + eachEntityModelHasPersistentTypesInstance.GetDomainClass().Name + "!");
                        derivedRelSerializer.Write(serializationContext, eachEntityModelHasPersistentTypesInstance, writer);
                    }
                    else
                    {   // No need to serialize the relationship itself, just serialize the role-player directly.
                        ModelElement             targetElement    = eachEntityModelHasPersistentTypesInstance.Element;
                        DomainClassXmlSerializer targetSerializer = serializationContext.Directory.GetSerializer(targetElement.GetDomainClass().Id);
                        System.Diagnostics.Debug.Assert(targetSerializer != null, "Cannot find serializer for " + targetElement.GetDomainClass().Name + "!");
                        targetSerializer.Write(serializationContext, targetElement, writer);
                    }
                }
                writer.WriteEndElement();
            }
        }