protected string CreateFormattedVectorDeclaration(ClassElement var) { if (var.CustomType == null) { return(String.Format("{0}_VECTOR", var.Type)); } string[] cParts = var.CustomType.Split("::".ToCharArray()); string cName = cParts[cParts.Length - 1]; string collectionTypeDecl = String.Format("{0}_VECTOR", cName); return(collectionTypeDecl); }
void GetComplexTypeAttributes(XmlSchemaComplexType complexType, Dictionary <String, List <ClassElement> > classesToGenerateMap, Dictionary <String, List <EnumElement> > enumsToGenerateMap, string namespaceName) { try { if (false == classesToGenerateMap.ContainsKey(complexType.Name)) { classesToGenerateMap.Add(complexType.Name, new List <ClassElement>()); _classNames.Add(complexType.Name); } if (complexType.AttributeUses.Count > 0) { IDictionaryEnumerator enumerator = complexType.AttributeUses.GetEnumerator(); while (enumerator.MoveNext()) { XmlSchemaAttribute attribute = (XmlSchemaAttribute)enumerator.Value; ClassElement pe = new ClassElement(attribute.Name, attribute.AttributeSchemaType.TypeCode); pe.Namespace = GetNamespaceFromXsd(complexType.Parent as XmlSchema);; XmlSchemaSimpleTypeRestriction restriction = (XmlSchemaSimpleTypeRestriction)attribute.AttributeSchemaType.Content; if ((attribute.Annotation != null) && (attribute.Annotation.Items.Count > 0)) { XmlSchemaDocumentation doc = (XmlSchemaDocumentation)attribute.Annotation.Items[0]; if (null != doc) { pe.Comment = "//" + doc.Markup[0].Value; } } ExtractEnumDefinition(attribute.AttributeSchemaType.Name, restriction, enumsToGenerateMap, ref pe, namespaceName); classesToGenerateMap[complexType.Name].Add(pe); } } } catch (Exception x) { Console.WriteLine("File Name = '{0}' , Message = '{1}'", _fileUnderProcessing, x.ToString()); } }
protected String AppendCaretIfRequired(ClassElement element, String str) { if (_targetLanguage == TargetLanguage.CPP_CLI) { String caret = ""; switch (element.Type) { case XmlTypeCode.AnyAtomicType: break; case XmlTypeCode.AnyUri: break; case XmlTypeCode.Attribute: break; case XmlTypeCode.Base64Binary: break; case XmlTypeCode.Boolean: break; case XmlTypeCode.Byte: break; case XmlTypeCode.Comment: break; case XmlTypeCode.Date: caret = "^"; break; case XmlTypeCode.DateTime: caret = "^"; break; case XmlTypeCode.DayTimeDuration: break; case XmlTypeCode.Decimal: break; case XmlTypeCode.Document: break; case XmlTypeCode.Double: break; case XmlTypeCode.Duration: break; case XmlTypeCode.Element: break; case XmlTypeCode.Entity: break; case XmlTypeCode.Float: break; case XmlTypeCode.GDay: break; case XmlTypeCode.GMonth: break; case XmlTypeCode.GMonthDay: break; case XmlTypeCode.GYear: break; case XmlTypeCode.GYearMonth: break; case XmlTypeCode.HexBinary: break; case XmlTypeCode.Id: break; case XmlTypeCode.Idref: caret = "^"; break; case XmlTypeCode.Int: break; case XmlTypeCode.Integer: break; case XmlTypeCode.Item: break; case XmlTypeCode.Language: break; case XmlTypeCode.Long: break; case XmlTypeCode.NCName: break; case XmlTypeCode.Name: break; case XmlTypeCode.Namespace: break; case XmlTypeCode.NegativeInteger: break; case XmlTypeCode.NmToken: break; case XmlTypeCode.Node: break; case XmlTypeCode.NonNegativeInteger: break; case XmlTypeCode.NonPositiveInteger: break; case XmlTypeCode.None: break; case XmlTypeCode.NormalizedString: break; case XmlTypeCode.Notation: break; case XmlTypeCode.PositiveInteger: break; case XmlTypeCode.ProcessingInstruction: break; case XmlTypeCode.QName: break; case XmlTypeCode.Short: break; case XmlTypeCode.String: caret = "^"; break; case XmlTypeCode.Text: break; case XmlTypeCode.Time: break; case XmlTypeCode.Token: break; case XmlTypeCode.UnsignedByte: break; case XmlTypeCode.UnsignedInt: break; case XmlTypeCode.UnsignedLong: break; case XmlTypeCode.UnsignedShort: break; case XmlTypeCode.UntypedAtomic: break; case XmlTypeCode.YearMonthDuration: break; default: break; } str += caret; } return(str); }
protected string XSDToCppType(ClassElement element) { string retVal = string.Empty; switch (element.Type) { case XmlTypeCode.Float: retVal = "double"; break; case XmlTypeCode.Short: switch (_targetLanguage) { case TargetLanguage.CSharp: retVal = "Int16"; break; default: retVal = "int"; break; } break; case XmlTypeCode.Byte: retVal = "byte"; break; case XmlTypeCode.String: switch (_targetLanguage) { case TargetLanguage.CPP: retVal = "tstring"; break; case TargetLanguage.CPP_CLI: retVal = "String"; break; case TargetLanguage.CSharp: retVal = "string"; break; default: retVal = "tstring"; break; } break; case XmlTypeCode.Long: retVal = "long"; break; case XmlTypeCode.Double: retVal = "double"; break; case XmlTypeCode.Decimal: switch (_targetLanguage) { case TargetLanguage.CPP: retVal = "double"; break; case TargetLanguage.CPP_CLI: retVal = "System::Decimal"; break; case TargetLanguage.CSharp: retVal = "System.Decimal"; break; default: retVal = "double"; break; } break; case XmlTypeCode.Int: case XmlTypeCode.Integer: case XmlTypeCode.PositiveInteger: case XmlTypeCode.NegativeInteger: retVal = "int"; break; case XmlTypeCode.Boolean: retVal = "bool"; break; case XmlTypeCode.Element: retVal = element.CustomType; break; case XmlTypeCode.DateTime: case XmlTypeCode.Date: retVal = _targetLanguage == TargetLanguage.CPP ? "void" : "System" + NamespaceToken + "DateTime"; break; default: retVal = _targetLanguage == TargetLanguage.CPP ? "void" : "Object"; break; } return(AppendCaretIfRequired(element, retVal)); }
protected string GetDefaultsString(ClassElement e, Dictionary <String, List <EnumElement> > enumsToGenerateMap) { string retString = ""; XmlTypeCode type = e.Type; if (e.IsEnum) { string nspace = string.Empty; retString = enumsToGenerateMap[e.CustomType][0].Name; nspace = enumsToGenerateMap[e.CustomType][0].NameSpace; if (_targetLanguage == TargetLanguage.CSharp || _targetLanguage == TargetLanguage.JAVA) { return(nspace + "." + retString); } else { return(nspace + "::" + retString); } } switch (type) { case XmlTypeCode.AnyAtomicType: break; case XmlTypeCode.AnyUri: break; case XmlTypeCode.Attribute: break; case XmlTypeCode.Base64Binary: break; case XmlTypeCode.Boolean: retString = "false"; break; case XmlTypeCode.Byte: retString = "0"; break; case XmlTypeCode.Comment: break; case XmlTypeCode.Date: break; case XmlTypeCode.DateTime: break; case XmlTypeCode.DayTimeDuration: break; case XmlTypeCode.Decimal: switch (_targetLanguage) { case TargetLanguage.CSharp: retString = "default(decimal)"; break; case TargetLanguage.CPP_CLI: retString = "0"; break; default: retString = "0.0"; break; } break; case XmlTypeCode.Document: break; case XmlTypeCode.Double: switch (_targetLanguage) { case TargetLanguage.CSharp: retString = "default(double)"; break; default: retString = "0.0"; break; } break; case XmlTypeCode.Duration: break; case XmlTypeCode.Element: break; case XmlTypeCode.Entity: break; case XmlTypeCode.Float: retString = "0.0"; break; case XmlTypeCode.GDay: break; case XmlTypeCode.GMonth: break; case XmlTypeCode.GMonthDay: break; case XmlTypeCode.GYear: break; case XmlTypeCode.GYearMonth: break; case XmlTypeCode.HexBinary: retString = "0"; break; case XmlTypeCode.Id: break; case XmlTypeCode.Idref: break; case XmlTypeCode.Int: retString = "0"; break; case XmlTypeCode.Integer: retString = "0"; break; case XmlTypeCode.Item: break; case XmlTypeCode.Language: break; case XmlTypeCode.Long: retString = "0"; break; case XmlTypeCode.NCName: break; case XmlTypeCode.Name: break; case XmlTypeCode.Namespace: break; case XmlTypeCode.NegativeInteger: retString = "0"; break; case XmlTypeCode.NmToken: break; case XmlTypeCode.Node: break; case XmlTypeCode.NonNegativeInteger: retString = "0"; break; case XmlTypeCode.NonPositiveInteger: retString = "0"; break; case XmlTypeCode.None: break; case XmlTypeCode.NormalizedString: break; case XmlTypeCode.Notation: break; case XmlTypeCode.PositiveInteger: retString = "0"; break; case XmlTypeCode.ProcessingInstruction: break; case XmlTypeCode.QName: break; case XmlTypeCode.Short: retString = "0"; switch (_targetLanguage) { case TargetLanguage.CSharp: retString = "default(Int16)"; break; default: retString = "0"; break; } break; case XmlTypeCode.String: retString = ""; break; case XmlTypeCode.Text: retString = ""; break; case XmlTypeCode.Time: break; case XmlTypeCode.Token: break; case XmlTypeCode.UnsignedByte: retString = "0"; break; case XmlTypeCode.UnsignedInt: retString = "0"; break; case XmlTypeCode.UnsignedLong: retString = "0"; break; case XmlTypeCode.UnsignedShort: retString = "0"; break; case XmlTypeCode.UntypedAtomic: break; case XmlTypeCode.YearMonthDuration: break; default: break; } return(retString); }
void ExtractEnumDefinition(string typeName, XmlSchemaSimpleTypeRestriction restriction, Dictionary <String, List <EnumElement> > enumsToGenerateMap, ref ClassElement pe, string nameSpace) { if (null != restriction) { foreach (XmlSchemaEnumerationFacet fac in restriction.Facets) { XmlSchema xsd = restriction.Parent.Parent as XmlSchema; nameSpace = GetNamespaceFromXsd(xsd); String enName = String.Empty; EnumElement enm = null; String enValue = String.Empty; bool valueExceedsIntRange = false; if (null != fac) { XmlSchemaDocumentation doc = (XmlSchemaDocumentation)fac.Annotation.Items[0]; enValue = fac.Value; try { if (long.Parse(enValue.Replace("0x", ""), System.Globalization.NumberStyles.AllowHexSpecifier) > int.MaxValue) { valueExceedsIntRange = true; } } catch (Exception) { } if (null != doc) { enName = doc.Markup[0].Value; switch (_targetLanguage) { case TargetLanguage.CSharp: case TargetLanguage.JAVA: enName = typeName + "." + enName; break; case TargetLanguage.CPP_CLI: enName = typeName + "::" + enName; break; } } enm = new EnumElement(enName, enValue); //AppendNameSpace(ref typeName, nameSpace); if (false == enumsToGenerateMap.ContainsKey(typeName)) { enumsToGenerateMap.Add(typeName, new List <EnumElement>()); } pe.IsEnum = true; pe.CustomType = typeName; pe.Type = XmlTypeCode.Element; enm.ValueExceedsIntRange = valueExceedsIntRange; bool enumMemberExists = false; foreach (EnumElement var in enumsToGenerateMap[typeName]) { if (var.Name == enName) { enumMemberExists = true; break; } } //if (_targetLanguage == TargetLanguage.JAVA) // enm.NameSpace = nameSpace + "." + xsd.Id; // else enm.NameSpace = nameSpace; if (false == enumMemberExists) { enumsToGenerateMap[typeName].Add(enm); } } } } }
void IterateOverSchemaSequence(XmlSchemaObject schemaObject, Dictionary <String, List <ClassElement> > classesToGenerateMap, Dictionary <String, List <EnumElement> > enumsToGenerateMap, string namespaceName) { try { XmlSchemaElement element = schemaObject as XmlSchemaElement; if (element != null) { return; } XmlSchemaComplexType complexType = schemaObject as XmlSchemaComplexType; if (complexType == null) { return; } XmlSchemaSequence sequence = complexType.ContentTypeParticle as XmlSchemaSequence; if (null == sequence) { GetComplexTypeAttributes(complexType, classesToGenerateMap, enumsToGenerateMap, namespaceName); _classNamesNoNestedTypes.Add(complexType.Name); return; } foreach (XmlSchemaElement childElement in sequence.Items) { if (false == classesToGenerateMap.ContainsKey(complexType.Name)) { _classNames.Add(complexType.Name); classesToGenerateMap.Add(complexType.Name, new List <ClassElement>()); GetComplexTypeAttributes(complexType, classesToGenerateMap, enumsToGenerateMap, namespaceName); } ClassElement proxyElement = null; if (null != childElement.ElementSchemaType.Name)//an element of custom complex types { if (false == classesToGenerateMap.ContainsKey(childElement.ElementSchemaType.Name)) { IterateOverSchemaSequence(childElement, classesToGenerateMap, enumsToGenerateMap, namespaceName); } string customFQType = childElement.ElementSchemaType.Name; if (_externalClassesnNamespaces.ContainsKey(customFQType)) { AppendNameSpace(ref customFQType, _externalClassesnNamespaces[customFQType]); } proxyElement = new ClassElement(childElement.Name, customFQType); } else { proxyElement = new ClassElement(childElement.Name, childElement.ElementSchemaType.TypeCode); } if (null != childElement.MaxOccursString)//is collection { proxyElement.IsCollection = true; } if ((childElement.Annotation != null) && (childElement.Annotation.Items.Count > 0)) { XmlSchemaDocumentation doc = (XmlSchemaDocumentation)childElement.Annotation.Items[0]; if (null != doc) { proxyElement.Comment = "//" + doc.Markup[0].Value; } } proxyElement.Namespace = namespaceName; classesToGenerateMap[complexType.Name].Add(proxyElement); } } catch (Exception x) { Console.WriteLine("File Name = '{0}' , Message = '{1}'", _fileUnderProcessing, x.ToString()); } }