static void XmlElementHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaElement element        = (XmlSchemaElement)schemaObject;
            XmlSchemaElement contentElement = GenerateValidElementsComment(element, context);

            context.writer.WriteStartElement(element.QualifiedName.Name, element.QualifiedName.Namespace);
            if (contentElement != element)
            {
                string value = contentElement.QualifiedName.Name;
                if (contentElement.QualifiedName.Namespace != element.QualifiedName.Namespace && !String.IsNullOrEmpty(contentElement.QualifiedName.Namespace))
                {
                    string prefix = context.writer.LookupPrefix(contentElement.QualifiedName.Namespace);
                    if (prefix == null)
                    {
                        prefix = string.Concat("d", context.currentDepthLevel.ToString(System.Globalization.NumberFormatInfo.InvariantInfo));
                        context.writer.WriteAttributeString(XmlNamespacePrefix, prefix, null, contentElement.QualifiedName.Namespace);
                    }
                    value = String.Format(CultureInfo.InvariantCulture, "{0}:{1}", prefix, contentElement.QualifiedName.Name);
                }
                context.writer.WriteAttributeString("i", XmlSchemaInstanceType, XmlSchemaInstanceNamespace, value);
            }
            foreach (XmlSchemaObject constraint in contentElement.Constraints)
            {
                InvokeHandler(constraint, context);
            }
            InvokeHandler(contentElement.ElementSchemaType, context);
            context.writer.WriteEndElement();
        }
        static void XmlSequenceHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaSequence sequence = (XmlSchemaSequence)schemaObject;

            foreach (XmlSchemaObject innerObject in sequence.Items)
            {
                XmlSchemaElement element = innerObject as XmlSchemaElement;
                for (int count = 0; count < 2 && element.MaxOccurs > count; ++count)
                {
                    if (element != null && IsObject(element))
                    {
                        int instances = 0;
                        context.elementDepth.TryGetValue(element, out instances);
                        context.elementDepth[element] = ++instances;
                        if (instances < 3)
                        {
                            InvokeHandler(innerObject, context);
                        }
                        else
                        {
                            context.writer.WriteStartElement(element.QualifiedName.Name, element.QualifiedName.Namespace);
                            context.writer.WriteAttributeString("i", XmlSchemaInstanceNil, XmlSchemaInstanceNamespace, "true");
                            context.writer.WriteEndElement();
                        }
                        --context.elementDepth[element];
                    }
                    else
                    {
                        InvokeHandler(innerObject, context);
                    }
                }
            }
        }
        static void SimpleTypeRestrictionHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaSimpleTypeRestriction restriction = (XmlSchemaSimpleTypeRestriction)schemaObject;

            foreach (XmlSchemaObject facet in restriction.Facets)
            {
                InvokeHandler(facet, context);
            }
        }
        static void JsonComplexTypeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaComplexType complexType = (XmlSchemaComplexType)schemaObject;

            if (complexType.ContentModel != null)
            {
                InvokeHandler(complexType.ContentModel, context);
            }
            InvokeHandler(complexType.ContentTypeParticle, context);
        }
        static void XmlAttributeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaAttribute attribute = (XmlSchemaAttribute)schemaObject;
            string             content   = GenerateContentForXmlSimpleType(attribute.AttributeSchemaType);

            if (String.IsNullOrEmpty(content))
            {
                context.writer.WriteAttributeString("i", XmlSchemaInstanceNil, XmlSchemaInstanceNamespace, "true");
            }
            else
            {
                context.writer.WriteAttributeString(attribute.QualifiedName.Name, attribute.QualifiedName.Namespace, content);
            }
        }
        static void XmlComplexTypeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaComplexType complexType = (XmlSchemaComplexType)schemaObject;

            foreach (XmlSchemaObject attribute in complexType.AttributeUses.Values)
            {
                InvokeHandler(attribute, context);
            }
            if (complexType.ContentModel != null)
            {
                InvokeHandler(complexType.ContentModel, context);
            }
            InvokeHandler(complexType.ContentTypeParticle, context);
            if (complexType.IsMixed)
            {
                context.writer.WriteString("This element contains text.");
            }
        }
        static void JsonElementHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaElement element        = (XmlSchemaElement)schemaObject;
            XmlSchemaElement contentElement = GetDerivedTypes(element, context).FirstOrDefault();

            if (contentElement == null)
            {
                contentElement = element;
            }

            if (context.overrideElementName != null)
            {
                context.writer.WriteStartElement(null, context.overrideElementName, null);
                context.overrideElementName = null;
            }
            else
            {
                context.writer.WriteStartElement(null, element.Name, null);
            }

            if (IsArrayElementType(element))
            {
                context.writer.WriteAttributeString("type", "array");
                context.overrideElementName = "item";
            }
            else if (IsObject(element))
            {
                if (contentElement != element)
                {
                    Type derivedType = null;
                    context.knownTypes.TryGetValue(contentElement.QualifiedName, out derivedType);
                    if (derivedType != null)
                    {
                        context.writer.WriteStartAttribute(null, "__type", null);
                        context.writer.WriteString(String.Format(CultureInfo.InvariantCulture, "{0}:#{1}", derivedType.Name, derivedType.Namespace));
                        context.writer.WriteEndAttribute();
                    }
                }
                context.writer.WriteAttributeString("type", "object");
            }
            InvokeHandler(contentElement.ElementSchemaType, context);
            context.overrideElementName = null;
            context.writer.WriteEndElement();
        }
        public static void GenerateJsonSample(XmlSchemaSet schemaSet, XmlQualifiedName name, XmlWriter writer, IDictionary <XmlQualifiedName, Type> knownTypes)
        {
            HelpExampleGeneratorContext context = new HelpExampleGeneratorContext
            {
                currentDepthLevel   = 0,
                elementDepth        = new Dictionary <XmlSchemaElement, int>(),
                knownTypes          = knownTypes,
                objectHandler       = JsonObjectHandler,
                schemaSet           = schemaSet,
                overrideElementName = "root",
                writer = writer,
            };

            if (!schemaSet.IsCompiled)
            {
                schemaSet.Compile();
            }
            InvokeHandler(schemaSet.GlobalElements[name], context);
        }
        static void XmlSimpleTypeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaObject;

            if (simpleType.QualifiedName.Namespace != "http://schemas.microsoft.com/2003/10/Serialization/" &&
                simpleType.QualifiedName.Namespace != XmlSchemaNamespace &&
                simpleType.QualifiedName.Name != "guid")
            {
                InvokeHandler(simpleType.Content, context);
            }
            string content = GenerateContentForXmlSimpleType(simpleType);

            if (String.IsNullOrEmpty(content))
            {
                context.writer.WriteAttributeString("i", XmlSchemaInstanceNil, XmlSchemaInstanceNamespace, "true");
            }
            else
            {
                context.writer.WriteString(content);
            }
        }
 static void InvokeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     if (++context.currentDepthLevel < MaxDepthLevel)
     {
         Action <XmlSchemaObject, HelpExampleGeneratorContext> action;
         Type objectType = schemaObject.GetType();
         if (context.objectHandler.TryGetValue(objectType, out action))
         {
             action(schemaObject, context);
         }
         else if (objectType.Name != "EmptyParticle")
         {
             throw new InvalidOperationException(String.Format("Handler for type {0} not found.", schemaObject.GetType().Name));
         }
         --context.currentDepthLevel;
     }
     else
     {
         throw new InvalidOperationException(String.Format("Max depth level reached at {0}.", schemaObject.GetType().Name));
     }
 }
 static void InvokeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     if (++context.currentDepthLevel < MaxDepthLevel)
     {
         Action <XmlSchemaObject, HelpExampleGeneratorContext> action;
         Type objectType = schemaObject.GetType();
         if (context.objectHandler.TryGetValue(objectType, out action))
         {
             action(schemaObject, context);
         }
         else if (objectType.Name != "EmptyParticle")
         {
             throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR2.GetString(SR2.HelpExampleGeneratorHandlerNotFound, schemaObject.GetType().Name)));
         }
         --context.currentDepthLevel;
     }
     else
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR2.GetString(SR2.HelpExampleGeneratorMaxDepthLevelReached, schemaObject.GetType().Name)));
     }
 }
        static void JsonSequenceHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaSequence sequence = (XmlSchemaSequence)schemaObject;

            foreach (XmlSchemaObject innerObject in sequence.Items)
            {
                XmlSchemaElement element = innerObject as XmlSchemaElement;
                if (element != null && IsObject(element))
                {
                    int instances = 0;
                    context.elementDepth.TryGetValue(element, out instances);
                    context.elementDepth[element] = ++instances;
                    if (instances < 3)
                    {
                        InvokeHandler(innerObject, context);
                    }
                    else
                    {
                        if (context.overrideElementName != null)
                        {
                            context.writer.WriteStartElement(context.overrideElementName);
                            context.overrideElementName = null;
                        }
                        else
                        {
                            context.writer.WriteStartElement(element.QualifiedName.Name);
                        }
                        context.writer.WriteAttributeString("type", "null");
                        context.writer.WriteEndElement();
                    }
                    --context.elementDepth[element];
                }
                else
                {
                    InvokeHandler(innerObject, context);
                }
            }
        }
        static void XmlSimpleTypeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaObject;

            if (simpleType.QualifiedName.Namespace != System.Runtime.Serialization.Globals.SerializationNamespace &&
                simpleType.QualifiedName.Namespace != XmlSchemaNamespace &&
                simpleType.QualifiedName.Name != "guid")
            {
                InvokeHandler(simpleType.Content, context);
            }
            string content = GenerateContentForXmlSimpleType(simpleType);

            if (String.IsNullOrEmpty(content))
            {
                if (!(simpleType.Content is XmlSchemaSimpleTypeList))
                {
                    context.writer.WriteAttributeString("i", XmlSchemaInstanceNil, XmlSchemaInstanceNamespace, "true");
                }
            }
            else
            {
                context.writer.WriteString(content);
            }
        }
예제 #14
0
 static void InvokeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     if (++context.currentDepthLevel < MaxDepthLevel)
     {
         Action<XmlSchemaObject, HelpExampleGeneratorContext> action;
         Type objectType = schemaObject.GetType();
         if (context.objectHandler.TryGetValue(objectType, out action))
         {
             action(schemaObject, context);
         }
         else if (objectType.Name != "EmptyParticle")
         {
             throw new InvalidOperationException(String.Format("Handler for type {0} not found.", schemaObject.GetType().Name));
         }
         --context.currentDepthLevel;
     }
     else
     {
         throw new InvalidOperationException(String.Format("Max depth level reached at {0}.", schemaObject.GetType().Name));
     }
 }
예제 #15
0
        public static void GenerateXmlSample(XmlSchemaSet schemaSet, XmlQualifiedName name, XmlWriter writer)
        {
            HelpExampleGeneratorContext context = new HelpExampleGeneratorContext
            {
                currentDepthLevel = 0,
                elementDepth = new Dictionary<XmlSchemaElement, int>(),
                knownTypes = null,
                objectHandler = XmlObjectHandler,
                schemaSet = schemaSet,
                overrideElementName = null,
                writer = writer,
            };

            if (!schemaSet.IsCompiled)
            {
                schemaSet.Compile();
            }

            InvokeHandler(schemaSet.GlobalElements[name], context);
        }
 static void JsonSimpleTypeListHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     XmlSchemaSimpleTypeList simpleTypeList = (XmlSchemaSimpleTypeList)schemaObject;
     InvokeHandler(simpleTypeList.ItemType, context);
 }
 static void ErrorHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     throw new InvalidOperationException(String.Format("Schema object {0} not supported.", schemaObject.GetType().Name));
 }
예제 #18
0
 static void XmlElementHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     XmlSchemaElement element = (XmlSchemaElement)schemaObject;
     XmlSchemaElement contentElement = GenerateValidElementsComment(element, context);
     context.writer.WriteStartElement(element.QualifiedName.Name, element.QualifiedName.Namespace);
     if (contentElement != element)
     {
         string value = contentElement.QualifiedName.Name;
         if (contentElement.QualifiedName.Namespace != element.QualifiedName.Namespace && !String.IsNullOrEmpty(contentElement.QualifiedName.Namespace))
         {
             string prefix = context.writer.LookupPrefix(contentElement.QualifiedName.Namespace);
             if (prefix == null)
             {
                 prefix = string.Concat("d", context.currentDepthLevel.ToString(System.Globalization.NumberFormatInfo.InvariantInfo));
                 context.writer.WriteAttributeString(XmlNamespacePrefix, prefix, null, contentElement.QualifiedName.Namespace);
             }
             value = String.Format(CultureInfo.InvariantCulture, "{0}:{1}", prefix, contentElement.QualifiedName.Name);
         }
         context.writer.WriteAttributeString("i", XmlSchemaInstanceType, XmlSchemaInstanceNamespace, value);
     }
     foreach (XmlSchemaObject constraint in contentElement.Constraints)
     {
         InvokeHandler(constraint, context);
     }
     InvokeHandler(contentElement.ElementSchemaType, context);
     context.writer.WriteEndElement();
 }
예제 #19
0
 static void ErrorHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     throw new InvalidOperationException(String.Format("Schema object {0} not supported.", schemaObject.GetType().Name));
 }
예제 #20
0
 static void ContentHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     XmlSchemaContentModel model = (XmlSchemaContentModel)schemaObject;
     InvokeHandler(model.Content, context);
 }
예제 #21
0
 static void JsonSequenceHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     XmlSchemaSequence sequence = (XmlSchemaSequence)schemaObject;
     foreach (XmlSchemaObject innerObject in sequence.Items)
     {
         XmlSchemaElement element = innerObject as XmlSchemaElement;
         if (element != null && IsObject(element))
         {
             int instances = 0;
             context.elementDepth.TryGetValue(element, out instances);
             context.elementDepth[element] = ++instances;
             if (instances < 3)
             {
                 InvokeHandler(innerObject, context);
             }
             else
             {
                 if (context.overrideElementName != null)
                 {
                     context.writer.WriteStartElement(context.overrideElementName);
                     context.overrideElementName = null;
                 }
                 else
                 {
                     context.writer.WriteStartElement(element.QualifiedName.Name);
                 }
                 context.writer.WriteAttributeString("type", "null");
                 context.writer.WriteEndElement();
             }
             --context.elementDepth[element];
         }
         else
         {
             InvokeHandler(innerObject, context);
         }
     }
 }
예제 #22
0
        static void JsonElementHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaElement element = (XmlSchemaElement)schemaObject;
            XmlSchemaElement contentElement = GetDerivedTypes(element, context).FirstOrDefault();
            if (contentElement == null)
            {
                contentElement = element;
            }

            if (context.overrideElementName != null)
            {
                context.writer.WriteStartElement(null, context.overrideElementName, null);
                context.overrideElementName = null;
            }
            else
            {
                context.writer.WriteStartElement(null, element.Name, null);
            }

            if (IsArrayElementType(element))
            {
                context.writer.WriteAttributeString("type", "array");
                context.overrideElementName = "item";
            }
            else if (IsObject(element))
            {
                if (contentElement != element)
                {
                    Type derivedType = null;
                    context.knownTypes.TryGetValue(contentElement.QualifiedName, out derivedType);
                    if (derivedType != null)
                    {
                        context.writer.WriteStartAttribute(null, "__type", null);
                        context.writer.WriteString(String.Format(CultureInfo.InvariantCulture, "{0}:#{1}", derivedType.Name, derivedType.Namespace));
                        context.writer.WriteEndAttribute();
                    }
                }
                context.writer.WriteAttributeString("type", "object");
            }
            InvokeHandler(contentElement.ElementSchemaType, context);
            context.overrideElementName = null;
            context.writer.WriteEndElement();
        }
예제 #23
0
        static void XmlSequenceHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaSequence sequence = (XmlSchemaSequence)schemaObject;
            foreach (XmlSchemaObject innerObject in sequence.Items)
            {
                XmlSchemaElement element = innerObject as XmlSchemaElement;
                if (element == null)
                {
                    InvokeHandler(innerObject, context);
                }
                else
                {
                    for (int count = 0; count < 2 && element.MaxOccurs > count; ++count)
                    {
                        if (element != null && IsObject(element))
                        {

                            int instances = 0;
                            context.elementDepth.TryGetValue(element, out instances);
                            context.elementDepth[element] = ++instances;
                            if (instances < 3)
                            {
                                InvokeHandler(innerObject, context);
                            }
                            else
                            {
                                context.writer.WriteStartElement(element.QualifiedName.Name, element.QualifiedName.Namespace);
                                context.writer.WriteAttributeString("i", XmlSchemaInstanceNil, XmlSchemaInstanceNamespace, "true");
                                context.writer.WriteEndElement();
                            }
                            --context.elementDepth[element];
                        }
                        else
                        {
                            InvokeHandler(innerObject, context);
                        }
                    }
                }
            }
        }
        static void JsonSimpleTypeListHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaSimpleTypeList simpleTypeList = (XmlSchemaSimpleTypeList)schemaObject;

            InvokeHandler(simpleTypeList.ItemType, context);
        }
        static void ChoiceHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaChoice choice = (XmlSchemaChoice)schemaObject;

            InvokeHandler(choice.Items[0], context);
        }
        static void ContentHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaContentModel model = (XmlSchemaContentModel)schemaObject;

            InvokeHandler(model.Content, context);
        }
예제 #27
0
 static void XmlAttributeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     XmlSchemaAttribute attribute = (XmlSchemaAttribute)schemaObject;
     string content = GenerateContentForXmlSimpleType(attribute.AttributeSchemaType);
     if (String.IsNullOrEmpty(content))
     {
         context.writer.WriteAttributeString("i", XmlSchemaInstanceNil, XmlSchemaInstanceNamespace, "true");
     }
     else
     {
         context.writer.WriteAttributeString(attribute.QualifiedName.Name, attribute.QualifiedName.Namespace, content);
     }
 }
예제 #28
0
 static XmlSchemaElement GenerateValidElementsComment(XmlSchemaElement element, HelpExampleGeneratorContext context)
 {
     XmlSchemaElement firstNonAbstractElement = element;
     StringBuilder validTypes = new StringBuilder();
     foreach (XmlSchemaElement derivedElement in GetDerivedTypes(element, context))
     {
         if (firstNonAbstractElement == element)
         {
             firstNonAbstractElement = derivedElement;
         }
         if (validTypes.Length > 0)
         {
             validTypes.AppendFormat(", {0}", derivedElement.Name);
         }
         else
         {
             validTypes.AppendFormat(String.Format("Valid elements of type: {0}", derivedElement.Name));
         }
     }
     if (validTypes.Length > 0)
     {
         context.writer.WriteComment(validTypes.ToString());
     }
     return firstNonAbstractElement;
 }
예제 #29
0
 static void ChoiceHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     XmlSchemaChoice choice = (XmlSchemaChoice)schemaObject;
     InvokeHandler(choice.Items[0], context);
 }
 static void ErrorHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR2.GetString(SR2.HelpExampleGeneratorSchemaObjectNotSupported, schemaObject.GetType().Name)));
 }
예제 #31
0
 static void SimpleTypeRestrictionHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     XmlSchemaSimpleTypeRestriction restriction = (XmlSchemaSimpleTypeRestriction)schemaObject;
     foreach (XmlSchemaObject facet in restriction.Facets)
     {
         InvokeHandler(facet, context);
     }
 }
 static void ErrorHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR2.GetString(SR2.HelpExampleGeneratorSchemaObjectNotSupported, schemaObject.GetType().Name)));
 }
예제 #33
0
 static void EmptyHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
 }
 static void XmlSimpleTypeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaObject;
     if (simpleType.QualifiedName.Namespace != System.Runtime.Serialization.Globals.SerializationNamespace
         && simpleType.QualifiedName.Namespace != XmlSchemaNamespace
         && simpleType.QualifiedName.Name != "guid")
     {
         InvokeHandler(simpleType.Content, context);
     }
     string content = GenerateContentForXmlSimpleType(simpleType);
     if (String.IsNullOrEmpty(content))
     {
         if (!(simpleType.Content is XmlSchemaSimpleTypeList))
         {
             context.writer.WriteAttributeString("i", XmlSchemaInstanceNil, XmlSchemaInstanceNamespace, "true");
         }
     }
     else
     {
         context.writer.WriteString(content);
     }
 }
예제 #35
0
 static void XmlComplexTypeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     XmlSchemaComplexType complexType = (XmlSchemaComplexType)schemaObject;
     foreach (XmlSchemaObject attribute in complexType.AttributeUses.Values)
     {
         InvokeHandler(attribute, context);
     }
     if (complexType.ContentModel != null)
     {
         InvokeHandler(complexType.ContentModel, context);
     }
     InvokeHandler(complexType.ContentTypeParticle, context);
     if (complexType.IsMixed)
     {
         context.writer.WriteString("This element contains text.");
     }
 }
 static void EmptyHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
 }
예제 #37
0
 static void XmlSimpleTypeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaObject;
     if (simpleType.QualifiedName.Namespace != "http://schemas.microsoft.com/2003/10/Serialization/"
         && simpleType.QualifiedName.Namespace != XmlSchemaNamespace
         && simpleType.QualifiedName.Name != "guid")
     {
         InvokeHandler(simpleType.Content, context);
     }
     string content = GenerateContentForXmlSimpleType(simpleType);
     if (String.IsNullOrEmpty(content))
     {
         context.writer.WriteAttributeString("i", XmlSchemaInstanceNil, XmlSchemaInstanceNamespace, "true");
     }
     else
     {
         context.writer.WriteString(content);
     }
 }
        static void JsonSimpleTypeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaObject;

            // Enumerations return 0
            if (simpleType.Content != null && simpleType.Content is XmlSchemaSimpleTypeRestriction)
            {
                XmlSchemaSimpleTypeRestriction restriction = (XmlSchemaSimpleTypeRestriction)simpleType.Content;
                foreach (XmlSchemaObject facet in restriction.Facets)
                {
                    if (facet is XmlSchemaEnumerationFacet)
                    {
                        context.writer.WriteAttributeString(string.Empty, "type", string.Empty, "number");
                        context.writer.WriteString("0");
                        return;
                    }
                }
            }

            string value = GetConstantValue(simpleType.QualifiedName.Name);

            if (simpleType.QualifiedName.Name == "base64Binary")
            {
                char[] base64stream = value.ToCharArray();
                context.writer.WriteAttributeString(string.Empty, "type", string.Empty, "array");
                for (int i = 0; i < base64stream.Length; i++)
                {
                    context.writer.WriteStartElement("item", string.Empty);
                    context.writer.WriteAttributeString(string.Empty, "type", string.Empty, "number");
                    context.writer.WriteValue((int)base64stream[i]);
                    context.writer.WriteEndElement();
                }
            }
            else if (simpleType.QualifiedName.Name == "dateTime")
            {
                DateTime dateTime = DateTime.Parse("1999-05-31T11:20:00", CultureInfo.InvariantCulture);
                context.writer.WriteString("/Date(");
                context.writer.WriteValue((dateTime.ToUniversalTime().Ticks - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks) / 10000);

                switch (dateTime.Kind)
                {
                case DateTimeKind.Unspecified:
                case DateTimeKind.Local:
                    TimeSpan ts = TimeZone.CurrentTimeZone.GetUtcOffset(dateTime.ToLocalTime());
                    if (ts.Ticks < 0)
                    {
                        context.writer.WriteString("-");
                    }
                    else
                    {
                        context.writer.WriteString("+");
                    }
                    int hours = Math.Abs(ts.Hours);
                    context.writer.WriteString((hours < 10) ? "0" + hours : hours.ToString(CultureInfo.InvariantCulture));
                    int minutes = Math.Abs(ts.Minutes);
                    context.writer.WriteString((minutes < 10) ? "0" + minutes : minutes.ToString(CultureInfo.InvariantCulture));
                    break;

                case DateTimeKind.Utc:
                    break;
                }
                context.writer.WriteString(")/");
            }
            else if (simpleType.QualifiedName.Name == "char")
            {
                context.writer.WriteString(XmlConvert.ToString('a'));
            }
            else if (!String.IsNullOrEmpty(value))
            {
                if (simpleType.QualifiedName.Name == "integer" ||
                    simpleType.QualifiedName.Name == "int" ||
                    simpleType.QualifiedName.Name == "long" ||
                    simpleType.QualifiedName.Name == "unsignedLong" ||
                    simpleType.QualifiedName.Name == "unsignedInt" ||
                    simpleType.QualifiedName.Name == "short" ||
                    simpleType.QualifiedName.Name == "unsignedShort" ||
                    simpleType.QualifiedName.Name == "byte" ||
                    simpleType.QualifiedName.Name == "unsignedByte" ||
                    simpleType.QualifiedName.Name == "decimal" ||
                    simpleType.QualifiedName.Name == "float" ||
                    simpleType.QualifiedName.Name == "double" ||
                    simpleType.QualifiedName.Name == "negativeInteger" ||
                    simpleType.QualifiedName.Name == "nonPositiveInteger" ||
                    simpleType.QualifiedName.Name == "positiveInteger" ||
                    simpleType.QualifiedName.Name == "nonNegativeInteger")
                {
                    context.writer.WriteAttributeString("type", "number");
                }
                else if (simpleType.QualifiedName.Name == "boolean")
                {
                    context.writer.WriteAttributeString("type", "boolean");
                }
                context.writer.WriteString(value);
            }
            else
            {
                context.writer.WriteAttributeString("type", "null");
            }
        }
예제 #39
0
 static void JsonComplexTypeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     XmlSchemaComplexType complexType = (XmlSchemaComplexType)schemaObject;
     if (complexType.ContentModel != null)
     {
         InvokeHandler(complexType.ContentModel, context);
     }
     InvokeHandler(complexType.ContentTypeParticle, context);
 }
        static XmlSchemaElement GenerateValidElementsComment(XmlSchemaElement element, HelpExampleGeneratorContext context)
        {
            XmlSchemaElement firstNonAbstractElement = element;
            StringBuilder    validTypes = new StringBuilder();

            foreach (XmlSchemaElement derivedElement in GetDerivedTypes(element, context))
            {
                if (firstNonAbstractElement == element)
                {
                    firstNonAbstractElement = derivedElement;
                }
                if (validTypes.Length > 0)
                {
                    validTypes.AppendFormat(", {0}", derivedElement.Name);
                }
                else
                {
                    validTypes.AppendFormat(String.Format("Valid elements of type: {0}", derivedElement.Name));
                }
            }
            if (validTypes.Length > 0)
            {
                context.writer.WriteComment(validTypes.ToString());
            }
            return(firstNonAbstractElement);
        }
예제 #41
0
        static void JsonSimpleTypeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
        {
            XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaObject;
            // Enumerations return 0
            if (simpleType.Content != null && simpleType.Content is XmlSchemaSimpleTypeRestriction)
            {
                XmlSchemaSimpleTypeRestriction restriction = (XmlSchemaSimpleTypeRestriction)simpleType.Content;
                foreach (XmlSchemaObject facet in restriction.Facets)
                {
                    if (facet is XmlSchemaEnumerationFacet)
                    {
                        context.writer.WriteAttributeString(string.Empty, "type", string.Empty, "number");
                        context.writer.WriteString("0");
                        return;
                    }
                }
            }

            string value = GetConstantValue(simpleType.QualifiedName.Name);

            if (simpleType.QualifiedName.Name == "base64Binary")
            {
                char[] base64stream = value.ToCharArray();
                context.writer.WriteAttributeString(string.Empty, "type", string.Empty, "array");
                for (int i = 0; i < base64stream.Length; i++)
                {
                    context.writer.WriteStartElement("item", string.Empty);
                    context.writer.WriteAttributeString(string.Empty, "type", string.Empty, "number");
                    context.writer.WriteValue((int)base64stream[i]);
                    context.writer.WriteEndElement();
                }
            }
            else if (simpleType.QualifiedName.Name == "dateTime")
            {
                DateTime dateTime = DateTime.Parse("1999-05-31T11:20:00", CultureInfo.InvariantCulture);
                context.writer.WriteString("/Date(");
                context.writer.WriteValue((dateTime.ToUniversalTime().Ticks - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks) / 10000);

                switch (dateTime.Kind)
                {
                    case DateTimeKind.Unspecified:
                    case DateTimeKind.Local:
                        TimeSpan ts = TimeZone.CurrentTimeZone.GetUtcOffset(dateTime.ToLocalTime());
                        if (ts.Ticks < 0)
                        {
                            context.writer.WriteString("-");
                        }
                        else
                        {
                            context.writer.WriteString("+");
                        }
                        int hours = Math.Abs(ts.Hours);
                        context.writer.WriteString((hours < 10) ? "0" + hours : hours.ToString(CultureInfo.InvariantCulture));
                        int minutes = Math.Abs(ts.Minutes);
                        context.writer.WriteString((minutes < 10) ? "0" + minutes : minutes.ToString(CultureInfo.InvariantCulture));
                        break;
                    case DateTimeKind.Utc:
                        break;
                }
                context.writer.WriteString(")/");
            }
            else if (simpleType.QualifiedName.Name == "char")
            {
                context.writer.WriteString(XmlConvert.ToString('a'));
            }
            else if (!String.IsNullOrEmpty(value))
            {
                if (simpleType.QualifiedName.Name == "integer" ||
                    simpleType.QualifiedName.Name == "int" ||
                    simpleType.QualifiedName.Name == "long" ||
                    simpleType.QualifiedName.Name == "unsignedLong" ||
                    simpleType.QualifiedName.Name == "unsignedInt" ||
                    simpleType.QualifiedName.Name == "short" ||
                    simpleType.QualifiedName.Name == "unsignedShort" ||
                    simpleType.QualifiedName.Name == "byte" ||
                    simpleType.QualifiedName.Name == "unsignedByte" ||
                    simpleType.QualifiedName.Name == "decimal" ||
                    simpleType.QualifiedName.Name == "float" ||
                    simpleType.QualifiedName.Name == "double" ||
                    simpleType.QualifiedName.Name == "negativeInteger" ||
                    simpleType.QualifiedName.Name == "nonPositiveInteger" ||
                    simpleType.QualifiedName.Name == "positiveInteger" ||
                    simpleType.QualifiedName.Name == "nonNegativeInteger")
                {
                    context.writer.WriteAttributeString("type", "number");
                }
                else if (simpleType.QualifiedName.Name == "boolean")
                {
                    context.writer.WriteAttributeString("type", "boolean");
                }
                context.writer.WriteString(value);
            }
            else
            {
                context.writer.WriteAttributeString("type", "null");
            }
        }
 static IEnumerable <XmlSchemaElement> GetDerivedTypes(XmlSchemaElement element, HelpExampleGeneratorContext context)
 {
     if (element.ElementSchemaType is XmlSchemaComplexType)
     {
         foreach (XmlSchemaElement derivedElement in context.schemaSet.GlobalElements.Values.OfType <XmlSchemaElement>().Where(e =>
                                                                                                                               e.IsAbstract == false &&
                                                                                                                               e.ElementSchemaType != element.ElementSchemaType &&
                                                                                                                               e.ElementSchemaType is XmlSchemaComplexType &&
                                                                                                                               DerivesFrom((XmlSchemaComplexType)element.ElementSchemaType, (XmlSchemaComplexType)e.ElementSchemaType)))
         {
             yield return(derivedElement);
         }
     }
 }
예제 #43
0
 static IEnumerable<XmlSchemaElement> GetDerivedTypes(XmlSchemaElement element, HelpExampleGeneratorContext context)
 {
     if (element.ElementSchemaType is XmlSchemaComplexType)
     {
         foreach (XmlSchemaElement derivedElement in context.schemaSet.GlobalElements.Values.OfType<XmlSchemaElement>().Where(e =>
             e.IsAbstract == false &&
             e.ElementSchemaType != element.ElementSchemaType &&
             e.ElementSchemaType is XmlSchemaComplexType &&
             DerivesFrom((XmlSchemaComplexType)element.ElementSchemaType, (XmlSchemaComplexType)e.ElementSchemaType)))
         {
             yield return derivedElement;
         }
     }
 }
 static void InvokeHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context)
 {
     if (++context.currentDepthLevel < MaxDepthLevel)
     {
         Action<XmlSchemaObject, HelpExampleGeneratorContext> action;
         Type objectType = schemaObject.GetType();
         if (context.objectHandler.TryGetValue(objectType, out action))
         {
             action(schemaObject, context);
         }
         else if (objectType.Name != "EmptyParticle")
         {
             throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR2.GetString(SR2.HelpExampleGeneratorHandlerNotFound, schemaObject.GetType().Name)));
         }
         --context.currentDepthLevel;
     }
     else
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR2.GetString(SR2.HelpExampleGeneratorMaxDepthLevelReached, schemaObject.GetType().Name)));
     }
 }