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); } }
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)); } }
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)); }
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 ErrorHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context) { throw new InvalidOperationException(String.Format("Schema object {0} not supported.", schemaObject.GetType().Name)); }
static void ContentHandler(XmlSchemaObject schemaObject, HelpExampleGeneratorContext context) { XmlSchemaContentModel model = (XmlSchemaContentModel)schemaObject; InvokeHandler(model.Content, context); }
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 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(); }
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); }
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 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; }
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))); }
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))); }
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); } }
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) { }
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"); } }
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); }
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); } } }
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))); } }